HMM

HMM模型参数求解概述

匿名 (未验证) 提交于 2019-12-03 00:05:01
HMM模型参数求解根据已知的条件可以分为两种情况。     第一种情况较为简单,就是我们已知 D D个长度为 T T的观测序列和对应的隐藏状态序列,即 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . ( O D , I D ) } {(O1,I1),(O2,I2),...(OD,ID)}是已知的,此时我们可以很容易的用最大似然来求解模型参数。     假设样本从隐藏状态 q i qi转移到 q j qj的频率计数是 A i j Aij,那么状态转移矩阵求得为: A = [ a i j ] , 其 中 a i j = A i j ∑ s = 1 N A i s A=[aij],其中aij=Aij∑s=1NAis     假设样本隐藏状态为 q j qj且观测状态为 v k vk的频率计数是 B j k Bjk,那么观测状态概率矩阵为: B = [ b j ( k ) ] , 其 中 b j ( k ) = B j k ∑ s = 1 M B j s B=[bj(k)],其中bj(k)=Bjk∑s=1MBjs     假设所有样本中初始隐藏状态为 q i qi的频率计数为 C ( i ) C(i),那么初始概率分布为: ∏ = π ( i ) = C ( i ) ∑ s = 1 N C ( s ) ∏=π(i)=C(i)∑s=1NC(s)    

jieba分词原理-DAG(NO HMM)

匿名 (未验证) 提交于 2019-12-02 22:51:30
最近公司在做一个推荐系统,让我给论坛上的帖子找关键字,当时给我说让我用jieba分词,我周末回去看了看,感觉不错,还学习了一下具体的原理 首先,通过正则表达式,将文章内容切分,形成一个句子数组,这个比较好理解 然后构造出句子的有向无环图(DAG) def get_DAG(self, sentence): self.check_initialized() DAG = {} N = len(sentence) for k in xrange(N): tmplist = [] i = k frag = sentence[k] while i < N and frag in self.FREQ:#对每一个字从这个字开始搜索成词位置 if self.FREQ[frag]: tmplist.append(i)#如果可以成词就加入到DAG中 i += 1 frag = sentence[k:i + 1] if not tmplist: tmplist.append(k)#如果找不到词语,就将自己加入DAG DAG[k] = tmplist return DAG 对句子中的每个字进行分析,从右边一位开始,看sentence[k:i+1]这个词语是否在预设的字典中,这个字典保存了常用的词语(和词语的一部分,但权重为0)和其权重.如果有,并且如果字典中的这个词的权值不等于0

基于统计模型的中文分词方法

