RuntimeError: The size of tensor a (1104) must match the size of tensor b (512) at non-singleton dimension 1

2月 4, 2021

Hugging FaceのTransformersを使って,事前学習済モデルを読み込んで推定させるとタイトルのようなエラーがでることがある.

このエラーはBERTにおけるトークン(サブワード)の最大長512を超えた文が入力された時に発生することが多い.ちなみに,BERTのネットワーク構造を観察すると,position embeddingのレイヤーで512が指定されていることがわかる.

対策としては,トークン長が長い文を検出し,対応するのが手っ取り早い.コーパスに含まれている各文に対して,sentence pieceなどのサブワードに対応したトークナイザを適用し,トークン長が512を超える文については,トークン長が512になるように修正するか,あるいはコーパスから削除する.

また,近年ではLongformer(トークン長4096まで対応)やReformer(トークン長64000まで対応)など,長い文でも入力可能なモデルが提案されているため,BERTの代わりにこれらのモデルを使うという対策もある.しかしながら,医学やバイオなど,特定のドメインに特化した事前学習モデルはBERTで学習されていることが多いため,専門文書を解析する私のような人は1つ目のような対処療法的な方法を使わざるを得ない.

BERT,Flair

Posted by vastee