NLP——序列标注之命名实体识别

1.概述

序列标注包括自然语言处理中的分词,词性标注,命名实体识别,关键词抽取,词义角色标注等。解决方案是NN模型(神经网络模型)+CRF

命名实体识别(Named Entity Recognition,简称NER)是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、日期、时间、百分数、货币等。这里就需要理解句子的词性

词性是词汇的语法属性,是连接词汇到句法的桥梁,一个词的词性与它在句子中的成分密切相关。在传统语法学中,汉语句子主要分为主语、谓语、宾语、定语、状语、补语6个成分。词性分为名词、动词、代词、形容词、数量词、副词等。

例:游泳是一种很好的健身运动

在NLP任务中,中文分词、词性标注、组块标注、浅层语法分析等任务,标记和切分观察序列都是序列结构,解决此类问题的模型基本是概率图模型中的序列算法,这一系列问题通常称为标记序列学习或序列学习。任务的顺序是命名实体识别->词性标注->语义组块标注。但从算法应用策略的复杂性而言,命名实体识别是最复杂的序列标注任务。

词性标注常用算法:最大熵

词性标注常用工具:stanfordNLP

序列标签分成两个部分,第一部分是IOB表示法(或BIO表示法),B代表当前词在一个组块的开始,I代表在当前词在一个组块中,O代表当前词不在任意一个组块中。另一个变种,start/end表示法:

  • B代表当前词在一个组块的开始
  • I代表在当前词在一个组块内部
  • E代表在当前词在一个组块终结
  • O代表当前词不在任意一个组块中
  • S代表在当前词是一个组块,该组块只有一个词

例如:(快递信息识别)张三18625584663广东省深圳市南山区学府路东百度国际大厦(P代表人名,T是电话号,A是地址,A1是省,A2是市,A3是区,A2是街道(详细地址))

文本符号
张三P
18625584663T
广东省A1
深圳市A2
南山区A3
学府路东百度国际大厦A4

用BIO表示法:

从语言分析的全过程来看,命名实体识别属于中文分词中未登录词识别的范畴,也是信息抽取、信息检索、机器翻译、问答系统等多种自然语言处理技术必不可少的组成部分。

2.相关算法

2.1 概率图模型

概率图模型分为贝叶斯网络和马尔科夫网络,贝叶斯网络是有向图结构,马尔科夫网络是无向图结构。概率无向图模型又称为马尔科夫随机场,是无向图表示的联合概率分布。

定义:设有联合概率分布P(Y),由无向图G=(V,E)表示,在图G中,结点表示随机变量,边表示随机变量之间的依赖关系。如果联合概率分布P(Y)满足成对、局部和全局马尔科夫性,就成次联合概率分布为概率无向图模型。

  • 成对:有两个结点u,v,对应的随机变量是Yu,Yv,其他结点为Yo,在Yo的条件下随机变量Yu,Yv是条件独立
  • 局部:有一个结点v,其它与v有边相连的集合是w,其他结点是o,则在Yw的条件下Yv,Yo是独立的
  • 全局:结点集合A,B在无向图G中被集合C分开的任意结点集合,则在Yc条件下Ya,Yb条件独立

2.2 条件随机场

在条件概率模型P(Y|X)中,Y是输出变量(表示标记序列),X是输入变量(需要标注的序列),学习时,通过极大似然估计得出条件概率模型,预测时,对于给定的输入序列x,求出条件概率最大的输出序列y。

CRF定义:设X和Y是随机变量,P(Y|X)是给定X的条件下Y的条件概率分布,若随机变量Y构成了一个由无向图G=(V,E)表示的马尔科夫随机场,即

P(Y_{v}|X,Y_{w},w\neq v)=P(Y_{v}|X,Y_{w},w\sim v)

w\neq v是除v以外的其他结点,w\sim v在无向图中与v有边连接的所有结点w。称P(Y|X)为条件随机场。

linear chain CRF定义:设X,Y是线性链表示的随机变量序列,在X的条件下,Y的条件概率分布构成条件随机场,即满足马尔科夫性

P(Y_{i}|X,Y_{1},...Y_{i-1},Y_{i+1},...,Y_{n})=P(Y_{i}|X,Y_{i-1},Y_{i+1})

序列标注任务除了长句子以外,还有标签之间的依赖性需要关注。与简单的分类任务不同,命名实体识别是需要获取标签之间的依赖关系,例如张三(P-B,P-I)是人名,且张和三存在依赖关系。

如下图,CRF是属于概率图模型,绿点是输入(GRU的输出),红点是输出,点和点之间的边分为两类,一类是x和y之间的连线,表示其相关性,另一类是相邻y之间的相关性。

 

3.算法包

3.1 词性标注和NER

#词性标注
import nltk
pos = nltk.word_tokenize(text)
pos_ = nltk.pos_tag(pos)
for i in pos_:print(''.join(i))
pos__ = nltk.ne_chunk(pos_, binary=True)
for j in pos_:print(''.join(j))

3.2 CRF

