传统的序列模型CRF与HMM区别

简介: 传统的序列模型CRF与HMM区别

1. 理论解说

1.1 HMM(Hidden Markov Model)

HMM是一种统计模型,用于描述一个含有隐含未知参数的马尔可夫过程。在HMM中,状态不可见,而状态的输出可见。具体来说,HMM包括一个隐藏的马尔科夫链,其状态无法直接观察到,以及一个生成观察序列的输出模型。

HMM的基本假设包括状态转移矩阵描述状态间的转移概率,发射矩阵描述每个状态生成观察值的概率分布,和初始状态概率描述初始时刻各个状态的概率分布。

1.2 CRF(Conditional Random Field)

CRF是一种判别模型,用于标注或分割序列数据。与HMM不同,CRF没有对隐藏状态进行建模,而是直接对输入序列和输出序列之间的关系进行建模,因此CRF不受HMM中的独立性假设约束。

CRF的基本假设包括给定输入序列条件下,输出序列的联合概率分布由特征函数的加权组合决定。特征函数是关于输入序列和输出标签序列的函数,学习得到的参数可以通过对数线性模型来表示。

2. 区别

2.1 建模方式

HMM是一种生成模型,它通过对隐藏状态和观察序列之间的联合概率分布进行建模。CRF是一种判别模型,它直接对输入序列和输出序列之间的联合概率分布建模。

2.2 对隐含状态的处理

HMM中包含一个隐含的马尔科夫链来描述隐藏状态,而CRF不对隐藏状态进行建模,只对输入输出序列之间的关系进行建模。

2.3 对特征函数的处理

HMM中没有特征函数的概念,它是基于概率分布进行建模的。而CRF是基于特征函数的加权组合来描述输入输出序列之间的关系,学习得到的模型参数可以通过对数线性模型来表示。

3. 参数介绍和完整代码案例

下面是一个使用CRF进行命名实体识别(NER)的Python代码案例:

导入所需的库

import nltk

import sklearn_crfsuite

from sklearn_crfsuite import metrics

加载NER数据集

nltk.download('conll2002')

train_sents = list(nltk.corpus.conll2002.iob_sents('esp.train'))

test_sents = list(nltk.corpus.conll2002.iob_sents('esp.testb'))

特征提取函数

def word2features(sent, i):

word = sent[i][0]

features = {

'bias'1.0,

'word.lower()': word.lower(),

'word[-3:]': word[-3:],

'word[-2:]': word[-2:],

'word.isupper()': word.isupper(),

'word.istitle()': word.istitle(),

'word.isdigit()': word.isdigit()

}

if i > 0:

word1 = sent[i-1][0]

features.update({

'-1:word.lower()': word1.lower(),

'-1:word.istitle()': word1.istitle(),

'-1:word.isupper()': word1.isupper()

})

else:

features['BOS'] = True

if i < len(sent)-1:

word1 = sent[i+1][0]

features.update({

'+1:word.lower()': word1.lower(),

'+1:word.istitle()': word1.istitle(),

'+1:word.isupper()': word1.isupper()

})

else:

features['EOS'] = True

return features

def sent2features(sent):

return [word2features(sent, i) for i in range(len(sent))]

def sent2labels(sent):

return [label for token, postag, label in sent]

def sent2tokens(sent):

return [token for token, postag, label in sent]

特征提取

X_train = [sent2features(s) for s in train_sents]

y_train = [sent2labels(s) for s in train_sents]

X_test = [sent2features(s) for s in test_sents]

y_test = [sent2labels(s) for s in test_sents]

训练CRF模型

crf = sklearn_crfsuite.CRF(

algorithm='lbfgs',

c1=0.1,

c2=0.1,

max_iterations=100,

all_possible_transitions=True

)

crf.fit(X_train, y_train)

在测试集上进行预测

y_pred = crf.predict(X_test)

输出模型评估结果

print(metrics.flat_classification_report(y_test, y_pred, labels=crf.classes_))

以上代码中,首先使用NLTK库加载了一个NER数据集,然后定义了特征提取函数和特征提取过程,接着使用sklearn_crfsuite库构建了一个CRF模型,并在训练集上进行了训练。最后对测试集进行了预测,并输出了模型的评估结果。

