知识可以简化为三元组关系对,<实体(主语) , 关系, 实体(宾语)>。因此知识抽取分为两大部分,实体识别和关系抽取。
本篇文章是公司算法同事整理,方便日后持续学习。
NER又称作专名识别,是自然语言处理中的一项基础任务,应用范围非常广泛。命名实体一般指的是文本中具有特定意义或者指代性强的实体,通常包括人名、地名、组织机构名、日期时间、专有名词等。NER系统就是从非结构化的输入文本中抽取出上述实体,并且可以按照业务需求识别出更多类别的实体, 比如产品名称、型号、价格等。因此实体这个概念可以很广,只要是业务需要的特殊文本片段都可以称为实体。
学术上NER所涉及的命名实体一般包括3大类(实体类,时间类,数字类)和7小类(人名、地名、组织机构名、时间、日期、货币、百分比)。实际应用中,NER模型通常只要识别出人名、地名、组织机构名、日期时间即可,一些系统还会给出专有名词结果(比如缩写、会议名、产品名等)。货币、百分比等数字类实体可通过正则搞定。另外,在一些应用场景下会给出特定领域内的实体,如书名、歌曲名、期刊名等。
NER是NLP中一项基础性关键任务。从自然语言处理的流程来看,NER可以看作词法分析中未登录词识别的一种,是未登录词中数量最多、识别难度最大、对分词效果影响最大问题。 同时NER也是关系抽取、事件抽取、知识图谱、机器翻译、问答系统等诸多NLP任务的基础。其解决算法一般分为:序列标注的CRF算法、Bi-LSTM+CRF算法。
NER一直是NLP领域中的研究热点,从早期基于词典和规则的方法,到传统机器学习的方法,到近年来基于深度学习的方法,NER研究进展的大概趋势大致如下图所示。
在统计学中概率图模型分支如下:
在概率图模型中,数据(样本)由公式G = (V,E)建模表示,V表示节点,即随机变量(可以是token或者label),用Y=(y1,...,yn)为随机变量建模,
有向图 VS 无向图
上图可以看到,贝叶斯网络(信念网络)都是有向的,马尔科夫网络无向。所以,贝叶斯网络适合为有单向依赖的数据建模,马尔科夫网络适合实体之间互相依赖的建模。具体地,他们的核心差异表现在如何求 P=(Y),即怎么表示 Y=(y1,...,yn)这个联合概率。
对于有向图模型,这么求联合概率:P(x1,...,xn) = ∏ P(xi|π(xi))
举例:
一般就是指马尔科夫网络:
如果一个graph太大,可以用因子分解将 P=(Y) 写成若干个最大子图联合概率的乘积:
上面的无向图联合概率表示为:
其中ψc(Yc)是一个最大子图上的随机变量们的联合概率,一般取指数函数:
也叫势函数。那么概率无向图的联合概率分布可以在因子分解下表示为:
马尔科夫假设&马尔科夫性
马尔科夫链(x1,...,xn)里的xi总是只受xi-1 一个变量的影响,类似2-gram。
马尔科夫过程:即在一个过程中,每个状态的转移只依赖于前n个状态,并且只是个n阶的模型。最简单的马尔科夫过程是一阶的,即只依赖于器哪一个状态。
马尔科夫性是是保证或者判断概率图是否为概率无向图的条件。
判别式模型 VS 生成式模型
在监督学习下,模型可以分为判别式模型与生成式模型。
判别式模型(神经网络模型、SVM、perceptron、LR、DT……)与生成式模型(NB、LDA……),有啥区别不?
序列建模
序列包括时间序列以及general sequence,但两者无异。连续的序列在分析时也会先离散化处理。常见的序列有如:时序数据、本文句子、语音数据、等等。
广义下的序列有这些特点:
对不同的序列有不同的问题需求,常见的序列建模方法总结有如下:
在基于机器学习的方法中,NER被当作序列标注问题。利用大规模语料来学习出标注模型,从而对句子的各个位置进行标注。NER 任务中的常用模型包括生成式模型HMM、判别式模型CRF等。
条件随机场(ConditionalRandom Field,CRF)是NER目前的主流模型。它的目标函数不仅考虑输入的状态特征函数,而且还包含了标签转移特征函数。在训练时可以使用SGD学习模型参数。在已知模型时,给输入序列求预测输出序列即求使目标函数最大化的最优序列,是一个动态规划问题,可以使用Viterbi算法解码来得到最优标签序列。CRF的优点在于其为一个位置进行标注的过程中可以利用丰富的内部及上下文特征信息。
在上面提到的序列建模问题时,只讨论了常规的序列数据,如(X1,...,Xn),像这种序列一般用马尔科夫模型就可以胜任。实际上碰到的更多的场景是每个节点Xi下附带着另一个节点Yi,正所谓隐含 马尔科夫模型,那么除了正常的节点,还要将隐含状态节点 也得建模进去。将Xi、Yi换成 ii、 oi ,并且名称变为状态节点、观测节点。状态节点正是隐状态。
HMM属于典型的生成式模型。要从训练数据中学到数据的各种分布,那么有哪些分布呢以及是什么呢?直接正面回答的话,正是HMM的5要素 ,其中有3个就是整个数据的不同角度的概率分布:
it即第i个隐状态节点,即所谓的状态转移。
ot即第i个观测节点,it即第i个隐状态节点,即所谓的观测概率(发射概率)。
模型先去学习要确定以上5要素,之后在inference阶段的工作流程是:首先,隐状态节点 it是不能直接观测到的数据节点, ot才是能观测到的节点。箭头的指向表示了依赖生成条件关系,it在A的指导下生成下一个隐状态节点i(t+1),并且it在 B的指导下生成观测节点ot,并且我们只能观测到序列(o1,...,oi)。
举例说明(序列标注问题,POS,标注及BES)
input: "学习出一个模型,然后再预测出一条指定"
expected output: 学/B 习/E 出/S 一/B 个/E 模/B 型/E ,/S 然/B 后/E 再/E 预/B 测/E ……
其中,input里面所有的char构成的字表,形成观测集M,因为字序列在inference阶段是能看见的;标注集BES构成隐状态集N,这是无法直接获取的,也是预测任务;至于 A、B、π,这些概率分布信息都是子啊学习过程中确定的参数。
根据概率图分类,可以看到HMM属于有向图,并且是生成式模型,直接对联合概率分布建模
这个公式不在模型运行的任何阶段能体现出来,只是我们都去这么来表示HMM是个生成式模型,他的联合概率 P(O,I)就是这么计算的。
并且B中 bij = P(ot|it),这意味着o对i有依赖性。
在A中,aij = P(it+1|it), 这说明只遵循了一阶马尔科夫假设 1-gram。如果数据的依赖超过1-gram,那肯定HMM肯定是考虑不进去的。这一点限制了HMM的性能。
1.1.2.1 学习训练过程
HMM学习训练的过程,就是找出数据的分布情况,也就是模型参数的确定。主要学习算法按照训练数据除了观测状态序列(o1,...,oi),还有隐状态序列(i1,...,ii)分为:
一般做NLP的序列标注等任务,在训练阶段肯定是有隐状态序列的。所以极大似然估计法是非常常用的学习算法,我见过的很多代码里面也是这么计算的。比较简单。
Step 1. 算A:
Step 2. 算B:
Step 3. 直接估计π:
就是一个EM的过程。EM的过程就是初始化一套值,然后迭代计算,根据结果再调整值,再迭代,最后收敛。
因为我们手里没有隐状态序列(i1,...,ii)信息,所以我先必须给初值
初步确定模型,然后再迭代计算出
中间计算过程会用到给出的观测状态序列(o1,...,oi)。
1.1.2.2 序列标注(解码)过程
好了,学习完了HMM的分布参数,也就确定了一个HMM模型。需要注意的是,这个HMM是对我这一批全部的数据进行训练所得到的参数。
序列标注问题也就是“预测过程”,通常称为解码过程。对于序列标注问题,我们只需要学习出一个HMM模型即可,后面所有的新的sample我都用这一个HMM去apply。
我们的目的是,在学习后已知了P(Q,O),现在要求出 P(Q|O),进一步
再直白点就是,我现在要在给定的观测序列下找出一条隐状态序列,条件是这个隐状态序列的概率是最大的那个。
具体地,都是用Viterbi算法解码,是用DP思想减少重复的计算。不过要说的是,Viterbi不是HMM的专属,也不是任何模型的专属,他只是恰好被满足了被HMM用来使用的条件。
Viterbi计算有向无环图的一条最大路径,应该还好理解。如图:
viterbi维特比算法解决的是篱笆型的图的最短路径问题,图的节点按列组织,每列的节点数量可以不一样,每一列的节点只能和相邻列的节点相连,不能跨列相连,节点之间有着不同的距离,距离的值就不在图上一一标注出来了,大家自行脑补。
请看第一张概率图模型构架图,CRF上面是马尔科夫随机场(马尔科夫网络), 而条件随机场是在给定的随机变量 X(具体,对应观测序列 o1,...,oi)条件下,随机变量 Y(具体,对应隐状态序列 i1,...ii的)马尔科夫随机场。
不过一般说CRF为序列建模,就专指CRF线性链(linear chain CRF):
概率无向图的联合概率分布可以在因子分解下表示为:
而在线性链CRF示意图中,每一个(Ii ~ Oi) 对为一个最大团,即在上式中 c=i。并且线性链CRF满足 P(Ii|O,I1,...,In) = P(Ii|O,Ii-1,Ii+1)。
所以CRF的建模公式如下: