2

これはstackoverflowに関する私の最初の質問ですので、ご容赦ください。

私はいくつかのコーパス構築を行っています。具体的には、クメール語/英語の対訳コーパスを作成しようとしています。いくつかの手動でペアになった文を使用して最大エントロピー分類器をトレーニングしています。これにより、並列ドキュメント コーパスからより多くの並列文ペアが選択されます。

私の問題は、分類子をトレーニングするための人間の注釈付きトレーニング データがほとんどないことです。したがって、これはあまり優れた分類器ではありません。そのため、私の先生は、MaxEnt 分類器の生スコアを見て、翻訳として分類された文のペアが実際には相互の翻訳であると人間の判断が判断できるスコアしきい値があるかどうかを確認することを提案しました。

しかし、私は NLTK の MaxEnt 分類子を使用していますが、分類子が yes または no を決定するために使用した生のスコアを提供する関数が見つかりません。

NLTK の MaxEnt 分類子にはこの機能がありますか、それとも分類子の生のスコアを調べる方法はありませんか? 私が使用すべき生のスコアを提供する、より優れた MaxEnt 分類器を備えたパッケージはありますか?

助けと提案を前もってありがとう!!

4

2 に答える 2

4

prob_classify確率スコアを与えます。

代替の MaxEnt 分類子を探している場合、scikit-learn には 2 つの実装があり ( 1 つは liblinearに基づいており、もう 1 つは SGD training を使用しています)、どちらも NLTK でラップできますSklearnClassifier。scikit-learn は MaxEnt ロジスティック回帰を呼び出します。これは、NLP コミュニティ以外ではより一般的な用語です。

(私は scikit-learn の寄稿者であり、私が書いたので偏見があるかもしれませんSklearnClassifierが、SciPy 関係者は現在、独自の非推奨scipy.maxentropyパッケージの代わりに scikit-learn を推奨していますMaxentClassifier。)

于 2012-09-12T13:26:31.223 に答える
0

あなたは私の最近のブログを読むことに興味があるかもしれません:

http://mattshomepage.com/#/blog/feb2013/liftingthehood

nltk.ne_chunk 関数がどのように機能するかを理解することです。しかし、ここに私が書いたコードをいくつか示します。すぐにコピーして貼り付けることができ、役立つかもしれません。

import nltk

# Loads the serialized NEChunkParser object
chunker = nltk.data.load('chunkers/maxent_ne_chunker/english_ace_multiclass.pickle')

# The MaxEnt classifier
maxEnt = chunker._tagger.classifier()

def ne_report(sentence, report_all=False):

    # Convert the sentence into a tokens with their POS tags
    tokens = nltk.word_tokenize(sentence)
    tokens = nltk.pos_tag(tokens)

    tags = []
    for i in range(0, len(tokens)):
        featureset = chunker._tagger.feature_detector(tokens, i, tags)
        tag = chunker._tagger.choose_tag(tokens, i, tags)
        if tag != 'O' or report_all:
            print '\nExplanation on the why the word \'' + tokens[i][0] + '\' was tagged:'
            featureset = chunker._tagger.feature_detector(tokens, i, tags)
            maxEnt.explain(featureset)
        tags.append(tag) 

report_all フラグを使用すると、すべての単語がどのように選択されたかを表示できますが、名前付きエンティティがどのように選択されたかだけに関心がある可能性があります。デフォルトでは False に設定されています。

「I love Apple products」など、好きな文を入力してください。そして、その名前付きエンティティが MaxEnt 分類子によって選択された理由の説明を報告します。また、選択された可能性のある他のタグの確率の一部も報告されます。

NLTK の開発者は .explain() メソッドを提供しましたが、それはまさにこの関数が使用するものです。

于 2013-02-13T21:53:45.780 に答える