言語処理100本ノック 2015の挑戦記録です。環境はUbuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧はこちらからどうぞ。
第9章: ベクトル空間法 (I)
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を用いよ.
###86. 単語ベクトルの表示
85で得た単語の意味ベクトルを読み込み,"United States"のベクトルを表示せよ.ただし,"United States"は内部的には"United_States"と表現されていることに注意せよ.
####出来上がったコード:
# 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']])
####実行結果:
[ 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で300次元に圧縮したため、「United_States」に対応する300個の数字が結果の単語ベクトルです。
なお、次元圧縮の際に要素を再構成しているため、要素と文脈語はもう対応していません。情報が減らないように再構成された300の要素に対する数字が並んでいるだけになります。
87本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。
実行結果には、100本ノックで用いるコーパス・データで配布されているデータの一部が含まれます。この第9章で用いているデータのライセンスはクリエイティブ・コモンズ 表示-継承 3.0 非移植(日本語訳)です。