まずは iVoca のデータを使って自分で IRT で計算してみるところからかな。 というわけで、ユーザの学習履歴から単語の難易度を求めるコードを書いてみた。 ソーシャルっぽい! 残念ながら IRT(項目反応理論) について書かれた文献を持っていないのだが、id:niam さんの SocialDict についてのプレゼン資料 のおかげで、「2値のラッシュモデル+逐次勾配降下」なら単純なロジスティック回帰であることがわかるので、簡単に実装できた。 しかも IRT の特徴ベクトルが疎であることを用いると、非常にシンプルなコードで済む。 # data には [ユーザID, 単語ID, 知ってる(1)/知らない(0)] を格納。 # users/words は各IDをキー、重み(ユーザの語彙力/単語の難しさ)を値とするHash 100.times do |k| eta = 1.0 / (k + 1
![iVoca の履歴から単語の難易度を計算 - 木曜不足](https://cdn-ak-scissors.b.st-hatena.com/image/square/b93b7eae32ff701206166cfb62b0ce5c82066402/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fn%2Fn_shuyo%2F20090925%2F20090925005617.png)