5

私はかなり長い間、MADE 1.0 データセットのためにHuggingFaceによるGoogle のBERTの PyTorch 実装を使用してきました。前回 (2 月 11 日) まで、私はライブラリを使用しており、モデルの微調整による名前付きエンティティ認識タスクで0.81のF スコアを得ていました。しかし、今週、以前にコンパイルして実行したのとまったく同じコードを実行したところ、次のステートメントを実行するとエラーが発生しました。

input_ids = pad_sequences([tokenizer.convert_tokens_to_ids(txt) for txt in tokenized_texts], maxlen=MAX_LEN, dtype="long", truncating="post", padding="post")

ValueError: トークン インデックスのシーケンス長が、この BERT モデルに指定された最大シーケンス長よりも長くなっています (632 > 512)。このシーケンスを BERT で実行すると、インデックス作成エラーが発生します

完全なコードは、このcolab ノートブックで入手できます。

このエラーを回避するために、任意のシーケンスの最初の 512 トークンを取得して上記のステートメントを以下のステートメントに変更し、必要な変更を加えて、BERT で必要とされる切り捨てられた/パディングされたシーケンスの末尾に [SEP] のインデックスを追加しました。

input_ids = pad_sequences([tokenizer.convert_tokens_to_ids(txt[:512]) for txt in tokenized_texts], maxlen=MAX_LEN, dtype="long", truncating="post", padding="post")

シーケンスの最初の 512 トークンのみを考慮し、後で 75 に切り捨てて (MAX_LEN=75)、結果は変わらないはずですが、F スコアは0.40に低下し、精度0.27に低下しましたが、リコールはそのままです。同じ(0.85) . 機密保持条項に署名しているため、データセットを共有することはできませんが、BERT で必要とされるすべての前処理が行われ、(Johanson --> Johan ##son) のようなすべての拡張トークンが X でタグ付けされ、置き換えられたことを保証できます。BERT Paperで述べられているように、後で予測した後。

他の誰かが同様の問題に直面したか、または問題の可能性があるか、または PyTorch (Huggingface) の人々が最近行った変更について詳しく説明できますか?

4

2 に答える 2

4

これを回避するための修正を見つけました。pytorch-pretrained-bert==0.4.0 で同じコードを実行すると、問題が解決し、パフォーマンスが正常に戻ります。モデルのパフォーマンスに影響を与えている新しい更新プログラムの BERT Tokenizer または BERTForTokenClassification で、モデルのパフォーマンスを台無しにする何かがあります。HuggingFace がこれをすぐに解決することを願っています。:)

pytorch-pretrained-bert==0.4.0、テスト F1 スコア: 0.82

pytorch-pretrained-bert==0.6.1、テスト F1 スコア: 0.41

ありがとう。

于 2019-03-01T20:58:35.830 に答える