算法在社区氛围的应用(三): 机器学习在答非所问识别上的运用

标签: 算法 社区 应用 | 发表时间:2018-03-27 21:16 | 作者:知一声
出处:http://www.zhihu.com
跳绳的好处有哪些?可以锻炼哪些肌肉?
A:心肺功能比之前有提高。
B:有助于提高身体的乳酸阈值。
C:有助于提高身体的协调性。
D:谢谢,我去买了跳绳。

请问,以上哪个答案是答非所问?

现在,瓦力可直接识别并处理该题中的答非所问内容。

我们鼓励认真、专业的分享,期待每一次讨论都能碰撞出更多有价值的信息,并希望每一个用心的回答都能够得到好的展示,为他人带来更多帮助。但是,我们也发现在社区中出现了答非所问类的内容,影响知友们获取有价值内容的效率。

为了更好地识别答非所问类内容,我们采用了多种模型,包括传统的机器学习模型和比较新的深度学习模型。通过前期对语料的分析,我们发现语言用词、作者历史行为、知友对内容的反馈信息等都具有比较明显的区分度,因而我们尝试使用特征工程和传统机器学习方法实现了瓦力识别答非所问的第一版模型,并达到了一个相对不错的效果。

Random Forest

随机森林 (Random Forest) 是树模型里两个常用模型之一(另一个是 Gradient Boosting Decision Tree)。顾名思义,就是用随机的机制建立一个森林,森林由多棵分类树构成。当新样本进入时,我们需要将样本输入到每棵树中进行分类。打个形象的比喻,知乎森林召开议会,讨论 @刘看山 到底是狗还是北极狐(看山,我知道你是北极狐的,手动捂脸逃...),森林中的每棵树都独立发表了自己对这个问题的观点,做出了自己的判断。最终刘看山是狗还是北极狐,要依据投票情况来确定,获得票数最多的类别就是这片森林对其的分类结果。如同图一所示意境。

图 1 森林会议

有了树我们就可以分类,那么在答非所问这个场景下,怎么来建立这一个森林呢?

样本

通过训练语料和业务数据,进行特征工程,提取出了以下三类特征:

  • 回答和问题的文本特征:如二者的词向量、词向量相似度、关键词相似度、话题相似度等;
  • 回答的统计特征:如回答的赞同、反对、评论、举报等是用户对其的交互特征;
  • 回答作者的统计特征:正向行为,如关注、回答、提问、评论、举报等,负向行为,如回答被赞同、被反对、被感谢、被举报等。

同时,通过历史积累、用户标注、策略生成产生出了训练样本集,然后用以上特征类别表示出每条样本。

分类树

使用随机有放回抽样选取每棵树的训练样本,随机选取 m 个特征 (m < 总特征数) 进行无限分裂生长,成长为能独立决策的树。

投票决策

通过建好的多棵分类树,对新的样本进行决策投票,获得最终的分类结果。

对于 Random Forest 的实现,有很多优秀开源的实现,在实际中我们封装了 Spark 中的 Random Forest 完成了模型的迭代。最终取得了 Precision 97%,Recall 58% 左右的不错结果。

细心的知友可能注意到了,我们的特征里有一类特征是与时间和回答的暴光有关的,即回答和作者的统计特征。为此我们在现有模型的基础上分析了这类特征的时间累积效果,如图二所示。从图中可以看到,经过一天的统计特征累积,Precision 达到了 90%,但 Recall 只有 40%,可以说这一天时间对于 40% 的答非所问有了比较充分的特征积累以支撑对其的准确判断。而随时间的增加,基本上 Precision 和 Recall 都有提升。但并不是时间越长,提升越多。

最终我们结合产品应用层面和算法阈值,分别选出两个时间点,一方面牺牲 Recall 快速识别处理一部分答非所问的回答,另一方面允许一定的处理延时,保证了大量的 Recall,大大净化了回答区域的无关内容。

图 2 统计特征累积周期(天)对 Precision 和 Recall 的影响

深度学习模型

传统机器学习的一个核心内容就是特征工程,包括特征提取、特征选择等。

  • 特征提取:从原始数据出发构造出特征,通常包括业务和对语料的统计分析。
  • 特征选择:从提取出的候选特征中挑选出有用的特征。

但特征工程总是会耗费比较多的时间,而且在答非所问的识别中一些时间相关的特征,还延长了处理周期,不利于快速处理。而广为流传的深度学习,能自动对输入的低阶特征进行组合、变换,映射到高阶的特征,这也促使我们转向深度学习进行答非所问的识别。

