新闻是有分量的

注册无需存款送

2019-05-01 10:34栏目:新闻
TAG: 技术 PC

原标题:推荐系统之路 (2):产品聚类

选自medium

作者:Dimitris Apostolopoulos

参与:shooting

哈喽各位久等啦!上一篇文章中,我们介绍了「推荐系统之路」,有些小可爱在留言里表示期待下一篇。最近,这位作者大大更新了。虽然还是关于推荐系统,但这次讲的是产品聚类以及相关方法,具体见下文↓↓

在上一篇文章中,我大致介绍了推荐系统,但卡在了矩阵系统的性能这一块。所以本文将继续上一篇,一个个找出每个没有执行的变量,并尝试修复它们。

现在,我们继续从上次中断的地方开始吧!

「疼痛识别」:发现问题

正如上一篇文章中所提到的,我们要面对的问题之一是:交互矩阵太大,很难衡量或计算。这是因为不同商店中会有相同或者相似的产品,所以我们收集的大量数据中包含重复的信息。

也就是说,如果你卖耳机,而你的三个竞争对手也卖相同品牌的耳机,那你的矩阵中会有很多重复的信息,而这无疑会拖慢你的工作速度。

所以本文的目的是:实现相同或相似产品的跨商店识别。

「走个过场」:融合信息

我们将会使用数据集提供的产品信息(即产品编码、产品名称、产品 URL 和产品价格)来确定产品的相似度。然而,现在每个商店都会用内部系统来追踪产品。因此,对每个商店来说,产品编码都是独一无二的。

更郁闷的是,产品价格我们也用不上,因为每个商店的产品价格也不同。产品 URL 倒是个不错的信息来源,如果我们可以构建 Web Scraper 来从网页上获取数据的话。但是,由于网页的「非结构化」,我们没办法构建适用于每个网页的 Web Scraper。

因此,我们能用的选项只剩一个了:产品名。

「做好准备」:文本预处理

文本预处理是指文本在馈送至算法前必须经历的所有调整。因为文本本身会有很多不需要的符号,或者一些特殊的结构,所以预处理需要做的就是整理文本,并用数值编码文本内容。

文本聚类预处理步骤

我们要对数据进行以下预处理过程:

  • 首先,我们确认产品的品牌并将其从产品名中剔除,这样我们得到的就是单纯的产品名了。
  • 然后,我们分离产品名中描述颜色的单词,以便减少数据噪声。此时,我们就可以根据颜色给产品分类。例如,我们想创建这两个类别:「黑色匡威全明星鞋 10」和「白色匡威全明星鞋 10.5」。
  • 接下来,我们分离产品名中的数字和度量单位(如果有的话),因为我们想把非常相似的产品归到一类中去,比如「Cola 330ml」和「Cola 500ml」。
  • 最后,我们对单词进行词干处理。也就是说,分离单词的后缀,以找出共同的词根,并完全去停用词。
  • 为了将产品名输入至算法中,我们要把数据转换为向量。为此,我们使用 2 个不同的向量器:CountVectorizer 和* *tf-idf Vectorizer。前者用 {0,1} 创建二元向量,后者根据单词在所有向量中的频率为每个单词分配一个权重。在这里,我们用这两个向量器来找出对我们更有效的向量。

下一步:文本聚类

什么是文本聚类?