pandazx's blog

データ分析など雑多な技術ブログ

Word2vecの仕組みの勉強

Word2vecについて個人メモ(私の理解)。詳しく知りたい人は参考文献を参照して欲しい。参考文献先には元論文のリンクもある。

Word2vecは二層のニューラルネットワーク(NN)で構成される。学習して計算された重み付けの値により、学習データに含まれる情報を数値ベクトルで表現できる。

NNの隠れ層、出力層のノード数は単語数x200次元程度の次元数。ただし、出力層はコンテキストサイズごとに同じノード数のものを用意する。

コンテキストサイズとは、対象となる単語の前後、何単語まで、その出現位置の関係を学習するか、というもの。サイズが1なら、一つ前に現れる単語、一つ先に現れる単語を学習する。

これは、近い場所に現れる単語は意味的に近い、という考え方を前提としている。

各単語が200次元で表現されるが、これを分散的意味表現と呼ぶ。共起頻度を学習する場合は単語数x単語数の次元数が必要となり、通常、こちらの方が圧倒的に次元数が大きい。こちらは分布的意味表現と呼ばれる。

何らかの単語をNNに入力すると、前後に現れる単語の確率ランキングが得られる。コンテキストサイズが2なら、2つ先と前の確率ランキングも得られる。

Word2vecの使い方でよく説明されるものに、フランス-パリ+東京で、日本が得られる、という計算例がある。

私の理解では、これはフランスから、パリを引くと、パリに意味的に近い単語が除かれる(おそらく、該当単語の値が引かれるので、フランスの確率ランキングにおいて、パリの確率ランキングの上位の単語が下位になる)。次に、東京を足すので、東京に意味的に近い単語が上位に来る。フランスは国であるので、元々、日本とは意味的に近く、パリが引かれて、東京が足されるので、東京に最も意味的に近い国、つまり、日本が確率ランキングの最上位に来るという流れだと思われる(あまり、自信はない)

NNを使うからというのもあるが、なぜ、この方法で意味的に近い単語の表現が可能になるかは、理論的にはわかってないらしい。

参考文献
http://business.nikkeibp.co.jp/article/bigdata/20141110/273649/


Ubuntu server 14.04で日本語入力できない

Mozcが出てこない。

以下のコマンドで言語関連ライブラリをインストール

sudo apt-get install fcitx fcitx-mozc fcitx-libs-qt5 fcitx-frontend-qt5
sudo apt-get install language-pack-ja

右上のEnを右クリック→Text Entry Settingsで、 +アイコンから、Japaneseを追加。これで、日本語キーボード配列で入力が可能になるはず。 まだ、日本語文字が打てるわけではない。

他サイトを見ていると、ここにMozcが表示されるようなのだが、されない。

右上の歯車アイコン→System Settings→Language Supportで Keyboard input method として、 fcitx を設定。 一度、ログアウトしてログイン。

これで右上にキーボードアイコンが表示されたはず。

キーボードアイコンをクリック→Configure Current Input Methodで、 +アイコンから Mozcを追加(ここの選択リストの表示領域が異常に小さい)

Mozcを一番上に持っていく(プラスアイコンの右の方にあるボタンで移動できる)

これで、半角/全角キーでいつも通りに切り替えられるようになる。

補足

キーボード配列を日本語と英語に切り替えるには、Super+Space

Superとは、ウィンドウズキーのこと

NVIDIAドライバ環境でUbuntu serverにGUIインストール

大いにハマった。

以下の順に行うことで、うまくいった。

  1. Ubuntuインストール
  2. taskselでデスクトップ環境をインストール
  3. NVIDIAドライバをインストール

最初に3と2を逆にやったためか、Xorgの設定がうまく行われず、startxすると画面が真っ黒になり、どうにもならなかった。 NVIDIAドライバはインストール時にXorgの設定を自動的にやってくれるので、それに任せるのが一番。

以下のサイトを頼りに設定したが、私の環境ではうまくいかなかった。

startxすると画面真っ黒から、タイムアウトして戻ってきてしまう。 ログを見ると、GLXモジュールがロードできない現象だったが、解決できなかった。

EC2のGPUインスタンスにTensorflowインストール

追記

NVIDIA AMIではうまく行かなかったので、まっさらなUbuntuを元に以下を参考にコマンドをコピペすれば出来る。

AWSインスタンス上にTensorFlow:GPGPU環境を作成する | テクノスデータサイエンス・マーケティング株式会社

一部、違うのは、ビルドツールBazelのバージョンは最新をインストールすること。じゃないと、エラーになる。 (ブログでは0.1.1だが、最新は0.2.1) あとは、cuDNNのインストールは上記ブログよりは下記のようなネットワークインストールの方が個人的には好き。

TensorFlow (GPU版) を Ubuntu にインストールしてみた - Qiita

以下はうまくいかなかった時の作業ログ。

前提

TensorFlowのパッケージビルド

