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

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

지식 기반에서 콘텐츠 청킹 및 파싱이 작동하는 방식

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

표준 청킹

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

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

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

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

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

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

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

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

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

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

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

  7. 청크의 고정 최대 토큰과 연속된 청크 간의 중복 비율을 입력합니다.

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

API

{ ... "vectorIngestionConfiguration": { "chunkingConfiguration": { "chunkingStrategy": "FIXED_SIZE", "fixedSizeChunkingConfiguration": { "maxTokens": "100", "overlapPercentage": "10" } } } }

계층적 청킹

계층적 청킹은 정보를 하위 청크와 부모 청크의 중첩된 구조로 구성하는 것을 포함합니다. 데이터 소스를 만들 때 상위 청크 크기, 하위 청크 크기 및 각 청크 간에 겹치는 토큰 수를 정의할 수 있습니다. 검색 중에 시스템은 처음에는 하위 청크를 검색하지만 모델에 보다 포괄적인 컨텍스트를 제공하기 위해 하위 청크를 더 넓은 상위 청크로 대체합니다.

작은 텍스트 임베딩이 더 정확하지만 검색은 포괄적인 컨텍스트를 목표로 합니다. 계층적 청킹 시스템은 필요한 경우 검색된 하위 청크를 상위 청크로 대체하여 이러한 요구 사항의 균형을 유지합니다.

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

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

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

또한 청크 간의 오버랩 토큰을 설정합니다. 연속된 부모 청크와 연속된 하위 청크 사이의 오버랩 토큰의 절대 수입니다.

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

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

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

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

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

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

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

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

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

  9. 청크 사이의 오버랩 토큰을 입력합니다. 연속된 부모 청크와 연속된 하위 청크 사이의 오버랩 토큰의 절대 수입니다.

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

API

