2024-05-16 機械学習勉強会
今週のTOPIC[blog] 高性能な日本語マルチモーダル基盤モデル「clip-japanese-base」を公開しました[blog] LLM に表データを読み解かせたかったので、ちょっと試してみた[blog]これまでの検索と生成AI時代の検索[やってみた]Detectron2でDocument Layout Analysisの学習し&推論してみた[論文] CREPE: Coordinate-Aware End-to-End Document ParserCursorはじめましたIntro to MLOps: Data and Model Versioningバージョン管理の基礎バージョン管理とは?なぜバージョン管理が必要なのか?バージョン管理の種類機械学習におけるバージョン管理データのバージョン管理モデルのバージョン管理機械学習におけるバージョン管理のベストプラクティス
今週のTOPIC
※ [論文] [blog] など何に関するTOPICなのかパッと見で分かるようにしましょう。
出典を埋め込みURLにしましょう。
@Naoto Shimakoshi
[blog] 高性能な日本語マルチモーダル基盤モデル「clip-japanese-base」を公開しました
- 日本語のimage-textペアを収集し、Data Centricコンペで獲得した知見を用いて、データのフィルタリングを行った。
- ゼロショット画像分類と画像・テキスト検索タスクの性能を既存の公開モデルと比較したところ、最も軽量かつ最も高い平均スコアを達成
- Apache 2.0ライセンスなので商用利用可能。クロスモーダル検索などに便利。
[blog] LLM に表データを読み解かせたかったので、ちょっと試してみた
- 表形式のデータを読み解こうというタスクに対してLLMを用いた話
- 問題設定としては、すでに表データはcsvだったりの形式である状態で、そこからデータの抽出や集計を行って所望の答えを求めるというタスク
- 論文が3つ紹介されており、ICLR 2024で発表されたChain of TableをLlama Hubから持ってきて試している。
- 簡単な質問なら上手くいくが、処理途中で正規表現の抽出がうまくいかず失敗するケースがあったらしい。
- 面白かったこととして、Chain of Tableでは、in-context learningで渡す表形式を色々な方法で試したところPIPE形式が一番良かったらしい。
@Yuya Matsumura
[blog]これまでの検索と生成AI時代の検索
- 従来の検索とこれからの生成AI時代の検索を比較している。
- 検索の歴史を紐解くにあたり、索引について深ぼっているところが個人的には一番おもしろかた。(参考文献はポチった。)
- 生成AI時代の検索は、従来の「関連する参考情報を提供する」検索から「ユーザーの情報ニーズを満たす回答を直接生成」する検索に移行している
- RAGを構成する3要素
- データ(更新頻度、構造化、暗黙知、etc.)
- 検索の精度
- 生成の精度と目的
- これからの検索の発展の方向性を3つの観点で整理
- データ化
- もちろんこれまでも重要であったが、生成AIにより価値がますます高まった。かつ、それ自身を生成AIが効率化できる余地がある。
- 新しい検索のUI/UX
- 従来の単語ベースのクエリから文章ベースへ。必要な情報が足りない場合は、ユーザーから情報を引き出すような問いかけ。
- 入力は、ユーザーは自身が知りたいことや状態の言語化をするのが難しいので、それをサポートするような受動的な言語化体験が必要になってくる。
- 滑らかなネクストアクション
- 検索の目的は、知りたい情報を知るだけではなく、その先の真の目的を達成すること。そこへのスムーズな接続、なめらかな体験が重要。
@Yuta Kamikawa
[やってみた]Detectron2でDocument Layout Analysisの学習し&推論してみた
- 物体検出フレームワーク
- Detectron2, Ultralyticsなど
- Detectron2はRNNシリーズ、Ultralyticsはyoloシリーズ
- COCO(Common Object in Context)フォーマットで定義されたデータセットを使って、学習や推論をシュッと行うことができる
- Document Layout Analysis
@Shun Ito
[論文] CREPE: Coordinate-Aware End-to-End Document Parser
- ICDAR2024採択
- Documentの画像からparseした文字列とテキスト座標をE2Eで出力するモデル
- 画像をSwin Transformerでエンコード
- Transformer Decoderで文字列を出力
- , のような特殊トークンを含んだ文字列
- 項目と値との対応関係を構造化しやすい
- で囲まれた部分は別ヘッドで座標を出力する(マルチヘッド)
- 学習
- 事前学習
- SynthDogで合成データを作成
- テキスト座標を用意するため、SynthDogを修正
- ファインチューニング by 弱教師あり学習
- 2種類のデータを1つのバッチに混ぜて入力する
- OCRタスク用の合成データ: パース+座標
- パースタスク用の実データ: パースのみ
- パースタスク側では座標が生成されるトークン(/ocr)に関する損失を無視する
- 座標アノテーションがないデータセットも学習データに含められる
- 結果
- parse精度高い
- 課題: 弱教師あり学習だと、bboxの境界の精度がやや低くなる(中心点はOK)
@Yosuke Yoshida
Intro to MLOps: Data and Model Versioning
バージョン管理の基礎
バージョン管理とは?
- バージョン管理とは、時間の経過とともにファイルやプロジェクトフォルダに加えられた変更を追跡・管理することです。
- 主要な概念:
- Version:特定の時点におけるファイルやプロジェクトのスナップショット。
- Repository:ファイルやプロジェクトの全バージョンが保存される場所。
- Commit:リポジトリに新しいバージョンを保存するプロセス。
- History:変更履歴で、誰が何をいつ変更したかを含む情報。
なぜバージョン管理が必要なのか?
- バージョン管理の利点
- Traceability(トレーサビリティ):誰が何をいつ変更したかをすぐに把握でき、変更の影響も確認できること。
- Reproducibility(再現性):特定の時点で使用されたファイルやプロジェクトのバージョンを知ることで、過去の結果を再現できること
- Rollback(ロールバック):異なるバージョン間を迅速に切り替えることができ、問題が発生した場合に以前の安定したバージョンに戻すこと
- Comparison & Debugging(デバッグ):異なるバージョンを比較して変更内容を確認できこと。これはデバッグの役に立つ。
- Collaboration(コラボレーション):プロジェクトのスナップショットのコピーを作成(ブランチング)し、テスト成功の後に全体のプロジェクトに変更を共有(マージ)すること。
バージョン管理の種類
- ファイルの異なるバージョンを区別する必要がある場合、直感的に同じファイルを異なる名前で保存して区別します。
- 手動でのバージョン管理は設定の手間が不要ですが、変更履歴を理解するのが難しく、他の人とのコラボレーションがほとんど不可能です。また、ディスクが損傷した場合、すべての変更が失われます。
- バージョン管理には、ローカル、中央集権型、分散型の3種類があります。
- ローカルバージョン管理システム:1台のコンピュータにリポジトリを持つ。設定が簡単でネットワーク接続が不要ですが、コラボレーションができず、バックアップが限られます。
- 中央集権型バージョン管理システム:中央サーバーに1つのリポジトリを持つ。コラボレーションが可能ですが、ネットワーク接続が必要で、バックアップが不十分です。例としてSubversionがあります。
- 分散型バージョン管理システム:中央サーバーに1つのリポジトリを持ち、クライアントはそのローカルコピーを作成する。オフライン作業やバックアップが向上しますが、ディスクスペースを多く消費します。例としてGitやMercurialがあります。
機械学習におけるバージョン管理
- バージョン管理はソフトウェア開発だけでなく、MLモデルの開発プロセスでも非常に重要。MLでは、ソースコードのバージョン管理と同様に、データセットやモデルといったアーティファクトのバージョン管理が必要になってくる。
- MLモデルの開発プロセスでは、ソースコード以外にもアーティファクトが生成されます。アーティファクトとは、プロセスの入力または出力となるファイルのこと。MLにおいて重要なアーティファクトは、データセットやモデルなどがある。
- ソフトウェア開発における入力のアーティファクトの例としては、ソースコードやライブラリがあり、ビルドプロセスを経て出力のアーティファクトとしてオブジェクトファイルや実行ファイルを生成します。
- 一般的なバージョン管理とデータおよびモデルのバージョン管理はよく似ています。ここではトレーサビリティ、再現性、ロールバック、デバッグ、およびコラボレーションといった基礎概念に加え、データとモデルの変更に伴うバージョン管理のあり方に焦点を当てる。
データのバージョン管理
- バージョン管理はしばしソースコードと紐付けられますが、データのバージョン管理またはデータバージョニングは、データセットの変更を保存、追跡、管理に利用される。
- モデル開発時にデータバージョンに変更が生まれるイベントは以下:
- データ前処理(データ内容の変更):データクリーニング、外れ値処理、欠損値補完など。
- 特徴量エンジニアリング(データの拡張):集約特徴量、ラベルエンコーディング、スケーリングなど。
- データセット分割(データの分割):トレーニングデータ、検証データ、テストデータに分割。
- データセット更新(データの追加):新しいデータが追加される場合。
モデルのバージョン管理
- モデルバージョン管理は、MLモデルの変更をの変更を保存、追跡、管理に利用される。
- モデルバージョン管理のための用語:
- モデルバージョン:訓練済みモデルのスナップショット。
- (e.g., model weights after a cross-validation fold)
- モデルアーティファクト:ログに記録されたモデルバージョンのシーケンス。
- (e.g., the collection of the model weights after each fold of a training run)
- 登録されたモデル:リンクされたモデルバージョンの一覧。
- (e.g., the candidate models for a task in production)
- モデルレジストリは、モデルのバージョン管理、リネージュ、ライフサイクル管理を目的としたリポジトリ。
- データバージョン管理は主にモデル開発に関連しますが、モデル管理(モデルバージョン管理を含む)は、学習→staging→productionのモデルのライフサイクル全体に適用されます。
- モデル開発:モデルの選択からハイパーパラメータの異なるモデルの訓練まで、異なるバージョンを追跡したい。
- モデル展開:stagingプロセス中に異なるモデルバージョンの性能を評価し、展開に使用すべきモデルの選定をしたい。
- モデル監視:運用されているモデルの性能を監視します。
- データとモデルのバージョン管理を実装するためのMLOpsプラットフォームやツールには、DVC、Neptune、Weights & Biasesなどがあります。
機械学習におけるバージョン管理のベストプラクティス
- ソースコード管理におけるバージョン管理のベストプラクティスは、データとモデルのバージョン管理にも適用されます。
- MLにおけるバージョン管理を適切に記録するために追加で考慮すべき事項を一般化して以下にいくつか挙げます:
- コミットは論理的な単位にする:後で取り消したい変更を保存する際には、新しいバージョンを保存します。
- (e.g., a new feature in code, updated data preprocessing step, newly trained model weights).
- 意味のあるコミットメッセージを使用する:変更内容を簡潔に説明します。
- (e.g., avoid commit messages like “changes”, “update”, “added file”, etc.)
- メタデータをログに記録する:後で役立つ可能性のある情報を記録します。
- メタデータは詳細に記述するように
- 重要なバージョンにタグを付ける:特定のバージョンに簡単にアクセスできるようにエイリアスを付けます。
- (e.g., best, release, etc.).