logo 返回列表
算法有没有价值观?知乎从技术维度给出了解释
2018-04-13 1237

注:本文将来了解知乎这家公司的算法思路和应用,且详细介绍了知乎算法是如何通过识别垃圾广告导流信息,处理人身攻击类内容,或是识别答非所问等方面来维护平台氛围和内容质量的,其中不少思路值得业内工程师们借鉴。

你有没有过这种体验?标题挺吸引人,点进去看是广告,刚想评论心仪文章,评论区已经被喷子占领。类似这样的不良社区氛围非常伤害大家的阅读体验。例如美团收购摩拜的事件,一篇贩卖焦虑的文章《摩拜创始人套现 15 亿背后,你的同龄人,正在抛弃你》扫荡了朋友圈,但同样的事件,在知乎上“怎么看待美团收购摩拜”的问题下,高赞回答都是客观理性的分析,读者在评论区的互动也异常活跃却不是对立攻击。

为什么知乎上还能有这样的理性讨论?客观、理性和专业的用户、回答者是关键,而用户愿意在知乎而非其他平台客观讨论的基础,则是其社区环境、崇尚专业和友善的氛围所决定的,这也正是知乎对比其他平台的最大优势之一。

随着AI 时代来临,算法被广泛用于内容推荐和广告变现上,算法推荐对内容氛围的破坏正在引发业界担忧和反思。近期,快手和今日头条就因为“算法应当有怎样的价值观”而广受舆论关注, 4 月 9 日下午,今日头条等四款应用遭遇全网下架处理。

同样是算法,全行业都在研究用户喜好,拼命推荐内容,而知乎似乎更关注内容生产的本身,将算法大规模应用于社区氛围的管理,以生产出有价值和对用户有帮助的内容。知乎通过开发“悟空”、“瓦力”等算法机器人7X24 小时管理社区氛围,譬如,“瓦力”每天处理内容近万条,对于举报上来的不友善内容,0. 3 秒内进行处理。这个速度在整个行业都是名列前茅的。

知乎也决心加强技术能力的建设,在技术圈,今年知乎大力招募算法人才的消息已经不胫而走,明显已开始发力。而知乎在大众和互联网圈的品牌效应也是惊人,身边不少技术朋友表现出了兴趣。下面我们可以从知乎技术团队发布的专栏了解下这家公司的算法思路和应用,这几篇文章详细介绍了知乎算法是如何通过识别垃圾广告导流信息,处理人身攻击类内容,或是识别答非所问等方面来维护平台氛围和内容质量的,其中不少思路值得业内工程师们借鉴。(以下内容知乎技术授权“吴怼怼”发布,如有不妥之处欢迎指正讨论)

以下为Quote:

算法在社区氛围的应用(一):识别垃圾广告导流信息

近期,我们发现社区内出现了垃圾广告的导流内容,影响用户体验,破坏认真、专业和友善的社区氛围。为了解决这种情况,我们进行了大量努力和探索。最开始在识别导流信息上采用的是干扰转换+正则匹配+匹配项回溯的方式进行异常导流信息的识别与控制,取得了很好的效果。

但是我们发现,随着我们处理这些内容的同时,他们正在逐步增加导流信息的各种变体,常见的有以下几种方式:第一种变体是导流前缀的变化,如 QQ 导流前缀变化成企鹅,「腾顺」等等;第二变体是不使用前缀,如退款 123377281;第三种变体是导流中随机插入非特殊字符,如 319xxxx053xxxx7178。我们对这些变体进行了收集整理和分析。

通过对典型导流样本的分析,我们发现尽管导流信息变体在不断演化,但是它们所在的上下文变化并不明显。因此,我们尝试通过序列标注的方式来识别导流内容,提高算法的识别准确度。

模型

常用的序列标注算法,有 HMM、CRF、RNN、BILSTM-CRF 等。BILSTM-CRF 在多个自然语言序列标注问题(NER、POS)上都表现优秀,同时,通过实验,我们也发现 BILSTM-CRF 表现优于其他模型。

