雷锋网 AI 科技评论按:语言词汇的多义性已经是一个越发让人头疼的问题。比如女生对男朋友说:“生日礼物我想要MAC”,本来心怀期待地揣测他买来的唇彩会是什么色,结果收到的可能是一台苹果笔记本电脑…… 苹果电脑本身当然并没有哪里不好,但词语指代弄混的时候还是挺让人难受的。
人类尚且有理解不对词语类别的时候,人工智能自然也还没能攻克这个问题。不过雷锋网 AI 科技评论了解到,OpenAI 近期新设计的 AI 在结合上下文的词语判别上做出了突破,测试中的表现相比已有的其它 AI 也有了大幅提升。
「The prey saw the jaguar across the jungle」(猎物看到了穿越丛林的美洲豹)
「The man saw a Jaguar speed on the highway」(这个人看到美洲豹奔驰在高速公路上)
OpenAI 在近期的一篇论文中介绍了自己新设计的神经网络 Type,它可以尝试理解句子中的单词,把它归类到大约一百个自动学到的非独占性类别中。OpenAI 想到的典型例子是「jaguar」或者「美洲豹」,比如对于上面两个句子,这个系统不会立即把两个「jaguar」都统一判定为跑车、动物或者别的东西中的某一种,而是依据预选择的类别解一组 20 个贝叶斯问题,推理得到判断结果。相比之前的系统,Type 在数个实体分辨(entity disambiguation)数据库上的测试结果都有大幅提升。
在 OpenAI 的训练数据中,「jaguar」这个词大概有 70% 的情况是指跑车,29% 的情况是指动物,还有 1% 的情况是指美洲豹攻击机。根据 Type 判断,「The man saw a Jaguar speed on the highway」中的「jaguar」的各种语义出现的可能性变化并不大,看起来模型觉得一只大猫在高速公路上跑步也没什么不妥;但「The prey saw the jaguar across the jungle」中,模型的判断就发生了很大变化,非常肯定这是一只大猫,毕竟捷豹跑车根本不适合在森林里开。
模型在 CoNLL(YAGO)数据集上的测试准确率为 94.88%,此前的顶级模型的表现为 91.5% 和 91.7%;在 TAC KBP 2010 挑战赛数据集上的准确率为 90.85%,此前的顶级模型的表现为 87.2% 和 87.7%。之前的这些方法使用的是分布式表征,OpenAI 的 Type 在这些任务中都有显著的提升,距离完美的类别预测准确率 98.6% 到 99% 越来越近。
这个系统以如下的步骤运行:
从单词的维基百科页面提取所有的内链,确定这个词可能指代的实体都有什么。比如,对于 https://en.wikipedia.org/wiki/Jaguar 这个维基百科的链接,经过分析之后确定这个页面的内容确实是「jaguar」这个词的一个意思。
爬维基百科的分类树(借助 Wikidata 的知识图),从而确定每一个实体都能被归入哪些类别。比如在 https://en.wikipedia.org/wiki/Jaguar_Cars 捷豹汽车的页面底部,有下面「英国品牌」、「汽车品牌」、「捷豹汽车」几个类别分类(而且每个类别都还有自己所属的类别,比如属于汽车)
选出大约 100 个类别作为模型的类别系统,然后优化对类别的选择,以便让它们可以完全覆盖到任何实体。我们已经知道了从实体到类别的映射,所以对于任意给定的类别系统,都可以把每个实体表征为一个大约 100 维的二进制向量,其中的每一维就对应着是否属于某个类别。
根据每个维基百科的内链和上下文文本生成训练数据,其中会把单词和文本内容映射到刚才提到的大约 100 维的二进制向量,然后训练一个神经网络预测这种映射。这一步就把前面的几步联系起来了,维基百科的链接可以把单词映射到一个实体,然后从第二步知道每个实体的类别,第三步选出了这个分类系统里面要用的类别。
到了测试的时候,给定一个词和上下文,这个神经网络的输出就可以看作是这个词属于每个类别的概率。如果确切知道了类别系统的内容,就可以缩小范围,确定到某一个实体(假设类别是经过精心选择好的)。不过也必须经过基于概率的一组 20 个问题组成的判断过程,通过贝叶斯理论计算出这个词被分辨为各个可能的类别的概率分别是多少。
「蓝莓是一种可以食用的水果,又属杜鹃花科越橘属植物产出。」
「在 2013 财年的第二季度,黑莓售出了 680 万台手持设备,但同时也首次被竞争对手诺基亚的 Lumia 系列的销量超越。」
「在 Python 中可以可以操作 string。」
「Python 一般是无毒的。」
Wikidata 的知识图经过转换后可以作为实体到类别映射的细粒度训练数据源。OpenAI 的研究人员们递归使用其中的「instance of」(是 xxx 的一个实例)关系以确定任意给定的实体都可以属于哪些类型,比如,每个「人类」下面的有效节点都属于「人类」类型。维基百科也可以通过「category link」功能提供实体到类别的映射。
从维基百科的内部链接得到的统计结果可以很好地预测特定的词汇指代某个实体的概率如何。不过数据里有很多噪声,因为维基百科经常会链接到类型的某个实例而不是这个类型本身,比如会把「国王」链接到「英国查尔斯王子一世」(回指),或者链接到一个昵称上去(转喻)。这就让有联系的实体的数量大爆炸,也让链接出现的频率变得混乱(比如「国王」有 974 个相关的实体,「皇后」链接到皇后乐队有 4920 次,链接到伊丽莎白二世有 1430 次,而链接到君主只有 32 次)。
最简单的处理方法是对不经常出现的链接剪枝,不过这也会带来丢失信息的问题。所以 OpenAI 的研究人员们转而使用 Wikidata 的属性图,启发式地把链接转换为它们的「一般」意思,像下图这样。
经过这样处理之后,「国王」相关的实体就从 974 大幅下降到了 14 个,同时「皇后」到「君主」的链接数目也从 32 个增加到了 3553 个。
我们希望学到最好的类别系统和参数,这样才能让分辨单词的准确率最大化。可能的类别种类组合有无数多种,找到一个精确解似乎难以实现。所以 OpenAI 的研究人员们使用了启发式搜索或者随机优化(演化算法)的方法选出一个类别系统,然后用梯度下降训练出一个类别分类器,用来预测类别系统的表现。
在这里,理想的类型系统应当有足够的区分度(这样可以快速减小可能的实体分布),同时还应当易于学习(这样单词的上下文可以包含足够的信息,足以让神经网络推测适合什么类型)。OpenAI 的研究人员们用了两种启发式方法进行类别系统的搜索,一种是基于可学习性的(训练出的分类器预测类别所在的平均 AUC),另一种是先见准确率(如果网络预测对了所有类型,那么辨别实体的能力如何)。
OpenAI 的研究人员们为数据集中最常见的 15 万个类别分别训练了二分类分类器,分类器的输入就是上图中文本窗口对应的一段。分类器的 AUC 就看作为这个类型的「可学习性」分数。高 AUC 表示表示很容易从上下文中推测出所属类型,不好的表现就意味着训练数据不够,又或者设定的文本窗口并没有起到什么帮助(在 ISBN 之类的非自然类型预测中很容易发生)。完整的模型需要好几天才能训练好,所以他们也同步设计了一个小得多的模型作为「可学习性」分数的代理模型,只需要 2.5 秒就可以完成训练。
「可学习性」分数和计数统计都可以用来估计把某一组类别作为类别系统之后的模型表现。交叉熵方法的优化示意图如下。
每步优化中使用了 100 个样本。更多的样本可以让优化结果更准确,但花费的时间也更长、模型大小也更大。图示的优化得到的结果如下图
整个模型的交叉熵如下
根据类型系统优化得到的最好结果,OpenAI 的研究人员们接下来就可以用类型系统生成的标签给维基百科的数据做标注。得到了这样的数据后(在 OpenAI 的实验中,他们共用了英语和法语的各 4 亿句)就可以训练双向 LSTM,独立地预测每个单词的所有类型的符合情况。在维基百科的源文本上只有网站内链是可以确认使用的,然而这也已经足以训练出一个类别预测首位预测准确率超过 0.91 的深度神经网络。
有趣的是,在束搜索得到的某个分类系统中,除了包含了典型的航空、衣着、游戏之类的分类之外,还令人意外地包含了一些非常具体的分类,比如「1754 年在加拿大」,意味着 1754 年在用来训练网络的一千多篇维基百科文章中是非常充实有趣的一年。
OpenAI 表示自己的这项研究和以往尝试解决这个问题的方法有许多的不同,他们也很感兴趣分布式表征的端对端学习相比他们开发的基于类别推理的系统最好能有什么样的表现。而且论文中的分类系统只是用了维基百科数据集的很小的一部分创建出的,如果扩展到整个维基百科的规模,有可能可以建立出有更广阔应用空间的分类系统。
论文地址:https://arxiv.org/abs/1802.01021
开源地址:https://github.com/openai/deeptype
via OpenAI,雷锋网 AI 科技评论编译
相关文章:
邀请函or挑战书?OpenAI 喊你研究 7 个未解 AI 问题