深度学习兴起于图像识别,其过程可以引用图三[1] 大致描绘,输入特征,经隐藏层逐层抽象、组合,最后经输出层得出识别结果。

图 3 深度学习示意

Word Embedding

相较于图片天然的像素表征,可以直接输入到深度神经网络里,文本需要进行向量化后方可作为网络的输入。关于「词向量化」的精彩描述可以参考[2]。此处我们抽取了知乎社区 1000 多万真实的文本信息,包括问题、回答、文章、评论等数据,利用 Facebook 开源的 FastText 训练了 256 维的词向量和字向量。对于 FastText 的原理和用法此处不作详细阐述,感兴趣的朋友可以参考[3]。

CNN 网络 (Convolutional Neural Network)

我们模型的网络结构基本上采用了 Severyn[4] 提出的网络结构,但在一些细节上做了些改动,比如图四中的 CNN-answer/question, 我们结合了 Wide & Deep[5] 的思想,以提取更为丰富的语义信息。

图 4 模型结构

下面简要介绍每一层的含义:

Embedding Layer——该层利用预训练好的 FastText 词向量将原始词序列表达成词向量序列

Convolutional Layer——此层主要通过卷积操作,同时捕获类似于 N-Gram 特征(但同 N-Gram 还是有差异的)。我们的模型选取了 [2, 3, 4, 5, 6] 5 个卷积核宽度,为每个卷积核配置了 64 个 filter

Pooling Layer——池化层,对经过卷积操作提取的特征进行 Sampling。此处我们采用了 K-Max-Average pooling,对卷积层提取的特征,选择出激活程度 top-K 的特征值的平均值作为 pooling 的结果

Feature Join & Fully connected Layer——将前述几层获得的特征,以及额外信息进行融合,作为最终的特征输出,以便于最后的决策判断。实际上,我们在 Fully Connection 后面加了 3 层 Dense Layer,以提高网络的表达能力。

Softmax——将最后的特征转换成二分类决策概率。

最终训练好该模型,在验证集上达到了 Precision 78%, Recall 80% 的效果。Recall 虽有比较大的提升,但 Precision 并没有前文描述的 Random Forest 的方法好。

效果

目前,答非所问几个模型都上线到了知乎产品的诸多场景下,如反对、举报、专项清理等。每天清理约 5000 条新产生的「答非所问」内容,以及此前现存的 115 万条「答非所问」内容。

为了维护良好的讨论氛围,我们还需不断优化和升级。我们还有很长的路要走,后续我们将建立更为精确的语义模型,辅以问题意图识别,知识库等,更加准确地识别出所有内容。瓦力的升级,离不开知友们的帮助。欢迎大家在日常使用中,继续通过「反对」和「举报」向我们提供更多反馈,与我们共同维护知乎健康的讨论氛围。


本文作者:知乎内容质量安全团队 孙先

参考文献:

[1] Breaking it down: A Q&A on machine learning

[2] 词向量和语言模型

[3] FastText

[4] Learning to rank short text pairs with convolutional deep neural networks

[5] Wide & Deep Learning for Recommender Systems



来源:知乎 www.zhihu.com
作者: 知一声

【知乎日报】千万用户的选择,做朋友圈里的新鲜事分享大牛。 点击下载

相关 [算法 社区 应用] 推荐:

算法在社区氛围的应用(三): 机器学习在答非所问识别上的运用

- - 知乎每日精选
现在,瓦力可直接识别并处理该题中的答非所问内容. 我们鼓励认真、专业的分享,期待每一次讨论都能碰撞出更多有价值的信息,并希望每一个用心的回答都能够得到好的展示,为他人带来更多帮助. 但是,我们也发现在社区中出现了答非所问类的内容,影响知友们获取有价值内容的效率. 为了更好地识别答非所问类内容,我们采用了多种模型,包括传统的机器学习模型和比较新的深度学习模型.

社区发现算法-Louvain - 简书

- -
Louvain算法[1]是一种基于多层次优化Modularity[2]的算法,它的优点是快速、准确,被[3]认为是性能最好的社区发现算法之一. Modularity函数最初被用于衡量社区发现算法结果的质量,它能够刻画发现的社区的紧密程度. 那么既然能刻画社区的紧密程度,也就能够被用来当作一个优化函数,即将结点加入它的某个邻居所在的社区中,如果能够提升当前社区结构的modularity.

