Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
lambdaの連鎖で作るRecommendEngine
Search
mahiguch
June 04, 2019
Programming
0
320
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
57
WebView認証連携
mahiguch
0
75
メディアアプリLIMIAにおけるプッシュ通知配信システム
mahiguch
0
110
公式部活動技術書典部の活動紹介
mahiguch
0
120
エンジニア以外の方が自らSQLを使ってセグメント分析を行うカルチャーをどのように作っていったか
mahiguch
1
1.1k
PHPからgoへの移行で分かったこと
mahiguch
2
4.2k
BigQueryを使った機械学習プロジェクトの分析とオフライン検証
mahiguch
2
1.2k
gRPCを使ったメディアサービス2
mahiguch
0
230
LIMIAでのBigQuery活用事例
mahiguch
0
210
Other Decks in Programming
See All in Programming
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
150
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
10
2.9k
ゆくKotlin くるRust
exoego
1
130
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
170
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
130
TestingOsaka6_Ozono
o3
0
170
俺流レスポンシブコーディング 2025
tak_dcxi
14
9.3k
Python札幌 LT資料
t3tra
6
990
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
160
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
9
5.9k
Deno Tunnel を使ってみた話
kamekyame
0
190
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
250
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
0
22
RailsConf 2023
tenderlove
30
1.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
980
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Believing is Seeing
oripsolob
0
13
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
0
26
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
130
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
64
Prompt Engineering for Job Search
mfonobong
0
120
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
85
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で実行時に読み込むとコスト的にやばい。何か良いアイ デアがあれば教えて欲しい。 ありがとうございました。懇親会でぜひ声をかけてください!