2012-09-12 78 views
2

這是我在stackoverflow上的第一個問題,請耐心等待。NLTK最大熵分類器原始分數

我正在做一些語料庫建設,特別是試圖撰寫高棉語/英語平行句子語料庫。我使用一些手動配對的句子來訓練最大熵分類器,它將從我的平行文檔語料庫中選擇更多的平行句對。

我的問題是,我有非常少的人力註釋培訓數據,用它來訓練分類器。因此,它不是一個很好的分類器。因此,我的老師建議我查看MaxEnt分類器原始分數,看看是否存在某個分數閾值,高於這個分數閾值時,人類判斷髮現被歸類爲翻譯的句子對實際上是彼此的翻譯。

但是,我正在使用NLTK的MaxEnt分類器,我找不到一個函數,它會給我分類器用來決定是還是不是的原始分數。

NLTK的MaxEnt分類器是否具有此功能,或者沒有辦法找出分類器原始分數?是否有一個包含更好的MaxEnt分類器的軟件包,可以爲您提供我應該使用的原始分數?

在此先感謝您的幫助和建議!

回答

4

prob_classify給出概率分數。

如果你正在尋找一種替代最大墒分類,然後scikit學習有兩種實現它(one based on liblinearone using SGD training),這兩者都可以被包裹在一個NLTK SklearnClassifier。 scikit-learn將MaxEnt邏輯迴歸稱爲NLP社區之外更常見的術語。

(我可能有偏差,因爲我是一個scikit學習貢獻者和我寫SklearnClassifier,但現在人們SciPy的也推薦scikit學習的,而不是自己的棄用scipy.maxentropy包,在其MaxentClassifier爲基礎的。)

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。

只要通過你喜歡的任何句子,比如「我愛蘋果產品」。並且它會報告MaxEnt分類器爲什麼選擇該命名實體的原因。它還會報告可能被選中的其他標籤的一些概率。

NLTK的開發者提供了一個.explain()方法,這正是這個函數使用的。