教養知識としてのAI

【記事更新】教養知識としてのAI 〔第8回〕レシピサービスとAI


第8回
レシピサービスとAI
AI for Recipe Service

原島  純  クックパッド株式会社
Jun Harashima Cookpad Inc.

Van Huy(同上)
Huy Van

深澤 祐援 (同上)
Yusuke Fukasawa

Keywords: recipe service, natural language processing, machine learning.

1.は じ め に

 今日,レシピサービスは特に珍しい存在ではありません.国内にはクックパッドや楽天レシピ, クラシル,DELISHKITCHEN などのレシピサービスがあります.また,海外にも多くのレシピサービスがあります.これらのサービスにはさまざまなレシピがあり,多くのユーザがいます.例えば,2020 年6月末の時点で,クックパッドだけでも337 万品のレシピがあり,7 400 万人のユーザがいます(国内のレシピ数および月間利用者数).レシピサービスは私達の食卓を支えるインフラの一つになったといっても過言ではないでしょう.
 そして,2020 年現在,本連載のテーマであるAI ももはや珍しい存在ではありません.今や「AI」を耳にしない日はありません.AI の専門家だけでなく,一般の人々が「AI」を口にするようになりました.AI はさまざまな分野でその価値を発揮すると期待されています.本連載の第2 回で紹介されたAI マップβでもさまざまな分野がキーワードとして配置されています.これらの分野で価値を発揮するにつれ,AI は私達の生活においてさらに当たり前の存在になっていくでしょう.
 さて,本稿ではレシピサービス(クックパッド)におけるAI の活用事例を紹介します.本連載の第3 回から第6 回ではゲームやマテリアルインフォマティクス,造船設計,スマートスピーカにおけるAI の活用事例が紹介されました.AI が価値を発揮しつつある分野の一つとして今回はレシピサービスをピックアップします.

2.レシピ分類

 レシピサービスにおけるAI の活用事例として最も基本的なのがレシピ分類です.これは,あらかじめ定義した何らかのカテゴリーにレシピを分類するものです.その結果は実際のサービスのさまざまな場所で利用されています.
 例えば,図1 はクックパッドにおけるレシピのブックマーク画面です.各カテゴリー(図では「パン」)をクリックすると,自分がブックマークしたレシピの中からそのカテゴリーに分類されたレシピを検索することができます.これがレシピ分類です.
 レシピ分類の裏側はどうなっているのでしょうか.理屈としては,すべてのレシピに「パン」や「お菓子」などの名札(以下,タグ)が付与されていれば,レシピ分類を実現できます.しかし,これを人手で行うのは不可能です.これは,レシピが数百万品にも及ぶためです.そこでAI の出番です.クックパッドでは人手でタグを付与した1 000 品程度のレシピでSupport Vector Machine などのモデルを学習しています.そして,すべてのレシピにこのモデルを適用することで,レシピにタグを付与しています.

レシピ分類の一例
図1 レシピ分類の一例

3.材料名正規化

 次に紹介するのは材料名正規化です.ユーザ投稿型のレシピサービスでは材料名の表記がレシピごとに違います.例えば,同じ「しょうゆ」でも「ショウユ」と表記されることもあれば,「しょう油」や「お醤油」,「♡ しょう油」のように表記されることもあります.クックパッドには100 種類以上のバリエーションの「しょうゆ」が存在します.これらを同じ「しょうゆ」として認識するのが材料名正規化です.材料名正規化の結果はレシピのカロリーを計算する際などに利用されます.
 材料名正規化ではEncoder-Decoderを利用しています*1.このモデルは,もともと機械翻訳用にGoogle の研究者らによって2014 年に提案されたものです[Sutskever 14].機械翻訳ではEncoder に原言語の文を入力し,Decoder で目的言語の文を出力します.材料名正規化では,図2 のように,Encoder にレシピ中の材料名(例:♡しょう油)を入力し,Decoder で正規化後の材料名(例:しょうゆ)を出力します.人手で正規化した1 万程度の材料名でモデルを学習し,すべての材料名(クックパッド全体で数百万)にこのモデルを適用することで,材料名を正規化しています.

