2

我今天刚开始阅读有关马尔可夫链生成器的更多信息,并且对构建它的整个过程非常感兴趣。据我了解,未来状态取决于统计的过去状态到现在。

例子:

你好世界。你好,多莉。你好世界。

在该来源中,“World”大约有 66% 的时间跟随“Hello”。

如果总是这样,那么您如何避免每次都输出相同的结果?统计出现不会随静态字符串而改变,所以我是否可以假设不会生成任何变体,除非源数据以某种方式被修改?

考虑到统计值,我如何从静态源中获得变化,但又允许一些灵活性?使用上面的示例,当“Dolly”仅在 33% 的情况下跟随“Hello”时,如何让我的生成器跟随“Hello”和“Dolly”?

我想我要问的是,我如何根据当前选择之后单词的统计存在来确定下一次选择的概率?这样一来,“多莉”出现了 33% 的时间,而“世界”出现了 66% 的时间——还是我完全迷路了?

4

2 回答 2

3

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

在您的示例中,您有一个 N 为 1 的马尔可夫链,您将有一个看起来像这样的链结构:

<start> -> Hello : 1.0

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

Dolly. -> Hello : 1.0

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

如果您当前的状态是 Hello,那么您下一个可能的状态是 World。和多莉.. 生成一个介于 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
于 2009-09-04T21:28:58.237 回答
0

两条评论:

1)要从随机过程中生成样本,无论某个选择是否很可能(> 50%),而其他选择的可能性较小,只需要加权“硬币翻转”:在[0,1上均匀生成一个随机实数),并以相同的固定顺序考虑可能性,保持迄今为止的概率总和。一旦该总和超过您随机选择的数字,请选择该选项。如果您的选择具有未归一化(不求和为 1)的概率,您首先需要计算概率之和 s,然后将它们全部除以 s,或者在 [0,s) 上选择您的随机数

2) To prevent overfitting when estimating your model from a small amount of sample training data (compared to the number of parameters), use Bayesian priors on the model parameters. For a really cool example of this, where the number of model parameters (history size) isn't fixed to any finite number in advance, see the Infinite HMM. If you don't use Bayesian methods, then you'll want to choose the history length appropriately for the amount of training data you have, and/or implement some ad-hoc smoothing (e.g. linear interpolation between an order-2 and order-1 model).

于 2009-09-04T22:28:14.757 回答