序列标注任务
- 1.序列标注任务
- 2.序列标注--中文分词
- 2.1数据标注方法一
- 2.2数据标注方法二
- 3.序列标注--NER
- 3.1序列标注--CRF
- 3.2篱笆墙解码
- 3.3beam search
- 3.4维特比解码
- 3.5效率对比
- 3.6评价指标
- 4.基于规则-NER
- 4.1序列标注--文本加标点
- 4.2序列标注--句子级别分类
- 4.3实体抽取问题
- 4.4实体抽取初始优化方法-远程监督
1.序列标注任务
释义:对于序列中的每个时间步做分类,得到每个时间步的标签。
对于输入
:X1X2X3X4….Xn
预测输出
:Y1Y2Y3Y4……Yn
应用场景:分词,词性标注,句法分析,命名实体识别等
2.序列标注–中文分词
2.1数据标注方法一
举例: 上 海 自 来 水 来 自 海 上
目标: 对于每一个字,我们想知道它是不是一个词的边界;通过如下所示,将词的边界用1表示;其他用0表示;就可以通过数字表述分词,从而训练模型。
上 | 海 | 自 | 来 | 水 | 来 | 自 | 海 | 上 |
---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 |
2.2数据标注方法二
如图示:
表示逻辑: B:词左边界;E:词右边界;M:词内部;S:单字;
优势: 相对于通过0,1标注来说,通过B、E、M、S进行标注会增加训练的参数量,和训练语料的信息,因为标注更多
。效果理论上会较好些。
3.序列标注–NER
释义: NER叫命名实体识别,实体的概念是抽象的,可以是地名、姓名、事件、起因等,可以理解为对象编程中的对象。
应用场景: 语音通话后,识别文本抽取实体,进行购买机票等等后续操作;OCR识别文本后抽取实体填写相关表单信息等。
数据标注逻辑
- BA:地址左边界;MA:地址内部;EA:地址右边界
- BO:机构左边界;MO:机构内部;EO:机构右边界
- BP:人名左边界;MP:人名内部;EP:人名右边界
- O:无关字
如果需要新增新的实体,就需要加入新的标注和计算。
后面训练的模型,选择多种多样:BERT、LSTM等。
示意图:
3.1序列标注–CRF
释义: CRF叫做条件随机场,是为解决序列标注中,实体抽取存在得到的分类结果异常的情况。
举例:
- B:词左边界;E:词右边界;M:词内部;S:单字;
问题: 模型对每个词进行解码分类时,可能会出现BBM
的情况,两个词都是B的情况应该是极少或者不合理的,这个时候需要结合前后的词综合考虑解码的结果。
结论: 从上面问题中,得知需要训练一个模型,用于表示B、E、M、S之间相邻出现的概率
,这个模型就叫条件随机场。
如下图所示:
下面是一个实际的训练结果:
释义: 这里添加了开始、结束两个位置编码,是为了便于预测和学习第一个词首词的出现概率。
使用方法简介:
1.通过上述方法,得到了相邻之间的分类出现的概率。
2.正常采用模型训练输出的是某个位置上出现分类类别的概率。如下图:
3.就从纵向的概率,和横向获取的概率,两个进行相加,最大的概率即为解码的内容。
4.纵向预测的某个位置的输出分类概率称为发射矩阵
CRF实现的版本有很多,具体逻辑也有不同,介绍pytorch-crf版本的公式:
- 输入序列X,输出序列为y的分数为S;A为转移矩阵;P为发射矩阵。即
转移矩阵计算从前一个位置输出与当前位置输出的概率
;发射矩阵计算当前位置的概率。
- 输入序列X,预测输出序列为y的概率P;即分子为当前预测出现的转移矩阵和发射矩阵概率和;分母为所有情况的概率之和。
3.对上述进行log计算变化,即结果为最大化,越大说明当前种取值的路径是最可靠的。
4.由于模型训练时,是求最小值,所以需要对取相反数。
3.2篱笆墙解码
引子: 上面CRF算出了相邻节点的分数,模型给出了每个节点的分数,如何快速的寻找出最优的路径就是篱笆强解码的事情。
上面图中可得: 有多个节点,节点之间有多条路径,篱笆墙解码的价值就是高效的寻找出最优路径
3.3beam search
释义:
1.beam search算法beam_size=2表示需要保留前两条概率最大的路径,比如上图
2.如果一个句子:有D个字,每个字有D个分类,那么穷尽出所有的路径则需要D^D;
3.采用beam search需要计算的路径<=beam_size*D*D
每一步有beam_size选型,到下一步需要计算beam_sizeD;一共D步,当然第一步只有1D,这里公式并不完全正确,做一个直观的表示
3.4维特比解码
释义:
1.维特比是每步的计算都保留在每个节点上的最优解。
2.比如在C节点上,C1会计算上一步B到它的所有路径,并保留一条;C2、C3同样如此
所以计算的次数为:DD,而一共有D个节点,所以维特比的计算次数为:DD*D
3.即得到图中内容,在每一步都会保留D条路径。
3.5效率对比
- 假设共有n组(列)节点,每一组节点平均数量为D
- 穷举路径计算复杂度为 Dn
- 维特比解码复杂度为n * D2
- BeamSearch解码复杂度为 n * D * B, B为BeamSize
情况分析:
1.上面可以得到维特比解码和BeamSearch的解码复杂度主要跟每个节点的候选项的多少有关。
2.在特殊情况,即序列的后面节点对前面的概率影响比较大时,比较难拿到最优饥解,比如:西北、西红、西南中,西红概率肯定小,但是西红柿肯定比西北柿、西南柿概率大。
3.6评价指标
释义:
1.准确率,是所有预测正确的样本和所有预测的比值。
2.精度率:精确率是指模型预测为正例的样本中真正为正例的比例。
3.召回率:召回率是指实际为正例的样本中被模型正确预测为正例的比例。
4.F1 分数是精确率和召回率的调和平均值
5.TP(True Positives):真正例,即模型正确预测为正类的数量。
6.FP(False Positives):假正例,即模型错误地预测为正类的数量。
7.FN(False Negatives):假负例,即模型错误地预测为负类的数量。
8.TN(True Negatives):真负例,即模型正确预测为负类的数量。
其中的F1有两种计算方式:
-
Macro-F1
对所有类别的F1值取平均 -
Micro-F1
将所有类别的样本合并计算准确率和召回率,之后计算F1
区别 :区别在于是否考虑类别样本数量的均衡。
比如,有两个实体抽取任务,分别是抽取时间和人名;在样本中,有1个时间,99个人名;时间抽取错误,即正确率0%;人名全部抽取错误,正确率为100%;按照第一种算法:F1=50%;第二种算法:F1=99%。一般,在实际任务中,两个方式都会算,如果结果差距大,说明样本不均衡。
4.基于规则-NER
-
常使用正则表达式来匹配特定句式、词表。(我喜欢xx;句式;或者是有个词表,按照词表中的实体从样本中抽取)
-
原则上,规则能处理的好的情况下,尽量不用模型
-
使用规则的方式同样可以计算准确率和召回率
-
规则的顺序有时会影响结果,调试时需注意(举例:上海南)
4.1序列标注–文本加标点
释义: 是一种粗粒度的分词
标注前:
经过语音识别或机器翻译可能会得到没有标点符号的文本此时进行自动文本打标有助于增强文本可读性
标注后:
经过语音识别,或机器翻译,可能会得到没有标点符号的文本。此时进行自动文本打标,有助于增强文本可读性
4.2序列标注–句子级别分类
背景: 在文章中,存在某些关键句子、总结性句子,需要把它抽取出来。即关键句的实体抽取操作。
逻辑:
- 对于一个段落中的 多句话,对每句话进行分类
- paragraph(文章) -> sentence(句子) -> token
- 将每句话进行向量化,之后仅需进行序列标注,这里把句子当成字词将进行处理。
4.3实体抽取问题
问题: 假如要抽取的实体有标签重叠如何处理?
举例:
我周末去了北京博物馆看展览
地点 B E
机构 B M M M E
说明: 在这种情况下,一个序列标注模型,没有办法区分开地点和机构,因为这句话即说明地点:北京;也说明机构:北京博物馆;在训练时,标注也有问题。
解决方案
- 对于每种实体使用独立模型
a.是抽取地点的训练一个模型、抽取机构训练一个模型,一个任务分别通过两个模型进行抽取
b.在模型设计上可以共用主体的向量部分,在分类层,划分不通的模型;比如,前面都是同一个bert;后续根据抽取的实体不同,训练不同的线性层。- 生成式模型:直接不存在区分的问题,模型直接跨过分类,告诉结果。
4.4实体抽取初始优化方法-远程监督
这是一种思想,是在有较大语料,但是却没有标注的情况下,使用。
逻辑:
1.拿到部分语料,通过正则,找到一些固定的:北京、西安、医院的实体,并通过正则完成自动的标注。
2.通过正则获取到部分标注数据,训练模型,模型能够一定程度上识别实体
3.通过模型具体的泛化性,用语料,让其找出实体,这样就会获得新的实体标注内容:成都、重庆、纽约等
4.通过模型的标注,获得更多的实体,使用正则再次自动获取标注数据;整个过程就是远程监督
注意: 这个方法是有瓶颈的,由于通过正则去寻找到标注,是有一些错误情况的,最后模型的能力到达某个零界点时,就无法通过该方法继续提升了。