2016年8月30日0件のコメントこんにちは、CTO室のT.Nです。GMO」の開発に携わっています。今回はTAXEL(タクセル)の裏側の話をちょこっとしたいと思います。TAXELとはTAXELとは閲覧ユーザーの興味関心・行動や、コンテンツ特性を解析し、機械学習エンジンにより関連する記事をレコメンド表示するサービスです。タグを設置するだけでコンテンツを解析し、記事をレコメンド・表示できるものとなっています。TAXELでのレコメンドの仕組みTAXELは「ハイブリッドレコメンド」により、レコメンド記事を選定しています。ここでいう「ハイブリッドレコメンド」とはメディアの特性や記事の状態等によって複数のレコメンド手法を組み合わせ、効果的なレコメンド記事を表示できる機能を指しています。これはどういった時に有効なのでしょうか?例として商品をレコメンドする仕組みを考えてみましょう。商品レコメンドの際によく使われる手法として、「同じ商品を買ったユーザを類似ユーザとみなし、類似ユーザが買った別の商品をレコメンドする」といったものがあります。有名なものだとAmazonのおすすめ商品がありますね。この手法だと購入者が少ない商品がレコメンドされない現象、つまり「コールドスタート問題」が生じます。コールドスタート問題を回避するにはどうすればいいでしょう?一つ考えられるのは商品名や内容等の静的情報で類似のものを推薦すればよいという考えがあります。書籍で考えるとあるシリーズの小説をずっと購読している人に対して、そのシリーズの最新刊を推薦するというものです。このような手法であればたとえその商品の購入者が少なくても有効なレコメンドができそうですね。TAXELでは、このように異なる複数のレコメンド手法を組み合わせ記事の推薦を実施しています。複数を組み合わせることによってそれぞれのレコメンド手法の弱点を補い、効果を最大化しようとしているわけです。レコメンド手法紹介さてこれまではTAXELのサービスの紹介でしたが、ここからはこのようなレコメンドで使える手法のいくつかをサンプルコードを交え紹介します。例として、上に挙げた「類似ユーザ行動情報を利用したレコメンド」「類似名を利用したレコメンド」を題材にしようかと思います。類似ユーザ行動情報を利用したレコメンド行動情報をもとにしたレコメンド手法は数多く存在します。有名なものとしてはアソシエーション・ルールという手法があります。代表的なアルゴリズムとして1994年に提唱されたAprioriアルゴリズムがあります。アソシエーション分析という形でも色々な場所で利用されており、聞いたことがあるという方もいらっしゃるかと思います。これより新しいものとして協調フィルタリングという手法も存在します。Sparkでは、このうちALS(ALS-WR)というアルゴリズムが実装されています。Prize(2008)という論文にて提唱されました。特徴としては従来の協調フィルタリング手法より、処理データ量を減らしたため高速化したところにあります。ここではアソシエーション・ルールのサンプルコードを紹介します。類似名を利用したレコメンド類似名を探すというのはコンピュータにとっては非常に難しい話です。「水」と「川」は似ているが、「飛行機」があまり似ていないというのは人間なら誰でも分かることです。コンピュータにとってこの3つの単語はただの0/1の羅列です。そこから類似性を発見するのは非常に難しい問題となります。embedding)があります。この手法を用いると単語はただの文字列から、数十次元から数百次元のベクトル(数値の配列)に変換されます。ベクトル、つまり数値の配列になると何が嬉しいのでしょう?その一つとしてベクトルになると類似性が距離で表現できるようになることが挙げられます。ベクトル間の距離が近いものは類似単語となり、遠いものはあまり似ていない単語といったことが表現されます。これをもっと具体的に考えてみましょう。ここでは物事を単純にするために2次元のベクトルで表現して、考えたいと思います。Word2Vecで変換すると、例えば水は(0,1)、川は(1,2)、飛行機は(10000,20000)といったベクトルに変わります。「水」と「川」は近い数値を持ちますが、飛行機は離れた数字を持っていますね。これが類似性がベクトルで表現できる、ということです。ベクトルはただの数値であるため、加減算もクラスタリングもできるようになります。Queen)加減算ができれば複数単語を持つ名称にも適用できるようになりますね。コードを見てみましょう。ここではWord2Vecで単語ベクトルを生成した上で「水」の類似単語を表示し、かつK-Meansを用いクラスタリング(グルーピング)した結果です。clusters.predict(Vectors.dense(tuple._2.map(_.toDouble))))}file.close()}}まとめ今回はTAXELでのレコメンド手法の一部を紹介させていただきました。@gmoap_engineer本ブログで発信される情報は、各エンジニア個人の見解であり、弊社の公式見解ではありません。本ブログに掲載、引用等をしている商品またはサービス等の名称は、各社の商標または登録商標です。その他の事項について一切責任を負いかねます。発表する情報には注意を払っておりますが、公式発表、見解については、弊社WEBサイトおよびプレスリリースなどをご確認ください。GMOインターネットグループにおけるソーシャルメディア運用ポリシーについては次のページをご確認ください。本ブログに掲載のあるソフトウェアのダウンロードは自己責任で御願い致します。ソフトウェアのダウンロードの結果、ご利用者に何らかの損失・損害が生じたといえども、当社ではその責任を負いかねます。本ブログに掲載のあるソフトウェアを扱う際は、各ソフトウェアの公式リファレンスを参照のもとご使用下さい。ソフトウェアの実行の結果、ご利用者に何らかの損失・損害が生じたといえども、当社ではその責任を負いかねます。