使用 TensorFlow 自动分类 NAVER 购物商品类别
2019 年 5 月 20 日
NAVER 工程团队的客座文章

NAVER 购物 是由 NAVER 提供的购物门户服务。NAVER 购物将商品与类别匹配,以系统地组织商品并方便用户搜索。当然,每天手动将超过 2000 万种新注册商品与约 5000 个类别进行匹配是不可能的。

本文介绍了使用 TensorFlow 自动匹配 NAVER 购物商品类别的过程,并解释了我们在将机器学习应用于我们服务所使用的实际数据时如何解决了一些问题。

NAVER 购物和商品类别

NAVER 购物是一个购物门户服务,提供商品搜索、类别分类、价格比较和购物内容,以便用户可以轻松访问在 NAVER 购物上注册的卖家,以及 NAVER 智能商店 中的商品。
The Main screen of NAVER Shopping
NAVER 购物的主屏幕
在 NAVER 购物上注册的商品数量从 2005 年的不到 1 亿增加到 2011 年的超过 1 亿,截至 2019 年 4 月,已达到 15 亿。目前,平均每天有 2000 万种新商品注册。

NAVER 购物将商品系统地组织起来,并将其分类到类别中,以便用户更容易搜索。类别分为上级类别 > 中级类别 > 下级类别,例如服装 > 女鞋 > 平底鞋 > 乐福鞋

目前,NAVER 购物管理着约 5000 个类别。当用户在 NAVER 购物上输入关键词搜索商品时,它会识别用户输入的关键词的类别,然后根据搜索逻辑列出与关键词类别匹配的商品。为了让用户快速找到商品并获得期望的搜索结果,商品应该与相应的类别匹配。
An example of category matching
类别匹配示例
在 NAVER 购物上注册的卖家在测试文件中创建各种商品信息,包括根据 EP(引擎页面)指南 的卖家类别信息,这是 NAVER 购物上商品注册的数据表格,并将其发送给 NAVER 购物。

在发送给 NAVER 购物的各种商品信息中,卖家使用的类别系统可能会有所不同。因此,如上图类别匹配示例所示,同一款连衣裙可能有截然不同的类别信息。

为了通过提高搜索准确性来提高购物搜索质量,有必要将卖家使用的类别与适合 NAVER 购物的类别进行匹配。问题在于,一个人不可能逐一将新商品与 NAVER 购物的 50 个类别进行匹配。

虽然我们也使用了基于规则的类别匹配,例如卖家如何将“台式机硬盘”类别映射到 NAVER 购物的“硬盘”类别,但随着卖家和商品数量的增加以及 NAVER 购物的类别经常重新组织,我们无法再使用基于规则的类别匹配。相反,可以通过应用自然语言处理 (NLP) 和计算机视觉等技术来自动化类别匹配。

将 NLP 适应 Naver 购物服务时,需要考虑一些事项。在大多数情况下,商品属性(例如 300ml/500GB)或代码名称(例如 SL-M2029、PIXMA-MX922)在使用现成软件时被归类为停用词并被忽略。然而,这些术语对于商业服务来说是有意义的。为了分析这些词,NLP 过程应该被定制以满足服务的需要。

类别自动匹配系统架构

目前,NAVER 购物在类别自动匹配系统中使用以下架构进行学习和分类。
Category Auto-Matching System Architecture
类别自动匹配系统架构
关系数据库中约 15 亿条商品信息被提供给用户作为搜索结果集。监控中心找到与搜索结果中不正确类别匹配的商品,并将它们与正确类别匹配。由于监控中心匹配的商品数据由人工检查,因此它被视为经过精炼的数据,然后从分布式数据库中提取为学习数据。除了经过精炼的数据外,还通过考虑商品的各种特征来提取学习数据。

训练服务器从分布式数据库中读取数据来训练模型,并向推理服务器分发增强后的模型。推理服务器每天读取约 2000 万种商品的信息(尚未与 NAVER 类别匹配的商品),以匹配类别,然后更新到数据库。

类别自动匹配模型

