Azure AI 검색의 지식 저장소 "프로젝션"

프로젝션은 Azure AI 검색 보강 파이프라인의 콘텐츠를 허용하는 지식 저장소의 물리적 테이블, 개체 및 파일을 정의합니다. 지식 저장소를 만드는 경우 프로젝션을 정의하고 셰이핑하는 것이 대부분의 작업입니다.

이 문서에서는 코딩을 시작하기 전에 몇 가지 백그라운드 지식을 가질 수 있도록 프로젝션 개념과 워크플로를 소개합니다.

프로젝션은 Azure AI 검색 기술 세트에 정의되어 있지만 최종 결과는 Azure Storage의 테이블, 개체 및 이미지 파일 프로젝션입니다.

Projections expressed in Azure Storage

프로젝션 및 사용 형식

지식 저장소는 Azure Storage에서 테이블, JSON 개체 또는 이진 이미지 파일의 느슨한 컬렉션으로 실제로 표현되는 논리적 구성입니다.

프로젝션 스토리지 사용
테이블 Azure Table Storage 행과 열로 가장 잘 표현되는 데이터에 사용되거나 데이터의 세분화된 표현이 필요할 때마다(예: 데이터 프레임) 사용됩니다. 테이블 프로젝션을 사용하면 셰이퍼 기술을 사용하거나 인라인 셰이핑을 사용하여 열과 행을 지정하여 스키마화된 셰이프를 정의할 수 있습니다. 익숙한 정규화 원칙에 따라 콘텐츠를 여러 테이블로 구성할 수 있습니다. 같은 그룹에 있는 테이블은 자동으로 연결됩니다.
개체 Azure Blob Storage 하나의 JSON 문서에서 데이터 및 보강의 전체 JSON 표현이 필요할 때 사용됩니다. 테이블 프로젝션과 마찬가지로 유효한 JSON 개체만 개체로 프로젝션될 수 있으며 셰이핑이 이를 수행하는 데 도움이 될 수 있습니다.
파일 Azure Blob Storage 정규화된 이진 파일 이미지 파일을 저장해야 할 때 사용합니다.

프로젝션 정의

프로젝션은 skillset의 "knowledgeStore" 속성 아래에 지정됩니다. 인덱서 호출 중에 프로젝션 정의가 사용되어 풍부한 콘텐츠로 Azure Storage에서 개체를 만들고 로드합니다. 이러한 개념에 익숙하지 않은 경우 소개를 위해 AI 보강부터 시작합니다.

다음 예에서는 knowledgeStore 아래의 프로젝션 배치 및 기본 구성을 보여 줍니다. 이름, 형식 및 콘텐츠 원본이 프로젝션 정의를 구성합니다.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
      {
        "tables": [
          { "tableName": "ks-museums-main", "generatedKeyName": "ID", "source": "/document/tableprojection" },
          { "tableName": "ks-museumEntities", "generatedKeyName": "ID","source": "/document/tableprojection/Entities/*" }
        ],
        "objects": [
          { "storageContainer": "ks-museums", "generatedKeyName": "ID", "source": "/document/objectprojection" }
        ],
        "files": [ ]
      }
    ]

프로젝션 그룹

프로젝션은 복잡한 컬렉션의 배열입니다. 즉, 각 형식의 여러 집합을 지정할 수 있습니다. 하나의 프로젝션 그룹만 사용하는 것이 일반적이지만 스토리지 요구 사항에 서로 다른 도구 및 시나리오 지원이 포함되는 경우 여러 개를 사용할 수 있습니다. 예를 들어, 기술 집합의 디자인 및 디버그에 한 그룹을 사용하고 두 번째 그룹은 온라인 앱에 사용되는 출력을 수집하고 세 번째 그룹은 데이터 과학 워크로드에 사용할 수 있습니다.

