Submit Search
Elasticsearch for Hackadoll
44 likes
14,897 views
mosa siru
ハッカドールにおけるElasitcsearch活用法。 DeNA社内向けに発表したものです。
Technology
Read more
1 of 61
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
More Related Content
PDF
捗るリコメンドシステムの裏事情(ハッカドール)
mosa siru
PDF
クラシックな機械学習の入門 11.評価方法
Hiroshi Nakagawa
PPTX
Group normalization
Ryutaro Yamauchi
PDF
自作かな漢字変換「Genji」をつくったよ
Masahiko Hashimoto
PPTX
5分でわかるベイズ確率
hoxo_m
PDF
REST API マスターへの道 - Office 365 パワーユーザー向け
Hirofumi Ota
PPTX
React-konvaで絵を描いてみる話
iPride Co., Ltd.
PPTX
強化学習 と ゲーム理論 (MARL)
HarukaKiyohara
捗るリコメンドシステムの裏事情(ハッカドール)
mosa siru
クラシックな機械学習の入門 11.評価方法
Hiroshi Nakagawa
Group normalization
Ryutaro Yamauchi
自作かな漢字変換「Genji」をつくったよ
Masahiko Hashimoto
5分でわかるベイズ確率
hoxo_m
REST API マスターへの道 - Office 365 パワーユーザー向け
Hirofumi Ota
React-konvaで絵を描いてみる話
iPride Co., Ltd.
強化学習 と ゲーム理論 (MARL)
HarukaKiyohara
What's hot
(20)
PDF
CTF for ビギナーズ バイナリ講習資料
SECCON Beginners
PPTX
Sequence Level Training with Recurrent Neural Networks (関東CV勉強会 強化学習論文読み会)
Yoshitaka Ushiku
PDF
深層意味表現学習 (Deep Semantic Representations)
Danushka Bollegala
PDF
トップカンファレンスへの論文採択に向けて(AI研究分野版)/ Toward paper acceptance at top conferences (AI...
JunSuzuki21
PDF
20171128分散深層学習とChainerMNについて
Preferred Networks
PPTX
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
mganeko
PDF
DeNA TechCon2018 ゲーム体験を支えるための強化学習
Jun Okumura
PDF
機械学習デザインパターン Machine Learning Design Patterns
Hironori Washizaki
PDF
Allocators@C++11
Cryolite
PDF
Rで実験計画法 前編
itoyan110
PDF
自然言語処理基礎の基礎
Takashi Minowa
PPT
時系列データ分析
graySpace999
PPTX
金融情報における時系列分析
Fujio Toriumi
PDF
多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)
Ichigaku Takigawa
PPTX
SageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
tomohiro kato
PDF
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
PDF
SSII2021 [TS3] 機械学習のアノテーションにおける データ収集 〜 精度向上のための仕組み・倫理や社会性バイアス 〜
SSII
PPTX
畳み込みLstm
tak9029
PPTX
画像処理応用
大貴 末廣
PPTX
Rで学ぶ観察データでの因果推定
Hiroki Matsui
CTF for ビギナーズ バイナリ講習資料
SECCON Beginners
Sequence Level Training with Recurrent Neural Networks (関東CV勉強会 強化学習論文読み会)
Yoshitaka Ushiku
深層意味表現学習 (Deep Semantic Representations)
Danushka Bollegala
トップカンファレンスへの論文採択に向けて(AI研究分野版)/ Toward paper acceptance at top conferences (AI...
JunSuzuki21
20171128分散深層学習とChainerMNについて
Preferred Networks
Skywayのビデオチャットを録画しよう。そう、ブラウザでね
mganeko
DeNA TechCon2018 ゲーム体験を支えるための強化学習
Jun Okumura
機械学習デザインパターン Machine Learning Design Patterns
Hironori Washizaki
Allocators@C++11
Cryolite
Rで実験計画法 前編
itoyan110
自然言語処理基礎の基礎
Takashi Minowa
時系列データ分析
graySpace999
金融情報における時系列分析
Fujio Toriumi
多数のグラフからの統計的機械学習 (2014.7.24 人工知能学会 第94回人工知能基本問題研究会 招待講演)
Ichigaku Takigawa
SageMaker Neoの可能性について- 第3回 Amazon SageMaker 事例祭り+体験ハンズオン
tomohiro kato
DSIRNLP#1 ランキング学習ことはじめ
sleepy_yoshi
SSII2021 [TS3] 機械学習のアノテーションにおける データ収集 〜 精度向上のための仕組み・倫理や社会性バイアス 〜
SSII
畳み込みLstm
tak9029
画像処理応用
大貴 末廣
Rで学ぶ観察データでの因果推定
Hiroki Matsui
More from mosa siru
(12)
PDF
LayerXのQAチームで目指したい動き方 (社内資料)
mosa siru
PDF
開発速度が速い #とは(LayerX社内資料)
mosa siru
PDF
KYC and identity on blockchain
mosa siru
PPTX
マイニングプールの収益配分と攻撃手法
mosa siru
PDF
Payment Channel Introduction
mosa siru
PDF
Go, memcached, microservices
mosa siru
PDF
ニュースパスのクローラーアーキテクチャとマイクロサービス
mosa siru
PDF
マイクロにしすぎた結果がこれだよ!
mosa siru
PDF
lua_nginx_module JSON-RPC 2.0 Batch Request
mosa siru
PDF
Twitter SmartList (第5回若手webエンジニア交流会)
mosa siru
PDF
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
mosa siru
PDF
how to make twitter list automatically
mosa siru
LayerXのQAチームで目指したい動き方 (社内資料)
mosa siru
開発速度が速い #とは(LayerX社内資料)
mosa siru
KYC and identity on blockchain
mosa siru
マイニングプールの収益配分と攻撃手法
mosa siru
Payment Channel Introduction
mosa siru
Go, memcached, microservices
mosa siru
ニュースパスのクローラーアーキテクチャとマイクロサービス
mosa siru
マイクロにしすぎた結果がこれだよ!
mosa siru
lua_nginx_module JSON-RPC 2.0 Batch Request
mosa siru
Twitter SmartList (第5回若手webエンジニア交流会)
mosa siru
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
mosa siru
how to make twitter list automatically
mosa siru
Elasticsearch for Hackadoll
1.
Elasticsearch for Hackadoll 2015/08/31
@mosa_siru 1
2.
自己紹介 2
3.
@mosa_siru • 「もさ」って呼んでください • 「ボンバーマンの人」
って認 識いただければ大丈夫です • もし興味があれば動画をご覧くださ い http://www.nicovideo.jp/watch/ sm13612359 • 最近はSplatoonもやってます 3
4.
@mosa_siru at DeNA •
1年目: 新卒。プラットフォームでAPIとか運用 • 2年目: ハッカドール 立ち上げからジョイン • サーバーサイドを担当 • 3年目: Web版ハッカドールを作ったり、メ ジャーアップデートしたり 4
5.
ハッカドール サーバーサイド • なんかたくさん作った
with @xaicron , kommy • API (100個) • ニュース配信APIからゲームの賞品付与APIま で、機能ありすぎて笑える • Worker (70個) • Crawler, Remote Notification, etc.. • 非同期処理やバッチ処理する君 5
6.
ハッカドール サーバーサイド • Web •
Web版でAngular実戦投入したけど良さげでした • リコメンドシステム • 分析基板部と連携 • OPE(管理ツール) • ImageProxy(画像変換サーバー) • Nginx Module, etc… 6
7.
アジェンダ 7
8.
アジェンダ 1. ハッカドールって? 2. Elasticsearch活用法 A.
検索 B. 関連記事 C. リコメンド 8
9.
1. ハッカドールって? 9
10.
ハッカドールって? • アニメ・マンガ・ゲームなど、 オタク系の記事のみを扱った ニュース配信アプリ • おすすめ商品、イベントも届 けてくれる •
使えば使うほど学習していく 10
11.
ハッカドールって? • ゲーミフィケーション • というかゲームできる •
オタクユーザーに刺さる機能 が満載! 11
12.
2014夏コミに合わせてリリース 12
13.
• 高リターンレート • 高ヘビーユーザー率 高いユーザー評価 13
14.
Apple 2014 Best
App! 14
15.
2015 コミケ/アニサマ 15
16.
アニメ化! 祝・アニメ化!
17.
2. Elasticsearch活用法 17
18.
ハッカドールでのES活用法 (A)検索 (B)関連記事 (C)キャリブレーション 18
19.
A. 検索 19
20.
ハッカドールでの検索機能 20 • 最新ニュース、新商品、イベント情報を検索できます • というのはかんたんですが…
21.
最高の検索のために
22.
まずは検索に使うためにも、 記事にタグを付けたい 22
23.
とりあえずmecabを用いて 記事を形態素解析 23
24.
最高の辞書が必要 24
25.
最高のオタク辞書を作る • Wikipedia, ニコニコ大百科からオタク系キー ワード一覧を取得 •
手動で最新キーワードを管理ツールから登録 • 詳細は去年つくったスライド「 るリコメ ンドシステムの裏事情」をご覧ください 25
26.
最高のシノニム 26
27.
シノニムと正規化 • 表記揺れや同義語を吸収したい • まず分かち書きされたものに対して各種正規化 •
Unicode正規化 (NFC) • 伸ばし棒 − ∼ ∼ ─ ━ ╌ ╍ ╴ ╶ ╸ ╺ ー - - – — ― − ー => ー • 連続するものを1つに • single quote ‘ ’ => ' • 全角英数字 A => A • 英数字大文字 A => a • 半角カタカナ アア => アア 27
28.
シノニムと正規化 • 各種シノニムに変換 • 管理ツールで登録しておく 28
29.
最高のフィルター • あまりにも関係なさそうなタグはフィルタする (ブ ラックリスト) •
例:「こんにちは」「名無しさん」 • 正規表現でまとめて弾く • 例:d+時d+分 • ブラックリストも管理ツール上で管理 29
30.
ここまでのまとめ • クローリングした記事をオタク辞書で分かち 書きし、正規化・シノニム変換を施し、フィ ルタしたものをタグとする • ようやくできたタグをESにPOST 30
31.
ちなみに • これらのマスターデータの運用は辛い • A
→ Bへのシノニムが登録されたら、全てのタグAを 持つ記事のタグを再計算してESに再登録させる仕組み • シノニムが削除された場合は? • 辞書やシノニムをESに担当させることもできるが、辞書 やシノニム更新のたびにreindexingが必要だったり辛そ うなのでやってない 31
32.
検索クエリ 32
33.
検索クエリ (ようやくESの話) 1. クエリ「まどマギ」で検索したとする 2.
クエリをシノニム変換:「まどマギ」=> 「魔法少女まどか☆マギカ」 3. まずは完全一致でタグに当てる (terms query) 4. あるいは部分一致で全文に当てる (query_string query) 5. 最後に除外フィルタを通して最新順で返す • 例:ベイジアンフィルタにより「えっちな記事」判定されたものを外す • 例:各種ユーザーフィルタ(まとめサイトOFFなど) • なお最新順で返す検索仕様は簡単(スコアリングを考えなくて良い) 33
34.
検索クエリ 4. 「あるいは部分一致で全文に当てる」とは • 目的:クエリ「魔法少女」でも「魔法少女まどか☆マギカ」に当たるよ うにしたい •
analyzerのあるフィールドに query_string query • ただし一方「魔法少女」で 「少女」に当たらない よう”” で囲んでいる => クエリは分かち書きされない 34
35.
検索クエリ (ページング) • やっぱりlimit
offsetは使いたくない • n+1件取得して、n+1件目の記事のtimestamp, idを pageTokenとしてレスポンスに含める • n+1件目は結果から除外する • クライアントはページング時のリクエストに pageTokenを入れる • サーバーはpageToken以降の記事をn+1件取得する (以下繰り返し) 35
36.
検索補完 36
37.
検索補完 • 補完により、入力補助はもちろん表記揺れリ スクも解消できる • 実装はまさかのMySQL!likeで前方一致!w •
あらかじめbatchで全キーワードの登場数を 管理するテーブルを作っている (TDIDFのDF) • nginx proxy cacheでフロントキャッシュして 負荷軽減 • カジュアルに使えるのでおすすめ 37
38.
検索補完 • 読みがな情報もいれておくことで、ひらがな から漢字への補完も可能 • 読みがなはニコニコ大百科から取得したり、 管理ツールから入力 38
39.
最高の検索になれたか?
40.
まだまだできるはず • 心地よく、違和感なく使えるレベルであるのは間違いない • が、まだGoogleにはなれてない •
Fussy検索 • 「もしかして」 • And検索の補完 • “AND” “OR” “NOT” 文への対応 • シノニムやらもろもろと帳尻あわせつつ入れるの大変。やっぱり自然言 語まわりはむずかしい(こなみかん 40
41.
おまけ:検索活用法 41
42.
ウォッチリスト 42 • 好きなタイトル名などを登録しておくと、 そのキーワードを含んだニュースが出る たびに教えてくれる(RSS like) •
オタクであるほど、好きな作品のニュー スは逃したくない • OR検索でElasticsearchから取得 • 検索を作りこんだおかげで可能となっ た
43.
B. 関連記事 43
44.
関連記事 • その記事に関連する記事を教 えてくれる機能 44 ニュース記事 商品記事
イベント記事 ニュース記事 商品記事 イベント記事
45.
関連記事 • 基本は先ほど紹介したタグ情報をもとに、ESのmlt (more like
this) クエリで近い記事を出しています • mlt:「似た」ドキュメントを探してくれるイケメン機能 です • 一致するタグを沢山もっている記事ほどスコアが高く なる • 全部”タグ”で完結するので、ニュース/商品/イベント記事 をまたいだマッチングが可能 45
46.
関連記事(クエリ) 1. その記事のタグ情報を取得 2. mltスコアを計算 3.
新しい記事を重視するために、decayを掛け あわせて最終スコアとする (function_score query) 4. 除外フィルタを通し、スコアが高い順に表示 46
47.
関連記事(クエリ) 2. mltスコアを計算 • 複数回登場するタグは、その回数分だけ 並べている 47
48.
参考:mltのカスタマイズ箇所 name description default percent_terms_to_match このパーセント以上タグが マッチしないと似ていると みなされない 0.30 min_term_freq 最低この個数はタグがマッチしない といけない 2 min_doc_req
全ドキュメント内でこの個数以上登 場するタグのみ用いる 5 ニュース、商品、イベント記事のタグの特性をもとに、 微妙に値をカスタマイズしている
49.
関連記事(クエリ) • 記事の最新度(decay)と掛 けあわせて最終スコアと する ○日古くなると●倍のスコアとな る曲線を指定できるが、パラメー ター調整はわりと職人技(辛い) 49 設定例
50.
C. キャリブレーション 50
51.
キャリブレーション 初回起動時に、ユーザーの嗜好を取得して記事を表示 51
52.
キャリブレーションの流れ 1. ユーザーの好きなカテゴリから、好きそ うなキーワード群とそれぞれの重みを算 出 2. 一部をユーザーがオプトアウトし、最終 的な”taste”とする 3.
tasteをESに投げ、初回記事を生成 4. 類似記事の排除をして記事確定 (詳細は略) 52
53.
キャリブレーション(クエリ) 53 1. tasteをbool query化 •
boost値はキーワード ごとのスコア(重み) • boost値が高いタグが たくさんマッチする記 事はスコアが高い
54.
キャリブレーション(クエリ) 54 2. 最新度, 記事のPV数など で最終スコア調整 3.
各種フィルタを通し、ス コアが高い順に返す
55.
簡易リコメンドまで出来る僥倖…! 55
56.
その他 56
57.
その他活用箇所 • ユーザーアクティビティをESに入れて、 Kibanaで見たり人気記事を算出したり • APIアクセスログのES化 (これはBigQueryにするかも) 57
58.
まとめ 58
59.
ES便利、だけど • 検索、関連記事、ちょっとしたリコメンド …いろいろできる! • でも少し込み入ったことをするには沢山考 えることがあって辛い時もある •
やっぱりサービス作りは、ユーザーのた めに泥臭く畑を耕すこと 59
60.
その他ESへの雑感 • 速度面や安定性は流石の一言 • GCによるCPUがあれですが •
機能が豊富すぎてびびる • 細かいパラメーターチューニングができる分、凝りだすと逆に 辛い • 公式ドキュメントのクエリ解説は正直わかりにくい • レスポンスが書いてなかったりなど • SQLに慣れすぎた人類には早かった 60
61.
おわり 61 @mosa_siru