Wakoopa – 软件共享发现社区 | 小众软件 > 在线应用

- manabomb - 小众软件 - Appinn
Wakoopa 是软件界的豆瓣,强大的软件共享与发现社区. 它在电脑上后台运行程序,详细记录用户的电脑使用情况,包括使用了哪些软件、游戏、网络服务,每个程序使用多长时间. 再将这些信息上传到 Wakoopa 社区生成可视化信息图表,帮助你了解自己的电脑使用习惯. 既然是社区,你自然可以共享软件使用信息、评价软件、推荐软件、加入群组、广加好友、远程监视机器、窥探他人隐私等等.

Simhash算法原理和网页查重应用

- - 互联网旁观者
传统的hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法. 产生的两个签名,如果相等,说明原始内容在一定概率下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别极大. 从这个意义上来说,要设计一个hash算法,对相似的内容产生的签名也相近,是更为艰难的任务,因为它的签名值除了提供原始内容是否相等的信息外,还能额外提供不相等的原始内容的差异程度的信息.

电子商务推荐算法工业应用总结

- - 冰火岛
电子商务推荐算法工业应用总结. 谨以此文纪念阅读推荐算法论文,设计开发推荐算法,不断踩雷,加班的日子. 推荐系统就是要恰当的时间合适的地方,采用适用的方法给正确的人推荐满足需求的商品. 即 when where who what how. 本文关注的是其中的一个方面,电子商务推荐算法(即how). 开发满足实际工程应用的算法,推荐算法人员具备的能力:以工程化的方法,产品设计者的思维来设计和开发算法.

常见算法在实际项目中的应用

- - 博客 - 伯乐在线
近日Emanuele Viola在Stackexchange上提了这样的一个问题,他希望有人能够列举一些目前软件、硬件中正在使用的算法的实际案例来证明算法的重要性,对于大家可能给到的回答,他还提出了几点要求:. 使用这些算法的软件或者硬件应该是被广泛应用的;. 例子需要具体,并给出确切的系统、算法的引用地址;.

一致性哈希算法及其在分布式系统中的应用

- BeerBubble - 博客园-EricZhang&#39;s Technology Blog
本文将会从实际应用场景出发,介绍一致性哈希算法(Consistent Hashing)及其在分布式系统中的应用. 首先本文会描述一个在日常开发中经常会遇到的问题场景,借此介绍一致性哈希算法以及这个算法如何解决此问题;接下来会对这个算法进行相对详细的描述,并讨论一些如虚拟节点等与此算法应用相关的话题.

苹果7月修改应用排行算法:首次参考用户评级

- - 博客园_新闻
研究机构 Fiksu 日前发布报告显示,苹果在 7 月底悄悄修改了应用商店(App Store)和 iTunes 中应用排行的算法,而新算法首次将用户对应用评级纳入排行时参考的因素. 根据 Fiksu,在 7 月份前,苹果应用排行的算法一般只参考应用的“下载数量”和“下载速度”. 但是在 7 月底,Fiksu 研究员发现,部分应用的排名出现令人意外的上升和下降,而这些应用在“下载数量”和“下载速度”方面却没有呈现相应的变化.

图片占用内存的算法和自定义应用堆内存

- - 移动开发 - ITeye博客
android中处理图片的基础类是Bitmap,顾名思义,就是位图. 图片的width*height*Config. 如果Config设置为ARGB_8888,那么上面的Config就是4. 一张480*320的图片占用的内存就是480*320*4 byte. 前面有人说了一下8M的概念,其实是在默认情况下android进程的内存占用量为16M,因为Bitmap他除了java中持有数据外,底层C++的 skia图形库还会持有一个SKBitmap对象,因此一般图片占用内存推荐大小应该不超过8M.

模拟退火算法应用于最优排列问题和最优组合问题 之 排列篇

- 团子小囧 - 博客园-首页原创精华区
一般学习模拟退火算法的时候,都是用全排列问题作为例子讲解,所谓全排列问题,就是说解的长度(或者步骤)是确定的,只不过排列顺序不同罢了,其中任何一种排列顺序都是问题的一个解,我们通过不断尝试不同的排列顺序,找到其中最优的一个. 象TSP旅行商问题就是典型的全排列问题,所有的城市都是两两互联的,每个城市都要去一次(且只能去一次),先去那个后去那个,顺序不同只不过花费的代价不一样,但都是问题的一个解决方案.