分散表現(単語埋め込み)

特集記事「単語の意味をコンピュータに教える」(岡崎直観)、「自然言語の意味に対する2つのアプローチ—記号表現と分散表現」(宮尾祐介)、およびコラム「Python で word2vec」(中谷秀洋)で紹介した 分散表現(単語埋め込み) についてです。

分散表現(あるいは単語埋め込み)とは、単語を高次元の実数ベクトルで表現する技術です。

近い意味の単語を近いベクトルに対応させるのが分散表現の基本ですが、最近はベクトルの足し算が意味の足し算に対応する「加法構成性」などを中心に、理論や応用の研究が進んでいます。

word2vec

Skip-gram(特集記事参照)を実装した、単語の分散表現を生成するツールです。大きなコーパスからの学習と加法構成性を特徴としています。

GloVe

同じく単語の分散表現を生成するツールです。word2vec より高い性能をうたっています。

gensim

Python 用のトピックモデルライブラリです。word2vec の実装も含んでいます。

岡崎「単語の分散表現と構成性の計算モデルの発展」

特集記事「単語の意味をコンピュータに教える」を執筆された岡崎氏による分散表現に関する資料です。

単語分布図

単語の分散表現は一般に 200次元などの高い次元のベクトルで表されます。そのような高い次元のベクトルをそのまま図にすることはできませんが、ベクトルの近さなどといった情報を保ったまま低次元に縮約する手法(次元削減)を使って2次元に圧縮することで、分散表現による単語の散らばり具合を可視化できるようになります。

こちらでは、そうして作られた英語および日本語の単語の分布図を掲載しています。拡大表示をしたり大きな紙に出力すると、近い意味の単語が近くに配置されている様子を観察することができます。分散表現のツールを使えば、辞書を一切使わず、テキストを与えるだけでこうした図が得られます。

英語版 Wikipedia の本文から GloVe によって学習された 200 次元の単語ベクトルを t-SNE という手法で可視化した図です。頻度上位2000語を抽出しています(制作:持橋大地)。

この図は岩波データサイエンス vol.2 の表紙裏を飾っています。

拡大するには図右上の虫眼鏡をクリックして、スライダーで拡大率を調整してください。

日本語版 Wikipedia の本文から word2vec によって学習された 200 次元の単語ベクトルを t-SNE で可視化した図です。

単語区切りには MeCab-ipadic-NEologd を用い、頻度上位 5000語を選んでいます(制作:中谷秀洋)。

拡大するには図をクリックして、右上の虫眼鏡アイコンをクリックしてから、スライダーで拡大率を調整してください。