命名实体识别(特征工程)

命名实体识别也叫实体抽取是指从文本信息中抽取实体,这样的实体包括:人,地名等等。对于特定领域还要抽取特定的实体,比如医疗领域:药物,蛋白质,医院名称等等实体抽取在自然语言领域有着非常大的作用,是很多实现任务目标的基础,在知识图谱领域,实体抽取是首要任务,其次才是关系抽取,指代消解,实体统一和实体消解等任务的实现。

举个例子:假设我们在做智能对话系统:

\quad\quad 你好,请问北京到济南怎么走?

我们收到了这样的一句话首先要做的就是识别出“北京”,和“济南”是非常重要的,这样我们才能够根据问题进行回答。所以命名实体识别

不仅可以使用在问答系统中
像扩充原有知识库,
在法律金融等行业都有很大的用处

实体抽取我们常用的方法有三种:

1、利用规则

2、投票模型

3、利用分类模型:时序模型:HMM,CRF,LSTM等非时序模型:逻辑回归SVM。

现在比较常用的就是第三种方法利用分类模型实现实体的抽取。

利用规则(人工)和投票模型

利用规则主要是指人工定义好我们要抽取的实体名称,从而形成一个实体字典,然后遍历文本,查看文本中的信息是否在字典中出现,如果出现的话就从文本中提取出来,就拿上一个例子来说;

\quad\quad 你好,请问北京到济南怎么走?

假如北京和济南这两个词已经在词典库中,那我们遍历一下就可以将实体抽取出来了。

但是对于一些词通常有多个意思,比如“苹果”这个时候我们在实体识别的时候把它分为“水果”还是“手机”呢?这个时候使用了投票机制,

投票机制是指我有一组训练数据,也就是每一个实体都被标注好了实体类别,我们统计每个实体所属的类别概率,比如在训练数据中有8篇文本将“苹果”分为水果,2篇文章将苹果分为手机名。那么“苹果”属于水果的概率为0.8,属于手机的概率为0.2所以我们在在做实体识别的时候遇到了苹果,就把它分为水果名这一类别中。

在过去模式中我们常常使用规则和投票模式结合的方式进行命名实体识别。

实现的思想是比较简单的,但是计算量复杂,而且消耗不少的人工成本,对于词典库以外的实体是识别不出来的。一些中小企业也会使用这种方式。

利用分类模型

利用模型,我们搭建一个实体分类器:通常我们也叫做NER分类器,一般的流程是:

定义实体种类

准备训练数据

训练NER

当然我们在训练模型之前还要做一项比较重要的事情,就是特征工程

特征工程

我们知道训练一个模型是将训练数据转换为词向量输入到分类器中,因此我们的词向量其实就是代表着对应的单词,特征工程就是让词向量更加体现出对应单词的特点。
也就是我们在将单词转换到词向量时加入 单词的特性:

比如考虑到前后词:将前后词加入到词向量中去。

比如考虑到词性:将当前词,前后词的词性正价到词向量中

还有词位置、词长、含有多少大写字母、是否包含数字、是否包含后缀等等你想到的关于词的特点的信息加入到词向量中去。

特征编码

因为我们采用的是one-hot编码,所以将词的特征信息进行编码加入对应词位置中去就可以了。

这里我们将特征分为:离散型、连续性和ordinal Reature

离散型的特征一般使用one-hot编码就可以了

比如当前词的词性,词长、含有多少大写字母、是否包含数字、是否包含后缀。男女,一些动词等。

对应一些数字性的比如:身高:178,165。温度:12.5,25等要么直接归一化,要么使用高斯映射到N(0,1)

对于连续性比如150-180这种特征,我们一般将其非线性离散化:例如
150-160设置为1,160-170设置为2,170-180设置为3,180-设置为4。

对于ordinal Reature特征:比如成绩为:A,B,C,D,E等背后包含的关系我们一般直接使用或者非线性离散化。

最后

最后我们将转换好的特征向量数据到模型中,设置好标签和参数就可以进行训练啦

发布了18 篇原创文章 · 获赞 8 · 访问量 985

猜你喜欢

转载自blog.csdn.net/li15006474642/article/details/104680018