CRF in NLP&LSTM—CRF比较好理解的表达
1、在NLP模型的深度学习中,词嵌入通常用作第一数据预处理层。这是因为学习的单词向量可以捕获一般的语义和句法信息,嵌入可在各种NLP任务上产生最新的结果
2、spaCy与NLTK
spacy诞生于2014年年中,是具有工业级强度的nlp工具包,spacy里大量使用了cython来提高相关模块的性能,这个区别于学术性质更浓的nltk,因此spacy具有了工业界应用的实际价值
3、高效的理解条件随机场CRF
CRF大显身手的地方,为了让分类能够有更好的表现,即必须把与它相邻的标签信息考虑进来,重点是定义一个特征函数集合,用这个特征函数集合来为每一个标注序列打分,并据此选出最靠谱(概率最大)的标注序列,也就是说每一个特征函数都可以用来为一个标注序列评分,把集合中所有特征函数对同一个标注序列的评分综合起来,就是这个标注序列最终的评分值。
CRF与逻辑回归的比较:条件随机场是逻辑回归的序列化版本,逻辑回归是用于分类的对数线性模型,线性链式CRF是用于序列化标注的对数线性模型
CRF与HMM的比较:CRF要比HMM强大的多,可以解决所有HMM能够解决的问题,还可以解决许多HMM解决不了的问题,事实上对HMM模型取对数之后,把log形式的概率看作是CRF式子中的特征函数权重的话,CRF和HMM具有相同的形式。每一个HMM模型都等价于某个CRF
CRF是着眼于整个句子去定义更具有全局性的特征函数,如下图,而HMM是局部性的,即当前的单词只依赖于当前的标签,当前的标签只依赖于前一个标签,这样的局部性限制了HMM只能定义相应类型的特征函数;CRF可以使用任意的权重,而把HMM看成CRF时,特征函数的权重由于是log形式的概率,所以都是小于等于0的。
4、从另一个角度简明理解条件随机场CRF
CRF主要用于序列标注问题,可以简单理解为是给序列中的每一帧都进行分类,既然是分类,很自然想到将这个序列用CNN或者RNN进行编码后,接一个全连接层用softmax激活,但是逐帧softmax并没有直接考虑输出的上下文关联,而输出序列本身会带有一些上下文关联,所以它意味着把这些关联放到了编码层面,希望模型能自己学到这些内容,但有时候会“强模型所难”。
而CRF则更直接一点,它将输出层面的关联分离了出来,这使得模型在学习上更为“从容”:
当然,如果仅仅是引入输出的关联,还不是CRF的全部,CRF的真正精巧的地方,是它以路径为单位,考虑的是路径的概率,具体而言,假如一个输入有n帧,每一帧的标签有k种可能性,那么理论上就有种不同的输出。我们可以将它用如下的网络图进行简单的可视化。在下图中,每个点代表一个标签的可能性,点之间的连线表示标签之间的关联,而每一种标注结果,都对应着图上的一条完整的路径:
换言之,在序列标注任务中,我们的研究的基本单位应该是路径,我们要做的事情,是从条路径选出正确的一条,那就意味着,如果将它视为一个分类问题,那么将是
类中选一类的分类问题!
这就是逐帧softmax和CRF的根本不同了:前者将序列标注看成是n个k分类问题,后者将序列标注看成是1个分类问题。
归一化因子难算,几乎是所有概率图模型的公共难题,幸运的是在CRF模型中,由于我们只考虑了临近标签的联系(马尔可夫假设),因此我们可以递归地算出归一化因子,这使得原来是指数级的计算量降低为线性级别。
5、概率图模型
概率图模型结合概率论和图论的知识,用图模式的节点和边表达基于概率相关关系的模型的总称,表示理论将图模型分为如下两个类别:
a、贝叶斯网络,采用有向无环图来表达事件的因果关系
贝叶斯网络中每个节点都对应一个先验概率分布或者条件概率分布,因此整体联合概率分布可以直接分解为所有单个节点分布的乘积
b、马尔科夫随机场,采用无向图来表达变量间的相互作用
对于马尔科夫,由于变量间没有明确的因果关系,它的联合概率分布通常会表达为一系列势函数的乘积,因为乘积之和通常不为1,所以要进行归一化才能成为一个有效的概率分布。
6、概率图模型的精度
对于概率图模型,模型学习的精度通常受三方面影响,其一是语料库样本集对总体的代表性;其二是模型算法理论基础及其所针对的问题,不同模型的理论不同,所擅长处理的NLP认为也不同,比如,朴素贝叶斯模型处理短文本分类效果很好,最大熵模型在处理中文词性标注表现很好,条件随机场处理中文分词,语义组块等方面精度很好,Semi-CRF在处理命名实体识别精度很好;其三模型算法的复杂度,属于工程问题,一般讲,要求模型参数估计的越精确,模型复杂度越高,学习时间越长,推断和预测的精度也越高。
7、常见的Bi-LSTM-CRF
举例,输入样本为“Anne Hathaway is Hollywood star”,Bi-LSTM-CRF模型的输入是每个单词的词向量,经过双向LSTM层提取特征并输出为5个label的得分,再将该得分输入进CRF层,得到这句话最终最大可能的识别标签。那既然Bi-LSTM已经计算出了得分,为什么还要引入CRF层?这是因为Bi-LSTM层得到的label并不总是满足实际情况,CRF层能够添加一些约束使得预测标签是有效的,这些约束便是从训练数据的过程中学习得到的。
参考:https://cloud.tencent.com/developer/article/1057087,https://spaces.ac.cn/archives/5542,
lstm+crf: https://www.jianshu.com/p/aed50c1b2930--这个作者其它的文章也可以看看,https://zhuanlan.zhihu.com/p/61227299,http://xtf615.com/2018/11/27/ner/,