Shikata Ga Nai

Private? There is no such things.

第18回:データを分割するってどういうこと?

Hello there, ('ω')ノ

AIに情報を渡すとき「まるごと」はNG?

RAGを構築する際、よく出てくるのが「データを分割する(チャンク化する)」という言葉。
でも、初めて聞く方からすると…

💬「データを分割?PDFをそのまま渡しちゃダメなの?」
💬「何のためにわざわざ切り分けるの?」
💬「どこで、どうやって分ければいいの?」

こんな疑問が湧くのではないでしょうか?

今回は、RAGにおける「データの分割(チャンク)」の意味と目的、具体的なやり方や注意点を、初心者にもわかるように丁寧に解説します!


そもそも「チャンク(Chunk)」ってなに?

チャンクとは、簡単に言うと…

文章データをAIが扱いやすい“適度な大きさのかたまり”に分けたもの

です。

たとえば、100ページのPDFをそのまま読み込ませても、AIは「どこに何が書いてあるか」を正確に把握できません。

だからこそ、1ページごと・段落ごと・見出しごとなど、“意味が通じる単位”で切り分けて保存するのです。


なぜチャンクに分ける必要があるの?

理由①:AIが一度に扱える情報量には限界がある(=コンテキストウィンドウ)

  • 例えばGPT-3.5は約8,000〜10,000文字しか一度に処理できません
  • 長すぎる文書は途中で切れてしまい、誤解や抜け漏れの原因に

理由②:検索精度を高めるため

  • ベクトル検索では、「意味が近いチャンクを探す」ことで情報を見つける
  • 1チャンクが長すぎると、関係ない部分まで含まれてノイズになる
  • 逆に短すぎると、必要な情報が分断されてしまう

📌 最適なサイズで切ることで、検索と生成の精度がぐっと上がります!


どんな分け方があるの?

分割方法 特徴 使いやすさ
セクションごと 「1.目的」「2.手順」など、見出しで分ける ◎(意味のまとまりが明確)
段落ごと 改行や記号(●、・など)で区切る ○(バランスが良い)
一定文字数ごと 300〜500文字などで機械的に分割 △(意味が途中で切れる場合も)
スライド1枚ごと PowerPoint資料ではスライド単位で分ける ◎(意図のまとまりが保たれる)

➡ 一般的には「500~1000トークン(日本語で約300~600文字)」程度で分けるのが主流です。


実際のチャンク例(就業規則の場合)

元の文章:

第3条(勤務時間)
勤務時間は午前9時から午後6時までとする。休憩時間は正午から午後1時までの1時間とする。


チャンク化すると:

【チャンク01】
見出し:第3条(勤務時間)  
本文:勤務時間は午前9時から午後6時までとする。

【チャンク02】
見出し:第3条(勤務時間)  
本文:休憩時間は正午から午後1時までの1時間とする。

📌 チャンクごとに「見出し」「内容」をセットで保存することで、意味を保持しながら検索できるようになります。


チャンク化のツールや仕組みは?

チャンクの自動分割は、RAGツールやライブラリで対応できます。

🔧 代表的なもの:

ツール 特徴
LlamaIndex テキストをセクション・段落などに自動分割してくれる。設定変更も柔軟。
LangChain(Text Splitter) 文字数ベースや改行ベースなど、さまざまな分割方法が選べる。
ChatGPTのコードインタープリタ 簡単な分割処理もスクリプトで可能(Python不要なツールもあり)

分割時の注意点

注意点 理由
意味が途中で切れないようにする 情報のつながりが失われると、誤解を生む可能性がある
メタデータ(見出し・文書名など)を一緒に保持する 「どこから取った情報か」が分かるようにする
ノイズや装飾は取り除いておく ヘッダーや脚注が多いと、意味の判断を邪魔する

まとめ:「分け方」がRAGの賢さを決める

  • チャンクとは、AIが処理しやすい単位に文章を切り分けたもの
  • 適切なサイズで分割することで、検索精度と回答の質が向上
  • 分け方次第で、RAGの使い勝手が大きく変わる
  • 「見出し+本文」など、意味が通じる単位で分けるのがポイント
  • 自動ツールを使えば、ノーコードでもチャンク化は十分に可能!

Best regards, (^^ゞ