背景
機械学習の意味を知らなかったけど、ツイッターで見て興味がわいた。しかしインターネットを見てもよくわからなかった。本も高いものが多く、何を買ったらいいのかもよくわからなかった…ので知人の知人(詳しい)から、2時間で大体を教えてもらった。それを自分の理解を深めるためにもまとめようと思った。
目的
賢いbotを作る(siriみたいな/大好きなあのキャラクターにしゃべってほしい)
流れ
入力文章→(特徴抽出)→入力の特徴→(変換)→対応する特徴→(文章に変換)→出力文章
機械学習の流れの理解(自分の理解)
数値列に変換
どの部分?
入力文書→★(入力のID列)→(変換)→★(出力文書のID)→出力文書
★の部分
種類
(1)入力文書に一番近い”事前に登録しておいた文”のID列にする
(2)単語(正確には形態素)に分解して、単語毎のIDの列にする
(3)文字毎に分解して、文字のIDの列にする
(1)だと、
入力:おはよう/今日も/いい/天気/だね
データベース
1:おはよう
2:今日
3:良い
4:天気
入力したやつをid列に:1/2/3/4
ここらへんは、
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html
https://labs.goo.ne.jp/api/jp/morphological-analysis/
を使って頑張れば実現できそう
1:おはよう
2:今日
3:も
4:良い
5:天気
6:だね←キャラクターの特徴を表すことができる要素になったりする
逆に出力の辞書は、ID-返信文章にすればいい。
ここまでできたところ
変換
どの部分?
[1,2,3,4,5,6] → (変換) → [1]
この部分
一般化
[1,2,3,4,5,6] =x
[1]=y
として、よく見るわかりやすい形の
y=f(x)を目指していく。
関数
とりあえず、一番単純に
f(x) = a * x
としておいたとき
yとf(x)が同じに近いほどよいから
y-f(x) = y - ( a * x )
を最小化(=0)する。
入力と出力のペアが一つだけだと
[1]-a*[1,2,3,4,5,6]=0
で解けるけど、xとyはとてもたくさん出てくるので…
y1 - f( x1 ) + y2 - f( x2 ) + y3 - f( x3 ) … を最小化する。
f(x)について
f (x) = a * xでは簡単すぎるので、実際はもっと複雑にする
私にはわからなかったこと
・f( x )の変換1つ分がニューラルネットワークでいう単層パーセプトロンと呼ばれるやつ
→脳みその神経回路を計算機上で表現するときの、一つの単位がf( x )?
・この変換がたくさん重ねられたもの f1( f2( f3( x ) ) ) が多層パーセプトロンになってディープラーニング
次は、ディープラーニングについて理解したことを追記でまとめます。