2009-09-04 5 views
2

今日、マルコフ連鎖ジェネレーターについてもっと読むことが始まりました。そして、これを構築するプロセス全体に本当に興味があります。私の理解から、未来の状態は統計的な過去の状態に依存しています。マルコフ論理を用いた決定論的回避

例:

のHello World。ハロードリー。こんにちは世界。

「世界」がその「ソース」の66%の「こんにちは」に続きます。

いつもそうであれば、いつどのように同じ結果を出すのを避けますか?統計的な出来事は静的な文字列では変わらないので、ソースデータが何らかの方法で変更されていない限り、変種が一切生成されないと仮定するのは正しいですか?

スタティックソースからバリエーションを取得するにはどうすればよいでしょうか?上記の私の例を使って、私のジェネレータが "Hello"を "Dolly"に従うことを許可するにはどうすればいいですか?

私の質問によれば、私の現在の選択に続く単語の統計的存在に次の選択の確率をどのように基づいていますか?そうすれば、 "Dolly"は33%の時間を、 "World"は66%の時間を示しています。

答えて

3

乱数ジェネレータを使用して、下に行くパスを選択します。あなたは各状態(実際にN個の前の項目の履歴です)とその状態の確率を保存しなければなりません。次に、乱数を選択し、それに基づいて次に遷移する状態を決定します。あなたの現在の状態が、あなたの次の可能な状態は、Hello Worldのであれば

<start> -> Hello : 1.0 

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

Dolly. -> Hello : 1.0 

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

:あなたの例では

あなたは1のNとマルコフ連鎖を持っているあなたは、このような何かを見て鎖状構造を持っているでしょう。 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 
0

二つのコメント:

1)あるかどうか、ランダムなプロセスからサンプルを生成するために、選択肢はかなり(> 50%)可能性があり、そうでないものは、「コインフリップ」を重み付けする必要があります:[0,1]に一様に実数を生成し、同じ固定順序で可能性を検討し、これまでの確率のその合計がランダムに選択された数を超えたら、その選択肢を選択します。選択肢が非正規化(1に集計されない)する確率がある場合は、最初に確率sの合計を計算し、sでそれらをすべて分割するか、[0、s]で乱数を選択する必要があります

2)少量のサンプルトレーニングデータ(パラメータの数と比較して)からモデルを見積もる際のオーバーフィットを避けるために、モデルパラメータにベイジアンプライアーを使用します。モデルパラメータの数(ヒストリサイズ)があらかじめ有限数に固定されていないという、実際のクールな例については、Infinite HMMを参照してください。ベイジアンメソッドを使用しない場合は、トレーニングデータの量に応じて履歴の長さを適切に選択したり、いくつかのアドホックスムージング(例えば、2次と2次の間の線形補間)を実装したり、 1モデル)。

関連する問題