破局数据困境,迭代一年的终版解决方案竟是纯规则方法!

5e415f14824eb7616c3dfb4da1c560af.png

文 | Severus

大家好,我是Severus,一个致力于做好中文自然语言理解的老程序员。

一年前,我在萌屋的第一篇推文(在错误的数据上,刷到 SOTA 又有什么意义?)中,重点讲述了关系抽取任务所面临的数据质量困境。但在当时,我也不得不承认,即便我将问题点出,大家也都同意这个痛点,我们也仍旧没有好的方法去批量构造高质量的数据,这也给我的下一步工作带来了很大的困难。

继续回归远监督?那么就又要面对无尽的数据清洗工作,以及面对知识库未收录的数据时,仍会出现的大量缺失。而远监督之外的规则?中文又没有相对应的解析结构能够指导我们产出更好的数据。

即便困难重重,我们也没有放弃探索。时隔一年,我们终于想明白了其中的一些问题,以及做出了一些成果,在这篇推文中,分享给大家。

首先上效果:

9495a35ea7152faa0fd810d6aedc30be.png

schema 预测与自然语义预测

实际上,使用远监督来做数据的关系抽取任务,虽然其出发点未必如此,但皆可看作是 schema 预测任务。这也出于在任务定义时,总想要一步到位,做得“优雅”。如:两个人结婚,则直接要求模型预测“妻子”与“丈夫”的关系;一个人唱了一首歌,则要求模型预测这个人的职业是歌手等。由此,则衍生了一些伪命题,如所谓重叠关系问题等。

而正如我所讲,这些答案看似合理,但这种“合理”不过是我们预先知道了事实之后,所感受到的一种错觉。实际上,如果完全使用任务文本中的自然语义,哪怕是抽取后加入逻辑推断,有些答案也无法得出(比如,唱过歌的人不一定是歌手,结婚的人也很难分辨妻子丈夫关系)。那么,任务中所要求的答案,多数则是需要其他的事实知识辅助推断得出,而从技术上,我们又无法假定,模型能够精准记住、使用世界上所有的事实知识(又或者说这件事是不可能的,首先收录不可能完全,同时统计模型会泛化),也就是说,理想化的逻辑推断几乎是不可能存在于统计模型之中的。那么,schema 预测则一定会导向不合理的泛化。

如这段文本:克里斯汀·斯图尔特与相恋7年的女友订婚

如果模型没有预先记住克里斯汀·斯图尔特的性别,则很容易得到由 schema 预测其他答案时,泛化得到 <克里斯汀·斯图尔特,性别,男> 这一关系,而实际上……

dad3c2a8f807ea4ed497828a12f8e580.png

所以,我一直主张的是,关系抽取任务应当回归到自然语义中,即答案完全从输入文本中触发得到。需要基于推断得到的关系,放到任务特化的推理步骤进行。

即,“克里斯汀·斯图尔特与相恋7年的女友订婚”这段文本中,关系抽取模块仅抽取:<克里斯汀·斯图尔特,订婚,女友>,而 <克里斯汀·斯图尔特, 性别,?> 由推理模块结合其他信息完成。

最近我司与中科院共同发表的 UIE,则是给出了一种使用 DNN 模型从自然语义中做信息抽取的实例,其模型思路上和我的解法大同小异,而其最大的难题仍旧是,如何构造出准确又全面的训练数据

中文数据的难题

实际上,想要得到大规模的训练样本,最简便的方法,就是整合各大已有数据集,无论是公开的,还是非公开的。但是多源数据集整合的过程中,则必然会存在一个问题:数据集标准不一致问题。例如,“苏里南”这一 mention,可能在A数据集中被标为“世界地区”,在B数据集中被标为“国家”。或 schema 定义不一致,A数据集中只定义了“所属”,而B数据集中定义了“首都”。

同样的头尾实体,相似触发的文本,如果最终的答案不一致,则会对统计模型造成很大的困惑。

而这样的问题,每增加一份数据集,每切换一次领域,则需要重新面对一次,而如果是 model-centric 地做这个任务,又不会想要花大力气在任务数据上,可造成的结果又是随着数据规模的扩大,trick 也会不断增加,反倒消耗了很多的精力。

所以,我们决定设计一个方法,能够简单、灵活配置,并较准确地抽取出文本中的已配置关系(它一定是一个规则的)。而首先,我们就先要有一个中文文本的解析表示方法,将中文无限的词和表达方式收拢到有限的表示模式中,从而至少实现配置可枚举的体系。

中文的解析体系