在paddlenlp中,实现线性链条件随机场。

4.实现(快递单信息提取)

(1)读取数据,并将数据转换成paddle可以接受的模型数据

from paddle.utils.download import get_path_from_url
URL = "https://paddlenlp.bj.bcebos.com/paddlenlp/datasets/waybill.tar.gz"
get_path_from_url(URL,"./")for i, line in enumerate(open('data/train.txt')):if 0 < i < 5:print ('%d: ' % i, line.split()[0])print ('   ', line.split()[1])

数据集格式:

(2)转换paddle数据集格式

  • 定义trans_func(),直接用map映射,或者是在dataLoader时作为函数传入。

直接map映射,对数据执行convert_example函数里边的操作。

 

通过partial操作,partial除了函数外,还需指定函数中的参数(tokenizer,max_seq_length),此处函数只做对比,仅参考。

最终将数据转换成有特征和标签的train、dev数据,或只有特征的test数据,快递单信息识别是获取到了快递单信息词向量列表(token_ids),词向量长度(len(token_ids)),标签列表(label_ids)。

  • 定义dataLoader

对数据进行转换,相关函数有Pad(对数据进行填充),Stack(对数据进行堆叠),Tuple,对上述过程的2个特征信息,1个标签信息进行转换。

还可以进行随机采样,这里有两种采样方式,在CPU中,使用paddle.io.BatchSampler,在GPU中,使用paddle.io.DistributedBatchSampler。

if mode == 'train' and use_gpu:sampler = paddle.io.DistributedBatchSampler(dataset=dataset, batch_size=batch_size, shuffle=True)
else:shuffle = True if mode == 'train' else Falsesampler = paddle.io.BatchSampler(dataset=dataset, batch_size=batch_size, shuffle=shuffle)

