AWS 기술 블로그
Cohere Rerank를 사용한 RAG 성능 향상
검색 증강 생성(RAG)은 기업이 실시간 데이터를 통합하고 독점 데이터를 사용하여 더욱 풍부하고 상호작용적인 대화를 가능하게 하는 Generative AI(생성형 AI) 애플리케이션을 개발할 수 있도록 돕는 강력한 기술입니다.
RAG를 활용하면 이러한 AI 애플리케이션이 외부의 신뢰할 수 있는 도메인별 데이터를 효과적으로 사용하여 사용자 쿼리에 대한 언어 모델의 문맥을 강화할 수 있습니다. 하지만, 응답의 신뢰성과 정확도는 적절한 도메인 데이터를 찾는 것에 크게 의존합니다. 따라서, RAG의 검색 프로세스를 최적화하는 것이 생성된 응답의 신뢰성을 높이는 핵심 요소로 작용합니다.
RAG 시스템은 검색 및 정보 탐색 시스템 구축에 중요한 도구이지만, 종종 검색 단계가 최적화되지 않아 기대에 미치지 못하는 경우가 발생할 수 있습니다. 이를 보완하기 위해 순위를 재 조정하는 Rerank 단계를 추가해 검색 품질을 개선할 수 있습니다.
RAG는 정보 검색 기술과 자연어 처리(NLP)를 결합해 텍스트 생성 또는 언어 모델링 작업의 성능을 한층 향상시키는 접근 방식입니다. 이 방법은 대규모 텍스트 데이터 코퍼스에서 관련 정보를 검색하여 이를 생성 프로세스에 반영하는 것으로, 외부 지식이나 문맥을 모델에 통합하여 응답의 정확성, 다양성, 그리고 관련성을 개선하는 것이 핵심입니다.
RAG 오케스트레이션의 워크플로우
RAG 오케스트레이션은 일반적으로 두 단계로 구성됩니다.
- 검색 단계 – RAG는 생성된 검색 쿼리를 활용하여 외부 데이터 소스에서 관련된 문서들을 가져옵니다. 검색 쿼리가 주어지면, RAG 기반 애플리케이션은 데이터 소스에서 관련 문서나 구절을 탐색하여 필요한 정보를 수집합니다.
- 근거 기반 생성 단계 – 검색된 문서나 구절을 바탕으로 생성 모델은 신뢰할 수 있는 자료를 활용하여 답변을 생성하며, 필요한 경우 인라인 인용을 포함하여 답변의 신뢰성을 높입니다. 이를 통해 보다 높은 신뢰성 있는 응답을 제공할 수 있습니다.
다음 다이어그램은 RAG 워크플로우를 보여줍니다.
RAG 오케스트레이션에서의 문서 검색
RAG 오케스트레이션에서 문서를 검색하는 방법 중 하나는 Dense Retrieval(밀도 검색)입니다. 밀도 검색은 사용자 쿼리의 의미와 의도를 의미론적으로 파악하여 관련 문서를 찾는 정보 검색 기법입니다. 이 방식은 사용자 쿼리와 가장 가까운 문서를 임베딩 공간에서 찾아내며, 아래 스크린샷은 이러한 밀도 검색의 과정을 보여줍니다.
고밀도 검색의 목표는 사용자 쿼리와 문서(또는 구절)를 모두 고밀도 벡터 공간에 매핑하는 것입니다. 이 공간에서는 코사인 유사도나 유클리드 거리와 같은 표준 거리 메트릭을 사용해 쿼리와 문서 벡터 간의 유사도를 계산할 수 있습니다. 그 후, 계산된 거리 메트릭을 기준으로 사용자 쿼리의 의미에 가장 근접하게 일치하는 문서들이 사용자에게 표시됩니다.
검색 쿼리에 대한 최종 응답의 품질은 검색된 문서의 관련성에 큰 영향을 받습니다. 고밀도 검색 모델은 매우 효율적이며 대규모 데이터 세트에 적합하게 확장할 수 있지만, 이 방법의 단순성 때문에 더 복잡한 데이터와 질문을 다룰 때는 한계를 보이기도 합니다. 문서 벡터는 일반적으로 786-1536 차원 벡터로, 텍스트의 의미를 압축하여 표현하지만, 정보가 단일 벡터로 압축되는 과정에서 일부 내용이 손실될 수 있습니다. 따라서 벡터 검색을 통해 문서를 검색할 때, 가장 관련성이 높은 정보가 항상 검색 결과의 최상위에 위치하는 것은 아닙니다.
Cohere Rerank로 검색 정확도 높이기
정확도 문제를 해결하기 위해 검색 엔지니어들은 검색 품질을 높이기 위한 방법으로 2단계 검색 방식을 채택해 왔습니다. 이 2단계 시스템에서는 1단계 모델(임베딩 모델 또는 리트리버)이 대규모 데이터 세트에서 후보 문서들을 먼저 검색한 후, 2단계 모델(리랭커)이 이를 재정렬하여 가장 관련성이 높은 문서들이 상위에 표시되도록 합니다.
예를 들어, Cohere Rerank와 같은 재랭크 모델은 쿼리와 문서 쌍이 주어졌을 때 각 쌍에 대한 유사성 점수를 출력합니다. 이 점수는 검색 쿼리와의 관련성을 바탕으로 문서 순위를 재정렬하는 데 사용됩니다. 특히 Cohere Rerank 모델은 딥 러닝을 통해 쿼리와 문서 간의 정밀한 일치를 평가하여, 기존 임베딩 모델보다 검색 정확도를 크게 향상시키는 점에서 두드러집니다. Cohere Rerank는 쿼리와 문서를 동시에 처리하여 관련성 점수를 산출함으로써 더 정교한 문서 선택이 가능합니다.
다음 예를 보면, 애플리케이션에 “Aidan N.Gomez가 공저한 트랜스포머 논문이 언제 발표되었나요?”라는 쿼리가 입력되었습니다. k = 6인 top-k 결과를 반환한 이미지에서 가장 정확한 결과가 목록의 하단에 포함되어 있었습니다. 만약 k = 3으로 제한되었다면, 가장 관련성이 높은 문서가 검색 결과에서 제외되었을 것입니다.
Cohere Rerank는 의미론적 콘텐츠, 사용자 의도, 문맥과의 관련성 등 추가 기준에 따라 검색된 문서의 관련성을 재평가하고 순서를 변경하여 유사성 점수를 산출하는 것을 목표로 합니다. 그런 다음 이 점수를 사용하여 쿼리의 관련성에 따라 문서를 재정렬합니다. 다음 이미지는 Rerank를 사용한 재정렬 결과를 보여줍니다.
1단계 검색 후 Cohere Rerank를 적용하면, RAG 오케스트레이션은 두 가지 접근 방식의 장점을 모두 활용할 수 있습니다. 1단계 검색은 벡터 공간 내에서 유사한 항목을 식별하여 관련 항목을 효율적으로 캡처하는 데 도움을 주며, Rerank는 문맥상 가장 관련성이 높은 결과가 상단에 노출되도록 하여 검색 결과의 최적화를 돕습니다. 이러한 방식으로 검색 효율성이 크게 향상되며, 이를 보여주는 다이어그램은 아래와 같습니다.
Cohere Rerank의 최신 버전인 Rerank 3는 엔터프라이즈 검색과 RAG 시스템을 최적화하기 위해 설계된 특별한 기능을 제공합니다. Rerank 3는 다음과 같은 최첨단 기능을 갖추고 있어 엔터프라이즈 검색 품질을 한층 더 강화합니다.
- 4K 컨텍스트 길이: 긴 문서에서도 검색 품질을 크게 향상시킵니다.
- 다면 및 반정형 데이터 검색: 이메일, 송장, JSON 문서, 코드, 표 등 다양한 형태의 데이터를 검색할 수 있습니다.
- 100개 이상의 언어 지원: 다국어 환경에서도 원활하게 사용할 수 있습니다.
- 지연 시간 개선 및 총 소유 비용(TCO) 절감: 성능을 높이고 비용 부담을 줄입니다.
Rerank 3의 엔드포인트는 쿼리와 문서 목록을 받아 각 문서에 유사성 점수를 할당하여 정렬된 배열을 반환합니다. 이를 통해 키워드 또는 벡터 검색 시스템의 대대적인 점검이나 교체 없이도 검색 품질을 크게 향상시킬 수 있습니다.
개발자와 기업은 Cohere의 호스팅 API와 Amazon SageMaker에서 Rerank를 이용할 수 있습니다. 이 게시물에서는 Amazon SageMaker에서 Cohere Rerank를 활용하는 단계별 가이드를 제공합니다.
솔루션 개요
이 솔루션은 크게 다음 두가지 단계를 거칩니다.
- 모델 패키지를 구독합니다.
- 엔드포인트를 생성하고 실시간으로 추론을 수행합니다.
사전 요구 사항
이 솔루션을 진행하려면 다음 사전 요구 사항이 필요합니다.
- cohere-aws 노트북을 사용합니다.
이 노트북은 참조용이며 노트북에서 제안하는 대로 변경하지 않으면 실행할 수 없습니다. 이 노트북에는 Jupyter 인터페이스에서 올바르게 렌더링 되는 요소가 포함되어 있으므로 Amazon SageMaker 노트북 인스턴스 또는 Amazon SageMaker Studio에서 열어야 합니다.
- AmazonSageMakerFullAccess 정책이 추가된 AWS Identity and Access Management (IAM) 역할이 필요합니다. 이 Machine Learning(ML) 모델을 성공적으로 배포하기 위해선 다음 옵션중 하나를 선택해야 합니다.
- AWS 계정에 Cohere Rerank 3 Model – Multilingual 구독이 없는 경우 IAM 역할에 다음 세 가지 권한이 있어야 하며, 사용 중인 AWS 계정에서 AWS 마켓플레이스의 솔루션을 구독 할 수 있는 권한이 있어야 합니다.
aws-marketplace:ViewSubscriptions
aws-marketplace:Unsubscribe
aws-marketplace:Subscribe
- AWS 계정에 Cohere Rerank 3 Model – Multilingual 솔루션이 이미 구독 되어 있는 경우 모델 패키지 구독 지침을 건너 뛸 수 있습니다.
- AWS 계정에 Cohere Rerank 3 Model – Multilingual 구독이 없는 경우 IAM 역할에 다음 세 가지 권한이 있어야 하며, 사용 중인 AWS 계정에서 AWS 마켓플레이스의 솔루션을 구독 할 수 있는 권한이 있어야 합니다.
상용 환경에서는 전체 액세스 권한 사용을 자제하세요. 보안 모범 사례는 최소 권한 원칙을 준수해야합니다.
Amazon SageMaker에서 Rerank3 구현하기
Cohere Rerank를 사용하여 RAG 성능을 개선하려면 다음 섹션의 지침을 따르세요.
모델 패키지 구독
모델 패키지를 구독하려면 다음 단계를 수행합니다.
- AWS 마켓플레이스에서 모델 패키지 목록 페이지에 Cohere Rerank 3 Model – Multilingual 를 엽니다.
- Subscribe(구독)을 선택합니다.
- 소프트웨어 구독 페이지에서 EULA(최종 사용자 라이선스 계약), 가격 및 지원 약관을 검토하고 제안 수락을 선택합니다.
- Accept Offer(구성 계속)을 선택한 다음 지역을 선택합니다. 다음 코드 샘플과 같이 제품 ARN이 표시됩니다. 이것은 Boto3를 사용하여 배포 가능한 모델을 생성하는 동안 지정해야 하는 모델 패키지 Amazon Resource Name(ARN)입니다. 해당 지역에 해당하는 ARN을 복사하여 다음 셀에 입력합니다.
이 게시물에 포함된 코드 스니펫은 aws-cohere 노트북에서 가져온 것입니다. 이 코드에 문제가 발생하면 노트북에서 최신 버전을 참조하세요.
!pip install --upgrade cohere-aws
# if you upgrade the package, you need to restart the kernel
from cohere_aws import Client
import boto3
아래의 스크린샷에서 Configure for AWS CloudFormation(AWS CloudFormation 구성) 페이지의 Product ARN을 복사하여 샘플 코드의 cohere_pacakge
변수에 입력합니다.
cohere_package = " cohere-rerank-multilingual-v3--13dba038aab73b11b3f0b17fbdb48ea0"
model_package_map = {
"us-east-1": f"arn:aws:sagemaker:us-east-1:865070037744:model-package/{cohere_package}",
"us-east-2": f"arn:aws:sagemaker:us-east-2:057799348421:model-package/{cohere_package}",
"us-west-1": f"arn:aws:sagemaker:us-west-1:382657785993:model-package/{cohere_package}",
"us-west-2": f"arn:aws:sagemaker:us-west-2:594846645681:model-package/{cohere_package}",
"ca-central-1": f"arn:aws:sagemaker:ca-central-1:470592106596:model-package/{cohere_package}",
"eu-central-1": f"arn:aws:sagemaker:eu-central-1:446921602837:model-package/{cohere_package}",
"eu-west-1": f"arn:aws:sagemaker:eu-west-1:985815980388:model-package/{cohere_package}",
"eu-west-2": f"arn:aws:sagemaker:eu-west-2:856760150666:model-package/{cohere_package}",
"eu-west-3": f"arn:aws:sagemaker:eu-west-3:843114510376:model-package/{cohere_package}",
"eu-north-1": f"arn:aws:sagemaker:eu-north-1:136758871317:model-package/{cohere_package}",
"ap-southeast-1": f"arn:aws:sagemaker:ap-southeast-1:192199979996:model-package/{cohere_package}",
"ap-southeast-2": f"arn:aws:sagemaker:ap-southeast-2:666831318237:model-package/{cohere_package}",
"ap-northeast-2": f"arn:aws:sagemaker:ap-northeast-2:745090734665:model-package/{cohere_package}",
"ap-northeast-1": f"arn:aws:sagemaker:ap-northeast-1:977537786026:model-package/{cohere_package}",
"ap-south-1": f"arn:aws:sagemaker:ap-south-1:077584701553:model-package/{cohere_package}",
"sa-east-1": f"arn:aws:sagemaker:sa-east-1:270155090741:model-package/{cohere_package}",
}
region = boto3.Session().region_name
if region not in model_package_map.keys():
raise Exception(f"Current boto3 session region {region} is not supported.")
model_package_arn = model_package_map[region]
엔드포인트 생성 및 실시간 추론 수행
Amazon SageMaker의 실시간 추론이 어떻게 작동하는지 이해하려면 Amazon SageMaker 개발자 가이드를 참조하세요.
엔드포인트 생성
엔드포인트를 만들려면 다음 코드를 사용하세요.
co = Client(region_name=region)
co.create_endpoint(arn=model_package_arn, endpoint_name="cohere-rerank-multilingual-v3-0", instance_type="ml.g5.2xlarge", n_instances=1)
# If the endpoint is already created, you just need to connect to it
# co.connect_to_endpoint(endpoint_name="cohere-rerank-multilingual-v3-0”)
엔드포인트가 생성된 후에는 실시간 추론을 수행할 수 있습니다.
입력 페이로드 생성
입력 페이로드를 생성하려면 다음 코드를 사용합니다.
documents = [
{"Title":"Contraseña incorrecta","Content":"Hola, llevo una hora intentando acceder a mi cuenta y sigue diciendo que mi contraseña es incorrecta. ¿Puede ayudarme, por favor?"},
{"Title":"Confirmation Email Missed","Content":"Hi, I recently purchased a product from your website but I never received a confirmation email. Can you please look into this for me?"},
{"Title":"أسئلة حول سياسة الإرجاع","Content":"مرحبًا، لدي سؤال حول سياسة إرجاع هذا المنتج. لقد اشتريته قبل بضعة أسابيع وهو معيب"},
{"Title":"Customer Support is Busy","Content":"Good morning, I have been trying to reach your customer support team for the past week but I keep getting a busy signal. Can you please help me?"},
{"Title":"Falschen Artikel erhalten","Content":"Hallo, ich habe eine Frage zu meiner letzten Bestellung. Ich habe den falschen Artikel erhalten und muss ihn zurückschicken."},
{"Title":"Customer Service is Unavailable","Content":"Hello, I have been trying to reach your customer support team for the past hour but I keep getting a busy signal. Can you please help me?"},
{"Title":"Return Policy for Defective Product","Content":"Hi, I have a question about the return policy for this product. I purchased it a few weeks ago and it is defective."},
{"Title":"收到错误物品","Content":"早上好,关于我最近的订单,我有一个问题。我收到了错误的商品,需要退货。"},
{"Title":"Return Defective Product","Content":"Hello, I have a question about the return policy for this product. I purchased it a few weeks ago and it is defective."}
]
실시간 추론 수행
실시간 추론을 수행하려면 다음 코드를 사용하세요.
response = co.rerank(documents=documents, query='What emails have been about returning items?', rank_fields=["Title","Content"], top_n=5) print(f'Documents: {response}')
다음 스크린샷은 출력 응답을 보여줍니다.
리소스 정리
반복되는 비용 청구를 방지하려면 다음 단계에 따라 이 솔루션에서 생성한 리소스를 정리하세요.
모델 삭제
이제 실시간 추론을 성공적으로 수행했으므로 엔드포인트가 더 이상 필요하지 않습니다. 엔드포인트를 종료하여 요금이 부과되지 않도록 할 수 있습니다.
co.delete_endpoint()
co.close()
모델 패키지의 구독을 취소하려면 다음 단계를 따르세요. 구독을 취소하기 전에 모델 패키지에서 또는 알고리즘을 사용하여 만든 배포 가능한 모델이 없는지 확인하세요. 이 정보는 모델과 연결된 컨테이너 이름을 확인하여 찾을 수 있습니다.
AWS 마켓플레이스에서 제품 구독을 취소하는 단계
- 소프트웨어 구독 페이지에서 Machine Learning(기계 학습) 탭을 선택합니다.
- 구독을 취소하려는 리스팅을 찾은 다음 구독 취소를 선택합니다.
요약
RAG는 실시간 데이터를 통합하고 도메인 특화 정보를 사용하여 대화를 가능하게 하는 AI 애플리케이션을 개발할 수 있는 기술입니다. RAG는 외부의 도메인별 지식 소스를 활용하여 AI 응답을 향상시키지만, 그 효과는 올바른 소스 자료를 알맞게 찾는 데 달려 있습니다. 이 게시물에서는 Cohere Rerank를 사용하여 RAG 시스템의 검색 효율성과 정확성을 개선하는 데 중점을 둡니다. RAG 오케스트레이션에는 일반적으로 관련 문서 검색과 답변 생성이라는 두 단계가 포함됩니다. 고밀도 검색은 대규모 데이터 세트에는 효율적이지만, 정보 압축으로 인해 복잡한 데이터와 질문에는 어려움을 겪을 수 있습니다. Cohere Rerank는 딥 러닝을 사용해 문서와 쿼리 간의 정렬을 평가하여 보다 세밀한 문서 검색을 가능하게 하는 유사성 점수를 함께 출력합니다.
Amazon Sagemaker Jumpstart에서 Cohere Rerank 3 및 Cohere Rerank 3 Nimble을 쉽게 찾을 수 있습니다.