之前的推文中,我提到过,中文和英文存在很大的区别。具体来讲,中文相比于英文,存在以下特性:

  • 类有定职则词无定类:即如果将句子中每一个词与句子中的成分对应起来,则一个词可能会有多个词性

  • 词有定类则类无定职:如果将一个词固定为一个词性,则该词性的功能不稳定

这个特性也就决定了,纯语法结构的词类体系无法适用于中文,也就是说,词性标注、依存结构树等英文解析方法无法完全适用于中文。所以我们也只能重新去设计中文的解析体系。

所幸,中文语言学的先辈们早已给出了分类的准则,即按照实词虚词分别划分,具体的划分准则为:

  • 凡本身能表示一种概念者,叫做实词,其分类当以概念的种类为根据

  • 凡本身不能表示一种概念者,叫做虚词,其分类当以其在句中的职务为根据

所以,我们根据语义划分实词,根据语法划分虚词,最终得到了一个中文词类的全划分体系,同时训练得到一个中文词类标注工具,其展示效果如下:

0773957b83e67f0b397827ca3b98f823.png

至此,我们的关系抽取工具的先决条件算是大体完成。

关系的触发逻辑

搞定了上述的词类划分及文本标注后,我们相当于已实现将无限的词收拢到了有限的词类体系中,接下来,而待抽取的关系,则变成了仅发生在词类与词类之间,便可以枚举出来。例如,人物类_实体作品类_实体之间的关系可以是“创作”,而“创作”的触发词(如作词、作曲、演唱、执导、出演等)或触发pattern,则可以通过知识库枚举得到,如此,则实现了灵活配置。

那么,接下来一个问题则是,我们如何从现在的序列解析结果中,得到关系三元组数据呢?

要解决这个问题,我们依旧要从中文语言学的成果中寻找答案:==中文更偏孤立语,注重意合,依靠词序和词之间的意义联系成句,词性、句法特征弱==。也就是说,我们在解析的时候,可以尝试摒弃所谓句法特征,只是从次序上下手。于是,我们发现,只需要覆盖好 SPO 的几种常用表达顺序,单向搜索,即可覆盖大部分简单句。

例如,对于<张艺谋,创作,十面埋伏>这一 SPO 三元组,常用表达顺序有如下几种:

  • S-P-O:张艺谋执导了《十面埋伏》。

  • S-O-P:张艺谋是《十面埋伏》的导演。

  • O-S-P:《十面埋伏》是张艺谋执导的电影。

  • O-P-S:《十面埋伏》的导演是张艺谋。

然而,这种模式仍然过于复杂,如遇到多组 SPO 关系并存的文本,如果要完全照顾到这四种表达顺序,则很容易发生混乱,难以得到严格对应的三元组。所以,我们设计了互反关系,即头实体和尾实体对调后,对应的反向关系。例如三元组<张艺谋,创作,十面埋伏>,则存在一个反向三元组<十面埋伏,创作者,张艺谋>。那么,当我们找到一个头实体之后,只需要考虑它之后的部分(即 S-P-OS-O-P 两种表达顺序)就行了。

同时,我们部分参考了英文语法中,关于屈折词的定义。即屈折词本身,定义了其作用范围。我们也认为,触发词不仅定义了语义,同时也定义了触发方向,所以部分触发词我们也配置了其尾实体搜索方向,进一步提升精度。

另外,我们认为,规范表达中,关系触发和尾实体一定实在同一个短语中出现,所以,触发关系之后,寻找尾实体的过程中,我们仅搜索与触发在同一个短语中的实体及相关元素。

于是,参考了语言学先辈们总结的中文规律,使用以上的解析体系,我们用纯规则的方法,做出来了这样一个可简单配置的信息抽取工具,可以用来方便地产出信息抽取样本,无论是用于微调前段时间发布的 UIE,还是直接用于领域文档抽取,相信都可以是个有力的工具。

这个工具叫做 WordTag-IE,现已在 PaddleNLP 中开源。

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/text_to_knowledge

展望与讨论

在文章的开头,我的自我介绍是“致力于做好中文自然语言理解”,诚然,自然语义中的信息抽取,是能够表明语言理解能力的,我们也认为,做文本标注的下一步,就是做信息抽取。因此,我们发布了WordTag-IE。

但是,我们现在也发现,即使信息抽取工具优化到理想态(无论是UIE这类的模型工具,还是WordTag-IE这类的规则工具),其结果直接作为中文理解的特征,仍然是不够的。比如对话结构建模,或文本生成控制,所需要的信息不仅仅是 SPO 就能可以满足的。