情到浓时终转凉″ 提交于 2019-12-02 18:50:36
统计分词: 统计分词的主要思想是把每个词看做是由字组成的,如果相连的字在不同文本中出现的次数越多,就证明这段相连的字很有可能就是一个词。 统计分词一般做如下两步操作: 1.建立统计语言模型(n-gram) 2.对句子进行单词划分,然后对划分结果做概率计算,获取概率最大的分词方式。这里就用到了统计学习算法,如隐马尔科夫模型(HMM),条件随机场(CRF)等 语言模型: 语言模型在信息检索,机器翻译,语音识别中承担着重要的任务。这种模型结构简单,直接,但同时也因为数据缺乏而必须采取平滑算法。这里主要介绍n元语言模型(n-gram)。 假设S表示长度为i,由(W1,W2,....,Wi)字序列组成的句子,则代表S的概率为: P(S) = P(W1,W2,...,Wi) = P(W1)*P(W2|W1)*P(W3|W2,W1)....P(Wi|W1,W2,...,Wi-1) 即每个字的出现都与他之前出现过的字有关,最后整个句子S的概率为这些字概率的乘积。但是这个计算量很大,所以在这里我们可以利用马尔科夫假设,即当前词只与最多前n-1个有限的词相关: 当n=1时,即出现在第i位上的词Wi独立于历史时,一元文法被记作uni-gram,一元语言模型可以记作: uni-gram 当n=2时,即出现在第i位上的词wi仅与它前面的一个历史词wi-1有关,二元文法模型被称为一阶马尔可夫链(Markov

轻松理解条件随机场

偶尔善良 提交于 2019-12-02 06:45:20
说明一下:下面这篇文章是我看过之后感觉非常好的一篇文章,不仅解释了CRF,还对CRF与逻辑回归和HMM的比较也做了一番说明,真的是相对精彩。我转载的文章是经过两次转载了,第一次转载的出处已经不存在了,我担心这篇文章消失了,所以就在这里再次转载了。 理解条件随机场最好的办法就是用一个现实的例子来说明它。但是目前中文的条件随机场文章鲜有这样干的,可能写文章的人都是大牛,不屑于举例子吧。于是乎,我翻译了这篇文章。希望对其他伙伴有所帮助。 原文在这里[http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/] 想直接看英文的朋友可以直接点进去了。我在翻译时并没有拘泥于原文,许多地方都加入了自己的理解,用学术点的话说就是意译。(画外音:装什么装,快点开始吧。)好的,下面开始翻译! 假设你有许多小明同学一天内不同时段的照片,从小明提裤子起床到脱裤子睡觉各个时间段都有(小明是照片控!)。现在的任务是对这些照片进行分类。比如有的照片是吃饭,那就给它打上吃饭的标签;有的照片是跑步时拍的,那就打上跑步的标签;有的照片是开会时拍的,那就打上开会的标签。问题来了,你准备怎么干? 一个简单直观的办法就是,不管这些照片之间的时间顺序,想办法训练出一个多元分类器。就是用一些打好标签的照片作为训练数据,训练出一个模型

第十章-HMM模型

穿精又带淫゛_ 提交于 2019-11-30 00:57:09
隐马尔可夫模型(Hidden Markov Model, HMM) 是可用于 标注问题 的统计学习模型,描述由隐藏的马尔科夫链随机生成的观测序列的过程,属于 生成模型 ,是 概率模型 的一种。本章主要是总结HMM模型的概率计算算法、学习算法以及预测算法。HMM在 语音识别、自然语言处理NLP 等领域有着广泛的应用。 概率图模型常常是为了描述随机变量之间的关系(是不是独立的),分为有向图和无向图,而HMM主要用有向图。 概率图模型 在有向图中,用圆圈⭕表示随机变量,可以是一维的,也可以是多维的,既可以是离散随机变量,也可以是连续的,⭕叫做结点,图是由结点和边构成的,在有向图中就是有向边,要描述Y受X影响的,就将X和Y连接起来,并用箭头描述从X指向Y的方向。 随机变量之间的关系 一个箭头可以表示两个随机变量之间的关系,引入条件独立的概念,在概率图模型中,假设有三个随机变量X,Y,Z,一般来说,隐变量在图模型中用⭕表示,如果能观察到一个变量取值的时候,用带阴影的圆\bullet表示。在掷硬币的例子中,第1个结果是观察不到的,用空心圆⭕表示,第2个结果是可以观察到的,用带阴影的圆●表示。 为什么要强调隐变量和观测变量,圆是空心⭕还是阴影●会影响到随机变量的依赖性 。 第一种情况 随机变量都是空心圆,三个随机变量都是观测不到的。即: \[ P(X,Z) \neq P(X)(Z) \]

[转载]HMM+GMM语音识别技术

自作多情 提交于 2019-11-29 21:34:51
仅做备份 原文链接:https://blog.csdn.net/fandaoerji/article/details/44853853 ———————————————— HMM+GMM语音识别技术详解级PMTK3中的实例 本人正在攻读计算机博士学位,目前一直再学习各种模型啊算法之类的。所以一直想把自己的学习过程总结一下,所以就开通了这个博客。 这两天一直再看语音识别方面的知识,想把自己的理解总结一下,希望对其他学习的人有所帮助。 提前需要掌握的知识: 语音信号基础:语音信号的表示形式、分帧、特征(MFCC)、音素等等 HMM模型:离散隐马尔科夫模型级3个问题的求解方法 GMM:混合高斯模型,用于连续隐马尔科夫模型。 语音数据处理 语音信号计算机中是采用PCM编码按时间序列保存的一连串数据。计算机中最原始语音文件是wav,可以通过各种录音软件录制,录制是包括三个参数 fs:采样率 8000Hz 115200Hz 等等,代表每1秒保存的语音数据点数 bits:每个采样点用几个二进制保存 通道:很多音频都有左右2个通道,在语音识别中通常有一个通道的数据就够了。 下面是一个 apple.wav 文件在matlab中的例子: [x fs bit]=wavread('apple.wave'); plot(x); -------------- fs =8000 bits =16 --------

HMM模型参数求解概述

廉价感情. 提交于 2019-11-29 16:08:01
HMM模型参数求解根据已知的条件可以分为两种情况。     第一种情况较为简单,就是我们已知 D D个长度为 T T的观测序列和对应的隐藏状态序列,即 { ( O 1 , I 1 ) , ( O 2 , I 2 ) , . . . ( O D , I D ) } {(O1,I1),(O2,I2),...(OD,ID)}是已知的,此时我们可以很容易的用最大似然来求解模型参数。     假设样本从隐藏状态 q i qi转移到 q j qj的频率计数是 A i j Aij,那么状态转移矩阵求得为: A = [ a i j ] , 其 中 a i j = A i j ∑ s = 1 N A i s A=[aij],其中aij=Aij∑s=1NAis     假设样本隐藏状态为 q j qj且观测状态为 v k vk的频率计数是 B j k Bjk,那么观测状态概率矩阵为: B = [ b j ( k ) ] , 其 中 b j ( k ) = B j k ∑ s = 1 M B j s B=[bj(k)],其中bj(k)=Bjk∑s=1MBjs     假设所有样本中初始隐藏状态为 q i qi的频率计数为 C ( i ) C(i),那么初始概率分布为: Π = π ( i ) = C ( i ) ∑ s = 1 N C ( s ) Π=π(i)=C(i)∑s=1NC(s)    

一文搞懂HMM(隐马尔可夫模型)

时光怂恿深爱的人放手 提交于 2019-11-28 04:18:49
什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度。熵越大,系统越无序,意味着系统结构和运动的不确定和无规则;反之,,熵越小,系统越有序,意味着具有确定和有规则的运动状态。熵的中文意思是热量被温度除的商。负熵是物质系统有序化,组织化,复杂化状态的一种度量。 熵最早来原于 物理学 . 德国物理学家鲁道夫·克劳修斯首次提出熵的概念,用来表示任何一种能量在空间中分布的均匀程度,能量分布得越均匀,熵就越大。 一滴墨水滴在清水中,部成了一杯淡蓝色溶液 热水晾在空气中,热量会传到空气中,最后使得温度一致 更多的一些生活中的例子: 熵力的一个例子是耳机线,我们将耳机线整理好放进口袋,下次再拿出来已经乱了。让耳机线乱掉的看不见的“力”就是熵力,耳机线喜欢变成更混乱。 熵力另一个具体的例子是弹性力。一根弹簧的力,就是熵力。 胡克定律其实也是一种熵力的表现。 万有引力也是熵力的一种(热烈讨论的话题)。 浑水澄清[1] 于是从微观看,熵就表现了这个系统所处状态的 不确定性程度 。香农,描述一个信息系统的时候就借用了熵的概念,这里熵表示的是这个信息系统的 平均信息量 ( 平均不确定程度 ) 。 最大熵模型 我们在投资时常常讲不要把所有的鸡蛋放在一个篮子里,这样可以降低风险。在信息处理中,这个原理同样适用。在数学上,这个原理称为最大熵原理(the maximum

jieba分词与HMM学习

好久不见. 提交于 2019-11-28 04:18:29
问题1:jieba中文分词的原理? 问题2:HMM在jieba中的应用? 问题3:HMM在其他行业内有何应用? 首先学一个东西的第一步应该先看官网https://github.com/fxsjy/jieba 官网给出jieba中应用到的 算法 有: 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG) 采用了 动态规划查找最大概率路径 , 找出基于词频的最大切分组合 对于未登录词,采用了基于汉字成词能力的 HMM 模型 ,使用了 Viterbi 算法 功能解析: 主要功能包括:1、分词;2、添加自定义词典:字典的载入与调整;3、关键词抽取:IT-IDF算法、TextRank算法;4、词性标注;5、并行分词;6、ToKenize;7、chineseAnalyzer for Whoosh 搜索引擎;8、命令行分词 1.分词 #主要涉及函数包括有jieba.cut()、jieba.cut_for_search() #jieba.cut 方法接受三个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型 #jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细 #待分词的字符串可以是

以kaldi中的yesno为例谈谈transition

柔情痞子 提交于 2019-11-27 02:11:08
在基于GMM-HMM的传统语音识别里,比音素(phone)更小的单位是状态(state)。一般每个音素由三个状态组成,特殊的是静音(SIL)由五个状态组成。这里所说的状态就是指HMM里的隐藏的状态,而每帧数据就是指HMM里的观测值。每个状态可以用一个GMM模型表示(这个GMM模型的参数是通过训练得到的)。在识别时把每帧数据对应的特征值放进每个状态的GMM里算概率,概率最大的那个就是这帧对应的状态。再从状态得到音素(HMM负责),从音素得到词(字典模型负责),从词得到句子(语言模型负责),最终完成识别。可以从一个状态转到另一个状态,即状态之间存在转移(transition)。Transition是kaldi里一个非常重要的概念,相关的有transition-state、transition-index、transition-id等,初一看云里雾里不太好理解,其实它们都是根据topo图(/s5/data/lang/topo)得到的。今天就基于yesno的例子对它们做一个讲解。 先看yesno中的topo图(见下图),它有三个音素:SIL、yes、no (yes和no均作为一个音素处理),id 分别为1、2、3. SIL有5个状态,id为0—4 ,5为结束态。yes/no分别有三个状态,id为0—2 ,3为结束态。 SIL中状态0—3 分别有4条状态转移路径(或者叫转移弧),以状态0为例