乏しいデータで学習した割には悪くない感じになってきた。右上の地名エリアが類似度が出てないのは、学習データに無いのでそれはそうといった結果。
Wikipediaのデータで学習させてみたい。
遺伝的プログラミングで生成したプログラムの入力データとして、単語ベクトルを遺伝的アルゴリズムで学習させていた。単語ベクトルの変化量を乱数で決めているつもりだったが、定数の固定値になってしまっていた。つまり常に単語ベクトルの値が線形増加/線形減少していたのだった。そりゃ学習しませんぜ旦那。
それはそれとして、このバグを修正してもいまだ学習しないのである。
帰ったら遺伝的プログラミングのチューニングをする。残念ながら望む学習結果には未だ至っていない。むしろ学習させるほどに望む結果から離れてしまう。何かが間違っているのは間違いない。
データ量が足りてないのだろうか?いや、むしろ少データで学習のテストをすべきだろう。段階的にデータの規模を大きくしたい。
学習時の評価関数を「各文章の類似度のユークリッド距離」から「全対象文章の類似度のコサイン類似度」に切り替えてみた。
これでムラ感(類似度のヒートマップの模様)が学習されるはずだ。
評価関数が「良い」と判断しても、類似度のヒートマップの模様として現れてこないのが気になっていた。
基底となる単語ベクトルの学習に特化させてみたい
文字毎にトークンにしていたのを、単語ごとのトークンに切り替える。
さらに単語ベクトルの遺伝的アルゴリズムによる学習も行う。
本当に学習しているかを検証するために、20分かけて以下のパラメータで、1000世代の間、検証用データで学習させた。答えを教えている形になる。
わずかに輪郭が見えてきている。
ただ、これ以上学習させるのは難しそうだ。
パラメーターを以下のように変更して再学習する。突然変異率が0.001倍近辺で下げ止まっており、突然変異率の変動量が制限となっている。