git clone --recurse-submodules https://github.com/tensorflow/tensorflow
TF_UNOFFICIAL_SETTING=1 ./configure
Please specify the location of python. [Default is /usr/bin/python]: 
Do you wish to build TensorFlow with GPU support? [y/N] y
GPU support will be enabled for TensorFlow
Please specify which gcc nvcc should use as the host compiler. [Default is /usr/bin/gcc]: 
Please specify the Cuda SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: 
Please specify the location where CUDA  toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: /opt/nvidia/cuda 
Please specify the Cudnn version you want to use. [Leave empty to use system default]: 2
Please specify the location where cuDNN 2 library is installed. Refer to README.md for more details. [Default is /opt/nvidia/cuda]: 
Invalid path to cuDNN 2 toolkit. Neither of the following two files can be found:
/opt/nvidia/cuda/lib64/libcudnn.so.2
/opt/nvidia/cuda/libcudnn.so.2
.2
Please specify the Cudnn version you want to use. [Leave empty to use system default]: 6.5
Please specify the location where cuDNN 6.5 library is installed. Refer to README.md for more details. [Default is /opt/nvidia/cuda]: 
Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size.
[Default is: "3.5,5.2"]: 3.0
Setting up Cuda include
Setting up Cuda lib64
Setting up Cuda bin
Setting up Cuda nvvm
Configuration finished

ビルドエラー1

bazel build -c opt --config=cuda //tensorflow/cc:tutorials_example_trainer
Extracting Bazel installation...
........
INFO: Found 1 target...
ERROR: /home/ec2-user/.cache/bazel/_bazel_ec2-user/0ff5a3f6434c30269b5495d73aade5d5/external/re2/BUILD:9:1: C++ compilation of rule '@re2//:re2' failed: crosstool_wrapper_driver_is_not_gcc failed: error executing command third_party/gpus/crosstool/clang/bin/crosstool_wrapper_driver_is_not_gcc -U_FORTIFY_SOURCE '-D_FORTIFY_SOURCE=1' -fstack-protector -fPIE -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object ... (remaining 36 argument(s) skipped): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 127.
/usr/bin/env: python2: No such file or directory
Target //tensorflow/cc:tutorials_example_trainer failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 15.320s, Critical Path: 3.85s

python2を使おうとしてエラーになるので、python27のシンボリックリンクを作成

sudo ln /usr/bin/python27 -s /usr/bin/python2

ビルドエラー2

ERROR: /home/ec2-user/tensorflow/tensorflow/core/kernels/BUILD:1121:1: output 'tensorflow/core/kernels/_objs/depth_space_ops_gpu/tensorflow/core/kernels/depthtospace_op_gpu.cu.o' was not created.
ERROR: /home/ec2-user/tensorflow/tensorflow/core/kernels/BUILD:1121:1: not all outputs were created.
Target //tensorflow/cc:tutorials_example_trainer failed to build

これの理由が不明。Bazelのバージョン問題? 追記では、最新の0.2.1でうまくいったので、よくわからない。

ImportError: No module named cv2

前提

PFN発のディープラーニングフレームワークchainerで画像分類をするよ(chainerでニューラルネット1) - 人工言語処理入門

このブログを元にChainerのimagenetを試そうとしたが、上記ブログ主作成のcrop.py実行のところで、ハマった。

crop.py を実行するとエラーが出る

ImportError: No module named cv2

pip install cv2 でインストールしても治らない。

cv2は/usr/local/lib/python2.7/site-packages にインストールされているし、

import sys
print sys.path

をして、パスが通っているのも確認した。

Installing OpenCV for Python on Ubuntu, getting ImportError: No module named cv2.cv - Stack Overflow

I think you don't have the python-opencv package.

これを見て、OpenCVがないとダメなの?ということで、他の記事も発見

l'amour avec la technologie: How to install opencv(cv2) with python bindings in Linux - Ubuntu/Fedora

ということで、以下を参考にOpenCV3.1.0をインストールした。

OpenCV2.4.5をamazon linuxにインストールする

インストールしても、まだパスが通ってないので、.bashrcに以下を追加。

export PYTHONPATH=/usr/local/lib/python2.7/dist-packages:$PYTHONPATH

source .bashrcをしてから動作確認。エラーが出なければOK

python
>>> import cv2

補足

crop.pyを実行する際に注意が必要なのが、出力先のimagesディレクトリを作ってから実行しないと 変換ファイルが出力されないので注意(エラーが出なかったので、最初、わからなかった)

Bazelインストール

前提

現在のBazelインストールにはJDK8が必要。以下ではver 0.2.1をインストールする。

公式ドキュメント Installing Bazel - Bazel

以下、作業ログ

# JDK8インストール
sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
# JDK7があったので、JDK8に切り替える
sudo alternatives --config java
java -version
javac -version

sudo yum install swig

# Bazelソースコード取得
git clone https://github.com/bazelbuild/bazel.git
cd bazel
# 最新のタグを確認して切り替え(不要かも)
git tag
git checkout tags/0.2.1
# Bazel インストール
./compile.sh
sudo cp output/bazel /usr/bin/

JAVA_HOMEを指定しないとエラーが出る場合がある(私の場合は出た)

JAVA_HOME (/usr/lib/jvm/jre) is not a path to a working JDK.

その場合は指定してインストール(今後のためにも、.bashrcで設定した方がいいかも)

JAVA_HOME=/usr/lib/jvm/java ./compile.sh 

参考サイト

pillowインストールでエラー

前提

Amazon Linux で、pip install pillowしたらエラー発生

ValueError: jpeg is required unless explicitly disabled using --disable-jpeg, aborting

libjpegをインストール。

sudo yum install libjpeg-devel

もう一度、やると、zlibエラー

ValueError: zlib is required unless explicitly disabled using --disable-zlib, aborting

zlibをインストール

sudo yum install zlib-devel

これで解決。