はじめに
こんにちは、LLM Advent Calendar 2023 4日目の記事を担当する_mkazutakaです。よろしくお願いします。
LLM Advent CalendarといってもRAGの話になりますが、ご容赦ください。
企業独自のデータを使ってLLMからの出力を制御する際には、検索拡張生成(いわゆるRAG)が使われます。
RAGの実装方法としては、「PDFからドキュメント情報を読み取り検索エンジンに保存」「ユーザの入力する質問文から関連するドキュメントを検索エンジンから取得」「取得したものをコンテキストとしてプロンプトに含める」という流れが一般的だと思います。
この際、RAGの課題の一つでもあるのですが、検索結果から取得するドキュメントのサイズ(いわゆるチャンクサイズ)をどれぐらいのものにするかというものがあります。チャンクサイズが小さすぎるとLLMは関連するコンテキストから正しい答えを生成できません。一方で、チャンクサイズが大きすぎると不要な情報が含まってしまったり、検索精度が落ちたり、トークン数が多くなるため不要なお金がかかってしまいます。
このチャンクサイズを決めるには、いくつか方法があります。
- 特定の文字数で分ける
- 特定の区切り文字(。、,.\n)などで分ける
- チャンクに前後の文脈を含ませる(チャンク間でテキストを重複させる)
などなど。最近だと、セマンティッククラスタリングと呼ばれる、前後のテキストの意味をもとにチャンク分けする方法も紹介されています。
というわけで、弊社でも色々試していたのですが、なんと11月にOpenAIから最大128,000トークン扱えるGPT-4 Turboが発表されてしまいました。これだけのトークン数があれば、ほとんどのPDFをまるまる渡すことができます。
となるとですが、細かくドキュメント分けるより、GPT-4 TurboにPDF内のテキスト全部渡していい感じに分けてっていえばいい感じにチャンクに分けてくれるんじゃ...というアイデアが思いつきます。
というわけで、これをやってみるのが今回の記事の内容になります。
続きを読む