ドキュメント検索の最適化

LangChain による検索拡張生成(RAG)

Meri Nova

Machine Learning Engineer

RAG の R に注目

ベクターデータベースから文書を取得し、アプリに返して応答を生成するイメージ。

LangChain による検索拡張生成(RAG)

Dense

チャンクを非ゼロ成分のみの単一ベクトルにエンコード

ベクトル空間で類似語(Large Language Model、AI、Machine Learning)が近くに配置されている図。

  • 長所: 意味を捉えやすい
  • 短所: 計算コストが高い
LangChain による検索拡張生成(RAG)

Dense

チャンクを非ゼロ成分のみの単一ベクトルにエンコード

ベクトル空間で、意味的に近い語ほど近接して埋め込まれている図。

  • 長所: 意味を捉えやすい
  • 短所: 計算コストが高い

Sparse

主にゼロ成分で、語一致によりエンコード

特定の語を含む文書のうち、より多く含む文書が強調されている図。

  • 長所: 精密、説明可能、希少語に強い
  • 短所: 汎化性
LangChain による検索拡張生成(RAG)

スパース検索手法

TF-IDF: 文書を、その文書を特徴づける語でエンコード

特定の語を含む文書のうち、より多く含む文書が強調されている図。

BM25: 高頻度語によるスコア飽和を抑制

LangChain による検索拡張生成(RAG)

BM25 検索

from langchain_community.retrievers import BM25Retriever

chunks = [ "Python was created by Guido van Rossum and released in 1991.", "Python is a popular language for machine learning (ML).", "The PyTorch library is a popular Python library for AI and ML." ]
bm25_retriever = BM25Retriever.from_texts(chunks, k=3)
LangChain による検索拡張生成(RAG)

BM25 検索

results = bm25_retriever.invoke("When was Python created?")
print("Most Relevant Document:")
print(results[0].page_content)
Most Relevant Document:
Python was created by Guido van Rossum and released in 1991.
  • Python was created by Guido van Rossum and released in 1991."
  • "Python is a popular language for machine learning (ML)."
  • "The PyTorch library is a popular Python library for AI/ML."
LangChain による検索拡張生成(RAG)

RAG での BM25

retriever = BM25Retriever.from_documents(
    documents=chunks, 
    k=5
)

chain = ({"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() )
1 https://www.datacamp.com/blog/what-is-retrieval-augmented-generation-rag
LangChain による検索拡張生成(RAG)

RAG での BM25

print(chain.invoke("How can LLM hallucination impact a RAG application?"))
RAG アプリは、的外れや不正確な応答を生成する可能性があります。
LangChain による検索拡張生成(RAG)

Vamos praticar!

LangChain による検索拡張生成(RAG)

Preparing Video For Download...