係り受けに基づく日本語単語埋め込み

こんにちは,LAPRAS株式会社の松野です.この春に奈良先端科学技術大学院大学(NAIST)を修了し,入社しました.大学院では自然言語処理学研究室で構文解析を研究していました.

はじめに

以前,弊社アルゴリズムエ“ぬ”ジニアの鈴木が埋め込み手法についての記事を書きましたが,今回私が扱うのも埋め込み手法に関わる内容です.

今回,私は(Levy et al., 2014)の「Dependency-Based Word Embeddings」という論文を基に単語間の依存関係に基づいた日本語の単語埋め込みを作りました.単語分割および依存構造解析には株式会社リクルートの Megagon Labs が発表したNLPライブラリの GiNZA を用いました.また,この単語埋め込みについて分析を行い,いくつかの面白い性質がわかりました. 今回の実験で得られた単語埋め込みは 公開する予定です 以下の GitHub Repository に公開しました. これを自然言語処理タスクへの応用などに活かしていただけると幸いです.

GitHub Repository

単語埋め込みはニューラルネットを用いた自然言語処理の基盤技術となっています.そのため,単語埋め込みを改善したり性質を分析することで,幅広い分野に影響を与えることができます.今回作った単語埋め込みはただちにサービスに生きる性質のものではありませんが,私は日本語の自然言語処理における基礎研究にわずかながら貢献するものだと考えています.

単語埋め込みとは

まず,単語埋め込みについて説明します.

自然言語処理で単語を扱うとき,単語を表現するのに何かしらの手法が必要となります.現在,ニューラルネットに基づく自然言語処理でメジャーな手法の1つが分散表現(単語埋め込み)による表現です.

なぜ「分散表現」という呼ばれ方をしているかというと,そこには2つの由来があります.まずニューラルネットワークの分野では事象や概念といった離散的な概念を特徴量のベクトルとして表現したものを分散表現(Distributed Representation)と呼んでいました.また,それとは独立に, 自然言語処理分野では「分布仮説(Distributional Hypothesis)」という「意味的に類似する語はその周辺の文脈も似ている」という仮説があり,それに基づいて得られた語の表現を分散表現(Distributional Representation)と呼んでいました.そして自然言語処理における分布仮説に基づいてニューラルネットで分散表現を得る手法が提案され,2つの語が1つに統合されて使われるようになりました.単語を分散表現を使って表すとき,単語をベクトルとして表現して空間に埋め込むという意味で単語埋め込みとも呼びます.

CBoWとSkipgram

この分布仮説に基づき単語の分散表現を得る手法のうち有名なものに連続bag-of-wordsモデル(CBoW)とSkipgramモデルがあります(Mikolov et al., 2013).CBoWは \(i\) 番目の単語 \(w_i\) をその前後 \(t\) 語(\(w_{i-t},...,w_{i-1}, w_{i+1},...,w_{i+t}\))を用いて予測するモデルで,Skipgramは \(i\) 番目の単語を用いてその前後 \(t\) 語を予測するモデルです.ある単語の予測にその前後 \(t\) 単語ずつを用いるとき,\(t\) をウィンドウサイズと呼びます.

image_cbow_skipgram.png (210.7 kB)

(Mikolov et al., 2013より引用)

例として,次の文中の \(\mathrm{fox}\) のコンテキストを考えます.ウィンドウサイズを \(t = 2\) とすると,その前後2単語である \(\mathrm{quick, brown, jumps, over}\) がコンテキストとして使われます.このとき,Skipgramでは \(\mathrm{fox}\) という語が与えられたときにコンテキスト中の単語を予測するように,CBoWではコンテキスト中の単語を使って \(\mathrm{fox}\) という語を予測するように訓練が行われます.

image_window_size.png (52.6 kB)

単語埋め込みの性質

これらのモデルによって得られた単語埋め込みにはいくつかの面白い性質が知られています.

単語の類似度

まず,ある語に対して単語埋め込みの類似度が高い語は,意味的・統語的に似ているという性質です.
例として, \(\mathrm{dog}\) の単語埋め込みと類似度の高いTop10語のリストを示します.
単語埋め込みにはGoogleNews-vectorsを用いました.

\(\mathrm{dog}\) の複数形の \(\mathrm{dogs}\) や,犬の種類である \(\mathrm{golden\_retriever}\) など感覚的に \(\mathrm{dog}\) と意味が近そうな語が高い類似度を示しています.

