Azure AI Search의 기술 세트 개념

이 문서는 기술 세트 개념 및 구성에 대한 더 깊은 이해가 필요하고 AI 보강에 대한 개략적인 개념에 익숙하다고 가정하는 개발자를 위한 것입니다.

기술 세트는 인덱서에 연결된 Azure AI Search에서 재사용 가능한 리소스입니다. 여기에는 외부 데이터 원본에서 검색된 문서에 대해 기본 제공 AI 또는 외부 사용자 지정 처리를 호출하는 하나 이상의 기술이 포함되어 있습니다.

다음 다이어그램에서는 기술 세트 실행의 기본 데이터 흐름을 보여 줍니다.

Diagram showing skillset data flows, with focus on inputs, outputs, and mappings.

기술 세트 처리 시작부터 종료까지 기술은 보강된 문서에서 읽고 씁니다. 처음에는 보강된 문서가 데이터 원본에서 추출된 원시 콘텐츠("/document" 루트 노드로 명시됨)일 뿐입니다. 각 기술이 실행되면 기술에서 출력을 그래프의 노드로 작성함에 따라 보강된 문서에서 구조와 핵심 내용을 얻습니다.

기술 세트 실행이 완료되면 보강된 문서의 출력이 출력 필드 매핑을 통해 인덱스로 이동합니다. 원본에서 인덱스로 그대로 전송하려는 모든 원시 콘텐츠는 필드 매핑을 통해 정의됩니다.

보강을 구성하려면 기술 세트 및 인덱서에서 설정을 지정합니다.

기술 집합 정의

기술 세트는 텍스트 번역 또는 이미지 파일의 OCR과 같은 보강을 수행하는 하나 이상의 기술의 배열입니다. 기술은 Microsoft의 기본 제공 기술이거나 외부에서 호스트하는 처리 논리에 대한 사용자 지정 기술일 수 있습니다. 기술 세트는 인덱싱 중에 사용되거나 지식 저장소에 프로젝션되는 보강된 문서를 생성합니다.

기술에는 context(컨텍스트), inputs(입력) 및 outputs(출력)가 있습니다.

Diagram showing which properties of skillsets establish the data path.

  • 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" 원본 필드의 콘텐츠를 입력으로 수락하고 해당 콘텐츠를 5000자 "페이지" 출력으로 분할하는 텍스트 분할 기술입니다. 큰 텍스트를 더 작은 청크로 분할하면 감정 감지와 같은 기술에 대해 더 나은 결과를 생성할 수 있습니다.

  • 기술 #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}
...
해당 없음

기술이 실행되면 출력이 새 노드로 보강 트리에 추가됩니다. 기술 실행이 전체 문서에 걸쳐 있는 경우 노드가 루트 아래의 첫 번째 수준에 추가됩니다.

노드는 다운스트림 기술에 대한 입력으로 사용할 수 있습니다. 예를 들어 번역된 문자열과 같은 콘텐츠를 만드는 기술은 엔터티를 인식하거나 핵심 구를 추출하는 기술에 대한 입력이 될 수 있습니다.

Skills read and write from enrichment tree

디버그 세션 시각적 편집기를 통해 보강 트리를 시각화하고 사용할 수 있지만 대부분 내부 구조입니다.

보강은 변경할 수 없습니다. 일단 만들어지면 노드를 편집할 수 없습니다. 기술 세트가 더 복잡해짐에 따라 보강 트리도 복잡해지지만 보강 트리의 모든 노드가 인덱스 또는 지식 저장소로 연결할 필요는 없습니다.

사용하려는 항목만 유지하도록 필요에 따라 보강 출력의 하위 집합만 유지할 수 있습니다. 인덱서 정의의 출력 필드 매핑은 검색 인덱스에서 실제로 수집되는 콘텐츠를 결정합니다. 마찬가지로 지식 저장소를 만드는 경우 출력을 프로젝션에 할당된 셰이프에 매핑할 수 있습니다.

참고 항목

보강 트리 형식을 사용하면 보강 파이프라인이 메타데이터를 기본 데이터 형식에도 연결할 수 있습니다. 메타데이터는 유효한 JSON 개체가 아니지만, 지식 저장소의 프로젝션 정의에서 유효한 JSON 형식으로 프로젝션될 수 있습니다. 자세한 내용은 쉐이퍼 기술을 참조 하세요.

인덱서 정의

인덱서에는 인덱서 실행을 구성하는 데 사용되는 속성과 매개 변수가 있습니다. 이러한 속성 중에는 검색 인덱스의 필드에 대한 데이터 경로를 설정하는 매핑이 있습니다.

Diagram showing which properties of indexers establish the data path to fields in an index.

다음 두 가지 매핑 세트가 있습니다.

"sourceFieldName" 속성은 데이터 원본의 필드 또는 보강 트리의 노드를 지정합니다. "targetFieldName" 속성은 콘텐츠를 받는 인덱스의 검색 필드를 지정합니다.

