Yandex如何教授人工智能以发现新闻中的错误

我们经常谈论起源于Yandex的技术和库。 实际上,我们至少应用和开发了第三方解决方案。

今天,我将向Habr社区介绍此类示例之一。 您将了解为什么我们教BERT神经网络在新闻标题中查找错别字,而不使用现成的模型,为什么您不能在多个视频卡上使用和运行BERT以及我们如何使用这项技术的关键功能-注意机制。



挑战赛


Yandex.News是一项从与我们相关的出版物中收集新闻的服务。 这不仅是首页上阅读和引用最多的媒体新闻,而且是主题部分,甚至是所有出版物中的精选内容。 无论如何,这些都是成千上万个站点和数百万个标题,机器每隔几分钟必须从中选出一个。

这是一台机器,因为我们从不干预当天的照片:我们不在那里手动添加新闻,我们不从那里删除新闻(无论我们想要多少),我们也不编辑标题。 围绕此已被打破许多副本。 完全算法的方法具有优点和缺点。 我们可以通过技术改进某些东西,而不能通过某些技术改进。 即使标题中存在拼写错误或错别字,我们也不会纠正它们。 我们已在标题上添加了出版物的图标,以便清楚了解新闻的来源。 在某种程度上,这有所帮助,但我们并未对错误有所了解,而是开始寻找一种在不对文本进行更改的情况下消除它们的方法。

如果无法纠正错误,则可以训练机器查找由于错误而不适合顶部的标头。 此外,自从还没有发明该名称以来,Yandex就专门研究俄罗斯形态。 看来我们采用了神经网络-重点在于。

工具


Yandex具有Speller技术,可用于查找和修复错误。 借助CatBoost机器学习库, Speller可以解密无法识别的单词(“形容词”→“同学”),并在搜索拼写错误时将上下文考虑在内(“错过音乐”→“下载音乐”)。 Speller似乎很适合我们的任务,但不是。

拼写器(内部称为搜索守护程序)已经在体系结构级别得到了改进,可以解决完全不同的任务:帮助用户恢复正确的请求表单。 在“搜索”中,是否正确选择大小写,是否使用大写字母或逗号并不重要。 在那里,对于搜索查询“ Haminguel”而言,猜测该人已经想到了海明威就显得尤为重要。

头条新闻中的错误是由相对识字的人造成的,他们不太可能写Haminguel。 但是,错误的批准(“航班延误”),遗漏的单词(“年轻人尝试开车”)和多余的大写字母(“银行总裁”)是司空见惯的。 最后,有一个形式正确的句子“我将在普斯科夫修理高尔基街”,一个普通的监护人不会屈服于它(嗯,如果这是作者的承诺呢?),但这显然是一个被宠坏的新闻标题。 此外,新闻中的任务与搜索中的任务不同:不是更正错别字和错误,而是要检测它们。

我们还有其他选择,例如基于DSSM的模型(如果有趣,我们在有关Palekh算法的帖子中简要讨论了这种方法),但它们也有局限性。 例如,没有完全考虑单词顺序。

通常,现成的工具要么不适合我们的任务,要么受到限制。 因此,您需要创建自己的-训练模型。 这是使用BERT技术的很好理由,该技术于2018年对开发人员可用,并显示了令人印象深刻的结果。

BERT简介


现代自然语言处理(NLP)问题的主要问题是找到人们标记出来的足以训练神经网络的示例。 如果您需要质量增长,那么培训样本应该非常大-数以亿计的示例。 同时,NLP中有许多任务,它们都是不同的。 为每个任务以相似的数量收集数据是漫长的,昂贵的并且通常是不可能的。 即使是世界上最大的公司。

但是,可以通过两个阶段的培训来解决此问题。 首先,在数十亿个单词的庞大主体上,神经网络被教了很长时间且花费很长时间(这是预训练)的语言结构。 然后,可以快速廉价地将网络扭曲以完成特定任务-例如,将评论分为好和坏(这是微调)。 在Tolok中标记了大约1万个示例。

BERT技术(来自变压器的双向编码器表示)就是基于这种思想。 这个想法本身并不是什么新鲜事物,并且以前已经应用过,但是有很大的不同。 Transformer是一种神经网络体系结构,使您可以立即考虑整个上下文,包括句子的另一端和中间的分词转换。 这是它与以前考虑了上下文的流行架构的区别。 例如,一个LSTM神经网络的上下文长度最多为几十个单词,这里总共是200个。

GitHub上 ,可以使用TensorFlow源代码,甚至可以使用102种语言(从俄语到volapyuk)进行预先训练的通用模型。 似乎可以立即使用解决方案-立即获得结果。 但是没有

事实证明,俄语文本中的通用模型显示出的质量明显低于英语模型,打破了英语文本中的记录(这是合乎逻辑的)。 在俄文中,她输给了我们在DSSM上的内部模型。

