132
108

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【まとめ】自然言語処理における単語分散表現(単語ベクトル)と文書分散表現(文書ベクトル)

Last updated at Posted at 2020-02-14

自分のメモ代わりに作ったので間違いがあるかもしれません。また、説明が雑な部分もあります。
歴史が分かるように各手法が提案、公開された年も記載しています(※CNN、RNNは理論が発表された年にしています)。

単語分散表現(単語ベクトル)

2013年にGoogleのMikolovさん達がWord2Vecを提案して一躍有名に。

  • 「王様」ー「男性」+「女性」=「お姫様」

のように単語の足し算、引き算ができるという画期的な成果を残した。

最初(2013〜2017年頃)は文脈依存なしの分散表現しかなかった。
文脈依存なしの欠点(※後述)を克服するという観点で、2017年以降文脈依存ありの手法が提案され始めた。

文脈依存なし

文脈依存あり

Word2Vec、FastText、GloVeなどの文脈依存なしの手法では、多義語の場合に問題が生じる。具体的には、「ソフトバンク」はスポーツの「ソフトバンク」とIT企業の「ソフトバンク」、「香川」は地名の「香川」とサッカー選手の「香川」という複数の意味を持つが、単語分散表現としては同じになるという問題。
そこで、登場したのがELMoやBERTのように文脈を考慮した単語分散表現。前後の単語によって、同じ単語でも分散表現が変わる。但し、都度計算が必要になるため、文脈依存なしの手法と比較して計算時間が掛かるという欠点がある。

  • ELMo(2018年)
    • Allen AI1とWashington大学が開発。
    • 日本語モデルは東北大学が公開済み。
    • アイデア自体は画期的だが、半年後にBERTが公開されたこともあり、そこまでは話題になっていない印象。
      • 英語と比較して日本語は多義語や語義の曖昧性が少ないというのも影響しているかも。
  • BERT(2018年)

文書分散表現(文書ベクトル)

単語を分散表現で表すことができれば、次は文書を分散表現で表したくなる。ここで、文書というのは複数の単語からなるテキストと定義し、文節、文、文章のことを指す。
文書分散表現として、教師ありと教師なしの2つの手法に分けられる。教師ありの場合、文書毎に何かしらのラベルを付与する必要がある。一方、教師なしの場合、そのようなラベル付与は不要で、そのため教師ありと比較して文書分散表現作成の手間やコストが低い。

教師なし

  • 単語分散表現の平均(2013年)

    • 一番シンプルな手法。文書を構成する単語の単語分散表現の平均を取るだけ。
      • 例えば、「カレーを食べる。」という文書をあった場合、「カレー」「を」「食べる」「。」の4つの単語の単語分散表現の平均を取る。
    • 単純に平均を取るだけでは全ての単語を同じ重みとして扱うが、単語毎に重みを付けた方が良い。前記の例では「を」「。」はなくても意味はほぼ通じるので、これらの単語の重みは小さくしたい。重み付けの方法は色々と提案されている。
    • 重み付け以外にも、ALL-BUT-THE-TOPのような前処理の方法が提案されている。
    • シンプルな手法にも関わらず、そこそこの精度が出る。特に、SIFは後述するSkip-Thought、RNNなどの手法よりも精度が高い2
    • 手法がシンプルで実装しやすくそこそこの精度が出るので、ビジネスでの応用事例も多い。
  • Doc2Vec(2014年)

    • Word2Vecとほぼ同じ時期に提案された手法だが、精度がいまいち。
      • エムスリーの人も精度に課題ありとMeetupで言及。
  • Skip-Thought(2015年)

    • ブレインパッドの人が書いた記事があるが、それ以外ではSkip-Thoughtをほとんど聞いたことがない。
    • SIFの論文で比較対象になっているが、精度は高くない。むしろ、単語分散表現の平均の方が高い。
  • CNN(1980年)

    • 画像の畳み込みを自然言語処理に応用。
    • 文書に含まれる単語の数が80個、単語分散表現の次元数が200の場合、80*200の行列に対して畳み込みを行うイメージ。
  • Universal Sentence Encoder(2018年)

    • Googleが提案&開発。
    • 異なる言語をまたいで同じベクトル空間モデルが共有される。例えば、日本語と英語の文書の類似度をダイレクトに計算できる。
    • Googleが開発したのでTensorFlow版しかない。PyTorch版はまだない。
  • WRD(Word Rotator's Distance)(2020年)

    • 東北大学の乾研が提案した手法。
    • 文書分散表現を計算する手法ではないが、文書間の類似性を高い精度で計算することができる。単語分散表現の平均からコサイン類似度を計算する手法よりも高精度であることが示されている。
    • WRDの解説記事実装を公開しています。

教師あり

  • SentenceBERT(2019)

    • 流行りのBERTを文書分散表現作成に適用したもの。
    • オージス総研の人が日本語で実験した記事を公開している。
  • SCDV (Sparse Composite Document Vectors)(2017年)

    • マイクロソフトとインド工科大学が提案。
    • 基本的には単語分散表現の平均と同じだが、単語分散表現を文書毎のラベル(トピック)に基づいて調整するのがポイント。
  • RNN(1986年)

    • RNNで分類問題を解く。その上で、Encoderの隠れ層を文書分散表現とする。最後の単語の隠れ層だけを使っても良いし、それぞれの単語の隠れ層の平均を使っても良い。方法は幾つも考えられる。

参考文献

  1. Microsoftの共同創業者であるPaul Allenが立ち上げた研究機関

  2. SIFの論文では著者達はそう主張しているが、ドメインやデータが違うと結果は異なる可能性はある。

132
108
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
132
108

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?