Traffine I/O

日本語

2023-08-30

LLMアプリケーションにおけるチャンク

LLMアプリケーションにおけるチャンク

LLM(Large Language Model)関連のアプリケーションを開発する際には、チャンキングについて理解する必要があります。チャンキングとは、大きなテキストをより小さなセグメントに分割するプロセスであり、これによってベクトルデータベースから取得するコンテンツの関連性が最適化されます。

チャンキングの方法

チャンキングには以下のような方法が挙げられます。

固定サイズのチャンキング

テキストは一定のサイズのチャンクに分割されます。これはもっとも単純な方法であり、高速ですが、文脈が失われる可能性があります。

python
text = "..." # your text
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(
    separator = "\n\n",
    chunk_size = 256,
    chunk_overlap  = 20
)
docs = text_splitter.create_documents([text])

文に基づいたチャンキング

テキストは文の境界に沿って分割されます。これにより、文脈がより保持されますが、チャンクのサイズが不均一になります。

python
text = "..." # your text
docs = text.split(".")

再帰的チャンキング

テキストを階層的かつ反復的に小さなチャンクに分割します。

python
text = "..." # your text
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
    # Set a really small chunk size, just to show.
    chunk_size = 256,
    chunk_overlap  = 20
)

docs = text_splitter.create_documents([text])

特殊なチャンキング

Markdown、LaTeXなど、特定のフォーマットに対応したチャンキング方法も存在します。

python
from langchain.text_splitter import MarkdownTextSplitter
markdown_text = "..."

markdown_splitter = MarkdownTextSplitter(chunk_size=100, chunk_overlap=0)
docs = markdown_splitter.create_documents([markdown_text])

どのチャンキングを選べば良いか

最適なチャンキング戦略を選定する際に、以下のような要素を考慮する必要があります。

  • コンテンツの性質
    インデックスされるべきコンテンツが長文(例えば、学術論文や書籍)か短文(例えば、ツイートやチャットメッセージ)かによって、選定すべきモデルやチャンキング戦略が変わります。

  • 使用する埋め込みモデル
    どの埋め込みモデルが使用されるか、そしてそのモデルがもっとも効率的に動作するチャンクサイズは何か、といった点も重要です。

  • ユーザークエリの期待値
    ユーザーからのクエリが短く具体的なものか、それとも長く複雑なものかによって、チャンキングの方法も適応的に変更する必要があります。

  • 結果の用途
    検索結果がどのように使用されるか(例:セマンティック検索、質問応答、要約など)も、チャンキング戦略の選定に影響を与えます。

参考

https://www.pinecone.io/learn/chunking-strategies/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!