👽

第3回金融データ活用チャレンジ ~ Gemini Is All I Need ~

2025/02/13に公開

結果



84 位 / 705人投稿 銅メダル

コンペサイト

(金融庁共催)第3回金融データ活用チャレンジ

コンペ概要

企業レポートが記載されたPDFと関連した100題の質問が与えられ、RAGの回答結果をcsvで提出する分析コンペ

本番提出用と評価用の2種類のデータセットが与えられていました。

・本番提出用には19ファイルのPDF、100題の質問。100問のうち、50題が暫定評価、残りの50問が最終評価に利用される。コンペ期間中は暫定評価のスコアが表示され、コンペ締め切り時に最終評価の50題で順位が決定。

・評価用は10のPDFファイル、50題の質問が提供される。
評価用データセットには正解データが含まれていたこと、またコンペ用の評価プログラムのソースコードも提供されており、自身の出力結果と正解データを比較してRAGシステムの性能評価を行うことが可能でした。
・PDFのファイル名は1.pdf,2.pdf・・・19.pdfのような数字と拡張子で定義。ファイルを開いて読めば企業を特定可能
・質問文のほとんどには企業名が含まれていて、人間が目で見ればわかる

・最終提出用に最大2つのファイルを選択可能

評価方法

コンペサイトより引用の画像になりますが、下記の通りで1に近いほど良く、-1に近いほど悪いです。

またGPT-4oが評価しますので、人間が見た場合に内容が一致していても、4oが正解と評価しない場合があります。ここの対処ができていないと同じファイルを提出していても、スコアのぶれが発生する可能性がありました。

方針

・RAG1コンペのソリューションを参考にする
・お金をなるべくかけない、なるべくGeminiの無料枠を使う。モデルによりますが嬉しいことに1500 request/1dayまでのAPIリクエストは無料です。
gemini-2.0-flash-expとgemini-2.0-flash-thinking-exp-01-21を利用していました。
またコンペ期間中にgemini-2.0-flashが正式リリースされました。

実装

共通する実装内容

1段階目:
・PDFファイルの内容をGeminiに読みこませて企業名とファイル名の対応付けをした辞書を作成
例)1.pdf→4°C 2.pdf→IHI・・・・のように全ファイル処理

・上述の辞書の企業名をプロンプトに埋め込み、Geminiに質問がどの企業についてのものかを選択させる
例)
8,IHIの2023年度の資源・エネルギー・環境事業領域の営業利益が過去最高を記録した要因として挙げているものはなにか→IHI
64,4℃ホールディングスのアパレル事業「パレット」の2024年度と2023年度を比較して、増加した店舗数は何店舗か?→4°C

2段階目:
質問とファイルの対応付けをルールベースで行う

3段階目:
2段階目までで質問と企業レポートのペアができたので、それぞれのデータをプロンプトに埋め込んで、Geminiに回答を作成してもらう。

Geminiには回答とその根拠を出力させる。
例)
evidence:世界市場データ表によると、2023年の韓国の一人当たりの消費量は78.3食で最も多い。
answer:韓国

企業レポートのデータはMarkdown or PDFそのものを連携しているという差はありますが、おおむね上記の流れでRAGのパイプラインを組みました。

Markdownの場合

import google.generativeai as genai
model = genai.GenerativeModel(
    model_name="gemini-2.0-flash-exp"
)
prompt =f"""
~~~~中略~~~~
## 企業説明の内容
{target_content}

## 元の質問
{query}

## 出力
回答を開始してください。
"""
response = model.generate_content(prompt).text.strip()
    

PDFそのものを渡す場合

import google.generativeai as genai
model = genai.GenerativeModel(
    model_name="gemini-2.0-flash-exp"
)
pdf_file = genai.upload_file("XXX/XXX.pdf")
response = model.generate_content(
contents=[
  pdf_file,
  prompt]).text.strip()

実験結果のサマリ

実験番号 暫定(Public) 最終(Private) 処理方式 最終提出での選択
#4 0.4500000 0.4400000 PyMuPDF4LLMでMarkdown化
#14 0.5700000 0.4000000 Azure AI Document IntelligenceでMarkdown化
#18 0.6500000 0.2800000 PDFをそのままGeminiへ連携
#15+後処理 0.6200000 0.5600000 PDFをそのままGeminiへ連携、回答プログラムに合わせてgpt4oで後処理
#22 0.6000000 0.6000000 PDFをそのままGeminiへ連携、複数のRAG出力とPDFを読みこませアンサンブル

