4

現在、MALLET パッケージの LDA トピック モデリング ツールを使用して、ドキュメントのトピック検出を行っています。最初はすべて順調で、そこから 20 のトピックを取得しました。ただし、モデルを使用して新しいドキュメントを推測しようとすると、結果はちょっと不可解です。

たとえば、トピック「FLU」の 1 つからのキーワードのみを含む手動で作成したドキュメントに対して意図的にモデルを実行しましたが、取得したトピック分布はすべてのトピックで <0.1 でした。次に、トピックの 1 つで 0.7 の高いスコアを持つ既にサンプリングされたドキュメントの 1 つで同じことを試します。再び同じことが起こりました。

誰かが理由について手がかりを与えることができますか?

MALLET メーリング リストで質問してみましたが、どうやら誰も返信がありません。

4

4 に答える 4

2

私はマレットと同じ難しさを持っていました。後で、トレーニング ドキュメントの読み込みに使用されていたパイプを介してドキュメントを読み込まなければならないことが問題であることがわかりました。

トレーニング ドキュメントで読み取るサンプルは次のとおりです。

ImportExample importerTrain = new ImportExample();//this is an example class in MALLET to import docs.   
InstanceList training= importer.readDirectory(new File(trainingDir));
training.save(new File(outputFile));

トピック推論でドキュメントを読みながら:

InstanceList training = InstanceList.load(new File(outputFile));
Pipe pipe = training.getPipe();
ImportExample importer = new ImportExample();
importer.pipe = pipe; //use the same pipe
InstanceList testing = importer.readDirectory(new File(testDir));

アーカイブに投稿された 1 つの質問からヒントを得ました: http://thread.gmane.org/gmane.comp.ai.mallet.devel/829

于 2011-09-01T22:24:42.670 に答える
2

私もMALLETについてほとんど知りませんが、ドキュメントではこれについて言及しています...

トピックの推論

--inferencer-filename [ファイル名] 現在のトレーニング済みモデルに基づいてトピック推論ツールを作成します。MALLET コマンド bin/mallet infer-topics --help を使用して、トピック推論の使用に関する情報を取得します。

新しいデータがトレーニング データと互換性があることを確認する必要があることに注意してください。トレーニング ファイルを指定するには、MALLET コマンドの bin/mallet import-file または import-dir でオプション --use-pipe-from [MALLET TRAINING FILE] を使用します。

もしかして、これをするのを忘れていませんか?トレーニングしているデータが、テストしているデータと同じ形式ではないように思えます。

于 2010-12-07T10:10:53.143 に答える
1

開示: 私は、トピックの推論に一般的に使用される手法と数学に精通していますが、MALLET に触れることはほとんどありません。
これらの半ば知識に基づいた推測が解決策につながることを願っています。無保証 ;-)

モデルのトレーニングにmallet コマンドhldaを使用していると仮定しています。
うまくいかなかったかもしれないいくつかのこと:

  • プロセスのインポート段階で--keep-sequence オプションを使用したことを確認してください。デフォルトでは、 mallet は入力を単純なBag of Wordsとして保存し、単語が最初に見つかった順序を失います。これは、基本的な分類タスクには問題ありませんが、トピック モデリングには問題ありません。
  • mallet で使用される Gibbs サンプリングは確率過程であることを思い出してください。特に小さなサンプルでは変動が予想されます。テスト中に、反復ごとに同じ乱数シードを指定して保証することができます。
  • トレーニング データのサイズは? 20 のトピックは、通常、手動で作成された、および/または迅速に組み立てられた小規模なトレーニングおよびテスト セットに基づく初期テストには多くのようです。
  • トピックの推論は、孤立したキーワードではなく、一連の単語に基づいていることに注意してください (手動で作成されたテスト ドキュメントの説明では、「表現」や「フレーズ」ではなく「キーワード」が言及されています)。
于 2010-12-07T09:05:18.453 に答える
0

MALLET を使用して新しいドキュメントのトピック分布を推測する方法を次に示します。これを行う方法を探していたので投稿すると思いましたが、多くの回答がありますが、どれも包括的ではありません. これにはトレーニング手順も含まれているため、さまざまなファイルが互いにどのように接続されているかがわかります。

トレーニング データを作成します。

$BIN_DIR/mallet import-file --input $DIRECTORY/data.input --output $DIRECTORY/data.mallet --keep-sequence --token-regex '\w+'

data.input、ファイル ID、ラベル、および一連のトークンまたはトークン ID を含むドキュメントです。次に、好きなパラメーターを使用して、このデータでモデルをトレーニングします。例えば:

$BIN_DIR/mallet train-topics --input $DIRECTORY/data.mallet \
      --num-topics $TOPICS --output-state $DIRECTORY/topic-state.gz \
      --output-doc-topics $DIRECTORY/doc-topics.gz \
      --output-topic-keys $DIRECTORY/topic-words.gz --num-top-words 500 \
      --num-iterations 1000

後で、トレーニング済みのモデルとトレーニング データを使用して推論を作成できます。

bin/mallet train-topics --input $DIRECTORY/data.mallet --num-topics NUMBER --input-state $DIRECTORY/topic-state.gz --no-inference --inferencer-filename $DIRECTORY/inferencer-model

次に、トレーニング データからパイプを使用して新しいドキュメントのファイルを作成します。

bin/mallet import-file --input $DIRECTORY/new_data.input --output $DIRECTORY/new_data.mallet --use-pipe-from $DIRECTORY/data.mallet --keep-sequence --token-regex '\w+'

新しいドキュメントのトピックを推測する:

bin/mallet infer-topics --inferencer $DIRECTORY/inferencer-model --input $DIRECTORY/new_data.mallet --output-doc-topics $DIRECTORY/new_data_doc_topics --num-iterations 1000
于 2021-03-02T19:38:36.050 に答える