Slide 1

Slide 1 text

新規事業クックパッドマートを 支える機械学習の技術 深澤祐援 / 山口泰弘 研究開発部 1

Slide 2

Slide 2 text

Speaker.1: Yusuke Fukasawa 2 ● 2019年に中途入社 ● 機械学習エンジニアとしてモデルの実験開発・API開発・ 研究発表など関係することを何でもやる ● NLP・レコメンドが好き ● 好きな料理は餃子 🥟

Slide 3

Slide 3 text

Speaker.2: Yasuhiro Yamaguchi 3 ● 2021年に新卒入社 ● 自然言語処理を中心に機械学習モデルの開発・ サービスへの導入や言語資源の整備などを行う ● 最近はレシピ検索システムにも関わっている ● イタリア料理にハマっている

Slide 4

Slide 4 text

クックパッドマートで 機械学習をやる 4

Slide 5

Slide 5 text

なぜやるのか? 5

Slide 6

Slide 6 text

6 ユーザ体験を向上させ 事業をさらに成長させるため

Slide 7

Slide 7 text

なにをやる? 7

Slide 8

Slide 8 text

注文 出品 配送 受け取り レビュー

Slide 9

Slide 9 text

注文 出品 配送 受け取り レビュー レコメンデーション

Slide 10

Slide 10 text

注文 出品 配送 受け取り レビュー レコメンデーション レビューチェッカー

Slide 11

Slide 11 text

注文 出品 配送 受け取り レビュー レビューチェッカー レコメンデーション キーワードサジェスト

Slide 12

Slide 12 text

本日お話する 3つのコンポーネント 12 ● レコメンデーション ● レビューチェッカー ● キーワードサジェスト

Slide 13

Slide 13 text

13 ● レコメンデーション ● レビューチェッカー ● キーワードサジェスト

Slide 14

Slide 14 text

クックパッドマートにおける レコメンデーション 14 ● アイテムに対するレコメンデーションを出し合わせ 買い機会を創出する ○ 合わせて購入されるアイテムの履歴を学習 ○ 「よく一緒に購入されている商品」として表出

Slide 15

Slide 15 text

クックパッドマートにおける レコメンデーション 15 ● ユーザへのレコメンデーションでついで買い機会 を創出する ○ ユーザの購買履歴を学習 ○ 「こんな商品もあったんだ」と感じてもらいたい

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

17 RecVAE KL Divergence User Rating Matrix μ log σ^2 User Rating Matrix log σ^2 Cross-Entropy Loss μ Encoder Weights: θ_old Dropout rate: 0 Encoder Weights: θ Dropout rate: 0.5 Decoder Weights: θ Predicted User Rating Matrix

Slide 18

Slide 18 text

18 工夫したこと: 1 精度以外の指標にも着目する

Slide 19

Slide 19 text

工夫したこと.1 19 ● 精度以外の指標にも着目する ○ レコメンドの順位を評価するNDCGと合わせて、以下の指標を特に注視 ■ Item Coverage ● レコメンデーションが偏っていないか ■ Average Popularity ● 人気商品ばかりが上位に並んでいないか ○ 学習にかかる時間

Slide 20

Slide 20 text

20 MacridVAE NDCG: ○ ItemCoverage: ○ AveragePopularity: × Training Time: × RecVAE NDCG: ○ ItemCoverage: △ AveragePopularity: △ Training Time: ○

Slide 21

Slide 21 text

21 工夫したこと: 2 自分でレコメンド結果をたくさん眺める

Slide 22

Slide 22 text

工夫したこと.2 22 ● 定性評価を怠らない ○ 推薦結果をたくさん グッと睨む ○ Beyond Metrics ■ アルゴリズムの 性格を理解する カバレッジは低いが サーモンに玉ねぎ → カルパッチョだ! 合わせ買いしやすい カバレッジは高いけど サーモンに真鯛 → 美味しそうだけど 役割が似てる? 脳内会議 (玉ねぎ) (真鯛刺身) RecVAE (ItemCoverage: 0.3) Item2Vec (ItemCoverage: 0.5)

Slide 23

Slide 23 text

23 レコメンデーション: サマリー ● Item-to-Item, User-to-Item のレコメンドを実装 ● 工夫1: 精度以外の指標もよく見る ● 工夫2: モデルを定性的に分析し、数字以上に理解する

Slide 24

Slide 24 text

24 ● レコメンデーション ● レビューチェッカー ● キーワードサジェスト

Slide 25

Slide 25 text

ユーザレビューの半自動チェック 25 ● よかった/ざんねん 商品レビュー ● “よかった”レビューとして投稿されたが内容 が”よかった”ラベルには適さない レビュー を監視したい

Slide 26

Slide 26 text

