传统的序列模型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是一种生成模型,通过对隐藏状态和观察序列的联合概率分布进行建模。在实际应用中,可以根据具体任务的特点选择合适的模型进行建模和训练。

相关文章
|
传感器 编解码 人工智能
一个强大的音视频编解码库-rkmedia的应用
一个强大的音视频编解码库-rkmedia的应用
1202 0
|
存储 安全 关系型数据库
PostgreSQL物化视图增量更新扩展 -- pg_ivm
PostgreSQL不支持物化视图增量更新,需要定期执行REFRESH MATERIALIZED VIEW命令刷新物化视图。Incremental View Maintenance (IVM)是一种使物化视图保持最新的方法,其中只计算增量更改并将其应用于视图,而不是REFRESH MATERIALIZED VIEW那样从头开始重新计算内容。当只更改视图的一小部分时,IVM可以比重新计算更高效地更新物化视图。
|
4月前
|
图形学
开源Blender中文版软件,3D建模动画领域最良心的免费工具
Blender是免费开源的全能3D创作软件,支持建模、动画、渲染、视频编辑等全流程制作,媲美Maya+3ds Max+ZBrush+Nuke。本文详解MSI安装与ZIP便携版使用方法,并提供完整中文界面设置指南,新手也能轻松上手。(239字)
|
6月前
|
机器学习/深度学习 人工智能 编解码
大模型应用:CLIP 模型全维度解析:理解理论基础强化基础范例.16
CLIP是OpenAI提出的跨模态模型,通过对比学习将图像与文本映射至统一语义空间,实现零样本图文对齐。无需微调即可完成图像分类、图文检索等任务,显著降低标注成本,成为多模态AI的核心基础。
3075 21
|
10月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
机器学习/深度学习 自然语言处理 数据处理
深度学习之语音情感识别与响应
基于深度学习的语音情感识别(Speech Emotion Recognition,SER)与响应系统在语音交互、客服、心理健康等领域有着重要应用。该系统的目标是识别出说话者的情感状态(如愤怒、喜悦、悲伤等)并生成合适的情感响应,从而提升用户体验和交互效果。
1259 2
|
数据采集 API 决策智能
华为诺亚联合中科大发布工具调用模型ToolACE,效果持平GPT-4获开源第一
 【10月更文挑战第10天】华为诺亚方舟实验室与中国科学技术大学合作推出ToolACE,一种自进化合成过程的工具调用模型。ToolACE通过多智能体交互和双重验证系统生成准确、复杂、多样化的工具学习数据,显著提升大型语言模型(LLM)的功能调用能力。实验结果显示,使用ToolACE数据训练的80亿参数模型性能媲美GPT-4,在伯克利功能调用排行榜上获得开源第一。
749 4
|
12月前
|
机器学习/深度学习 移动开发 算法
【语音识别】基于K近邻分类算法的语音情感识别(Matlab代码实现)
【语音识别】基于K近邻分类算法的语音情感识别(Matlab代码实现)
401 4
|
JSON 自然语言处理 数据处理
数据标注工具 Label-Studio
数据标注工具 Label-Studio
7901 0
|
存储 缓存 安全
Java 集合篇面试题全面总结及答案解析
本文总结了Java集合框架的核心概念、常见集合类的特性与应用场景,以及开发中可能遇到的问题与解决方案。内容涵盖集合框架的基础接口(如Collection、Set、List、Map)、泛型的优点、线程安全集合类(如ConcurrentHashMap、CopyOnWriteArrayList)、常见集合类的区别(如ArrayList与LinkedList、HashMap与HashTable)等。此外,还详细介绍了如何实现LRU缓存、FIFO队列、优先级队列及栈等数据结构,并提供了相关代码示例。通过本文,读者可以全面掌握Java集合相关的面试知识点及其实际应用技巧。
532 2