Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
lambdaの連鎖で作るRecommendEngine
Search
mahiguch
June 04, 2019
Programming
0
280
lambdaの連鎖で作るRecommendEngine
「Cloud Native Meetup Tokyo #8 ServiceMesh Day Recap」でのLT資料です。
mahiguch
June 04, 2019
Tweet
Share
More Decks by mahiguch
See All by mahiguch
爆速で成長する おでかけ情報サービスの成長を支えるデザインと開発の取り組みについて
mahiguch
0
17
WebView認証連携
mahiguch
0
46
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
75
公式部活動技術書典部の活動紹介
mahiguch
0
87
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
960
PHPからgoへの移行で分かったこと
mahiguch
2
3.8k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
1
1k
gRPCを使ったメディアサービス2
mahiguch
0
160
LIMIAでのBigQuery活用事例
mahiguch
0
170
Other Decks in Programming
See All in Programming
開発を加速する共有Swift Package実践
elmetal
PRO
0
420
Developer Joy == Developer Productivity (really!)
hollycummins
1
220
Pythonで改めて考える「クラス(class)」の使いどころ
os1ma
2
660
Patched fetch did not work
quramy
4
390
Scala におけるコンパイラエラーとの付き合い方
chencmd
2
430
オートマトン学習しろ / Do automata learning
makenowjust
3
130
How to Break into Reading Open Source
kaspth
2
220
Amazon Neptuneで始める初めてのグラフDB ー グラフDBを使う意味を考える ー
satoshi256kbyte
2
260
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
390
Hono・Prisma・AWSでGeoなAPI開発
nokonoko1203
5
680
A New Era of Testing
mannodermaus
2
510
『ドメイン駆動設計をはじめよう』中核の業務領域
masuda220
PRO
5
1k
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
8.9k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
45
4.8k
KATA
mclloyd
27
13k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
230
17k
Six Lessons from altMBA
skipperchong
26
3.4k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
25
3.9k
The Invisible Customer
myddelton
119
13k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
1
54
Why Our Code Smells
bkeepers
PRO
334
56k
Teambox: Starting and Learning
jrom
131
8.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
123
18k
Web development in the modern age
philhawksworth
205
10k
Transcript
lambdaの連鎖で作る Recommend Engine
Masahiro Higuchi / 樋口雅拓 • グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 • 機械学習のエンジニアですが、iOS,
Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 • https://limia.jp/ • https://arine.jp/ • https://aumo.jp/ • https://www.mine-3m.com/mine/
LIMIAとは? • メディアサービス • 記事一覧を表示し、タップすると記事 詳細を閲覧できる。 • AWS:90%、GCP:10%。 • PHP/EC2
→ Go/ECS移行中 ユーザに最適なコンテンツを推薦する事 で、回遊性を向上させたい! → Recommend Engine(推薦システム)を 作ろう。
どうやってRecommendするのか • ユーザを10個ぐらいのセグメントに分類 • セグメント毎にCTRを計算 • 記事の投稿日時で補正したCTRが高い順にリストに掲載 → せっかく今から作るんだから、インスタンスを立てずに行こう!
ユーザモデル作成 ユーザが記事を閲覧すると、その情報が Kinesis に流れます。Lambdaで受け取り、直近10件の閲 覧履歴をDynamoDBに保存します。その変更を DynamoDB Streamに流し、Lambdaで受け取っ て記事のベクトルの平均をユーザベクトルとして DynamoDBに書き込みます。
ユーザ分類 ユーザの閲覧履歴は、 Kinesis経由でS3にも保 存されます。EMRでそれを読み込み、 k-means++で10セグメントに分割し、分割結果を BigQueryに書き込みます。BigQueryでセグメン ト毎の直近2時間のCTRを計算し、S3に書き戻し ます。それをDynamoDBに書きます。EMRでの 計算で出来るセグメントの中心ベクトルとアイデ アのベクトルも同様に
Dynamoに書き出します。 アイデアベクトル生成は 1日1回だと遅いので、 改善したい。
配信 ユーザが記事一覧を表示しようとすると、 Recommend Engineに問い合わせます。 Recommend Engineはユーザの直近10件の記事閲 覧履歴から所属するセグメントを選び、そのセグメント のユーザの直近2時間のCTRが高いものを表示しま す。ただし、古い記事ほど減点し、ユーザの前回ログ イン以降に投稿された記事は加点します。
Recommend Engineはgolangで書いて、 ECS/Fargateで動かしています。
システム構成図 パラメータ一覧 • ユーザベクトル生成は、即時。 • アイデアベクトル生成は、毎日。 • 辞書は2年前のwikipediaベース。 • CTRの計算は直近2時間。
• 推薦対象は、全記事。 • セグメントは10個。 これらについて、A/Bテストを行い、最適値を 探す。1Round 1週間として、6月末までに5回 行う。
まとめ • Recommend Engineは簡単に作れる。 • 今の所は既存編成ロジックより良い結果が出ている。 • システム的にはアイデアベクトル生成をリアルタイムで行いたい。しかし、 S3にある5GBの辞書 を読み込む必要があるため、
Lambdaで実行時に読み込むとコスト的にやばい。何か良いアイ デアがあれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!