💭

PDFがスルスル読める!話題のLlamaParseとは

2024/02/24に公開

(以下のデモは英語論文で行われており、日本語PDFはパフォーマンスが悪いという話があります。)

LLMでRAGを構築したいとき、ドキュメントがPDFだとうまくコンテキストが読み取れなくて困っていませんか?
LlamIndexから新製品のお知らせです。

https://twitter.com/llama_index/status/1760097891551707237

LlamaParseはLlamaIndexの新しい製品で、再帰検索を実行することで複雑なPDFのテーブルをきれいに抽出することができ、しばしば悩まされる複雑なドキュメントのより正確な解析を約束します。

だそうです。(AstraDBのサイトより)

さらにこのツイートでは、AstraDBというベクターサーチも紹介されています。
LlamaParseでPDFをパースし、AstraDBで非構造化データを検索することで精度が向上するとのこと。

非構造化データとは

非構造化データとは、データベースやCSV形式などではないデータのことで、言ってしまえばあらゆるデータが非構造化データ。
チャットのメッセージやブログの投稿、テキストファイル、PDF、画像、ビデオ、オーディオファイルなどはすべて非構造化データに分類されます。

逆に、データベースやCSV形式のようなカラムとデータのあるテーブル形式のことを構造化データと言います。

その中間が半構造データであり、jsonやxmlといったkeyとvalueがあるけれどテーブルとは違うものを言い、自己記述構造とも言います。
HTMLや画像のEXIFデータ、メールのヘッダなども半構造データとすることもあります。

構造化データは検索が簡単ですが、半構造データと非構造化データは難しいためRAGを構築するうえでの課題となっています。
そんな非構造化データ検索を簡単にするLlamaParse + AstraDBを見ていきましょう。

必要な環境変数

ツイートではbasic RAGとadvanced RAGとで2種類のcookbookが載っていますが、basicの方は基本的な使い方を紹介しているだけなのでadvanced RAGを見れば充分です。

https://github.com/run-llama/llama_parse/blob/main/examples/demo_advanced_astradb.ipynb

LlamaParseを使うのにLLAMA_CLOUD_API_KEYが必要で、llama cloudに登録することで無料で取得できます。

https://cloud.llamaindex.ai/

AstraDBは有料です。
利用する場合はdatastaxサイトより購入し、以下の環境変数を設定してください。
(今回は購入していないので手順は割愛)

  • ASTRA_API_ENDPOINT
  • ASTRA_TOKEN

llama_parse/AstraDBの使い方

llama_parseの使い方は非常にシンプルで、pipでllama-parseをインストールし、以下のように使えます。

from llama_parse import LlamaParse

documents = LlamaParse(result_type="markdown").load_data('./uber_10q_march_2022.pdf')

このnotebookではrecursive_query_engineraw_query_engineという2種類のクエリエンジンを使い、パフォーマンスを比較しています。
AstraDBのベクターストアは下記のコードで取得できますが、
collection_nameが"astra_v_table_llamaparse_advanced"のほうをrecursive_query_engine、
"astra_v_table_llamaparse_base"のほうをraw_query_engineとして呼び分けています。

AstraDBVectorStore(
     token=ASTRA_TOKEN,
     api_endpoint=ASTRA_API_ENDPOINT,
     collection_name="astra_v_table_llamaparse_advanced",
     embedding_dimension=1536
 )

今回はAstraDBとの比較用にSimpleVectorStoreを追加しています。

回答の比較

今回使うドキュメントは、アメリカの証券取引や投資の報告書です。
お金まわりの質問が出てきそうですね。

まず第一問!
キャッシュ・フロー情報の補足開示からの還付金を差し引いた法人税等の支払額は?

SimpleVectorStore(のクエリエンジン)の回答

$41

raw_query_engineの回答

$41

recursive_query_engineの回答

2021331日に終了する期間は22ドル、2022331日に終了する期間は41ドルです。


添付の通り、答えは$22と$41。
質問では期間は指定されていないのでrecursive_query_engineのみ正解です。

第2問
フリーキャッシュフローの変化は何であり、財務および運営のハイライトからの率は何ですか?

SimpleVectorStore(のクエリエンジン)の回答

財務および運営のハイライトからのフリーキャッシュフローの変化は、
2021年の$(682) millionから2022年の$(47) millionへの減少です。
フリーキャッシュフローの変化率は約93.1%の減少です。

raw_query_engineの回答

財務および営業上のハイライトからのフリー キャッシュ フローの変化は、
2021 年の (68,200 万ドル) から 2022 年の (4,700 万ドル) に減少しています。
フリー キャッシュ フローの変化率は、2021 年から 2022 年にかけて 63,500 万ドル改善しています。 

recursive_query_engineの回答

財務および運営のハイライトからのフリーキャッシュフローの変化は、
2021年の$(682) millionから2022年の$(47) millionへの減少です。
フリーキャッシュフローの変化率は、2021年から2022年にかけて$635 millionの改善です。

答え:

どれも正解です。AstraDBは93.1%の減少という記述から数字を割り出して改善と言ってるのが親切ですね。

第3問
昨年と比べてUberに帰属する純損失額はいくらですか?

SimpleVectorStore(のクエリエンジン)の回答

2022年第1四半期にUber Technologies, Inc.に帰属する純損失は$5.9 billionで、
2021年同期の純損失$108 millionと比べて著しく高くなっています。

raw_query_engineの回答

今年のUberに帰属する純損失額は$5.9 billionで、
昨年同期の純損失$108 millionと比べて増加しています。

recursive_query_engineの回答

2022年第1四半期にUber Technologies, Inc.に帰属する純損失は$5,930 millionで、
2021年同期の純損失$108 millionと比べて著しく高くなっています。

答え:

AstraDBのadvancedだけ価格を丸めずに回答しています。
表の数字をそのまま出したほうが素直だと思いますが、丸めちゃうのがデフォなんですかね。

では次は最終問題です。

投資活動によるキャッシュフローはどうでしたか?

raw_query_engineの回答

投資活動によるキャッシュフローは2021年も2022年もマイナスでした。
2021年の投資活動による純現金使用額は$250 millionで、2022年は$135 millionでした。
これらのマイナスのキャッシュフローは主に、不動産や設備の購入、事業の取得、市場性および非市場性証券の購入によるものでした。

recursive_query_engineの回答

投資活動によるキャッシュフローは以下の通りです:
2021331日終了の3ヶ月間で、投資活動による純現金使用額は$(250) millionでした。
2022331日終了の3ヶ月間で、投資活動による純現金使用額は$(135) millionでした。

SimpleVectorStore(のクエリエンジン)の回答

投資活動によるキャッシュフローは以下の通りです:
2021331日終了の3ヶ月間で、投資活動による純現金使用額は$250 millionでした。
2022331日終了の3ヶ月間で、投資活動による純現金使用額は$135 millionでした。

答え:

AstraDBのbaseが一番回答が良いような…?
質問によっては合う合わないがあるのかもしれません。
とはいえどのクエリエンジンでも4問とも正解を出せました。
PDFのテーブルデータをちゃんと読み取れているようですね。

Discussion