Word2Vec

Word2Vecの使い方
-> テキストや発話を大規模に集めてデータベース化した言語資料の活用
-> それまでは、表現方法としてone-hotベクトルや単語文脈行列をSVDで次元圧縮したベクトルなどが使われていた
-> one-hotベクトルは単語の数だけ次元を持つ方法
-> 分散表現では単語の意味をベクトル化する

word2vec

It was recently shown that the word vectors capture many linguistic regularities, for example vector operations vector('Paris') - vector('France') + vector('Italy') results in a vector that is very close to vector('Rome'), and vector('king') - vector('man') + vector('woman') is close to vector('queen') 

Word Cosine distance と記載があるので、cosineの距離でしょう。
word2vecでは、単語が文中で交換可能かに注目している

Continuous Bag-of-Words
前後の単語から単語を推測する

Skip-gram
単語から周辺単語を推測する

なるほどー、アルゴリズムの仕組みとしては、”前後の関係性”で単語をベクトル化しているのか。。
それを膨大な量でやるのね。

ただし、日本語の場合は、形態素分析をしないといけない。あれ、mecabと組み合わせるのかな。

線形代数、ベクトル

データを複数個収めることができるように、要素を1列に並べたものをベクトルと呼ぶ

単語をベクトル化するWord2Vecという概念がある
Word2Vecは、単語一つ一つを1列に並べたベクトルに変換
ベクトルに変換すると、足し算、引き算を行うことができる

同じような意味の単語群から、同じような周辺語を予測している??

ベクトルは有向線分で視覚化できる。スカラー倍も考えうる。
ベクトルの足し算、引き算は矢印で考える

Fast Artificial Neural Network Libraryを使ってみる

まず、libraryを入れます。

[vagrant@localhost fann]$ sudo yum install fann-devel
あれ、全然うまくいってない。。

$num_input = 2;
$num_output = 1;
$num_layers = 3;
$num_neurons_hidden = 3;
$desired_error = 0.001;
$max_epochs = 500000;
$epochs_between_reports = 1000;

$ann = fann_create_standard($num_layers, $num_input, $num_neurons_hidden, $num_output);

if ($ann) {
    fann_set_activation_function_hidden($ann, FANN_SIGMOID_SYMMETRIC);
    fann_set_activation_function_output($ann, FANN_SIGMOID_SYMMETRIC);

    $filename = dirname(__FILE__) . "/xor.data";
    if (fann_train_on_file($ann, $filename, $max_epochs, $epochs_between_reports, $desired_error))
        fann_save($ann, dirname(__FILE__) . "/xor_float.net");

    fann_destroy($ann);
}

ぬ、やっぱり。
[Fri Aug 30 08:52:09 2019] 192.168.33.1:60110 [500]: / – Call to undefined function fann_create_standard() in /home/vagrant/local/fann/index.php on line 10

ぐ。。