【AI100 导读】人工智能将人类的思维转化为程序和算法,用计算机的、高速运行能力来提高效率,在一定程度上能替代人的部分功能。如今,随着人工智能的发展,出现了智能食谱。本篇文章的写作目的是构建一个食物推荐系统,探索全世界的烹饪方法。
我已经5天没有吃饭了,我想念食物也研究食物。我患上了严重的酮症,我的身体已经在消耗自身的能量:我现在就是食物。我想此时,也是挖掘食物模型的最佳时机。
机器智能改变了你我的生活,我们会用 Discover Weekly 播放列表听音乐,看 facebook 上面的新闻,和移动设备上的虚拟助手对话。但是,机器智能为什么还没有改变我们的饮食方式呢?我们能不能调整语言处理算法的要素,深入探究一下食物呢?如果告诉我你想吃什么,我能不能像 Spotify 推荐补充性的音乐一样为你推荐一些互补性的食物呢?
词向量是分析离散数据最有用的一种技术。比如,我们选出牛津词典中170,000个单词,用一个单词(如:food)代表一个向量:那么就会有169,999个0和一个1,而这个1就处在词汇表里该单词的位置上。例子中的“food”一词,也许恰巧处在第29,163位置上,靠近其他以 f 开头的单词,所以“food”的向量为:[0, 0, 0, ..., 0, 0, 1, 0, 0, ..., 0]。
但是,要达到比较单词的目的,还需要其他方面的工作。为了比较文档并对我们的数据有更加深入的了解,我们需要将每个单词进行合计,有超过170,000个的维度,这无疑会花费相当长的时间。那么,有没有更快捷的方法呢?
答案就是词向量。词向量会降低问题的维度,为我们提供了强大的语言表示方法。
我们可以构造出一个语言模型,为每个单词随机分配100个数字。为了训练这个模型,我们运用每个单词的100个随机数字去预测它们的上下文语境。其中,每个单词的“上下文语境”会包含其周围的单词。这样做的中心思想是:上下文语境意味着在相似语境下出现的词,其含义也会相似。我们会对模型不断地做出调整,使每个单词的数字能够更好地来预测上下文里的其他单词。刚开始,随机数字的预测效果并不好。但通过逐渐地调整,先前的100个随机性的数字将越来越有规律,最终将会完全摆脱最初的随机状态。这100个数字将会代表其所属单词的一部分含义:近义词会聚在一起,因为它们会在其他单词的上下文中出现;而意思不同的单词会离得很远(不在同一上下文中)。这样一来,我们采用词向量的方法把单词缩小至100个维度,相比先前的170,000个维度缩小了1000多倍,而且这种用向量来表示的方法也更加适用于语言。
要给食物建造模型的话,我们需要一些食谱。我们可以把食谱中某个要素的上下文定义为食谱中的剩余食物。这就展示了向量的灵活性:通过对上下文定义的小小改变,我们就可以把它运用于完全不同的数据之中。
食物相似性地图
对95,896份食谱进行了向量计算后,我们得到了每种食物100个维度的向量。因为人类无法看见高维度空间,所以我们用近似计算法来查看二维空间内的食物的相似性。
下面是食谱中2,087种原料的相似地图。把鼠标停悬在图上可以看到每个点所代表的食物:
https://jaan.io/files/food2vec_food_embeddings_tsne.html
这个地图可以说非常合理:来自亚洲的食材都汇聚在一起,来自欧洲和北美的食材也一样。
食谱向量地图
通过计算食材向量的平均数,我们可以得到食谱的向量。这里展示的是全球95,896种食谱的地图。将鼠标停悬于某一点就可以看见其对应的食谱,而点击右边的地理位置栏,可以展开或隐藏某些区域。
访问网站:
https://jaan.io/files/food2vec_recipe_embeddings_tsne.html 就可以看到食谱地图,放大后还能看到新的食谱。运用相似性来浏览100k 的食谱难道不是最快的方法吗?
接着有趣的模型就出现了。亚洲食谱都聚在一起,南欧的也是一样。而北欧和美洲的食物分布则比较分散,这或许是因为移民的缘故,也有可能是因为数据有些夸大。
食物相似工具
访问网站:
https://altosaar.github.io/food2vec/#food-similarity-tool 获得相似工具。我们通过观察向量中食物在高维度空间的距离远近来计算食物的相似性。
以下是靠的比较近的食物:
食物类比工具
访问网站:
https://altosaar.github.io/food2vec/#food-analogy-tool 获取食物类比工具。食物类比与单词类比一样,都通过向量来计算。对于“食物A之于食物B,就好比食物C之于食物D”这个类比的目的就是要得出一个合理的食物D。我们可以先把食物B从食物A减去,然后再加上食物C。比如,在向量空间里计算“(培根-鸡蛋)+橙汁”就会得到一个向量,而在我们的食物模型里离这个向量最近的是咖啡。
关于词向量最经典的一个例子就是:(国王-男人)+女人=女王。这是不是很直观?在自然语言里,国王之于男人就好比女王之于女人,但是食物的类比没有这么清晰。通过实践,我们也许可以训练我们的味觉检测器,设想一些假说用于食物测试。我还可以用食谱向量的平均值来表示烹饪向量。
以下这些比较有说服力:
食谱推荐工具
访问网站:
https://altosaar.github.io/food2vec/#recipe-recommendation-tool 获取食谱推荐工具。我们可以用自己的食物模型作为烹饪推荐系统。通过食物的平均向量,我们可以找到有相近向量的食物。
比如,我是一个花生酱三明治的狂热爱好者,当我向系统中输入自己平时喜欢的白面包、黄油、花生酱和蜂蜜时,我得到的推荐首选是:草莓。我从来没有尝试过草莓,但吃起来还是很不错!我也很开心能打破自己的食物规律。当我输入羊肉、茴香和番茄的时候,得出的推荐首选是葡萄干——这也相当合理而且非常有趣呢。但是还有一些其他的推荐就比较奇怪了,所以祝你好运哦。
接下来:
资源
本文作者 Jaan Altosaar 是普林斯顿大学的物理学博士,致力于贝叶斯推理和深度学习的交叉点研究,2016年,与 Google Brain 合作了 Eugene Brevdo,是一名机器学习爱好者。
本文由 AI100 编译,转载请联系本公众号获得授权
编译:AI100
原文链接:https://jaan.io/food2vec-augmented-cooking-machine-intelligence/