동일한 기술 세트 출력이 프로젝션 아래의 모든 그룹을 채우는 데 사용됩니다. 다음 예에서는 두 가지를 보여 줍니다.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
        {
            "tables": [],
            "objects": [],
            "files": []
        }, 
        {
            "tables": [],
            "objects": [],
            "files": []
        }
    ]
}

프로젝션 그룹에는 상호 배타성 및 관련성의 다음과 같은 주요 특징이 있습니다.

원칙 설명
상호 배제 각 그룹은 다른 데이터 셰이핑 시나리오를 지원하기 위해 다른 그룹과 완전히 격리됩니다. 예를 들어 서로 다른 테이블 구조와 조합을 테스트하는 경우 AB 테스트를 위해 각 세트를 서로 다른 프로젝션 그룹에 배치합니다. 각 그룹은 동일한 원본(보강 트리)에서 데이터를 가져오지만 피어 프로젝션 그룹의 table-object-file 조합에서 완전히 격리됩니다.
관련성 프로젝션 그룹 내에서 테이블, 개체 및 파일의 콘텐츠가 관련됩니다. 지식 저장소는 생성된 키를 공통 부모 노드에 대한 참조점으로 사용합니다. 예를 들어 이미지와 텍스트가 포함된 문서가 있는 시나리오를 생각해 보겠습니다. 텍스트를 테이블에, 이미지를 이진 파일에 프로젝션할 수 있으며 테이블과 개체 모두 파일 URL을 포함하는 열/속성을 갖습니다.

프로젝션 "원본"

원본 매개 변수는 프로젝션 정의의 세 번째 구성 요소입니다. 프로젝션은 AI 보강 파이프라인의 데이터를 저장하기 때문에 프로젝션 원본은 항상 기술의 출력입니다. 따라서 출력은 단일 필드(예: 번역된 텍스트 필드)일 수 있지만 종종 데이터 셰이프에 대한 참조입니다.

데이터 셰이프는 기술 집합에서 가져옵니다. Azure AI 검색에서 제공하는 모든 기본 제공 기술 중에는 데이터 셰이프를 만드는 데 사용되는 셰이퍼 기술이라는 유틸리티 기술이 있습니다. 지식 저장소에서 프로젝션을 지원하기 위해 셰이퍼 기술(필요한 만큼)을 포함할 수 있습니다.

셰이프는 테이블 프로젝션과 함께 자주 사용되며 셰이프는 테이블에 들어가는 행뿐만 아니라 만들어지는 열도 지정합니다(셰이프를 개체 프로젝션에 전달할 수도 있음).

셰이프는 복잡할 수 있으며 여기에서 자세히 논의하는 범위를 벗어나지만 다음 예에서는 기본 셰이프를 간략하게 설명합니다. 셰이퍼 기술의 출력은 테이블 프로젝션의 원본으로 지정됩니다. 테이블 프로젝션 자체에는 셰이프에 지정된 대로 "metadata-storage_path", "reviews_text", "reviews_title" 등에 대한 열이 있습니다.

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "ShaperForTables",
    "description": null,
    "context": "/document",
    "inputs": [
        {
            "name": "metadata_storage_path",
            "source": "/document/metadata_storage_path",
            "sourceContext": null,
            "inputs": []
        },
        {
          "name": "reviews_text",
          "source": "/document/reviews_text"
        }, 
        {
          "name": "reviews_title",
          "source": "/document/reviews_title"
        },
        {
          "name": "reviews_username",
          "source": "/document/reviews_username"
        },
    ],
    "outputs": [
      {
        "name": "output",
        "targetName": "mytableprojection"
      }
    ]
}

프로젝션 수명 주기

프로젝션에는 데이터 원본의 원본 데이터에 연결된 수명 주기가 있습니다. 원본 데이터가 업데이트되고 다시 인덱싱되면 프로젝션이 보강 결과로 업데이트되므로 프로젝션이 결국 데이터 원본의 데이터와 일치합니다. 그러나 프로젝션도 Azure Storage에 독립적으로 저장됩니다. 인덱서나 검색 서비스 자체가 삭제되면 프로젝션은 삭제되지 않습니다.

