条件随机场 python_从零开始学Python自然语言处理(23)—— 巧妙的条件随机场(CRF)(上)...

前文传送门:

在讲完Bi-LSTM之后,我觉得有必要聊聊条件随机场,(conditional random field,简称CRF)。条件随机场并不是深度学习模型,它经常出现在机器学习的相关资料中,为什么这里会突然想聊聊条件随机场呢?

因为条件随机场中常用的线性链条件随机场适合用于序列标注任务!特别是之前提到的,Bi-LSTM和CRF的结合,是常用且效果较好的命名实体识别(NER)方法。很多学习条件随机场的朋友刚开始学习它时,往往会觉得很困难,因为数学公式并不容易理解,参数也太多,本文通俗易懂带你一步步打开CRF的大门,希望对你有所帮助。我们直接来看线性链条件随机场!如果你之前了解过CRF,经常能看到下图这种,其实图中表示的就是线性链条件随机场:

首先,我们看看线性链条件随机场的定义:

设X=(X1,X2,...,Xn),Y=(Y1,Y2,...,Yn)均为线性链表示的随机变量序列,若在给定随机变量序列X的条件下,随机变量序列Y的条件概率分布P(Y|X)构成条件随机场,即满足马尔科夫性P(Yi|X,Y1,...Yi-1,Yi+1,...,Yn)=P(Yi|X,Yi-1,Yi+1)其中,i=1,2,...,n(在i=1和i=n时只考虑单边)则称P(Y|X)为线性链条件随机场。

在序列标注任务中,X为待标注序列,例如 “我喜欢吃西红柿”这句话,分词之后为“我 喜欢 吃 西红柿”,如果我要对这句话的每个词进行词性标注,我们可以采用线性链条件随机场。这里的Y可以理解为预测的词性标注序列,例如:我 r爱 v吃 v

西红柿 nr

其中的词性序列即为Y。

其实,P(Yi|X,Y1,...Yi-1,Yi+1,...,Yn)表示的是一般的条件随机场,而P(Yi|X,Yi-1,Yi+1)表示的是线性链条件随机场,两者的区别就是,线性链条件随机场是在条件随机场的基础上引入了马尔科夫假设,也就是它假设随机场中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,和与其不相邻的位置的赋值无关。

例如上面说的词性标注问题中,X={“我”,“爱”,“吃”,“西红柿”},如果待标注词性的词为“吃”,我们在标注“吃”的词性Yi时,它的前一个词“爱”的词性为Yi-1,它的后一个词“西红柿”的词性为Yi+1,P(Yi|X,Yi-1,Yi+1)表示的是通过原始分词后的句子和当前词前后位置的词性来标注当前词的词性。之所以叫条件随机场,主要拆解为“条件”和“随机场”来理解,其中,条件很好理解,因为计算的是条件概率:P(Yi|X,Y1,...Yi-1,Yi+1,...,Yn),而随机场是什么呢?随机场中包含“场”这个字,“场”的解释如下:

所以随机场可以理解为有若干个地方(位置),给每个位置按照某种分布赋予一个值,这个全部内容就叫做随机场。还是以词性标注为例。“我 爱 吃 西红柿” 是4个词,这4个词的词性从我们词性集合中选取(n、v、r、nr、a 等),当给每个词都选择完词性之后,这个整体就叫条件随机场。

扫码下图关注我们不会让你失望!

你可能感兴趣的:(条件随机场,python)