単語 類似度
dogs 0.87
puppy 0.81
pit_bull 0.78
pooch 0.76
cat 0.76
golden_retriever 0.75
German_shepherd 0.75
Rottweiler 0.74
beagle 0.74
pup 0.74

アナロジーの演算

次に,単語埋め込み間の加減法によってアナロジーを表現できるという性質があります.

例えば 「\(\mathrm{man}\) にとっての \(\mathrm{woman}\) は \(\mathrm{king}\) にとっての何?」という問いを考えます.
単語 \(w\) に対応するベクトルを \(v_w\) と表すこととします.

\(v_\mathrm{woman} - v_\mathrm{man} + v_\mathrm{king}\) の結果得られるベクトルは \(v_\mathrm{queen}\) のベクトルと近くなります.
この演算によって「\(\mathrm{man}\) にとっての \(\mathrm{woman}\) は \(\mathrm{king}\) にとっての \(\mathrm{queen}\) である」という答えが得られます.

自然言語処理タスクへの応用

自然言語処理の様々なタスクをニューラルネットで学習するとき,多くの場合,タスクを解くために単語の分散表現を何かしらの形で得ます.
学習の初めに単語埋め込みをランダムに初期化して訓練の間にパラメータのアップデートを行うことで単語埋め込みを得ることもできますが,固有表現抽出や文書分類といったタスクで,上述のモデルで訓練された単語埋め込みを初期値として用いたり訓練によって得られる単語埋め込みに加えて使ったりすることでモデルの性能がよくなることが報告されています(Lample et al., 2016; Ma and Hovy, 2016; Kim 2014).

Dependency-based word embeddings の紹介

Mikolovらによって提案されたモデルでは,単語列において,ある単語を表現する単語埋め込みの訓練に前後 \(t\) 単語をコンテキストとして用いていました(Linear Bag of Words Contexts).
このコンテキストを違うものに変えることで,異なる性質を持った単語埋め込みを得ることができます.

Levy らは,Skipgramモデルを用いた単語埋め込みの訓練のためのコンテキストとして,ある語と依存関係を持つ語とその統語的関係を用いました.(Dependency-Based Contexts).

Mikolovらの手法では,「ある語の周りにどのような語が現れやすいか」によって語の表現を獲得しましたが,Levy らの手法では「ある語はどのような語と依存関係を持ちやすいか」によって語の表現を獲得します.

そして彼らは量的・質的分析により語のトピック的な類似性よりも機能的な類似性をよりよく表す単語埋め込みを得られることを示しました.

私はこのLevyらの手法に注目し日本語において係り受けに基づく単語埋め込みを作成しました.

単語間の依存関係

ある文においてある語のペアが依存関係を持つとは,それらの間に直接の文法的な主従関係(修飾・被修飾関係など)があることを言います.
主である語を親,従である語を子と呼びます.
以下に, \(\mathrm{John\,loves\,good\,meals.}\) という文の文法構造を依存関係で表した例を示します.

スクリーンショット 2019-04-23 14.03.24.png (63.7 kB)

この図では,矢印(弧と呼ぶ)によって各語ペアの直接的な統語関係を示しています.弧の根元の語が親であり,弧の先の語が子です.
ここで, \(\mathrm{good}\) と \(\mathrm{meals}\) の間には依存関係があります.この時,修飾される語(\(\mathrm{meals}\))は親であり,修飾する語(\(\mathrm{good}\))は子となります.
また,\(\mathrm{John}\) と \(\mathrm{loves}\) ,\(\mathrm{loves}\) と \(\mathrm{meals}\) の間にも依存関係があり,\(\mathrm{John}\) は \(\mathrm{loves}\) の主語,\(\mathrm{meals}\) は \(\mathrm{loves}\) の目的語です.このとき,\(\mathrm{loves}\) が親であり \(\mathrm{John}\) と \(\mathrm{meals}\) が子となります.

MikolovとLevyの手法の比較

ここでは以下の文を使ってMikolovとLevyの手法を比較します.

levy_linear_context.png (30.6 kB)

Mikolovの手法:Linear Bag of Words Contexts

これらの語を線形に並べたもののなかで,ウィンドウサイズを \(t=2\) として \(\mathrm{discovers}\) のコンテキストを作るとします.このとき,コンテキストは \(\mathrm{Australian, scientist, star, with}\) からなります.

levy_linear_context_n2.png (34.0 kB)

しかし,それでは \(\mathrm{discovers}\) の文脈として重要そうな \(\mathrm{telescope}\) がコンテキストに含まれませんし,
\(\mathrm{Australian}\) という語が含まれてしまいます.
また, \(\mathrm{scientist}\) と \(\mathrm{star}\) のコンテキストを作る場合に \(\mathrm{discovers}\) が含まれるため,これら2つの語が近い空間に埋め込まれます.

