基于内容的推荐系统
如果让一个没有系统学习过推荐系统的人,让他快速设计一个推荐系统,那么最终得到的估计八成就是内容推荐(虽然可能他不知道内容推荐是啥意思~)。
让我来介绍一下吧,我们在用户和电影的这个背景下,一个用户看了一部电影,那么电影有哪些内容(属性)呢?演员,导演,电影类型,上映时间等等,这些都是一个电影的内容。如果小明今天对某部电影给了好评,我们就可以认为这部电影的这些属性是小明喜欢的。
像电影的此类结构化属性是一方面,另外一方面是无结构信息(如文本),需要进行一些处理来结构化属性。比如电影有一段介绍,我们随便去网上扒一个:
图片来自豆瓣
通过上面的描述,我们可以知道“小丑”这电影中,亚瑟,小丑,精神疾病,哥谭市,现实,梦想,杀害,疯狂等等这些词语可能更能描述这部电影的属性,但是像普通人,公寓,生活,地铁这些词的描述就显得不那么重要了。但是系统如何选择这些属性呢?
这里推荐入门的 tf-idf 方法,简单的思路就是给每个词一个权重,权重的值和这个词在这个文档中出现的次数成正比,与这个词在所有文档中出现的次数成反比。
举个栗子,假如小丑这个词在这里出现了五次,在其它所有文档中没有出现过;而普通人这个词在这里出现一次,在其它所有文档里面都出现过,那么小丑的重要性就远高于普通人,因此小丑这个词就可以作为一个属性。
那么如何判断用户的兴趣呢?最常见的方法就是基于概率的方法,比如朴素贝叶斯。我们只需要统计用户喜欢的电影里面,每个属性出现的先验概率,然后就可以对一部新电影进行后验概率的判断,预测出现这些属性,用户是否喜欢这部电影。再比如进行拉普拉斯平滑等方法,我们就不深入介绍啦~
传统的基于内容方法,我们可以发现最直接的两个缺陷:有限的内容分析和过于专业化。有限的内容分析就是说,属性只能找到这些固定的词语,可能无法发掘文本信息中的情感等上下文信息。过于专业化也就是说推荐会陷入局限,可能喜欢某个演员以至于只推荐某个演员。
自上而下加入NLP
这里我们考虑加入NLP的思路来解决前面的问题,主要有三个方向的思路:基于本体资源的方法;利用百科知识资源;利用关联开放数据云。
基于本体资源的方法
首先考虑的是结合本体知识的方法,也就是通过词义消歧(WSD)对内容进行语义解释。可以理解为将同义词进行统一,这样子一个物品在被表示为一个词语向量时,就会比较唯一。
换一种思路,我们将不同语言里面的同一个词语,也可以看作同义词,比如hello和你好。这样子得出来的向量模型就可以跨多语言来对物品进行建模。
听起来基于本体的方法非常滴 nice,但是依然存在一些缺陷,就是对知识的覆盖有限。所以本体会在相互关系之间构建一个相互关联的语义网络。这样子在计算相似性的时候就可以应用到图的方法。
利用百科知识资源
以维基百科为例,这类知识库包含了很多人类知识。那么如果借鉴这些人工构建的百科知识库内容,就相当于从外部学到很多知识,然后再结合这些知识来学习推荐数据集中的内容,自然推荐结果会更友好。
现有的工作将百科全书知识视为一系列的概念,然后用这些概念定义的高维空间来表示自然语言文本的含义。此外还有工作构建了一种名为 BabelNet[1] 的新资源,一个超大规模的百科全书词典。它将知识编码为有标记的有向图:节点是如维基百科中的概念,边是概念之间的关系。
通过这样子的设计,推荐系统在提高推荐精度的同时,也可以提高对推荐结果新颖性的优化。比如用户的文本内容中出现了iPad这种词条,通过外在的百科知识学习,就可以知道还可以推荐iPhone,iPod,MacBook之类的物品,而这是单纯的基于内容的学习比较难做到的。
利用关联开放数据云
这类方法非常好理解,就是关联社区主张通过一些给定规则来处理 web 上的结构化数据,然后协同发布并互联。现在已经有越来越多的语义数据发布,连接了涉及地理位置,人物,公司,书,电影,音乐,电视和节目,基因,蛋白质,药物,在线社区等全球数据空间,将其称之为数据web。
利用这些数据学习到的内容,一方面可以提高原本的基于内容的推荐方法,另一方面的特点我们可以很简单的想到,就是跨领域的推荐。这里举个小栗子
在微博上发现小明经常给他女朋友分享周杰伦和许嵩的歌,那么在音乐推荐的时候,这两个歌手就可以看作相似歌手,或者被经常分享的歌可以看作相似的歌曲。
这里就是从微博上的关系可以应用到音乐软件中去~
3)自下而上:基于判别式的方法
前面我们讲了自上而下来加入NLP的语义方法,接下来以基于判别式为例,我们简单的了解一下自下而上的语义方法。
自下而上的思路讲的就是从统计分布的角度来考虑,基于分布假说,认为单词的含义取决于它的上下文。那么这里的思路就是从文档中来获得词语的意思,不需要额外的人工标注的外部资源,也无需人工维护本体。但是换个思路,就是我们要大大滴数据集,从这些文本文档中去学习词语的上下文所包含的背景含义。
这类方法的依据就是,认为相同上下文中出现的词倾向于具有相似的意义,从另一个角度看,就是这类方法认为词在语义上的相似度取决于它们上下文的相似度。那么如何判断呢?我们可以简单的将其设置为一个词语-上下文矩阵。而这里的上下文判断就方法比较多了。
比如我们可以将一起出现的单词认为是目标词的上下文,或者设定一个滑动窗口内的词语是上下文,也可以是一个句子,一段文本信息,甚至整个文档。那我们再举个栗子:
一个句子写到:常喝的酒有啤酒,葡萄酒,白酒等。那我们的模型就认为啤酒,葡萄酒,白酒这些词比较相似。
在这里也可以考虑加入矩阵分解降维的操作等,对这个词语-上下文矩阵进行降维。也有一些其他工作对这里进行进一步研究,感兴趣的小伙伴可以再进一步了解。
总结
今天的文章我们介绍了传统的基于内容的推荐系统,然后介绍了两类对基于内容的推荐系统的改进思路,分别是依靠外在标注数据的自上而下的思路,以及挖掘文档内部词语相似性的自下而上的思路。
基于内容的推荐是我们主观上非常好理解的一种推荐方法,并且非常简单,同时拥有优秀的解释性,非常善于解决冷启动问题。但是在精度上不如协同过滤表现优异,所以现有对基于内容推荐的改进,或者融合到一些其它模型中,都是非常有意思的尝试。之前看过recsys上也有融合基于内容的推荐来缓解冷启动的问题。
今天的内容就到这里,如果对您有帮助的话,拜托点个再看哟,本系列会在新年期间持续更新哒~
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方"AINLP",进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
推荐阅读
征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)
完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