早速使ってみよう!
まず、左にある五十音から、好きな声優名の頭文字をクリックします。
ここでは例として、「み」を選びます。
頭文字をクリックすると、右のセレクトボックスにその頭文字から始まる声優が表示されるので、
その中から好きな声優名を選びます。
ここでは例として、「三咲里奈」を選びます。
続いて、おすすめする声優の傾向を選択します。
それぞれについて後ほど詳しく説明しますが、まずは「関係の強い声優」を選んでみます。
さらに、出演作品数やお気に入り登録数を指定することで、
指定した数値以下の声優を、結果から非表示にすることができます。
ここではデフォルトのまま、それぞれ10以下の声優を非表示にします。
そして、下の「おすすめ声優を表示!」ボタンを押すと・・・
右のテーブルにおすすめの声優が15位まで表示されます。
どうやら『真剣で私に恋しなさい!』や『夜明け前より瑠璃色な』あたりで、
繋がりのある声優をおすすめしてくれているようです。
また、「三咲里奈はエロゲへの出演が最近めっきり減ってしまったので、
代わりとなるような最近活動している声優さんが知りたい!」という時は、
先程のおすすめする声優の傾向で『最近の声優』を選んでみます。
(出演作品数とお気に入り登録数は1以下を非表示に指定)
すると、最近活動されている声優を中心におすすめしてくれます。
(名義については統一していないため、事実上昔から活動している方が表示される場合があります)
どうやっておすすめするのか?
このサービスどういった仕組みなのかというと、
声優Aと声優Bの二人とも好きな人が多ければ、声優Aが好きな人に声優Bをおすすめするという単純な考えに基づいています。
続いて、細かく説明していきたいと思います。
準備
まず、声優のデータや、声優に関するお気に入りデータが必要になります。
そこで、今回使用したのが『
ErogameScape -エロゲー批評空間-』の、
クリエイターの情報と、クリエイターのお気に入りの情報です。
本サービスで扱っている声優は、
18禁作品にメインもしくはサブキャラクターとして、2作品以上に出演したことのある
1667名です。
なお、名義については前述の通り、手を加えておらず、全てErogameScapeに則っています。クリエイターのお気に入り情報については、
本サービスで扱う声優を2名以上お気に入りに登録している5967名分、
合計
77455件のお気に入り情報を使用しています。
ちなみに、内7件は私自身の情報だったりします。
これにて、今回使用するデータが揃いました。
協調フィルタリングについて
このデータからどうやって、おすすめする声優を決定するかというと、
協調フィルタリングという技術を使用します。
(Wikipediaより引用)
という説明ですが、
Amazonのおすすめ商品なんかをイメージしていただくとわかりやすいかと思います。
協調フィルタリングの中にも、2つの方法が存在し、
・アイテム間の類似度を測定するアイテムベースの方法
・ユーザ間の類似度を測定するユーザベースの方法
の2つがありますが、今回は一人の声優に注目する、
アイテムベースの協調フィルタリングを使用します。
協調フィルタリングを理解する上で、これらの資料がわかりやすいかと思います。
・協調フィルタリング技術を掘り下げる--ECサイトのレコメンド技術を考える(3)
http://japan.zdnet.com/article/20374062/ ・協調フィルタリングを利用した推薦システム構築
http://www.slideshare.net/masayuki1986/recommendation-mlまた、関連研究というところでは、
エロゲの評価に基づき、協調フィルタリングを使用してエロゲを推薦する実験を行っている方がいます。
・Mori Ideyoshi, 協調フィルタリングに基づく美少女ゲーム推薦, SIG2D’13.
http://files.sig2d.org/sig2d13.pdf#page=15協調フィルタリングの計算
ここでは、具体的な協調フィルタリングの計算方法について説明していきます。
①ユーザが声優をお気に入り登録しているか (ユーザ5967名×声優1667名)
お気に入り登録している「1」、していない「0」
②同一ユーザがお気に入り登録した声優の組み合わせの回数 (声優1667名×声優1667名)
例えば、榊原ゆい(3360)と北都南(5380)をどちらもお気に入り登録しているユーザは392名。
③組み合わせの総和からセットでお気に入り登録される割合を計算例えば、榊原ゆい(3360)をお気に入り登録しているユーザが、
北都南(5380)をお気に入り登録している割合は、お気に入り登録全体の1.4%。
この数値が高ければ、おすすめする声優の傾向が『
人気の声優』の上位になります。
基本的なアイテムベースの協調フィルタリングのアルゴリズムはこれで終わりなのですが、
この数値を使用すると、どうしてもお気に入り登録される割合の高い、
人気の高い声優ばかりが上位にランクインしてしまうという欠点を抱えてしまいます。
そこで以下の処理を加えます。
④同時にお気に入り登録される声優ごとに正規化する横軸に向かって正規化を行うことで、
選んだ声優をお気に入り登録しているユーザが、
"特に"同時にお気に入り登録する声優を見つけることができます。
同じ作品に出演しているなど何かしらの共通点があることが多いです。
この数値が高ければ、おすすめする声優の傾向が『
関係の強い声優』の上位になります。
⑤出演時期によって重み付け④に重みをかけたものが、出演時期を加味したスコアになります。
重みは独自に定義したもので、やや主観的になっています。
出演時期を加味したスコアが高ければ、おすすめする声優の傾向が『
昔の声優』の上位になります。
出演時期を加味したスコアが低ければ、おすすめする声優の傾向が『
最近の声優』の上位になります。
また、ここで算出した重みによって、結果に表示される活動タイプを分類しており、
重みが正に数が大きければ「昔」、負に数が大きければ「最近」、
数値がその間で主演本数が多ければ「長期」、出演本数が少なければ「中期」となっています。
実装について
ErogameScapeのデータを使っているため、
本来ならErogameScapeの登録SQLで実装することがベストなのですが、
私のSQL知識だと、まともな時間内に収まるものはとてもできないので、
データをあらかじめ加工して別に保存し、そのデータベースを参照しています。
サービス自体は「似ているエロゲを探そう(β)」と同じくPHPで実装しています。
今回はデータベースを参照するだけで、演算処理をほとんど行わないため、100行ぐらいです。
前回と異なるのは、Webページを練習がてらBootstrapでデザインしたところですかね。
使い慣れていないので、不格好になっていますが、
スマートフォンで見ると、全体的に縦向きのデザインになるようにしています。
最後に
元々これをつくろうと思った動機は、私の好きな声優の方々の活動が近年急激に減少しており、
新作を声優で選ぶことができなくなってきたという現実があり、
それに対抗して好きな若手の声優を増やしていきたいというところから思い付きました。
今回は声優でやりましたが、
全く同じ方法で原画家とかシナリオライターとかでもできるんですよね。
反響があれば気が向いてつくるかもしれません。
ご意見ご感想などありましたら、どしどしお寄せください。
※もしPHPのエラーメッセージが表示されたり、挙動がおかしかったりした場合は、報告をお願いします。