网络结构

BILSTM-CRF 模型结构如下图所示:

第一层为 Embedding 层,将输入文本转换为词向量表示。

第二层为双向 LSTM 层。LSTM 具有强大的序列建模能力,能够捕捉长远的上下文信息,同时还拥有神经网络拟合非线性的能力。相比单向的 LSTM,双向 LSTM 不仅能够利用以前的上下文信息,还能利用未来的上下文信息。

第三层为一个全连接层。作用是将上一层的输出,映射为 [T,C] 的向量,T为输入序列长度,C为标签数量。输出的也就是每个 timestep 对应的状态 score。

最后一层为 linear-chain CRF 层。CRF 计算的是一种联合概率,优化的是整个序列(最终目标),而不是将每个时刻的最优拼接起来。在 CRF 层,使用 viterbi 解码算法从状态 score 和转移矩阵中解码得到输出状态序列。

BILSTM-CRF 模型同时结合了 LSTM 和 CRF 的优点,使得其在序列标注任务上具有极强的优势。

CRF

从上述网络结构,可知要优化的目标函数由最后一层决定。

通常给定一个线性链条件随机场 ,当观测序列为:

时,

标签序列为:

的概率可写为:

其中,Z(x) 为归一化函数,对所有可能的标签序列求和。

是特征函数,通常考虑转移特征和状态特征两方面。状态特征描述标签之间的相似程度,

是上一层网络的输出。

转移特征考虑状态之间的变化趋势

在模型的概率给出之后,可以使用最大似然估计优化参数,即最小化负对数似然 -logP(y|x),从而得到整个网络的 loss function。

是否包含前后缀?

训练模型之前,我们需要标记训练数据。

标记训练数据的一个问题是,是否要包含导流信息的前后缀。如「加V:xxxxxx」,是否需要包含「加V」。通常情况下,答案应该是不包含,因为我们的实体是微信号,「加 V」不属于我们要识别的实体。

但是,我们在实验过程中发现,如果不加前后缀,模型会把大量的英文单词,或者字母数字组合,标记为导流内容。原因是,作为中文社区,英文单词出现频率很低,同时大部分导流信息都是字母数字组合,从而使得模型出现错误。

针对这种情况,我们在处理数据时,将导流信息的前后缀也作为实体的一部分,有效的降低了上述问题出现的概率。

实体编码

序列标注模型另一个需要注意的问题是,实体编码的格式。常用的序列实体编码方式有IO、BIO、BMEWO三种。

IO 编码是最简单的编码,它将属于类型X的实体的序列元素标记为 I_X,不属于任何实体的序列元素标记为 O。这种编码存在缺陷,因为它不能代表彼此相邻的两个实体,因为没有边界标签。

BIO 编码是当前实体编码的行业标准。它将表示实体的 I_X 标签细分为实体开始标签 B_X和实体延续标签 I_X。

BMEWO 编码进一步区分实体结束元素 E_X 和实体中间元素令 M_X,并为单元素实体添加一个全新的标签 W_X。

上述三种编码的示例,如下所示:

综合考虑,我们选择 BIO 编码,一是满足我们对于导流信息的区分,二是其标记方式相对通用。

效果

在实验阶段,分别将 HMM、BILSTM、BIGRU、BILSTM-CRF 做了一系列的对比,将表现比较好的 BILSTM-CRF 放在线上与原本的 Base 模型进行 AB 实验。从结果上来看,宽深度学习模型在线下/线上都有比较好的效果。线上实验结论如下:

后续的改进

为了提高模型的效果,我们需要使用更多的训练数据,构造更复杂的网络结构,使用更多的超参数设置训练模型。然而,不断增加的模型尺寸和超参数极大地延长了训练时间。很明显,计算能力已经成为了模型优化的主要瓶颈。相比 CNN 和 Attention 等操作,LSTM 仍然不太适应多线程 /GPU 计算,训练速度偏慢,不能充分利用GPU的并行计算优势。因此,我们还在尝试 SRU 等RNN 加速方案,希望在模型效果损失不大的情况下,提高模型的训练速度。

