チャンク分割戦略(固定、文単位、意味単位)
検索品質における、固定サイズ、文を考慮した分割、意味単位の分割のトレードオフを学びます。
「チャンク分割戦略(固定、文単位、意味単位)」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
なぜチャンク化するのか
200ページのPDF全体を1つのベクトルとして埋め込むことはできません。ベクトルが抽象的になりすぎて、具体的なクエリと一致しなくなるためです。ドキュメントを小さな単位(それぞれ約200〜800トークン)に分割し、各チャンクを埋め込んで、チャンク単位で検索します。
固定サイズのチャンク化
最も単純な方法は、N文字またはNトークンごとに分割することです。
def fixed_chunks(text, chunk_size=1000, overlap=200):
chunks = []
i = 0
while i < len(text):
chunks.append(text[i:i + chunk_size])
i += chunk_size - overlap
return chunks
sample_text = "A" * 2500
chunks = fixed_chunks(sample_text, chunk_size=1000, overlap=200)
print(f"Split {len(sample_text)} characters into {len(chunks)} chunks")
for i, c in enumerate(chunks):
print(f"Chunk {i+1}: {len(c)} chars")
なぜ重複させるのか
チャンクサイズの通常10〜20%を重複させると、境界をまたぐ文が少なくとも1つのチャンクに完全な形で含まれるようになります。重複がなければ、チャンク間で分断された重要な事実を検索できない可能性があります。
文単位のチャンク化
文の途中で分割せず、文の境界で分割します。
import re
def sentence_chunks(text, max_chars=1000):
sentences = re.split(r'(?<=[.!?])\s+', text)
chunks = []
current = ''
for s in sentences:
if len(current) + len(s) > max_chars and current:
chunks.append(current.strip())
current = s
else:
current += ' ' + s
if current:
chunks.append(current.strip())
return chunks
sample_text = "This is sentence one. This is sentence two! Is this sentence three? Yes it is."
chunks = sentence_chunks(sample_text, max_chars=40)
for i, c in enumerate(chunks):
print(f"Chunk {i+1}: {c!r}")
再帰的分割(LangChain)
LangChainのRecursiveCharacterTextSplitterは、まず段落の境界、次に文、最後に単語の境界で分割し、可能な限り構造を維持します。
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=100,
separators=['\n\n', '\n', '. ', ' ']
)
chunks = splitter.split_text(document)意味的チャンク化
話題が変わる箇所で分割します。実装では各文を埋め込み、連続する文の埋め込み同士が大きく離れている箇所で分割します。
計算には時間がかかりますが、話題のまとまりが保たれたチャンクを生成できます。
Markdown対応チャンク化
Markdownドキュメントでは、セクションをまとめて保持できるよう、見出しの境界で分割します。各チャンクは、親となる見出しをコンテキストとして継承します。
コード対応チャンク化
ソースコードでは、文字数ではなく関数やクラスの境界で分割します。tree-sitterなどのツールを使うと、ASTを考慮したチャンク化ができます。
チャンクサイズの選び方
トレードオフは次のとおりです。
- 小さなチャンク(約200トークン) — 一致が正確になるが、管理するチャンクが増える
- 大きなチャンク(約1000トークン) — 一致ごとのコンテキストは増えるが、正確さは下がる
デフォルトは、10〜20%の重複を持つ500〜800トークンです。
メタデータの保持
すべてのチャンクにメタデータを付加します。
- ソースURL / ファイルパス
- ページ番号
- ドキュメントのタイトル
- セクション / 見出し
- 作成日時 / 更新日時
フィルタリング、引用、再ランキングに役立ちます。
コンテキスト付きチャンク
最近の手法では、各チャンクの先頭にLLMが生成した1行のコンテキストを付加します(例:「このチャンクは、収益について説明している2024年第2四半期の会社の財務報告書に含まれています。」)。検索性能が30〜50%向上します。
親子チャンク
正確な一致のために小さなチャンクをインデックス化し、一致したときにはコンテキストを含むより大きな親段落を取得します。
- 文単位のチャンクを埋め込む
- 一致したら、親となる800トークンのチャンクを返す
なぜ重複させるのか
チャンクは通常、なぜ10〜20%重複させるのでしょうか。
まとめ
まずは、約800トークン、重複10%の再帰的文字分割から始めてください。必要に応じて、意味や構造を考慮した方法を追加します。
よくある質問
「チャンク分割戦略(固定、文単位、意味単位)」レッスンは無料ですか?
はい。「チャンク分割戦略(固定、文単位、意味単位)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「チャンク分割戦略(固定、文単位、意味単位)」で何を学びますか?
検索品質における、固定サイズ、文を考慮した分割、意味単位の分割のトレードオフを学びます。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「チャンク分割戦略(固定、文単位、意味単位)」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- RAGが解決すること(Knowledge Cut-off、Hallucinations)
- チャンク分割戦略(固定、文単位、意味単位)
- ドキュメントセットのインデックス作成
- FAISSまたはChromaで素朴なRAGを構築する