NAVER 购物的类别自动匹配模型分析商品数据的特征,并通过以下过程训练模型。
  1. 查找商品特征:从商品信息中查找有用的特征。
  2. 形态分析:分析并从商品信息中提取词语。
  3. 词嵌入:将商品特征转换为向量。
  4. CNN-LSTM 模型 - 商品名称:将 CNN-LSTM 模型应用于商品名称。
  5. MobileNetV2 - 商品图片:将 MobileNetV2 模型应用于商品图片。
  6. 多输入模型:通过商品的各种数据连接模型,以提高准确性。

商品特征

下图中标记的部分是在类别自动匹配中使用的特征。
Product features used in category auto-matching.
类别自动匹配中使用的商品特征。
从上面的示例中可以看出,商品名称没有提到它是女士 T 恤还是其他类别的 T 恤。但是,从图像中可以很容易地看出,“商品名称”和“图片”是用户购买商品时首先关注的元素。当从搜索结果中发现商品类别匹配错误时,监控中心应该仔细查看商品名称和图片,以便将商品移动到正确的类别。

因此,商品名称和图片也被用作类别自动匹配中的主要特征。除了商品名称和图片之外,卖家使用的类别、商品最低价格、品牌、制造商、原始图片比例也被用作卖家提供的数十条商品信息中的附加特征。

形态分析

用作主要特征的商品名称具有以下特点。

