[解決済み] 文の多クラス分類のためのBertForSequenceClassificationとBertForMultipleChoiceの比較
質問
テキスト分類問題(センチメント分析など)に取り組んでいます。テキスト文字列を5つのクラスのいずれかに分類する必要があります。
を使い始めたところです。 ハギングフェーストランスフォーマー パッケージとBERTをPyTorchと一緒に使っています。私が必要とするのは、5方向分類を行うことができるように、上にソフトマックスレイヤーを持つ分類器です。混乱したことに、Transformerパッケージには2つの関連するオプションがあるようです。 BertForSequenceClassification(バートフォースシーケンスクラシフィケーション と BertForMultipleChoice(バートフォーマルチプルチョイス .
5分類のタスクには、どれを使えばいいのでしょうか?また、それらの適切なユースケースは何ですか?
のドキュメントを参照してください。 BertForSequenceClassification (バートフォーシーケンスクラシフィケーション) はクロスエントロピーには言及していますが、ソフトマックスには全く言及していません。このクラスが2クラス分類(つまりロジスティック回帰)だけのものなのかどうかはわかりません。
<ブロッククオートBert Model transformer with a sequence classification/regression head on top (a linear layer on top of pooled output) e.g. for GLUE tasks.
- ラベル (torch.LongTensor of shape (batch_size,), optional, defaults to None) - シーケンスの分類/回帰損失を計算するためのラベル。インデックスは [0, ..., config.num_labels - 1] の範囲でなければならない.config.num_labels == 1 ならば回帰損失(平均二乗損失), config.num_labels > 1 ならば分類損失(クロスエントロピー)が計算されます.
のドキュメントは BertForMultipleChoice はソフトマックスに言及していますが、ラベルの記述の仕方からすると、このクラスはマルチラベル分類(つまり、複数のラベルに対する2値分類)のためのものであるように聞こえます。
<ブロッククオートバートモデルに複数選択肢の分類ヘッドをつけたもの(プールされた出力とソフトマックスの上に線形層)例えばRocStories/SWAGタスクのためのもの。
- ラベル (torch.LongTensor of shape (batch_size,), optional, defaults to None) - 多肢選択式分類損失を計算するためのラベルです。インデックスは [0, ..., num_choices] であり、num_choices は入力テンソルの2次元目のサイズである。
よろしくお願いします。
どのように解決するのですか?
この答えは、(確かに非常に簡潔な)タスクが何であるかの記述にあります。
<ブロッククオート
[
BertForMultipleChoice
] [RocStories/SWAGのタスクなど。
を見るとき
SWAGのための紙
を実際に学習しているようです。
様々な選択肢から選ぶ
. これは,古典的な分類課題では,選択肢(クラス)である
変化しない
サンプル間で、まさに
BertForSequenceClassification
はそのためのものです。
どちらのバージョンも、実際には任意の数のクラスに対するものである可能性があります (例.
BertForSequenceClassification
の場合)、それぞれ選択肢(
BertForMultipleChoice
を変更することで対応できます。
labels
パラメータを設定します。しかし、あなたが扱っているのは古典的な分類のケースのようなので、このパラメータを使用することをお勧めします。
BertForSequenceClassification
モデルを使用します。
で不足しているSoftmaxにすぐさま対応。
BertForSequenceClassification
: 分類タスクはサンプルに依存しないクラス間の損失を計算できるため(分布が変化する多肢選択式とは異なります),バックプロパゲーションステップでソフトマックスを考慮したクロスエントロピ損失を使用することが可能です.
数値安定性の向上
.
関連
-
ピロウズ画像色処理の具体的な活用方法
-
Pythonコンテナのための組み込み汎用関数操作
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み] for'ループでインデックスにアクセスする?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み】forループを使った辞書の反復処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
opencvとpillowを用いた顔認証システム(デモあり)
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない