どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

PDFの構造解析をする"LlamaParse"と"LLM Sherpa"を使ってみる

ChatGPTに作ってもらったヘッダー画像です

ちょっと長いテキストデータだと、テキスト自体が章や節のような構造を持っていたりします。 人間はこうした文章内部の構造は読めばなんとなく理解することができますが、自動でこれをやるのはちょっと難しかったりします。

こういった処理を行なうツールがないかと探していたところ、"LlamaParse"と"LLM Sherpa"というライブラリを見つけました。 どちらもそこまで長いコードではなく、OSSとはいえ自分でも読めそうなくらいでした。 ということで、パッとこれらのコード読んでみてどんな感じの処理を行っているのかなぞってみたので、そのメモです。

やりたいこと

Despite recent motivation to utilize NLP for wider range of real world applications, most NLP papers, tasks and pipelines assume raw, clean texts. However, many texts we encounter in the wild, including a vast majority of legal documents (e.g., contracts and legal codes), are not so clean, with many of them being visually structured documents (VSDs) such as PDFs. PDFs are versatile, preserving the visual integrity of documents, but they often pose a significant challenge when it comes to extracting and manipulating their contents. Mastering PDFs: Extracting Sections, Headings, Paragraphs, and Tables with Cutting-Edge Parser — LlamaIndex, Data Framework for LLM Applications

我々人間が普段扱う文書は思っているほどきれいではなく、その多くは視覚的に構造化されている一方でデータとしては構造化されていません。特にPDFなどは視覚的情報を保つことができる一方、そこから情報を抽出しようとすると人間から見ると違和感のある抽出が行われることがしばしばあります。

今回やりたいのは「文書の構造解析」と(個人的に)呼んでいる作業です。 これがどういった処理かというと、下記のような感じです。

目次等のない文書について、

  1. 適切なサイズのテキストのまとまり(section, chapter)を作り
  2. section, chapterに関して階層構造を把握し
  3. jsonやxmlなどのような階層構造を表現できるデータ構造に作り変える

ことが今回ざっくりやりたいことです。

LlamaParse

1つ目のツールはLlamaParseです。

docs.llamaindex.ai

試しに提供されているコードを動かしてみるとこんな感じです。

この例では、構造解析した結果をMarkdownにして表現しています。

コードを読んでみる

このLlamaParseですが、本体のコードは実は1ファイルだけとなっています。

github.com

内部で難しい処理は特にやっておらず、ファイルをAPIにPostして、その結果を受け取っているだけという感じです。

github.com

APIの裏で何をやっているかは定かではありませんが、類推するにLlamaIndex APIの向こうでChatGPTなどを呼び出したり、その他画像中の位置情報を用いた構造解析(OCRなど)をやっているだけだと思います。

LLM Sherpa

2つ目のツールはLLM Sherpaです。

www.llamaindex.ai

こっちについても簡単に触ってみるとこんな感じです。

こっちは英語の論文を読み取って、簡単にRAGっぽいことをやっているサンプルになっています。

コードを読んでみる

実はこちらもAPIにファイルをPOSTしてるだけで、内部的には大したことやってません。

github.com

APIの中身はこちらも定かではありませんが、PDFのレイアウトや記載されているテキスト情報から構造を作ったものを返しているんだと思います。

参考文献

一応、今回下記の文献を参考にさせていただきました。

感想

調べてみた結果、使い方はわかったものの、実際のロジックは一切わかりませんでした。 まあ、結構難しいのと金がかかりそうな一方、この機能だけでお金が取れそうなくらい重要な気もしてきたので、仕方ないですね。