然后转换成DataLoader。

 dataloader = paddle.io.DataLoader(dataset,batch_sampler=sampler, #随机采用return_list=True,collate_fn=batchify_fn #数据转换)

(3)定义模型(包括模型定义、模型优化、损失函数计算等)

此处选择的模型是Bi-GRU+CRF,其中GRU的输出是CRF的输入。

模型其他参数:

ChunkEvaLluator函数是集成了precision、recall和f1的评价指标,常用于序列标记任务。

模型训练、预测、评估不做讲述!!!

具体代码实现:https://aistudio.baidu.com/aistudio/projectdetail/2042911

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

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

相关文章

C语言验证6174数学问题

有意思的数学问题任意4位不完全一样的数字&#xff0c;能组合出的最大数字减去能组合出的最小数字&#xff0c;得到一个新的数字(3位数补0&#xff09;&#xff0c;重复以上操作&#xff0c;不超过7个循环&#xff0c;必然得到一个数&#xff1a;6174这个问题是之前发布的文章&…

Cortex-M3工作模式与异常

Cortex-M3工作模式与异常 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、工作模式 线程模式和手柄模式。 当处理器处在线程状态下时&#xff0c;既可以使用特权级&#xff0c;也可以使用用户级&#xff1b;另一方面&#xff0c; handler模式总是特…

Python学习——模块的基本知识

http://www.cnblogs.com/alex3714/articles/5161349.html# 定义# 模块&#xff1a;用来从逻辑上组织python代码&#xff08;变量&#xff0c;函数&#xff0c;类&#xff0c;逻辑&#xff1a;实现一个功能&#xff09;&#xff0c;本质就# 是.py结尾的python文件&#xff08;文…

Windows XP系统的“恢复”办法

Windows XP系统的“恢复”办法 1&#xff0e;让SFC命令全面修复受损文件 如果系统因丢失了太多的系统重要文件而变得非常不稳定&#xff0c;那么按照前面介绍的方法一一修复&#xff0c;相必会让人发疯的。这时就需要使用SFC文件检测器命令&#xff0c;来全面的检测并修复受损的…

自己动手实现一个malloc内存分配器 | 30图

对内存分配器透彻理解是编程高手的标志之一。如果你不能理解malloc之类内存分配器实现原理的话&#xff0c;那你可能写不出高性能程序&#xff0c;写不出高性能程序就很难参与核心项目&#xff0c;参与不了核心项目那么很难升职加薪&#xff0c;很难升级加薪就无法走向人生巅峰…

机器学习面试——分类算法SVM

1、什么是硬间隔和软间隔&#xff1f; 当训练数据线性可分时&#xff0c;通过硬间隔最大化&#xff0c;学习一个线性分类器&#xff0c;即线性可分支持向量机。 当训练数据近似线性可分时&#xff0c;引入松弛变量&#xff0c;通过软间隔最大化&#xff0c;学习一个线性分类器…

计算机的发展史及多道技术

首先先补充一下上一篇的一个小问题。 应用程序的启动流程&#xff1a;   前提&#xff1a;应用程序是运行于操作系统之上的   举例&#xff1a;启动暴风音影     1.双击快捷方式     2.告诉操作系统一个文件路径     3.操作系统从硬盘读取文件内容到内存中   …

Cortex M3 NVIC与中断控制

Cortex M3 NVIC与中断控制 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、NVIC概览 ——嵌套中断向量表控制器 NVIC 的寄存器以存储器映射的方式来访问&#xff0c;除了包含控制寄存器和中断处理的控制逻辑之外&#xff0c; NVIC 还包含了 MPU、 S…

VS 2005 或 VS 2008 在安装VSS 2005后,看不到源代码管理的解决办法

昨天有朋友在重新安装VS 2008后&#xff0c;再安装VSS 2005&#xff0c;安装好后在文件菜单中找不到“源代码管理”的菜单项&#xff0c;后来经朋友告知&#xff0c;是开发工具的默认选项设置问题。打开开发工具&#xff0c;“工具”--“选项”&#xff1a;&#xff08;如图&am…

代码里-3gt;gt;1是-2但3gt;gt;1是1,-3/2却又是-1,为什么?

之前群里有个同学向大家提出了类似这样的问题。随后这位同学公布了答案&#xff1a;右移运算是向下取整&#xff0c;除法是向零取整。这句话对以上现象做了很好的总结&#xff0c;可是本质原因是什么呢&#xff1f;我一直以为-3>>1的结果是-1。所以打算思考一下这个问题。…

机器学习面试——逻辑回归和线性回归

1、什么是广义线性模型&#xff08;generalize linear model&#xff09;&#xff1f; 普通线性回归模型是假设X为自变量&#xff0c;Y为因变量&#xff0c;当X是一维的&#xff0c;y是一维的&#xff0c;共进行n次观测&#xff0c;则 其中&#xff0c;w是待估计的参数&#x…

洛谷P3205合唱队——区间DP

题目&#xff1a;https://www.luogu.org/problemnew/show/P3205 枚举点&#xff0c;分类为上一个区间的左端点或右端点&#xff0c;满足条件便即可&#xff1b; 注意不要重复(当l2时)。 代码如下&#xff1a; #include<iostream> #include<cstdio> using namespace…

远程连接server问题

开启Windows防火墙后&#xff0c;当远程连接Server服务器时被拒绝&#xff0c;其解决方法如下&#xff1a;1、启动Windows防火墙。开始 > 设置 > 控制面板 > Windows防火墙。缺省情况下&#xff0c;防火墙是启用的&#xff0c;这是推荐的设置。2、点击“例外”选项卡。…

STM32开发环境

STM32开发环境 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、MDK安装 MDK 是一个集代码编辑&#xff0c;编译&#xff0c;链接和下载于一体的集成开发环境&#xff08; KDE &#xff09;。MDK 这个名字我们可能不熟悉&#xff0c;但说到 KEIL …

看完「大江大河2」

昨晚熬夜看完&#xff0c;说下自己的想法虽然不能做到百分之百的感同身受&#xff0c;但是确实被剧中的情景所感染&#xff0c;想做成大事情&#xff0c;需要经历的磨难一定也会很大&#xff0c;正如很多年前老水打篮球说的那句「管理人&#xff0c;远远比技术更难」。相比于老…

机器学习面试——XGBoost,GBDT,RF(上)

1、常见的集成思想 bagging&#xff1a;基学习器之间并行训练&#xff0c;且学习器之间没有依赖&#xff0c;像是集体决策的过程&#xff0c;每个个体都进行单独学习&#xff0c;再通过投票的方式做最后的集体决策。常见的算法有随机森林 boosting&#xff1a;基学习器之间串…

一个女程序员的创业人生:胆识也是一种能力 作者:秋镇菜

我在28岁生日那天电信一个副总劝我出来开公司算了&#xff0c;然后想了一天第二天就去工商局注册了&#xff0c;从有开公司的想法到工商局注册仅仅一天时间&#xff01;然后2003年8 月份拿到营业执照&#xff0c;根本不知道安全是怎么一回事情&#xff0c;找北大方正一个技术副…

[SDOI2016]排列计数

Description 求有多少种长度为 n 的序列 A&#xff0c;满足以下条件&#xff1a;1 ~ n 这 n 个数在序列中各出现了一次若第 i 个数 A[i] 的值为 i&#xff0c;则称 i 是稳定的。序列恰好有 m 个数是稳定的满足条件的序列可能很多&#xff0c;序列数对 10^97 取模。Input 第一行…

听说有人不了解柔性数组

1 引言 定长数组包在平时的开发中&#xff0c;缓冲区数据收发时&#xff0c;如果采用缓冲区定长包&#xff0c;假定大小是 1k&#xff0c;MAX_LENGTH 为 1024。结构体如下&#xff1a;// 定长缓冲区 struct max_buffer {int len;char data[MAX_LENGTH]; };数据结构的大小 &…

STM32启动文件——startup_stm32f10x_hd.s

STM32启动文件——startup_stm32f10x_hd.s 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、启动文件的作用 &#xff08;关于启动代码的作用&#xff0c;前面已经提到过了&#xff0c;这里再啰嗦一下&#xff09; &#xff08;1&#xff09;初始化…