03马尔可夫链算法

03马尔可夫链算法

ID:14150744

大小:1.21 MB

页数:12页

时间:2018-07-26

03马尔可夫链算法_第1页
03马尔可夫链算法_第2页
03马尔可夫链算法_第3页
03马尔可夫链算法_第4页
03马尔可夫链算法_第5页
资源描述:

《03马尔可夫链算法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据结构设计是程序构造过程的中心环节。一旦数据结构安排好了,算法就像是瓜熟蒂落,编码也比较容易。这种观点虽然有点过于简单化,但也有一定道理。在数据结构中有关各种基本数据结构,是许多程序的基本构件。在这一章中,我们将组合这些结构,要完成的工作是设计和实现一个中等规模的程序。我们将说明被处理的问题将如何影响数据结构,从这里还可以看到,一旦数据结构安排好之后,代码将会如何自然地随之而来。我们要选择的问题并不是很常见的,但它在基本形式上又是非常典型的:一些数据进去,另一些数据出来,其处理过程并不依赖于多少独创性。准备做的就是产生一些随机的可以读的英语文本。如果随便扔出来一些随机字母或随机的词,结果

2、当然是毫无意义的。为了得到更好一些的结果,我们需要一个带有更多内在结构,例如包含着各短语出现频率的统计模型。但是,我们怎么才能得到这种统计呢?我们当然可以抓来一大堆英语材料,仔细地研究。但是,实际上有一种更简单也更有意思的方法。这里有一个关键性的认识:用任何一个现成的某种语言的文本,可以构造出由这个文本中的语言使用情况而形成的统计模型。通过该模型生成的随机文本将具有与原文本类似的统计性质。1马尔可夫链算法完成这种处理有一种非常漂亮的方法,那就是使用一种称为马尔可夫链算法的技术。我们可以把输入想像成由一些互相重叠的短语构成的序列,而该算法把每个短语分割为两个部分:一部分是由多个词构成的前缀,

3、另一部分是只包含一个词的后缀。马尔可夫链算法能够生成输出短语的序列,其方法是依据(在我们的情况下)原文本的统计性质,随机性地选择跟在前缀后面的特定后缀。采用三个词的短语就能够工作得很好——利用连续两个词构成的前缀来选择作为后缀的一个词:设置w1和w2为文本的前两个词输出w1和w2循环:随机地选出w3,它是文本中w1w2的后缀中的一个打印w3把w1和w2分别换成w2和w3重复循环为了说明问题,用一个实际的例子来说明。采用两词前缀,下面是一些输入的词对和跟随它们之后的词:处理这个文本的马尔可夫算法将首先打印出Showyour,然后随机取出flowcharts或table。如果选中了前者,那么现

4、在前缀就变成yourflowcharts,而下一个词应该是and或will。如果它选取tables,下一个词就应该是and。这样继续下去,直到产生出足够多的输出,或者在找后缀时遇到了结束标志。程序将读入一段英语文本,并利用马尔可夫链算法,基于文本中固定长度的短语的出现频率,产生一段新文本。前缀中词的数目是个参数,上面用的是2。如果将前缀缩短,产生出来的东西将趋向于无聊词语,更加缺乏内聚力;如果加长前缀,则趋向于产生原始输入的逐字拷贝。对于英语文本而言,用两个词的前缀选择第三个是一个很好的折衷方式。看起来它既能重现输入的风味,又能加上程序的古怪润饰。而对于中文,可以选择更大一些。什么是一个词

5、?最明显的回答是字母表字符的一个序列。这里我们更愿意把标点符号也附着在词后,把“words”和“words.”看成是不同的词,这样做将有利于改进闲话生成的质量。加上标点符号,以及(间接的)语法将影响词的选择,虽然这种做法也可能会产生不配对的引语和括号。我们将把“词”定义为任何实际位于空格之间的内容,这对输入语言并没有造成任何限制,但却将标点符号附到了词上。许多语言里都有把文本分割成“空白界定的词”的功能,这个功能也很容易自己实现。中文中,为了简单,以字为单位。输入前缀跟随的后缀词根据这里所采用的方法,输出中所有的词、所有的两词短语以及所有三个词的短语都必然是原来输入中出现过的,但是,也会有

6、许多四个词或更多个词的短语将被组合产生出来。2数据结构的选择有多少输入需要处理?程序应该运行得多快?要求程序读完一整本书并不是不合理的,因此我们需要准备对付输入规模n=100000个词甚至更多的情况。输出将包括几百甚至几千个词,而程序的运行应该在若干秒内完成,而不是几分钟。假定输入文本有100000个词,n已经相当大了,因此,如果还要求程序运行得足够快,这个算法就不会太简单。马尔可夫算法必须在看到了所有输入之后才能开始产生输出。所以它必须以某种形式存储整个输入。一个可能的方式是读完整个输入,将它存为一个长长的字符串。情况的另一方面也很明显,输入必须被分解成词。如果另用一个指向文本中各词的指

7、针数组,输出的生成将很简单:产生一个词,扫描输入中的词,看看刚输出的前缀有哪些可能的后缀,然后随机选取一个。但是,这个方法意味着生成每个词都需要扫描100000个输入词。1000个输出就意味着上亿次字符串比较。这样做肯定快不了。另一种可能性是存储单个的词,给每个词关联一个链表,指出该词在文本中的位置。这样就可以对词进行快速定位。在这里可以使用第2章提出的散列表。但是,这种方式并没有直接触及到马尔可夫算法的需要。在这里最需

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。