RAGパイプラインをこう作るな…MarkItDownを使って解決しよう

BBetter Stack
Computing/SoftwareInternet Technology

Transcript

00:00:00私たちはAIアプリの開発そのものよりも、文書の処理に多くの時間を費やしています。
00:00:05複数のライブラリを接続して、ようやくPDFをパイプラインに取り込んでも、LLMはひどい回答を返してきます。
00:00:11モデルが悪いのではなく、マークダウンが悪いからです。
00:00:14これがMarkdownです。
00:00:16GitHubで11万以上のスターを獲得し、爆発的に普及したMicrosoft製のツールで、
00:00:21実質1行のコードでパイプライン全体を修正してくれます。
00:00:24この仕組みについて、数分で解説します。
00:00:30[音楽]
00:00:33さて、基本的にどんなAIプロジェクトも同じように始まります。
00:00:36Word文書、スライド、スプレッドシート、PDFのスクリーンショット、あるいは音声ファイルまで、至るところにファイルが散乱しています。
00:00:43そして、開発者が大好きな「クールな部分」がやってきます。
00:00:46ツールをスタック(積み重ね)し始めるのです。
00:00:49PDF用、Excel用、Word用といったツールを準備しますよね?
00:00:54これらのライブラリをすべて連携させて、パイプラインを構築していくわけです。
00:00:59最初はうまくいくように感じます。
00:01:02ところが、次第に壊れ始めます。
00:01:04表の構造は崩れ、見出しは消え、トークン消費量は明らかに激増していきます。
00:01:10そうなるとRAGパイプラインはゴミを拾うだけになり、エージェントはひどい回答しか出せなくなります。
00:01:16結局、リリース作業ではなく、データの取り込みに関するデバッグに追われることになるのです。
00:01:19本当、これって何をしているのでしょうか?
00:01:21ただの時間の無駄です。
00:01:22ほんの数分ではなく、毎週何時間も浪費しています。
00:01:25ですから、モデルを修正するのではなく、入力データを修正する必要があります。
00:01:29実際どんな感じかお見せしましょう。
00:01:31ワークフローを高速化するツールに興味がある方は、ぜひチャンネル登録をお願いします。
00:01:35今後も動画をどんどん公開していきます。
00:01:37それでは、さっそくやってみます。
00:01:39すべてPythonなので、とてもシンプルです。
00:01:42まず、仮想環境でpipインストールします。
00:01:45ここにdoc.pdfというPDFファイルがあります。
00:01:48これをターミナルで実行するだけです。
00:01:50「markitdown doc.pdf output.md」を実行します。
00:01:55これだけです。
00:01:56自動的にファイルを作成してくれます。
00:01:58そのファイルを開いてみると、期待通りの結果になっています。
00:02:03見出しはきれいに整い、表はちゃんと表らしく、構造もしっかり残っています。
00:02:08これをPythonでコーディングすれば、さらに多くのことが可能になります。
00:02:13インポートしてOpenAIを使い、クライアントを作成してマークダウンオブジェクトを作ります。
00:02:20APIキーと実行したいモデルを渡します。
00:02:25コードを実行すると、ターミナルに結果が生成されるので非常にクリーンです。
00:02:29さらにすごいのは、PNG画像も扱える点です。
00:02:33今回はNVIDIAのチャート画像を用意しました。
00:02:35データが記載された画像がありますね。
00:02:39今度はこのチャートをマークダウンに変換してみます。
00:02:42再びconvert関数を使うだけで、markitdownに処理させることができます。
00:02:47今回はPNGファイルを指定します。
00:02:50これで、チャートの要約やRAGで使える抽出データが得られました。
00:02:56これは画期的です。コード内で必要な情報をすぐに抽出できるので、
00:03:01ウィンドウを行き来することなく作業を続けられます。
00:03:05では、マークダウンとは一体何でしょうか?
00:03:07Microsoft Researchが開発したオープンソースのPythonツールです。
00:03:11MITライセンスで、LLMワークフロー向けに特別に設計されています。
00:03:16乱雑なファイルを整理されたマークダウンに変換し、
00:03:19モデルが確実に理解できるようにするのが目的です。
00:03:22サポートしている形式は想像以上に豊富です。
00:03:25Word、PowerPoint、Excel、PDF、音声、画像、リンクなど、何でも扱えます。
00:03:32MCPサーバーにも対応したので、Claude Desktopや独自のエージェントに直接組み込むことも可能です。
00:03:40さらにプラグインもあります。
00:03:41 ingestion(取り込み)パイプラインを自作する代わりに、このツールを呼び出すだけになりました。
00:03:47開発者が苦労していたのはモデルのせいではなく、入力データのせいだったのです。
00:03:51「より良いモデルを使えばいい」というのがこれまでの期待でしたが、
00:03:55真実は「入力の質を上げれば、出力の質も上がる」ということです。
00:04:00壊れやすいスクリプトを書く代わりに、今は「markitdown」というツールを何にでも使っています。
00:04:06RAGパイプライン、エージェント、ファインチューニングのデータセット、ナレッジベース、文書解析など、これまで行ってきたすべてにおいてです。
00:04:13多くの人が見落としている重要な点は、これが「構造化された、トークン効率の良いマークダウン」を生成するということです。
00:04:20ノイズが減り、より良い回答、つまり良い出力が得られるようになります。
00:04:24ただ、完璧というわけではありません。
00:04:26既存のツールと比較してみましょう。
00:04:31Pandocというツールがありますが、こちらが勝つと思うかもしれません。
00:04:36しかし、解決しようとしている問題がmarkitdownとは異なります。
00:04:40Pandocは人間用、つまり出版やフォーマット、LaTeX向けです。
00:04:44markitdownは機械用、つまりLLM、パイプライン、自動化向けです。
00:04:48似たようなアイデアですが、目的が違います。
00:04:51また、unstructuredやdoclingのようなツールもあります。
00:04:55これらも素晴らしいですが、非常に重量級です。
00:04:58機械学習モデルを使用するためセットアップに時間がかかり、極めて複雑な文書には向いています。
00:05:03markitdownはそれらとは正反対のアプローチを取っています。
00:05:05セットアップが簡単で、素早く結果を出せ、ほとんどのファイルで十分な性能を発揮します。
00:05:11これが本当のトレードオフです。
00:05:12完璧な抽出が必要か、それとも高速かつ確実に動作するものが良いか。
00:05:18ほとんどの人にとっては、スピードが重要でしょう。
00:05:20もちろん欠点もあり、複雑なPDFはやはり読み込めないことがあります。
00:05:24特に高密度の表や、特殊なレイアウトですね。
00:05:27毎日そのような複雑な文書を扱うなら、doclingやunstructuredの方がはるかに優れています。
00:05:32ただし、画像の説明が必要なら、結局LLMを組み合わせる必要があります。
00:05:36完璧ではありませんが、現実的な問題を解決してくれる非常にクールなツールです。
00:05:41では、使う価値はあるのでしょうか?
00:05:43はい、ほとんどの人にとって間違いなく価値があります。
00:05:45もし現在AIアプリを開発しているなら、これが本来あるべき取り込み層の姿でしょう。
00:05:50Markdownをぜひ試してみてください。
00:05:52RAGやエージェントのためにクリーンな入力を求めているなら、試す価値があります。
00:05:56多様なファイル形式を扱う場合、
00:05:58このツールは非常に役に立ちます。
00:05:59すぐに壊れてしまう脆いスクリプトをメンテナンスしたくないですよね?
00:06:03もし毎日非常に複雑なPDFばかり扱っているなら、このツールはスキップするか、別のツールと組み合わせると良いでしょう。
00:06:08他にも選択肢はあります。
00:06:09オープンソースのツールやコーディングのヒントに興味がある方は、ぜひBetter Stackチャンネルの登録をお願いします。
00:06:15また次の動画でお会いしましょう。

