User2Vec?根据用户使用的文档代表用户

User2Vec? representing a user based on the docs they consume

我想根据用户最近喜欢的 N 个文档来表示用户。

所以我计划使用 doc2vec 来形成每个文档的这种表示,但我只是想弄清楚什么是基本上将用户置于相同 space 中的好方法。

我想到了一些简单的事情,比如对他们使用的最后 5 个文档的向量进行平均,但我不确定这是否有点愚蠢。也许 space 中的某种 knn 方法是可能的。

然后我想知道 - 就像我们在 doc2vec 中使用文档 ID 一样,仅添加用户 ID 令牌并尝试以这种方式获得用户的表示是多么疯狂与文档相同的方式。

我找不到太多关于使用 word2vec 类型嵌入来提出文档向量和用户向量的方法,然后可以将它们用于某种向量 space 模型方法。

任何人有任何指示或建议吗?

尝试使用 Doc2Vec 来分析此类用户与文档的关系是合理的。

如您所建议的,您可能会使用平均最后 N 篇文档的消费量来表示用户。或者他们消费的所有文档。或者可能选择了 M 个质心来最小化到它们消耗的最后 N 个文档的距离。但是对于 data/goals 哪个可能做得好只能通过探索性实验找到。

可以尝试将用户标签添加到批量 Doc2Vec 培训期间提供的任何其他文档 ID 标签(或文档类别标签)。但是,请注意,添加更多标签意味着更大的模型,并且在某种粗略的意义上 "dilutes" 可以从语料库中提取的含义,或者允许基于很少出现的标签的特性(而不是所需的泛化)进行过度拟合当模型较小时这是强制的)。因此,如果您有很多用户标签,并且可能有很多用户标签只应用于一小部分文档,那么文档向量的整体质量可能会受到影响。

Word2Vec space 中另一种有趣(但计算成本高)的技术是 "Word Mover's Distance" (WMD),它比较基于成本的文本以转移所有文本的含义,表示为每个单词在向量位置的一系列意义堆,以匹配另一个词堆。 (将单词转移到词向量附近的词很便宜;转移到远处的词很昂贵。计算找到最佳的一组转移,并报告其成本,成本越低,文本越相似。)

令我吃惊的是,文档向量集可以以相同的方式处理,因此与一个用户相关联的文档向量袋不需要简化为任何单个平均向量,而是可以通过 WMD 与另一个文档向量袋,甚至单个文档向量进行比较。 (在gensim的KeyedVectorswmdistance()方法中有对WMD的支持,但在Doc2Vec类上没有直接支持,所以你需要做一些手动object/array杂耍或其他代码定制以适应它。)

使用 doc2vec 学习用户嵌入是一种众所周知的技术。这是一个 comprehensive article on user2vec models,描述了 word2vec 和 doc2vec 方法,以及许多其他有用的技术。