BERTの単語ベクトルをさらに覗いてみる

168
NO IMAGE

はじめに

前回の記事で、BERTで抽出した単語ベクトルを使って同義語、同音異義語の判別ができるかどうかということを試してみました。

具体的には、下記のテキスト^1[^3]をBERTに入力し、企業名のアマゾン(Amazon)と地名のアマゾン(Amazon)の単語ベクトル(768次元)を抽出しました。可視化するために2次元に次元削減し、その分布を調べました。

[1]GAFA(ガーファ)またはGAFAMなどと往時には呼ばれ、最近はむしろビッグテックまたはビッグテク(Big Tech)と呼ばれているのは、米国の多国籍企業でコンピューターやソフトウェアを駆使してサイバースペースを2010年代に支配するに至った企業のことで、具体的にはグーグル・アマゾン・フェイスブック・アップル(およびマイクロソフト)の4/5つの主要IT企業である。
・・・
[6]Amazon.com, Inc.(アマゾン・ドット・コム)は、アメリカ合衆国・ワシントン州シアトルに本拠を構えるECサイト、Webサービス会社である。
・・・
[9]2019年現在、Amazon.comがアメリカ国外でサイトを運営している国はイギリス、フランス、ドイツ、カナダ、日本、中国、イタリア、スペイン、ブラジル、インド、メキシコ、オーストラリア、オランダ、トルコ、アラブ首長国連邦の15か国である。
・・・
[17]アマゾン熱帯雨林(アマゾンねったいうりん、英: Amazon Rainforest、西: Selva Amazónica、葡: Floresta Amazônica)とは、南アメリカ大陸アマゾン川流域に大きく広がる、世界最大面積を誇る熱帯雨林である。
・・・

[^3]: 引用元:「GAFA」「Google」「Amazon.com」「Facebook」「アップル (企業)」「アマゾン熱帯雨林」『フリー百科事典 ウィキペディア日本語版』。2019年11月18日 (日) 6:00 UTC、URL: https://ja.wikipedia.org

下の図がその結果です(単語の後の番号は、その単語が含まれる文の行番号です。同一文内に複数回出現する単語の場合は、17-1、17-2、…のように出現順序も付与しています)。
単語ベクトルの分布
企業名のアマゾン(アマゾン[1]、アマゾン[6]、Amazon[6]、Amazon[9])と地名のアマゾン(アマゾン[17-1]、アマゾン[17-2]、アマゾン[17-3]、Amazon[17])の2つのグループに分かれることを期待していましたが、期待外れな結果でした。

この原因は、BERTの単語ベクトルには、意味だけではなく、単語の字面、前後の単語、品詞、・・・など様々な要素が含まれていることにあるのだろうと前回は考察しました。

おそらくそうなんだろうけど、少し気になることがあるので、今回はもう少し探ってみたいと思います。

各層の単語ベクトル

 前回の記事で使用したのは、12個の中間層を持つBERTのモデルでした。各階層がそれぞれ単語ベクトルを持っていますが、この記事を参考にして、出力に近い4つの層のベクトルの平均で単語ベクトルを作りました。

本当にこれでよかったのか?もっと良いベクトルの作り方があったかも?

そこで、今回は各層の単語ベクトルの分布を調べてみることにしました(単語ベクトルの抽出方法は、前回の記事をご覧下さい)。もしかしたら、どこかの層で単語の意味が表現されているかもしれません。
 
下の12個の図がその結果です。上から1層目、2層目、…、12層目となっています。
distribution_l0.png
これは1層目。縦軸の-1を境に企業名と地名が分かれていますが、アマゾンとAmazonとがもっとまとまって欲しいところです。
distribution_l1.png
これは2層目。1層目と似たような傾向ですが、地名のアマゾン、企業名のAmazonそれぞれがきれいにクラスターになってます。
distribution_l2.png
これは3層目。特に変化はありません。
distribution_l3.png
これは4層目。特に変化はありません。
distribution_l4.png
これは5層目。特に変化はありません。
distribution_l5.png
これは6層目。特に変化はありません。
distribution_l6.png
これは7層目。特に変化はありません。
distribution_l7.png
これは8層目。Amazonに企業名、地名の区別が見えなくなりました。
distribution_l8.png
これは9層目。アマゾン[6]がアマゾン[17-3]を誘い出しに来ました。
distribution_l9.png
これは10層目。
distribution_l10.png
これは11層目。
distribution_l11.png
これは12層目。もう何だかわかりません(笑)。

類似度の計算

ここまでは、単語ベクトルの分布を可視化するために、768次元の単語ベクトルを2次元に次元削減しましたが、だいぶ情報が失われてしまっているのでは?という疑問があります。

そこで、768次元の単語ベクトルのままで、各単語のベクトル間の類似度を計算してみます。類似度の計算方法はいろいろありますが、今回は、コサイン類似度、ユークリッド距離を使用します。

下に結果を示します。数字をそのまま眺めても特徴がわかりづらいので、グレースケールのマトリックスで表示します。類似度が高いほど黒に近く、低いほど白に近くなるように表現してあります。
similarity_l0.png
これは1層目。字面の同じペアでの類似度が高くなっています。ちなみに完全に意味で別れた場合には下の図の様になりますが、これとは程遠い結果です。
similarity_expected.png
similarity_l1.png
これは2層目。
similarity_l2.png
これは3層目。
similarity_l3.png
これは4層目。
similarity_l4.png
これは5層目。
similarity_l5.png
これは6層目。
similarity_l6.png
これは7層目。
similarity_l7.png
これは8層目。
similarity_l8.png
これは9層目。
similarity_l9.png
これは10層目。
similarity_l10.png
これは11層目。
similarity_l11.png
これは12層目。

結果を見ると、出力に近い層になるほど、字面の情報が弱くなっていることがわかります。BERTに入力するベクトルは、字面の情報だけを持ったOne-hotベクトルなので、入力に近いほど字面の情報が濃く表れるのは当然といえば当然です。

また、コサイン類似度よりもユークリッド距離の方が字面の情報が弱いこともわかります。これは下の図で説明ができます。

2つの単語ベクトルが、この様になっている場合には、コサイン類似度での類似度は大きくなり、ユークリッド距離での類似度は小さくなるからです。
similarity_diff_sample.png

まとめ

今回は、各層の単語ベクトルの分布を見てみましたが、入力に近い層で縦軸に意味の境界線がありそうな感じでした。前回考察した通り、768次元のベクトルのどこかの次元、もしくは次元の組み合わせで意味が表現されている可能性を予想させるような結果です。

また、単語ベクトル間の類似度を計算した結果から、類似度には単語の字面が強く反映されていることがわかりました。意味を取り扱う場合には、単語ベクトルそのまま使わないほうが良さそうです。

前回と同じ結論ですが、やはり意味を表す軸を探す難行が必要そうです。