所以,我们就开了一个脑洞,既然我们已经做了语义序列解析,那么能否更进一步,做出来一段文本的语义结构化解析结果呢?而这个结构化的结果,则可能可以真正发挥大用处,比如上文提到的对话结构建模、文本生成控制。因为,语义结构可以弥补 DNN 模型在长期记忆上的不够精准的短板,结构化数据既保证了信息全面,也更加适用于归一和检索,在需要长期记忆的场景下,能够快捷、精准地找到所需的信息,给 DNN 模型以必要的提示。

希望在不久的将来,我可以在这里,继续向小伙伴们报告我最新的成果。

736bf3f19428b9c7bc558f169afe9691.png萌屋作者:Severus

Severus,在某厂工作的老程序员,主要从事自然语言理解方向,资深死宅,日常愤青,对个人觉得难以理解的同行工作都采取直接吐槽的态度。笔名取自哈利波特系列的斯内普教授,觉得自己也像他那么自闭、刻薄、阴阳怪气,也向往他为爱而伟大。

作品推荐

  1. 深度学习,路在何方?

  2. 数据还是模型?人类知识在深度学习里还有用武之地吗?

  3. 在错误的数据上,刷到 SOTA 又有什么意义?

b8ee8646d56b75ec4e0066fab1aa789c.png后台回复关键词【入群

加入卖萌屋NLP、CV、搜推广与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

fae0116f7834761ad8ae4c67750925d8.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/477234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员面试金典 - 面试题 01.03. URL化(字符串)

1. 题目 URL化。编写一种方法&#xff0c;将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符&#xff0c;并且知道字符串的“真实”长度。&#xff08;注&#xff1a;用Java实现的话&#xff0c;请使用字符数组实现&#xff0c;以便直接在数组上操作。…

扩散模型又杀疯了!这一次被攻占的领域是...

文 | Yimin_饭煲从2020年的初出茅庐&#xff0c;到2021年的日趋火热&#xff0c;再到2022年的大放异彩&#xff0c;扩散模型(Diffusion Models) 正在人工智能学术界和工业界获取越来越多的关注。如果还不是特别了解扩散模型的朋友&#xff0c;可以阅读卖萌屋的几篇历史推文《扩…

程序员面试金典 - 面试题 01.04. 回文排列(哈希map)

1. 题目 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。 示例1&#xff1a; 输入&#xff1a;"tactcoa" 输出&#xff1a;tru…

Spring Boot中对log4j进行多环境不同日志级别的控制

之前介绍了在《Spring boot中使用log4j记录日志》&#xff0c;仅通过log4j.properties对日志级别进行控制&#xff0c;对于需要多环境部署的环境不是很方便&#xff0c;可能我们在开发环境大部分模块需要采用DEBUG级别&#xff0c;在测试环境可能需要小部分采用DEBUG级别&#…

耗时四年,我们写了一本1400页的AI全栈技术手册

不知不觉写文章已经四年了。最开始是一个人&#xff0c;后来恰了恰饭&#xff0c;就招揽了很多比小夕厉害的小伙伴一起写。不知不觉已经积累了300多篇了。。三年以来&#xff0c;我跟小伙伴们原创的300篇深度学习、NLP、CV、知识图谱、跨模态等领域的入门资料、子方向综述、201…

程序员面试金典 - 面试题 01.06. 字符串压缩(字符串)

1. 题目 字符串压缩。利用字符重复出现的次数&#xff0c;编写一种方法&#xff0c;实现基本的字符串压缩功能。比如&#xff0c;字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短&#xff0c;则返回原先的字符串。你可以假设字符串中只包含大小写英文字母&…

Spring Boot中使用@Async实现异步调用

什么是“异步调用”&#xff1f; “异步调用”对应的是“同步调用”&#xff0c;同步调用指程序按照定义顺序依次执行&#xff0c;每一行程序都必须等待上一行程序执行完成之后才能执行&#xff1b;异步调用指程序在顺序执行时&#xff0c;不等待异步调用的语句返回结果就执行…

谷歌HuggingFace| 零样本能力最强的语言模型结构

文 | iven从 GPT3 到 Prompt&#xff0c;越来越多人发现大模型在零样本学习&#xff08;zero-shot&#xff09;的设定下有非常好的表现。这都让大家对 AGI 的到来越来越期待。但有一件事让人非常疑惑&#xff1a;19 年 T5 通过“调参”发现&#xff0c;设计预训练模型时&#x…

程序员面试金典 - 面试题 01.07. 旋转矩阵(一次遍历+位运算)

