2つの異なる言語から作られた単語ベクトル空間を線形写像する

Pocket

こんにちは、岡崎です。
この記事は TECHSCORE Advent Calendar 2017 の 19 日目の記事です。

今回紹介するのは「異なる言語から作られた2つの単語ベクトル空間をつなげる変換行列を学習する」という話です。

これは元々、機械翻訳で必要な「単語・フレーズ辞書」を自動的に生成するために Google の Tomas Mikolov によって提案されました*1

単語ベクトルをつなげる変換行列とは

機械翻訳とは端的に言うと、片方の言語の言葉を他方の言語の言葉に変換することです。
変換には2つの言語間の単語やフレーズをマッピングした辞書 (日本語「猫」:英語「cat」などの意味対応辞書) を用いますが、網羅性がある良い辞書を作るのはとても手間がかかります。*2

そこで Mikolov は自動的にこの辞書を生成することができないかと考えました。
Mikolov は様々な言語の単語ベクトル空間を可視化しているときに「異なる言語でも似たような単語の位置関係がつくられる(相対的な位置関係が似ている)こと」に気付きました。

そして、それぞれの空間はシンプルに線形写像できて(空間で言うところの回転やスケーリング)、半自動的に辞書を作ることができるのではないかと考え、その可能性をこの論文で示しました。

ここでは Mikolov は一つの大きな仮定を置いています。
それは、「異なる言語においても、それぞれのベクトル空間が似た幾何学的空間を構成している」ということです。
そしてそれ故にシンプルに線形写像できる、と結論づけています。

アルゴリズム

考え方とアルゴリズムはとてもシンプルです。

  1. それぞれの言語で単語ベクトル(CBOW/skip-gram など)を準備します。
  2. 次に、それぞれの言語をつなぐ上で「種」となる単語対応辞書を準備します(例: {dog:perro, cat:gato, .....} 論文では約 5,000 語)。
  3. それぞれの言語の種の単語ベクトルから変換行列を学習します。

論文によると、変換行列は次の損失関数を最小化するように確率的勾配降下法で学習します。

\min_W \sum_{i=1}^n || Wx_i - z_i ||^2
\{x_i , z_i \}_{i=1}^n

ここで W は学習する変換行列、x は写像元、z は写像先、n は種の単語数です。

こうやって学習された変換行列は、それぞれのベクトル空間をシンプルに線形写像するものとなります。

コード

今回は tensorflow を用いました。

まとめ

今回は「異なる言語から作られた2つの単語ベクトル空間をつなげる変換行列を学習する」という話をしました。

アルゴリズムとしてはとてもシンプルで、前述の強い仮定「異なるドメインのデータにおいて、それぞれのベクトル空間が似た幾何学的空間を構成している」がそれを可能にしています。
この論文の肝はこの仮定ですが、それが成り立ちそうなデータであればシンプルなだけに様々なことに応用できそうです。

例えば、似たような商材を扱っている EC で、双方で似たような売れ方をしている商品がわかるようになるかもしれません。
翻訳の文脈で提案された技術ですが、マーケティングにも活用できるとしたらおもしろいですね。

今、機械学習では「転移学習」や「ドメイン適応」が注目されています。
「転移学習」や「ドメイン適応」においても、異なるドメインのデータの分布の違いに対する仮定をどのように置くのか、というのは大切なポイントとなります。
この Mikolov の論文は少し昔のものなのですが、そういった観点でみると以前読んだときとはまた異なる捉え方ができて新鮮でした。

機械学習をしていると、少ないデータや偏ったデータなどを使わざるを得ない場合も多々あると思います。
既に定評のあるモデルや直接的に関係のないデータをドメイン適応して活用することも今後は増えるでしょうし、そういったところにも新たなビジネスシードが出てくるかもしれません。

参照

  1. Exploiting Similarities among Languages for Machine Translation
  2. 現在の機械翻訳ではこういった単語・フレーズ辞書はそれほど重用しない、ニューラルネットワークのモデル(エンコーダ・デコーダやその改良であるアテンション)が主流です。
  3. 実はこの変換行列を学習する機能は既に gensim に実装されています(執筆中に気づきました ^^;)。
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です