4. 总结

传统的序列模型CRF与HMM的区别主要体现在建模方式、对隐含状态的处理和对特征函数的处理上。CRF是一种判别模型,直接对输入输出序列之间的关系进行建模,不对隐藏状态进行建模,而HMM是一种生成模型,通过对隐藏状态和观察序列的联合概率分布进行建模。在实际应用中,可以根据具体任务的特点选择合适的模型进行建模和训练。

相关文章
|
2月前
|
数据采集 自然语言处理
传统的序列模型CRF原理
传统的序列模型CRF原理
|
2月前
|
机器学习/深度学习 自然语言处理 Python
传统的序列模型CRF实现和优劣势
传统的序列模型CRF实现和优劣势
|
2月前
|
机器学习/深度学习 人工智能 运维
[ICLR2024]基于对比稀疏扰动技术的时间序列解释框架ContraLSP
《Explaining Time Series via Contrastive and Locally Sparse Perturbations》被机器学习领域顶会ICLR 2024接收。该论文提出了一种创新的基于扰动技术的时间序列解释框架ContraLSP,该框架主要包含一个学习反事实扰动的目标函数和一个平滑条件下稀疏门结构的压缩器。论文在白盒时序预测,黑盒时序分类等仿真数据,和一个真实时序数据集分类任务中进行了实验,ContraLSP在解释性能上超越了SOTA模型,显著提升了时间序列数据解释的质量。
|
2月前
|
机器学习/深度学习 测试技术 TensorFlow
PYTHON用RNN神经网络LSTM优化EMD经验模态分解交易策略分析股票价格MACD
PYTHON用RNN神经网络LSTM优化EMD经验模态分解交易策略分析股票价格MACD
|
2月前
|
人工智能 搜索推荐 物联网
DoRA(权重分解低秩适应):一种新颖的模型微调方法_dora模型
DoRA(权重分解低秩适应):一种新颖的模型微调方法_dora模型
191 0
|
机器学习/深度学习 存储 人工智能
深度学习进阶篇7:Transformer模型长输入序列、广义注意力、FAVOR+快速注意力、蛋白质序列建模实操。
深度学习进阶篇7:Transformer模型长输入序列、广义注意力、FAVOR+快速注意力、蛋白质序列建模实操。
深度学习进阶篇7:Transformer模型长输入序列、广义注意力、FAVOR+快速注意力、蛋白质序列建模实操。
|
机器学习/深度学习 算法 Python
【CEEMDAN-VMD-GRU】完备集合经验模态分解-变分模态分解-门控循环单元预测研究(Python代码实现)
【CEEMDAN-VMD-GRU】完备集合经验模态分解-变分模态分解-门控循环单元预测研究(Python代码实现)
213 0
|
机器学习/深度学习 算法 Python
【CEEMDAN-CNN-LSTM】完备集合经验模态分解-卷积神经长短时记忆神经网络研究(Python代码实现)
【CEEMDAN-CNN-LSTM】完备集合经验模态分解-卷积神经长短时记忆神经网络研究(Python代码实现)
115 0
|
机器学习/深度学习 自然语言处理 算法
从Transformer到扩散模型,一文了解基于序列建模的强化学习方法
从Transformer到扩散模型,一文了解基于序列建模的强化学习方法
262 0
|
机器学习/深度学习 自然语言处理
机器学习(四)通过递归的矩阵向量空间预测组合语义
单字矢量空间模型已经在学习词汇信息方面非常成功。但是,它们无法捕捉到更长的短语的位置意义,这样就阻碍了它们对语言的深入理解。我们介绍一种递归神经网络(RNN)模型,该模型学习任意句法类型和长度的短语和句子的组合向量表示。我们的模型为解析树中的每个节点分配向量和矩阵:向量捕获组成部分的固有含义,而矩阵捕获它如何改变相邻单词或短语的含义。这种矩阵向量RNN可以学习命题逻辑的运算符和自然语言的含义。该模型在三个不同的实验中获得最显著的表现:预测副词形容词对的细粒度情感分布;对电影评论的情感标签进行分类,并使用他们之间的句法路径对名词之间的因果关系或主题信息进行分类。
169 0
机器学习(四)通过递归的矩阵向量空间预测组合语义