Cohere는 기업이 인간-기계 상호작용을 개선할 수 있도록 돕는 자연어 처리 모델을 제공하는 캐나다의 스타트업입니다.
이 노트북은 retriever에서 Cohere의 rerank endpoint를 사용하는 방법을 보여줍니다.
1 Cohere API 키 설정
- API 키 발급
.env파일에COHERE_API_KEY키 값에 API 키를 넣어주세요.
참고 - 공식 도큐먼트 - Reranker Model 리스트
2 사용법
def pretty_print_docs(docs):
print(
f"\n{'-' * 100}\n".join(
[f"Document {i+1}:\n\n" + d.page_content for i, d in enumerate(docs)]
)
)Cohere 다국어 지원 모델
- Embedding:
embed-multilingual-v3.0,embed-multilingual-light-v3.0,embed-multilingual-v2.0 - Reranker:
rerank-multilingual-v3.0,rerank-multilingual-v2.0
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_cohere import CohereEmbeddings
# 문서 로드
documents = TextLoader("./data/appendix-keywords.txt").load()
# 텍스트 분할기 초기화
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
# 문서 분할
texts = text_splitter.split_documents(documents)
# 검색기 초기화
retriever = FAISS.from_documents(
texts, CohereEmbeddings(model="embed-multilingual-v3.0")
).as_retriever(search_kwargs={"k": 10})
# 질의문
query = "Word2Vec 에 대해서 알려줘!"
# 문서 검색
docs = retriever.invoke(query)
# 문서 출력
pretty_print_docs(docs)3 CohereRerank을 사용한 재정렬
이제 기본 retriever를 ContextualCompressionRetriever로 감싸보겠습니다. Cohere 재정렬 엔드포인트를 사용하여 반환된 결과를 재정렬하는 CohereRerank를 추가할 것입니다. CohereRerank에서 모델 이름을 지정하는 것이 필수임을 유의하십시오!
from langchain.retrievers.contextual_compression import ContextualCompressionRetriever
from langchain_cohere import CohereRerank
# 문서 재정렬 모델 설정
compressor = CohereRerank(model="rerank-multilingual-v3.0")
# 문맥 압축 검색기 설정
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)
# 압축된 문서 검색
compressed_docs = compression_retriever.invoke("Word2Vec 에 대해서 알려줘!")
# 압축된 문서 출력
pretty_print_docs(compressed_docs)