보강 예제

이 예제에서는 호텔 리뷰 기술 세트를 참조 지점으로 사용하여 개념 다이어그램을 사용하여 기술 실행을 통해 보강 트리가 어떻게 진화하는지 설명합니다.

이 예제에서는 다음을 보여줍니다.

  • 기술의 컨텍스트와 입력이 작동하여 기술 실행 횟수를 결정하는 원리
  • 컨텍스트에서 입력 셰이프의 기준이 되는 것

이 예제에서 CSV 파일의 원본 필드에는 호텔("reviews_text") 및 등급("reviews_rating")에 대한 고객 리뷰가 포함됩니다. 인덱서는 Blob Storage에서 메타데이터 필드를 추가하고 기술은 번역된 텍스트, 감정 점수 및 핵심 구 검색을 추가합니다.

호텔 리뷰 예제에서 보강 프로세스 내의 "문서"는 단일 호텔 리뷰를 나타냅니다.

Azure Portal 또는 REST API에서 이 데이터에 대한 검색 인덱스 및 지식 저장소를 만들 수 있습니다. 디버그 세션을 사용하여 기술 세트 컴퍼지션, 종속성 및 보강 트리에 미치는 영향에 대한 인사이트를 얻을 수도 있습니다. 이 문서의 이미지는 디버그 세션에서 가져옵니다.

개념적으로 초기 트리는 다음과 같습니다.

enrichment tree after document cracking

모든 보강에 대한 루트 노드는 .입니다 "/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실행됩니다. 기술 출력은 5000자 세그먼트로 청크되는 목록 reviews_text 입니다. 분할 기술의 출력 이름은 pages이며 보강 트리에 추가됩니다. 이 targetName 기능을 사용하면 보강 트리에 추가되기 전에 기술 출력의 이름을 바꿀 수 있습니다.

이제 보강 트리에 기술의 컨텍스트 아래에 배치된 새 노드가 있습니다. 이 노드는 모든 기술, 프로젝션 또는 출력 필드 매핑에 사용할 수 있습니다.

enrichment tree after skill #1

기술로 노드에 추가된 보강에 액세스하려면 보강에 대한 전체 경로가 필요합니다. 예를 들어 pages 노드의 텍스트를 다른 기술에 대한 입력으로 사용하려면 "/document/reviews_text/pages/*"로 지정해야 합니다. 경로에 대한 자세한 내용은 참조 보강을 참조 하세요.

기술 #2 언어 검색

호텔 검토 문서에는 여러 언어로 표현된 고객 피드백이 포함됩니다. 언어 감지 기술은 사용되는 언어를 결정합니다. 그 결과가 핵심 구 추출 및 감정 탐지(보이지 않음)로 전달되고, 감정 및 구를 탐지할 때 언어를 고려합니다.

언어 감지 기술은 기술 세트에 정의된 세 번째(기술 #3) 기술이지만 다음으로 실행할 기술입니다. 입력이 필요하지 않으므로 이전 기술과 병렬로 실행됩니다. 이전의 분할 기술과 마찬가지로 언어 감지 기술도 각 문서에 대해 한 번 호출됩니다. 이제 보강 트리에는 언어에 대한 새 노드가 있습니다.

enrichment tree after skill #2

기술 #3 및 #4(감정 분석 및 핵심 구 탐지)

고객 피드백은 다양한 긍정적 및 부정적인 환경을 반영합니다. 감정 분석 기술은 피드백을 분석하고 음수의 연속체를 따라 점수를 양수에 할당하거나, 감정이 결정되지 않은 경우 중립을 할당합니다. 감정 분석과 함께 핵심 구 탐지는 감정의 결과로 나타나는 단어와 짧은 구를 식별하고 추출합니다.

컨텍스트 /document/reviews_text/pages/*를 고려할 때 감정 분석 및 핵심 구 기술 모두 컬렉션의 각 항목 pages 에 대해 한 번 호출됩니다. 기술의 출력은 연결된 페이지 요소 아래의 노드가 됩니다.

이제 기술 세트의 나머지 기술을 살펴보고 각 기술을 실행할 때마다 보강 트리가 어떻게 발전하는지 시각화할 수 있습니다. 병합 기술 및 쉐이퍼 기술과 같은 일부 기술도 새 노드를 만들지만 기존 노드의 데이터만 사용하고 순 새 보강을 만들지 않습니다.

enrichment tree after all skills

위 트리의 커넥터 색은 여러 기술에서 보강을 만들었고, 노드를 개별적으로 처리해야 하며, 부모 노드를 선택할 때 반환되는 개체의 일부가 아님을 나타냅니다.

기술 #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"
    }
  ]
}

다음 단계

뒤에 있는 소개 및 예제를 사용하여 기본 제공 기술로 첫 번째 기술을 만들어 보세요.