MaskedLMで[Mask]が"承認"や"否決"である確率が低い問題への対策

#2
by mittu - opened

BERTが承認か否決を選択するアルゴリズムについて考えてみました。
現状だと[MASK]に入りそうな単語として"賛成"や"反対"の方が生起確率が"承認"や"否決"より高い場合があることがあり、
モデルが適切に2択を答えていると言い切れないと思います。
ある単語vと同意の単語は単語vと分散表現が近いということを踏まえて、

  1. allow_weight= "承認"と語彙の各単語の分散表現の距離(内積かコサイン類似度かその他)を計算しSoftmaxしたもの
  2. deny_weight = "否決"と語彙の各単語の分散表現の距離を計算しSoftmaxしたもの
  3. モデルが出力したlogitをSoftmaxした確率分布P(w)とaloow_weightを積算
    "承認"と同意義で出力確率の高い単語のスコアがハイライトされる
  4. モデルが出力したlogitをSoftmaxした確率分布P(w)とdeny_weightを積算
    "否決"と同意義で出力確率の高い単語のスコアがハイライトされる
  5. 3と4で計算したスコアから"承認と"否決"のどちらにするかをどうにかして決定

って言うのがいいのかなって思いました。
少なくとも分散表現の近い単語のlogitは積極的に使って行ったほうがいい気だけはしています。
余談ですが、その際のスコアを同時に出力すると、AIの選択に説得力が生まれるかと思います。

語彙の選定理由は #3 に書いた通りです.フェアさより元ネタっぽさをとりました.

提案くださったアルゴリズムはもっともらしいと思います.
3つのモデルに反映させるとなると,計算時間が大きすぎないかいう問題が残ります.今はちょっと原稿の締め切りで忙しいので,時間が空き次第実装を検討しますね.

余談に関しては,元ネタに近い挙動をさせようとするにはフロントエンドを結構頑張らないといけないですね..
(どんな挙動かは新世紀エヴァンゲリオン 第13話をご覧ください.)

一旦,mT5をpromptが簡単なmBERTに変更し,YesとNo(トークン化後1トークンに収まる対義語のサブワード)に変更しました.少しはマシになる気がします.
https://huggingface.co/spaces/gojiteji/NAGISystem/commit/dad54e880df39e39e3d62e703421d758cee3c2d8

Sign up or log in to comment