2012-05-08 66 views

回答

0

看起來像一個值,告訴你引擎是如何確定它猜對了文檔的正確語言。我認爲一般來說數字越接近0,它就越確定,但是你應該能夠通過混合語言並將它們傳入來看看你得到什麼值來測試它。它允許您在使用langid時根據您認爲「足夠接近」來計算匹配情況來微調您的程序。

4

我認爲這是langid.py代碼的重要大塊:

def nb_classify(fv): 
    # compute the log-factorial of each element of the vector 
    logfv = logfac(fv).astype(float) 
    # compute the probability of the document given each class 
    pdc = np.dot(fv,nb_ptc) - logfv.sum() 
    # compute the probability of the document in each class 
    pd = pdc + nb_pc 
    # select the most likely class 
    cl = np.argmax(pd) 
    # turn the pd into a probability distribution 
    pd /= pd.sum() 
    return cl, pd[cl] 

在我看來,作者的計算類似數據的multinomial數後爲每個可能的語言。 logfv計算PMF分母的對數(x_1!...x_k!)。 np.dot(fv,nb_ptc)計算p_1^x_1...p_k^x_k術語的 對數。因此,pdc看起來像語言條件對數似然的列表(除了它缺少n!的術語)。 nb_pc看起來像先前的概率,所以pd將是後記。歸一化線pd /= pd.sum()讓我感到困惑,因爲人們通常會將類似概率的值(不是對數概率值)歸一化;此外,文檔中的示例(('en', -55.106250761034801))看起來並不像它們已經正常化 - 也許它們是在添加標準化行之前生成的?

無論如何,簡短的回答是,這個值,pd[cl]是一個信心分數。基於當前代碼的我的理解是,它們應該是0到1/97之間的值(因爲有97種語言),較小的值表示較高的置信度。

3

我其實是langid.py的作者。不幸的是,我剛剛發現這個問題,差不多一年後才被問到。自從問這個問題以來,我已經整理了正常化的處理過程,因此所有README示例都已更新,以顯示實際可能性。

您在那裏看到的值(並且您仍然可以通過關閉歸一化來獲得)是文檔的非歸一化對數概率。因爲log/exp是單調的,所以我們實際上並不需要計算決定最可能類的概率。這個log-prob的實際值實際上對用戶沒有任何用處。我應該從未包含它,我可能會在未來刪除它的輸出。

相關問題