对图像分析以生成推荐的兴趣每天都在增长。 我们决定弄清楚这个趋势主题带来的真实性。 我们谈论测试使用深度学习(Deep Learning)来改进相关产品的建议。

在本文中,我们描述了应用图像分析技术来改进相关产品算法的经验。 您可以通过两种方式阅读它:对使用神经网络的技术细节不感兴趣的人可以跳过有关创建数据集和实现解决方案的章节,而直接进行AB测试及其结果。 对于那些对诸如嵌入,神经网络层等概念有基本了解的人,整个材料将很有趣。
图像分析背景下的深度学习
在我们的技术堆栈中,深度学习非常成功地用于解决一些问题。 一段时间以来,我们不敢在图像分析的上下文中应用它,但是最近出现了许多前提,这些想法改变了我们的想法:
- 使用深度学习方法增加了社区对图像分析的兴趣;
- 定义了一圈“成熟”的框架和经过预训练的神经网络,从中可以快速而轻松地开始。
- 推荐系统中的图像分析通常被用作一种营销功能,以确保“前所未有的”改进。
- 这种研究开始出现食物需求。
在推荐系统和图像分析的交叉领域,深度学习可以有很多应用,但是在第一阶段,我们为自己确定了开发该领域的三种主要方法:
- 建议质量的总体提高,例如衣服的相关产品,在质量和颜色上都更加适合。
- 使用照片(在商店检索中)在商店的产品库中查找商品的机制是一种允许您使用加载的照片在商店的数据库中查找商品的机制。
- 根据照片确定产品的属性/属性(属性标记),例如,根据照片确定产品的重要属性时,例如产品类型-T恤,夹克,裤子等。
对于我们来说,最优先和最有希望的方向是第一选择,我们决定对其进行探索。
为什么选择相关产品的算法
任何推荐系统都有两个基本的静态商品算法:替代品和相关产品。 而且,如果用其他替代品都可以理解的很清楚-这些产品与原始模型类似(例如,不同类型的衬衫),那么使用相关产品,一切将变得更加复杂。 在这里重要的是不要弄错基本商品和推荐商品之间的对应关系,例如,充电器应该适合手机,衣服的颜色和鞋子的颜色等。 您需要考虑反馈,例如,尽管充电器是一起购买的,但也不要向充电器推荐手机; 并思考实践中出现的其他细微差别。 很大程度上是由于存在各种细微差别,我们选择了相关产品。 此外,如果我们谈论时尚领域,那么只有在相关产品中才能形成完整的外观。
我们将主要研究目标表述为“了解使用深度学习方法进行图像分析是否可以显着改善当前相关产品的算法”
我注意到在此之前,我们在计算产品推荐时根本不使用图像信息,原因如下:
- 在存在零售火箭平台的过程中,我们在产品推荐领域积累了丰富的专业知识。 我们在此期间收到的主要结论是,正确使用用户行为可以提供将近90%的结果。 是的,存在一个冷启动的问题,当内容内容(例如有关图像的信息)可以澄清或改善建议时,但是实际上这种效果远不如他们在理论上所说的那样。 因此,我们不太重视信息的内容来源。
- 为了以内容信息的形式构建产品推荐,我们使用诸如价格,类别,描述和商店传递给我们的其他属性之类的元素。 这些属性与领域无关,并且在集成我们的服务时经过定性验证。 相反,图像的价值实际上仅出现在时尚品领域。
- 保持图片处理服务,验证其质量和与商品的一致性是一个相当复杂的过程,并且是我不承担必要确认就不想承担的一项严格的技术职责。
尽管如此,我们还是决定给这些图片一个机会,看看它们将如何影响建议的有效性。 我们的方法不是理想的,因为肯定有人会以不同的方式解决问题。 本文的目的是为我们的方法提供每个步骤的论点描述,并将结果呈现给读者。
概念形成
我们从跨越任何产品的三个组成部分开始:负担得起的技术,可用资源和客户需求。 “通过在相关产品的图像上的信息来改善建议”的概念本身已经形成。 该产品的“理想”实现形式是按照选定外观的图像编制的一个问题。 而且,这样的建议不仅看起来不错,而且从基本电子商务指标(转化,RPV,AOV)的角度来看也能奏效,且不比我们的基本算法差。
“外观”是由设计师选择的图像,其中包括一组彼此组合的不同事物,例如,衣服,夹克,包,皮带等。 在我们的客户方面,此类工作通常由专门指定的人员完成,他们的工作自动化程度很低。 毕竟,并非每个神经网络都可以具有品味感。
示例图像(外观)。立即限制了图像信息的使用-实际上,仅在时尚领域发现了应用。
基础架构和数据集
首先,我们提出了一个用于实验和原型制作的测试平台。 这里的一切都是相当标准的GPU + Python + Keras,因此我们不再赘述。 我们发现了一个高质量的数据集,旨在立即解决几个问题,从预测图像的属性到生成新的服装质地。 对于我们来说尤其重要的是,它包括几乎单张的照片。 此外,数据集还包括不同角度的服装模特照片,我们在第一阶段就尝试使用这些照片。
来自数据集的示例外观。
相同服装模型从不同角度拍摄的图像示例。第一步
使用数据集实现最终产品的第一个想法很简单:“让我们将问题简化为通过图像识别衣服的任务。 因此,在形成建议时,我们将“提起”那些与基本产品相似的建议。” 因此,应该找到货物“接近”的功能,并一路解决在该问题中删除替代方案的问题。
我必须马上说,可以使用常规的预训练神经网络(例如ResNet-50)解决此类问题。 确实:我们去除了最后一层,然后得到了嵌入,然后得到了余弦,以此作为“接近度”的度量。 但是,在尝试了这种方法后,我们决定离开它的原因主要有三个。
- 目前尚不清楚如何正确解释所产生的接近度。 在T恤的领域中,余弦= 0.7,通常情况下彼此非常相似;在夹克的领域中,余弦= 0.5,两者之间的差异更为显着。 我们需要这种解释以便同时删除非常接近的产品-替代品。
- 从针对我们特定任务的继续教育的角度来看,这种方法使我们受到了一些限制。 例如,形成整体形象的重要特征在各个领域之间并不总是相同的。 在某些地方,颜色和形状更重要,但是在某种程度上,材料及其纹理是重要的。 另外,我们希望对网络进行培训,以便在推荐女性穿男装时减少性别错误。 这种错误是显而易见的,应尽可能少地遇到。 通过简单使用预训练的神经网络,似乎我们由于无法提供在图像方面非常“相似”的示例而受到了一定的限制。
- 更加适合于这些任务的暹罗网络的使用似乎是一种更自然且经过深入研究的选择。
关于暹罗神经网络的一些知识
暹罗神经网络广泛用于解决与面部识别有关的任务。 在输入处,在输出处提供该人的图像,该人的名字来自该人所属的数据库。 如果使用softmax且类的数量等于神经网络最后一层上可识别的人数,则可以直接解决此问题。 但是,这种方法有几个局限性:
- 您需要为每个课程准备足够数量的图片,这实际上是不可能的。
- 每次将新人添加到数据库时,都必须重新训练这种神经网络,这非常不方便。
在这种情况下,合理的解决方案是获得两张照片的“相似性”功能,以便随时回答提供给神经网络输入和数据库参考的两张照片是否属于同一个人,从而解决人脸识别问题。 这与人的行为方式更加一致。 例如,一名警卫看着一个人的脸和徽章上的照片,并回答该人是否是一个人的问题。 暹罗神经网络实现了类似的概念。
暹罗神经网络的主要组成部分是主干神经网络,它输出图像嵌入。 该嵌入可用于确定两个图片之间的相似度。 在暹罗神经网络的体系结构中,骨干组件使用两次,每次接收图像的嵌入。 研究人员需要根据一个人或其他人拥有照片来显示输出值0或1,并调整主干神经网络。
暹罗神经网络的一个例子。 上部和下部图像的嵌入是从神经网络的主干获得的。 图片取自吴彦祖的“卷积神经网络”课程。基本解决方案
因此,经过一些试验,该算法的第一个版本如下:
- 我们将任何预先训练的神经网络作为骨干。 我们使用ResNet-50和InceptionV3进行了实验。 根据网络规模和预测准确性之间的平衡进行选择。 我们专注于Keras官方文档部分“单个模型的文档”中提供的数据。
- 我们在此基础上创建一个暹罗网络,并使用三重损失进行培训。
- 作为积极的例子,我们提供相同的图像,但是角度不同。 举一个负面的例子,我们正在提供另一种产品。
- 有了经过训练的模型,我们可以像考虑三重态损耗一样获得任何一对产品的接近度指标。
三重损失计算代码。与Triplet Loss在一个真实项目上的交易是第一次,这带来了许多困难。 最初,他们苦苦挣扎了很长时间,因为收到的嵌入全部降到了一点。 原因有很多:在计算损失之前,我们没有对嵌入进行归一化; 边距alpha参数太小,示例太难了。 增加的归一化和嵌入开始有所不同。 第二个问题出人意料地变成了“梯度爆炸”。 幸运的是,Keras使得解决这个问题的方法变得非常简单-我们在优化器中添加了clipnorm = 1.0,该值在训练过程中不允许梯度增长。
工作是反复进行的:我们训练了模型,降低了损失,查看了最终结果,并熟练地决定了我们朝哪个方向发展。 在某个时候,很明显,我们立即建立了相当复杂的示例,并且复杂性在学习过程中没有改变,这对最终结果产生了负面影响。 幸运的是,我们使用的数据集具有良好的树状结构,可以反映产品本身,例如Men-> Pants,Men-> Sweaters等。 这使我们能够重新构造生成器,并且我们在前几个时代开始提供“简单”的示例,然后是更复杂的示例,依此类推。 最困难的示例是相同产品类别的产品(例如,裤子)为负。
结果,我们得到了一个模型,其输出与使用ResNet-50的“幼稚”方法有所不同。 但是,最终建议的质量并不完全适合我们。 首先,存在性别错误的问题,但是对如何解决它有所了解。 由于数据集将衣服分为男性和女性,因此很容易收集负面样本进行训练。 其次,当在数据集上训练最终结果时,我们目视检查了客户-很明显,有必要对他们的示例进行再训练,因为对于某些算法,如果商品与训练过程中显示的内容不一致,则算法的效果非常差。 最后,质量通常很差,因为训练图像通常很杂乱,并且不仅包含牛仔裤,还包含T恤。
牛仔裤的图像上实际上还显示了T恤和靴子。最初的经验是后续解决方案的基础,尽管我们没有立即开始实施改进的模型。
基于基本解决方案的建议示例。 有性别错误,也有其他选择。改良模型
我们从对ResNet-50数据集中的数据进行培训开始。 数据集包含有关图片中所显示内容的信息。 它是从数据集“男人”->“裤子”,“女人”->“羊毛衫”等结构中提取的。 进行此程序的原因有两个:首先,他们希望将主干网“定向”到服装领域的神经网络。 其次,由于衣服也按性别划分,他们希望摆脱在第一版中遇到的性别错误问题。
在第二阶段,我们尝试同时消除输入图像中的噪声,并获得正对的相关产品以进行进一步的培训。 我们使用的数据集还旨在解决检测图片中物体的问题。 换句话说,对于每个图像,都有:描述对象及其类的矩形的坐标。 为了解决这种问题,我们使用了
现成的项目 。 该项目使用具有特殊焦点损失的RetinaNet神经网络架构。 这种损失的本质是,不将重点更多地集中在几乎每张图片中的图像背景上,而是集中在需要检测的物体上。 作为用于训练的神经网络的骨干,我们使用了预先训练的网络ResNet-50。
结果,从数据集中在每个图像上检测到三类对象:“顶部”,“底部”和“全景”。 在定义了“ top”和“ bottom”类之后,我们仅将图片切割成两个单独的图片,随后将它们用作一对用于计算三重态损耗的正例。 事实证明,检测物体的质量很高,唯一的抱怨是,并非总是能够在图像中找到类别。 这对我们来说不是问题,因为我们可以轻松增加用于预测的图像数量。
检测“ top”和“ bottom”类并剪切图像的示例。有了这种图片分割器,我们就有机会从Internet上进行浏览,并将其划分为用于培训的组件。 为了增加培训样本并克服基本解决方案开发过程中出现的样本覆盖率不足的问题,我们扩展了数据集,原因是其中一位客户的“剪切”图像。 唯一的问题是我们没有区分“附件”,“头饰”,“鞋子”等对象。 这产生了一些限制,但是非常适合测试该概念。 在收到积极的结果之后,我们计划将模型扩展到上述类。
接收到扩展的数据集后,我们使用了已经证明的方法来从基本解决方案构建暹罗网络,尽管存在一些差异。 首先,作为神经网络的骨干,我们使用了如上所述的经过训练的ResNet-50网络。 其次,现在,作为积极的例子,我们提交了从上到下的对,反之亦然,这使我们可以从神经网络确切地了解图像的“对应性”。 嗯,实际上是在十二个世纪之后,出现了一种机制,使我们有机会评估商品与单个图像的“整合性”。
基于使用神经网络的推荐示例。 建议为基本产品选择短裤;建议使用T恤。最终结果使我们感到满意:这些建议在视觉上都具有很好的质量,特别好的是,它们的构建不需要用户交互的任何历史记录。 但是,问题仍然存在,主要问题是引渡中有其他选择。 因此,在引渡中,“底部”被推荐为“底部”,“顶部”类别也发生了同样的情况。 这使我们思考并优化解决方案以删除替代方案。
删除替代品
为了解决替代品的可用性问题,发行非常快。 使用“香草” ResNet-50进行的初始实验有所帮助。 这样的神经网络将图像中最重合的那些商品作为“相似”商品-实际上是替代品。 也就是说,它可以用来识别替代方案。
基于“原始” ResNet-50的建议示例。 商品是替代品。利用ResNet-50的这一有用属性,我们开始从发行中过滤出尽可能接近的产品,从而删除替代产品。 这种方法也有缺点-同样难以理解的情况是选择过滤阈值。 有时很多产品被过滤掉,尽管事实上它们不是替代品。 但是,我们并未关注此问题,而是继续进行进一步的工作。
准备AB测试
为了对算法中的几乎所有更改进行最终检查,我们广泛使用了AB测试工具。 此外,我们只有一条规则:“无论损失多么小,无论神经网络多么复杂和多层,建议可能有多漂亮-如果AB测试没有结果,都不会考虑所有这一切”。 逻辑很简单:AB测试是所有参与者(尤其是客户和企业)最诚实,最容易理解的测试,并且是一种衡量结果的准确方法。 Retail Rocket - ( «
A/- 99% - ? »). - .
-. ,
RecSys 2016 . . , , , , . , - , .
, . , . , . - . , , , , - . : .
- , . -, , , , . -, — , , , , . , . , , , “», .
:
- “” “”, , , , . , , , .
- , . proof-of-concept , .
, , . , , .
AB-
, , - . — fashion. . , , . , , .
. 3 . , 95%.
. Related-9 — “” , Related — .
. Related-9 “” . : Mann-Whitney Test Bootstrap. 97%.: . , , , “” CTR. , , CTR , . - , - - , -. , .
CTR. . CTR Related-9, “” , () Related — (). CTR ( ) — 95%., , , , . , , . , , . .
结论
, , . , , . - . , — — , . , . , , , Retail Rocket.
, , , , « ». , . , .
, Retail Rocket