##ワイド&ディープラーニング
Datumixの推薦エンジンのユニークなところは顧客一人一人のニーズに合う推薦システムを作れるところです。
記事のデータがワイド&ディープラーニングで処理される前に、Word2vec, CNN, とLSTMというメソッドを通って一つのデータの代表的な多次元ベクトルに変換されます。
入力データは記事データとユーザーデータに区別されます。この両方のデータの部分がワイド&ディープラーニングのワイド側とディープ側に混ぜられます。ワイドラーニングは情報を記憶することに適していて、過去のデータからとても特定な推薦を返すことができます。ディープラーニングは情報をまとめて、広い範囲の情報を似ている情報として認めることができます。結果的に、過去のデータからバラエティーのある多数の推薦を返すことができます(しかし、時々間違った推薦をすることがあります)。ワイド&ディープラーニングは文字通りワイドラーニングとディープラーニングの長所を取り入れているから、より正確な推薦を返すことが出来ます。
ワイド&ディープラーニングの最終結果は1か0で表すことが出来ます。ワイド側とディープ側の結果が同じなら、1が出力されます。0はワイド側とディープ側の結果が異なっていたら出力されます。記事全体のデータが処理され1か0摘出されたあとにディープ側が次回からもっと正確な推薦を出せるように新しい結果を元にシステム自身を再構築します。
##Word2vec
Word2vecは言葉のセット(例えば商品の説明文)を取り込み、各単語のために多次元ベクトルを作ります。各ベクターは多次元グラフに記載されます。グラフ上のベクターの位置は過去のプログラムの研修期間に入力されたデータによって決められます。二つの単語ベクトルの間の距離が縮まるほど二つの単語は似ています。Word2vecの一番特徴的なところは似た関係を持つ単語のセットを簡単なベクター足し算と引き算で発見できる能力です。例えば、v(King)-v(Man)+v(Woman)の結果は v(Queen)です。一般的な単語の関係をシステムが理解できれば、他の単語で同じ関係を持つ言葉を探すことができます。
Word2vecは実践される前に研修期間を通る必要があります。研修期間の間はアルゴリズムはそのアルゴリズムの仕事と関連を持つ膨大な単語のデータベースを入力されます。例えば、美容サイトの推薦エンジンで使われるWord2vecは百万単位もしくは億単位を入力します。研修時によくロジスティック回帰という重要な言葉に高確率、無駄な言葉に低確率な推薦を課すテクニックが使われます。
Word2vecには Continuous Bag of Words (CBOW) と Skip-gramの二種類があります。CBOWは周りのコンテキスト単語から作られたベクトルを使ってターゲット単語を予測します。予測したい言葉の周りのある特定の範囲にある単語を取り、過去データを元に予測した単語を出力します。Skip-gramは反して、ターゲット単語からコンテキスト単語を予測します。Datumixの場合は膨大なデータを処理することに適しているSkip-gramモデルを使います。
##CNN
Convolutional Neural Network (CNN)は普段写真解析のたみに使われています。CNNは写真を数種類の層に通して一番特徴的な部分を摘出する技術です。写真解析の時にCNNはピクセルをひとつひとつベクターとして取り扱います。CNNはどんな情報でもベクターで表現できれば処理できます。つまり、CNNはWord2vecからのベクターを処理することができるのです!
CNNは主に畳み込み層、プール層と、完全接続層の三種類の層からでできています(実際のCNNでは各層が多数はいっています)。CNNは入力されたベクターを行列として扱い、各ベクターにWord2vecの結果を元に値を与えます。テキストデータは次に畳み込み層という重要な特徴をとりだすフィルタの役割を務める行列を通り抜けます。このフィルタは入力データより小さいため、徐々に入力データの行列のの部分を少し覆いながら進みます。Strideというデベロッパーが決めた値を元に動きます(1は1ピクセルごと動きます)。フィルタとフィルタによって覆われた入力データはドット積を課され、一つの数字を出力します。この数字は覆われた入力データの部分を象徴します。CNNが終わった結果は、feature map という元の行列より小さい行列を出します。
Feature mapはプール層に移され、プール層がデベロッパーの指示を特定の値を取り出します(例えば、最小値か平均値。最大値は一番正確な情報を摘出すると調査によって知られています)。この値は feature mapの代表値になり、各 feature mapの代表値は完全接続層を通ります。完全接続層は前の完全接続層の全体のニューロンに繋がっています。代表値は何層もの完全接続層を通り、処理され、一つの値として摘出されます。この値はデベロッパーによって過去にプログラムに挿入された可能な結果と比べられ、最終結果は出力された値に一番近い可能な結果となります。
##LSTM
テキストデータがWord2vecとCNNを通った後に上出来な推薦エンジンが完成したと思われるかもしれませんが、残念なことにまだこの推薦エンジンには弱点があります。Word2vecとCNNは単語しか見ないため、周りの単語の関係を解析し文全体のトーンを見出せません。つまり皮肉な商品レビューを正確に理解できないのです。この問題を解決するために、LSTM(Long-short term memory)というもうひとつのアルゴリズムが使われます。前の二つと違って、LSTMは単語の順を理解することを得意としています。その理由はLSTMは過去の言葉を記憶して次の言葉を解析できるからです。
このプロセスはLSTMがRNN(リカレントニューラルネットワーク)の一種だから可能なのです。RNNの中には過去の情報を常に循環しているループが回っており、このループのおかげで過去のデータを記憶できます。RNNの中では、LSTMは言葉の長期依存性を理解するのに適しています。鎖状の構造で、鎖全体の中にセルステイトというベルトコンベアーに似た構造が通っており、ひとつの鎖から次の鎖に情報を運びます。各鎖(セルとも呼ばれる)の中には「ゲート」というセルステイトの内容を変えることができる構造があります。このゲートの中には何個もの層がはいっており、各層には別の仕事があります。例えば、入力ゲート層はセルステイトのどの部分を更新するか決め、tanh層はセルステイトに挿入する新しい値を作ることができます。Word2vec, とCNN, LSTMが全部終了すれば、最後に入力データ全部を代表するベクターが出力されます。