Azure AI 검색에서의 기술 세트 개념
이 문서는 기술 세트 개념 및 구성에 대한 더 깊은 이해가 필요하며, Azure AI 검색에서 적용된 AI의 고급 개념에 익숙하다고 가정되는 개발자를 위한 것입니다.
기술 세트는 인덱서에 연결된 Azure AI 검색의 재사용 가능한 개체입니다. 여기에는 외부 데이터 원본에서 검색된 문서에 대해 기본 제공 AI 또는 외부 사용자 지정 처리를 호출하는 하나 이상의 기술이 포함되어 있습니다.
다음 다이어그램에서는 기술 세트 실행의 기본 데이터 흐름을 보여 줍니다.
기술 세트 처리의 시작부터 종료까지, 기술은 메모리에 있는 보강된 문서를 읽고 씁니다. 처음에는 보강된 문서가 데이터 원본에서 추출된 원시 콘텐츠("/document"
루트 노드로 명시됨)일 뿐입니다. 각 기술이 실행되면 각 기술은 출력을 그래프의 노드로 작성함에 따라 보강된 문서에서 구조와 핵심 내용을 갖추게 됩니다.
기술 세트 실행이 완료되면 보강된 문서의 출력이 사용자가 정의한 출력 필드 매핑을 통해 인덱스로 이동합니다. 원본에서 인덱스로 그대로 전송하려는 모든 원시 콘텐츠는 필드 매핑을 통해 정의됩니다.
적용된 AI를 구성하려면 기술 세트와 인덱서에서 설정을 지정합니다.
기술 집합 정의
기술 세트는 이미지 파일의 텍스트 번역이나 OCR(광학 문자 인식)과 같은 보강을 수행하는 하나 이상의 기술을 배열한 것입니다. 기술은 Microsoft의 기본 제공 기술이거나 외부에서 호스트하는 처리 논리에 대한 사용자 지정 기술일 수 있습니다. 기술 세트는 인덱싱 중에 사용되거나 지식 저장소에 프로젝션되는 보강된 문서를 생성합니다.
기술에는 context(컨텍스트), inputs(입력) 및 outputs(출력)가 있습니다.
context는 문서당 한 번 또는 컬렉션의 각 항목당 한 번일 수 있는 작업의 범위를 나타냅니다.
inputs는 "source" 및 "name"에서 지정된 노드를 식별하는 보강된 문서의 노드에서 시작됩니다.
outputs는 새 노드로 보강된 문서에 다시 보내집니다. 값은 노드 "이름"과 노드 콘텐츠입니다. 노드 이름이 중복되면 명확성을 위해 대상 이름을 설정할 수 있습니다.
기술 컨텍스트
각 기술에는 컨텍스트가 있으며, 컨텍스트는 전체 문서(/document
) 또는 트리의 하위 노드(/document/countries/*
)입니다.
컨텍스트는 다음을 결정합니다.
단일 값(필드당 한 번, 문서당 한 번) 또는 컬렉션에 대해 기술이 실행되는 횟수입니다. 여기서
/*
을(를) 추가하면 컬렉션의 각 인스턴스에 대한 기술 호출이 발생합니다.출력 선언 또는 보강 트리에서 기술 출력이 추가되는 위치. 출력은 항상 트리에 컨텍스트 노드의 자식으로 추가됩니다.
입력 셰이프. 다중 수준 컬렉션의 경우 컨텍스트를 부모 컬렉션으로 설정하면 기술의 입력 셰이프에 영향을 줍니다. 예를 들어 국가/지역 목록이 포함된 보강 트리가 있는 경우 각 항목은 우편 번호 목록을 포함하는 시/도 목록으로 보강되고, 컨텍스트를 설정하는 방법에 따라 입력 해석 방법이 결정됩니다.
Context 입력 입력 셰이프 기술 호출 /document/countries/*
/document/countries/*/states/*/zipcodes/*
해당 국가/지역의 모든 우편 번호 목록 국가/지역당 한 번 /document/countries/*/states/*
/document/countries/*/states/*/zipcodes/*
시/도의 우편 번호 목록 국가/지역 및 시/도 조합당 한 번
기술 종속성
한 기술의 출력을 다른 기술에 공급하는 경우 기술은 독립적으로 병렬로 실행되거나 순차적으로 실행될 수 있습니다. 다음 예제에서는 순서대로 실행되는 두 가지 기본 제공 기술을 보여 줍니다.
기술 #1은 "reviews_text" 원본 필드의 콘텐츠를 입력으로 수락하고 해당 콘텐츠를 5,000자 "페이지" 출력으로 분할하는 텍스트 분할 기술입니다. 큰 텍스트를 더 작은 청크로 분할하면 감정 감지와 같은 기술에 대해 더 나은 결과를 생성할 수 있습니다.
기술 #2는 감정 검색 기술로, “pages”를 입력으로 수락하고 감정 분석의 결과를 포함하는 출력으로 “Sentiment”라는 새 필드를 생성합니다.
감정 분석에서 첫 번째 기술("pages")의 출력이 사용되는 방법을 확인합니다. 여기서 "/document/reviews_text/pages/*"는 컨텍스트이면서 입력입니다. 경로 공식화에 대한 자세한 내용은 보강을 참조하는 방법을 참조하세요.
{
"skills": [
{
"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "#1",
"description": null,
"context": "/document/reviews_text",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 5000,
"inputs": [
{
"name": "text",
"source": "/document/reviews_text"
}
],
"outputs": [
{
"name": "textItems",
"targetName": "pages"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Text.SentimentSkill",
"name": "#2",
"description": null,
"context": "/document/reviews_text/pages/*",
"defaultLanguageCode": "en",
"inputs": [
{
"name": "text",
"source": "/document/reviews_text/pages/*",
}
],
"outputs": [
{
"name": "sentiment",
"targetName": "sentiment"
},
{
"name": "confidenceScores",
"targetName": "confidenceScores"
},
{
"name": "sentences",
"targetName": "sentences"
}
]
}
. . .
]
}
보강 트리
보강된 문서는 기술을 통해 도입된 모든 변경 내용을 수집하는 기술 세트 실행 중에 만들어지는 임시 트리와 같은 데이터 구조입니다. 전체적으로 보강은 주소 지정 가능한 노드의 계층 구조로 표시됩니다. 또한 노드에는 외부 데이터 원본에서 그대로 전달되는 보강되지 않은 필드도 포함됩니다.
보강된 문서는 기술 세트 실행 기간 동안 존재하지만 캐시하거나 지식 저장소로 보낼 수 있습니다.
보강된 문서는 처음에는 문서 크래킹 중에 데이터 원본에서 추출된 콘텐츠에 불과하며, 원본에서 텍스트와 이미지가 추출되어 언어 또는 이미지 분석에 사용됩니다.
초기 콘텐츠는 메타데이터 및 루트 노드(document/content
)입니다. 루트 노드는 일반적으로 문서 크래킹 중에 데이터 원본에서 추출된 전체 문서 또는 정규화된 이미지입니다. 보강 트리에서 초기 콘텐츠를 설명하는 방법은 각 데이터 원본 형식에 따라 달라집니다. 다음 표에서는 지원되는 여러 데이터 원본에 대한 보강 파이프라인으로 들어가는 문서의 상태를 보여줍니다.
데이터 원본\구문 분석 모드 | 기본값 | JSON, JSON 줄 및 CSV |
---|---|---|
Blob Storage | /document/content /document/normalized_images/* = |
/document/{key1} /document/{key2} = |
Azure SQL | /document/{column1} /document/{column2} = |
해당 없음 |
Azure Cosmos DB | /document/{key1} /document/{key2} = |
해당 없음 |
기술이 실행되면 출력이 새 노드로 보강 트리에 추가됩니다. 기술 실행이 전체 문서에 걸쳐 있는 경우 노드가 루트 아래의 첫 번째 수준에 추가됩니다.
노드는 다운스트림 기술에 대한 입력으로 사용할 수 있습니다. 예를 들어 번역된 문자열과 같은 콘텐츠를 만드는 기술은 엔터티를 인식하거나 핵심 구를 추출하는 기술에 대한 입력이 될 수 있습니다.
디버그 세션 시각적 편집기를 통해 보강 트리를 시각화하고 사용할 수 있지만 대부분 내부 구조입니다.
보강은 변경할 수 없습니다. 일단 만들어지면 노드를 편집할 수 없습니다. 기술 세트가 복잡해질수록 보강 트리 역시 복잡해지겠지만, 보강 트리의 모든 노드를 인덱스나 지식 저장소로 만들어야 하는 것은 아닙니다.
사용하려는 항목만 유지하도록 필요에 따라 보강 출력의 하위 집합만 유지할 수 있습니다. 인덱서 정의의 출력 필드 매핑은 검색 인덱스에서 실제로 수집되는 콘텐츠를 결정합니다. 마찬가지로 지식 저장소를 만드는 경우 출력을 프로젝션에 할당된 셰이프에 매핑할 수 있습니다.
참고 항목
보강 트리 형식을 사용하면 보강 파이프라인이 메타데이터를 기본 데이터 형식에도 연결할 수 있습니다. 메타데이터는 유효한 JSON 개체가 아니지만, 지식 저장소의 프로젝션 정의에서 유효한 JSON 형식으로 프로젝션될 수 있습니다. 자세한 내용은 쉐이퍼 기술을 참조하세요.
인덱서 정의
인덱서에는 인덱서 실행을 구성하는 데 사용되는 속성과 매개 변수가 있습니다. 이러한 속성 중에는 검색 인덱스의 필드에 대한 데이터 경로를 설정하는 매핑이 있습니다.
다음 두 가지 매핑 세트가 있습니다.
"fieldMappings"는 원본 필드를 검색 필드에 매핑합니다.
"outputFieldMappings"는 보강된 문서의 노드를 검색 필드에 매핑합니다.
"sourceFieldName" 속성은 데이터 원본의 필드 또는 보강 트리의 노드를 지정합니다. "targetFieldName" 속성은 콘텐츠를 받는 인덱스의 검색 필드를 지정합니다.
보강 예제
호텔 리뷰 기술 세트를 참조 지점으로 사용하는 이 예제에서는 기술 실행을 통해 보강 트리가 어떻게 진화하는지 개념 다이어그램을 사용하여 설명합니다.
이 예제에서는 다음과 같은 내용도 보여줍니다.
- 기술의 컨텍스트와 입력이 작동하여 기술 실행 횟수를 결정하는 원리
- 컨텍스트에서 입력 셰이프의 기준이 되는 것
이 예제에서 CSV 파일의 원본 필드에는 호텔에 대한 리뷰("reviews_text") 및 등급("reviews_rating")이 포함되어 있습니다. 인덱서는 Blob 스토리지의 메타데이터 필드를 추가하고, 기술은 번역된 텍스트, 감정 점수 및 핵심 구 감지를 추가합니다.
호텔 리뷰 예제에서 보강 프로세스 내의 "문서"는 단일 호텔 리뷰를 나타냅니다.
팁
Azure Portal 또는 REST API에서 이 데이터에 대한 검색 인덱스 및 지식 저장소를 만들 수 있습니다. 디버그 세션을 사용하여 기술 세트 컴퍼지션, 의존성 및 보강 트리에 미치는 영향에 대한 인사이트를 얻을 수도 있습니다. 이 문서의 이미지는 디버그 세션에서 가져옵니다.
개념적으로 초기 트리는 다음과 같습니다.
모든 보강의 루트 노드는 "/document"
입니다. Blob 인덱서를 사용하는 경우 "/document"
노드에는 "/document/content"
및 "/document/normalized_images"
의 자식 노드가 있습니다. 이 예에서와 같이 데이터가 CSV일 때 열 이름은 "/document"
아래의 노드에 매핑됩니다.
기술 #1: 분할 기술
원본 콘텐츠가 많은 텍스트 청크로 구성된 경우 언어, 감정 및 핵심 구 검색의 정확도를 높이기 위해 텍스트를 더 작은 구성 요소로 분할하는 것이 유용합니다. 사용할 수 있는 두 가지는 페이지와 문장입니다. 페이지는 약 5,000자의 문자로 구성됩니다.
일반적으로 기술 세트에서 텍스트 분할 기술이 가장 먼저입니다.
"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "#1",
"description": null,
"context": "/document/reviews_text",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 5000,
"inputs": [
{
"name": "text",
"source": "/document/reviews_text"
}
],
"outputs": [
{
"name": "textItems",
"targetName": "pages"
}
]
"/document/reviews_text"
기술 컨텍스트에서 분할 기술은 reviews_text
마다 한 번씩 실행됩니다. 기술 출력은 reviews_text
가 5,000개 문자 세그먼트로 청크 분할된 목록입니다. 분할 기술의 출력 이름은 pages
이며 보강 트리에 추가됩니다. targetName
기능을 사용하면 기술 출력이 보강 트리에 추가되기 전에 이름을 바꿀 수 있습니다.
이제 보강 트리의 기술 컨텍스트 아래에 새 노드가 배치되었습니다. 이 노드는 모든 기술, 프로젝션 또는 출력 필드 매핑에 사용할 수 있습니다.
기술에 의해 노드에 추가된 보강에 액세스하려면 보강의 전체 경로가 필요합니다. 예를 들어 pages
노드의 텍스트를 다른 기술에 대한 입력으로 사용하려면 "/document/reviews_text/pages/*"
(으)로 지정합니다. 경로에 대한 자세한 내용은 보강 참조를 참조하세요.
기술 #2 언어 감지
호텔 검토 문서는 여러 언어로 표현된 피드백을 포함합니다. 언어 감지 기술은 사용되는 언어를 결정합니다. 그 결과가 핵심 구 추출 및 감정 탐지(보이지 않음)로 전달되고, 감정 및 구를 탐지할 때 언어를 고려합니다.
언어 감지 기술은 기술 세트에 정의된 세 번째(기술 #3) 기술이지만 다음으로 실행할 기술입니다. 입력이 필요하지 않으므로 이전 기술과 병렬로 실행됩니다. 앞에 있는 분할 기술과 마찬가지로 언어 감지 기술도 문서마다 한 번씩 호출됩니다. 이제 보강 트리에는 언어에 대한 새 노드가 있습니다.
기술 #3 및 #4(감정 분석 및 핵심 구 탐지)
고객의 피드백은 다양한 긍정적인 경험과 부정적인 경험을 반영합니다. 감정 분석 기술은 피드백을 분석하여 마이너스 점수와 플러스 점수 또는 감정이 확인되지 않은 경우에는 중립 점수를 할당합니다. 감정 분석과 함께 핵심 구 탐지는 감정의 결과로 나타나는 단어와 짧은 구를 식별하고 추출합니다.
/document/reviews_text/pages/*
컨텍스트가 제공되면 pages
컬렉션의 항목마다 감정 분석 기술과 핵심 구 기술이 한 번씩 호출됩니다. 기술의 출력은 연결된 페이지 요소 아래의 노드가 됩니다.
이제 기술 세트의 나머지 기술을 살펴보고 각 기술을 실행할 때마다 보강 트리가 어떻게 발전하는지 시각화할 수 있습니다. 병합 기술 및 쉐이퍼 기술 같은 일부 기술은 마찬가지로 새 노드를 만들지만, 기존 노드의 데이터만 사용하고 완전히 새로운 보강을 만들지는 않습니다.
위 트리에서 커넥터의 색은 보강이 여러 기술로 보강을 만들어졌음을 나타냅니다. 각 노드는 개별적으로 처리해야 하며, 부모 노드를 선택할 때 반환되는 개체에 포함되지 않습니다.
기술 #5 쉐이퍼 기술
출력에 지식 저장소가 포함되어 있는 경우 쉐이퍼 기술을 마지막 단계로 추가합니다. 쉐이퍼 기술은 보강 트리의 노드에서 데이터 셰이프를 만듭니다. 예를 들어 여러 노드를 단일 셰이프로 통합할 수 있습니다. 그런 다음, 이 셰이프를 테이블로 프로젝션하여(노드는 테이블의 열이 됨) 이름을 기준으로 셰이프를 테이블 프로젝션에 전달할 수 있습니다.
쉐이퍼 기술은 한 기술 아래에서 셰이핑에 집중하기 때문에 쉽게 작업할 수 있습니다. 또는 개별 프로젝션 내에서 인라인 셰이핑을 선택할 수도 있습니다. 쉐이퍼 기술은 보강 트리에서 추가되거나 감소되지 않으므로 시각화되지 않습니다. 대신 쉐이퍼 기술은 이미 가지고 있는 보강 트리를 다시 명시하는 수단으로 고려할 수 있습니다. 개념적으로는 데이터베이스의 테이블에서 보기를 만드는 것과 비슷합니다.
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"name": "#5",
"description": null,
"context": "/document",
"inputs": [
{
"name": "name",
"source": "/document/name"
},
{
"name": "reviews_date",
"source": "/document/reviews_date"
},
{
"name": "reviews_rating",
"source": "/document/reviews_rating"
},
{
"name": "reviews_text",
"source": "/document/reviews_text"
},
{
"name": "reviews_title",
"source": "/document/reviews_title"
},
{
"name": "AzureSearch_DocumentKey",
"source": "/document/AzureSearch_DocumentKey"
},
{
"name": "pages",
"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/*"
},
{
"name": "keyphrase",
"sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
"inputs": [
{
"name": "Keyphrases",
"source": "/document/reviews_text/pages/*/Keyphrases/*"
}
]
}
]
}
],
"outputs": [
{
"name": "output",
"targetName": "tableprojection"
}
]
}
다음 단계
뒤에 있는 소개 및 예제를 사용하여 기본 제공 기술로 첫 번째 기술을 만들어 보세요.