分享嘉宾:王希廷博士微软亚洲研究院
编辑整理:马越快手
出品平台:DataFunTalk
导读:在推荐算法领域,可解释推荐是一个新兴的方向。它和知识图谱以及自然语言理解有很大的关联。这次分享的主题是从知识图谱和自然语言生成的角度分析可解释推荐,主要介绍:
可解释推荐的背景
可解释推荐的发展史
基于图的结构化解释的进展
基于自然语言生成的非结构化解释的进展
01
可解释推荐背景介绍
1.可解释推荐背景
要把一个推荐系统变得更贴合实际,人们更容易接受,核心要解决的问题是“为什么”要推荐这个。比如说向身边的同事推荐某个餐馆,我们很少只讲“我要推荐某个餐馆给你”。这样的沟通方式略显生硬,而且会使人不理解到底这个餐馆哪里好,这就是传统推荐方式的缺点。可解释推荐更像是日常生活中给朋友推荐餐馆时说的话——“这家店在大众点评上可火了”,或者是“他家的担担面特别好吃,辣椒油也很开胃”,或者是“我知道你喜欢一家叫‘泰式面条’的餐馆,这家餐馆和那家非常相似,它还离你更近,所以我觉得可以去尝试下”。我们可以用这些用户友好的解释拉近和朋友之间的距离,相较于传统算法可以减少不必要的猜疑。
可解释推荐在工业界已经得到越来越多的应用。Meta、Amazon、饿了么、LastFM都在推荐中加入了解释,这可以显著提高用户体验。之前微软的推荐经验显示,在页面上放一些合适的推荐词可以让用户点击率大幅度提高。
2.可解释推荐vs传统推荐
传统推荐算法的目标是学习一个函数f,在给定一对用户u和物品v下,计算出一个分数r,r代表用户u对物品v的喜好程度。
可解释推荐主要在两个方面拓展了传统推荐算法:
使用可解释的函数f
这是所有机器学习模型的共同目标。通过对函数的解释,可以避免一些潜在的问题。比如著名的黑天鹅事件,本来在正常运行的程序突然某一天出现了很严重的BUG;或者隐藏着一些不公平的情况,譬如对一些少数群体的歧视问题。
在训练时生成额外的解释
除了分数r,我们还希望生成一条解释Y,解释的形式可以是自然语言文本或者其他表示形式。解释Y的目的是希望在界面展示的时候效果更好,从而提高用户的满意程度和信任程度,以及被推荐物品的点击概率。
解释Y的形式主要有两种:
以图为代表的结构化解释
基于文本的非结构化解释
02
可解释推荐的发展史
年之前,可解释推荐主要是以预先设定好的模板为主。模板形式推荐的好处是可以保证推荐是正确且高度可读的。但存在很多问题:
多样性非常低,很容易引起被推荐人的视觉疲劳
需要人工生成模板
从年开始,可解释推荐领域有大量文章把预先设定的模板改成不需要预先设定的free-form的形式。这就用到了一些先进的技术,比如把知识图谱引入到可解释推荐领域。我们可以将知识图谱中的一条路径作为解释,由于路径上点的类型很多并且路径的长度也不一样,所以不需要预先指定它的解释形式。还有一些自然语言生成的方法,也可以帮助逐字生成一些没学习到的解释。
基于图的解释在模型本身层面的可解释性很高,可以把整个模型的推理过程,一步一步在图上跳跃的过程全部都展现给用户;而基于自然语言生成的解释对用户比较友好。相较于模板化解释,这些需要额外解读的形式看起来非常自然,也不需要太多的学习和理解。
03
基于图的结构化解释进展
基于图的结构化解释的进展主要在知识图谱方面。知识图谱在推荐以及其它很多领域都得到了广泛应用,究其原因有两点:
它可以为模型提供非常多的有用信息
一般来说,引入知识图谱可以提高准确性。相比传统的推荐,在引入知识图谱之后,我们能知道这个商品的额外信息,譬如某首歌曲的专辑名称、曲作者、词作者等。一旦有了这些额外信息,就能够有的放矢地进行更加精准的推荐。
可以提高可解释性
在模型中每选一个点或一条边,都是一个reasoning的过程,可以把这个reasoning的过程展示给用户看。
知识图谱主要有两种实现:
知识图谱Embedding(KGEmbedding)的方法
基于DeepLearning的图谱reasoning
1.KGEmbedding方法介绍
KGEmbedding的方法非常简单直接,它把知识图谱里面每个边的表达式都求出来,这样就可以把全部的Embedding都求出来,而Embedding包含了整个知识图谱的全部拓扑信息,有了拓扑信息之后,就可以集成到模型的表达式中。原来的表达式是ID对应的向量,现在可以把图上的表示、与它相关的文本的表示和图片的表示全部表示成向量,再把它们拼接到一起来对物品的表示补充和完善。通过这种方法可以在现有的框架里引入知识图谱的信息,并且这种方法非常容易引入信息。
这种方式也有两点缺点:
它没有显式的模拟用户和物品之间的多跳连接关系,在Embedding的过程中,多跳的信息在这个环节中丢失了,从而影响推荐效果。
这种方法没有太多的可解释性,因为它采取深度学习的黑箱的方法,学习出来之后人很难理解这个模型的含义。
2.基于DeepLearning的图谱Reasoning
年以后,知识图谱的研究重点除了Embedding之外又多了知识图谱的reasoning,reasoning要求路径是在知识图谱上的,路径体现了整个推理的过程。Reasoning的过程可以保证推荐的商品是跟用户有确定的关联,而且这个连接关系是个让人信服的关系。Reasoning的一个好处是提供了一种极具透明性的解释,它不是像attention一样只解释模型的一个中间层,而是把从input(user)到output(item)之间完整的推理路径都展现出来了。
Deeplearning和reasoning其实是两种不同的模式,DL是符号主义,是基于经验预先设定好一些特征,最终收敛向这些特征,是一个up-down的过程;而reasoning的过程是从大量的数据出发,预先不知道特征信息,通过把数据灌入设定好的模型中,得到连接关系,是个bottom-up的过程。纯粹的reasoning会有过于依赖于数据,换个数据集可能就得出不同的结论的问题。
符号主义的方式和连接关系的方式有两种结合框架:
把知识图谱中用户和物品的所有可能的推理路径全部列出来,然后用一个深度学习的模型,抽取这些推理路径的特征,最后总结出一个答案。
这个方法可能有两个问题:一是这样计算出来的可解释性还是不太够,除非引入attention机制等一些机制,给每个path一个权重,然后利用这些权重给出哪个path是比较重要的解释,但是很多文章都在说attention本身解释性比较弱,跟我们人的理解也不太一样;第二个问题是candidatepaths非常多,有很多的噪音,而且算法的效率也不高。
第二个框架是在输出端引入符号主义(深度学习),输入还是user-itempair,经过一层mapping,把use-item映射到一个可能的reasoning路径上,这个选出来的reasoning路径直接就可以得到一个最佳的推荐产品。
这个方法会跟人的思考方式比较相近,人对大部分事物的理解都在潜意识里,在做选择的过程中会在潜意识里把这些认知整理成一个reasoning路径。
两类reasoning框架的代表工作:
第一类框架的代表作:年AAAI文章KPRN:Knowledge-AwarePathRecurrentNetwork.
这篇论文的问题是只能在非常小的知识图谱且非常短的reasoning路径上做到很好的性能。
第二类框架的文章有很多:
一个是年PGPR:Policy-GuidedPathReasoning.
在不知道reasoning路径的groundtruth下,怎么找到reasoning路径?用reinforcementlearning,强化学习不会告诉你这条路是不是好的,它会给每条走过的路一个打分(reward),这和人比较相似,这个打分比较自然。如果走到了一个正确的推荐物品,就给1分,没走到正确的物品,就给0分,有了reward之后就可以知道这条路径的好坏。模型会进行不同的探索,得到不同的reward之后,就能够增强走到概率比较高的那个路径的概率,所以只要把loss写成reward*log(Probability),模型就会自然地去优化了。
这个方法存在的问题是:最开始大家的reward都是0,会存在很多不必要的探索过程,实际上强化学习比较难都是因为优化很难的问题,很长一段时间都没找到一个合适的模型。
这篇论文的贡献是在ground-truth很少的前提下,通过不完美的路径进行优化。不完美的路径首先是能保证走到想要的item,而且路径的其他部分跟ground-truth有重合。总体来说,会比纯随机的路径好很多,如果能用非常少的人工标注,就可以得到很多这种不完美的示例路径的话,可以给算法带来很多有价值的引导信号,它能够很快的进行很好的优化。
这篇论文有两个贡献,第一个是怎么用很少的人工标注的代价得到不完美的示例路径;另一个是有了这些不完美路径,怎么做优化,因为我们不能用不完美路径来直接当做ground-truth。如果纯粹用有监督去做,可能会有很多噪音引入,所以它提出了这种ADAC模型。下面是常规的强化学习的框架,需要依赖reward去进行优化;上面是引入的,可以利用这些不完美的示例路径,给随机生成的路径一个新的reward,利用新的reward反馈到强化学习当中。
这篇文章把路径生成推广到子图生成,从用户侧生成一个子图,从物品侧生成一个子图,把它们map到一起,从而生成多条连接路径,这样可以提升可解释性和推荐效果。
之前的知识图谱都是底层的知识图谱,每个节点都是个实体,比如阿玛尼等。但是它并不知道实体之间的高层关联,比如说阿玛尼和普拉达都是意大利的奢侈品牌,所以整个reasoning过程比较碎片化,一般只考虑到某个用户的片面的交互,用户的很多reasoning动作都没被包括进来,就像人思考中陷入了某些细节,钻牛角尖一样。有很多心理学研究指出,人的reasoning本身是多层次的,比如说我们在判断Alice喜欢什么的过程中,可能很快就能判断出来她喜欢化妆品,在化妆品里她又更喜欢意大利的奢侈品。采用多层级reasoning,不仅可以让我们抓住问题的本质,做出一系列正确的推荐,而且它的可解释性往往也会更高,这是我们从人的思考方式中引入的一种尝试。
另外还有层级的图谱进行推荐,去生成用户的层级兴趣,可以构建层级的用户表达式。
04
基于自然语言生成的非结构化解释进展
自然语言生成,年之前大部分都是用人手写出来的模板,算法最重要的作用就是填补模板中的空格,这种做法的缺点是缺乏多样性,而且模板需要手动设计。-年有了检索的方法,库里已经有很多自然语言文本了,直接从库里挑出来一个最合适的。不过挑选出来的很难做到高度个性化,而且会有copyright的问题,一些用户的文本拿来描述别的商家会有法律风险。最新的进展是用自然语言生成的方式逐字生成推荐的文字,生成出来的话是全新的,具有高度个性化,不需要人去设计模板且不存在法律风险。但由于是机器生成的,潜在的问题是语法错误,以及是否吸引人等问题。
去年的KDD文章在这方面进行了探讨,文章指出如果要保证生成的质量高,首先要保证用到包含了非常多知识的模型,也就是现在非常火的预训练模型。
预训练模型首先在wiki上面做预训练,就像是系统学习过语文的人去写广告文案,肯定要比完全没学过语文的人写得更好。第一步是pretraining,第二步是fine-tuning,用一些人已经写好的广告文案,对这个模型进行有监督训练,这样就会更加靠近应用的场景,这个过程可以形象地描述成“学习去写广告文案”,最后就是把reinforcementlearning引入进来进一步优化。这是对现在的学习框架的一个补充,在真实的落地应用场景下最终要优化的是一些userclicks这样的指标,以保证生成的效果更加具有吸引力。现在有监督的框架没有办法直接优化点击概率,因为没法直接求导。为什么要引入userclicks?因为人写的一些广告文案只是人脑子中想的一些“有吸引力的”文案,但是否真的有吸引力,还要用数据说话,增强学习可以在这方面进一步提升,保证它的吸引力。
在此提出一个新的学习方法,特别适合预训练模型。因为预训练模型非常大,用传统的强化学习的方法,需要O(T)次的forwardpropagation,T是等于要生成的广告的长度,训练起来非常慢,用V训练w的广告文案上每个epoch要大于4天的训练时间,而且效果也不是特别好。设计了MaskedSequencePolicyGradient之后,就把forwardpropagation的计算复杂度降到了O(1),训练时间也大大减少。现在的机器生成的效果已经超乎我们的想像,跟人写的非常接近,甚至有些时候比人写的更好。这是对生成的结果进行人工标注的结果,让人从四个方面对它进行标注,包括它的语言(Language)是不是流畅,有没有语法错误;写的是否像人写的(Human);它的信息是否准确(Accurate),没有过多错误;它生成的广告和实际产品的相关性如何(Relevant)。表格中的数字表示的是goodratio,接近98%都没有语言问题,流畅地像是人写的,接近99%的信息都是准确的没有错误的,如果这四条同时满足才算overallgood,overallgood的占比也有93%。这个方案已经在MicrosoftBingsearchengine上面实际落地应用了。
这篇文章可以做到个性化的文案生成,用户的信息可以进一步调优,偏工程化,是个不断实验的过程。
生成多轮推荐,第一轮生成一些推荐之后,用户可能提出他不满意。我们根据用户的反馈优化推荐结果以及解释效果,进行新的推荐,让用户很快看到一个满意的推荐。
05
总结
可解释推荐是个比较新的领域,现存的问题包括:
Fact-checking:我们怎样才能保证信息的正确性。
Zero/lowresource:现在的解释文案非常少,在很少或没有ground-truth的前提下,如何得到比较好的自然语言的解释。
Evaluation:现在的解释都比较主观,比较依赖于userstudy和线上实验,如何更好地设计离线的evaluation方法。
总体来说,这只是开始的第一步,最终可解释推荐是不应该把用户排除在ML模型的设计之外的。ML模型就是给实际用户用的,他们的体验和反馈非常重要。现在传统的定义方式都把用户排除在了模型之外,只要数学上简单就可以了,但是我们觉得应该更设身处地的为用户思考。因此,我们在推荐的时候需要考虑它的展示效果,更好地去trigger用户的反馈,比如用户有没有点击,浏览的时长多少,用户
转载请注明:http://www.0431gb208.com/sjslczl/673.html