Potato 2.14:自分のアノテーションでモデルを学習する
Potato 2.14は、研究のラベルで38のトレーナーによるモデル学習を行い、各実行をホールドアウトした項目でスコアリングし、予測を事前ラベルとしてアノテーターに見せます。
Potato 2.14は、研究自身のアノテーションでモデルを学習します。1回の実行は、アノテーターが付けたラベルで38のトレーナーのうち1つを学習し、学習から外した項目でモデルのスコアを測り、モデルの予測を、アノテーターが確認または修正する事前ラベルとして項目に書き戻します。バージョン2.13.1のトレーナーはsklearn-textの1つだけでした。このリリースでは、RTTMのダイアライゼーションファイルのインポート、修正された話者ターンのエクスポート、ローカルでの書き起こしのためのWhisperXの実行も加わり、一致度の数値やエクスポートを変えていた複数のバグも修正されています。インストールする前に、アップグレードの注意事項を読んでください。
pip install --upgrade potato-annotationアップグレードの注意事項
まず、各設定でpotato validate config.yaml --strictを実行してください。次の変更は、動作していた2.13の研究の挙動を変える可能性があります。
assignment_strategy: llm_confidenceがキューを並べ替えるようになりました。 この戦略は、信頼度が最も低い事前ラベルを先に、続いて事前ラベルのない項目を渡します。以前のリリースでは、この値は受け付けられるだけで、項目はランダムに割り当てられていました。model_trainingは、検証時と起動時に検査されます。writebackまたはauto_retrainの下の未知のキー、train、val、test以外の名前の分割、スキームではないwriteback.schemasのエントリは、サーバーを停止させるエラーです。- Trainingページはホールドアウトスコアを報告します。 スコアの列は、以前は学習時の正解率を表示していました。2.13の実行のスコアを、2.14のホールドアウトスコアと比較することはできません。
- リンク、連鎖、イベントがエクスポートに含まれます。
span_link、coreference、event_annotationの答えは、これまですべてのエクスポートから欠けており、CSVとTSVには、<scheme>._linksと<scheme>._eventsの列が加わりました。 - Potatoは
install_requiresにujsonを載せなくなりました。 Potatoの環境からujsonをインポートする独自のスクリプトには、pip install ujsonが必要です。
モデル学習
モデル学習は、アノテーターがラベルを付けきれないほど項目の多い研究のためのもので、最初のラベルで学習したモデルが、残りを提案できます。ループは3つのステップです。第1に、実行が各項目のラベルを1つの答えに統合し、項目をtrain、val、testに分けます。第2に、トレーナーが別プロセスでtrain分割のモデルを学習し、実行はvalとtestの項目でモデルのスコアを測ります。第3に、書き戻しがモデルの予測を事前ラベルとしてアノテーターに見せ、アノテーターが保存した答えが次の実行のラベルになります。
sentimentスキームのある研究でループをオンにするには、研究の設定に次のブロックを追加します。
model_training:
enabled: true
writeback:
schemas: [sentiment]
include_unlabeled: true
min_confidence: 0.6writeback.schemasの下にスキームを指定するまで、アノテーターには実行の結果が何も見えません。include_unlabeled: trueは、まだ誰もラベルを付けていない項目も予測し、min_confidenceは、0.6未満の予測をページに出さないようにします。サーバーを再起動し、管理者キーで/admin/trainingを開き、トレーナーとスキームを選び、Train nowをクリックします。

Potatoのサンプルプロジェクトexamples/ai-assisted/model-training/には160件の商品レビューがあり、GPUも通常のインストール以外のものも必要としないsklearn-textを実行します。モデル学習のドキュメントには、そこでの1回の実行が報告されています。120件のラベル付きレビューで学習し、検証用のレビューでmacro-F1が0.84となり、80件の事前ラベルを書き込みました。新しいアノテーターには、それらのレビューが、モデルの答えがすでに選択された状態で表示されます。

