心理学哲学批判性思维 2018-04-11
注:本文将来了解知乎这家公司的算法思路和应用,且详细介绍了知乎算法是如何通过识别垃圾广告导流信息,处理人身攻击类内容,或是识别答非所问等方面来维护平台氛围和内容质量的,其中不少思路值得业内工程师们借鉴。
你有没有过这种体验?标题挺吸引人,点进去看是广告,刚想评论心仪文章,评论区已经被喷子占领。类似这样的不良社区氛围非常伤害大家的阅读体验。例如美团收购摩拜的事件,一篇贩卖焦虑的文章《摩拜创始人套现 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 的优点,使得其在序列标注任务上具有极强的优势。
从上述网络结构,可知要优化的目标函数由最后一层决定。
通常给定一个线性链条件随机场 ,当观测序列为:
时,
标签序列为:
的概率可写为:
其中,Z(x) 为归一化函数,对所有可能的标签序列求和。
是特征函数,通常考虑转移特征和状态特征两方面。状态特征描述标签之间的相似程度,
是上一层网络的输出。
转移特征考虑状态之间的变化趋势
在模型的概率给出之后,可以使用最大似然估计优化参数,即最小化负对数似然 -logP(y|x),从而得到整个网络的 loss function。
是否包含前后缀?
训练模型之前,我们需要标记训练数据。
标记训练数据的一个问题是,是否要包含导流信息的前后缀。如「加V:xxxxxx」,是否需要包含「加V」。通常情况下,答案应该是不包含,因为我们的实体是微信号,「加 V」不属于我们要识别的实体。
但是,我们在实验过程中发现,如果不加前后缀,模型会把大量的英文单词,或者字母数字组合,标记为导流内容。原因是,作为中文社区,英文单词出现频率很低,同时大部分导流信息都是字母数字组合,从而使得模型出现错误。
针对这种情况,我们在处理数据时,将导流信息的前后缀也作为实体的一部分,有效的降低了上述问题出现的概率。