自然言語処理の機械学習によるSTS 類似度計算編(4)

2021-12-07

前回までつらつら稚拙で怪しいNLPに関する文章を書いてきたが、要は最終的には結果が一番重要である。

今回のSTSタスクで行いたい、または、確かめたいことをまとめると以下である。

  • 2つの文の意味の類似度を計算できるか
    • 語彙レベルでの特徴量
      • 異なる語彙だが意味が近いものが含まれている場合
      • 同じ語彙だが、文脈によって意味が異なるものが含まれている場合
    • 文法レベルでの特徴量
      • 同じ単語が使われているが、並び順や接続肢などで意味が異なる場合
      • 論理的な意味が異なる場合

以上を実際に作成したSTSモデルで類似度を計算してみたいと思う。当然テストする文のペアは学習データに含まれないものである(適当にニュース記事から一部を引用している)。

語彙に関する特徴量

語彙レベルの違いについては特に問題なくこなせるはずである。今回は以下の文のセットを考えてみる。

異なる語彙で近い意味を表す文章

  1. 理屈だけで世の中の動きを想像すると、国民は、最後はついてきません。
  2. 理屈のみで社会が動いていると考えた場合、最終的に国民は支持してくれません。

1と2の文は意味的に近いことを書いている。しかし使用している語彙をできる限り異なったものにしている。

cosine similarity:0.794

もう少し高いスコアで出てほしいところだが、異なる語彙を吸収できていると考えられる。

同じ語彙だが意味が異なる語彙を使用している文章

  1. その子供はイングランドのキングになった。
  2. イングランドの子供たちに人気のムシキング。

これは例がなかなか思いつかなくて、上記のようになってしまった。「キング」とムシ「キング」で大きく意味が異なる語彙として考えてみた。

cosine similarity:0.295

「イングランド」や「子供」という語彙が一致しているにも関わらず、類似度が低めに計算されているので成功と考える。

文法に関する特徴量

接続肢、並び順の文法的な違い

  1. 毎日腕立てをすることで、たくましい男になることができる。
  2. たくましい男になることで、毎日腕立てすることができる。

cosine similarity:0.165

この2つの文は手段と結果の順序が異なるので、大きく意味が違うと認識できるが、まさにうまく計算できている。次の文のペアも考えてみる。

  1. 経済勝利を目指す。もしくは文化勝利を目指したい。
  2. 文化勝利を目指す。もしくは経済勝利を目指したい。

cosine similarity:0.764

このペアは「もしくは」という接続肢をはさんで順序が入れ替わっても意味が大きく異ならないことをチェックするためのものである。

論理的な意味の違い

最後は論理的な意味について。

  1. 女性天皇・女系天皇を認めなければ皇室は存続できない。
  2. 女性天皇・女系天皇を認めなくても皇室は存続できる。

cosine similarity:0.209

本当はこの2つのペアの類似度は0であるべきだ。もっと言うと-1が正しいのかもしれないが、0-1のラベルでファインチューニングしているので今回の場合は0が正解といえる。まぁまぁの成果と言えなくもない。これほどまでに語彙が一致しているのに、「できる」「できない」の部分に強い重みを加えることができている。では次のようなのはどうか?

  1. 女性天皇・女系天皇を認めなければ皇室は存続できない。
  2. 女性天皇・女系天皇を認めなければ皇室は存続できないということはない。

cosine similarity:0.149

2重否定で逆の意味にしている。うまくスコアリングできている。

  1. イタリアンのおすすめのお店を教えてください。
  2. イタリアン以外のおすすめのお店を教えてください。

cosine similarity:0.254

冒頭で書いたSiriが同じ意味だと捉える文のペアに近いもので試した。それなりにスコアリングできている。ちなみに以下のペアでは高いスコアがでる。

  1. イタリアンのおすすめのお店を教えてください。
  2. 中華のおすすめのお店を教えてください。

cosine similarity:0.814

単語を異なるものにしただけでは意味の類似度が下がらない、つまり、「以外」が対象を論理的な逆の意味ととらえていることを表す。

まとめ

なかなかの精度をたたき出していると思われる。実はここまで来るのに約1年ほどかかっている。

一つわかったのは、上記のような文法的な意味認識はパラメータが多いモデルでないとうまく精度が上がらないということだ。文法というのは人間にとっても高いレベルの認知タスクと思われるので、機械学習でもより多くのレイヤーが必要ということか。

もともとは、以下の言葉が書籍やYoutubeなどを介して、世間に広まっていることに対していちエンジニアとして反論を試みたかっただけだった。

Siriで「この近くのおいしいイタリア料理の店は?」と聞くのと、「この近くのおいしいイタリア料理以外の店は?」と聞くので同じ結果になるので、AIは所詮意味を理解できない。

この言葉は実際に正しいと思う。確かにコンピュータは人間と同じレベルで読解することはできないし、今回のように類似度を正確に測れたとしても、それは人間が意味を理解するのと同じ機能水準ではないと思われる。

ただ現在の技術でも、コンピュータは論理的な意味や文法による意味の違い、文脈における語彙の違いを認識するように学習させることができるということを書きたかった。もちろん他にうまく計算できない文ペアのケースもあるかと思うが、そのための学習を別途行うこともできるのだ。

これらの結果から、人間と同じ水準の読解が可能になるのはそう遠い未来ではないと思う。全くエンジニア向けではない記事だが、これで終わり。(ソースやモデルの公開は致しません。)