
【徹底解説】Difyのチャンク分割とは?
RAG(検索拡張生成)の技術にはチャンク分割というナレッジを分割する技術が使われることが多いです。
Difyではノーコードでチャンク分割を実装することが可能です。
今回はDifyのチャンク分割について解説していきます。
そもそもDifyとは?
そもそもDifyってなに?という方は以下の記事をご覧ください。
チャンク分割とは?
チャンク分割とは、大量のテキストデータを、LLM が処理できるサイズに分割する処理のことです。分割されたテキストは「チャンク」と呼ばれます。
LLMにはコンテキストウインドという一度に入力できる限界のサイズがあります。また、入力するトークン数に対して課金されるLLMがほとんどのためナレッジを分割する必要があります。
今回はDify内で設定可能なチャンク分割について解説します。
設定できる画面は以下です。
ナレッジから設定することが可能です。

チャンク分割のメリット
先ほども解説しましたが、チャンク分割とは、大量のテキストデータを、LLM が処理できるサイズに分割する処理のことです。
チャンク分割は、RAG において重要な役割を果たし、適切なチャンク分割を行うことで、以下の効果が期待できます 。
検索精度の向上
クエリと関連性の高いテキストを正確に取得することができます。処理効率の向上
小さなチャンクを処理することで、メモリ使用量を削減し、処理速度を向上させることができます。文脈の維持
文脈を維持したチャンクを作成することで、LLM がより正確な応答を生成することができます。多様なクエリのサポート
特定の質問から広範なトピックまで、さまざまなクエリに対応することができます。
チャンク分割を行う際には、チャンクのサイズが重要です。
小さなチャンクは検索精度を向上させる可能性がありますが、文脈が失われる可能性がある一方、大きなチャンクは文脈を維持できますが、検索精度が低下する可能性があり、両者はトレードオフの関係になっています。
また、「チャンクとは?」の部分で述べたとおり、チャンク分割はLLMのパフォーマンス最適化とコスト削減の効果もあります。
Difyでサポートされているチャンク分割の方法
Dify では、主に「汎用モード」と「親子モード」の2つのチャンク分割方法をサポートしています。
それぞれ解説していきます。
汎用モード

汎用モードには「チャンク識別子」「最大チャンク数」「チャンクのオーバーラップ」「テキストの前処理ルール」の設定項目があります。
それぞれ解説します!
チャンク識別子
チャンクの区切り文字を指定します。デフォルト値は \n で、段落ごとにチャンク分割されます。
正規表現を使用してチャンク分割ルールをカスタマイズすることもできます。例えば、「 。」を指定すると、文ごとにチャンク分割されます。
※「。」がない文章だと分割できないので注意最大チャンク数
1つのチャンクに許容される最大文字数を指定します。この制限を超えると自動的にチャンク分割が行われます。
デフォルト値は500トークンで、最大チャンク長は4000トークンです。チャンクのオーバーラップ
チャンク間に重複する文字数を指定します。重複させることで、文脈の維持に役立ちます。
Difyではチャンク長の10〜25%に設定することを推奨しています。連続するスペース、改行、タブを置換する
チャンク分割する前にあらかじめ連続スペースや連続改行、連続タブを削除するかどうかを選択できます。すべてのURLとメールアドレスを削除する
チャンク分割する前ナレッジ内のURLとメールアドレスが削除されます。
個人情報などが含まれるナレッジを使う場合に有効です。
親子モード

親子モードでは、親チャンクと子チャンクの2つのレベルでチャンク分割を行います。
階層チャンクと呼ばれることもあり、チャンクの弱点であるトレードオフの関係を多少解消できます。
親チャンク
ドキュメント全体または段落などの、より大きなチャンクです。子チャンク
親チャンクに含まれる、文などのより小さなチャンクです。
階層チャンクでは「親チャンク」と「子チャンク」に分かれます。
親チャンクは汎用チャンクのように、段落ごとに分けたり、文章の全体を保持します。
子チャンクでは親チャンクの情報をさらに改行やスペースなどでチャンク分割します。
これによって、検索する時は子チャンク、LLMに検索時に引っかかった子チャンクのある親チャンクを送信することにより汎用チャンクのトレードオフを解消しています。
親チャンクの分割方法には、「段落」と「全文」の2つのモードがあります 。
段落
汎用チャンクと同様に、区切り文字と最大チャンク長に基づいてテキストを段落に分割し、分割されたテキストを親チャンクとして使用します。段落が明確に分かれているテキストに適しています。全文
ドキュメント全体を親チャンクとして使用します。ドキュメント全体をまとめて取得する必要がある場合に適しています。
※ただし、10,000トークン以上は切り捨てられるので注意
検索用子チャンクチャンク識別子
段落か全文で分割した親チャンクをさらに分割します。
子チャンクも同様に分割するための改行などの識別子と最大チャンク数を設定できます。
まとめ
今回は、Difyにおけるチャンク分割について解説しました。
チャンク分割は、LLMアプリケーションの精度、速度、メモリ使用量に大きな影響を与えるため、適切な方法を選択することが大切です!
チャンク分割以外にも「インデックス」や「検索設定」の設定項目が存在します。
他の記事で解説しますのでぜひそちらもご覧ください!