命名实体识别的一点经验与技巧(下)

简介: 命名实体识别的一点经验与技巧(下)

3.2 如何积累语料

3.2.1 寻找开源数据

百度和谷歌直接搜,可以找到很多NER的资源。顺便还能找到问答等任务的数据。


Github里的兄弟姐妹们是共产主义的先锋,经常会把代码和数据一块分享出来。我们需要更多这样的人。


知乎里有很多NLP方面的爱好者,乐于分享自己了解的内容和数据。如果搜索一下,知乎也能提供相关的数据集信息。


3.2.2 买数据

买数据是一种短平快的积累手段。目前为止我还没有干过,原因如图3-1。




图3-1 不买数据原因示意图


当然了,公司有实力,有需要就会买。这时候就可以愉快地开始建模了。


3.2.3 自己动手,丰衣足食

NER语料标注需要一个趁手的工具才能保证效率。之前调研过一个开源的,叫做doccano,安装比较简单、用起来很顺手。

四、数据预处理的一点经验

4.1 标签体系规范化

目前允许开放获取的NER语料,使用的标签体系不是统一的,有的是BIO,有的是BIOES,有的采用了类似词性标注的标记方式。因此需要做细致的标签体系规范化工作。比如《人民日报》的语料,虽然是一个词性标注语料,但是里面的若干词性实际上就是命名实体,我们可以基于词性和实体类型的映射、完成转换。该语料存在大量合成词作为命名实体的情况,以及命名体识嵌套的情况,都需要根据需求做专门的处理。


4.2 去重

我找了一堆开放获取的数据,而大家也通常是从其他渠道找到的这些数据,里面不可避免的有一些重复的情况。如果你的数据里存在重复,意味着测试集里很有可能混杂了训练集里的样本——测试得到的各项指标会虚高。这会导致模型上线的时候,实际效果比预想的差很多,而我们还很难找出原因、只能挠头。


一定要做好去重工作,以句为单位对语料进行排重。我们可以将句子切分成ngram,然后用余弦相似度或者杰卡德相似度,判断两个句子是否相似。由于句子数量较多,可以使用一个以ngram为key、句子列表为value的倒排索引来辅助减少计算量。


4.3 数据扩增

4.3.1 文本数据扩增的困难

做CV的同志们真是幸福。我们可以用规则、基于几十张图片,生成上万张图片,让模型好好学习。我能理解的原因主要有3个:(1)图像是对真实世界的一种比较直接的描述方式,信息的损失量比较小的同时,人可以基于自己的视觉经验对图像做各种各样的变换;(2)图像数据具有比较强的空间相关性,我们施加的变换不会完全破幻这种相关性,比如“大黄”变成“大蓝”,它还是一条狗。


做NLP的同志们就稍微惨一些:(1)语言是人类用人造的离散符号,对世界的一种描述,信息量损失很大;(2)一般来说,语言只有一个维度上存在相关性,而这种相关性比较纠结、是语法上的相关(破坏句子结构的变换一般人接受不了)。这导致我们可以对文本数据施加的变换,比较少。常见的方法有几个:(1)同义词替换;(2)回译;(3)随机增删词语。


4.3.2 同义词替换

语言学家对同义词的定义是:用A词语替换句子中的B词语,句子的语义和句法结构不发生改变,那么A和B就是同义词。因此,我们可以收集一个命名实体之间的同义关系数据,然后做各种替换,就可以得到一些新的数据。


另外,通常来说,相同类型的实体名称在句子结构中的作用是一样的。比如“我今天要去天安门看升国旗”,改为“我今天要去黄山看升国旗”,句子仍然是合法的,只是语义有所变化(有时候还会出现不合常理的句子)。用这种方式,我们也可以得到一些新数据。


4.3.3 回译

最近几年机器翻译做的越来越好了,有人想到另一种扩增语料的办法:先把中文翻译成英文,然后在把英文翻译回中文。这样也可以得到新的语料。比如说“我要去北京,吃那里的烤鸭”,会被翻译成“I’m going to Beijing to eat roast duck”,然后回译为“我要去北京吃烤鸭”。


4.3.4 随机增删字词

我们说话或者写作的时候,经常会出错。比如我打字的时候会打出错别字而没有检查出来,写了一句“我腰去北京,吃那里的烤鸭”。我们需要NER模型对这些错误有一定的鲁棒性,可以在文本有噪声的情况下,可以正确判断句子里的实体。


这时候,我们可以从训练集中,随机抽取出来一些句子,对里面的字词进行随机增删改,然后把这样的错误样本添加到训练集中。是的,加一点噪声。


五、建模的一点经验

5.1 如何选择算法或者模型

