素人の言語処理100本ノック:86


[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)の挑戦記録です。環境はUbuntu 16.04 LTS ＋ Python 3.5.2 \:\: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧は[こちら](http://qiita.com/segavvy/items/fb50ba8097d59475f760)からどうぞ。

## 第9章: ベクトル空間法 (I)
>[enwiki-20150112-400-r10-105752.txt.bz2](http://www.cl.ecei.tohoku.ac.jp/nlp100/data/enwiki-20150112-400-r10-105752.txt.bz2)は，2015年1月12日時点の英語のWikipedia記事のうち，約400語以上で構成される記事の中から，ランダムに1/10サンプリングした105,752記事のテキストをbzip2形式で圧縮したものである．このテキストをコーパスとして，単語の意味を表すベクトル（分散表現）を学習したい．第9章の前半では，コーパスから作成した単語文脈共起行列に主成分分析を適用し，単語ベクトルを学習する過程を，いくつかの処理に分けて実装する．第9章の後半では，学習で得られた単語ベクトル（300次元）を用い，単語の類似度計算やアナロジー（類推）を行う．
>
>なお，問題83を素直に実装すると，大量（約7GB）の主記憶が必要になる． メモリが不足する場合は，処理を工夫するか，1/100サンプリングのコーパス[enwiki-20150112-400-r100-10576.txt.bz2](http://www.cl.ecei.tohoku.ac.jp/nlp100/data/enwiki-20150112-400-r100-10576.txt.bz2)を用いよ．

### 86. 単語ベクトルの表示
>85で得た単語の意味ベクトルを読み込み，"United States"のベクトルを表示せよ．ただし，"United States"は内部的には"United_States"と表現されていることに注意せよ．

#### 出来上がったコード：

```python:main.py
# coding: utf-8
import pickle
from collections import OrderedDict
from scipy import io
import numpy as np

fname_dict_index_t = 'dict_index_t'
fname_matrix_x300 = 'matrix_x300'

# 辞書読み込み
with open(fname_dict_index_t, 'rb') as data_file:
	dict_index_t = pickle.load(data_file)

# 行列読み込み
matrix_x300 = io.loadmat(fname_matrix_x300)['matrix_x300']

# 'United States'の単語ベクトル表示
print(matrix_x300[dict_index_t['United_States']])
```

#### 実行結果：
```console:実行結果
[  3.60083662e+00  -7.88128084e-01   2.61994036e-01   6.54614795e+00
   2.77978401e+00  -1.34643069e+00  -4.14679788e-01  -2.36571397e+00
   6.48454026e-01  -1.81798692e-01   8.09115337e-01   1.87915076e+00
   8.89790386e-01   2.91057396e+00  -2.05724474e+00   3.95015466e+00
  -1.16785393e+00  -2.29594086e+00   2.87483314e-01  -3.22295491e-01
   5.27833027e-02   1.32591124e+00   7.19768653e-02  -2.79842130e-01
  -9.13285892e-03  -3.48882763e+00   2.80629048e+00   1.81757020e+00
   1.01202749e+00   4.60392799e+00   4.35931867e-01  -9.47200476e-02
   1.41464997e+00  -1.20815237e+00   1.59811576e+00  -7.90093385e-01
   1.56584573e+00  -5.84883096e-01  -2.98866212e-01  -2.40969175e-01
   2.01912319e+00   1.25522702e+00  -7.00878790e-01   2.54301034e+00
   1.29071807e+00   4.99864524e-01  -2.08366007e-01  -3.34177888e-01
   2.82855195e-01  -2.03289817e+00  -1.83255892e-02   6.94784136e-01
  -1.68611375e-01  -6.54874637e-01   1.68042850e+00   1.89579749e-01
  -4.58780381e-01  -1.39461125e+00   3.96468153e-02   1.07982308e+00
  -2.01647855e+00  -6.31583022e-01   1.17090230e+00  -5.17860032e-01
  -1.54354587e-01  -1.90240747e+00   4.24975361e-01   8.51292185e-01
  -6.75733687e-01  -1.95373302e+00   2.86401504e+00   7.83145997e-01
   3.60769615e-01   2.18517822e-01   9.09328784e-01  -2.31164499e+00
  -5.29962261e-02   4.64315874e-01  -1.14818717e+00   4.37807725e-01
  -8.72936322e-01   2.75689461e-01  -4.98886439e-01  -1.39319595e-01
   1.70818184e+00  -1.42530608e+00   6.12346577e-01  -1.53452675e+00
  -5.78771041e-01   5.74044574e-01   7.92225223e-01  -6.06557682e-01
   4.20942844e-01  -6.44757207e-01   3.01797352e-02  -6.70597324e-01
  -9.94382162e-01  -4.99397126e-01   5.90489124e-01  -3.31522663e-01
  -1.49982021e+00   1.04485370e+00   1.30888498e+00  -7.15508080e-01
   1.19164194e+00   5.10634752e-01  -6.83826569e-01  -1.70204338e+00
  -3.06551527e-01  -7.96233183e-02  -8.78035415e-01   4.85365765e-01
  -1.10059988e-01   1.08476384e+00   3.70272417e-01  -1.66487297e-02
   2.53257364e+00   6.92406581e-01  -1.75201566e+00  -8.92891751e-02
  -1.17317031e+00  -8.04520667e-01  -3.72208639e-01  -5.87968726e-01
   6.33897294e-02  -4.25470101e-03  -1.07647720e-02  -1.43349655e+00
   1.17827771e+00  -3.15443937e-01   1.12394158e+00  -1.26831340e+00
  -9.69257805e-01   2.26313588e-01   2.13254757e-01  -1.03473199e+00
  -9.07201782e-01  -9.96541296e-01  -1.09652409e+00  -1.95598158e+00
  -1.44103220e+00  -6.48140969e-02  -9.82980349e-01  -8.45786568e-02
   5.25832288e-01  -3.41535417e-01   1.67332240e+00   1.04440244e-01
  -4.89830507e-01   1.47568054e-01   1.70129190e+00   1.14422426e+00
   8.26973739e-01   7.07649835e-01   3.63384617e-01  -1.40773247e+00
  -4.84105306e-01  -1.59593171e+00   1.01640270e+00   5.11171720e-01
  -1.81608472e-01   2.09511452e-02  -3.97071523e-01  -3.68544617e-01
  -3.03775580e-01  -7.36060412e-03   3.47125090e-01  -8.10847522e-01
  -5.94050339e-02   1.04952201e+00  -1.81959226e-01   6.39576649e-01
  -2.13652769e+00   2.21193903e-01   2.22833706e+00   3.15404529e-01
   2.94974306e-02   1.81699352e+00  -2.52513345e-01   1.21497867e+00
   1.93127372e+00  -1.40049583e+00  -3.92976140e-01   2.01746604e+00
   3.48323962e-01  -1.27851426e+00  -8.37106664e-01  -6.77627274e-01
  -7.55016169e-01  -7.26088763e-01   8.90254556e-01   2.05618152e+00
   4.35043576e-01  -3.47253538e-01   2.45200710e+00   9.80268307e-01
  -2.27851060e-01   9.84062157e-01  -4.81094077e-02  -2.76938831e-02
  -1.73872055e+00   6.27352186e-01   3.69610149e-01  -2.39375141e+00
   1.20634311e+00   9.16879237e-03   1.88932943e+00  -2.12446506e-01
  -3.73810763e-01  -4.52664744e-01   1.33658447e+00   1.63348846e+00
  -4.04242171e-01   1.24396257e+00   1.13995636e-01   1.56077956e-01
   4.29892571e-01  -2.39289326e-01   7.55437299e-01  -1.35220485e-01
   4.13112184e-01   1.69808593e+00   8.45655139e-01  -3.05053132e-01
   4.26313358e-01   2.01935897e-01  -8.95808938e-02  -1.19706029e-01
   8.58620660e-01   9.59342393e-02   6.90601959e-01  -9.52093790e-02
   2.40653407e+00   1.26924728e+00   1.12005766e+00  -6.04110426e-01
   6.64593790e-01   1.13045660e+00   3.73053754e-01   2.23601520e-01
  -1.83664534e-01  -1.34208051e-01   4.52265923e-01  -1.95617572e-02
  -1.09954830e+00   9.14058618e-01   4.16648849e-01  -1.73232268e-01
   5.54256279e-01   6.43481094e-01  -6.14527995e-01  -9.87756033e-01
   3.97245967e-01  -6.42933978e-02   1.14324979e+00  -5.75599318e-01
   2.42005373e-01  -6.40143947e-01   2.95192002e-01  -7.13038483e-01
   1.85032144e-02  -3.71692793e-01   6.69838053e-01   9.63435135e-01
  -7.09443979e-01   1.12105308e-01   8.40726109e-01   5.08524168e-01
   1.75758555e-01   1.44432107e-01  -2.55235895e-01  -4.54393729e-01
  -5.18120965e-01   4.48156373e-01  -1.44818035e+00   1.51757130e-01
   1.40229798e-01  -8.22383805e-01   5.12547787e-01  -5.62853223e-01
   7.14130048e-01   5.20936783e-01   7.34849473e-01   8.70674020e-01
   4.74195393e-01   7.28794927e-02  -1.08662671e-01  -1.28023393e+00
  -1.21562850e-01  -7.30747051e-02  -6.98371195e-01   9.99403058e-01
   2.21572245e-01   5.06539721e-01  -4.67786005e-02  -2.60209096e-01
   3.52071509e-01  -7.90130862e-01  -4.07834390e-01   2.54070128e-01]
```

### ベクトルの表示
[問題85](http://qiita.com/segavvy/items/f1a7f3200c3b771e8568)で300次元に圧縮したため、「United_States」に対応する300個の数字が結果の単語ベクトルです。

なお、次元圧縮の際に要素を再構成しているため、要素と文脈語はもう対応していません。情報が減らないように再構成された300の要素に対する数字が並んでいるだけになります。

　
87本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。
<hr>

*実行結果には、[100本ノックで用いるコーパス・データ](http://www.cl.ecei.tohoku.ac.jp/nlp100/#data)で配布されているデータの一部が含まれます。この第9章で用いているデータのライセンスは[クリエイティブ・コモンズ 表示-継承 3.0 非移植](https://creativecommons.org/licenses/by-sa/3.0/legalcode)（[日本語訳](https://creativecommons.org/licenses/by-sa/3.0/deed.ja)）です。*