条件随机场——时间序列(句子单词序列也算),其特征函数必须要考虑前一刻的数据

简介:

摘自:https://www.zhihu.com/question/35866596/answer/139485548

用一个活生生的例子来说明条件随机场的,十分的通俗易懂!原文在这里

[Introduction to Conditional Random Fields]

 

假设你有许多小明同学一天内不同时段的照片,从小明提裤子起床到脱裤子睡觉各个时间段都有(小明是照片控!)。现在的任务是对这些照片进行分类。比如有的照片是吃饭,那就给它打上吃饭的标签;有的照片是跑步时拍的,那就打上跑步的标签;有的照片是开会时拍的,那就打上开会的标签。问题来了,你准备怎么干?

一个简单直观的办法就是,不管这些照片之间的时间顺序,想办法训练出一个多元分类器。就是用一些打好标签的照片作为训练数据,训练出一个模型,直接根据照片的特征来分类。例如,如果照片是早上6:00拍的,且画面是黑暗的,那就给它打上睡觉的标签;如果照片上有车,那就给它打上开车的标签。

这样可行吗?

乍一看可以!但实际上,由于我们忽略了这些照片之间的时间顺序这一重要信息,我们的分类器会有缺陷的。举个例子,假如有一张小明闭着嘴的照片,怎么分类?显然难以直接判断,需要参考闭嘴之前的照片,如果之前的照片显示小明在吃饭,那这个闭嘴的照片很可能是小明在咀嚼食物准备下咽,可以给它打上吃饭的标签;如果之前的照片显示小明在唱歌,那这个闭嘴的照片很可能是小明唱歌瞬间的抓拍,可以给它打上唱歌的标签。

所以,为了让我们的分类器能够有更好的表现,在为一张照片分类时,我们必须将与它相邻的照片的标签信息考虑进来。这——就是条件随机场(CRF)大显身手的地方!

#从例子说起——词性标注问题
-----

啥是词性标注问题?

非常简单的,就是给一个句子中的每个单词注明词性。比如这句话:“Bob drank coffee at Starbucks”,注明每个单词的词性后是这样的:“Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)”。

下面,就用条件随机场来解决这个问题。

以上面的话为例,有5个单词,我们将:**(名词,动词,名词,介词,名词)**作为一个标注序列,称为l,可选的标注序列有很多种,比如l还可以是这样:**(名词,动词,动词,介词,名词)**,我们要在这么多的可选标注序列中,挑选出一个**最靠谱**的作为我们对这句话的标注。

怎么判断一个标注序列靠谱不靠谱呢?

就我们上面展示的两个标注序列来说,第二个显然不如第一个靠谱,因为它把第二、第三个单词都标注成了动词,动词后面接动词,这在一个句子中通常是说不通的。

假如我们给每一个标注序列打分,打分越高代表这个标注序列越靠谱,我们至少可以说,凡是标注中出现了**动词后面还是动词**的标注序列,要给它**减分!!**

上面所说的**动词后面还是动词**就是一个特征函数,我们可以定义一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。也就是说,每一个特征函数都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。

#定义CRF中的特征函数

现在,我们正式地定义一下什么是CRF中的特征函数,所谓特征函数,就是这样的函数,它接受四个参数:

- 句子s(就是我们要标注词性的句子)
- i,用来表示句子s中第i个单词
- l_i,表示要评分的标注序列给第i个单词标注的词性
- l_i-1,表示要评分的标注序列给第i-1个单词标注的词性

它的输出值是0或者1,0表示要评分的标注序列不符合这个特征,1表示要评分的标注序列符合这个特征。

**Note:**这里,我们的特征函数仅仅依靠当前单词的标签和它前面的单词的标签对标注序列进行评判,这样建立的CRF也叫作线性链CRF,这是CRF中的一种简单情况。为简单起见,本文中我们仅考虑线性链CRF。

#从特征函数到概率
定义好一组特征函数后,我们要给每个特征函数f_j赋予一个权重λ_j。现在,只要有一个句子s,有一个标注序列l,我们就可以利用前面定义的特征函数集来对l评分。



上式中有两个相加,外面的相加用来相加每一个特征函数f_j,里面的相加用来相加句子中每个位置的单词的的特征值。

