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

Posted 每天学习一点点

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单马尔可夫模型的实现(简单的机器学习)相关的知识,希望对你有一定的参考价值。

马尔可夫模型(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)

 

以上是关于简单马尔可夫模型的实现(简单的机器学习)的主要内容,如果未能解决你的问题,请参考以下文章

简单易懂的隐马尔可夫模型(HMM)讲解

隐马尔可夫模型(HMM)详解

机器学习算法之——隐马尔可夫(Hidden Markov ModelsHMM)原理及Python实现

如何用简单易懂的例子解释隐马尔可夫模型

机器学习——隐马尔可夫模型

Python实现HMM(隐马尔可夫模型)