在给定一组用户标签的情况下构建基于标签的推荐引擎?

数据挖掘 nlp 推荐系统 词嵌入 信息检索
2022-01-30 11:43:00

基本上,这个想法是让用户关注网站上的标签,因此每个用户都有一组他们关注的标签。然后是一个文档集合,其中集合中的每个文档都有一个标题、描述和一组标签,这些标签与作者确定的文档中正在讨论的主题相关。考虑到我们拥有的信息,向用户推荐文档的最佳方式是什么,这还将考虑文档标题和描述与用户标签的语义相关性,无论是词嵌入解决方案还是 tf -idf 解决方案或混合解决方案,请务必说明。我仍然不知道我将如何处理标签同义词,它可能必须像在 stackoverflow 上那样进行协作,但如果有解决方案或伪解决方案,我'

2个回答

如果我的问题描述正确,那么您正在寻找推荐系统,例如 Netflix 或 Amazon 使用的推荐系统。最先进的解决方案是使用潜在狄利克雷分配主题建模来根据主题(在您的情况下,主题将是标签)提出建议。这是一个关于这个主题的非常好的视频教程:https ://youtu.be/3mHy4OSyRf0

对于标准版本的 LDA,您甚至不必定义标签,您只需在所有文档中定义不同标签的值。例如,如果您有 10000 个文档并且您想使用 100 个不同的标签,该方法会将您的单词/文档矩阵转换为主题/文档矩阵。

单词/文档矩阵的条目只是所有文档作为列,所有单词(来自所有文档)作为行,然后对于每个文档,您都有每个单词的计数。

主题/文档矩阵的条目是所有文档作为列,所有可能的主题作为行,然后对于每个文档,每个主题都有 78% topic1、12.5% topic95、0% topic99 等条目。

一旦你有了这些数据,你想根据用户的兴趣(标签)向他推荐一个新文档,或者换句话说,你有一个 user_interests 向量u有 100 个条目,其值介于 0 和 1 之间,并且您有主题/文档矩阵Mtopics×documents你通过多重播放计算一个新矩阵Mtopics×documentsu,从这个矩阵计算每一行的总和,并推荐那些总和最高的文档。

如果您只想使用预定义的标签,您可以跳过使用 LDA 方法计算主题/文档矩阵的步骤,只需使用您的数据将您的文档表示为标签/文档矩阵,将您的用户表示为 tag_vectors,从这里开始同上:将矩阵与 user_vector 相乘,计算每一行的总和,并推荐总和最高的文档。

一种解决方案可能是训练单个嵌入空间,StarSpace就是这样一种实现。该单个嵌入空间将包含所有用户、文档和标签。然后是最近邻搜索来推荐任意组合。给定一个用户,找到最近的文档。给定一个标签,找到最近的标签……

对于新实体(即用户、文档或标签),将单个实体拆分为多个部分。例如,文档将具有标记或标签将与具有标记的文档相关联。然后找到所有部分的平均嵌入。嵌入空间中的那个位置是新实体的近似语义。

总的来说,这是一个复杂的开放式问题,因此有许多可能的方法来创建有用的解决方案。下一个最佳解决方案取决于已经完成的工作以及将为最终用户增加最大价值的下一个功能。