最初のモデルを学習するでは、このサンプルを順を追って説明しています。
アノテーションの種類ごとのトレーナー
Trainingページは、各スキームに合うトレーナーだけを提示します。トレーナーのカタログには、38のトレーナーすべてがインストールコマンドとともに載っており、下のリストは主なグループを示します。
- テキスト。
hf-text-classification、setfit、sklearn-textは項目を分類します。hf-token-classificationはスパンにタグを付け、hf-relationはスパンを関係、イベント、共参照の連鎖に結び、byt5-glossは行間グロスのために単語を分割してグロスを付けます。 - 画像。
torchvision-detectとultralytics-detectは検出器を、torchvision-segment、ultralytics-segment、cellposeはセグメンターを学習します。検出とセグメンテーションの実行は、全スライド画像や大きな画像をタイルに切り、顕微鏡画像の平面とGeoTIFFの地図で学習します。volume-unetは3Dボリュームをセグメンテーションし、layoutlmv3はページのレイアウトにラベルを付け、vlm-sftは、キャプション、グラウンディング、GUIのステップで視覚言語モデルをファインチューニングします。 - 音声と動画。
whisper-asrは修正された書き起こしのターンでWhisperをファインチューニングし、diarizationは話者のターンで話者モデルを学習し、hf-audio-taggerは音声の区間にタグを付け、video-trackはフレーム間で物体を追跡します。 - LLMとエージェント。
llm-sftは自由記述の答えで、llm-dpoはペアの選好で、reward-modelはペア比較、ランキング、best-worstの答えで、prm-rewardはエージェントのトレースのステップ評価で、それぞれファインチューニングします。 - 科学分野。
rdkit-propertyは分子についての答えを、peak-cnnはスペクトル上のピークの位置を予測し、signal-cnnは時系列信号の区間にラベルを付け、episode-modelはロボットのエピソードにラベルを付けます。
ultralyticsのトレーナーはAGPL-3.0で、LayoutLMv3の重みはCC BY-NC-SA 4.0です。どちらの実行でも、最初にライセンスへの同意を求められます。pip install "potato-annotation[train]"で、テキスト、画像、音声、LLMのトレーナーに必要なものがインストールされ、別途必要なインストールはカタログに記されています。
ホールドアウトスコアと事前ラベル
どの実行も、スキームに合った指標で、valとtestの項目で予測のスコアを測ります。たとえば、ラベルにはmacro-F1、ボックスにはmAP50、書き起こしには単語誤り率、ボリュームにはDiceが使われます。ラベルがあって予測がない項目は不正解として数えられ、カバレッジの数値は、予測が付いた項目の割合を報告します。train分割の項目に事前ラベルが付くことはなく、レビュー担当者が修正した項目は、以降の実行のtrain分割に必ず入ります。
事前ラベルがアノテーターの答えになるのは、アノテーターが事前ラベルを編集するか、次に進んだときだけで、書き戻しが人手のラベルを変えることはありません。モデルレビューキューは、事前ラベルを信頼度の低い順に渡し、レビューレポートは、各事前ラベルの背後にある実行を示します。ループの中のモデルでは、レビューのワークフローを扱います。
GPUサーバーまたはクラスターでの学習
実行はバックエンドで動きます。localバックエンドはPotatoサーバー上で学習し、CUDA、AppleのMetal、CPUのいずれかを選びます。sshバックエンドは、Potatoが到達できるGPUサーバーで実行を開始し、進捗とモデルを流して戻します。slurmバックエンドは、ログインノードからsbatchで計算ノードに実行を投入し、必要なのはsbatch、squeue、scancelだけです。agentバックエンドは、Potatoから到達できず、potato training agentを実行してジョブを問い合わせるマシンのためのものです。sshバックエンドで実行する前に、potato training check <backend> config.yamlが、リモートのPython、リモートのGPU、足りない学習用パッケージを報告します。GPUサーバー、SLURMクラスター、NATの内側のマシンで学習するは、各バックエンドを設定します。
次に何を尋ねるかの選択
hf-text-classificationとhf-image-classificationは、acquisitionパラメーターを受け取り、各予測にマージン、エントロピー、BALD、コアセット距離によるスコアを書き込みます。assignment_strategy: llm_confidenceは、そのスコアの最も高いものから渡します。auto_retrainは、既定では25件の新しいアノテーションごとに新しい実行を開始し、各実行はラベルのない項目を再びスコアリングします。能動学習は、このループをPotatoのactive_learningブロックと比較します。
すでにあるモデル
5つのトレーナーは何も学習せず、別の場所で動いているモデルのスコアを測ります。label-studio-mlはLabel Studio MLバックエンド、openai-vlm-boxesはOpenAI互換APIの背後にある視覚言語モデル、hf-inferenceはHugging Face Inference Endpoint、roboflow、cvat-nuclioはCVATのサーバーレス関数のためのものです。これらのモデルの予測には、学習済みモデルの予測と同じホールドアウトスコア、書き戻し、レビューが適用されます。すでに動かしているモデルからの事前ラベルとホールドアウトスコアは、各ブリッジを扱います。
モデルの公開
実行ページから、モデルをHugging Face Hubにプッシュでき、モデルカードには、トレーナー、ベースモデル、スキーム、分割のサイズ、ホールドアウトスコアが記されます。リポジトリ名は2回入力し、リポジトリは既定で非公開で、トークンはサーバー上の環境変数から取られます。予測と学習データはサーバーに残ります。同じページは、実行の分割と、その分割の人手ラベルを、データセットのバージョンとして保存し、後のモデルを同じ項目で比較できるようにします。
書き起こし、インポート、エクスポート
- WhisperX。
potato transcripts --transcribeは、WhisperXがインストールされていればWhisperXを使い、--asr-word-timestampsのもとで強制アラインメントによる単語の時刻を付けます。インストールされていなければ、faster-whisperに戻ります。whisper-asrの実行は、ファインチューニングしたモデルのCTranslate2コピーを書き出し、--asr-modelがそれを読み込みます。 - RTTMのインポート。
potato import -f rttmは、ダイアライゼーションのファイル、またはダイアライゼーションのファイルのフォルダーを、修正すべき話者ターンを持つ録音ごとの1項目に変換します。--speaker-mapは話者の名前を付け替えます。 segmentsエクスポート。 この形式は、音声または動画の区間ごとに1行のJSONLと、アノテーターごとのRTTMファイルを書き出します。- CoNLL-U依存関係。 HEADとDEPRELは、エクスポートされたスパンに対する、有向の
span_linkスキームから得られます。以前は、どちらの列も常に_でした。
結果に影響する修正
変更履歴には、すべての修正が載っています。次の修正は、報告済みの数値を変えていた可能性があります。
B,D=A,Cと書かれたランキングの同順位は、D=Aという名前の1項目として読まれていたため、Kendallのtauとスピアマンのfootruleは、同順位の2項目を両方とも除外していました。- スライダー、ソフトラベル、ペア比較の尺度の事前ラベルは、ページの読み込み時にアノテーターの答えとして保存されていたため、誰も答えていないのに項目が完了として数えられていました。
grounding_evalの項目を開くと、同じように項目が保存されていました。 /admin/iaaは、共参照、スパンのリンク、イベントを、スコアのないスパンとして列挙していました。このレポートは、この3つのタイプを、ペアごとのF1の平均でスコアリングするようになりました。- コードブックでコードを統合または分割しても、コーディングは付け替えられませんでした。保存済みのアノテーションとコードidを結びつけるものがなかったからです。
- スナップショットのマニフェストは、一致度の数値をnullのまま固定していましたが、現在はkappaと一致率を記録します。
- モデルレビューは、
rejectの判定を、判定が取り下げた事前ラベルに対してではなく、見逃しとして数えており、レビューレポートの適合率は誤って算出されていました。また、ホールドアウトされたアノテーターと項目のペアは、writeback.fieldがpre_annotation.fieldと異なるとき、項目データに書き戻しのフィールドを残していました。現在は、そのようなペアの項目データから、両方のフィールドが除かれます。
2.14のインストール
アップグレードし、各設定を検証し、必要なトレーナーをインストールします。
pip install --upgrade potato-annotation
potato validate config.yaml --strict
pip install "potato-annotation[train]"