ユーザレビューの半自動チェック 26 ● レビューテキスト・投稿画像それ ぞれをスコアリング ● しきい値 → Slack 通知 ● 最終的に hide するかどうかは CS の方による手動 ○ 業務負担の削減が目的 熟れ過ぎて包丁で剥けませんでした 美味しかったのですが 少し変色しているところがありました とても美味しいしらすでした!

Slide 27

Slide 27 text

ユーザレビューチェッカーを高速に実装する 27 ● 半自動監視の仕組みが、レシピサービスのつくれぽに対して既に存在 している ○ 画像: 「料理・食べ物画像かどうか」を判定するモデル ○ テキスト: つくれぽのメッセージについて、不適切かどうかをスコアリングす るモデル ● レビューチェックを素早く実装するために、似た仕組みのこれらを活用

Slide 28

Slide 28 text

レビューチェック: 投稿画像 28 ● 「投稿された画像が食材・料理写真かどうか」を判定する ○ つくれぽのチェックと同じ EfficientNet B6 Feed-forward Network Food-or-Not score Target Image

Slide 29

Slide 29 text

29 BiLSTM Max-Pool Avg-Pool Sum Concat Feed-Forward fastText よかった/ざんねん ● 過去に投稿されたレビューのコメ ントからよかった/ざんねんを予測 するように学習 ● Global/Localな特徴を捉えるため に複数のPoolingを導入 レビューコメント レビューチェック: テキスト

Slide 30

Slide 30 text

30 レビューチェッカー: サマリー ● レビューチェックするモデルを高速に構築 ● 画像・テキストどちらもレシピサービス向けに構築していたものを活用 ○ 画像: food-or-not を判定 ○ テキスト: モデルの構造はそのままに、マートのデータで再学習

Slide 31

Slide 31 text

31 ● レコメンデーション ● レビューチェッカー ● キーワードサジェスト

Slide 32

Slide 32 text

商品の内容を表す「キーワード」を紐づけたい 32 ● クックパッドマートの商品名は多様 ○ 商品名は出品者によって自由に入力される ○ 商品名に表記揺れ・キャッチコピーなどが含まれる ○ 商品の実態を機械的に判断することが困難 ● 商品のタイトル等から実態を表す食材キーワードを付与したい ○ 愛知県産 グリーンアスパラ → アスパラガス ○ 甘くて美味しいシルクスイート → さつまいも

Slide 33

Slide 33 text

商品の内容を表す「キーワード」を紐づけたい 33 ● クックパッドマートの商品名は多様 ○ 商品名は出品者によって自由に入力される ○ 商品名に表記揺れ・キャッチコピーなどが含まれる ○ 商品の実態を機械的に判断することが困難 ● 商品のタイトル等から実態を表す食材キーワードを付与したい ○ 愛知県産 グリーンアスパラ → アスパラガス ○ 甘くて美味しいシルクスイート → さつまいも

Slide 34

Slide 34 text

食材キーワード予測における課題 ● 扱う商品のバリエーションの多さ ○ 1万以上の商品が出品されている ○ あまりスーパーなどで見かけない商品もあり、種類の分布はロングテール ● 商品名の表記揺れ ○ 漢字・かな・略称 : 豚肉小間切れ /豚コマ / 豚小間肉 ○ 食材名・品種名の違い : じゃがいも / メークイン / キタアカリ ● Fine-grained な分類の必要性 ○ 同じ「牛肉」でも、「ステーキ用」や「切り落とし」などの区別が必要 ○ 「加熱用」「生食用」の区別も 34

Slide 35

Slide 35 text

キーワード予測モデル ● ペアになる商品名・キーワードを 用いて対照学習 ● レシピデータで学習した単語埋め 込みを用いて表記揺れを吸収 ● 商品名・キーワードの記述の 対応を考慮する注意機構 35 “単語埋め込みを利用した商品に対するキーワードの予測 ” 言語処理学会第 28回年次大会 (NLP2022)

Slide 36

Slide 36 text

管理画面におけるキーワード提案 ● 商品名から食材キーワードを予測するAPIサーバーを作成 ● クックパッドマートの管理画面にモデルの予測結果を出力 36

Slide 37

Slide 37 text

37 キーワードサジェスト サマリー ● 機械学習モデルを用いた商品への食材キーワード提案 ● 料理ドメインの単語埋め込み+注意機構で多様な表記 ・Fine-grainedな分類に対応 ● 商品管理画面にキーワードサジェスト機能を導入

Slide 38

Slide 38 text

まとめ 38 ● レコメンデーション … バランスを表す指標・定性評価の重要性 ● レビューチェック ... 高速に通知機能を実装 ● キーワードサジェスト … 多様な表記・分類に対応 ● 今後も機械学習を使って、クックパッドを大成長させます 💪

Slide 39

Slide 39 text

No content