赞
踩
Python深度学习-NLP实战:深度学习系列培训教程
命名实体识别(Named Entity Recognition, NER)是信息抽取和信息检索中的一项重要任务,其目的是识别出文本中表示命名实体的成分,并对其进行分类。[1]而命名实体主要指文档中的人名、地名、机构名、时间等名词实体。
[1] 刘浏,王东波.命名实体识别研究综述[J].情报学报,2018,37(03):329-340.
我们先从了解什么是分词和序列标注开始。
分词就是找到字符串中每个词语的开头与结尾。
序列标注就是输入一段字符串,输出字符串中每个字符对应的序列。
通过序列标注完成分词, 即把一个字符,是词的开头、结尾、还是中间部分给标出来。
例如,我一定要当上海贼王,如果分词分为 我/一定要/当/上海/贼王(举个栗子)
对应的序列就应该是(以字为单位,下文将该格式称为token格式):
我 S
一 B
定 I
要 E
当 S
上 B
海 E
贼 B
王 E
序列标注的标记集可以任意命名,这里我们选择的标记集是 {B, I, E, S}。
其中,B代表词语开头, I代表词语中间, E代表词语结尾,S代表单字。
后期涉及到实体标注时,也可以在标记中添加后缀用来区分不同实体,如:
{B-FD,I-FD,E-FD,S-FD,B-OT,I-OT,E-OT,S-OT,O}
其中,FD和OT代表两类不同的实体,O表示非实体。
我们想实现的就是将一段字符串输入模型中,模型会将每个字符的标记以token格式的文件输出,这样我们就知道怎么分词了(当然还要看模型的效果)。
比如: 输入“我一定要当上海贼王”,模型输出标记顺序为 “SBESBEBIE ”,我们就可以得知,这个字符串应该分词为“我/一定/要/当上/海贼王”。
接下来要学习使用的模型的训练集和测试集都需要处理成token格式,如下:
(模型训练格式是自己定义的,这里的规定是我们实验室用的代码里规定的)
制作语料注意:
① 以句末符号(句号、问号、感叹号、省略号等)作为切分标志,并随机打乱句子顺序。
② token格式中每句话间换一行,保证输入模型的单个长度不会过长引起崩坏!
③ 要保证语料中的每句话内都要以“单字\t标记\n”
的形式,不能有一个为空值!
模型经过训练后,可以测试模型效果,输出日志文件如下:
我们以前一列为标准,如果后一列和前一列标的完全一样,那么机器序列标注的正确率就是100%,如果有不一样的地方,则代表正确率下降。
实体识别模型训练测试与序列标注类似,不多赘述,语料部分展示如下:
使用“<fd></fd>
”标注食品与诱因实体,使用“<ot></ot>
”标注时间与地点实体。
个人建议:为制作token语料方便,可以编写程序将标签换成符号如“【】”和“{}”。
为了将语料转化为可供模型训练的token格式,我们定义了9 位标记集:
{B-FD,I-FD,E-FD,S-FD,B-OT,I-OT,E-OT,S-OT,O}
对两类实体进行标记,各标记含义如下:
标记 | 含义 |
---|---|
B-FD | 食品与诱因实体起始字 |
I-FD | 食品与诱因实体中间字 |
E-FD | 食品与诱因实体结束字 |
S-FD | 食品与诱因实体单字 |
B-OT | 时间与地点实体起始字 |
I-OT | 时间与地点实体中间字 |
E-OT | 时间与地点实体结束字 |
S-OT | 时间与地点实体单字 |
O | 非实体字 |
例如:
食品与诱因实体中的“地沟油”,标记为:
地 B-FD
沟 I-FD
油 E-FD
由单字构成的实体“锶”,标记为:
锶 S-FD
时间与地点实体中的“北京”,标记为:
北 B-OT
京 E-OT
【学习交流】
WX:WL1498544910
【文末小宣传】
----博主自己开发的小程序,希望大家点赞支持一下,谢谢!-----
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。