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
680
新「つくれぽ」検索の開発について/Cookpad Tech Kitchen#24
Yusuke Naito
August 21, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
ABEMA iOS 大規模プロジェクトにおける段階的な技術刷新 / ABEMA iOS Technology Upgrade
akkyie
1
220
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
300
複数のAWSアカウントから横断で 利用する Lambda Authorizer の作り方
tc3jp
0
120
Swift Testingのモチベを上げたい
stoticdev
2
150
生成AIで加速するテスト実装 - ロリポップ for Gamersの事例と 生成AIエディタの活用
kinosuke01
0
130
機能が複雑化しても 頼りになる FactoryBotの話
tamikof
1
220
Lambdaの監視、できてますか?Datadogを用いてLambdaを見守ろう
nealle
0
330
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
640
Introduction to kotlinx.rpc
arawn
0
770
PRレビューのお供にDanger
stoticdev
1
240
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
230
新宿駅構内を三人称視点で探索してみる
satoshi7190
2
120
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
The Invisible Side of Design
smashingmag
299
50k
Embracing the Ebb and Flow
colly
84
4.6k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
GraphQLとの向き合い方2022年版
quramy
44
14k
Done Done
chrislema
182
16k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Designing for humans not robots
tammielis
250
25k
Producing Creativity
orderedlist
PRO
344
40k
Building Applications with DynamoDB
mza
93
6.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
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 は今、「つくれぽ」をはじめ、サービス全体 のエコシステムの再構築に取り組んでいる • 培ってきた資源を活かしながら、新しい価値を作るこ とに日々試行錯誤している まとめ