jubarecommenderの紹介
Jubatus Casual Talks #4
2016/06/18(土)
NTTソフトウェアイノベーションセンタ
東羅 翔太郎
Copyright©2016 NTT corp. All Rights Reserved.
jubarecommenderとは
 近傍探索ベースの推薦をJubatus上で行う
エンジン
 近傍データ(あるデータと類似したデータ)の
探索、および推薦(あるデータの値を、近傍
のデータを元に類推)する機能
Copyright©2016 NTT corp. All Rights Reserved.
推薦のイメージ1: ユーザベース
 例えばECサイトの場合
 全ユーザの購買履歴
 ユーザ間の類似度(どれくらい嗜好が似ているか)
を計算する
 類似度の高いユーザの購入した商品を薦める
商品A 商品B 商品C 商品D 商品E
ユーザ1 1 1 0 0 1
ユーザ2 0 0 1 1 0
ユーザ3 0 1 1 0 0
ユーザ4 1 1 0 0 0
Copyright©2016 NTT corp. All Rights Reserved.
推薦のイメージ2: アイテムベース
 例えばECサイトの場合
 全ユーザの購買履歴
 商品間の類似度を計算する
 類似する商品を推薦する
⇒ 「この商品を買った人はこんな商品も買って
います」
ユーザ1 ユーザ2 ユーザ3 ユーザ4
商品A 1 0 0 1
商品B 1 0 1 1
商品C 0 1 1 0
商品D 0 1 0 0
商品E 1 0 0 0
Copyright©2016 NTT corp. All Rights Reserved.
Jubatus の推薦アルゴリズム
 主なアルゴリズム(類似度の計算方法)
 詳細は公式サイトを御覧ください
 ※ inverted_index, inverted_index_euclid は厳密な
距離計算を行います。他は近似計算を行う代わり
に高速です。
アルゴリズム名 尺度 備考
inverted_index コサイン類似度 厳密
inverted_index_euclid ユークリッド距離 厳密
minhash Jaccard係数 近似、省メモリ
lsh コサイン類似度 近似、省メモリ
euclid_lsh ユークリッド距離 近似、省メモリ
Copyright©2016 NTT corp. All Rights Reserved.
クライアントAPI
 利用頻度が多いと思われるAPIを紹介します
 update_row (id, datum)
 キーがid、バリューがdatumの行を追加します
 datumとはJubatusで用いるkey-value形式のデータ形式で
す
 similar_row_from_id (id, size)
 id行の近傍データを size 個探索して返します
 complete_row_from_id (id)
 id行の近傍データから、id行の欠けている値を予測して、
補完したデータを返します
 他は公式サイトを参照
 http://jubat.us/ja/api_recommender.html
Copyright©2016 NTT corp. All Rights Reserved.
簡単なサンプル:
プログラミング言語のレコメンド
 プログラミング言語の特徴から、クエリに
近い言語を推薦
 Wikipediaの「Comparison of programming
languages」を参考にデータを作成
 https://en.wikipedia.org/wiki/Comparison_of_prog
ramming_languages
Copyright©2016 NTT corp. All Rights Reserved.
データ概要
Language Intended use Imperative
Object-
oriented
Functional
Procedura
l
Generi
c
Reflectiv
e
Event-
driven
Other
paradigm(s)
Standardized?
ActionScript
3.0
Application,
client-side,
web
Yes Yes Yes 1996, ECMA
Ada
Application,
embedded,
realtime, syste
m
Yes Yes[2] Yes[3] Yes[4]
concurrent,[5]di
stributed,[6]
1983, 2005, 2012,
ANSI,
ISO, GOST27831-
88[7]
Aldor
Highly
domain-
specific,
symbolic
computing
Yes Yes Yes No
ALGOL 58 Application Yes No
今回使う部分
 言語毎に用途が書かれたカラムと、各パラダイムを
含んでいればYesが入ったカラムが並んでいます
 今回は列ごとに文字列としてスペース区切りで特徴
ベクトルを作成するようにします
Copyright©2016 NTT corp. All Rights Reserved.
デモ
Gist
• https://gist.github.com/torash/d17709aca00d53c20d4
a82c61ca28f03
Copyright©2016 NTT corp. All Rights Reserved.
まとめ
 Jubatusの推薦機能 jubarecommender を紹介
 近傍探索ベースのエンジン
 jubarecommender を用いたサンプル、プログラ
ミング言語の推薦を紹介
 アイテムベースの推薦
 前処理をほとんど行わずに処理が可能
 「使えそうだな」「動かしてみたいな」と
思われたら、まずは是非 jubatus-example を
触ってみてください!
 https://github.com/jubatus/jubatus-example
Copyright©2016 NTT corp. All Rights Reserved.

jubarecommenderの紹介