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
新「つくれぽ」検索の開発について/Cookpad Tech Kitchen#24
Search
Yusuke Naito
August 21, 2020
Programming
1
710
新「つくれぽ」検索の開発について/Cookpad Tech Kitchen#24
Yusuke Naito
August 21, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
並行開発のためのコードレビュー
miyukiw
0
260
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
290
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
Best-Practices-for-Cortex-Analyst-and-AI-Agent
ryotaroikeda
1
110
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
Automatic Grammar Agreementと Markdown Extended Attributes について
kishikawakatsumi
0
200
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
370
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
180
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
980
CSC307 Lecture 04
javiergs
PRO
0
660
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
220
Context Engineering - Making Every Token Count
addyosmani
9
660
Utilizing Notion as your number one productivity tool
mfonobong
3
220
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
590
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
94
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Being A Developer After 40
akosma
91
590k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
320
Become a Pro
speakerdeck
PRO
31
5.8k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
150
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3k
Transcript
事業開発部 内藤雄介 2020/08/21 Cookpad Tech Kitchen #24 新「つくれぽ」検索の 開発について
• 内藤 雄介 @9toon • 14年新卒→(子会社化/転籍)→19年再入社 • 事業開発部サーチエンジニアリングG長 • バックエンドエンジニア
• 大阪からフルリモート 自己紹介
• 新「つくれぽ」とは? • 新「つくれぽ」の検索機能の開発について ◦ 全文検索システムの選定 ◦ 検索精度向上の工夫 ▪ フィルタリング
▪ ランキング 今日お話すること
新「つくれぽ」とは?
• 2006年に誕生 • レシピ作者に「ありがとう」 を伝える手段 これまでの「つくれぽ」とは?
「感謝」から「みんなへのおすすめ」へ ref: 『13年続いた「つくれぽ」をリニューアルした話』
新「つくれぽ」とは? • 「みんなへのおすすめ」の手段 • 他人が見ても楽しめるように リッチなフォーマットに進化 ◦ 3枚までの写真/動画 ◦ ハッシュタグ
新「つくれぽ」の検索機能の開発
• 世界最大級のRailsモノリス • 「理由はよくわからないがとにかくこれをさわるだけ で開発期間が3倍になる」 cookpad_all という魔境
「ふつう」のRails開発をするために ref: クックパッド開発者ブログ『モダンBFFを活用した既存APIサーバーの再構築』 • Microservices化 ◦ Rails 6.0.x ◦ Ruby
2.6 ◦ Aurora MySQL... • Orcha(BFF)を通して 新旧APIを統合
検索システムも「身軽」にしたい • レシピ検索にはSolrを長年利用している • 既存検索システムの課題 ◦ 「人気順」等の大事な機能を支えるバッチ類やビジ ネスロジックが入り乱れていて触りづらい... ◦ Solr4.9を使っていてかなり古かった(※当時)
• →別システムに切り出して開発したい ref: クックパッド開発者ブログ『レシピ検索を支えるレガシーでクリティカルな 大規模バッチを刷新した話』
「いい検索システム」とは • 「フィルタリング」✕「ランキング」 • フィルタリング: ◦ 文書群の中から目的の文書をどう絞り込むか? ◦ 全文検索では文章をどう単語に分割するかが重要 •
ランキング: ◦ 絞り込んだ文書をどう順序に並べるか?
検索エンジンをどう選定するか? • Amazon Elasticsearch Service(AES)を採用した ◦ いち早く検証に入りたい(構築コスト) ◦ 開発に集中したい(運用コスト) •
制約: ◦ ユーザ辞書が使えない(※当時) ◦ Close Index APIが使えない
• 「鶏もも肉のトマト煮」 ◦ 辞書なし(素の kuromoji) ▪ 鶏もも_肉_の_トマト_煮 ◦ 辞書あり ▪
鶏もも肉_の_トマト煮 ◦ ↑料理ドメインでは頻出の「鶏もも肉」でも適切に 分かち書きできない! ユーザー辞書の有無での形態素解析の差分
Analyzerの働き 1. Char filter(文字列のまま処理) ◦ 例. HTML文字列の除去 etc. 2. Tokenizer(文字列をトークン(単語)に分割)
◦ 例. ngram, kuromoji, whitespace 3. Token filter(トークンに対する処理) ◦ 例. synonym(同義語の展開)
• レシピ検索で培った言語資源が gem 化されている ◦ text_processor(MeCab+カスタム辞書のwrapper) ◦ word_essence(後述) • 「分かち書き」をアプリケーション側で行う
◦ text_processor で分割して空白区切りに直す ◦ Elasticsearchでは同義語の展開のみ行う ▪ whitespace tokenizer + synonym token filter 今回採用した方法
1. Elasticsearchを自前でHostする a. EC2上に構築する b. ECS上に構築する(cookpad mart はこれ) 2. Elastic
Cloudを利用する 3. etc? 他にどんな選択肢があった? • カスタムプラグインを使う? • NEologd や UniDic のような別の辞書を使う? ref: クックパッド開発者ブログ『サービス特性にあった検索システムの設計戦略』
フィルタリングの工夫 - クエリ理解 • word_essence という社内 gem ◦ ある単語がどういう属性なのかを判定できる ◦
例. メニュー名、原材料名、調味料 etc. • 「トマト パスタ」は「原材料+メニュー名」と分かる ◦ フレーズ検索に切り替える ▪ ✕パスタ用トマト ▪ ◦トマト風味の地中海風パスタ
• 「つくれぽ」は人気の「レシピ」に集まりやすい ◦ 単純に並べると、特定の「レシピ」への「つくれ ぽ」に検索結果が偏ってしまう ◦ →「レシピを探す体験」が損なわれる • ebay さんの技術記事を参考に、ページ内の「多様性」
を制御するリランクの仕組みを導入 ランキングの工夫 - Diversify ref: https://tech.ebayinc.com/engineering/diversity-in-search/
リランク後の 検索結果 ランキングの工夫 - Diversify ref: https://tech.ebayinc.com/engineering/diversity-in-search/ 同じ「レシピ」は1ページに1つまで!(制約 条件) 違反したら減点!(ペナルティ)
1: recipe_A 2: recipe_A 3: recipe_B 10: recipe_C 1: recipe_A 3: recipe_B 10: recipe_C 2: recipe_A 元の検索結果 (Top-k) agents ... ...
• cookpad は今、「つくれぽ」をはじめ、サービス全体 のエコシステムの再構築に取り組んでいる • 培ってきた資源を活かしながら、新しい価値を作るこ とに日々試行錯誤している まとめ