word2vec算法一次失败的应用

1606235-b6bd9eaf8d06a813.jpeg
Photo by eberhard grossgasteiger from Pexels

在电商推荐系统中,有一种场景是根据一个商品(主商品)推荐相适度高的商品(推荐商品)。常用的方法有两种,一是利用协同过滤模型,二是利用商品的属性相似。

无论哪种方法,都是将商品转化为向量,将商品的相似度转化为向量的距离。属性相似直接采用了one-hot编码,而协同过滤利用了矩阵分解。

一天,某个同事突发奇想,如果把用户的浏览记录当成一段文字,即把商品看成词语,那就可以语言模型的方法来得到商品的词向量。

而word2vec算法可以很方便训练词向量,于是就把word2vec应用在开头说的那个场景中。

当时我们都觉得这个想法很好。而且线下试验时,挑了几个主商品,用这种方式得到的推荐商品和主商品也是同一类目的。

但经过AB测试,发现效果很差。后来分析发现,对于本身表现不好的主商品,推荐商品的转化表现也不行。这就必然会影响用户的转化,导致这个模块没能很好的承接住用户。

事实上,这并不是说明word2vec算法在计算商品相似度方面效果不好,而是word2vec算法的确能很好的找到相似商品,但这种相似性并不是我们推荐系统中需要的。

词向量与语言模型对应,训练了某个语言模型,也就能得到相应的词向量,反之易可。而语言模型其实是刻画了句子的合理性。

根据词向量相似得到的推荐商品,和主商品在整个语言库(用户浏览行为)中是处在同一地位的。于是长尾商品必然和长尾商品相似,热销商品和热销商品更为相似。

由于热销商品出现的概率非常大,可以看做语言中的常用词,比如自己、中国、社会、认为、时间。而长尾词对应收银台、哥德巴赫猜想、吾辈等词。

常用词和长尾词的相似度本身就会很低,所以对于长尾商品,word2vec算法得到的推荐商品就不会出现热销商品。

基于同样的理由,在计算类目相似性时也不能使用这种方法。

至于推荐商品和主商品大概率下能保持在同一类目,是由于我们app的特点,导致用户在某一小段连续的浏览行为中,曝光的商品主要来自同一类目,或者说同一类目的商品连续出现的可能性高。

所以两个同一类目的商品的地位更为一致,这就能保证相似商品和主商品类目大概率下是一样的。

word2vec的这次应用失败,是因为我们没能理解我们真正的目的。回到这个栏位的本质,其实我们实际是要预测用户点了主商品A之后,点推荐商品B的概率:P(AB)。

即选择使AB同时出现的概率最大的商品B做为推荐商品,但词向量相似性得到的推荐商品C满足的是与A最相似,显然有P(AB) >= P(AC)。

猜你喜欢

转载自blog.csdn.net/weixin_34258078/article/details/87463469
今日推荐