1. 题目 给定一幅由N N矩阵表示的图像&#xff0c;其中每个像素的大小为4字节&#xff0c;编写一种方法&#xff0c;将图像旋转90度。 不占用额外内存空间能否做到&#xff1f; 示例 1: 给定 matrix [[1,2,3],[4,5,6],[7,8,9] ],原地旋转输入矩阵&#xff0c;使其变为: […

Spring Boot中使用@Scheduled创建定时任务

我们在编写Spring Boot应用中经常会遇到这样的场景&#xff0c;比如&#xff1a;我需要定时地发送一些短信、邮件之类的操作&#xff0c;也可能会定时地检查和监控一些标志、参数等。 创建定时任务 在Spring Boot中编写定时任务是非常简单的事&#xff0c;下面通过实例介绍如…

从二本到ICLR杰出论文奖,我用了20年

文 | 李梅编 | 陈彩娴源 | AI科技评论二本出身&#xff0c;读了两个硕士才在29岁开始读博&#xff0c;39岁才结束博士后研究的付杰形容&#xff0c;他的20年就像个体与系统的博弈&#xff1a;一些机器学习的文章中&#xff0c;研究者会根据训练初始阶段 Training Curve&#xf…

Spring Boot属性配置文件详解

相信很多人选择Spring Boot主要是考虑到它既能兼顾Spring的强大功能&#xff0c;还能实现快速开发的便捷。我们在Spring Boot使用过程中&#xff0c;最直观的感受就是没有了原来自己整合Spring应用时繁多的XML配置内容&#xff0c;替代它的是在pom.xml中引入模块化的Starter PO…

程序员面试金典 - 面试题 01.08. 零矩阵

1. 题目 编写一种算法&#xff0c;若M N矩阵中某个元素为0&#xff0c;则将其所在的行与列清零。 示例 1&#xff1a; 输入&#xff1a; [[1,1,1],[1,0,1],[1,1,1] ] 输出&#xff1a; [[1,0,1],[0,0,0],[1,0,1] ]示例 2&#xff1a; 输入&#xff1a; [[0,1,2,0],[3,4,5,2]…

AI帮写代码67元/月!

整理 | 彭慧中责编 | 屠敏出品 | CSDN如今&#xff0c;人工智能已经逐渐习惯充当人类生活中“副驾驶”位置上的角色。它帮助我们打扫卫生、撰写文稿、回复消息、路线导航....但在此之前&#xff0c;人工智能在改进代码方面还止步不前&#xff0c;以至于多少人还在为绞尽脑汁写代…

Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候&#xff0c;请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射&#xff1a;/error&#xff0c;当处理中抛出异常之后&#xff0c;会转到该请求中处理&#xff0c;并且该请求有一个全局的错误页面用来展示异常内容。 选择一个之…

统计学习及监督学习概论

文章目录1. 统计学习2. 统计学习分类2.1 基本分类2.1.1 监督学习 supervised learning2.1.2 无监督学习 unsupervised learning2.1.3 强化学习 reinforcement learning2.1.4 半监督学习 semi-supervised learning、主动学习 active learning2.2 按模型分类2.3 按算法分类2.4 按…

BERT为何无法彻底干掉BM25??

文 | QvQ近些年来&#xff0c;相比传统检索模型&#xff0c;大规模预训练式transformers结构的引入在各类任务上都有显著的提升。而这种提升在不同的数据集上有着特殊的模型设置&#xff0c;而当前依旧无法充分理解这些模型为什么以及如何可以更好的工作。古人云&#xff1a;知…

Spring Boot中使用MongoDB数据库

前段时间分享了关于Spring Boot中使用Redis的文章&#xff0c;除了Redis之后&#xff0c;我们在互联网产品中还经常会用到另外一款著名的NoSQL数据库MongoDB。 下面就来简单介绍一下MongoDB&#xff0c;并且通过一个例子来介绍Spring Boot中对MongoDB访问的配置和使用。 Mong…

程序员面试金典 - 面试题 01.09. 字符串轮转

1. 题目 字符串轮转。给定两个字符串s1和s2&#xff0c;请编写代码检查s2是否为s1旋转而成&#xff08;比如&#xff0c;waterbottle是erbottlewat旋转后的字符串&#xff09;。 示例1:输入&#xff1a;s1 "waterbottle", s2 "erbottlewat"输出&#x…

谷歌HuggingFace | 零样本能力最强的语言模型结构

从 GPT3 到 Prompt&#xff0c;越来越多人发现大模型在零样本学习&#xff08;zero-shot&#xff09;的设定下有非常好的表现。这都让大家对 AGI 的到来越来越期待。但有一件事让人非常疑惑&#xff1a;19 年 T5 通过“调参”发现&#xff0c;设计预训练模型时&#xff0c;Enco…