Key Takeaway

AIアプリ開発におけるデータ取り込みの非効率さは、Microsoft製ツール「MarkItDown」を用いてファイルをクリーンなマークダウンへ自動変換することで解消できる。

Highlights

Microsoft製のツール「MarkItDown」は、Word、Excel、PDF、画像、音声など多様なファイルをLLM向けに最適化されたマークダウン形式へ自動変換する。

データ取り込み層で複雑なスクリプトを自作する代わりに、わずか1行のコマンドまたはシンプルなPython関数で処理パイプラインを構築できる。

PDFの構造や表組みを維持しつつマークダウンへ変換するため、LLMのトークン効率が向上し、回答精度が改善する。

PNG画像内のチャートデータも抽出し要約できるため、視覚資料を含むRAGパイプラインの構築に寄与する。

Pandocは出版用、unstructuredやdoclingは複雑な文書解析用に最適化されているが、MarkItDownはLLMワークフローの高速化と簡易な自動化に特化している。

Timeline

データ取り込みパイプラインの課題

  • AIアプリ開発の時間はモデル構築よりも文書処理に費やされている。
  • 多様な形式のファイルを個別のライブラリで連携させると、表や見出しの構造が崩れ、LLMの回答品質が悪化する。
  • 出力品質の低下はモデルの性能ではなく、不適切な入力データの質に起因する。

開発者が直面する一般的な問題として、PDFやExcel、音声などの散乱したファイルを統合する際の「スタック構築」の脆さが挙げられる。結果としてデータ解析ではなくデバッグに時間を浪費するため、モデルを調整する前に、まず入力データの質を改善する必要がある。

MarkItDownによる実装と利便性

  • ターミナルで「markitdown input.pdf output.md」と実行するだけで変換が完了する。
  • Pythonコード内では、数行の記述でOpenAIクライアントと連携させることが可能である。
  • チャートなどの画像データもconvert関数で解析し、RAGに必要な抽出データとして出力できる。

MarkItDownはPythonベースの非常にシンプルなツールであり、環境構築の負担が少ない。見出しや表の構造を維持したままテキスト化できるため、開発者が複雑なデータパイプラインを個別に構築する必要がなくなる。

設計思想とツールの比較

  • MarkItDownは人間用ではなく、LLMパイプラインや自動化を目的とした機械用ツールである。
  • Pandocは出版やフォーマット向けであり、unstructuredやdoclingは重量級の機械学習を用いた高度な解析に向いている。
  • 高密度な表や特殊なレイアウトを持つ複雑なPDF以外では、MarkItDownのスピードと簡便さが最適な選択肢となる。

他のツールとの決定的な違いは目的の明瞭さにある。完璧な抽出精度を求める複雑な文書でない限り、MarkItDownは高速かつ確実に動作するため、RAGやエージェント構築における効率的な解決策となる。

Community Posts

View all posts