如果有业务场景对应的词表,直接上“分词+词典匹配”的方案即可;如果有一定量的标注数据,可以用CRF;如果有钱有人、标注数据量比较大,那就试一下深度学习。


5.2 模型效果的评价

NER任务的目标,通常是“尽量发现所有的命名实体,发现的命名实体要尽量纯净”,也就是要求查全率和查准率比较高。当然,场景也有可能要求其中一项要非常高。


需要注意的是,这里统计recall和precision的时候,对象是命名实体,而不是单个标签。以表5-1所示计算结果为例,我们把“北京”标记成了“SS”,“北”和“京”是两个命名实体,这是错误的;“天安门”和“毛”的标签是正确的——因此,这句话中,模型的召回率是:




精度是:




表5-1 NER任务的真实标签和预测标签对比




5.3 如何判定模型结构有效

用全量训练数据之前,一定要先用一份较小的数据(比如测试数据),训练模型——看一下模型会不会过拟合,甚至记住所有的样本。如果模型不能过拟合,说明参数不能收敛,也就是模型无法从数据中学习到东西。这时候我们需要检查一下模型结构和数据,看看那里出了问题。


开始用全量数据后,我们还会遇到各种各样的问题,这里列几个常见的症状和原因,如表5-2。


表5-2 模型常见症状




六、结束语

做NER的过程中,比较消耗精力的环节是数据采集和预处理。采集数据需要耐心地持续进行;而数据预处理需要细心,并根据bad case不断纠错。在这个过程中,倒排索引、栈、字符串、递归等数据结构和算法,对工作的帮助很大。作为一个转行到数据科学领域的工程师,我切实意识到了数据结构的价值、计划系统地学一遍。


另外,在学习NER相关内容的过程中,我开始看语言学和计算语言学的相关内容,也意识到语言学的理论和方法对工程师来说,是非常有助益的。比如,许嘉璐和傅永和主编的《中文信息处理:现代汉语词汇研究》,里面的内容比较深、使用的方法比较简单,可以作为科普读物、挑着看。这些学者的工作还是挺扎实的,对NLP的发展推动很大。Frederick Jelinek说的“每当我开除一个语言学家,语音识别系统就更准了”,我觉的是带有偏见的玩笑话,不足为训。


相关文章
|
机器学习/深度学习 人工智能 自然语言处理
命名实体识别的一点经验与技巧(上)
命名实体识别的一点经验与技巧(上)
187 0
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
解码语言:命名实体识别(NER)技术
解码语言:命名实体识别(NER)技术
91 4
解码语言:命名实体识别(NER)技术
|
1月前
|
自然语言处理
有关“RaNER命名实体识别-中文-新闻领域-base模型的命名实体识”的个人小建议
当新闻中出现不具体人名(如范某)时,建议模型能正确提取;对于含名词的非特殊名称(如“七块熹平石经”),建议不提取;此外,模型应解决去重问题,或给出词频。
|
4月前
|
机器学习/深度学习 自然语言处理
【机器学习】如何进行中文命名实体识别?(面试回答)
中文命名实体识别的基本概念、分类、识别思想、实体标注方法以及常见的识别方法,包括基于规则、基于统计和基于深度学习的方法。
60 1
【机器学习】如何进行中文命名实体识别?(面试回答)
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
【论文精读】AAAI 2022- 统一的命名实体识别作为词与词之间的关系分类
【论文精读】AAAI 2022- 统一的命名实体识别作为词与词之间的关系分类
【论文精读】AAAI 2022- 统一的命名实体识别作为词与词之间的关系分类
|
自然语言处理 API 数据处理
面向低资源和增量类型的命名实体识别挑战赛PaddleNLP解决方案
面向低资源和增量类型的命名实体识别挑战赛PaddleNLP解决方案
105 0
|
机器学习/深度学习 人工智能 自然语言处理
深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)
深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)
深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)
|
机器学习/深度学习 人工智能 自然语言处理
从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
从零构建医疗领域知识图谱的KBQA问答系统:其中7类实体,约3.7万实体,21万实体关系。
|
机器学习/深度学习 自然语言处理 文字识别
探索图像数据中的隐藏信息:语义实体识别和关系抽取的奇妙之旅
探索图像数据中的隐藏信息:语义实体识别和关系抽取的奇妙之旅
|
JSON 自然语言处理 算法
手把手教学构建农业知识图谱:农业领域的信息检索+智能问答,命名实体识别,关系抽取,实体关系查询
手把手教学构建农业知识图谱:农业领域的信息检索+智能问答,命名实体识别,关系抽取,实体关系查询
手把手教学构建农业知识图谱:农业领域的信息检索+智能问答,命名实体识别,关系抽取,实体关系查询