Search OS
用語集
GEOとAI検索

セマンティックチャンク分割

セマンティックチャンク分割は、文字数のような固定単位ではなく、意味の境界に沿ってドキュメントを分割します。これはRAGのチャンク分割戦略の一つで、隣接する文の埋め込み類似度が急激に低下する箇所を見つけてそこで区切り、意味的にまとまりのあるチャンクを生成します。

  • セマンティックチャンク分割とは、文字数ではなく意味の境界で文書を分割するチャンク分割手法であり、隣接する文同士の埋め込み類似度が急激に低下する箇所で分割します。チャンク分割自体はより広い概念であり、セマンティックチャンク分割は、埋め込み類似度を測定して

  • どこで分割するかを決める、意味ベースのバリエーションです。 to split by measuring embedding similarity.

  • LangChain のSemanticChunkerと LlamaIndex のSemanticSplitterNodeParserは代表的な実装であり、パーセンタイル、標準偏差、四分位範囲などのしきい値を用いて分割点を設定します。

  • 意味的に一貫したチャンクは検索精度を向上させる可能性がありますが、その分、追加の埋め込み呼び出しに伴うコストが発生します。

  • 2024年の評価研究(arXiv:2410.13070)では、セマンティック・チャンク化による効果は一貫しておらず、多くの場合、その追加の計算コストを正当化できないと結論づけています。

セマンティック・チャンク化とは

セマンティック・チャンク化は、文書をその意味の境界に沿って分割する手法です。文(またはそれより小さな単位)を順番に埋め込み、隣接する部分同士の埋め込み類似度(通常はコサイン距離)を測定し、類似度が急激に低下する点、つまり距離が大きい箇所を分割点として扱います。その結果、意味的に関連する文は1つのチャンク内にまとまり、話題が切り替わる場所で境界が形成されます。

ここでの前提は、より広い概念であるチャンク化です。RAGパイプラインでは長い文書をそのまま埋め込みや検索にかけることができないため、テキストを小さな単位に分割します。そして、あらゆるチャンク化戦略の核心は、どこで区切るかという問題にあります。最も単純な方法は固定サイズのチャンク化で、あらかじめ決めた文字数またはトークン数で機械的に分割します。セマンティック・チャンク化は、この長さという基準を意味の変化という基準に置き換えます。言い換えると、セマンティック・チャンク化はチャンク化の一種であり、埋め込み類似度に基づいて分割点を決める点が特徴です。

これが重要なのは、チャンクの境界が検索品質を左右するからです。1つの意味単位が2つのチャンクに分断されると、検索時に文脈が断ち切られます。逆に、無関係な内容が1つのチャンクに混在すると、埋め込みのシグナルが希薄になります。セマンティック・チャンク化は、各チャンクの凝集性を高めるために、境界を意味に合わせて整合させようとする試みです。

固定サイズのチャンク化 vs. セマンティック・チャンク化

項目

固定サイズのチャンク分割

セマンティックチャンク分割

分割基準

文字数やトークン数などの固定長(多くの場合、オーバーラップあり)

隣接する文間の埋め込み類似度の変化(意味の境界)

境界の位置

固定位置での機械的な分割

類似度が急激に低下する箇所。トピックの切り替わり

チャンク長

均一

可変(内容によって異なる)

意味的なまとまり

境界が文やトピックの途中を分断する場合がある

関連性の高い文同士をまとめやすい

計算コスト

低い(埋め込み不要)

高い(分割のための追加埋め込み呼び出しが必要)

代表的な実装

RecursiveCharacterTextSplitter など

LangChain SemanticChunker、LlamaIndex SemanticSplitterNodeParser

仕組みとしきい値の種類

セマンティック・チャンク分割では、しきい値メカニズムによって分割位置を決定します。arXiv:2410.13070 の論文と LangChain のドキュメントでは、次の相対的なしきい値が説明されています。

  • パーセンタイル: 隣接距離分布の第n百分位点を超える地点で分割します。95パーセンタイルが一般的で、値を下げると分割頻度が高くなります。

  • 標準偏差: 平均から特定の標準偏差倍だけ離れた距離で分割します。

  • 四分位範囲: 四分位範囲(IQR)に対して外れ値とみなされる距離で分割します。

  • 勾配: 距離の二次差分(変化率)にパーセンタイルを適用して、境界を特定します。

LangChain のSemanticChunkerは、4つすべてのbreakpoint_threshold_typeオプションをサポートしており、デフォルトは percentile です。LlamaIndex のSemanticSplitterNodeParserは、類似度を評価する際にまとめて扱う文の数であるbuffer_sizeと、breakpoint_percentile_thresholdをパラメータとして公開しており、公式例ではそれぞれ 1 と 95 の値が使われています。パーセンタイル閾値を上げると、分割器は大きなトピックの移り変わりでのみ分割するようになり、より保守的な(長めの)チャンクが生成されます。

# LlamaIndex example
from llama_index.core.node_parser import SemanticSplitterNodeParser
from llama_index.embeddings.openai import OpenAIEmbedding

splitter = SemanticSplitterNodeParser(
    buffer_size=1,
    breakpoint_percentile_threshold=95,
    embed_model=OpenAIEmbedding(),
)
nodes = splitter.get_nodes_from_documents(documents)

証拠と事例

セマンティック・チャンク分割は直感的には魅力的ですが、その有効性はデータや状況によって異なります。Vectara とウィスコンシン大学マディソン校の研究者による 2024 年の論文"Is Semantic Chunking Worth the Computational Cost?"(Qu, Tu, Bao, arXiv:2410.13070)では、文書検索、証拠検索、回答生成という 3 つのタスクにわたって、セマンティック・チャンク分割と固定サイズのチャンク分割を大規模に比較しました。文書検索では 10 のデータセット、証拠検索では RAGBench ベースの 5 つのデータセットを使用しています。その結論は、セマンティック・チャンク分割による改善は「一貫性がなく、追加の計算コストを正当化できないことが多い」というものであり、特に実際の文書構造を反映した非合成文書では、固定サイズのチャンク分割のほうがより効率的で信頼性の高い選択肢であり続けました。

同様に、その後の評価のいくつかでも、セマンティック・チャンク分割が常に優れているわけではないと報告されています。企業向けの文書検索環境の中には、単純なチャンク分割に特定の埋め込みを組み合わせたほうが最高の性能を示した例もあり、これはセマンティック・チャンク分割が本質的に優れているという一般的な前提と矛盾します。したがって、セマンティック・チャンク分割の採用は、実際のデータに対してその費用対効果を検証したうえでのみ行うのが最も安全です。

参考文献

関連コンテンツ

既存のウェブサイトを維持したまま、

検索とAIが情報を読み取れる状態を確認します。

SEOの基盤からAI検索での可視性まで、継続して運用します。

まずは製品資料で、Search OSの仕組みをご確認ください。