机器学习之 商品i2i扩召

370 阅读5分钟

基于内容

  • 商品属性

    • 商品的类目属性,品牌以及ner属性,数据类型为:keyword

      • Keyword

        • 不进行分词,直接索引
        • 支持模糊、精确查询
        • 支持聚合
  • 商品名称

    • es,数据类型为text

      • Text

        • 会分词,然后进行索引
        • 支持模糊、精确查询
        • 不支持聚合
    • 其他短文本相似度:编辑距离/Jaccard 相似度/ N-gram 相似度

    • bert得到商品名称向量,宝宝辅食/婴儿辅食

  • 图片相似,抠图得到白底图后,根据图片向量,找相似

  • 消重簇

基于行为

基于统计

Itemcf

  • item之间的相似是由用户的正向反馈来衡量,越多用户对两个item有共同的正向反馈,它们之间就越相似。

其中 N(i) 表示 i 这个item有多少用户点击了,据这个式子可以看出如果两个item的共同点击很高,相似度就会很高,这个也是很容易理解的。

  • 哈利波特问题

  • Vs usercf

    • itemcf:适用于item数远小于用户数,长尾物品丰富,用户个性化需求强烈的领域。
    • usercf:适用于用户数较少,用户对个性化不那么敏感,反映了用户所在的小型兴趣群体中物品的热门程度

Swing

  • Ui表示喜欢物品i的用户集合,Uj表示喜欢物品j的用户集合,Iu表示用户u喜欢的item集合,Iv表示用户v喜欢的item集合。

  • vs itemcf :

    • itemcf:如果同时喜欢两个物品的用户越多,那么这两个物品间的相似度越高。
    • swing:如果同时喜欢两个物品的用户越多,且这些用户之间的重合度越低,那么这两个物品间的相似度越高。

基于统计的优缺点:

问题:不能传播

基于序列

item2vec

  • 类似于word2vec,将用户点击过的商品序列作为一篇文章,计算每个词(商品)的向量,再计算向量间的cosine,得到商品间的相似度。

词表非常大的情况下,DNN非常耗时,所以word2vec在DNN的基础上进行了优化:

  1. 层次softmax

    1.   为了避免要计算所有词的softmax概率,word2vec采用了霍夫曼树来代替从隐藏层到输出softmax层的映射

 和之前的神经网络语言模型相比,我们的霍夫曼树的所有内部节点就类似之前神经网络隐藏层的神经元,其中,根节点的词向量对应我们的投影后的词向量,而所有叶子节点就类似于之前神经网络softmax输出层的神经元,叶子节点的个数就是词汇表的大小。在霍夫曼树中,隐藏层到输出层的softmax映射不是一下子完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"。

判断正类和负类的方法:

P(+) =σ(𝑥wTθ) = 11+e𝑥wTθP(+) = \sigma(𝑥_w^T\theta) = \frac{1}{1+e^{-𝑥_w^T\theta}}

其中𝑥𝑤是当前内部节点的词向量,而θ则是我们需要从训练样本求出的逻辑回归的模型参数。

  • 优缺点
  1. 负采样

层次softmax的缺点:如果我们的训练样本里的中心词𝑤是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。负采样可以优化这个问题。

如何进行采样?

len(w) = 𝑐𝑜𝑢𝑛𝑡(𝑤)u𝑣𝑜𝑐𝑎𝑏𝑐𝑜𝑢𝑛𝑡(𝑢)len(w) = \frac{𝑐𝑜𝑢𝑛𝑡(𝑤)}{\sum_{u∈𝑣𝑜𝑐𝑎𝑏}𝑐𝑜𝑢𝑛𝑡(𝑢)}

实际在w2v中采用的计算长度的公式:

len(w) = 𝑐𝑜𝑢𝑛𝑡(𝑤)3/4u𝑣𝑜𝑐𝑎𝑏𝑐𝑜𝑢𝑛𝑡(𝑢)3/4len(w) = \frac{𝑐𝑜𝑢𝑛𝑡(𝑤)^{3/4}}{\sum_{u∈𝑣𝑜𝑐𝑎𝑏}𝑐𝑜𝑢𝑛𝑡(𝑢)^{3/4}}

  • 为什么用3/4次幂?
  • Cbow vs skip-gram

问题:对长尾数据不友好

基于图

EGES

BGE (Base Graph Embedding)

为什么要构建图?

因为graph具有传播能力,它不仅能有效的提取出来直接关联,而且可以通过游走策略,挖掘出来二度、三度的关系。有效的利用这种传播能力,能解决数据的稀疏性,大大的提升覆盖。

DeepWalk如何构建图?

DeepWalk是由基于序列的embedding扩展到基于图的embedding,它的主要思想是在由物品组成的图结构上进行随机游走,产生大量物品序列,然后将这些物品序列作为训练样本输入word2vec进行训练,得到物品的embedding,是Graph embedding的基础性方法。

BGE 如何构建图?

random walk等传统方法不适用商品网络,商品节点动辄上千万,其中大部分节点的关联性是很弱的,也就是冷门商品居多,只有少部分商品构建的graph是热点,如果采用random walk去采样,会采出很多冷门节点的序列,所以BGE基于边的权重去采样(weighted walk),使采样尽量往热门节点方向游走,这样采样出来的样本置信度才更高。

此外,相比于原先DeepWalk的无向图,BGE其实是会按照行为的顺序构建有向图。

边的权重如何定义?

文章中按照用户共同行为的次数,也可以自行定义,比如给不同的行为赋予不同的权重

BGE 如何进行sampling?

其中N+(vi)是节点vi所有的出边集合,Mij是节点vi到节点vj边的权重。

  • 为什么要建有向图?无向图行不行?

GES (Graph Embedding with Side Information)

  • 增加item的边信息(category/brand/price),丰富item的表征能力

  • item 和 side information(例如category, brand, price等) 的 Embedding 是通过 word2vec 算法一起训练得到的。 如果分开训练,得到的item_embedding和category_embedding(brand_embedding,price_embedding)不在一个向量空间中,做运算无意义。

    • 即:通过 DeepWalk 方案得到 item 的游走序列,同时得到对应的category(brand, price)序列。然后将所有序列数据放到word2vec模型中进行训练。

    •   针对每个 item,将得到:item_embedding,category_embedding,brand_embedding,price_embedding 等 embedding 信息。将这些 embedding 信息求均值来表示该 item。即:
  • 如何解决商品 冷启动 的问题?

EGES(Enhanced Graph Embedding with Side Information)

  • 相比于GES,EGES强调不同的边信息的权重不一样,该权重值通过模型训练得到。

参考资料: