チャンク

大きなデータやテキストを処理しやすい小さな単位に分割したもの。AI のトークン制限対策、ストリーミング配信、ファイル転送など幅広い場面で使われる。

チャンク (chunk) は、大きなデータを一定のサイズや意味のある単位で分割した断片のことです。「塊」を意味する英語がそのまま技術用語として定着しました。テキスト処理、ネットワーク通信、AI の文脈でそれぞれ異なる意味合いで使われますが、「大きなものを扱いやすい単位に分ける」という本質は共通しています。

AI・LLM (大規模言語モデル) の文脈では、チャンキング (chunking) はテキストをモデルのコンテキストウィンドウに収まるサイズに分割する処理を指します。この上限はモデルによって数万トークン規模から百万トークン規模まで幅があり、世代交代のたびに変わるため、特定のモデルの数値を覚えるのではなく、使う API のドキュメントで確認できる値として扱うのが安全です。上限に収まる長さであっても、入力が長くなればトークン数に応じた費用と応答時間が増えます。必要な部分だけを渡せるように分割し、各チャンクを個別に処理してから結果を統合する手法が一般的です。

チャンキングの品質は分割の粒度と境界の選び方で決まります。固定長チャンキング (例: 1,000 文字ごとに分割) は実装が簡単ですが、文の途中や段落の途中で切れるため、文脈が失われます。意味的チャンキングでは、段落、セクション、見出しなどの構造的な境界で分割し、各チャンクが意味的にまとまった単位になるようにします。オーバーラップ (前後のチャンクと一部を重複させる) を設けることで、境界付近の情報損失を軽減する手法もあります。

HTTP のチャンク転送エンコーディング (Transfer-Encoding: chunked) は、レスポンスのサイズが事前に分からない場合に、データを小さなチャンクに分けて逐次送信する仕組みです。これは HTTP/1.1 で定義された仕組みで、HTTP/2 では使えません。HTTP/2 は DATA フレームという独自の単位でデータを分割して運ぶため、chunked の使用そのものが禁止されています。対話型 AI の応答が少しずつ画面に出てくるようなストリーミング配信でも、テキストは小さな単位で逐次送信され、利用者は生成の完了を待たずに読み始められます。実装には Server-Sent Events (text/event-stream) のような逐次送信の形式が使われますが、いずれも「全体が確定してから送る」のをやめて断片を流す点は共通しています。

自然言語処理 (NLP) では、チャンキングは品詞タグ付けされた単語列から名詞句や動詞句などのフレーズを抽出する処理を指します。「東京の大きな公園」を「東京の」「大きな」「公園」ではなく「東京の大きな公園」という名詞句として認識する処理です。

チャンクサイズを決めるときは、文字数とトークン数を混同しないことが出発点になります。同じ文字数でも言語や文字種によってトークン数は変わるため、「何文字で切るか」だけで決めた分割は、埋め込みモデルやモデル側の入力上限に対して安全とは限りません。分割の単位は、実際に使う API のトークン数え上げで確認するのが確実です。RAG (検索拡張生成) では文書をチャンクに分割してベクトルデータベースに格納しますが、チャンクが小さすぎると前後の文脈が失われ、大きすぎると 1 つのチャンクに複数の話題が混ざって検索の当たりが鈍ります。判断の目安は 3 つです。埋め込みモデルの入力上限に収まっているか、チャンク単体を読んで 1 つの問いに答えられる情報量があるか、見出しや段落といった構造の境界を跨いでいないか。検索する単位とモデルへ渡す単位を分ける設計も有効です。小さなチャンクで検索して当たりを絞り、渡すときは前後を含めた広い範囲を取り直せば、検索の精度と文脈の量を両立できます。

この記事を共有