{ ... "vectorIngestionConfiguration": { "chunkingConfiguration": { "chunkingStrategy": "HIERARCHICAL", "hierarchicalChunkingConfiguration": { // Hierarchical chunking "levelConfigurations": [{ "maxTokens": 1500 // Parent max tokens }, { "maxTokens": 300 // Child max tokens }], "overlapTokens": 60 } } } }
참고

권장 기본값은 다음과 같습니다.

  • 상위 청크당 최대 1,500개의 토큰

  • 하위 청크당 최대 토큰 300개

  • 연속된 부모 청크와 연속된 하위 청크 사이의 오버랩 토큰 60개

부모 및 하위 청크당 허용되는 최대 토큰 수와 중복 토큰에 대한 자세한 내용은 을 참조하십시오. HierarchicalChunkingConfiguration

시맨틱 청킹

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

시맨틱 청킹을 구성할 때 다음과 같은 하이퍼 파라미터를 지정할 수 있습니다.

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

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

  • 중단점 백분위수 임계값: 문장 사이에 중단점을 그리기 위한 문장 거리/비유사도의 백분위수 임계값입니다. 임계값이 높을수록 문장을 더 쉽게 구분할 수 있어야 여러 청크로 분할할 수 있습니다. 임계값이 높을수록 청크 수가 줄어들고 일반적으로 평균 청크 크기도 커집니다.

    참고

    시맨틱 청킹은 기반 모델을 사용하기 때문에 추가 비용이 발생합니다. 비용은 보유한 데이터의 양에 따라 달라집니다. 기초 모델 비용에 대한 자세한 내용은 Amazon Bedrock 요금을 참조하십시오.

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

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

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

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

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

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

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

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

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

  9. 문장 그룹 간의 중단점 임계값을 설정합니다. 문장 사이에 중단점을 그리기 위한 문장 거리/비유사도의 백분위수 임계값입니다. 임계값이 높을수록 문장을 더 쉽게 구분할 수 있어야 여러 청크로 분할할 수 있습니다. 임계값이 높을수록 청크 수가 줄어들고 일반적으로 평균 청크 크기도 커집니다.

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

API

{ ... "vectorIngestionConfiguration": { "chunkingConfiguration": { "chunkingStrategy": "SEMANTIC", "semanticChunkingConfiguration": { // Semantic chunking "maxTokens": 300, "bufferSize": 0, "breakpointPercentileThreshold": 95 } } } }
참고

권장 기본값은 다음과 같습니다.

  • 청크당 최대 토큰 300개

  • 0 버퍼

  • 95% 중단점 백분위수 임계값

청크당 최대 토큰의 허용 값, 버퍼 크기, 중단점 백분위수 임계값에 대한 자세한 내용은 을 참조하십시오. SemanticChunkingConfiguration

고급 파싱 옵션

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

참고

고급 파싱 사용 시 추가 비용이 발생합니다. 이는 기초 모델을 사용하기 때문입니다. 비용은 보유한 데이터의 양에 따라 달라집니다. 기초 모델 비용에 대한 자세한 내용은 Amazon Bedrock 요금을 참조하십시오.

고급 파싱을 사용하여 파싱할 수 있는 파일 유형 및 총 데이터에는 제한이 있습니다. 고급 구문 분석을 위한 파일 유형에 대한 자세한 내용은 문서 형식을 참조하십시오. 고급 구문 분석을 사용하여 파싱할 수 있는 전체 데이터에 대한 자세한 내용은 할당량을 참조하십시오.

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

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

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

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

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

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

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

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

API

{ ... "vectorIngestionConfiguration": { "chunkingConfiguration": { ... }, "parsingConfiguration": { // Parse tabular data within docs "parsingStrategy": "BEDROCK_FOUNDATION_MODEL", "bedrockFoundationModelConfiguration": { "parsingPrompt": { "parsingPromptText": "string" }, "modelArn": "string" } } } }

메타데이터 선택: CSVs

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

청크당 문서 메타데이터 필드/속성에는 제한이 있습니다. 지식창고 할당량을 참조하십시오.

CSV파일을 인제스트하기 전에 다음 사항을 확인하세요.

  • 형식이 CSV RFC418 0이고 UTF -8로 인코딩되어 있습니다.

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

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

  • fileName.csv.metadata.json 파일을 다음과 같은 형식으로 제공합니다.

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

CSV파일은 한 번에 한 행씩 파싱되며 청킹 전략과 벡터 임베딩이 콘텐츠 필드에 적용됩니다. Amazon Bedrock 지식 베이스는 현재 하나의 콘텐츠 필드를 지원합니다. 콘텐츠 필드는 청크로 분할되며 각 청크와 관련된 메타데이터 필드 (열) 는 문자열 값으로 처리됩니다.

예를 들어 '설명' 열과 'Creation_Date' 열이 CSV 있는 필드가 있다고 가정해 보겠습니다. 설명 필드는 콘텐츠 필드이고 생성 날짜는 관련 메타데이터 필드입니다. 설명 텍스트는 청크로 분할되고 의 각 행에 대한 벡터 임베딩으로 변환됩니다. CSV 만든 날짜 값은 날짜의 문자열 표현으로 처리되며 설명의 각 청크와 연결됩니다.

포함/제외 필드가 제공되지 않으면 콘텐츠 열을 제외한 모든 열이 메타데이터 열로 처리됩니다. 포함 필드만 제공되는 경우 제공된 열만 메타데이터로 처리됩니다. 제외 필드만 제공되는 경우 제외 열을 제외한 모든 열이 메타데이터로 처리됩니다. 두 가지 fieldsToInclude 모두에 fieldsToExlcude 동일한 내용을 제공하면 Amazon fieldName Bedrock에서 검증 예외가 발생합니다. 포함과 제외 사이에 충돌이 있는 경우] 실패로 이어집니다.

a 안에 있는 빈 CSV 행은 무시되거나 건너뛰게 됩니다.

사용자 지정 변환

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

Amazon Bedrock 지식 기반에서 기본적으로 지원하지 않는 특정 청크 로직이 있을 수 있습니다. 청킹 로직이 포함된 Lambda 함수를 지정하는 동안 청킹 없음 전략 옵션을 사용하십시오. 또한 Lambda 함수로 청크할 파일을 지식 기반에 기록하려면 Amazon S3 버킷을 지정해야 합니다.

청크 후 Lambda 함수는 청크된 파일을 동일한 버킷에 다시 쓰고 추가 처리를 위해 지식 베이스에 대한 참조를 반환합니다. 원하는 경우 직접 제공할 수도 있습니다. AWS KMS S3 버킷에 저장되는 파일의 암호화를 위한 키.

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

청크 레벨 메타데이터를 추가한 후 Lambda 함수는 청크된 파일을 동일한 버킷에 다시 쓰고 추가 처리를 위해 지식 베이스에 대한 참조를 반환합니다. 충돌이 발생할 경우 청크 수준 메타데이터가 우선하며 파일 수준 메타데이터를 덮어쓴다는 점에 유의하십시오.

사용자 지정 청킹에 Python Lambda 함수를 사용하는 예제는 Lambda 함수를 사용한 사용자 지정 청크를 참조하십시오.

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

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

{ ... "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": { "uri": "string" } }, "fileMetadata": { "key1": "value1", "key2": "value2" }, "contentBatches": [{ "key":"string" }] }] }

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

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

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

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