GFLOPS 生成AI HUB

RAGのChunkingとは?データを分割する適当なChunkingの種類や方法

  • 2024.10.02
  • RAG

Chunkingとは?

Chunking(チャンキング)とは、LLM(Large Language Models、大規模言語モデル)の文脈ウィンドウに従うために、テキストをより小さく分割するプロセスのことを言います。テキスト全体を一度に処理することができない場合、特にLLMが一度に扱えるテキストの量(コンテキストウィンドウ)に限りがある場合に、テキストを小さなセグメントに「chunking(チャンキング)」し、それぞれの小さなチャンクとして処理する方法です。

このプロセスは、大規模なテキストデータを効率的に扱い、モデルがテキストの全体的な意味を失うことなく、各セグメントの内容を理解しやすくするために重要です。チャンキングによって、LLMは各チャンクの情報を個々に分析し、その後、全体の文脈や意味を考慮して統合することが可能になります。このアプローチにより、テキストの理解と処理の精度が向上し、より関連性の高い回答や内容の生成が可能になります。

RAGのChunkingとは?

Retrieval Augmented Generation(RAG)は、大規模言語モデル(LLM)の問題である「ハルシネーション(hallucination)」に対処するために導入されたシステムです。LLMは意味のある文法的に正しいテキストを生成する能力がありますが、「ハルシネーション」とは、LLMが誤った回答を自信を持って生成し、それが真実であるかのように信じさせる現象を指します。これはLLMが導入されて以来の大きな問題であり、誤った情報や事実に基づかない回答につながります。

RAGは、文書やその一部(チャンク)を取り、それを「ベクトル埋め込み」という数値に変換します。このベクトルは文書の内容を表すもので、1つのベクトルが1つの文書チャンクに対応しています。これらのベクトルは、専用のデータベース(ベクトルストア)に保存されます。

文書をベクトルに変換するためには、特別なモデルが必要で、これを「エンコーディングモデル」や「バイエンコーダー」と呼びます。これらのモデルは大量のデータで訓練されており、文書の意味を1つのベクトルにまとめる能力があります。

検索の効果は、チャンクがベクトルストアにどのように表現され、保存されているかに大きく依存します。与えられたテキストに対して適切なチャンクサイズを見つけることは、一般的に非常に難しい問題です。

検索の改善は、さまざまな検索方法によって行うことができますが、より良いChunkingの手法によっても改善することができます。RAGは、情報の誤りを減らし、より正確で事実に基づいた回答を生成することを目的としています。

Chunkingの方法の違いとは?

Fixed Size Chunking(固定サイズのチャンキング)

固定されたchunkingFixed Size Chunking)は最も一般的なchunkingのアプローチです。チャンク内のトークン数を決定し、任意でオーバーラップ(overlap)の度合いを選択します。一般的には、チャンク間で意味的な文脈が失われないように、ある程度のオーバーラップを持たせることが望ましいとされています。Fixed size chunkingは、ほとんどの一般的なケースで最適な方法です。他のchunkingの方法と比較して、計算コストが安く、NLPライブラリを使用せずに済むためシンプルです。

Chunkingにおけるオーバーラップ(overlap)

テキスト処理やデータ分析の文脈において、chunkingのオーバーラップとは、連続するチャンク(データの断片やセグメント)間で共有される部分のことを指します。例えば、テキストを一定のサイズのチャンクに分割する場合、オーバーラップを設定すると、一つのチャンクの終わりの部分と次のチャンクの始まりの部分が重複します。

オーバーラップを設定する目的は、チャンキングによって失われがちな文脈や情報の連続性を保持することです。特に、テキストデータや時系列データを扱う場合、オーバーラップを設けることで、データの断片間で重要な関係性やパターンを見逃さないようにすることができます。

Recursive Chunking (再帰的チャンキング)

再帰的チャンキングは、入力テキストをより管理しやすい小さな部分(チャンク)に分割する方法です。このプロセスは、文書やテキストデータを解析しやすくするために使用されます。具体的には、以下のような手順で行われます。

  1. セパレーター(separators)の使用: テキストを小さなチャンクに分割するために、ピリオド(。)、クエスチョンマーク(?)、エクスクラメーションマーク(!)などのセパレーター(区切り文字)を使用します。
  2. 階層的かつ繰り返し分割: 最初にテキストを大まかに分割し、その後、得られたチャンクが望むサイズや構造になっていない場合には、異なるセパレーターや基準を使ってさらに細かく分割を行います。このプロセスは、望むチャンクのサイズや構造が得られるまで繰り返し行われます
  3. 再帰的な呼び出し: 初回の分割で望む結果が得られない場合、メソッドは自身を再帰的に呼び出し、異なるセパレーターや基準を適用してさらに分割を試みます。

