マルコフ論理による決定論の回避
-
21-09-2019 - |
質問
私は今日、マルコフ連鎖ジェネレーターについて詳しく読み始めたところですが、マルコフ連鎖ジェネレーターを構築するプロセス全体に非常に興味をそそられています。私の理解では、将来の状態は現在までの統計的な過去の状態に依存します。
例:
こんにちは世界。ハロードリー。こんにちは世界。
そのソースでは、約 66% の時間で「World」が「Hello」に続きます。
それが常に当てはまる場合、毎回同じ結果が出力されることを避けるにはどうすればよいでしょうか?統計的な出現は静的文字列では変化しないので、ソースデータが何らかの方法で変更されない限り、バリアントは生成されないと仮定するのは正しいでしょうか?
統計値を考慮しながら、ある程度の柔軟性を持たせながら、静的ソースからバリエーションを取得するにはどうすればよいでしょうか?上記の例を使用すると、「Dolly」が「Hello」の後に 33% しか従わない場合、ジェネレーターが「Hello」と「Dolly」の後に続くようにするにはどうすればよいでしょうか?
私が尋ねているのは、現在の選択に続く単語の統計的存在に基づいて、次の選択の確率をどのように基にすればよいかということだと思います。そうすれば、「Dolly」は 33% の確率で表示され、「World」は 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
あなたの現在の状態がこんにちは場合には、、そして、あなたの次の可能な状態は世界です。そして、ドリーは0 ..と1の間の乱数を生成し、世界を選択してください。それは少ない0.666666未満だ場合、それ以外のドリーを選択します。
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)、およびこれまでの確率の和を保ち、同じ固定順序で可能性を検討してください。すぐにその合計があなたのランダムに選ばれた数を超えると、その選択を選択します。確率Sの合計を計算し、すべてのことによって、それらを分割、または[0、S)
上のあなたの乱数を選択いずれかのためにあなたの選択肢は、(1合算しない)非正規化確率を持っている場合は、最初の必要性2)のパラメータの数と比較してサンプルのトレーニングデータの少量()からモデルを推定する際に、モデルパラメータにベイズ事前確率を使用して、オーバーフィット防止することができます。モデルパラメータ(履歴サイズ)の数は、事前に任意の有限数に固定されていないこののは本当にクールな例については、<のhref = "http://books.nips.cc/papers/files/を参照してくださいnips14 / AA01.pdf」のrel = "nofollowをnoreferrer">無限HMM を。あなたはベイズ法を使用しない場合、あなたが持っている学習データの量に応じて適切履歴の長さを選択したい、および/または秩序-2とorder-の間にいくつかのアドホックスムージング(例えば線形補間を実装します1つのモデル)。