PDF ではなく Markdown をモデルに渡す理由
チャットに PDF を添付すると、アプリが文字を取り出してくれますが、モデルが実際に何を受け取ったかは見えません。先に自分で変換すると、3 つの利点があります。
- 文字が見える。 崩れた表、混ざった段組み、文字のないページが、モデルを混乱させる前にわかります。
- 構造が残る。 見出し、リスト、表がモデルの読みやすい Markdown として残り、平たい行の連続になりません。
- トークンが減る。 ページ番号、繰り返しのヘッダー、行末のハイフン、レイアウトの余白が取り除かれるので、コンテキストウィンドウをより多く中身に使えます。
このページは最初からそのための設定で開きます。画像は含めず、各ページの始まりに <!-- Page N --> というコメントを入れてモデルがページを引用できるようにし、画像の行は削ります。
信頼できるトークン数
Markdown の上の数字は、コピーまたはダウンロードする内容の正確なトークン数で、フロントマターとページの区切りも含みます。GPT-4o 以降の OpenAI モデルが使うエンコーディング o200k_base で数えています。Claude をはじめ他のモデルは独自のトークナイザーを使うため、それらには正確な値ではなく近い目安として見てください。
LLM 向けに削るの各スイッチは、オンにする前に、そのファイルで何トークン減るかを表示します。
| スイッチ | すること |
|---|---|
| リンク先の URL を削る | リンクの文字は残し、URL を消す |
| 太字と斜体を外す | ** と * の記号を消す |
| 画像の行を削る | 画像の代わりの表示もリンクも出さない |
| HTML タグをただの文字に | <sup>、<sub>、<br> をただの文字にする |
| 文字を正規化 | fi のような合字を fi に、変わった空白を普通の空白に |
| 表を詰める | 空の列とセルの余白を取り除く |
PDF を読み直さないので、スイッチはミリ秒単位で反映されます。
RAG 用のチャンク
検索には、埋め込みにできるくらい小さく、それだけで意味の通じる断片に分けた文書が必要です。チャンクタブが Markdown を分けてくれます。
- まず見出しで区切る。 できる限り節の途中からは始めないので、各チャンクは 1 つの話題を扱います。
- 選んだトークン上限以内に収めます。256 から 8,192 トークンまで選べます。上限より大きい節は文の切れ目で、大きな表は行の切れ目で分け、見出し行を繰り返します。
- 見出しの道筋付き。 各チャンクは
手法 › データ収集のように自分の上にある見出しを知っていて、それを先頭に付けられます。検索で取り出されたチャンクも、どこから来たかがわかります。 - ページ番号付き。 回答から元の 12 ページ目を指し示せます。
JSONL をダウンロードすると、1 行に 1 つの JSON オブジェクトが入っています。
{
"id": "report.pdf#3",
"source": "report.pdf",
"chunk": 3,
"headings": ["Methods", "Data collection"],
"page_start": 4,
"page_end": 5,
"tokens": 812,
"text": "..."
}
数行のコードで、使っているベクトルストアに読み込めます。
うまくいく手順
- PDF をドロップし、まず確認するページを見ます。おかしなページは直すか OCR にかけます。
- 節約に見合う削り方をオンにします。モデルに出典を示させたいならリンクは残します。
- チャットなら Markdown をコピーして貼り付けます。パイプラインなら JSONL のチャンクを使います。
すべてブラウザの中で行われます。これはここで大事な点です。モデルに渡す文書は、社内報告書や契約書、研究資料など、また別のサービスにアップロードすべきでないものが多いからです。
よくある質問
LLM にはプレーンテキストより Markdown のほうが本当によいのですか?
構造のある文書なら、たいてい役に立ちます。見出しは節の入れ子関係をモデルに伝え、表は各数字をそのラベルの隣に保ちます。散文 1 ページだけなら差は小さいでしょう。スイッチで構造を残すか外すかを選べます。
チャンクの大きさはどのくらいがよいですか?
文書への質問応答なら、まず 512 か 1,024 トークンから始めてください。小さいチャンクは狭い質問にぴったり合い、大きいチャンクは文脈をまとめて保ちます。チャンクタブの下の要約に数と最大のチャンクが出るので、効果をすぐ確認できます。
トークンは端末の中で数えていますか?
はい。トークナイザーは、変換ツールのほかの部分と同じくタブの中で動きます。数えるために OpenAI やほかの誰かへ何かを送ることはありません。
データセット用に多くの PDF を処理できますか?
一度に 20 個までドロップし、すべてを 1 つの .zip でダウンロードできます。数千ファイルならスクリプトのほうが向いています。Python で PDF を Markdown にをご覧ください。