好的,您可以进行自我教育-幸运的是,Yandex拥有足够的俄语文本和机器学习经验。 但是有细微差别。 学习需要一年!

事实是BERT适用于Google张量处理器(TPU),因此开箱即用,它只能与一个视频卡(GPU)一起使用。 而且不可能用任何脚架来平行一个人的额头:每一步将400 MB的数据从一张卡传输到另一张卡是非常昂贵的,平行化将变得毫无意义。 怎么办

最佳化


他们开始寻找可以大大加速此事的任何想法和解决方案。 首先,我们注意到模型中的每个数字都占用32位内存(计算机中数字的标准浮点数)。 它看起来很小,但是当您拥有1亿个砝码时,这至关重要。 我们并非到处都需要这样的精度,因此我们决定将数字部分转换为16位格式(这就是所谓的混合精度训练)。

在此过程中,借助许多文件和拐杖,我们依靠当时还很原始的NVIDIA commit拧紧了XLA编译。 多亏了这一点,我们的NVIDIA Tesla V100卡(其中一小部分服务器在莫斯科的便宜地区像一间公寓一样)能够通过Tensor Cores上的16位算法充分发挥其潜力。

我们仅对俄文标题感兴趣,但是我们以此为基础的多语言模型接受了数百种语言的培训,甚至包括人工Volapuk。 将所有语言的单词翻译成向量空间都存储在模型中。 此外,您不能将它们带走,而只能从那里将其删除-我不得不出汗以减少字典的大小。

还有一件事。 如果您是科学家,并且计算机在桌子底下,则可以为每个特定任务重新配置那里的所有内容。 但是在真实的计算云中,以相同的方式配置了数千台计算机,例如,为每个新的TensorFlow功能重建内核是很成问题的。 因此,我们花了很多心血来收集所有新型芯片都可以做到的封装版本,并且不需要在云中对视频卡进行彻底的更新和重新配置。

通常,将所有果汁尽可能地榨干。 而我们做到了。 一年变成了一周。

培训课程


建立正确的数据集通常是工作中最困难的部分。 首先,我们学习了带有分类标记的300万个标题的分类器。 看起来很多,但只有3万种-带有错别字。 从哪里获得更多示例?

我们决定看看媒体本身正确的标题。 Yandex.News的历史中有超过200万个这样的消息。 宾果! 虽然现在还为时过早。

事实证明,媒体重做头条新闻并不是因为错误。 新的细节浮出水面-编辑器将一个正确的措词替换为另一个。 因此,我们将自己限制在最多三个字母之间的差异进行更正的位置(尽管这里仍然有些杂音:“发现两个” –变成“发现三个”)。 所以我们打了一百万个错字。 我们首先研究了有噪声的大量选择,然后研究了无噪声的小托勒标记。

质素


在此类任务中,习惯性的是测量准确性和完整性。 在我们的例子中,准确性是正确判断在所有有关标题错误的判断中所占的比例。 完整性-我们在所有错误标头中捕获的错误标头的比例。 理想世界中的这一目标和另一目标都应追求100%。 但是在机器学习任务中,这些指标往往会发生冲突。 也就是说,我们越扭曲精度,完整性下降得越多。 反之亦然。

在以前的基于DSSM的方法中,我们已经实现了95%的准确性(即5%的误判率)。 这已经是一个相当高的指标。 因此,我们决定保持相同的准确性水平,并查看新模型如何改变完整性。 她从21%上升到78%。 这绝对是成功的。

在这里可能会结束它,但是我记得谈论关注的承诺。

神经网络用毡尖笔


人们普遍认为神经网络就是这样的黑匣子。 我们将某些东西输入到输入中,并将某些东西输入到输出中。 为什么以及如何是一个谜。

此限制旨在规避解释的神经网络。 BERT是其中之一。 它的可解释性在于注意机制。 粗略地说,在神经网络的每一层中,我们都重复相同的技术:我们查看具有不同“注意”的相邻单词,并考虑与它们的交互。 例如,当神经网络处理代词“ he”时,它“仔细地看”“ he”所指的名词。

下图以不同的红色阴影显示了令牌“看”什么单词,从而为最终分类器层积累了有关整个标题的信息。 如果单词中有错字-注意会突出显示,如果单词不一致-两者都会(并且可能取决于它们)。



顺便说一下,在这个地方,人们可以辨别出神经网络的全部潜力。 在训练的任何阶段,我们的模型都不知道示例中错字的确切位置:它只知道整个标题不正确。 而且她仍然知道,由于数字不一致,“一所可供1224个地方就读的学校”是不正确的,她特别强调了数字4。

我们并没有停止打字错误,而是开始应用一种新方法,不仅可以搜索错误,还可以识别过时的标题。 但这是一个完全不同的故事,我们希望在不久的将来重返哈勃。

有用的链接,供那些想深入了解本主题的人使用


Source: https://habr.com/ru/post/zh-CN479662/


All Articles