简单马尔可夫模型的实现(简单的机器学习)

马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域。经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的统计工具。

以下利用一篇英文演讲来实现简单得文字生成器,结果其实是一个胡言乱语得结果,但我们可以通过这个类型粗略理解机器学习,首先英文演讲文章的链接:http://pythonscraping.com/files/inaugurationSpeech.txt

以及我上一篇处理该文章的博客链接:http://www.cnblogs.com/ybf-yyj/p/7399149.html

以下以生成100个单词的马尔科夫链为例:

#-*- coding:utf-8 -*-
from urllib2 import urlopen
from random import randint

#统计所有单词出现的次数总和
def wordListSum(wordList):
    sum=0
    for word,value in wordList.items():
        print word,value
        sum+=value
    return sum

def retrieveRandomWord(wordList):
    #在1到所有单词出现总和之间选着一个数字,保证每次输出句子不一样
    randIndex=randint(1,wordListSum(wordList))
    #通过randIndex随机选择一个字母返回
    for word,value in wordList.items():
        randIndex-=value
        if randIndex<=0:
            return word

def buildWordDic(text):
    #清洗\n和 "
    text=text.replace("\n"," ")
    text=text.replace("\"","")
    #保证标点符号和前面的单词在一起,不被剔除
    punctuation=[‘,‘,‘.‘,‘;‘,‘:‘]
    for symbol in punctuation:
        text=text.replace(symbol," "+symbol+" ")
    #切割文章
    words=text.split(" ")
    #除去空单词
    words=[word for word in words if word !=""]
    #定义一个总词典
    wordDict={}
    for i in range(1,len(words)):
        #为新单词再创一个新词典
        # 比如句子为:How do you do.
        if words[i-1] not in wordDict:
            #结果应该为:{‘How‘:{},‘do‘:{}}
            wordDict[words[i-1]]={}

        #将下一个单词加入前一个单词的词典中
        if words[i] not in wordDict[words[i - 1]]:
            # 结果应该为:{‘How‘:{‘do‘:0},‘do‘:{‘you‘:0,‘.‘:0}}
            wordDict[words[i-1]][words[i]]=0
        # 结果应该为:{‘How‘:{‘do‘:1},‘do‘:{‘you‘:1,‘.‘:1}}
        wordDict[words[i - 1]][words[i]]=wordDict[words[i-1]][words[i]]+1
    return wordDict

