Amazon Bedrock 지식 베이스에서 콘텐츠 청킹 및 파싱이 작동하는 방식 - Amazon Bedrock

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Bedrock 지식 베이스에서 콘텐츠 청킹 및 파싱이 작동하는 방식

Amazon Bedrock은 먼저 효율적인 데이터 검색을 위해 문서 또는 콘텐츠를 관리 가능한 청크로 분할합니다. 그런 다음 청크는 원본 문서와의 매핑을 유지하면서 임베딩으로 변환되고 벡터 인덱스 (데이터의 벡터 표현) 에 기록됩니다. 벡터 임베딩을 사용하면 텍스트의 유사성을 수학적으로 비교할 수 있습니다.

표준 청킹

Amazon Bedrock은 청킹에 대한 다음과 같은 표준 접근 방식을 지원합니다.

  • 고정 크기 청크: 청크당 토큰 수와 중복 비율을 지정하여 원하는 청크 크기를 구성할 수 있으므로 특정 요구 사항에 맞게 유연하게 조정할 수 있습니다. 청크의 최대 토큰 수를 초과해서는 안 되는 최대 토큰 수와 연속된 청크 간의 중복 비율을 설정할 수 있습니다.

  • 기본 청크: 콘텐츠를 약 300개의 토큰으로 구성된 텍스트 청크로 분할합니다. 청킹 프로세스는 문장 경계를 존중하여 각 청크 내에 완전한 문장이 보존되도록 합니다.

문서에 청크를 사용하지 않도록 선택할 수도 있습니다. 각 문서는 단일 텍스트 청크로 처리됩니다. 청킹 접근 방식/전략으로 청크를 사용하지 않는 것을 선택하기 전에 문서를 별도의 파일로 분할하여 사전 처리하는 것이 좋습니다.

다음은 고정 크기 청크를 구성하는 예제입니다.

콘솔
  1. Amazon Bedrock 권한이 있는 IAM 역할을 사용하여 AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/bedrock/ 에서 Amazon Bedrock 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 지식 베이스를 선택합니다.

  3. 지식베이스 섹션에서 지식창고 만들기를 선택합니다.

  4. 이름, 필요한 액세스 권한에 대한 IAM 역할, 지식창고에 할당하려는 태그 등 지식창고 세부 정보를 입력합니다.

  5. 지원되는 데이터 소스를 선택하고 연결 구성 세부 정보를 제공하십시오.

  6. 청크 및 파싱 구성의 경우 먼저 사용자 지정 옵션을 선택한 다음 고정 크기 청크를 청킹 전략으로 선택하십시오.

  7. 단계를 계속 진행하여 지식창고 만들기를 완료하세요.

API

{ ... "vectorIngestionConfiguration": { "chunkingConfiguration": { "chunkingStrategy": "string", "fixedSizeChunkingConfiguration": { "maxTokens": "number", "overlapPercentage": "number" } } } }

계층적 청킹

계층적 청킹은 정보를 하위 청크와 부모 청크의 중첩된 구조로 구성하는 것을 포함합니다. 데이터 소스를 만들 때 상위 청크 크기, 하위 청크 크기 및 각 청크 간에 겹치는 토큰 수를 정의할 수 있습니다. 검색 중에 시스템은 처음에는 하위 청크를 검색하지만 모델에 더 관련성이 높은 청크를 제공하기 위해 하위 청크를 더 넓은 상위 청크로 대체합니다. 이 접근 방식은 세부적인 세부 정보 대신 간결하고 높은 수준의 요약을 제공하여 효율성과 관련성을 높입니다.

계층적 청킹의 경우 Amazon Bedrock 지식 베이스는 청킹에 대해 두 가지 수준 또는 다음 깊이를 지정할 수 있도록 지원합니다.

  • 부모: 부모 청크 토큰의 최대 크기를 설정합니다.

  • 자식: 최대 자식 청크 토큰 크기를 설정합니다.

또한 청크 간의 오버랩 토큰을 설정합니다. 이는 각 상위 청크와 각 하위 청크와 상위 청크 간의 절대 중복 토큰 수입니다.

다음은 계층적 청킹을 구성하는 예시입니다.