一般的に,ウィンドウサイズにはより広い文脈をとるため \(t=5\) がよく使われますが,ウィンドウサイズが小さいほどフォーカスされた表現が得られます.

Levyの手法:Dependency-Based Contexts

それに対してLevyらは単語間の依存関係をコンテキストとして用いました.
ある語のコンテキストは,その語と依存関係を持つ語とその文法的関係によって表現されます.ここでは,下の例のように, \(\mathrm{prep}\)(前置詞)関係は1つの弧に統合されます.

levy_dependency_tree.png (87.3 kB)

例えば, \(\mathrm{scientist}\) のコンテキストは以下の通りです.

scientist_context.png (18.2 kB)

ここで「/」の右の文字列は親に対する子の関係を表しています.\(\mathrm{^{-1}}\) が付いているときは,逆の関係となります.具体的には, \(\mathrm{australian/amod}\) は \(\mathrm{australian}\) が \(\mathrm{scientist}\) の子であり親に対する関係が形容詞修飾であることを示していて,\(\mathrm{discovers/nsubj^{-1}}\) は\(\mathrm{scientist}\) が \(\mathrm{discover}\) の子であり親に対する関係が主語であることを示しています.

これにより線形の距離では遠いが重要そうな語を含み,線形の距離では近いが重要そうではない単語を含まないコンテキストを作ることができます.
また,コンテキスト中の単語との文法的関係も示しているため,\(\mathrm{scientist}\)のコンテキストに含まれる \(\mathrm{discovers}\) は \(\mathrm{discovers/nsubj^{-1}}\) で \(\mathrm{star}\) のコンテキストに含まれる \(\mathrm{discovers}\) は \(\mathrm{discovers/dobj^{-1}}\) です.そのため,同じ語をコンテキストとして含む場合であっても文法的関係を考慮して違う表現を得ることができます.

これによって,語のトピック的な類似性よりも機能的な類似性をよく表す単語埋め込みを得られます.

係り受け解析器

今回の実験での係り受け解析にはNLPライブラリのGiNZAを用います(松田ら, 2019).

GiNZAはリクルートの Megagon Labs によって開発されました.NLPフレームワークには spaCy を採用しています.
spaCy は統一されたスキームでの多言語解析を目指すプロジェクトである Universal Dependencies に基づいて設計されたNLPフレームワークで,形態素解析,構文解析,固有表現抽出などの自然言語処理に関わる解析を行います.

今回私が GiNZA を使った理由は以下の通りです.

  • 今まで広く使われていた日本語の構文解析器(CaboCha,JDepPなど)が扱っていたのは文節レベルの依存構造解析であり,また文法的関係の予測は行わなかった.
  • GiNZA は単語レベルの構文解析を行い,単語間の文法的関係を予測するため,その登場によって英語その他の言語のために開発された手法を手軽に試せるようになった.

実験設定の説明

データセット

今回実験に用いたデータセットは日本語Wikipediaから得られたテキストです.
このデータセットは比較的容易に手に入りサイズも大きいので,日本語の自然言語処理タスクでよく使われています.

前処理

GiNZAによって上のデータセットのテキストを全て形態素解析・構文解析しました.
GiNZAでは文脈を用いた品詞タグ付けを行う目的で単語間の文法的関係を予測するときに改めて品詞タグを予測することがあるので(e.g., \(\mathrm{nsubj}\) ではなく \(\mathrm{{nsubj\_as\_noun}}\) となる)アンダースコアによって分割されたうちの一番左のトークンを文法的関係ラベルとして用いました.

単語埋め込み獲得に用いたモデル

単語埋め込みの訓練には Levy らが公開しているスクリプトを用いました.

分析

ここでは,Linear Bag of Words Contextsに基づくモデル(以下,LBWCモデル) と Dependency-Based Contexts (以下,DBCモデル)について,その単語埋め込みの性質を分析します.

動詞

活用形に類似した語の低次元へのプロット

図は「飲む」の活用形(飲ま:未然形,飲み:連用形,飲む:終止形・連体形,飲め :仮定形・命令形)について,それぞれのDBCモデルにおける単語埋め込みと類似度の高い10語の単語埋め込みをt-SNEにより2次元に圧縮してプロットしたものです.

興味深いことに,教師なし手法によって次元削減をしただけであるにも関わらず活用形ごとのクラスタが綺麗にできています.また,類似度の高い10語に「飲む」の別の活用形が含まれていないことがわかります.