材料名正規化のモデル
図2 材料名正規化のモデル

*1 詳しく知りたい方は, 発表論文[Harashima 18] をご覧ください.

4.人 数 換 算

 人数換算もレシピサービスならではのAI の活用事例の一つです.レシピにはその分量が記載されています.多くの場合,これは「N 人分」(N = 1, 2, …)です.しかし,レシピによってはこれが「M 個分」や「M 枚分」だったりします.「Mcm タルト型」といったものもあります.料理によって分量の単位が違うのは当然です.しかし,何人分かがわからないと,レシピを比較する際に不便です.そこで,レシピ中のタイトルや分量からN を推定するのが人数換算です.
 人数換算で利用しているモデルは図3のようなものです.Encoder にタイトル(例:ツナポテトのミニコロッケ☆お弁当にも)や分量(例:8 個分)を入力し,DenseLayer でN(例:4)を出力します.非常にシンプルなモデルですが,これでもモデルの推定結果の60% 以上が人間の推定結果と一致します.ただし,まだタイトルの情報などをうまく利用できていないこともわかっており,さらなる改善が必要です*2

人数換算のモデル
図3 人数換算のモデル

*2 より詳しくは発表論文[Harashima20] をご覧ください.

5.投 稿 補 助

 最後に紹介するのは投稿補助です.図4 はクックパッドのレシピ投稿画面です.タイトル(例:図では「おいしいタンドリーチキンˆ_ˆ」)を入力すると,そのレシピで使用されていそうな材料が表示されます.ユーザは表示された材料をクリックするだけで,これらを入力することができます.これが投稿補助です.クックパッドのようなユーザ投稿型のレシピサービスではこのような補助が非常に重要です.
 投稿補助でもNeural Network を利用しています.まず,あらかじめ,クックパッドのすべてのレシピのタイトルをfastText*3 でベクトル化しておきます.ユーザが投稿画面でタイトルを入力したら,これもfastText でベクトル化します.そして,ベクトルが類似するタイトルのレシピを収集し,それらの材料を画面に表示します.研究段階ではありますが,同様の方法でレシピの手順の入力を補助するモデルも開発中です.

投稿補助の一例
図4 投稿補助の一例

*3 単語の「意味」をベクトルとして学習する「分散表現学習」と呼ばれる手法の一つです.Word2Vec などが有名です.fastText は,Facebook の研究者らによって開発され[Bojanowski 17],オープンソースとしてライブラリが公開されています.

6.お わ り に

 本稿ではレシピサービスにおけるAIの活用事例を紹介しました.これらはどれもここ数年の事例で,最近のAI の発展をベースにしています.一方,AI の発展はとどまるところを知りません.毎日のように新しい成果が発表され,世の中を驚かせてくれます.レシピサービスにおけるAI の活用はまだまだ始まったばかりです.今後もご期待ください.

◇ 参 考 文 献 ◇

[Bojanowski 17] Bojanowski, P., Grave, E., Joulin, A. and Mikolov, T.: Enriching word vectors with subword information, Trans. of the Association for Computational Linguistics, Vol. 5, pp. 135-146(2017)
[Harashima 18] Harashima, J. and Yamada, Y.: Two-step validation in characterbased ingredient normalization, Proc. 10th Workshop on Multimedia for Cooking and Eating Activities(CEA 2018), pp. 29-32(2018)
[Harashima 20] Harashima, J., Hiramatsu, M. and Snajo, S.: Calorie estimation in a real-world recipe service, Proc. 32nd Annual Conf. on Innovative Applications of Artifi cial Intelligence(IAAI-20)(2020)
[Sutskever 14] Sutskever, I., Vinyals, O. and Le, Q. V.: Sequence to sequence learning with neural networks, Proc. 27th Int. Conf. on Neural Information Processing Systems(NIPS 2014), pp. 3104-3112 (2014)