mcpField
C
chunking-strategy

chunking-strategy

github.com/giuseppe-trisciuoglioデータ・データベース3653.8k 回インストール7 週間前に更新
リポジトリ

chunking-strategy について

RAG、ベクトル検索、文書処理を構築する開発者向けのチャンク分割ガイドです。固定長からセマンティック方式までを扱い、分割の検証と検索評価の手順を示します。

主な機能

  1. 01複数の分割方式の選択
  2. 02チャンクサイズと重複率の指針
  3. 03構造を保つ分割
  4. 04意味的一貫性の検証
  5. 05適合率と再現率の評価

活用シーン

  1. 01RAG文書処理パイプラインの構築
  2. 02ベクトル検索品質の改善
  3. 03Markdown、コード、表の分割
  4. 04適合率や再現率の低下調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/giuseppe-trisciuoglio/developer-kit --skill chunking-strategy

インストール後、Claude Code で/chunking-strategyを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
advanced-strategies.md
evaluation.md
implementation.md
research.md
semantic-methods.md
strategies.md
tools.md
visualization-tools.md

詳細

RAG システムのチャンク分割戦略

概要

RAG システム、ベクトルデータベース、ドキュメント処理向けのチャンク分割戦略を提供します。チャンクサイズ、オーバーラップ率、境界検出方法を推奨し、意味的な一貫性を検証して、検索メトリクスを評価します。

使用する場面

RAG システム、ベクトル検索パイプライン、ドキュメントのチャンク分割ワークフローを構築または最適化するときや、検索品質が低い既存システムのパフォーマンスを調整するときに使用します。

手順

チャンク分割戦略を選択する

ドキュメントの種類とユースケースに基づいて選択します。

  1. 固定サイズのチャンク分割(レベル 1)

    • 明確な構造のない単純なドキュメントに使用します
    • 512 トークン、オーバーラップ率 10~20% から始めます
    • 調整の目安:事実に関するクエリでは 256、分析では 1024
  2. 再帰的な文字チャンク分割(レベル 2)

    • 構造的な境界があるドキュメントに使用します
    • 階層的な区切り文字:段落 → 文 → 単語
    • ドキュメントの種類(HTML、Markdown、JSON)に合わせてカスタマイズします
  3. 構造認識型チャンク分割(レベル 3)

    • 構造化コンテンツ(Markdown、コード、表、PDF)に使用します
    • 関数、セクション、表ブロックなどの意味単位を保持します
    • 分割後に構造が保持されていることを検証します
  4. 意味的チャンク分割(レベル 4)

    • テーマの移り変わりがある複雑なドキュメントに使用します
    • 埋め込みベースの境界検出では、類似度のしきい値を 0.8 に設定します
    • バッファサイズ:3~5 文
  5. 高度な手法(レベル 5)

    • 長いコンテキストを扱うモデルには Late Chunking を使用します
    • 高精度が求められる場合は Contextual Retrieval を使用します
    • 計算コストと検索性能の向上を監視します

参考:references/strategies.md。

チャンク分割パイプラインを実装する
  1. ドキュメントを前処理する

    • 構造、コンテンツの種類、情報密度を分析します
    • マルチモーダルコンテンツ(表、画像、コード)を特定します
  2. パラメーターを選択する

    • チャンクサイズ:埋め込みモデルのコンテキストウィンドウの 1/4
    • オーバーラップ率:ほとんどの場合 10~20%
    • 戦略固有の設定
  3. 処理して検証する

    • チャンク分割戦略を適用します
    • 一貫性を検証します:evaluate_chunks.py --coherence を実行します(下記参照)
    • 代表的なドキュメントでテストします
  4. 評価して反復する

    • 適合率と再現率を測定します
    • 適合率が 0.7 未満の場合:chunk_size を 25% 減らして再評価します
    • 再現率が 0.6 未満の場合:オーバーラップ率を 10% 増やして再評価します
    • レイテンシとメモリ使用量を監視します

参考:references/implementation.md。

チャンクの品質を検証する

検証コマンドを実行して、チャンクの品質を評価します。

# Check semantic coherence (requires sentence-transformers)
python -c "
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')
chunks = [...]  # your chunks
embeddings = model.encode(chunks)
similarity = (embeddings @ embeddings.T).mean()
print(f'Cohesion: {similarity:.3f}')  # target: 0.3-0.7
"

# Measure retrieval precision
python -c "
relevant = sum(1 for c in retrieved if c in relevant_chunks)
precision = relevant / len(retrieved)
print(f'Precision: {precision:.2f}')  # target: >= 0.7
"

# Check chunk size distribution
python -c "
import numpy as np
sizes = [len(c.split()) for c in chunks]
print(f'Mean: {np.mean(sizes):.0f}, Std: {np.std(sizes):.0f}')
print(f'Min: {min(sizes)}, Max: {max(sizes)}')
"

参考:references/evaluation.md。

例

固定サイズのチャンク分割
from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
    chunk_size=256,
    chunk_overlap=25,
    length_function=len
)
chunks = splitter.split_documents(documents)
構造認識型のコードチャンク分割
import ast

def chunk_python_code(code):
    tree = ast.parse(code)
    chunks = []
    for node in ast.walk(tree):
        if isinstance(node, (ast.FunctionDef, ast.ClassDef)):
            chunks.append(ast.get_source_segment(code, node))
    return chunks
意味的チャンク分割
def semantic_chunk(text, similarity_threshold=0.8):
    sentences = split_into_sentences(text)
    embeddings = generate_embeddings(sentences)
    chunks, current = [], [sentences[0]]
    for i in range(1, len(sentences)):
        sim = cosine_similarity(embeddings[i-1], embeddings[i])
        if sim < similarity_threshold:
            chunks.append(" ".join(current))
            current = [sentences[i]]
        else:
            current.append(sentences[i])
    chunks.append(" ".join(current))
    return chunks

ベストプラクティス

基本原則
  • コンテキストの保持と検索精度のバランスを取ります
  • チャンク内の意味的な一貫性を保ちます
  • 埋め込みモデルのコンテキストウィンドウの制約に合わせて最適化します
実装
  • 固定サイズ(512 トークン、オーバーラップ率 15%)から始めます
  • ドキュメントの特性に基づいて反復します
  • デプロイ前に、対象分野に固有のドキュメントでテストします
避けるべき落とし穴
  • 過剰なチャンク分割:コンテキストに乏しい小さなチャンク
  • チャンク分割の不足:大きすぎるチャンク内の情報が欠落する
  • 意味的な境界やドキュメント構造を無視する
  • 多様なコンテンツの種類に一律の設定を適用する

制約と警告

リソースに関する考慮事項
  • 意味的な手法には、相当量の計算リソースが必要です
  • Late Chunking には、長いコンテキストに対応した埋め込みモデルが必要です
  • 複雑な戦略は処理レイテンシを増加させます
  • 大量のドキュメントを処理する際は、メモリを監視します
品質要件
  • 処理後に意味的な一貫性を検証します
  • デプロイ前に、代表的なドキュメントでテストします
  • チャンクが単独で意味を保つことを確認します
  • 不正な形式のコンテンツに対するエラー処理を実装します

References

コメント