过年看啥电影?这款用卷积神经网络创建的电影推荐系统告诉你
在Netflix(成立于1997年,是一家在线影片租赁提供商,主要提供Netflix超大数量的DVD并免费递送,总部位于美国加利福尼亚州洛斯盖图。)上完成你最喜欢的系列或在YouTube上的视频,你必须做出重要的决定,接下来要看什么?大多数情况下,你可以从你最喜爱的视频点播平台的推荐系统获得帮助。这些平台花费了大量时间和精力(请参阅Netflix推荐系统:针对YouTube推荐的算法,商业价值以及创新和深度神经网络),使你的用户体验尽可能愉快,并增加在平台上的总观看时间。但即使有这些帮助,你如何选择?我是会选择一个最吸引我的视频缩略图/海报。根据这个,本文会建立一个推荐机制,我们一起来看看是什么样子的。
主要想法
主要的想法是创建电影海报图像数据集,并从预先训练的卷积神经网络(ConvNet)中提取特征,并在ImageNet上进行训练。这里将使用提取的功能来推荐5个最相似的电影海报,并给出一个目标电影海报。
第1步:网络上搜集电影海报
首先需要一些电影海报,可以在Kaggle上使用TMDB 5000电影数据集。通过数据集提供的信息,使用网络抓取来从IMDB中使用Python库美化Soup下载海报图像。将海报 id添加到每个图像的名称中,并将所有4911个成功下载的图像存储在一个文件夹中。
第2步:“推荐人”
根据海报图像的视觉方面找到类似的电影海报,在这儿会使用到ConvNets。 ConvNets目前是视觉识别领域的首选模型。对于推荐人来说,不会从头开始训练ConvNet,但在ImageNet上使用预先训练好的模型。从而节省时间,拥有最先进的模型。这就是所谓的“迁移学习”。推荐人将使用Inception-v3模型。与VGG16或VGG19型号相比,选择此型号的原因之一是相对较小的输出阵列。让处理内存中的所有内容变得容易,识别形状、模式等的预先学习的图层将有可能产生有意义的建议。出于这个原因,删除了输出层,并将其余的ConvNet作为电影海报的特征提取器。请看这里的一个例子,每层或节点可以根据人脸图像数据集学习。
对于推荐的实现,使用Keras和TensorFlow作为后端。对于数据集中的每个图像,保存模型的最后一个隐藏层的扁平输出数组。利用这个新的特征数组,可以根据数组之间的欧氏距离来计算目标图像/海报的最近邻的x个数目。为了将结果与基线进行比较,还将使用给定目标海报的原始扁平图像阵列显示x最近邻居。
选择模型功能层:
从图像中提取的特征:
寻找最近的邻居:
第三步:结果
让我们来看看基于詹姆斯·邦德电影“幽灵”的建议。这里将根据原始的扁平图像阵列和基于Inception-v3模型的提取的特征数组的基础上显示5条建议。
虽然没有明确的评估指标定义或利用A / B测试来查看哪种推荐方法是最好的,但直观地看,模型结果似乎略好一些。该模型建议甚至一个额外的邦德电影,永不言败作为第四个建议。让我们看看另一部电影,《夺宝奇兵4》。
该模型建议印第安纳琼斯和最后的远征作为其第一个建议,看起来非常好。其他的则不太合适,但看起来ConvNet的特性比仅使用原始图像数组作为输入表现得更好。
显示结果功能如下:
步骤4:使用鞋子图像验证推荐人
现在我们已经看到了电影海报的效果,让我们使用一个不同的数据集。像亚马逊、Zalando和其他网上商店的网站使用类似的技术来推荐产品给你。例如,你正在寻找的物品缺货,他们想要推荐一个类似的产品给你。所以让我们使用鞋子图像。我使用的数据集是从Zappos.com收集的目录图像的UT Zappos50K。我用了1882个鞋子图像。
所以让我们在这个数据集上重复相同的方法,看看“黑色高跟鞋”的效果如何:
基于提取的功能看起来像一些很好的建议,模型清楚地学会区分鞋的不同模式。而正常阵列的建议显然不知道开放式鞋是什么。运动鞋如何?
那么为什么这些结果比电影海报更好呢?
Inception-v3模型在ImageNet上训练以区分1000个类别的预测。模型所训练的图像每个图像有一个对象/类。被训练的1000个班之一甚至被称为“跑步鞋”。为每个图像预测一个对象是该模型所训练的内容,应该是该模型最擅长的。而电影海报在对象数量、文字等方面则要复杂得多。因此,使用在不同的图像数据集上训练的模型可能会为电影海报带来更好的效果。
最后的言论
正如我们已经看到的,创建一个电影推荐只使用电影海报和结合预先训练的ConvNets会产生一些好的(ish)建议。结果稍好于仅使用原始图像数组。对于鞋子,这种方法已经显示出一些非常好的建议。看到ConvNets的纯视觉识别功能已经可以做到这一点很有趣。根据预期的目的或行业推荐人的创建,它似乎是一个很好的附加功能,添加到用于开发最先进的推荐系统的功能集。