text=str(urlopen(‘http://pythonscraping.com/files/inaugurationSpeech.txt‘).read().decode(‘utf-8‘))
wordDict=buildWordDic(text)

length=100
chain=‘‘
#随便选择一个单词开头
currentword=‘I‘
for i in range(0,length):
    chain +=currentword+‘ ‘
    currentword=str(retrieveRandomWord(wordDict[currentword]))

print(chain)
时间: 2024-10-18 15:26:23

简单马尔可夫模型的实现(简单的机器学习)的相关文章

隐马尔科夫模型python实现简单拼音输入法

在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此训练得出隐马尔科夫模型,用维特比算法实现了一个简单的拼音输入法.githuh地址:https://github.com/LiuRoy/Pinyin_Demo 原理简介 隐马尔科夫模型 抄一段网上的定义: 隐马尔可夫模型 (Hidden Markov Model) 是一种统计模型,用来描述一个含有隐含

隐含马尔可夫模型在语言处理中的应用

终于下定决心要了解一下马尔科夫链了.当然经典的那个tutorial必是参考文献,另外找了一个浙大教授写的PPT,很不错,用中文讲tutorial的东西理出来了.下面这篇文章写的也不错. http://googlechinablog.com/2006/04/blog-post_17.html转自上述地址的一篇文章数学之美 系列三 -- 隐含马尔可夫模型在语言处理中的应用2006年4月17日 上午 08:01:00 发表者:吴军,Google 研究员 前言:隐含马尔可夫模型是一个数学模型,到目前为之

隐马尔可夫模型(Hidden Markov Model,HMM)

介绍 崔晓源 翻译 我们通常都习惯寻找一个事物在一段时间里的变化规律.在很多领域我们都希望找到这个规律,比如计算机中的指令顺序,句子中的词顺序和语音中的词顺序等等.一个最适用的例子就是天气的预测. 首先,本文会介绍声称概率模式的系统,用来预测天气的变化 然后,我们会分析这样一个系统,我们希望预测的状态是隐藏在表象之后的,并不是我们观察到的现象.比如,我们会根据观察到的植物海藻的表象来预测天气的状态变化. 最后,我们会利用已经建立的模型解决一些实际的问题,比如根据一些列海藻的观察记录,分析出这几天

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

本文转自于:http://www.cnblogs.com/skyme/p/4651331.html 隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程.其难点是从可观察的参数中确定该过程的隐含参数.然后利用这些参数来作进一步的分析,例如模式识别. 是在被建模的系统被认为是一个马尔可夫过程与未观测到的(隐藏的)的状态的统计马尔可夫模型. 下面用一个简单的例子来阐述: 假设我手里有三个不同的骰子.第一个骰子是我们平常见的骰子(称这

马尔科夫链和隐马尔可夫模型(转载)

马尔可夫模型是由Andrei A. Markov于1913年提出的 ?? 设 SS是一个由有限个状态组成的集合 S={1,2,3,-,n?1,n}S={1,2,3,-,n?1,n} 随机序列 XX 在 tt时刻所处的状态为 qtqt,其中 qt∈Sqt∈S,若有: P(qt=j|qt?1=i,qt?2=k,?)=P(qt=j|qt?1=i)P(qt=j|qt?1=i,qt?2=k,?)=P(qt=j|qt?1=i) aij≥0∑jnaij=1aij≥0∑jnaij=1 则随机序列 XX构成一个一

【NLP】揭秘马尔可夫模型神秘面纱系列文章(三)

向前算法解决隐马尔可夫模型似然度问题 作者:白宁超 2016年7月11日22:54:57 摘要:最早接触马尔可夫模型的定义源于吴军先生<数学之美>一书,起初觉得深奥难懂且无什么用场.直到学习自然语言处理时,才真正使用到隐马尔可夫模型,并体会到此模型的妙用之处.马尔可夫模型在处理序列分类时具体强大的功能,诸如解决:词类标注.语音识别.句子切分.字素音位转换.局部句法剖析.语块分析.命名实体识别.信息抽取等.另外广泛应用于自然科学.工程技术.生物科技.公用事业.信道编码等多个领域.本文写作思路如下

隐马尔可夫模型(HMM:Hidden Markov Models)

理论部分转载自:http://blog.csdn.net/likelet/article/details/7056068 手动计算例子转载自:http://blog.sina.com.cn/s/blog_953f8a550100zh35.html 隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价值.平时,经常能接触到涉及 HMM 的相关文章,一直

统计学习方法笔记 -- 隐马尔可夫模型

参考,隐马尔可夫模型(HMM)攻略 首先看看确定的状态序列,这种状态序列中状态的变化是确定的,比如 红绿灯,一定是绿灯->红灯->黄灯,这样的状态序列 当然也有些不确定状态序列,比如 天气,今天是晴天,你不能确定明天也一定是晴天或雨天 于是我们用概率来表示这种不确定性,称为马尔可夫过程 (Markov Process),马尔可夫过程的阶数表示当前状态依赖于过去几个状态,出于简单考虑往往用一阶马尔可夫过程,即当前状态仅仅取决于前一个状态. 马尔可夫过程,由状态集合,初始状态和状态转移矩阵组成,

隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数

隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列(TODO) 在本篇我们会讨论HMM模型参数求解的问题,这个问题在HMM三个问题里算是最复杂的.在研究这个问题之前,建议先阅读这个系列的前两篇以熟悉HMM模型和HMM的前向后向算法,以及EM算法原理总结,这些在本篇里会用到.在李航的<统计学习方法>中,这个算法的讲解只考虑了单个观测