この方法の目的は、チャンクのサイズが完全に一致しなくても、似たサイズのチャンクを得ることです。これにより、テキスト全体を均等に分析しやすくなり、情報の欠落や文脈の断片化を防ぐことができます。

再帰的チャンキングは、特に大きな文書や複雑なテキストデータを扱う際に有効な手法です。異なるセパレーターや基準を用いることで、テキストの特定の構造や内容に合わせた柔軟なチャンキングが可能になり、テキスト解析の精度や効率を向上させることができます。

Document Specific Chunking (文書特有のチャンキング)

文書特有のチャンキング(Document Specific Chunking)は、文書の構造を考慮に入れたテキスト分割の方法です。一定数の文字数や再帰的なプロセスを使用するのではなく、文書の論理的なセクション、例えば段落やサブセクションに沿ってチャンクを作成します。これにより、著者がコンテンツに与えた組織構造を維持し、テキストの一貫性を保つことができます。

この方法は、明確に定義されたセクションを持つ構造化された文書において、取得される情報をより関連性が高く、有用なものにします。MarkdownやHTMLなど、さまざまな形式の文書を扱うことが可能です。

Document Specific Chunkingは、文書全体の文脈や意味を尊重することで、より正確な情報検索やデータ解析を実現します。例えば、研究論文や技術文書では、各セクションが特定の情報や議論を含んでいるため、このようなチャンキング方法は、文書の内容を正確に把握し、利用者が求める情報を効率的に見つけ出すのに役立ちます。

このアプローチは、文書の論理的な流れを破壊せずに情報を整理し、検索や分析のために文書から最も重要な部分を抽出することを目指しています。そのため、特に情報の構造が重要な文書を扱う際に有効な手段となります。

Semantic Chunking(セマンティックチャンキング)

セマンティックチャンキング(Semantic Chunking)は、テキスト内の関係性を考慮して、テキストを意味的に完全なチャンクに分割するアプローチです。この方法は、情報の整合性を検索時に保持し、より正確で文脈に適した結果を導くことを目指しています。

セマンティックチャンキングの特徴

  • テキストの関係性を考慮: セマンティックチャンキングは、単にテキストを一定のサイズに切り分けるのではなく、テキスト内の意味的なつながりや関係性に基づいてチャンクを形成します。これにより、各チャンクはテキストの特定のアイデアやトピックを完全に表現するようになります。
  • 情報の整合性の維持: このアプローチにより、テキストから抽出される情報はその意味を損なうことなく、検索や分析のために使用されます。これにより、検索結果や分析結果の信頼性が向上します。
  • 文脈に適した結果: テキストの意味的な関係性を考慮してチャンクを形成することで、より文脈に適した情報を提供することが可能になります。これは、特に複雑なテキストや、特定のトピックに関連する情報を求める場合に有効です。

セマンティックチャンキングは、テキスト内の意味的な関係性を分析する必要があるため、Fix Size Chunkingや他の単純な分割方法と比較して処理に時間がかかる場合があります。このため、リアルタイムでの応答が求められるアプリケーションには適さないことがあります。

セマンティックチャンキングは、特に情報の精度と文脈の適切さが重視される場合に、他のチャンキング戦略より優れた選択肢となります。しかし、その利点を享受するためには、処理速度の遅さというトレードオフが存在します。

Agentic Chunk(エージェンティックチャンク)

エージェンティックチャンク(Agentic Chunk)は、文書を人間が行うような方法で処理するという仮説に基づいています。このアプローチでは、文書の最初から始め、最初の部分を一つのチャンクとして扱います。その後、文書を下に進みながら、新しい文や情報が最初のチャンクに属するか、それとも新しいチャンクを開始すべきかを決定します。このプロセスは、文書の最後まで続けられます。

エージェンティックチャンクのアプローチは、まだ実験段階にあり、大規模な言語モデル(LLM)の呼び出しを複数回行う際の処理時間やそのコストの問題から、本格的な使用にはまだ適していません。この方法に対する公開ライブラリでの実装は、現時点ではまだ提供されていません。

このアプローチの魅力は、文書をより自然に、人間の読み方に近い方法で分析しようとする点にあります。文書を通して意味のある単位で区切り、情報の流れを自然に追うことで、文書の理解や情報の抽出が改善される可能性があります。しかし、この手法の実用化には、処理効率の向上やコスト削減など、さらなる課題の解決が必要です。

