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
開発に寄りそう自動テストの実現
goyoki
2
1.6k
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
480
Navigation 3: 적응형 UI를 위한 앱 탐색
fornewid
1
510
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
570
CSC307 Lecture 01
javiergs
PRO
0
630
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
150
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
200
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
320
ZJIT: The Ruby 4 JIT Compiler / Ruby Release 30th Anniversary Party
k0kubun
1
300
gunshi
kazupon
1
130
AIエージェントの設計で注意するべきポイント6選
har1101
6
2.8k
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
210
Featured
See All Featured
HDC tutorial
michielstock
1
280
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
79
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
220
Evolving SEO for Evolving Search Engines
ryanjones
0
89
How to make the Groovebox
asonas
2
1.9k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
Mind Mapping
helmedeiros
PRO
0
43
How to Talk to Developers About Accessibility
jct
1
92
[SF Ruby Conf 2025] Rails X
palkan
0
660
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
30
End of SEO as We Know It (SMX Advanced Version)
ipullrank
2
3.8k
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 は今、「つくれぽ」をはじめ、サービス全体 のエコシステムの再構築に取り組んでいる • 培ってきた資源を活かしながら、新しい価値を作るこ とに日々試行錯誤している まとめ