「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战」
概念与原理
CRF全称Conditional Random Field
,即条件随机场。
Random 指的是随机变量 X 和 Y 。Conditional 指的是条件概率。 这就意味着CRF是一个判别式模型。通常,判别式模型计算条件概率,而生成式模型计算联合概率分布。
CRF 是一个序列化标注算法,接收一个输入序列如 X=(x_1,x_2,...,x_n), 并且输出目标序列 Y=(y_1,y_2,...,y_n) ,也能被看作是一种seq2seq模型。
例如,在词性标注任务中,输入序列为一串单词,输出序列就是相应的词性。这里使用大写 X,Y 表示序列。
除了词性标注之外,CRF还可以用来做组块分析、命名实体识别等任务。一般地,输入序列 X 被称为 observation sequence, Y 叫作 state sequence。
HMM的局限性
隐马尔科夫模型(Hidden Markov Model,以下简称HMM)
1.该模型定义的是联合概率,必须列举所有观察序列的可能值,而这对多数领域来说是比较困难的。
2.基于观察序列中的每个元素都相互条件独立。即:在任何时刻观察值仅仅与状态序列中的一个状态有关。而大多数现实世界中的真实观察序列是有多个相互作用的特征和观察序列中较长范围内的元素之间的依赖而形成的。 ``
CRF基本思想
应用到nlp中,就是给一个句子中的每个单词注明词性(而不是给每个单词单独预测词性)。比如这句话:
Bob drank coffee at Starbucks.
注明每个单词的词性后是这样的:
Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词).
用条件随机场来解决这个问题:
这里有5个单词,我们将:(名词,动词,名词,介词,名词)作为一个标注序列,称为l。
可选的标注序列有很多种,我们要在这么多的可选标注序列中,挑选出一个最靠谱的、打分最高的标注序列作为我们对这句话的标注。
假如我们给每一个标注序列打分,如凡是标注中出现了动词后面还是动词的标注序列,要给它负分!
上面所说的动词后面还是动词就是一个特征函数,我们可以定义(或者使用神经网络学习)一个特征函数集合,用这个特征函数集合来为一个标注序列打分,并据此选出最靠谱的标注序列。
也就是说,每一个特征函数都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。
线性链CRF中的特征函数
特征函数的参数
- 句子s(就是我们要标注词性的句子)
- i,用来表示句子s中第i个单词(的位置)
- ,表示要评分的标注序列给第i个单词标注的词性
- ,表示要评分的标注序列给第i-1个单词标注的词性
- 输出值:是0或者1。0表示要评分的标注序列不符合这个特征,1表示要评分的标注序列符合这个特征。
特征函数思想
为了建一个条件随机场:
- 要定义一个特征函数集,每个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入,
- 为每一个特征函数赋予一个权重
- 针对每一个标注序列l,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。
CRF利用标注语料由字构词(组词)不仅考虑了文字词语出现的频率信息,也同时考虑了上下文的语境,具备较好的泛化能力,因此对歧义词和未登陆词都有较好的效果(且CRF解决这个问题并不在每一个节点进行归一化,而是由所有特征进行全局归一化,因此可以求的全局最优值)
马尔可夫链
比如:一个人想从A出发到达目的地F,然后中间必须依次路过B,C, D, E,于是就有这样一个状态:
若想到达B,则必须经过A; 若想到达C,则必须经过A, B; 以此类推,最终 若想到达F,则必须经过A,B,C,D,E。
如果把上面的状态写成一个序列的话,那就是:{到达A, 到达B, 到达c, ..., 到达F},而且很明显,状态序列的每个状态值取决于前面的状态是否已经满足。
于是,像这样,“状态序列的每个状态值取决于前面有限个状态”的状态序列就是马尔可夫链。
隐马尔可夫模型(HMM)
还用上面一个人从A到F的例子。
一个人想今天逛完A, B,C, D, E, F这几处,但是他想先逛哪个后逛哪个我们不知道。
此人每到达一处,他就会买一个礼物带给你,可这家伙逛的太兴奋了,于是乎带给你的礼物有重复的,因此,最后你会有这样的观测结果:
{礼物1,礼物2,礼物1,礼物3,礼物2,礼物2}
(于是还是不知道他想先逛哪个后逛哪个)。结果,我们不知道状态序列(我们不知道他逛的顺序),但是知道观测序列,且每个观测一定是一个状态生成的(礼物一定是他到地方才能买)。
因此这个例子就是在描述:一个不知道状态序列(即马尔科夫链),却知道根据各个状态生成的一个观测随机序列的过程,而这个过程就是隐马尔可夫模型。