RAG 청크 보강 단계
문서를 청크 컬렉션으로 분할한 후, 다음 단계는 각 청크를 정리하고 메타데이터로 추가하여 풍부하게 하는 것입니다. 청크를 정리하면 벡터 검색에서 의미 체계 쿼리에 대해 더 나은 일치를 달성할 수 있습니다. 메타데이터를 추가하면 의미 체계 검색을 넘어서는 청크의 검색을 지원할 수 있습니다. 데이터 정리 및 증강에는 청크(데이터 블록)의 스키마 확장이 포함됩니다.
이 글에서는 청크를 향상시키는 다양한 방법과, 청크에 적용하여 벡터 비교를 개선할 수 있는 몇 가지 일반적인 클리닝 작업에 대해 설명합니다. 또한 검색 인덱스를 강화하기 위해 청크에 추가할 수 있는 몇 가지 일반적인 메타데이터 필드를 설명합니다.
이 문서는 시리즈의 일부입니다. 다음은 소개.
다음 코드 샘플에서는 데이터로 보강된 청크를 보여 줍니다.
데이터 정리
데이터를 청크 분할하면 일반적으로 이러한 청크를 벡터화하고 벡터 데이터베이스에 저장하여 워크로드가 가장 관련성이 큰 청크를 찾을 수 있습니다. 최적화된 벡터 검색은 쿼리와 가장 가까운 의미 체계가 일치하는 데이터베이스의 행만 반환합니다. 데이터 정리의 목표는 텍스트의 의미에 본질적이지 않은 잠재적인 차이를 제거하여 유사한 일치를 지원하는 것입니다. 다음은 몇 가지 일반적인 정리 절차입니다.
메모
쿼리 결과로 원래의 가공되지 않은 청크를 반환해야 하므로, 정리되고 벡터화된 데이터를 저장할 필드를 추가해야 합니다.
소문자 전략을 구현합니다. 소문자를 사용하면 문장의 시작 부분에 있는 단어와 같이 대문자로 된 단어가 문장 내의 해당 단어와 일치할 수 있습니다. 임베딩은 일반적으로 대/소문자를 구분하므로, "치타"와 "cheetah"는 동일한 논리적 단어에 대해 서로 다른 벡터를 생성합니다. 예를 들어, 임베딩된 쿼리 "치타 또는 퓨마가 더 빠르나요?"에 대해 "치타는 퓨마보다 빠릅니다"라는 임베딩이 "치타는 푸마보다 빠릅니다."보다 더 일치합니다. 일부 소문자 전략은 고유 명사를 포함한 모든 단어를 소문자로 변환하는 반면, 다른 전략은 문장의 첫 단어만 소문자로 변환합니다.
중지 단어를 제거합니다. 중지 단어는 "a", "an" 및 "the"와 같은 단어입니다. 중지 단어를 제거하여 결과 벡터의 차원을 줄일 수 있습니다. 이전 예제에서 중지 단어를 제거하면 "치타는 푸마보다 빠릅니다"와 "치타는 푸마보다 빠릅니다"는 "치타 빠른 푸마"와 벡터적으로 같습니다. 그러나 일부 중지 단어는 의미 체계적 의미를 지니고 있음을 이해하는 것이 중요합니다. 예를 들어 "not"은 중지 단어로 간주될 수 있지만 중요한 의미를 가지고 있습니다. 중지 단어를 제거하는 효과를 확인하기 위해 테스트해야 합니다.
맞춤법 오류를 수정합니다. 철자가 틀린 단어는 임베딩 모델에서 올바르게 철자된 단어와 일치하지 않습니다. 예를 들어, "cheatah"는 포함에서 "치타"와 동일하지 않습니다. 이 문제를 해결하려면 맞춤법 오류를 수정해야 합니다.
유니코드 문자를 제거합니다. 유니코드 문자를 제거하면 데이터의 잡음을 줄이고 차원을 감소시킬 수 있습니다. 중지 단어와 마찬가지로 일부 유니코드 문자에는 관련 정보가 포함될 수 있습니다. 유니코드 문자를 제거하는 것이 미치는 영향을 이해하기 위해 테스트를 수행하는 것이 중요합니다.
텍스트를 정규화합니다. "정규화 표준에 따라 약어를 확장하고, 숫자를 단어로 변환하며, "I'm"을 "I am"으로 확장하는 것과 같은 수축어 확장 과정을 통해 텍스트를 정규화하면 벡터 검색의 성능이 향상될 수 있습니다."
청크 확장
벡터화된 청크에 대한 의미 체계 검색은 일부 유형의 쿼리에서는 잘 작동하지만 다른 쿼리에는 잘 작동하지 않습니다. 지원해야 하는 쿼리 유형에 따라 청크를 추가 정보로 보강해야 할 수 있습니다. 추가 메타데이터 필드는 모두 포함 항목과 동일한 행에 저장되며 검색 솔루션에서 필터 또는 검색의 일부로 사용할 수 있습니다.
다음 이미지는 완전히 보강된 콘텐츠의 JSON을 보여 줍니다. 검색 플랫폼에서 메타데이터를 사용하는 방법을 설명합니다.
추가해야 하는 메타데이터 열은 데이터 형식 및 지원하려는 쿼리 유형을 포함하여 문제 도메인에 따라 달라집니다. 달성하려는 사용자 환경, 사용 가능한 데이터 및 결과 품질을 분석해야 합니다. 여기에서 워크로드 요구 사항을 해결하는 데 도움이 될 수 있는 메타데이터를 확인할 수 있습니다.
다음은 원래 청크 텍스트, 잠재적 용도에 대한 몇 가지 지침, 메타데이터 콘텐츠를 생성하는 데 일반적으로 사용되는 도구 또는 기술과 함께 몇 가지 일반적인 메타데이터 필드입니다.
아이디. ID는 청크를 고유하게 식별합니다. 고유한 ID는 처리 중에 청크가 저장소에 이미 있는지 여부를 확인하는 데 유용합니다. ID는 일부 키 필드의 해시일 수 있습니다. 도구: 해시 라이브러리입니다.
제목. 제목은 청크에 대한 유용한 반환 값입니다. 청크의 콘텐츠에 대한 간략한 요약을 제공합니다. 이 요약은 일치하는 키워드를 포함할 수 있으므로 인덱싱된 검색을 사용하여 쿼리하는 데 유용할 수도 있습니다. 도구: 언어 모델입니다.
요약. 요약은 일반적인 반환 값이며 인덱싱된 검색에서 사용할 수 있다는 측면에서 제목과 유사합니다. 요약은 일반적으로 제목보다 깁니다. 도구: 언어 모델입니다.
청크를 다시 표현하기. 청크를 재구성하는 것은 언어의 변형, 예를 들어 동의어나 의역을 포착하여 벡터 검색 필드로 유용할 수 있습니다. 도구: 언어 모델입니다.
키워드. 키워드 검색은 텍스트가 아닌 데이터, 정확한 일치 항목 검색 및 특정 용어 또는 값이 중요한 경우에 유용합니다. 예를 들어 자동차 제조업체는 여러 해 동안 각 모델에 대한 검토 또는 성능 데이터를 가질 수 있습니다. "2009년 제품 X 검토"는 의미상 "2010년 제품 X 검토" 및 "2009년 제품 Y 검토"와 같습니다. 이 경우 제품 및 연도의 키워드를 일치시킬 때 더 효과적입니다. 도구: 언어 모델, RAKE, KeyBERT, 멀티레이크.
엔터티. 개체는 사람, 조직, 그리고 위치와 같은 정보의 특정 요소입니다. 키워드와 마찬가지로 엔터티는 정확한 일치 검색 또는 특정 엔터티가 중요한 경우에 적합합니다. 도구: spaCy, 스탠포드 명명 엔터티 인식기 (스탠포드 NER), scikit-learn, NLTK (자연어 도구 키트).
청크 텍스트를 정리했습니다. 정리된 부분의 텍스트입니다. 도구: 언어 모델입니다.
청크가 대답할 수 있는 질문입니다. 때때로 내장된 쿼리가 내장된 청크와 잘 맞지 않는 경우가 있습니다. 예를 들어 쿼리는 청크 크기에 비해 작을 수 있습니다. 청크가 응답할 수 있는 쿼리를 공식화하고 사용자의 실제 쿼리와 미리 작성된 쿼리 간에 벡터 검색을 수행하는 것이 더 좋을 수 있습니다. 도구: 언어 모델입니다.
근원. 쿼리에 대한 반환으로 청크의 출처가 가치 있을 수 있습니다. 원본을 반환하면 쿼리자가 원래 원본을 인용할 수 있습니다.
언어. 청크의 해당 언어는 쿼리에서 필터로 사용할 수 있습니다.
보강 비용
청크를 확장하거나 강화하기 위해 일부 언어 모델을 사용하면 비용이 많이 들 수 있습니다. 고려 중인 각 개선 비용을 계산하고 시간에 따른 예상 조각 수를 곱해야 합니다. 보강된 필드의 테스트와 함께 이 정보를 사용하여 최상의 비즈니스 결정을 결정해야 합니다.
다음 단계
관련 리소스
- AI 기능 강화 Azure AI 검색
- Azure AI Search의 기술 세트 개념