2024-07-04 機械学習勉強会
今週のTOPIC[library] BM25-Sparse[blog]RAGのSurvey論文からRAG関連技術を俯瞰する[slide] 生成AIに振り回された3か月間の成功と失敗/dev-productivity-con2024-link-and-motivation[library] LayoutParserによるDocument Layout Analysis[論文] Prompting-based Synthetic Data Generation for Few-Shot Question Answering[blog] 📝 Guest Post: Designing Prompts for LLM-as-a-Judge Model Evals*[blog] BM42: New Baseline for Hybrid Search[GitHub] microsoft/graphrag[書籍] 機械学習デザインパターン ―データ準備、モデル構築、MLOpsの実践上の問題と解決はじめに問題再設定 (Reframing) パターンカスケードパターンこのパターンの利用イメージ利用時の注意点どんな時に向いていて、どんな時に向いていないか?
今週のTOPIC
@Naoto Shimakoshi
[library] BM25-Sparse
- Elastic Searchなどで使われているBM25のPythonで高速に動くライブラリ
- 実際に帳票データ200万件くらいでtokenize → indexをやってみたが6分くらいで終わった。メモリ効率もいい。
- 以下のような感じで簡単にかける
- 色々なメソッドも使える
@Yuya Matsumura
[blog]RAGのSurvey論文からRAG関連技術を俯瞰する
- RAGに関する以下のサーベイ論文のまとめ記事
- RAGの変遷
- Naive RAG
- シンプルな indexing, retrieval, generation の3つからなるもの。”Retrieve-then-Read”
- Advanced RAG
- Naiveに検索に対する前処理(Pre-Retrieval)、後処理(Post-Retrieval)が追加
- Modular RAG
- なんでもあり
@Tomoaki Kitaoka
[slide] 生成AIに振り回された3か月間の成功と失敗/dev-productivity-con2024-link-and-motivation
- issueからPRを自動生成するチャレンジ
- 失敗したこと、うまく行ったことをつらつら書いてて面白い
@Yuta Kamikawa
[library] LayoutParserによるDocument Layout Analysis
- Document Layout Analysisのパイプラインを提供
- 物体検出による項目領域、項目ラベルの抽出から項目の文字列認識までを簡単に行うことができる
- 物体検出はdetectron2、文字列認識にはtesseract or Google Vision APIを使っている
- 物体検出で項目領域と項目ラベルを抽出
項目ごとに (領域), (ラベル)がわかっている状態
(この時点では項目の文字列はわからない
- 左上からテキスト領域をソート
- 項目ごとに文字列を認識
項目ラベル(今回はTitleとText)、項目文字列, 項目領域のペアを抽出
@Shun Ito
[論文] Prompting-based Synthetic Data Generation for Few-Shot Question Answering
- LREC-COLING 2024
- Machine Reading Question Answering (MRQA)
- 従来は事前学習済みモデルを特定ドメインに特化した少数のアノテーションデータでfine-tuningする
- 特定ドメインに特化して学習する場合、アノテーションデータを大量に用意するのは高コスト
- 提案手法では、fine-tuningの前に言語モデルで生成したデータを使った学習を挟む
- 手順: 固有表現抽出で正解となる単語を選び、contextとともに入力して質問文を生成する
- contextは文書の文字列を100トークンずつチャンキングして、回答候補が入っているものにフィルタリングされている
- MRQAモデルの学習では、contextと生成された質問文に対して、正解を予測する問題を解く
- 少数のアノテーションデータでfine-tuningする場合でも、提案手法の方が高い精度を出せている
@qluto (Ryosuke Fukazawa)
[blog] 📝 Guest Post: Designing Prompts for LLM-as-a-Judge Model Evals*
LLMの出力をLLMに評価させるという LLM-as-a-Judge について、俯瞰的に要点をまとめた記事。
HumanSignal という、LLM を評価・改善するためのプラットフォームを提供している会社の CTO による記事です。
LLMは元のコンテンツを生成するよりも出力を評価する方が認知的に容易であろうというのが、これをやるモチベーション。
成功の鍵は、反復的な改良プロセスにあります。まず、評価基準に基づいて初期プロンプトを作成します。次に、LLMの判断を人間の評価者のものと比較し、不一致の領域に特に注意を払います。これらの不一致を利用してプロンプトの改訂を導き、必要に応じて指示の明確化や基準の調整に焦点を当てます。改善を定量化するために、評価の品質の有用な代用として機能する、一致率やCohenのKappaなどの指標を使用します。
LLM-as-judgeは多くの利点を提供しますが、その限界を認識することも重要です:
- エコーチェンバー効果:LLMが他のLLMを評価することで、AI生態系に存在する既存のバイアスや限界が強化される可能性があります。
- 未知の未知:LLMは、トレーニングデータに存在しなかった新しいタイプのエラーや問題を識別するのに苦労する可能性があります。
- 人間の監督の必要性:有用ではありますが、LLM-as-judgeは人間による評価を完全に置き換えるべきではありません。
これらの課題に対処するために、以下の戦略を検討してください:
- バイアスを減らすために、評価に多様なLLMモデルを使用する。
- 複数のLLMからの評価を集約する、マルチモデルコンセンサスアプローチを実装する。
- 自動評価と人間による評価のバランスを維持し、LLM-as-judgeを人間の判断を置き換えるのではなく補強するツールとして使用する。
元記事には実際のプロンプト例などのプラクティスが紹介されています。
[blog] BM42: New Baseline for Hybrid Search
BM42は、従来のBM25アルゴリズムとトランスフォーマーモデルの長所を組み合わせた新しいアプローチです。主なポイントは以下の通りです:
- IDFの活用: BM25の重要な要素である逆文書頻度(IDF)を保持しています。IDFは、クエリ内の各用語がコーパス全体でどれくらい珍しいかを示す指標です。
- トランスフォーマーの注意機構の利用: ドキュメント内の用語の重要性を決定するために、BM25の統計的アプローチの代わりに、トランスフォーマーモデルの注意機構を使用します。これにより、特に短いドキュメントや文脈が重要な場合に、より意味のある重要性スコアが得られます。
- WordPieceの再トークン化: トランスフォーマーのWordPieceトークン化を使用した後、サブワードを元の単語に戻す処理を行います。これにより、検索に適したトークン化が可能になり、未知の単語や希少な単語の処理が改善されます。
- 軽量で高速: SPLADEなどの他の最新手法と比較して、BM42はより軽量で高速です。特に、既存のトランスフォーマーモデルを追加のトレーニングなしで使用できる点が特徴です。
- 多言語サポート: 様々な言語のトランスフォーマーモデルを使用できるため、多言語での検索に適しています。
- ハイブリッド検索への適合: BM42は、密ベクトル検索と組み合わせて使用することを想定しています。これにより、正確なキーワードマッチングとセマンティック検索の両方の利点を活かすことができます。
これらの特徴により、BM42は特にRAG(検索拡張生成)システムなど、現代の検索アプリケーションに適したアプローチとなっています。従来のBM25の強みを活かしつつ、トランスフォーマーモデルの強力な言語理解能力を組み込むことで、より効果的な検索結果を提供することを目指しています。
@Yosuke Yoshida
[GitHub] microsoft/graphrag
- MicrosoftのGraphRAGがGitHubで公開された
- ブログ
- ‣
- GraphRAGとは
- LLMを使用してテキスト文書からナレッジグラフを自動で抽出
- これを実現するために、階層的な方法で密接に接続されたノードの「コミュニティ」を検出し、高レベルのテーマから低レベルのトピックに至るまで、複数のレベルでグラフを分割
- これらのコミュニティをLLMを使用して要約することで、事前に階層的な要約が作成される
- ナイーブなRAGとの比較
- ベクトル検索に基づくようなナイーブなRAGでは、質問に意味的に類似したテキストの断片から回答を生成するが、質問がデータセット全体に関連する場合、すべての入力テキストを考慮する必要がある
- ナイーブなRAGは入力テキストの最も類似したトップKの断片のみを考慮するため、失敗します。さらに悪いことに、その質問と表面的に類似したテキストの断片と一致し、誤解を招く回答を生成します。
- コミュニティ要約は、このようなグローバルな質問に答えるのに役立ちます。
- なぜなら、エンティティと関係の記述のグラフインデックスは、その構築においてすべての入力テキストを考慮しているからです。
[書籍] 機械学習デザインパターン ―データ準備、モデル構築、MLOpsの実践上の問題と解決
はじめに
今日は第3章「問題表現のパターン」について紹介。
6つのパターンが紹介されています。まず最初に概略から。
- 問題再設定パターン: 回帰問題を分類問題に、またはその逆に変更するなど、問題の出力の形式を変えることで、モデルの性能を向上させる方法。
- マルチラベルパターン: 一つの入力に複数のラベルが割り当てられる問題に対処する方法。シグモイド活性化関数と二値交差エントロピー損失を使用。
- アンサンブル学習パターン: 複数のモデルを組み合わせて予測を改善する手法。バギング、ブースティング、スタッキングなどを含む。
- カスケードパターン: 機械学習問題を複数の小さな問題に分割し、モデルを連鎖させる方法。
- 中立クラスパターン: 二値分類に「中立」クラスを追加して改善する手法。
- リバランシングパターン: 不均衡なデータセットに対処するための手法。ダウンサンプリング、重み付けクラスなどを含む。
今回はそのうち、問題再設定パターンとカスケードパターンについて詳しく紹介します。
問題再設定 (Reframing) パターン
機械学習で解く問題の出力の形式を変えるパターンです。
直感的には回帰問題であるものを、代わりに分類問題として捉えたり、その逆をとったり。
降雨量を予測する機械学習モデルを構築することを考えてみましょう。これは回帰問題、分類問題どちらのタスクになるでしょうか?ラベルとなる降雨量は実数なので、回帰モデルとして構築することもできます。
ただ、実際にやってみると降雨量の予測は難しいことがわかります。同じ特徴量の集合で 3 mm の雨が降ることも 5 mm の雨が降ることもあるからです。この回帰モデルを改善するために特徴量をもっと増やしたり、より多くのデータを集めたりするのが良いでしょうか?
二峰性を示す分布である場合や、正規分布であっても分散が大きい場合には分布のモデル化が有利になることが多いです。タンパク質の折りたたみ構造の予測問題では、アミノ酸間の距離を64次元の分類問題として予測することによって全てのベンチマークを上回ったという報告もあったりします。
問題を再設定するもう一つの理由は、目的が他の種別のモデルを用いてよりよく達成できる場合があるということです。例えば、動画推薦システムで、クリック有無の分類問題ではなく視聴部分を予測する回帰問題にする方が望ましい場合があります。前者ではクリックベイトを優先する推薦システムになる可能性があるからです。これに対応するために、ユーザがビデオクリップの半分以上を見る可能性を予測するように分類目的を変更することもできます。
- 分類への再設定により、予測対象を離散的な確率分布として表現できる。これにより、予測値に対してより厳密な回帰モデルよりも、複雑な対象に適した学習ができる。
- 映画を推薦するという分類問題を、ユーザの特性についての回帰問題へ再設定することで、最近トレンドとなっている動画や名作映画、ドキュメンタリー映画などを推薦する際、毎回別の分類モデルを訓練しなくても推薦モデルを簡単に適応できるようになる。
予測出力の範囲の制限が不可欠な場合も問題を再設定する必要があります。例えば回帰問題の現実的な出力値が [3, 20] の範囲にあり、出力層が線型の活性化関数である回帰モデルを訓練した場合、範囲を外れてしまう出力が出る可能性が常に付きまといます。出力の一つ前の層の活性化関数をシグモイド関数により [0, 1] の間に範囲制限し、最後の層で希望の範囲にスケーリングするなどです。
回帰か分類のどちらかを選択するのではなく、マルチタスク学習として両方を選ぶこともできます。ニューラルネットワークにおけるマルチタスク学習の最も一般的な形態は、ハードパラメータ共有とソフトパラメータ共有の2つです。
例えば、研究論文「Fast R-CNN」(https://arxiv.org/abs/1504.08083)では、ソフトマックス確率の分類出力と、バウンディングボックス(bounding box:物体を含む矩形)を予測する回帰出力を用いて、コンピュータビジョンのモデルを訓練します。この論文では、分類と位置推定のタスクのために別々にネットワークを訓練する関連研究よりも、マルチタスク学習に基づく手法が優れた性能を達成することを示しています。
カスケードパターン
カスケードパターンでは、機械学習の問題を一連の問題に分割することで効果が得られる状況に対応します。
このパターンの利用イメージ
どのような時にカスケードパターンを適用すると良いのでしょうか?
ちょっと概念的な話になりますが、通常のアクティビティと例外的なアクティビティがある中、その両方でなんらかの値を予測する場合、例外的なアクティビティが稀である場合、それに関連する情報は訓練の際に無視されてしまいます。でも例外的なアクティビティが予測する値に関わっている場合、学習がうまく成果を上げられるかどうかは怪しくなってきます。
例を挙げて説明をしていきます。eコマースサイトでの顧客による返品を推定するモデルを作っているとしましょう。商品を売る側である、小売業者が数百万人、卸売業者が数千人であるとした時、単一のモデルで訓練を行うと、少数である卸売業者の返品行動に関わる情報が失われてしまいます。
このような問題を解決する一つの方法は、モデルの訓練時に少数派である卸売業者のインスタンスに何らかの重みをつけることです。しかし、これは最適なものとは言いづらいです。大多数である小売業者のケースでできるだけ精度を上げる必要があるからです。多数派の精度を下げて少数派の精度を上げるという戦略は取るべきではないと言えるでしょう。
卸売業者の返品は実施まで消費者に長い時間を待たせる傾向が強いなど、多数派と少数派とで起こる行動のビジネスインパクトの大きさに差があればより悩ましくなります。
この問題を解決するためには、カスケードパターンが適切であるとされています。
例に挙げた問題の場合下記の4つに問題を分けます。
- ある取引が卸売業者である可能性を予測するモデルの訓練
- 小売業者の販売に関するモデルの訓練
- 卸売業者への販売に関する別のモデルの訓練
- 3つの異なるモデルの出力を組み合わせて、卸売業者である確率や、購入された商品の返品可能性の最終的な予測
利用時の注意点
これらのモデルはそれぞれ比較的簡単に訓練できるようになりますが、後段のモデルは前段のモデルの推定結果をもとに予測をしなければいけないという問題を抱えることになります。どうすればいいのでしょうか?
1の分類モデルを学習したのち、このモデルの予測値を使って、次の2つのモデル群の訓練データセットを作成、そのデータセットによって後段のモデルを訓練するという方法がカスケードパターンであると紹介されています。
このようなカスケードのワークフローを直接管理するのは難しくなることが考えられるため、ワークフローパイプラインを組むことが推奨されています。
どんな時に向いていて、どんな時に向いていないか?
カスケードパターンは必ずしもベストプラクティスではなく、利用・乱用には注意が必要です。ワークフローもかなり複雑化してしまうため、できるだけパイプラインを1つの機械学習問題に限定するようにという念押しがされています。
カスケードパターンを使わなくてよい状態にするには、下記のような例が挙げられます。
- 入力から典型的・例外的であるかを区別する条件が決定的にわかる時
- その条件をモデルの1つの入力として解決する
- 例えば平日の買い物か休日の買い物かなど
- 条件が1つの入力であって、マルチモーダルパターンを利用できる時
- マルチモーダルパターンは2章に登場。テキストと画像などといった組み合わせはもちろん、フリーテキストと数量、カテゴリ値の組み合わせなどもその範疇として紹介されている
- 問題再設定によってカスケードを代替できる時
- 先の例で挙げたような、小売業者と卸売業者を相手にしている状況で、今度は1時間ごとの売り上げ予測をしたいとなったとします。たまに卸売業者が含まれるでしょう(一度の売り上げ金額が大きいかもしれない)
- これは卸売業者という交絡因子がある中での売り上げ量予測の回帰問題として設定できる。さらに言えば、バケットごとの分類問題としてよりよく解けるかもしれない
カスケードパターンが向いているのは、カテゴリ型の特徴量が用意できず、複数のサンプルから極端なケースを訓練する必要があるという珍しい場面です。
その他の理由でカスケードパターンが必要な時もあります。
- 複数のモデルの内部整合性をとらねばいけない時
- 顧客の購入傾向を予測するモデルを訓練する理由が、値引きを提案することだった場合、値引き提案有無や値引き額の決定は、購入傾向に依存します
- 事前に学習されたモデルの出力を別のモデルの入力とする時
- 車両のナンバープレートを読み取りゲートを自動的に開けるようなモデルを作ろうとしている時、カメラの画像を直接モデルに使用するのではなく、車両のナンバープレートに対するOCRモデルの出力を利用した方が簡単な場合があります。この時、OCRモデルの認識間違いの考慮が重要になってくるため、完璧で正しいナンバープレート情報でモデルを訓練するべきではありません。実際のOCRモデルの出力によって訓練する必要があります。
- 稀な状況での回帰を利用する時
- 例えば衛星画像から降雨量を予測したい問題の時。99%のピクセルでは雨が降っていないというような偏りがある時、まず雨が降るかどうかを分類問題として解き、その後に降雨量を予測する回帰モデルを訓練させるといったように。