AIの力でオリジナルのカクテルを作る!

概要

あけましておめでとうございます。久しぶりの投稿です。

この前ちょっとおしゃれなバーに行ったとき、たくさんの種類のカクテルがありました。

その時は知っているものを頼みましたが、用意されている多種のお酒などの材料を見て、いったい何通りの組み合わせが存在するのだろうと思い、帰ってからwikipediaでカクテルのレシピを眺めてみました。

名前もおしゃれで種類もたくさんあり、これから少しずつ飲んでいこうと思います。

さて、この記事はそんな魅力的なカクテルのレシピをAIで新規開拓できないか、という試みです。

やっていきます

pythonを用いて書いていきます。

ライブラリはTensorflowを使います。

学習用のデータはhttps://www.thecocktaildb.com/のものを使用しています。

424のカクテルレシピを学習データとして用います。(後に触れますが、データ数としては少ないです)

ざっくりとした説明にはなりますが、2段階に分けて学習を行いました。

①カクテル名を、その特徴を表した数値のベクトル(Word Embedding)に変換する
②カクテル名のベクトルとレシピを対応付けて学習する

カクテル名

カクテル名のベクトル

カクテルのレシピ(用いている材料)

つまったところ

複数のアウトプットをもつモデルをtensorflowで作る場合には、Functional APIを使う必要があります。

(Sequentialモデルで定義しようとして困りました。)

Inputに対して10個の出力層に接続しています。下記のように書きました。

また、このモデルに対して、学習用のデータは各名前(Ingredient1, Ingredient2…)に対応付けて渡す必要があります。

 

結果

カクテル名「Let’s go party」
“Let’s go party” . . .
[‘Scotch:45 ml ‘ ‘Light cream:10 ml ‘ ‘Water:600 ml ‘]
Scotchが45mlにLight cream(生クリームの一種)を入れて、600mlの水で割った飲み物です(?)
パーティーの前に水を飲んでおきましょう。

カクテル名「Hungry」
“Hungry” . . .
[‘Gin:45 ml ‘ ‘Apfelkorn:20 ml ‘]
Ginが45mlと、Apfelkorn(Wikipediaによると小麦の蒸留酒にリンゴをブレンドしたリキュールらしい)20mlのカクテルです。度数が高いのでお腹が空いたときに飲むものではなさそうです。
もうカクテルのネーミングに意味なんて感じなくていいと思います。

カクテル名「2023」
“2023” . . .
[‘Whiskey:20 ml ‘ ‘Allspice:15 ml’]
Whiskey 20mlに、Allspice(Wikipediaによると、シナモン・クローブ・ナツメグを併せたようなスパイスらしい)を15mlかけたカクテルです。飲めるのか?

 
やる前から気づいていましたが、すぐに過学習してしまいます。上記のレシピは適当な段階で学習を止めて出力しています。

入力の”カクテル名の持つ意味の複雑さ”(=word embeddingの次元数の多さ)と、出力の”レシピの種類の少なさ”の2点が大きな原因と思います。

Word Embeddingの考え方がとても面白いと思っていて、何かに応用できないかと思っているのですが、どうにもいい対象が見つかりませんね。

以前、「BitCoinの価格変動をニュースの見出しデータセットを用いた多変量LSTMで予測する」でも使いましたが、この時も上手くいきませんでした。

何か面白そうな題材があったら教えてほしいです。

参考

コメント