비고
지식 저장소 는 Azure Storage에 있고 Azure AI Search 기술 세트의 출력을 포함하는 보조 스토리지입니다. 지식 출처 및 지식 베이스는 에이전트적 검색 워크플로에서 사용되는 것과 별개입니다.
Azure AI 검색에서 "데이터 셰이핑"은 Azure Storage에서 테이블, 개체 및 파일에 프로젝션하려는 콘텐츠의 데이터 표현을 만드는 지식 저장소 워크플로의 한 단계를 설명합니다.
기술이 실행됨에 따라 노드 계층 구조에서 보강 트리에 출력이 기록됩니다. 보강 트리 전체를 보고 사용해야 할 수도 있지만 번역된 텍스트 또는 추출된 엔터티와 관련된 노드를 특정 테이블에 배치할 때와 같이 여러 시나리오에 따라 노드 하위 집합을 만드는 경우처럼 더 세부적인 조정이 필요한 경우가 더 많습니다.
자체적으로 보강 트리는 지식 저장소에 해당 콘텐츠가 표시된 방식을 알려주는 논리를 포함하지 않습니다. 데이터 셰이프는 각 테이블, 개체, 파일 프로젝션에 저장되는 항목에 대한 스키마를 제공하여 이러한 격차를 메워줍니다. 데이터 셰이프는 보강된 데이터에 대한 사용자 지정 정의 또는 보기와 같습니다. 필요한 만큼 셰이프를 만들고 이를 지식 저장소 정의에서 프로젝션에 할당할 수 있습니다.
셰이프 만들기에 대한 접근 방법
지식 저장소에 프로젝션할 수 있도록 보강된 콘텐츠를 셰이프하는 방법에는 두 가지가 있습니다.
셰이퍼 기술을 사용하여 보강 트리에서 프로젝션에 대해 명시적으로 사용되는 노드를 만듭니다. 대부분의 기술은 새 콘텐츠를 만듭니다. 반면, 쉐이퍼 기술은 일반적으로 여러 노드를 단일 복합 개체로 통합하기 위해 기존 노드와 함께 작동합니다. 이 기술은 여러 노드의 출력을 물리적으로 테이블의 열로 표현하려는 테이블에 유용합니다.
프로젝션 정의 자체 내에서 인라인 셰이프를 사용합니다.
셰이퍼 기술을 사용하면 여러 프로젝션 또는 심지어 다른 기술에서도 사용될 수 있도록 셰이프가 외부화됩니다. 또한 보강 트리의 모든 변형이 해당 기술 내에 포함되고 출력이 재사용 가능한 개체가 되도록 보장합니다. 반대로, 인라인 셰이핑을 사용하면 필요한 셰이프를 만들 수 있지만 이는 익명 개체이며 정의된 프로젝션에만 사용할 수 있습니다.
두 방식을 함께 사용할 수도 있고 따로 사용할 수도 있습니다. 이 문서에서는 테이블 프로젝션을 위한 셰이퍼 기술과 핵심 문구 테이블 프로젝션을 사용한 인라인 셰이핑의 두 방식을 모두 보여줍니다.
셰이퍼 기술 사용
셰이퍼 기술은 일반적으로 기술 집합의 끝에 배치되며, 프로젝션에 전달하려는 데이터의 보기를 만듭니다. 이 예제에서는 "reviews_text", "reviews_title", "AzureSearch_DocumentKey" 노드와 페이징된 검토의 감정 점수와 핵심 문구가 포함된 “tableprojection”이라는 셰이프를 만듭니다.
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"name": "#5",
"description": null,
"context": "/document",
"inputs": [
{
"name": "reviews_text",
"source": "/document/reviews_text",
"sourceContext": null,
"inputs": []
},
{
"name": "reviews_title",
"source": "/document/reviews_title",
"sourceContext": null,
"inputs": []
},
{
"name": "AzureSearch_DocumentKey",
"source": "/document/AzureSearch_DocumentKey",
"sourceContext": null,
"inputs": []
},
{
"name": "pages",
"source": null,
"sourceContext": "/document/reviews_text/pages/*",
"inputs": [
{
"name": "Sentiment",
"source": "/document/reviews_text/pages/*/Sentiment",
"sourceContext": null,
"inputs": []
},
{
"name": "LanguageCode",
"source": "/document/Language",
"sourceContext": null,
"inputs": []
},
{
"name": "Page",
"source": "/document/reviews_text/pages/*",
"sourceContext": null,
"inputs": []
},
{
"name": "keyphrase",
"sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
"inputs": [
{
"source": "/document/reviews_text/pages/*/Keyphrases/*",
"name": "Keyphrases"
}
]
}
]
}
],
"outputs": [
{
"name": "output",
"targetName": "tableprojection"
}
]
}
SourceContext 속성
셰이퍼 기술 내에서 입력은 sourceContext 요소를 포함할 수 있습니다. 이 동일한 속성은 프로젝션의 인라인 셰이프에도 사용될 수 있습니다.
sourceContext는 보강 파이프라인에서 다중 수준의 중첩 개체를 생성하기 위해 사용됩니다. 입력이 기술 컨텍스트와 ‘다른’ 컨텍스트에 있는 경우 sourceContext를 사용합니다.
sourceContext를 사용하려면 원본으로 지정된 특정 요소를 사용하여 중첩된 입력을 정의해야 합니다.
이전 예제에서는 보다 효율적인 분석을 위해 페이지로 분할된 텍스트에서 감정 분석 및 핵심 구 추출을 수행했습니다. 점수 및 문구를 테이블에 프로젝션한다고 가정하면 이제 점수 및 문구를 제공하는 중첩된 입력으로 컨텍스트를 설정해야 합니다.
여러 테이블에 셰이프 프로젝션
이전 섹션에서 tableprojection 노드를 outputs 안에 정의했으므로 tableprojection 노드의 일부를 각각 관련된 테이블로 나눌 수 있습니다.
"projections": [
{
"tables": [
{
"tableName": "hotelReviewsDocument",
"generatedKeyName": "Documentid",
"source": "/document/tableprojection"
},
{
"tableName": "hotelReviewsPages",
"generatedKeyName": "Pagesid",
"source": "/document/tableprojection/pages/*"
},
{
"tableName": "hotelReviewsKeyPhrases",
"generatedKeyName": "KeyPhrasesid",
"source": "/document/tableprojection/pages/*/keyphrase/*"
}
]
}
]
테이블 프로젝션을 위한 인라인 모양
인라인 셰이핑은 프로젝션 정의 자체 내에서 새 셰이프를 형성하는 기능입니다. 인라인 셰이핑의 특성은 다음과 같습니다.
- 셰이프는 그것을 포함하는 프로젝션에서만 사용됩니다.
- 도형은 쉐이퍼 기술이 생성하는 것과 동일할 수 있습니다.
인라인 셰이프는 sourceContext 및 inputs를 사용하여 생성됩니다.
| 속성 | 설명 |
|---|---|
| 출처 컨텍스트 | 프로젝션의 루트를 설정합니다. |
| 입력 | 각 입력은 테이블의 열입니다. Name은 열 이름입니다. Source는 값을 제공하는 보강 노드입니다. |
이전 예제와 동일한 데이터를 프로젝션하기 위해, 인라인 프로젝션 옵션은 다음과 같습니다.
"projections": [
{
"tables": [
{
"tableName": "hotelReviewsInlineDocument",
"generatedKeyName": "Documentid",
"sourceContext": "/document",
"inputs": [
{
"name": "reviews_text",
"source": "/document/reviews_text"
},
{
"name": "reviews_title",
"source": "/document/reviews_title"
},
{
"name": "AzureSearch_DocumentKey",
"source": "/document/AzureSearch_DocumentKey"
}
]
},
{
"tableName": "hotelReviewsInlinePages",
"generatedKeyName": "Pagesid",
"sourceContext": "/document/reviews_text/pages/*",
"inputs": [
{
"name": "Sentiment",
"source": "/document/reviews_text/pages/*/Sentiment"
},
{
"name": "LanguageCode",
"source": "/document/Language"
},
{
"name": "Page",
"source": "/document/reviews_text/pages/*"
}
]
},
{
"tableName": "hotelReviewsInlineKeyPhrases",
"generatedKeyName": "KeyPhraseId",
"sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
"inputs": [
{
"name": "Keyphrases",
"source": "/document/reviews_text/pages/*/Keyphrases/*"
}
]
}
]
}
]
두 접근 방식 모두에서 관찰되는 한 가지 항목은 “Keyphrases”의 값이 “sourceContext”를 사용하여 프로젝션되는 방법입니다. 문자열 컬렉션을 포함하는 “Keyphrases” 노드는 그 자체로 페이지 텍스트의 자식입니다. 하지만 프로젝션에 JSON 개체가 필요하고 페이지가 기본 형식(문자열)이기 때문에 이름이 지정된 속성을 사용하여 핵심 문구를 개체로 래핑하기 위해 “sourceContext”가 사용됩니다. 이 방법은 심지어 기본 형식도 독립적으로 프로젝션할 수 있습니다.
개체 프로젝션을 위한 인라인 모양
쉐이퍼 기술을 사용하여 새 도형을 생성하거나 개체 프로젝션의 인라인 셰이핑을 사용할 수 있습니다. 테이블 예제에서는 도형을 만들고 자르는 방법을 보여주지만, 이 예제에서는 인라인 셰이핑을 사용하는 방법을 보여줍니다.
인라인 셰이핑은 프로젝션에 대한 입력 정의에서 새 도형을 만드는 기능입니다. 인라인 셰이핑은 셰이퍼 기술이 생성하는 것과 동일한 익명 개체를 생성합니다(이 경우 projectionShape). 인라인 셰이핑은 다시 사용할 계획이 없는 도형을 정의하는 경우에 유용합니다.
프로젝션 속성은 배열입니다. 이 예제에서는 knowledgeStore 정의에 인라인 프로젝션이 포함된 새 프로젝션 인스턴스를 배열에 추가합니다. 인라인 프로젝션을 사용하는 경우 셰이퍼 기술을 생략할 수 있습니다.
"knowledgeStore" : {
"storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
"projections": [
{
"tables": [ ],
"objects": [
{
"storageContainer": "sampleobject",
"source": null,
"generatedKeyName": "myobject",
"sourceContext": "/document",
"inputs": [
{
"name": "metadata_storage_name",
"source": "/document/metadata_storage_name"
},
{
"name": "metadata_storage_path",
"source": "/document/metadata_storage_path"
},
{
"name": "content",
"source": "/document/content"
},
{
"name": "keyPhrases",
"source": "/document/merged_content/keyphrases/*"
},
{
"name": "entities",
"source": "/document/merged_content/entities/*/name"
},
{
"name": "ocrText",
"source": "/document/normalized_images/*/text"
},
{
"name": "ocrLayoutText",
"source": "/document/normalized_images/*/layoutText"
}
]
}
],
"files": []
}
]
}
다음 단계
이 문서에서는 프로젝션 셰이프의 개념 및 원리에 대해 설명합니다. 다음 단계에서는 테이블, 개체 및 파일 프로젝션을 위해 셰이프가 어떻게 패턴으로 적용되는지 알아보세요.