ChatGPTさんと食材を分析したりして創作料理を考えてみますよ
はじめに
ChatGPTさんと色々遊んでみようシリーズ
「ChatGPTのcodeinterpreterを、なんか試してみたいなぁ」と思っていました。
そこで、ChatGPTさんにデータを自分で準備してもらって、それを利用して分析を試してみる事にしました。
何かテーマをと考えまして、思いついたのが…
「食材の相性を分析して、新たね創作料理を検討する」
でした!
紆余曲折の過程もご紹介したく、あまり過程をカットせず、なるべくそのままをあえて記載してあります。
読みずらい所多いかと思いますが、ご容赦ください_(._.)_💦
① ChatGPTに食材一覧を書き出してもらう
まずは食材の一覧情報を書き出してもらいました。
こういう無茶ぶりをすると嫌がられますね!(笑)AIハラスメント!
結果下記のような一覧を作ることができました。
② 食材一覧から相性の良い食材のペアを提示してもらう
あとはひたすら頼み倒して下記を生成してもらいました!
③ codeinterpreter機能を活用!相性の良い食材ペア情報を分析
ChatGPT PLUS でpythonのコードを実行できるようになったとの事で試してみました。
# The user has re-uploaded the file. Let's load it again with 'shift_jis' encoding.
with open(file_path, 'r', encoding='shift_jis') as file:
lines = file.readlines()
# Display the first few lines
lines[:10]
RESULT
['あしたば - ごまドレッシング\n',
'あしたば - ごま塩\n',
'あしたば - ほうれん草\n',
'あしたば - サラダドレッシング\n',
'あしたば - ポン酢\n',
'あじ - しょうゆ\n',
'あじ - ポン酢\n',
'あじ - レモン\n',
'あじ - 醤油\n',
'あなご - たれ\n']
import networkx as nx
import matplotlib.pyplot as plt
# Create an empty undirected graph
G = nx.Graph()
# Add edges (pairs of ingredients) to the graph
for line in lines:
# Split the line into two ingredients
ingredient1, ingredient2 = line.strip().split(' - ')
# Add an edge between the two ingredients to the graph
# This automatically adds the nodes (ingredients) as well
# Since this is an undirected graph, it doesn't matter in which order we add the nodes
# Also, if the same edge is added twice, NetworkX will simply ignore the second addition
G.add_edge(ingredient1, ingredient2)
# Draw the graph
plt.figure(figsize=(10, 10))
nx.draw_networkx(G, with_labels=True, node_color='skyblue', node_size=500, edge_color='k')
plt.axis('off') # Hide the x and y axis
plt.show()
うん、どうやら日本語フォントに対応していないみたいですね!
検索するとなにやら方法はあるみたいですが。
(日本語フォントをUPLOADすると良い?らしい)
ほぉ、、、
なんかSUGEEEEEEEEE!それぞれやってみてもらいました。
中心性分析
# Calculate the degree centrality of each node
# Degree centrality of a node is the number of connections it has
degree_centrality = nx.degree_centrality(G)
# Sort the nodes by degree centrality in descending order
sorted_nodes = sorted(degree_centrality.items(), key=lambda x: x[1], reverse=True)
# Display the top 10 nodes with the highest degree centrality
sorted_nodes[:10]
RESULT
[('しょうゆ', 0.10106382978723404),
('レモン', 0.05585106382978723),
('バター', 0.05053191489361702),
('オリーブオイル', 0.045212765957446804),
('ヨーグルト', 0.0425531914893617),
('ポン酢', 0.031914893617021274),
('醤油', 0.031914893617021274),
('ごま油', 0.031914893617021274),
('マヨネーズ', 0.02925531914893617),
('ハチミツ', 0.026595744680851064)]
コミュニティ検出
# We will use the Girvan-Newman method for community detection
from networkx.algorithms.community import girvan_newman
# Compute the communities
communities = girvan_newman(G)
# Get the first few community structures
# Each community structure is a tuple of sets, where each set represents a community
community_structures = []
for i in range(5):
community_structures.append(next(communities))
# Display the number of communities and the nodes in each community for each community structure
community_info = []
for i, community_structure in enumerate(community_structures):
num_communities = len(community_structure)
community_info.append((i + 1, num_communities, [sorted(list(community)) for community in community_structure]))
community_info
RESULT
'マスカルポーネチーズ','マスタード','マッシュルーム','マヨネーズ',
'マロン','マロングラッセ','マンゴスチン','マンゴー',
'ミスオソース','ミニトマト','ミョウガ','ミント','メロン',
'メンタイコ','メープルシロップ','モッツァレラチーズ','モロヘイヤ',
'ヤムイモ','ヨーグルト','ライム','ライ麦','ラクレットチーズ',
'ラザニア','ラズベリー','ラディッシュ','ラム肉','ランチドレッシング',
'ランブータン','レタス','レモン','レモンジュース','レモンチキン',
'レモンティー','レモンバターソース','レモン汁','レンコン',
'レンズ豆','ローストチキン','ローストポテト','ローズマリー',
'ローズマリーソース','ワイン','卵','塩','大豆','小麦粉',
'抹茶','海苔','焼き魚','牛乳','牛肉','玄米','生クリーム','生姜',
'生姜としょうゆ','砂糖','米','胡椒','豆腐','豚肉','酒',
'酢','醤油','鯛','鴨肉','鶏肉','黒蜜'],
['あなご', 'うなぎ', 'たれ', 'タレ'],
['なす', 'みそ', 'ミソ'],
['ウォルナッツ', 'オートミール', 'カラメルソース', 'ステーキ', 'ナッツ', 'ナッツバター', 'バナナ', 'ブルーチーズ'],
['カルダモン', 'チャイ', 'ホットチョコレート', 'ミルクティー'],
['サフラン', 'パエリア', 'ピラフ', 'リゾット'],
['クランベリーソース', 'ターキー'],
['ホタテ', 'レモンバター'],
['バターガーリック', 'ホワイトワイン', 'ムール貝', '白ワイン'],
['きなこ', 'こしあん', 'さとう', 'ぜんざい', '赤豆'],
['うなぎのタレ', '鰻']]),
////////////////////
['あなご', 'うなぎ', 'たれ', 'タレ'],
['あんこ', 'いちご', 'きな粉', 'きな粉パンケーキ', 'もち米', '黒蜜'],
['なす', 'みそ', 'ミソ'],
['ウォルナッツ', 'オートミール', 'カラメルソース', 'ステーキ', 'ナッツ', 'ナッツバター', 'バナナ', 'ブルーチーズ'],
['カルダモン', 'チャイ', 'ホットチョコレート', 'ミルクティー'],
['サフラン', 'パエリア', 'ピラフ', 'リゾット'],
['クランベリーソース', 'ターキー'],
['ホタテ', 'レモンバター'],
['バターガーリック', 'ホワイトワイン', 'ムール貝', '白ワイン'],
['きなこ', 'こしあん', 'さとう', 'ぜんざい', '赤豆'],
['うなぎのタレ', '鰻']]),
以下略
パス分析
from matplotlib import cm
# Create a color map with as many colors as there are communities
color_map = cm.get_cmap('rainbow', len(communities_3))
# Assign a different color to each community
node_colors = []
for node in G.nodes():
for i, community in enumerate(communities_3):
if node in community:
node_colors.append(color_map(i))
break
# Draw the network with the nodes colored by community
fig, ax = plt.subplots(figsize=(10, 10))
pos = nx.spring_layout(G) # Position nodes using Fruchterman-Reingold force-directed algorithm
nx.draw_networkx(G, pos, node_color=node_colors, with_labels=False, ax=ax, node_size=100, font_size=10, edge_color="gray")
# Add labels manually
for node, (x, y) in pos.items():
ax.text(x, y, node, fontsize=8, ha='center', va='center',
fontfamily='Noto Sans JP',
bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.2', alpha=0.6))
plt.show()
う~ん。まだ見ずらい。
# Redraw the network with the nodes of the subgraph
fig, ax = plt.subplots(figsize=(15, 15))
pos_subgraph = nx.spring_layout(subgraph, k=0.15) # Increase the distance between the nodes
nx.draw_networkx(subgraph, pos_subgraph, node_color=node_colors_subgraph, with_labels=False, ax=ax, node_size=100, font_size=10, edge_color="gray")
# Add labels manually
for node, (x, y) in pos_subgraph.items():
ax.text(x, y, node, fontsize=8, ha='center', va='center',
fontfamily='Noto Sans JP',
bbox=dict(facecolor='white', edgecolor='black', boxstyle='round,pad=0.2', alpha=0.6))
plt.show()
ちょっとは見れるようになってきた。
というか、コード書かなくていいの楽~
④ 分析結果を元に創作料理を検討してもらう
↓ 結果 こちらのようになりました。(分析あまり関係ない説)
「レモンとヨーグルトのマリネ」 「レモン」と「ヨーグルト」は次数中心性が高い食材で、両方とも同じコミュニティに属しています。この二つの食材を使って、新鮮な野菜や魚をマリネすることができます。レモンの酸味とヨーグルトのクリーミーさが絶妙に組み合わさり、素材の風味を引き立てます。
「ヨーグルトと醤油のディップソース」 「ヨーグルト」と「醤油」は異なるコミュニティに属していますが、それぞれ次数中心性が高い食材です。ヨーグルトのクリーミーさと醤油の塩味が融合することで、新たなディップソースが作れます。野菜スティックや揚げ物に合うかもしれません。
「レモンとマヨネーズのデザート」 「レモン」と「マヨネーズ」は一見奇妙な組み合わせかもしれませんが、新たなデザートを作る試みとして面白いかもしれません。例えば、レモンの酸味を活かしたケーキに、マヨネーズを混ぜ込むことで、濃厚な風味と柔らかな食感を追加することができます。
「エビとマンゴーのサラダ」 「エビ」と「マンゴー」は一見奇妙な組み合わせかもしれませんが、エビの旨味とマンゴーの甘さ・酸味が新たな味覚を生む可能性があります。スパイシーなドレッシングと合わせると、エキゾチックなサラダになります。
「ツナとブルーベリーのパスタ」 「ツナ」と「ブルーベリー」もまた一見奇妙な組み合わせかもしれません。しかし、ツナの塩味とブルーベリーの甘酸っぱさがマッチすれば、新たな味覚のパスタができるかもしれません。
「モッツァレラチーズとイチゴのカプレーゼ」 「モッツァレラチーズ」と「イチゴ」は、新鮮なチーズのミルキーさとイチゴの甘酸っぱさがマッチする可能性があります。伝統的なカプレーゼにイチゴを加えて、新たな感覚の一品に挑戦してみてはいかがでしょうか。
「アボカドとココアのスムージー」 「アボカド」と「ココア」の組み合わせは、アボカドのクリーミーさとココアの甘さが相まって、風味豊かなスムージーになります。ヘルシーな朝食やデザートとして楽しめます。
「サーモンとココナッツミルクのカレー」 「サーモン」はその旨味が特徴的で、それが「ココナッツミルク」のクリーミーさと相まって、深みのあるカレーが作れます。
「豆腐とブルーベリーのスムージー」 「豆腐」はその滑らかな食感が特徴的で、「ブルーベリー」はその甘酸っぱさが特徴的です。これらを組み合わせたスムージーは、豆腐のヘルシーさとブルーベリーの風味が楽しめる一品になります。
「牛肉とグレープフルーツのカルパッチョ」 「牛肉」の旨味と「グレープフルーツ」の甘酸っぱさが相まって、新感覚のカルパッチョが作れます。オリーブオイルと塩でシンプルに調味すると、素材の味が引き立ちます。
「豚肉とバナナのソテー」 「豚肉」のジューシーさと「バナナ」の甘さが相まって、新感覚のソテーが作れます。ソースには、バナナを潰して作ったピューレと醤油を混ぜ合わせると良いでしょう。
「豚肉とピーチの炒め物」 「豚肉」の旨味と「ピーチ」の甘さが相まって、新感覚の炒め物が作れます。ピーチの甘さが豚肉の脂っぽさを和らげ、バランスの良い一品になります。
「鶏肉とパパイヤのカレー」 「鶏肉」と「パパイヤ」を組み合わせたカレーは、鶏肉の旨味とパパイヤの甘さと独特の風味が絶妙にマッチした一品になります。パパイヤの種を加えることで、ピリッとした辛さも加わります。
⑤ 考え出した創作料理を画像生成
プロンプトを生成する
上記で考え出した創作料理を画像生成AIで再現したいと思います。
まずは最適なプロンプトから生成します。Pluginで下記を使ってみました。
画像生成
SteableDiffusionOnlineを利用して画像生成をしてみました。
→ https://stablediffusionweb.com/
創作料理紹介
「レモンとヨーグルトのマリネ」
これさ、どこを食べればよいの?(笑)
「レモンとマヨネーズのデザート」
見た目は良いけどね(笑)
マヨである必要はないんじゃないかな。チーズじゃダメ?
「エビとマンゴーのサラダ」
ん~、なくはないかも。
「ツナとブルーベリーのパスタ」
いやぁ~きつそう(笑)
かの"山"のメニューに有りそう。
「モッツァレラチーズとイチゴのカプレーゼ」
これはいいじゃないかと、ちょっとは思う。
「アボカドとココアのスムージー」
ちょっと勇気いる組み合わせだ、コレ。
「サーモンとココナッツミルクのカレー」
探せばありそう。
「豆腐とブルーベリーのスムージー」
ソイラテ風のクリーミーさとブルーベリーという解釈なら、なくはないかも。
「牛肉とグレープフルーツのカルパッチョ」
なんか、牛肉がグレープフルーツっぽく生成された(笑)
っていうか、牛肉ってさ、カルパッチョにしていいんですか??
「豚肉とバナナのソテー」
「豚肉とピーチの炒め物」
Oh…いやぁ…
きつそう(笑)
桃はそのまま食いたいよ。
AIによるデモムービー作成も試してみる
Runwayという動画生成AIサービスとMusicGENという音楽生成AIサービスでこのようなデモムービーも作ってみました。
おわりに
いかがでしたでしょうか?
今回はあえて遠回しに、試行錯誤で色々経て創作料理を試してみました。
正直分析の意味は今回はあまりなかったような気がします(笑)
(データ自体もChatGPTで生成してますし、大元からあやふやですしね)
ただ、エンタメ気分でこんなアプローチしても面白いかなと。
ChatGPT 色々できてOMOSHIREEEEEEEE!というのは本当思いました。
みなさまも色々遊んでみましょう!