콘솔
  1. Amazon Bedrock 권한이 있는 IAM 역할을 사용하여 AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/bedrock/ 에서 Amazon Bedrock 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 지식 베이스를 선택합니다.

  3. 지식베이스 섹션에서 지식창고 만들기를 선택합니다.

  4. 이름, 필요한 액세스 권한에 대한 IAM 역할, 지식창고에 할당하려는 태그 등 지식창고 세부 정보를 입력합니다.

  5. 지원되는 데이터 소스를 선택하고 연결 구성 세부 정보를 제공하십시오.

  6. 청크 및 파싱 구성의 경우 먼저 사용자 지정 옵션을 선택한 다음 계층적 청크를 청킹 전략으로 선택하십시오.

  7. 상위 청크 토큰의 최대 크기를 입력합니다.

  8. 최대 하위 청크 토큰 크기를 입력합니다.

  9. 청크 사이의 오버랩 토큰을 입력합니다. 각 상위 청크와 각 하위 청크와 상위 청크 간의 절대 중복 토큰 수입니다.

  10. 단계를 계속 진행하여 지식창고 만들기를 완료하세요.

API

{ ... "vectorIngestionConfiguration": { "chunkingConfiguration": { "chunkingStrategy": "string", "fixedSizeChunkingConfiguration": { "maxTokens": "number", "overlapPercentage": "number" }, "hierarchicalChunkingConfiguration": { // Hierarchical chunking "levelConfigurations": [{ "maxTokens": "number" }], "overlapTokens": "number" } } } }

시맨틱 청킹

시맨틱 청킹은 텍스트를 의미 있는 청크로 나누어 이해도와 정보 검색을 향상시키는 자연어 처리 기법입니다. 이는 단순한 구문 구조가 아닌 시맨틱 콘텐츠에 초점을 맞추어 검색 정확도를 높이는 것을 목표로 합니다. 이렇게 하면 관련 정보를 더 정확하게 추출하고 조작할 수 있습니다. 데이터 원본에서 시맨틱 청크를 구성할 때 다음을 포함하여 다음과 같은 하이퍼 파라미터를 지정할 수 있습니다.

  • 최대 토큰 수: 문장 경계를 준수하면서 단일 청크에 포함되어야 하는 최대 토큰 수입니다.

  • 버퍼 크기: 주어진 문장의 버퍼 크기는 임베딩 생성을 위해 추가할 주변 문장의 수를 정의합니다. 예를 들어 버퍼 크기가 1이면 3개의 문장 (현재 문장, 이전 문장, 다음 문장) 이 결합되어 포함됩니다. 이 매개 변수는 각 청크의 경계를 결정하기 위해 함께 검사하는 텍스트의 양에 영향을 주어 결과 청크의 세분성과 일관성에 영향을 줄 수 있습니다. 버퍼 크기가 클수록 더 많은 컨텍스트를 캡처할 수 있지만 노이즈가 발생할 수 있는 반면, 버퍼 크기가 작으면 중요한 컨텍스트를 놓칠 수 있지만 청킹이 더 정확해집니다.

  • 중단점 백분위수 임계값: 중단점 임계값은 의미론적 유사성을 기반으로 텍스트를 청크로 나눌 위치를 결정하는 매개변수입니다. 임계값은 텍스트의 자연스러운 중단점을 식별하여 일관되고 의미 있는 청크를 생성하는 데 도움이 됩니다. 중단점 임계값을 조정하면 각 청크의 크기와 내용에 영향을 주어 컨텍스트를 유지하는 것과 관리할 수 있는 처리 단위를 만드는 것 사이에서 균형을 맞출 수 있습니다.

다음은 시맨틱 청킹을 구성하는 예제입니다.

콘솔
  1. Amazon Bedrock 권한이 있는 IAM 역할을 사용하여 AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/bedrock/ 에서 Amazon Bedrock 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 지식 베이스를 선택합니다.

  3. 지식베이스 섹션에서 지식창고 만들기를 선택합니다.

  4. 이름, 필요한 액세스 권한에 대한 IAM 역할, 지식창고에 할당하려는 태그 등 지식창고 세부 정보를 입력합니다.

  5. 지원되는 데이터 소스를 선택하고 연결 구성 세부 정보를 제공하십시오.

  6. 청크 및 파싱 구성의 경우 먼저 사용자 지정 옵션을 선택한 다음 시맨틱 청킹을 청킹 전략으로 선택하십시오.

  7. 대상 문장을 둘러싸고 그룹화할 최대 문장 수를 입력합니다. 예: 버퍼 크기 1은 “이전 문장”, “문장 대상”, “다음 문장”입니다.

  8. 텍스트 청크의 최대 토큰 크기를 입력합니다.

  9. 문장 그룹 간 유사성에 대한 중단점 임계값을 선택합니다. 예를 들어 중단점 임계값이 90% 이면 임베딩 유사성이 90% 미만으로 떨어지면 새 청크가 생성됩니다.

  10. 단계를 계속 진행하여 지식창고 만들기를 완료하세요.

API

{ ... "vectorIngestionConfiguration": { "chunkingConfiguration": { "chunkingStrategy": "string", "fixedSizeChunkingConfiguration": { "maxTokens": "number", "overlapPercentage": "number" }, "semanticChunkingConfiguration": { // Semantic chunking "maxTokens": "number", "bufferSize": "number", "breakpointPercentileThreshold": "number" } } } }

고급 파싱 옵션

고급 파싱 기법을 사용하여 PDF와 같은 지원되는 파일 유형에서 텍스트가 아닌 정보를 파싱할 수 있습니다. 이 기능을 사용하면 테이블 및 차트와 같은 복잡한 데이터를 파싱하기 위한 기초 모델을 선택할 수 있습니다. 또한 데이터 추출을 위한 기본 프롬프트를 덮어써서 특정 요구 사항에 맞게 조정하여 다양한 사용 사례에서 최적의 성능을 보장할 수 있습니다. 현재 클로드 3 소넷과 클로드 3 하이쿠가 지원됩니다.

다음은 고급 파싱을 지원하는 기본 모델을 구성하는 예제입니다.

콘솔
  • Amazon Bedrock 권한이 있는 IAM 역할을 사용하여 AWS 관리 콘솔에 로그인하고 https://console.aws.amazon.com/bedrock/ 에서 Amazon Bedrock 콘솔을 엽니다.

  • 왼쪽 탐색 창에서 지식 베이스를 선택합니다.

  • 지식베이스 섹션에서 지식창고 만들기를 선택합니다.

  • 이름, 필요한 액세스 권한에 대한 IAM 역할, 지식창고에 할당하려는 태그 등 지식창고 세부 정보를 입력합니다.

  • 지원되는 데이터 소스를 선택하고 연결 구성 세부 정보를 제공하십시오.

  • 청크 및 파싱 구성의 경우 먼저 사용자 지정 옵션을 선택한 다음 기초 모델을 활성화하고 원하는 기초 모델을 선택합니다. 필요에 따라 특정 요구 사항에 맞게 파서의 지침을 덮어쓸 수도 있습니다.

  • 단계를 계속 진행하여 지식창고 만들기를 완료하세요.

API

{ ... "vectorIngestionConfiguration": { "chunkingConfiguration": { "chunkingStrategy": "string", "fixedSizeChunkingConfiguration": { "maxTokens": "number", "overlapPercentage": "number" } }, "parsingConfiguration": { // Parse tabular data within docs "parsingStrategy": "string", // enum of BEDROCK_FOUNDATION_MODEL "bedrockFoundationModelConfiguration": { "parsingPrompt": { "parsingPromptText": "string" }, "modelArn": "string" } } } }

CSV의 메타데이터 선택

CSV (쉼표로 구분된 값) 파일을 수집할 때 지식창고에서 특정 열을 메타데이터 필드가 아닌 콘텐츠 필드로 취급하도록 할 수 있습니다. 수백 또는 수천 개의 콘텐츠/메타데이터 파일 쌍을 사용하는 대신 이제 단일 CSV 파일과 해당 메타데이터.json 파일을 만들어 CSV 내의 각 열을 처리하는 방법에 대한 힌트를 지식창고에 제공할 수 있습니다. 이렇게 하려면 다음을 확인하세요.

  • CSV는 RFC4180 형식입니다.

  • CSV의 첫 번째 행에는 헤더 정보가 포함됩니다.

  • metadata.json에 제공된 메타데이터 필드는 CSV에 열로 표시됩니다.

  • 다음과 같은 형식의 메타데이터.json 파일을 제공합니다.

    { "metadataAttributes": { "${attribute1}": "${value1}", "${attribute2}": "${value2}", ... }, "documentStructureConfiguration": { "type": "RECORD_BASED_STRUCTURE_METADATA", "recordBasedStructureMetadata": { "contentFields": [ { "fieldName": "string" } ], "metadataFieldsSpecification": { "fieldsToInclude": [ { "fieldName": "string" } ], "fieldsToExclude": [ { "fieldName": "string" } ] } } } }

참고:

  • Amazon Bedrock 지식 베이스는 현재 하나의 콘텐츠 필드를 지원합니다.

  • 포함/제외 필드가 제공되지 않는 경우 콘텐츠 열을 제외한 모든 열이 메타데이터 열로 취급됩니다.

  • 포함 필드만 제공되는 경우 제공된 열만 메타데이터로 처리됩니다.

  • 제외 필드만 제공되는 경우 제외 열을 제외한 모든 열이 메타데이터로 처리됩니다.

  • 지식창고는 CSV 안에 있는 빈 행을 건너뛰고 무시합니다.

사용자 지정 변환

지식 기반 수집 프로세스에 자체 로직을 삽입하는 사용자 지정 변환 Lambda 함수를 정의할 수 있습니다.

Amazon Bedrock 지식 기반에서 기본적으로 지원하지 않는 특정 청크 로직이 있을 수 있습니다. 청킹 로직이 포함된 Lambda 함수를 지정하는 동안 청킹 금지 전략을 선택합니다. 또한 Lambda 함수로 청크할 파일을 지식 기반에 기록하려면 Amazon S3 버킷을 지정해야 합니다. 청크 후 Lambda 함수는 청크된 파일을 동일한 버킷에 다시 쓰고 추가 처리를 위해 지식 베이스에 대한 참조를 반환합니다. 선택적으로 S3 버킷에 저장되는 파일의 암호화를 위한 자체 AWS KMS 키를 제공할 수도 있습니다.

또는 청크 수준 메타데이터를 지정하고 지식 베이스에서 기본적으로 지원되는 청크 전략 중 하나를 적용하도록 할 수도 있습니다. 이 경우 Lambda 함수 및 S3 버킷에 대한 참조를 제공하면서 사전 정의된 청킹 전략 (예: Default 또는 Fixed-size) 중 하나를 선택하십시오. 이 경우 지식 기반은 청크 수준 메타데이터를 추가하기 위해 Lambda 함수를 호출하기 전에 미리 정의된 S3 버킷에 구문 분석되고 미리 청크된 파일을 저장합니다. 청크 레벨 메타데이터를 추가한 후 Lambda 함수는 청크된 파일을 동일한 버킷에 다시 쓰고 추가 처리를 위해 지식 베이스에 대한 참조를 반환합니다. 충돌이 발생할 경우 청크 수준 메타데이터가 우선하며 파일 수준 메타데이터를 덮어쓴다는 점에 유의하십시오.

API 및 파일 계약의 경우 아래 구조를 참조하십시오.

Lambda 함수를 사용하여 사용자 지정 변환을 추가할 때의 API 계약

{ ... "vectorIngestionConfiguration": { "customTransformationConfiguration": { // Custom transformation "intermediateStorage": { "s3Location": { // the location where input/output of the Lambda is expected "uri": "string" } }, "transformations": [ { "transformationFunction": { "transformationLambdaConfiguration": { "lambdaArn": "string" } }, "stepToApply": "string" // enum of POST_CHUNKING } ] }, "chunkingConfiguration": { "chunkingStrategy": "string", "fixedSizeChunkingConfiguration": { "maxTokens": "number", "overlapPercentage": "number" } ... } }

사용자 지정 Lambda 변환 입력 형식

{ "version": "1.0", "knowledgeBaseId": "string", "dataSourceId": "string", "ingestionJobId": "string", "bucketName": "string", "priorTask": "string", "inputFiles": [ { "originalFileLocation": { "type": "S3", "s3_location": { "key": "string", "uri": "string" } }, "fileMetadata": { "key1": "value1", "key2": "value2" }, "contentBatches": [ { "key":"string" } ] } ] }

사용자 지정 Lambda 변환 출력 형식

{ "outputFiles": [ { "originalFileLocation": { "type": "S3", "s3_location": { "key": "string", "uri": "string" } } "fileMetadata": { "key1": "value1", "key2": "value2" }, "contentBatches": [ { "key": "string" } ] } ] }

참조된 위치의 객체 파일 형식 fileContents

{ "fileContents": [ { "contentBody": "...", "contentType": "string", // enum of TEXT, PDF, ... "contentMetadata": { "key1": "value1", "key2": "value2" } } ... ] }