適当なChunkingをすることの重要性とは?

Lewisら(2020)がRAGモデルの研究開発において、Wikipediaの記事の100語が重複しないチャンクに分割され、約2100万の文書を構成し、これが検索データベースとして機能したように、chunkingは検索プロセスの効率と精度を向上させるために不可欠であり、それがRAGの性能に様々な側面で影響を与えます:

検索の効率性を上げる

テキストを小さなチャンク(chunk)に分割することで、RAGは関連情報をより迅速かつ正確に検索して特定できるようになります。これは、小さなチャンクが検索システムの計算負荷を減らし、検索結果の応答時間を速くするためです。

関連情報の検索能力向上

Chunkingにより、RAGはより関連性の高い情報をより正確に特定できるようになります。各チャンクが情報が集約された内容であるため、検索システムが各チャンクのクエリとの関連性を評価しやすくなり、最も関連性の高い情報を検索する可能性が向上します。

スケーラビリティとメンテナンス力の高さ

Chunkingにより、大規模なデータセットの扱いが可能になります。データベースを効率的に管理し、更新することを可能にするため、各チャンクをインデックスして、維持することができます。これは、正確で関連性の高い出力を生成するために最新情報に依存するRAGにとって特に重要です。

情報分布のバランスを保つ

Chunkingは情報がデータセット全体に均等に分散されることを保証し、バランスの取れた検索プロセスを維持するのに役立ちます。この均一な分布は、コーパス(言語全集)がチャンキングされていない場合、長い文書が検索結果を優先する可能性がある検索モデルが長い文書に偏ることを防ぎます。

適当なChunkingの手法を選択するには?

Fixed Size ChunkingとSemantic Chunkingを例にあげながら、適当なChunkingの手法を選択する方法について解説します。

Fixed Size Chunkingを選択する時考慮しておきたい点

Fixed Size Chunkingは、前述した通り事前に定義された文字数、単語数、またはトークン数に基づいてテキストを均一なサイズに分割する方法です。

メリット:

実装のシンプルさとチャンクがどのように分割されるのか予測ができるので、チャンクの管理とインデックスが容易になります。高い計算効率と実装の容易さ。overlapを設定することでチャンクのサイズを調整できる

デメリット:

  • チャンクサイズによってデータの断片間で重要な関係性やパターンを分断してしまう可能性がある。
  • テキストの構造に沿ってchunkingをするわけではないので、柔軟性に欠ける。

使用する場面: 文脈の深さよりも速度が重要な局面、例えば、大規模なデータセットの分析などで利用することが推奨されます。Fixed Size Chunkingはoverlapを適切に設定することで、データのチャンク間で情報の連続性を保ち、特にテキストや時系列データの分析において重要なパターンや関係性を正確に把握し、データ分析の精度を向上させることができます。

Semantic Chunkingを選択する時考慮しておきたい点

Semantic Chunkingは、意味のあるコンテンツ単位に基づいてテキストを区切る手法であり、文、段落、またはテーマの区切りなど、構造に沿ってchunkingをします。

メリット:

  • 各チャンク内の情報の整合性を維持し、チャンク内の全コンテンツが文脈的に関連しています。
  • 取得されたデータの関連性と精度を向上させるため、生成された回答の品質が向上します。

デメリット

  • テキストの構造とコンテンツを理解する必要があるため、実装がより複雑です。
  • Fix Size Chunkingなどと比較して処理速度が遅くリアルタイム性に欠ける可能性がある。

使用する場面

セマンティックチャンキングは、文書の要約や法的文書の分析など、コンテンツに敏感なアプリケーションに特に有益です。ここでは、言語の完全な文脈とニュアンスを理解することが不可欠です。この手法により、テキストの自然な流れを保ちながら、より関連性の高い情報を抽出することが可能になります。

まとめ

チャンキングとベクトル化は、RAGのテキスト検索の結果に大きく影響します。適切なチャンキングを行うことで、テキストベクトルが必要とされる意味情報をしっかりと含むようになり、結果として検索の正確さと効率が高まります。たとえば、文章や段落のようにテキストの自然な構成に基づいたチャンキングの手法は、情報がベクトル形式に変換される際にその一貫性を保つのに役立ちます。このような方法により、生成されたベクトルが実際のコンテンツの関連性をよく反映するため、RAGのようなシステムでより精密な検索が可能になります。

ChatGPTを組織で活用
ご興味ある方はお気軽にご連絡ください