分散表現に関して思うこと

Next: arXiv投稿時の注意点

2015/03/21 (Sat.)
    最近よく言われていることでもあるし, 先日の言語処理学会でもそうであったが, NLPで単語の分散表現 (単語ベクトル, word embedding, など) に関する発表が急増している. そこで, 一応そのような研究をしている一個人として思っていることをいろいろと書いてみる. (このページを見ている, などと言語処理学会で声をかけていただいた方々, ありがとうございます.) 分散表現は見ている分にはおもしろいことが多いが, 実際にやってみると闇 (嫌なこと, 面倒なこと, 謎なこと) が多い. それを知ったうえで, 本当にその手の研究に手を出したいかと考えることは価値があると思う. (ところどころ自分の研究の宣伝が入りますが, 察してください. また, 批判や質問も歓迎です.)

  • とりあえずword2vecを使う
  • これはよくあることで, 自分もベースラインとしてよくやるが, 注意が必要であると思っている.

    • 提案手法に対するベースラインはデフォルトのパラメータで・・・
    • これはいけないこと (自分もかつてやっていた) で, ベースラインの構築にもベストを尽くすべきであると思う. word2vecには様々なハイパーパラメータが存在する. ベクトルの次元数, 文脈窓の大きさ, サブサンプリング率, 学習率, ネガティブサンプリングの負例数, など. デフォルトパラメータでもそれなりに良い結果が出るが, 適用するタスクによってはこれらのパラメータの調整がそれなりに重要になる. そんな調整は面倒で本質的ではなく, 教師有り学習で頑張ればなんとかなる? いや, そうではないと思う. よく知られている通り, word2vecの文脈窓の大きさを変えると, 学習後に単語ベクトルが捉える情報が変わってくる. 例えばこの論文では, 窓長が小さいとPOS的な類似度が捉えられていて, 窓長が大きいとトピック的な類似度が捉えられていると言っている. そのうえで, 係り受け解析という適用先では, 窓長が小さい方が適しているという結果を出した. word/phrase similarity, word analogyなどの他のタスクではまたその傾向が変わってくるだろう. 自分の研究では, この前arXivに置いた論文で, 関係分類のタスクでは窓長が小さい方が良さそうであることが分かった. 各タスクによって捉えるべき情報が違うにも関わらず, デフォルトパラメータでの結果をベースラインとして論文を書くと, ベースラインの結果にベストを尽くさず, 提案手法の良さのみを強調しようとする意図があると思われてしまっても仕方がない. しっかり様々な設定それぞれで交差検定などを行って, その上でしっかり強いベースラインを作るくらいのことは, 近年の計算機パワーをもってすればたやすい. とはいえ, 実際には本当に面倒なので, このような面倒なことをする必要があるということを認識すると, 本当にこのような研究が楽しく見えるだろうか??

    • word2vecのベクトルを使って特定のタスクの素性を作り込むこと
    • これは適切なアプローチだろうか? word2vecには語順などの重要な情報を捨てて, 可能な限り簡単化したモデルが実装されている. そのような手法で学習された情報を, 興味のあるタスクで本当に使いたいか? 少なくとも, word2vecのベクトルを使って, 語順や構造などが大事なタスクの素性を事後的に作り込むことには少し違和感を感じている. そのような情報が大事なら, 大規模コーパスでの学習の時点で取り入れるべきではないか? つまり, ただ「使う」だけでなく, 適切に「改造する」ことが大事なのではないだろうか. NLP2015で発表された東北大の高瀬さんの研究では, 「関係のパターンを捉えたい」という目的意識のもと, word2vec的な学習に改良を施していた. また, 豊田工業大学の大野さんの研究では, 「類義語, 対義語の情報を捉えたい」という目的意識のもと, 目的関数に工夫を加えていた. 研究室の後輩の有賀くんの研究では, 「語順情報をより明示的に捉えたい」という目的意識があった. 自分の研究では, 関係分類の素性を意識してword2vec的な学習をすることで結果が改善することを示した. とにかく, ただ利用するだけでなく, 中身を知り, 目的に応じて作り直すことが大事であると思う.

  • word/phrase similarity, word analogyなどの教師無しタスクでの評価
  • wordsim353や短いフレーズの類似度を測るタスクは自分もよく利用している. このようなタスクでは, いわゆる「教師有り学習」を行わないことが多い. (先行研究と合わせるためであったり, そんなことができるほどサイズが大きくない?) そのようなタスクを利用することは, 論文を書く際には非常に便利である. とりあえず先行研究と比較できるし, 「良くなった」などと言いやすい. しかし, 本当にその結果から言えることは何か? たぶん, 「提案手法の目的関数を小さくすることによってパラメータが動いていく先が, たまたま特定のデータセットを構築したアノテータの感覚と相関があった」ということだと思う. wordsim353やword analogyタスクは, 単語ベクトルの質を測るタスクとして広く使われているが, それで良くなることは本当に期待通りのことなのか? たまたまそうなっただけなのではないか? 少なくとも, 各タスクでの「良さ」を理解して, それに繋がるような理由が手法の構築に入っていないと, 実験結果から何かを言うのは難しい気がしている. 自分のNLP2015の発表でも, 動詞句の類似度を測るタスクを利用したが, 正直, 提案手法がそのデータセットの「良さ」とたまたま相関があった, ということくらいしか言えないと思っている. その動詞句の類似度を測るタスクで良い結果が出ると, 本当に何かの役に立つのか? そのあたりを発表での宣言通り, これからは考えていきたい. そういう意味で, 教師有り学習での評価はわかりやすいと思う. 特定のタスクの教師データに適合するようにパラメータを学習していくわけであるから. そもそも, 教師無しのタスクだと, 何を目標に学習を調整したらよいかということが本当にわかりにくくて, 実験がとても大変である.

  • とりあえずコサイン距離
  • 修論審査など, いろいろな場面でたまに指摘されるが, ベクトル間の類似度はとりあえずコサイン距離でいいのか? 正直, よくわからない. 類似度そのものの扱いに関する研究としては, NAISTの椿さんが研究されているので, まだ追えていないが, 良さそうな感じなので将来利用させていただきたいと思う.

  • 結局, 分散表現は使えるのか?
  • 使えると信じたい・・・そうでないと自分の研究は全て無意味に(ry・・・( ´・ω・`)