これは,語のトピック的な類似度(辞書形が同じ)よりも機能的な類似度(活用形が同じ)が高く評価されていることを示唆しています.

nomu_dep.png (219.6 kB)

比較のためにLBWCモデルにおける単語埋め込みをプロットした図を示します.
未然形以外の活用形についてはおおよそクラスタがまとまっていますが,DBCモデルと比べると入り組んでいます.また,連用形「飲み」と類似度が高い語に名詞である「酒」が選ばれているため,トピック的な類似度をやや高く評価しているということが見て取れます.

nomu_vec.png (229.4 kB)

形容詞

LBWCモデルとDBCモデルで「楽しい」と類似度が最も高い10語を示します.
LBWCモデルによって選ばれた語は「楽しい」の別の活用形,「楽しく」,「楽しかっ」などが選ばれています.また,形容詞以外の語も含んでいます.それに対してDBCモデルは「楽しい」と同じ活用形の形容詞ばかりを選んでいます.

これは,LBWCモデルは語のトピック的な類似度を高く評価し,DBCモデルは機能的な類似度を高く評価していることを示しています.

「楽しい」との類似度が高い語(LBWC) 類似度 「楽しい」との類似度が高い語(DBC) 類似度
楽しく 0.82 怪しい 0.96
面白い 0.68 おいしい 0.96
おもしろい 0.67 可愛い 0.96
楽しかっ 0.66 甘い 0.96
うれしい 0.64 素晴らしい 0.95
美味しい 0.63 うまい 0.95
懐かしい 0.63 ひどい 0.95
のんびり 0.63 寂しい 0.95
楽しみ 0.63 すばらしい 0.95
悲しい 0.63 汚い 0.95

接辞

LBWCモデルとDBCモデルで「無」と類似度が最も高い10語を示します.
DBCモデルは接頭辞に高い類似度を与えています.また,接頭辞以外の語についても語の前について名詞を修飾することの多い語を選んでいます(e.g. 変則勤務,多重債務など)
LBWCモデルが選んだ語の中にも接頭辞が多く含まれていますが,意味的に近い形容詞である「なし」「無し」も高い類似度を示しています.

ここからDBCモデルが接頭辞としての機能的な面との類似性を高く評価しているのに対してLBWCモデルは意味的な類似性を高く評価していることがわかります.

「無」との類似度が高い語(LBWC) 類似度 「無」との類似度が高い語(DBC) 類似度
0.53 0.73
0.52 0.72
なし 0.46 0.71
無し 0.46 0.71
0.45 多重 0.71
0.45 0.71
0.44 変則 0.7
不完全 0.42 0.7
被治者 0.41 0.69
不得 0.41 0.69

終わりに

今回は単語間の依存関係に基づいた日本語の単語埋め込みを作りました.この記事では,得られた単語埋め込みについて分析を行い,トピック的な類似性よりも機能的な類似性を高く評価していることがわかりました.単語埋め込みの基盤技術としての性質上,様々なタスクに使うことが可能なので,将来的に文書分類や意味役割付与といった応用タスクで有用性を試していきたいと考えています.

参考文献

松田寛, 大村舞, 浅原正幸. 短単位品詞の用法曖昧性解決と依存関係ラベリングの同時学習, 言語処理学会 第 25 回年次大会 発表論文集, 2019.
Mikolov, T., Chen, K., Corrado, G. & Dean, J. (2013). Efficient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781, .
Levy, O. & Goldberg, Y. (2014). Dependency-Based Word Embeddings. Proceedings of the 52nd Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers) (p./pp. 302--308), June, Baltimore, Maryland: Association for Computational Linguistics.
Guillaume Lample, Miguel Ballesteros, Sandeep Subramanian, Kazuya Kawakami, and Chris Dyer. 2016. Neural architectures for named entity recognition. In HLT-NAACL.
Xuezhe Ma and Eduard Hovy. 2016. End-to-end sequence labeling via bi-directional lstm-cnns-crf. In Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers). Association for Computational Linguistics, Berlin, Germany, pages 1064–1074. http: //www.aclweb.org/anthology/P16-1101.
Y. Kim. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing, EMNLP 2014, October 25-29, 2014, Doha, Qatar, A meeting of SIGDAT, a Special Interest Group of the ACL, page 1746--1751. (2014)

"John loves good meals" の構文木の描画に用いたサイト https://explosion.ai/demos/displacy?text=John%20loves%20good%20meal.&model=en_core_web_sm&cpu=1&cph=0