実験番号4

無料のPDF処理ライブラリをいくつか試した中で
PyMuPDF4LLMのMarkdown化が筋が良さそうだったので採用しました。
が、PDFと見比べて、表が欠損したり、テキスト化できていない箇所もそれなりにありました。

実験番号14

GUI版のAzure AI Document Intelligenceの評価がそれなりに良いと会社で話題だったので、Pythonのコードをローカルで動かしてMarkdown化しました。

実験番号18

Geminiがマルチモーダルな処理に対応していたので、Markdownではなく、PDFをそのまま連携する。振り返ると、一見スコア良いけど、最終評価の50題はあまり解けてなかったようですね。

実験番号22

最終日に作ったモデル。コンペの終盤にやることはアンサンブルと決まっているわけですね。
3つのRAG処理の根拠と回答結果、PDFをGeminiに連携して最終回答を生成。ジュニアコンサルタントの調査結果を上位のコンサルタントが再チェックするイメージです。
一種のアンサンブルですね。結果を見るとこのモデルが一番良かった訳ですが、暫定評価があまり良くなかったので提出ファイルとして選択できずです。

感想・雑感

回答速度について

「Don’t Do RAG」巨大コンテキストを活かした超高速なCAGという新手法【論文解説】

問題ごとに検索するのではなく、前処理したデータに対して回答生成する方式をとりました。
なのでCAG方式に近いかなと思います。シンプルなRAGと比べると応答までの時間がかかるので、実業務で採用することは難しいですが、このコンペは正確性を競うものだったのでこの方法をとりました。
raggleのプラットフォームで開催されているコンペは実行プログラムを提出する形式でした。回答時間の制限もあったので、業務システムへの組み込みを意識した形式のはraggleの方だと思います。

RAGの改善の方法について

Gamoさんの下記のツイートに凝縮されていると思います。

https://x.com/hiro_gamo/status/1830478958334447990

今回はevidenceや思考過程をGeminiに出力してもらったので、問題個所の特定がしやすかったです。

PDFの参照ページは正しいのに回答誤りのケース

これはどうしたらよいかわからずじまいだったのですが、
例えば、
問題:2023年で即席めんの一人当たりの年間消費量が最も多い国はどこか。
があった時、世界市場データ表の一人当たりの消費量から最も多い国を回答すればよいとします。
evidenceでは「世界市場データ表によると、2023年の韓国の一人当たりの消費量は78.3食で最も多い。」と出力されていて、参照しているPDFのページは正しいですが、実際はベトナムが80食で最も多いという間違え方をしていました。
Geminiのロングコンテキスト処理にかまけて、毎回PDFを全ページ読みこませたので誤った回答をしている可能性はあります。
evidenceとして出力されたテキストをベクトル検索してPDFのページを特定し、前後のページをpdf→jpeg化してマルチモーダル処理させることも検討したのですが、ベクトル検索の精度があまり出せなかったため断念しました。

PDFファイルの構成

RAGを構築する時には、いまあるPDFを利用するアプローチが主流だと思いますが、LLMが読み取りやすいファイルを作るアプローチがあっても良いと思います。
目で見て美しいのと、AIが読み取りやすいかどうかは違う話だと割と強く思いました。

利用したAIツール

Perplexity ProとChatGPT Plus、Gemini(Advancedじゃない方)を使いました。
調べものはPerplexity、実装相談やコード生成はChatGPTのo1にお願いしました。
GitHub Copilotもコード補完で利用。

今回のコンペにあたって参考にしたサイト

🚀SIGNATE RAG-1グランプリにてソロでシルバーメダル獲得! 20位入賞までの道のりと学び🚀
ソースコードも公開されていて、非常に参考になりました。

RAG-1グランプリ 10位解法と振り返り - 質問と関連文書から Q&A システムを設計する評価プログラム対策として、後処理で解答形式を整合させる点が参考になりました。

SIGNATE RAG1グランプリ入賞者の私の手法、全部見せます

※本記事は、私が所属する会社とは一切関係のない事柄です。

Discussion