앱에서 소비

인덱서가 실행된 후 프로젝션에 연결하고 다른 앱 및 워크로드에서 데이터를 사용합니다.

  • Azure Portal을 사용하여 Azure Storage에서 개체 만들기 및 콘텐츠를 확인합니다.

  • 데이터 탐색에 Power BI를 사용합니다. 이 도구는 데이터가 Azure Table Storage에 있을 때 가장 잘 작동합니다. Power BI 내에서 쿼리 및 분석이 더 쉬운 새 테이블로 데이터를 조작할 수 있습니다.

  • 데이터 과학 파이프라인의 Blob 컨테이너에서 보강된 데이터를 사용합니다. 예를 들어, blob의 데이터를 Pandas DataFrame으로 로드할 수 있습니다.

  • 마지막으로 지식 저장소에서 데이터를 내보내야 하는 경우, Azure Data Factory에는 데이터를 내보내고 선택한 데이터베이스에 배치하는 커넥터가 있습니다.

시작하기 위한 검사 목록

프로젝션은 지식 저장소 전용이며 검색 인덱스를 구성하는 데 사용되지 않습니다.

  1. Azure Storage에서 액세스 키의 연결 문자열을 가져오고 계정이 StorageV2(범용 V2)인지 확인합니다.

  2. Azure Storage에 있는 동안 프로젝션에 대해 충돌하지 않는 이름을 선택할 수 있도록 컨테이너 및 테이블의 기존 콘텐츠를 숙지합니다. 지식 저장소는 테이블과 컨테이너의 느슨한 컬렉션입니다. 관련 개체를 추적하기 위해 명명 규칙을 채택하는 것을 고려합니다.

  3. Azure AI 검색에서 인덱서에서 보강 캐싱(미리 보기)을 사용하도록 설정한 다음, 인덱서를 실행하여 기술 세트를 실행하고 캐시를 채웁니다. 이는 미리 보기 기능이므로 인덱서 요청 시 미리 보기 REST API(api-version=2020-06-30-preview 이상)를 사용해야 합니다. 캐시가 채워지면 지식 저장소에서 프로젝션 정의를 무료로 수정할 수 있습니다(기술 자체가 수정되지 않는 한).

  4. 코드에서 모든 프로젝션은 기술 집합에서만 정의됩니다. 프로젝션에 적용되는 인덱서 속성(예: 필드 매핑 또는 출력 필드 매핑)이 없습니다. 기술 세트 정의 내에서 knowledgeStore 속성과 기술 배열이라는 두 영역에 중점을 둡니다.

    1. knowledgeStore에서 projections 섹션에 테이블, 개체, 파일 프로젝션을 지정합니다. 개체 형식, 개체 이름 및 수량(정의한 프로젝션 수당)은 이 섹션에서 결정됩니다.

    2. 기술 배열에서 각 프로젝션의 source에서 참조해야 할 기술 출력을 결정합니다. 모든 프로젝션에는 원본이 있습니다. 원본은 업스트림 기술의 출력일 수 있지만 셰이퍼 기술의 출력인 경우가 많습니다. 프로젝션의 구성은 모양을 통해 결정됩니다.

  5. 기존 기술 집합에 프로젝션을 추가하는 경우 기술 집합을 업데이트하고 인덱서를 실행합니다.

  6. Azure Storage에서 결과를 확인합니다. 후속 실행에서는 Azure Storage에서 개체를 삭제하거나 기술 집합에서 프로젝트 이름을 변경하여 이름 충돌을 방지합니다.

  7. 테이블 프로젝션을 사용하는 경우 Table Service 데이터 모델 이해Table Storage의 확장성 및 성능 대상를 확인하여 데이터 요구 사항이 Table Storage 문서화된 제한 내에 있는지 확인합니다.

다음 단계

각 프로젝션 형식에 대한 구문 및 예를 검토합니다.