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
gree_tech
PRO
July 08, 2019
Technology
0
270
lambdaの連鎖で作るRecommendEngine
「Cloud Native Meetup Tokyo #8 」で発表された資料です。
https://cloudnative.connpass.com/event/130892/
gree_tech
PRO
July 08, 2019
Tweet
Share
More Decks by gree_tech
See All by gree_tech
LLM翻訳ツールの開発と海外のお客様対応等への社内導入事例
gree_tech
PRO
0
340
ヘブンバーンズレッドのレンダリングパイプライン刷新
gree_tech
PRO
0
350
ヘブンバーンズレッドにおける、世界観を活かしたミニゲーム企画の作り方
gree_tech
PRO
0
340
「魔法少女まどか☆マギカ Magia Exedra」のグローバル展開を支える、開発チームと翻訳チームの「意識しない協創」を実現するローカライズシステム
gree_tech
PRO
0
340
「魔法少女まどか☆マギカ Magia Exedra」での負荷試験の実践と学び
gree_tech
PRO
0
340
「魔法少女まどか☆マギカ Magia Exedra」の必殺技演出を徹底解剖! -キャラクターの魅力を最大限にファンに届けるためのこだわり-
gree_tech
PRO
0
340
ヒューリスティック評価を用いたゲームQA実践事例
gree_tech
PRO
0
340
ライブサービスゲームQAのパフォーマンス検証による品質改善の取り組み
gree_tech
PRO
0
340
コミュニケーションに鍵を見いだす、エンジニア1年目の経験談
gree_tech
PRO
0
140
Other Decks in Technology
See All in Technology
7月のガバクラ利用料が高かったので調べてみた
techniczna
3
780
「AI2027」を紐解く ― AGI・ASI・シンギュラリティ
masayamoriofficial
0
150
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
3
1.6k
カミナシ社の『ID管理基盤』製品内製 - その意思決定背景と2年間の進化 #AWSUnicornDay / Kaminashi ID - The Big Whys
kaminashi
3
640
Grafana Meetup Japan Vol. 6
kaedemalu
1
180
AIエージェントの活用に重要な「MCP (Model Context Protocol)」とは何か
masayamoriofficial
0
230
進捗
ydah
2
210
実践アプリケーション設計 ②トランザクションスクリプトへの対応
recruitengineers
PRO
4
1.1k
新規案件の立ち上げ専門チームから見たAI駆動開発の始め方
shuyakinjo
0
600
おやつは300円まで!の最適化を模索してみた
techtekt
PRO
0
210
小さなチーム 大きな仕事 - 個人開発でAIをフル活用する
himaratsu
0
140
モバイルアプリ研修
recruitengineers
PRO
5
1.6k
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.6k
We Have a Design System, Now What?
morganepeng
53
7.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
KATA
mclloyd
32
14k
Why Our Code Smells
bkeepers
PRO
339
57k
Statistics for Hackers
jakevdp
799
220k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.5k
Making the Leap to Tech Lead
cromwellryan
134
9.5k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Site-Speed That Sticks
csswizardry
10
800
Building Adaptive Systems
keathley
43
2.7k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
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で実行時に読み込むとコスト的にやばい。何か良いアイ デアがあれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!