糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

The Web as a Jungle: Non-Linear Dynamical Systems for Co-evolving Online Activities (WWW 2015) 読んだ

The Web as a Jungle: Non-Linear Dynamical Systems for Co-evolving Online Activities (pdf)

冬コミのモデルに使おうとして読んだ.

概要

Lotka-Volterra の捕食者 - 被食者のモデルを使う.
タイムスタンプつきの各キーワードの検索数 (実験では Google Trendの値) を入力として,生態系における「種と餌,種の競争関係,種の成長」を「各キーワードがユーザのリソースを奪いながら成長する」というアナロジーで推定する.
これによって,どのキーワードがユーザリソースを奪い合っているか,その後どのように成長するかがわかるようになる.

これを声優でやると

今回やりたかった方向性は「ファンがどのように声優を乗り換えているか」「声優がどのようにファンを奪っているか」を見たかった.
Wikipediaの各声優のアクセス数データを使うことによって,声優ユニット内のメンバーでどのように人気を奪い合っているかがわかるのではないか,という気持ちでいた.

手法

Lotka-Volterra のモデルを拡張し,周期成分まで抽出する.
式をまとめて書くと,



C が実測値,e が周期成分.P が人気度.a で2つの種の間における力関係を表す.
周期成分の \tau は t を時間幅で mod を取ったものを使う.

推定

まずは e を抜いた状態で C ( = P) を前向きに推定する.
その上で C と実測値との誤差を取って e を計算していく.その際 e は独立成分分析で独立成分を抜く.
独立成分の数をパラメーターフリーにするために,推定時の誤差計算をRMSEにせず,Huffman Coding した上で MDS を使って最適な独立成分数を決める.

実装

推定,再帰的に項が入るので勾配計算が死ぬほど面倒.元論文では特に示されていない.
著者によって公開された実装を見ると,Non-Linear Least-Squares Minimization and Curve-Fitting for Python — Non-Linear Least-Squares Minimization and Curve-Fitting for Pythonを使って推定をしている.
独立成分の数,実装を見る限り最小値と最大値を決めてその中で最も良いものを採用しているように見える.確かにパラメーターフリーではあるが.

どううまくいかなかったか

自分でも実装してみた.
しかし元論文のように綺麗にRMSEが下がらない.「独立成分抜きで推定」→「独立成分を抽出」の繰り返しの二度目で学習が進まなくなってしまう.
パラメータにも様々な制約があるのでややこしいのかもしれないが,よくわからないままだった.
Pythonをまともに書くのもはじめてなので,識者の見解が欲しい.
元実装と使用したライブラリを揃えては見たが,しかしでは元実装ではどうなっているだろうかと確認してみると謎の絶対値を取る操作や,謎の最大値で固定する操作が行われており,論文そのままの実装ではない雰囲気を感じた.
これを諦めたのが先週水曜あたり.もっと前から準備をしたい.