Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

単語埋め込みを単語埋め込みに埋め込む -後編-

こんにちは、DSOC R&Dグループ インターン生の荒居です。 この記事は、単語埋め込みに単語埋め込みを埋め込む-前編-の続きの記事です。

前編では、ベースとなる 単語埋め込み になかった単語のベクトル表現を別の単語埋め込みから輸入することを実験的に行い定性的に評価をしました。 今回は同じ手法でベースとなる単語埋め込みを拡張し、文書分類のタスクを解かせてみることでその有効性の検証を行います。

振り返り

前回の記事では、2つの単語埋め込みの両方に含まれる単語のベクトル表現の対応関係を線形変換として表現し、その線形変換を片方の単語埋め込みにしか存在しない単語ベクトル表現にも適用することで、単語埋め込みの拡張を行いました。

f:id:koukyo1213:20190319152325p:plain
2つの単語埋め込みの積集合を用いて単語ベクトル空間の間の変換を取得する
f:id:koukyo1213:20190326110130p:plain
単語ベクトル表現を別の単語埋め込みから「輸入」する

単語埋め込みの良さを評価する

単語埋め込みの良さを評価する、というのはそれ自体が自然言語処理の研究のトピックの1つとなっていて、確立した手法は存在しないというのが現状です1

現在使われている手法は大きく内的方法(intrinsic)と外的方法(extrinsic)の2つに分けられます。
まず、内的方法についてですが、これは人間によって単語間の関係を評価する方法です。内的方法は数多くありますが、その多くは人が定義した意味の近さをその単語埋め込みが表現できているか、というものを評価します。

一方、外的方法とは単語埋め込みの良さを後流のタスクでの評価を持って測ろうというスタイルの評価法です。自然言語処理のタスクは数多くこの評価法も多くのバリエーションがあるようですが、様々なタスクで単語埋め込みのよさを測った時に必ずしも各タスクの間で単語埋め込みの良さというものが相関しないことがわかっています2

今回は外的方法の1つ、文書分類の精度を持って拡張された単語埋め込みの良さを評価します。文書分類の適用対象としては前回の記事にも登場した Livedoorニュースコーパスを用います。また、単語埋め込みとしては Wikipediaコーパスで学習したfastText求人データで学習したword2vec を用います。

単語埋め込みの拡張

単語埋め込みを拡張するにあたって、どちらの単語埋め込みをベースとして用いるかを決める必要があります。今回は一旦 fastText をベースとして用いて word2vec を単語の補充に使ってみます。前回の記事で提案した手法を用いて単語埋め込み間の変換を学習し、この変換を用いて fastText には入っていないが word2vec には入っていた単語を fastText 側に輸入します。Livedoor ニュースに含まれていて、fastText にも含まれている単語は60,243語あり、fastText には含まれていないが word2vec に含まれている単語は4,247語あります。この4,247語を補充する単語として用いることにします。

f:id:koukyo1213:20190326161624p:plain
各単語集合内での単語数

これらを補充語と呼ぶことにします。Livedoor ニュースコーパス全体中で補充語が含まれる文章は78%あり、一文あたりの補充語の平均値は3.2語でした。

これらの単語埋め込みを特徴として用いて LSTM ベースの系列モデルを学習させたところ、以下の図のようになりました3。*_expanded の方が補充語を含む群です。

f:id:koukyo1213:20190326162854p:plain
Lossの推移
f:id:koukyo1213:20190326163004p:plain
AccuracyとF1スコアの推移

このようにしてみると、やや補充語がある方が Accuracy, F1 スコアが低くなっていて Loss はやや高くなってしまっているようにも見えます。より正確に評価を行うためには複数回の試行を持ってそのばらつきも評価すべきですが、今回簡易的に 5Fold で切って検証を行なった結果、補充語がある方がやや性能が悪くなっていることが観測されました。

また、テストデータに対する評価も

Method Accuracy F1
補充語なし 0.927 0.921
補充語あり 0.924 0.917

となりました。

これはやや考えづらいことですが、補充語を足したことによってノイズが加わったようになってしまっている可能性が考えられます。しかし、文章内の単語数の平均が600語であるため、一文あたり3.2語の補充語が入っていることは誤差レベルでしか効いていなかったとも考えられます。

では逆に、ベースとして word2vec を用いて補充語を fastText から持ってくるのはどうなるでしょうか?

fastTextの単語を輸入する

同様の手法をソースとターゲットだけ変えて行いました。Livedoor ニュースに含まれている中で、word2vec に含まれている単語は42,389語あり、word2vec には含まれてはいないが fastText には含まれている単語は22,099語あります。Livedoor コーパスの中で補充語が含まれる文章は全体の99%にのぼり、一文あたりの補充語の平均値は36語でした。

これを補充語なしの場合と補充語ありの場合で比べてみた図が以下のようになります。

f:id:koukyo1213:20190326183845p:plain
Lossの推移

f:id:koukyo1213:20190326183904p:plain
精度の推移

こちらも補充語がないほうがややいい結果を出しています。残念ながら、今回の手法は文書分類問題においては有効な手法となり得ないかもしれません。

テストデータに対する評価は以下のようになりました。

Method Accuracy F1
補充語なし 0.911 0.902
補充語あり 0.907 0.901

やはり補充語がない方が少しだけいいスコアを出しています。

考察

結果としては、補充語を足した場合にはやや性能が悪化することがわかりました。これの原因としては以下のような説明が考えられます。

  • そもそも、Livedoor ニュースコーパスは単語出現の頻度情報だけを見ても簡単に分類できる。
  • word2vec のみを用いても0.90近くの性能を発揮してしまう。

ことを考えると今回用いた Livedoor コーパスでは分類にあまりOOVが影響してこないことが考えられます。このような場合において一文において数語から数十語程度単語埋め込みを足すことはどちらかと言えばノイズとなってしまい若干の性能悪化が見られたと考えることができます。

逆に言えば一語分あるかないかが大きく効くようなタスクにおいてはより明確な評価をすることができるかもしれません。短文分類などは評価指標として良い可能性があります。

また、2つの単語ベクトル空間の構造の差が、空間の間のベクトルの変換において悪い影響を与えていることも考えられます。この部分はより良い変換法を考える必要があるかもしれません。

まとめ

二回に分けて、単語埋め込みを別の単語埋め込みからベクトル表現を輸入することで拡張する手法を考え検証を行なった過程をブログに書かせていただきました。
結果の評価としては、定性的には一定量「良いベクトル表現」を得られている単語を観測することができ、初期の仮定が部分的には成り立っていることを検証することができました。また、定量的には文書分類を用いて評価を行いましたが、こちらは今回の手法を用いないほうがいいという結果を得ました。これにはいくつか原因を考えることができますが、その検証には実験を重ねる必要がありそうです。


  1. Bakarov, Amir. “A survey of word embeddings evaluation methods.” arXiv preprint arXiv:1801.09536 (2018).

  2. Schnabel et al., 2015. Schnabel, T., Labutov, I., Mimno, D. M., and Joachims, T. (2015). Evaluation methods for unsupervised word embeddings. In EMNLP, pages 298–307.

  3. 実際には 5Fold で学習を行なっていますが抜粋しています。

© Sansan, Inc.