OiCyサービス(開発中)の裏側 〜レシピのMRR化〜

f:id:ShinyaOhtani:20180907180851p:plain
Smart Kitchen Summit Japan 2018での様子 : 左からクックパッドの住、金子、大谷(私)

こんにちは、研究開発部のスマートキッチングループの大谷です。 私はスマートキッチンサービス"OiCy"の進むべき方向を考えつつ技術に落とし込む役割を担ってます。 その過程で見つかった大きな技術課題レシピのMRR化(Machine Readable Recipe)について紹介いたします。

レシピのMRR化

先日Smart Kitchen Summit Japan 2018でクックパッドはスマートキッチンレベルを発表しました。 スマートキッチンレベルは、人間がすべての調理タスクを実行するレベル0から始まり、レベルが上がるにつれキッチンの機器から人間への支援の度合いが増え、レベル4では全自動、そして最高位のレベル5では人間と機器が協調して調理できると定義しています。

クックパッドでは、OiCyサービスを通じて最高位のレベルである「人間と機器が協調して調理できるスマートキッチンの世界」を実現しようとしています。

f:id:ShinyaOhtani:20180907174003p:plain
スマートキッチンレベル : レベル5

人間と機器が協調して調理できるスマートキッチンを目指すためにまず越えなければならない課題のひとつは、 レシピを機器が理解できるように機械可読性の高いレシピ(Machine Readable Recipe)に変換すること、 すなわちレシピのMRR化です。

人間が読むのに適した現在のクックパッドレシピのままでは、機器がガスコンロの火力すら読み取ることが困難であり、 人間と機器が協調して調理することなど到底できません。 そこでクックパッドではOiCyサービスを通じてレシピをあらかじめ構造化し機械が解釈しやすい状態にしたレシピを提供しようとしています。

f:id:ShinyaOhtani:20180907174528p:plain
OiCyサービス : レシピを機器が読める形式にして提供 (開発中 2018/08現在)

人間と機器が協調するスマートキッチン

さてそれでは将来のスマートキッチンの機器がレシピから読み取りたい情報とはどのようなものでしょうか。 整理するために料理の基本工程を書き出してみます。

f:id:ShinyaOhtani:20180910124514p:plain:w400
調理工程

他の分類もあるかもしれません。分類の方法はさておきこのように料理工程を書き出してみると、 将来、人間と協調しながら動作してほしい機器は多岐にわたることがわかります。 また機器が多岐であるため、機器が必要とするレシピ情報は更に多岐にわたることが想像されます。

例えば近い未来のコンセントモデルとしてクックパッドが発表したOiCy Tasteが行っている「下処理::下味::調味料をあわせる」では 一度に利用する調味料の種類分量をレシピから読み取ることが求められますし、 また、現代の調理機器の代表格である「本処理::加熱の種類::レンジ加熱」では、 レンジの出力(600Wなど)や時間、電子レンジに入れる材料などをレシピから読み取ることが求められるでしょう。

このような情報をすべて手作業で読み解いて準備することはレシピの数から考え現実的ではありません。 クックパッドでは自然言語処理等を使った自動化を検討しています。

調味料サーバ用途の情報抽出

f:id:ShinyaOhtani:20180907174218p:plain:w300
材料欄

クックパッドのレシピの材料欄の記入は自由度が高いため、「醤油」でも「しょうゆ」や「しょう油」と様々な記述ができます。 また一行に「醤油・みりん・酒・酢」 : 「各大さじ1」などという記述がされていることもあります。 漢字・平仮名や意味の同じ別表現を正規化されたひとつの表現として扱うにはこの記事 で触れている技術を使って機器が読み取りやすい形に変換するようにしています。

あとは一行に「醤油・みりん・酒・酢」と記載されているような特殊ケースや、 「大さじ1」や「大1」など非常に豊かな多様性ある表記の多い単位部分の扱いも難しいところだったのですが、 いくつかのルールを用意することで調味料サーバOiCy Tasteでは9割以上のレシピで正しく動作するようになりました。 エラーケースとしては人間でも理解に苦しむ「オイスターソース : 小さじ1・1/2」などが残っています。 初期検討段階なのでルールベースで処理していますが、この辺は随所で今後機械学習の視点を入れて更に高性能にしたいところです。

少し余談ですが初期検討段階で意識すべきは、課題がざっくりとどのくらいの難易度で、 どんな前処理でどのくらい問題が簡単になるのかといった課題の特徴をクイックに発見することにあると考えています。

そのため初期検討段階では性能を追い求める作業はしません。かわりに性能評価のためのアノテーションと評価環境を作ることは必須であり、時間を割いて構築しています。 性能評価環境と課題の特徴に関する知見さえあればあとで機械学習などを使ってじっくり性能向上を図ることもできます。

電子レンジでの温め用途の情報抽出

f:id:ShinyaOhtani:20180907174006p:plain:w300
各ステップの文章

現代の調理機器の代表格である電子レンジについても情報抽出を試みてみました。 ルールベースの自然言語処理でレシピの各調理ステップの文章から、電子レンジを使うステップなのかどうかの判別は精度95%、再現率100%の性能であることがわかりました。

  • 例:

スープ皿に水、コンソメ、玉ねぎを入れラップをします。500Wで5分、ひっくり返して皿に7分

  → use_microwave

また同様にルールベースの自然言語処理で電子レンジの設定(ワット数と時間)や電子レンジにかける対象物を認識させてみましたところ、設定: 精度90% 再現率95%, 対象物: 精度81% 再現率85%の性能でした。

  • 例:

スープ皿に水、コンソメ、玉ねぎを入れラップをします。500Wで5分、ひっくり返して皿に7分

  → [500W, <300sec, 420sec>, 水+コンソメ+玉ねぎ]

MRR化の今後

将来のスマートキッチンの機器が必要とする情報は、それぞれバラバラのMRRとして用意されるのではなく、 理路整然と構造化され、情報が増えても理解しやすい構造に保存されます。詳細は述べませんがMRRは面白い構造をしています。

まだまだ情報抽出課題は山のように残っています。 もしMRR化やクックパッドの研究開発に興味がある方はぜひ私達と一緒に開発してみませんか?