1

nltk.ngram.NgramModelを使用して、ブラウンコーパスでn-gramモデルをトレーニングしています。それは基本的に永遠にかかり、多くのシステムメモリを使用しています。コードを実行するたびにモデルを再度トレーニングする必要がないように、モデルを保存する方法があるかどうか疑問に思いました。私はpickleとBerkeleyDBへの言及を見てきましたが、どちらがどのように機能するかを完全には理解していません。

ありがとう!

*** ETA:ここで説明する変更を実装し、さまざまなピクルスプロトコルオプションをすべて試したにもかかわらず、モデルを正常にピクルス化できませんでした。私はsimplejson(運がない)とYAML(永遠にかかり、私の記憶をすべて食い尽くす)にだまされました。

4

3 に答える 3

0

BerkeleyDBリファレンスは、おそらく私の答えの1つ、または私が書いた記事でした。基本的に私は自分の度数分布表を書きました。バッチ作成用に最適化されており、メモリ内のNLTK実装(たとえば、1000個の入力記事/ファイル)を使用してから、メインのBerkeleyDBストアに書き込みます。これにより、(遅い)BerkeleyDB書き込みの数が減りました。たとえば、各サブバッチは、「the」という単語に対して1回の書き込みのみを必要とします。

于 2012-06-23T14:48:12.687 に答える
0

Pickleモジュールを使用すると、Pythonオブジェクト構造をシリアル化できるため、後で逆シリアル化して使用できます。詳細については、ドキュメントを確認してくださいhttp://docs.python.org/library/pickle.html

NLTKのNgramModelは、バージョン<= 2.0.1rc2でシリアル化可能でした(または、まだそうかもしれませんが、さらに調査するのに非常に忙しかったです。基本的に、ピクルスにするときは、低いPROTOCOL_NUMBERを使用する必要があります。確認できます。この(かなり厄介な)コードは、私がどのように実行したかを確認するためのものです。

https://github.com/starenka/laholator/blob/master/laholator.py#L118

https://github.com/starenka/laholator/blob/master/laholator.py#L19

(スクリプトは、テキストサンプルに基づいてランダムなテキストを生成するカップルサイトを強化します。これをFe http://kaluzator.starenka.net/

幸運を

于 2012-06-22T21:54:37.450 に答える
0

モデルのトレーニングは確かに一度行う必要があり、複数回使用するために保存する必要があります。Pickleは適切なツールですが、なぜそれが機能しないのか誰が知っていますか?グーグルは、 ngramのピクルスにいくつかの問題があったと言いますが、それらは何年も前に修正されました。試してみるか、最小限の例を作成してください。それでも機能しない場合は、ここに投稿してください。

于 2012-07-01T16:47:49.793 に答える