我们当前采用的是Char-based model,Char-based model在一个优势在于利用词元(lemmas)和形态学信息(morphological information ),能更好的处理导流内容内部结构,如手机号的组成。另一方面,Word-based model 更多的利用词语信息,词语比字具有更高的抽象等级,通常正确率会更高。我们希望通过训练一个新的分词模型的方式,使得在保持处理导流内容内部结构的情况下,构建 Word-based model。

算法在社区氛围的应用(二):深度学习在不友善文本识别中的应用

此前,我们常常收到知友们的反馈说「好烦哦,TA 又不友善了」、「我要举报 XX,TA 在评论区又开始杠上了」、「这种辱骂他人的人,你们都不处理吗?」等等。今年年初,我们开始尝试用深度学习算法辅助审核人员处理不友善问题,经过近三个月的探索和尝试,目前该算法第一版已经上线,并且取得相对不错的效果。

知乎不友善文本识别应用的场景和策略

目前,瓦力识别不友善的算法已经应用在知友们的举报和社区实时产生的内容中。针对这两种内容的不同场景和特点,我们采用了不同的处理策略:

举报内容的处理策略

瓦力有效地提升了我们的举报处理效率和响应速度。目前,我们每天约收到知友们近 25,000 条举报。在这些举报中,大约有 7,000 条是关于不友善的内容。模型训练阶段,我们利用经过人工标注的举报内容进行模型训练。线上预测阶段,如果模型预测某条内容属于不友善的概率x 大于阈值 p_abuse,瓦力会在 0.3 秒间完成判断并直接删除,内容被处理后,知友们也会收到相应的私信通知;如果模型预测该内容属于非不友善类型的概率 x 大于阈值 p_friend,则认为该内容属于非不友善内容,那么该举报会被忽略;不满足以上条件的内容,我们会进行多次人工审核判断,人工审核后的判断标准也会用于下一轮模型的迭代和升级。

我们重视每一个举报,并根据举报内容增强瓦力可识别的范围和准确度,还会每日人工复核知友们的举报,针对可能存在不同处理意见的举报,会根据规范与实际的应用场景多次复审。在这里,我们也非常感谢知友们的每一次举报,感谢大家与我们一起并肩维护社区氛围,我们也正是在知友们的举报中逐渐形成统一的判断标准。

全量内容的处理策略

我们会对每天新产生的内容进行全量审核,每天可以实时拦截处理 3,000 条内容。在实际的操作过程中,我们发现全量内容有如下两个特点使其不能跟举报内容共用模型和策略:

  • 不友善样本和非不友善样本分布非常不均衡;

  • 词语分布和举报内容有区别。比如,举报内容中包含「SB、NC」之类的脏词的基本属于不友善类型;但是在全量内容中脏字、脏词可能出现在影视作品讨论、陈述自己的经历等场景等非不友善内容中,例如:坑到你头皮发麻。———《鲁班智商二百五》

由于数据不均衡、数据排查标注成本较高和上述数据的分布特点,全量内容模型要做到准确率 98% 以上非常困难,因此我们根据人工审核量,选择一个适宜的阈值,在保证每天召回量的基础上,维持召回内容的处理准确率到 80% 以上,并将召回的内容进行人工审核。

知乎社区不友善文本识别系统基本框架

目前,不友善内容处理系统架构如下图所示(以知友举报内容识别识别系统为例,全量内容识别系统与其类似)

不友善内容处理系统框图

我们在选择模型时在小批量数据集上对比了 lstm 模型、svm 和朴素贝叶斯模型,lstm 模型表现最好,因此我们的模型优化工作主要集中在深度学习模型上。

相关推荐
微信扫一扫
微信扫一扫
关注公众号,了解更多资讯
联系客服

微信扫码联系客服