由名词组成的商品名称
Product names made of nouns
混合韩语和英语的商品名称
Product names mixing Korean and English
包含字母和数字组合的商品/型号代码的商品名称
Product names that include product/model code of combined letters and numbers
包含描述商品概念的词语的商品名称(例如宽松版
Product names that include words to describe the product concept
没有空格的商品名称。由于韩语的特点,即使没有空格也能理解含义
Product names with no spacing. Meaning can be understood even without spacing due to the characteristics of Korean
为了让商品名称具有符合购物领域的含义,描述概念的词语、型号代码和商品属性不应该分开,而没有空格的商品名称则以词语为单位提取。

接下来是一个使用 NAVER 语言处理系统分析词素并从商品名称中提取词语的示例。在提取词语之前,使用正则表达式方法从商品名称中删除特殊字符。(但是,在型号代码中经常使用的连字符 (-) 不会被删除)
An example of the result in extracting term from product name.
从商品名称中提取词语的结果示例。

词嵌入

我们考虑了在不丢失太多信息的情况下有效地将商品插入模型输入的方法,因为商品名称在购物领域是专门的。由于随机序列方法在制作词语字典后分配数字(例如,对于女孩=1000,对于男孩=1001)在模型中以类似的方式激活,因此很容易丢失词语的含义和关系,我们使用了一种将词语映射到更高阶并用向量表示它们的方法。

我们尝试使用 维基百科 内容的预训练向量,但认为在构建 词嵌入 时没有考虑商品数据的特点。因此,我们使用 Word2vec 方法直接构建了包含商品数据特征的词嵌入。

可以使用 TensorFlow 的可视化工具 TensorBoard 来探索 Word2vec 结果词嵌入向量是否构建正确。以下是 4000 个类别的向量可视化结果

CNN-LSTM 模型 - 商品名称

通过以下顺序应用 CNN-LSTM 模型来学习商品名称(文本数据)。
  1. CNN 模型:从商品名称中提取特定文本区域的特征。
  2. LSTM 模型:根据长商品名称中附近的词语来识别当前词语的含义。
  3. CNN-LSTM 模型:CNN 提取的局部特征在 LSTM 中依次整合。

CNN 模型

卷积神经网络 (CNN) 模型是最初为图像处理而开发的网络。该模型提取图像的特征,无论图像中物体的定位如何,过滤器都会移动。
A CNN (Convolution Neural Network)
CNN(卷积神经网络)
除了图像之外,在 NLP 中也做了很多努力来应用 CNN 算法。根据论文 用于句子分类的卷积神经网络,CNN 过滤器可以提取图像处理中特定图像区域的特征,并提取文本处理中特定文本区域的特征。

在 NAVER 购物的商品名称中,你可以看到商品的主要关键词,无论位置如何,都会出现,如下所示。
  • 阿迪达斯 Originals 女子 三叶草 **连衣裙**
  • On and On 雪纺长款褶皱 **连衣裙** JW9SO354

LSTM 模型

长短期记忆 (LSTM) 模型是基于循环神经网络 (RNN) 的网络。
STM (Long Short-Term Memory)
LSTM(长短期记忆)
RNN 是一种网络,通过记住来自当前输入数据的先前输入数据,使从先前阶段获得的信息持久化。但是,RNN 无法解决长期依赖性问题(例如,它可以很好地预测短句中的词语,但不能预测长句中的词语)。LSTM 是一个解决了这个问题的模型。

通常,文本中词语的含义(例如反讽)是根据附近的词语(前后词语)来理解的。因此,LSTM 模型被认为是适合处理如文章中按顺序出现的数据的模型。

在 NAVER 购物的商品名称中,你可以看到只有查看周围的关键词才能分类的商品名称,如下所示。
  • **胸衣** 细肩带分层长款 **连衣裙**
  • **衬衫** 宽松领长款 **连衣裙**

CNN-LSTM 模型

接下来是论文 使用区域 CNN-LSTM 模型进行维度情感分析 中提出的 CNN-LSTM 模型的架构。
CNN-LSTM Model
CNN-LSTM 模型
CNN-LSTM 模型展现出远超其他模型的性能。该方法通过将词嵌入(向量)输入卷积层和最大池化层来提取局部特征,然后使用 LSTM 模型对特征进行顺序整合。

CNN 模型可以将输入数据划分为多个区域以提取特定的局部信息,但无法确定长句中词语之间的依赖关系。通过将 CNN 模型与 LSTM 模型结合,可以对句子的局部信息进行顺序整合,从而解决这种局限性。

MobileNetV2 — 产品图片

MobileNet 是一个可用于图像分类和目标检测的模型。
MobileNet — Depthwise Convolution Filter
MobileNet - 深度可分离卷积滤波器
VGG 是在 MobileNet 之前发布的一个模型,它是一个由多个层组成的深度神经网络。它拥有出色的性能,在一次大规模视觉识别挑战赛中获得了第二名,但由于参数众多,在资源有限的计算机上难以使用。

为了平衡性能和效率,Google 在 2017 年 4 月分解了标准卷积,并发布了使用深度可分离卷积滤波器的MobileNets。一年后,即 2018 年 4 月,他们发布了使用线性瓶颈结构和残差连接的MobileNetV2

与 VGG 相比,MobileNet 的准确率相似。然而,MobileNet 的计算量和参数数量只有 VGG 的十分之一,使其适合在没有 GPU 设备的服务器或需要实时性能的服务中使用。

多输入模型 — 产品其他信息

对于自动匹配类别,可以使用产品名称和产品图片分别训练模型。然而,由于产品名称和图片都属于同一个产品,因此整合训练实际上会提高模型的准确率。

除了产品名称和图片,还可以整合品牌、制造商、原始图片比例、商业运营中使用的类别以及产品的最低价格,如以下图片所示,这些信息都可以在训练中添加,从而可以训练产品相关属性之间的关联性。
Multi Input Model
多输入模型

类别自动匹配中发现的问题和解决方案

在将类别自动匹配应用到实际服务数据时发现了一些问题。

特征可视化

在应用类别自动匹配之前,必须有一种方法来验证匹配结果是否正确分布。如果你将适合 TensorFlow 的嵌入投影仪的特征向量和标签上传,就可以轻松地检查类别分布和类别之间的距离。接下来,你可以看到大约 4000 个类别向量的可视化结果。
Feature Visualization
特征可视化
通过点击一个点(类别),你可以看到该点附近其他点(相似类别)的情况。如果该点在可视化结果中位于附近,但完全不是相关类别,则意味着该类别有很高的错误匹配概率。

你可以找到一个关于如何自己完成此操作的教程这里

数据规范化

在 NAVER 购物中,人气类别“时尚服装 > 女装 > 连衣裙”与非人气类别“生活/健康 > DVD > 文化/纪录片”的产品数量比例约为 1000:1,数据高度不平衡。如果使用这种不平衡的产品分布训练数据,会导致结果偏向产品数量较多的类别,从而提高整体准确率,但也会造成其他问题。

左下方图表是在应用数据规范化之前的情况,按类别划分的产品分布呈现出指数函数的形状。因此,我们对学习数据应用了以下对数函数进行数据规范化。
log function
通过应用数据规范化,产品数量已按类别均匀分布,如右侧图表所示,并且解决了结果偏向热门类别的现象。
Product Distribution by Category
按类别划分的产品分布

反映趋势

网上商城的产品生命周期短,对趋势非常敏感。特别是服装类产品,由于每个季节都会生产不同的产品,因此产品会不断删除和创建。例如,一个只使用文本学习的模型,在遇到新的趋势产品(例如“Anorak”)时,只靠阅读词语很难理解它属于哪个类别。而一个同时学习文本和图片的模型,可以利用图片将“Anorak”归类为“夹克”,即使这是一个新产品。

在这种情况下,我们应该分析长期准确率,例如以下图表,以验证模型是否可以持续准确预测,并通过不断更新学习数据和模型来适应产品趋势。
Long-Term Accuracy Analysis
长期准确率分析

训练数据管道

一般来说,为了更新学习数据,必须通过 SQL 语法从 HDFS 中提取数据,保存为学习服务器上的文件,然后在代码中加载数据并重新训练模型。在这种通用方法中,随着学习数据量的增加,保存为文件和加载的时间会变长,还会占用大量的服务磁盘空间,效率低下。
data input pipeline performance

数据管道性能比较

TensorFlow 提供了一种方法,可以使用tf.data 管道直接从 HDFS 中读取学习数据。当使用以下示例中的Dataset.prefetch()方法时,由于它以块的形式读取数据,因此可以在 GPU 上学习第一个数据的同时,在 CPU 上准备第二个数据,从而减少资源的空闲状态。

剩余任务

虽然我们在解决实际数据中出现的问题的同时,也试图改进类别自动匹配模型,但仍有一些需要改进的地方。

模糊类别

NAVER 购物的类别结构是为了方便用户而设计的,由于许多同名子类别,因此很难区分上层类别。由于这种结构不利于模型学习,因此有必要选择需要额外学习的类别,将其更改为易于模型学习的结构,或者在商业环境中分别管理标准类别(例如UNSPSC,联合国标准产品和服务代码),并让模型学习。
Ambiguous Categories
模糊类别

卖家提供的信息错误

有些情况下,卖家会先将产品类别与 NAVER 购物类别进行匹配,然后发送产品信息。由于这种信息是由人工匹配的,因此也是学习数据的条件。然而,有时用于学习的主要产品要素会包含错误。为了从学习数据中去除错误数据,我们应该使用一些方法,例如选择提供高质量产品信息的卖家,并在学习中给予他们更高的权重。
Example of incorrect information from seller
卖家提供的信息错误示例

总结

我们讨论了 NAVER 购物中运行的类别自动匹配模型,以及相关问题和解决方案。首先,我们从产品中找到了有用的特征,在文本数据的情况下分析了词素,并使用了 CNN 和 LSTM 模型。对于图片数据,我们使用了 MobileNet 模型来开发类别自动匹配模型。

此外,我们还研究了使用 TensorBoard 进行数据可视化,以及如何使用数据规范化和 TensorFlow 的管道。

在交付这个项目时,我们能够更全面地理解机器学习和深度学习的问题,在将模型应用到实际服务环境中时,除了关注模型的准确率之外,还发现了其他存在的问题。

目前,自动匹配的准确率约为 85%。我们旨在通过各种方法,例如产品名称的日期细化、图片特征提取效率、准确验证集构建等,继续改进模型,以实现更高的准确率。
下一篇文章
Auto-classification of NAVER Shopping Product Categories using TensorFlow

NAVER 工程团队的客座文章

NAVER 购物 是由NAVER提供的购物门户网站服务。NAVER 购物将产品与类别进行匹配,以系统化地整理产品并方便用户搜索。当然,每天将超过 2000 万个新注册的产品匹配到大约 5000 个类别中,人工操作是不可能的。

本文介绍了…