用马尔可夫逻辑避免决定论

问题描述:

我刚开始阅读更多关于马尔可夫链生成器的内容,对于构建一个马尔可夫链生成器的整个过程深感兴趣。根据我的理解,未来状态依赖于迄今为止的统计过去状态。用马尔可夫逻辑避免决定论

例子:

的Hello World。你好,多莉。你好,世界。

“世界”跟在“你好”〜66%的时间在该来源。

如果情况总是如此,那么您如何避免每次都输出相同的结果?统计事件不会随着静态字符串而改变,所以我认为没有任何变体会被生成,除非源数据以某种方式被修改?

考虑到统计值,我怎么能从静态源获得变化,但是还是有一定的灵活性?使用上面的例子,当Dolly只在33%的时间跟随“你好”时,我怎么才能让我的生成器跟随“Dolly”跟随“Hello”?

我猜我在问什么,我如何根据我目前选择的词的统计存在为我的下一个选择的概率奠定基础?那样,“多莉”出现了33%的时间,“世界”出现了66%的时间 - 或者我完全失去了这里?

您可以使用一个随机数生成器来选择你下去的路径。你必须保存每个状态(这实际上是N个先前项目的历史记录)以及该状态的概率。然后你选择一个随机数,并根据它来决定你转换到的下一个状态是什么。

在您的例子,你有一个马尔可夫链为1的N,你就必须看起来是这样的链状结构:

<start> -> Hello : 1.0 

Hello -> World. : 0.66666 
Hello -> Dolly. : 0.33333 

Dolly. -> Hello : 1.0 

World. -> <end> : 0.5 
World. -> Hello : 0.5 

如果您的当前状态为你好,你的下一个可能的状态是世界。和Dolly ..生成0到1之间的随机数并选择World。如果它小于0.666666,则选择Dolly。

具有N = 2的马尔可夫链,将得到几乎确定性的行为与该输入:

<start> <start> -> <start> Hello : 1.0 

<start> Hello -> Hello World. : 1.0 

Hello World. -> World. Hello : 0.5 
Hello World. -> World. <end> : 0.5 

World. Hello -> Hello Dolly. : 1.0 

Hello Dolly. -> Dolly. Hello : 1.0 

Dolly. Hello -> Hello World. : 1.0 

两个评论:

1)从一个随机过程产生的样品,无论是否在一定选择是相当可能的(> 50%),而另一些则不如此,只需要一个加权的“硬币翻转”:在[0,1)上统一生成一个随机实数,并考虑相同固定顺序的可能性,到目前为止的可能性。只要该总和超过您随机选择的数字,请选择该选项。如果你的选择没有归一化(不加1)概率,你首先需要计算概率总和s,然后将它们全部除以s,或者在[0,s)上选择你的随机数。

2)To在从少量样本训练数据(与参数数量相比)估算模型时防止过拟合,在模型参数上使用贝叶斯先验。对于一个非常酷的例子,其中模型参数的数量(历史大小)没有预先固定到任何有限数字,请参阅Infinite HMM。如果您不使用贝叶斯方法,那么您需要根据您拥有的训练数据量适当选择历史长度,和/或实施一些特设平滑(例如,在2阶和2阶之间的线性插值) 1型)。