機械学習で女優をレコメンドするサイトを作った

はじめに

こんにちは。Webサービス開発グループの2019年度新入社員の中村です。

大学・大学院では、深層学習を用いて動画から人間の行動認識をする研究を行っていました。今回は機械学習をビジネスに活かす方法として、レコメンドに挑戦してみました。

なぜレコメンドが重要なのか

それぞれのユーザーの趣味・嗜好に合わせた情報を届けることは、収益につなげるために重要な技術になってきます。

しかし、人間が大量のレコメンド対象に対して、適切なレコメンドを作成することには限界があります。

そこで、今回は簡単な機械学習(統計学)を用いて、簡易的なレコメンドエンジンを作成し、結果をサイトとして公開します。

完成したサイトはこちらです。

今回の目的

Wikipedia文章を元データにして、文書特徴量を生成し、「日本の女優」の簡易レコメンドエンジンを開発します。

「日本の女優」を題材にしている理由は、好きな女優に似ている女優を好きになるだろうという仮定が成り立つことと、OJT業務の中で@nifty グラビアのサービスに少し触れたため、この題材になりました。

抽出するカテゴリを変更する(例えば男性俳優)ことで、手法は変更せずに別の題材でレコメンドエンジンを作成することも可能です。

手法

内容ベースのレコメンドエンジンを実装します。

今回は以下の記事を参考に、Wikipediaの文章からTF-IDFを算出し、コサイン類似度を計算することで似ている女優をレコメンドします。

(それぞれの手法の細かい説明は割愛します。ただしTF-IDFに関して、単語の出現頻度のみの計算になっているため、正確にはTF特徴量になっています。)

https://postd.cc/simple-similar-products-recommendation-engine-in-python/

https://qiita.com/haminiku/items/f5008a57a870e0188f63

手順

まず、Wikipediaの文章を抽出します。

Wikipediaのクロールは禁止されているため、今回はWiki Extractorというツールを使用して、「日本の女優」カテゴリに含まれる人物の文章をWikipediaのダンプデータから取り出します。

Wiki Extractorのダウンロード

Wiki Extractorのスクリプトを以下からダウンロードします。(ver2.75)

https://github.com/attardi/wikiextractor

Wikipediaダンプデータのダウンロード

日本語Wikipediaのダンプデータを下記から入手します。

https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2

 

カテゴリを指定するcategories.filterには、「日本の女優」とだけ書いて同階層に保存しておきます。

上手く取り出せると、以下のようなJSONデータが取得できます。

文章を用意できたら、TF-IDF特徴量とそれぞれの類似度を計算します。

計算結果をすべて保持してしまうと4GB程度のデータになってしまうため、今回はTop10のみを保存するように処理します。

Pythonのライブラリを使用するため、以下のコードを使用する場合は必要なライブラリをインストールしてください。

計算が終わると、女優名と類似した女優名・相似度のJSONデータが得られます。

 

これを簡単に検索できるようにフロントエンドを作成します。

今回は json/女優名.json として計算済みのデータを用意しておき、パラメータに応じてjQueryで読み込むような構成にします。

CSSフレームワークにUIKitを使用して、デザイン面はUIKitにおまかせします。

完成

完成したサイトは以下からアクセス可能です。

http://test-nakamuraibuki.s3-website-ap-northeast-1.amazonaws.com/

 

検索画面ではオートコンプリートを使えるようにし、結果画面ではWikipediaに飛べるようにしたり、人名をクリックするとその人に類似した女優を表示するようにするなど、UXにも少しこだわりました。

精度については、Wikipediaの文章量が少ないとそれほど関連性のない人も浮上してきてしまうなど、まだまだ改善の余地ありのように思います。(文量を考慮したアルゴリズムであるOkapi BM25などで改善するかもしれません。)

感想

今回はコンテンツベースのレコメンドエンジンを開発してみました。

題材にした「女優」の場合には、その人物のプロフィールだけではなく、見た目を加味したり、実際のユーザーはどういう傾向があるのかというデータがあると、さらに精度を高めていくことが可能になると考えられます。

最近ではAmazon Personalizeなどで機械学習サービスを使う機会がどんどん増えると思いますが、簡単にでも手法の仕組みを知っていると、さらに適切に運用できる可能性が高まると思います。

 

最後に、ニフティではエンジニアを募集しています。
データサイエンスに興味がある人、一緒に働いてみたい人は、ぜひ採用情報をご確認ください。