쉐이퍼 인식 기술
쉐이퍼 기술은 기술 세트에 의해 생성된 메모리 내 보강 트리의 구조를 재구성하거나 수정하는 데 사용됩니다. 기술 출력을 검색 필드에 직접 매핑할 수 없는 경우 쉐이퍼 기술을 추가하여 검색 인덱스 또는 지식 저장소에 필요한 데이터 셰이프를 만들 수 있습니다.
이 기술에 대한 기본 사용 사례는 다음과 같습니다.
지식 저장소를 채우고 있습니다. 지식 저장소의 테이블 및 개체의 물리적 구조는 프로젝션을 통해 정의됩니다. 쉐이퍼 기술은 프로젝션에 푸시할 수 있는 데이터 셰이프를 만들어 세분성을 추가합니다.
시나리오 1에 설명된 대로 검색 인덱스의 단일 구조(일반적으로 복잡한 형식)에 여러 기술 출력을 매핑하려고 합니다.
기술은 여러 출력을 생성하지만 시나리오 2에 설명된 대로 단일 필드(복합 형식일 필요는 없음)로 결합하려고 합니다. 예를 들어 제목과 작성자를 단일 필드로 결합합니다.
기술은 자식 요소를 사용하여 여러 출력을 생성하며 이를 결합하려고 합니다. 이 사용 사례는 시나리오 3에 설명되어 있습니다.
쉐이 퍼 기술의 출력 이름은 항상 "출력"입니다. 내부적으로 파이프라인은 아래 예제와 같이 "analyzedText"와 같은 다른 이름을 매핑할 수 있지만 쉐이퍼 기술 자체는 응답에서 "출력"을 반환합니다. 보강된 문서를 디버깅하고 명명 불일치를 확인하거나 사용자 지정 기술을 빌드하고 응답을 직접 구조화하는 경우에 중요할 수 있습니다.
참고 항목
이 기술은 Azure AI 서비스에 바인딩되지 않습니다. 청구할 수 없으며 Azure AI 서비스 키 요구 사항이 없습니다.
@odata.type
Microsoft.Skills.Util.ShaperSkill
시나리오 1: 복합 형식
각각 텍스트와 감정의 두 멤버가 있는 analyzedText라는 구조를 만들려는 시나리오를 고려합니다. 인덱스에서 다중 파트 검색 가능 필드는 복합 형식이라고 하며 원본 데이터에 매핑되는 해당 복합 구조가 있는 경우 생성되는 경우가 많습니다.
그러나 복잡한 형식을 만드는 또 다른 방법은 쉐이퍼 기술을 사용하는 것입니다. 이 기술을 기술 세트에 포함하면 기술 세트를 처리하는 동안 메모리 내 작업이 중첩된 구조의 데이터 셰이프를 출력할 수 있으며, 인덱스의 복합 형식에 매핑될 수 있습니다.
다음 예제 기술 정의는 멤버 이름을 입력으로 제공합니다.
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"context": "/document/content/phrases/*",
"inputs": [
{
"name": "text",
"source": "/document/content/phrases/*"
},
{
"name": "sentiment",
"source": "/document/content/phrases/*/sentiment"
}
],
"outputs": [
{
"name": "output",
"targetName": "analyzedText"
}
]
}
샘플 인덱스
기술 세트는 인덱서에 의해 호출되고 인덱서는 인덱스가 필요합니다. 인덱스의 복합 필드 표현은 다음 예제와 유사합니다.
"name":"my-index",
"fields":[
{ "name":"myId", "type":"Edm.String", "key":true, "filterable":true },
{ "name":"analyzedText", "type":"Edm.ComplexType",
"fields":[
{
"name":"text",
"type":"Edm.String",
"facetable":false,
"filterable":false,
"searchable":true,
"sortable":false },
{
"name":"sentiment",
"type":"Edm.Double",
"facetable":true,
"filterable":true,
"searchable":true,
"sortable":true }
}
기술 입력
이 쉐이퍼 기술에 사용할 수 있는 입력을 제공하는 들어오는 JSON 문서는 다음과 같습니다.
{
"values": [
{
"recordId": "1",
"data": {
"text": "this movie is awesome",
"sentiment": 0.9
}
}
]
}
기술 출력
쉐이퍼 기술은 텍스트와 감정의 결합된 요소를 사용하여 analyzedText라는 새 요소를 생성합니다. 이 출력은 인덱스 스키마를 준수합니다. Azure AI Search 인덱스로 가져오고 인덱싱됩니다.
{
"values": [
{
"recordId": "1",
"data":
{
"analyzedText":
{
"text": "this movie is awesome" ,
"sentiment": 0.9
}
}
}
]
}
시나리오 2: 입력 통합
또 다른 예에서는 파이프라인 처리의 여러 단계에서 책의 제목과 책의 다른 페이지에 장 제목을 추출했다고 상상해 보십시오. 이제 이러한 다양한 출력으로 구성된 단일 구조를 만들 수 있습니다.
이 시나리오에 대한 쉐이퍼 기술 정의는 다음 예제와 같을 수 있습니다.
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"context": "/document",
"inputs": [
{
"name": "title",
"source": "/document/content/title"
},
{
"name": "chapterTitles",
"source": "/document/content/pages/*/chapterTitles/*/title"
}
],
"outputs": [
{
"name": "output",
"targetName": "titlesAndChapters"
}
]
}
기술 출력
이 경우 쉐이퍼는 모든 장 제목을 평면화하여 단일 배열을 만듭니다.
{
"values": [
{
"recordId": "1",
"data": {
"titlesAndChapters": {
"title": "How to be happy",
"chapterTitles": [
"Start young",
"Laugh often",
"Eat, sleep and exercise"
]
}
}
}
]
}
시나리오 3: 중첩 컨텍스트에서 입력 통합
책의 장 제목과 장 번호가 있고 콘텐츠에 대한 엔터티 인식 및 핵심 구를 실행했으며 이제 다른 기술의 결과를 장 이름, 엔터티 및 핵심 구가 있는 단일 셰이프로 집계해야 한다고 상상해 보십시오.
다음은 "chapterTitles" 입력에 선택적 sourceContext
속성을 추가하는 예제입니다. 및 sourceContext
속성은 source
상호 배타적입니다. 입력이 기술의 컨텍스트에 있는 경우 사용할 source
수 있습니다. 입력이 기술 컨텍스트sourceContext
와 다른 컨텍스트에 있는 경우 . 따라서 sourceContext
각 입력에 명명된 노드를 채우는 데 사용되는 특정 요소를 식별하는 중첩된 입력 source
을 정의해야 합니다.
이 시나리오에 대한 쉐이퍼 기술 정의는 다음 예제와 같을 수 있습니다.
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"context": "/document",
"inputs": [
{
"name": "title",
"source": "/document/content/title"
},
{
"name": "chapterTitles",
"sourceContext": "/document/content/pages/*/chapterTitles/*",
"inputs": [
{
"name": "title",
"source": "/document/content/pages/*/chapterTitles/*/title"
},
{
"name": "number",
"source": "/document/content/pages/*/chapterTitles/*/number"
}
]
}
],
"outputs": [
{
"name": "output",
"targetName": "titlesAndChapters"
}
]
}
기술 출력
이 경우 쉐이퍼는 복합 형식을 만듭니다. 이 구조는 메모리 내에 있습니다. 지식 저장소에 저장하려는 경우 스토리지 특성을 정의하는 기술 세트에 프로젝션을 만들어야 합니다.
{
"values": [
{
"recordId": "1",
"data": {
"titlesAndChapters": {
"title": "How to be happy",
"chapterTitles": [
{ "title": "Start young", "number": 1},
{ "title": "Laugh often", "number": 2},
{ "title": "Eat, sleep and exercise", "number: 3}
]
}
}
}
]
}