对这个分数进行**指数化和标准化**,我们就可以得到标注序列l的概率值**p(l|s)**,如下所示:




#几个特征函数的例子
前面我们已经举过特征函数的例子,下面我们再看几个具体的例子,帮助增强大家的感性认识。



当l_i是“副词”并且第i个单词以“ly”结尾时,我们就让f1 = 1,其他情况f1为0。不难想到,f1特征函数的权重λ1应当是正的。而且λ1越大,表示我们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列




如果i=1,l_i=动词,并且句子s是以“?”结尾时,f2=1,其他情况f2=0。同样,λ2应当是正的,并且λ2越大,表示我们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列。


。。。
好了,一个条件随机场就这样建立起来了,让我们总结一下:
为了建一个条件随机场,我们首先要定义一个特征函数集,每个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入。然后为每一个特征函数赋予一个权重,然后针对每一个标注序列l,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。













本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7063724.html ,如需转载请自行联系原作者


相关文章
|
4月前
|
自然语言处理 Python
【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)
【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)
244 0
|
6月前
|
移动开发 数据可视化 算法
Pointnet语义分割任务S3DIS数据集
Pointnet语义分割任务S3DIS数据集
211 0
|
8月前
|
算法
算法训练Day41|416. 分割等和子集
算法训练Day41|416. 分割等和子集
|
机器学习/深度学习 算法
语义分割的几种算法
语义分割的几种算法
154 0
每日三题-编辑距离、分割等和子集、单词拆分
每日三题-编辑距离、分割等和子集、单词拆分
56 0
每日三题-编辑距离、分割等和子集、单词拆分
|
机器学习/深度学习 数据可视化
tebsorflow2.0 语义分割(Oxford-IIIT数据集)(上)
语义分割是在像素级别上的分类,属于同一类的像素都要被归为一类,因此语义分割是从像素级别来理解图像的。The Oxford-IIIT Pet Dataset是一个宠物图像数据集,包含37种宠物,每种宠物200张左右宠物图片,并同时包含宠物轮廓标注信息。下面就是tensorflow2.0的对该数据集的语义分割实现。本文基于TF2.0 , 谷歌Colab平台。
212 0
tebsorflow2.0 语义分割(Oxford-IIIT数据集)(上)
|
机器学习/深度学习 自然语言处理
机器学习(四)通过递归的矩阵向量空间预测组合语义
单字矢量空间模型已经在学习词汇信息方面非常成功。但是,它们无法捕捉到更长的短语的位置意义,这样就阻碍了它们对语言的深入理解。我们介绍一种递归神经网络(RNN)模型,该模型学习任意句法类型和长度的短语和句子的组合向量表示。我们的模型为解析树中的每个节点分配向量和矩阵:向量捕获组成部分的固有含义,而矩阵捕获它如何改变相邻单词或短语的含义。这种矩阵向量RNN可以学习命题逻辑的运算符和自然语言的含义。该模型在三个不同的实验中获得最显著的表现:预测副词形容词对的细粒度情感分布;对电影评论的情感标签进行分类,并使用他们之间的句法路径对名词之间的因果关系或主题信息进行分类。
159 0
机器学习(四)通过递归的矩阵向量空间预测组合语义
|
机器学习/深度学习 编解码 数据可视化
CVPR2021 | SETR: 使用 Transformer 从序列到序列的角度重新思考语义分割
本文介绍了一篇CVPR2021的语义分割论文,论文将语义分割视为序列到序列的预测任务,基于transformer作为编码器,介绍了三种解码器方式,选择其中效果最好的解码器方式与transformer编码器组成了一个新的SOTA模型--SETR。
CVPR2021 | SETR: 使用 Transformer 从序列到序列的角度重新思考语义分割
|
机器学习/深度学习 人工智能 搜索推荐
序列特征在推荐算法中的应用
行为序列特征在推荐,广告等领域中有着广泛应用,最近几年涌现了很多有关行为序列的研究论文,讲解如何将行为序列应用到实际场景中。但是论文中的实际思想距离落地还有一段距离,因此本文先介绍一些论文中的序列特征的用法,然后介绍一下在大规模分布式推荐系统框架 EasyRec 中如何将序列特征快速落地,提升实际场景效果。
1858 0