Slide 1

Slide 1 text

OpenProvence クエリに関連しない文章削除モデル 日本語版の作成と公開 舘野 祐一 / @hotchpotch / id:secondlife Search Engineering Tech Talk 2025 Autumn - 2025年10月30日

Slide 2

Slide 2 text

で、誰?

Slide 3

Slide 3 text

自己紹介 舘野 祐一, Yuichi Tateno id:secondlife, セコン @hotchpotch https://secon.dev/ 小さな法人代表のソフトウェアエンジニア ご家庭用GPUでも学習できるモデル好き 情報検索関連 オープン公開活動好き JQaRA: 検索拡張(RAG)評価のための日本 語 Q&A データセット JaCWIR: 日本語情報検索評価のための小 規模でカジュアルなWebタイトルと概要の データセット 🍷 FineWeb2 Edu Japanese - 高品質 な教育向け日本語データセット 日本語 StaticEmbedding モデル 日本語Reranker 日本語SPLADE

Slide 4

Slide 4 text

最近(2025)の流行 AI Agent エージェントとはツールをループで使うヤツ by Simon Willison DeepResearch "検索+要約+再検索" を自己改善ループで回す、リサーチエージェント Context Engineering "LLMが理解・判断できるコンテキスト"を設計する技術 与える文脈・状態・知識の構成が本質 これらをRAG + エージェントで構築することも多い DeepResearch も Context Engineering が中核 情報検索で改善しがいがある箇所ばかり 👉楽し〜

Slide 5

Slide 5 text

現状の課題の一つ 検索→要約→再構成ループで不要な情報を取得しすぎ 品質が低い input token が増えることで、余分な情報から誤った情報を作成 速度が遅い input token 増えすぎ 💰高い input token(略) もっとAIが検索しまくりたい!!1 top-10 など少量ではなく、top-100 等で本当に関連する情報だけ取得 大量の多様なクエリで、関連しそうなものは大量に取得したい しかし大量の文章を扱うと… input token(略)

Slide 6

Slide 6 text

無駄な情報を取得しないには 適切な text chunking をする 文章を区切ることで、巨大な文章からでも、該当 chunk を取り出すことが可能 ただクエリに「距離が近い」情報は取得できるが、本当に必要な情報かは判断しにくい 例: cos_sim 0.6 は「果たして関連性がある」文章なのか…? 🤔 reranker を使っても、関連性がある/ないの判断は不明瞭なことも ソート用スコアに最適化されがち 関連があるのは、chunkのうちのさらに一部分だけだったりも

Slide 7

Slide 7 text

Provence Provence: efficient and robust context pruning for retrieval-augmented generation

Slide 8

Slide 8 text

Provence の動作

Slide 9

Slide 9 text

Provence 概要 arXiv:2501.16214 クエリに関連しない文を削除するモデル クエリと1文単位関連性を推論 → 関連文推論の追加コストはごくわずか 不要文を削除し、関連度スコアも算出 → rerankerの置き換えに 文章削除の積極性を閾値で調整可能 閾値を高く👉積極削除(Precision重視) 閾値を低く👉残し気味(Recall重視) Cross-Encoderベースの軽量設計

Slide 10

Slide 10 text

Provence の難点 学習スクリプトや学習データセット(英語)は公開されているが、どれも CC BY-NC-ND →非商用・改変不可 教師データ作成もライセンスに制限があるモデルでの作成 日本語のデータセットは無い 👉そのため学習推論の実装・データセット作成ツール・モデルウェイトなどのライセンスが "オープンな" モデル、OpenProvence を作ってみよう!となった

Slide 11

Slide 11 text

OpenProvence の作り方

Slide 12

Slide 12 text

教師データの作成(1) まずは質問と文(span)の関連性の教師データの作成 Provence 論文では llama3-8b で推論 OpenProvence の場合 DeepSeek-V3を使って推論、作成、多言語でまず教師データを 140k 個 hotchpotch/qa-context-relevance-multilingual-140k 👆を使い、Qwen3-4B で SFT してモデル作成 hotchpotch/query-context-pruner-multilingual-Qwen3-4B 出力の安定、高速な推論、DeepSeek-V3 並の精度 このモデルを用いて、IR,QA系データセットから大量にガッと作成 👉 context relevance データセットが完成

Slide 13

Slide 13 text

教師データの作成(2) reranker 機能を持つ&性能向上のため reranker score も学習に利用 Provence は学習元モデルとして reranker model を利用する 英語・日本語が扱える reranker の作成が必要 💡 hotchpotch/japanese-reranker-* , ruri-v3-reranker-310m モデルがすでにある…! このモデルとスコアを利用 他にも hard negatives の作成云々… これは情報検索モデル作成での、よくある話なので割愛

Slide 14

Slide 14 text

学習実装の作成 CrossEncoder (Reranker) の学習に関連文判定用の head を加えるだけ 💡 学習方法はシンプルで、そんなに難しくない マルチタスク学習(SequenceClassification + TokenClassification)

Slide 15

Slide 15 text

完成!👉DEMO huggingface 🤗 spaces (CPU) local: MacBook

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

📊 性能評価 MLDR dataset 長文から質問文をLLMが作成した多言語 データセット 評価事項 英語 / 日本語で200件 (test set) 文章の削減率 LLM eval(gpt-5-nano, low)での評価 文章に質問の回答が含まれるか 📝 open_provence_v1_eval_report.md 正解が含まれる文章で80-95%文削除 間違い(negs)文章では99%文削除 オリジナル全文ママ評価と削除後の文評価 削除後の方が正解率が若干高い 👉token を大幅削減しつつも、必要な 回答の抽出に成功 他にもさまざまなデータセットを F2 (Recall重視) で評価 興味があればレポート参照ください

Slide 18

Slide 18 text

OpenProvence の公開 クエリに関連しない文章削除モデル日本語版の作成と公開 検索後のフィルターや、LLMに情報を渡す前などにご利用ください!!1 用途が合えば、かなり便利そうな予感🤔 https://github.com/hotchpotch/open_provence https://huggingface.co/spaces/hotchpotch/open_provence_demo

Slide 19

Slide 19 text

One More Things...

Slide 20

Slide 20 text

今回、データセット作り、LLMのSTF、学習・推論・評価コードの作成等等は すべてコーディングエージェント(ClaudeCode,Codex) を用い 手では1行もコード書かない縛りで作成 これぐらいのモデル・データセット作りなら、対話するだけで完了する時代に…! (かなりの修正指示は必要でしたが)

Slide 21

Slide 21 text

ご清聴ありがとう ございました