マルコフ連鎖は、訓練されていない目には知的に見えるランダムな意味不明なものを生成する (ほぼ標準的な) 方法です。人間が書いたテキストからマルコフ生成テキストを識別するにはどうすればよいでしょうか。
あなたが指摘するリソースが Python に適しているとしたら、それはすばらしいことです。
マルコフ連鎖は、訓練されていない目には知的に見えるランダムな意味不明なものを生成する (ほぼ標準的な) 方法です。人間が書いたテキストからマルコフ生成テキストを識別するにはどうすればよいでしょうか。
あなたが指摘するリソースが Python に適しているとしたら、それはすばらしいことです。
簡単な方法の 1 つは、大勢の人間に入力テキストを読んでもらい、そのテキストが意味を成しているかどうかを確認することです。冗談半分ですが、これは難しい問題です。
マルコフ連鎖で生成されたテキストは、単語の頻度と単語の順序間の単純な関係に関して、実際の人間のテキストと多くの同じ特性を持つため、これは難しい問題だと思います。
実際のテキストとマルコフ連鎖によって生成されたテキストの違いは、高レベルの文法規則と意味的な意味にあり、プログラムでエンコードするのは困難です。もう 1 つの問題は、マルコフ連鎖がテキストを生成するのに十分に優れているため、文法的にも意味的にも正しいステートメントを思いつくことがあるということです。
例として、カントマシンの格言を次に示します。
今日、彼は人間の意志は自由であると確信するでしょう。明日、彼は自然の不可解な鎖を考慮して、自由を単なる幻想と見なし、自然はすべてであると宣言するでしょう。
この文字列はコンピューター プログラムによって作成されましたが、人間がこれを決して口にしないとは言いがたいです。
より明白な違いを明らかにするコンピューターと人間が生成したテキストについて、より具体的な詳細を提供していただけない限り、コンピューター プログラミングを使用してこれを解決することは難しいと思います。
エヴァンの答えを一般化することをお勧めします。独自のマルコフモデルを作成し、与えられた(非常に大きな)サンプルの大きなチャンクでトレーニングし、残りのサンプルを「テストデータ」として予約します。ここで、トレーニングしたモデルがテスト データに対してどの程度うまく機能するかを確認します。たとえば、「適合が良すぎる」状況を示唆するカイ 2 乗検定を使用して (テスト データが実際にこのモデルによって生成されたことを示唆します)、適合が非常に悪いもの (モデル構造のエラーを示唆する -- 間違った構造を持つ過度に訓練されたモデルは、そのような場合に悪い仕事をすることで有名です)。
もちろん、モデルの構造など、キャリブレーションにはまだ多くの問題があります。Ntuples の単語に基づく単純なモデルとそれ以上のものを疑っていますか、それとも文法状態などを備えたより洗練されたモデルを疑っていますか。幸いなことに、自然であることがわかっているテキストの大規模なコーパスと、さまざまな構造のモデルを使用して独自に生成したコーパスを使用することで、物事をうまく調整できます。
別のアプローチは、与えられた文を解析するためにnltkを使用することです-自然なテキストであっても、少数の誤解析が予想されます(人間は不完全であり、パーサーもそうであるため、その単語を知らない可能性がありますX は動詞として使用でき、それを名詞としてのみ分類するなど)、ほとんどのマルコフ モデル (パーサーがたまたま使用しているのと本質的に同じ文法構造をモデル化している場合を除きます。また、いくつかのパーサーを使用して試してみて、それに対抗してください!-) 失読症の人間よりもはるかに多くの誤解析を引き起こします。繰り返しますが、自然テキストと合成テキストでそれを調整すると、私の言いたいことがわかるでしょう!-)
クラウドソーシング。Mechanical Turkを使用して、多くの人間に投票してもらいます。これを実現するのに役立つライブラリもいくつかあります。例えば:
これは、MechanicalTurkを使用して作業を完了するためのヒントに関するO'ReillyRadarのブログ投稿です。
マルコフによって生成された大きなテキストがいくつかある場合、各サンプル間の単語の頻度を比較することで、それらがそうであると判断できる可能性があります。マルコフ連鎖は一定の単語確率に依存するため、特定の単語の比率はサンプル間でほぼ等しくなります。
シンボルの任意のシーケンスからマルコフ遷移確率を生成し、マルコフ行列のエントロピー率を計算するプログラムを作成するとします。( http://en.wikipedia.org/wiki/Entropy_rate#Entropy_rates_for_Markov_chainsを参照してください) これは基本的に、テキストがマルコフ連鎖だけを使用してどれだけ簡単に予測できるかを見積もったものです (エントロピーが高いほど、予測が難しくなります)。したがって、マルコフ行列のエントロピーが低いほど、テキストのサンプルがマルコフ行列によって制御される可能性が高くなると思います。このコードの書き方について質問がある場合は、たまたま私のコンピューターでこれを行う Python のプログラムがあるので、お手伝いします。