基於SRILM的ARPA的n-gram語言模型格式


 

\data\

ngram 1=10

ngram 2=20

ngram 3=30

 

\1-grams:

-2.522091   啊  -0.4599362

-3.616682   阿  -0.2710813

-5.888154   阿壩

-5.483542   阿布    -0.02341532

-5.513821   阿迪達斯    -0.08972257

-5.357502   阿哥

-5.619849   阿膠

-5.003489   阿拉    -0.0459251

-5.11305    阿拉伯  -0.1348525

-5.11305    阿拉伯數字  -0.153861

 

\2-grams:

-2.841684   阿 楠

-1.279527   阿布 賈

-0.7184195  阿迪達斯 </s>

-1.628645   阿拉 阿拉

-1.628414   阿拉 蕾

-1.272437   阿拉 善

-1.37447    阿拉伯 貴族

-1.122427   阿拉伯 人

-1.373596   阿拉伯 數

-0.9671616  阿拉伯 語

 

\3-grams:

-0.7579774  啊 啊 </s>

-0.3643477  啊 啊 啊

-1.625012   啊 啊 對

-1.826232   啊 啊 行

-0.1952119  愛 啊 </s>

-0.1937787  安排 啊 </s>

-0.2185729  安全 啊 </s>

-0.1328749  安裝 啊 </s>

-0.3589647  吧 啊 </s>

-1.99777    吧 啊 拜拜

 

*上面的值都是以10為底的對數值(詞組前面的數字:概率,詞組后面的數據,回退權值)

 

 

計算一個句子在該ARPA中的概率如下(3gram為例):

# Make sure the OOVs change to <unk>

#P(word3| word1, word2):

#   if has (word3| word1, word2){

#       return P(word3| word1, word2);

#   }else if has (word2| word1){

#       return backOff(word2| word1) * P(word3| word2);

#   }else{

#       return P(word3| word2);

#   }

#P(word2 | word1):

#   if has (word2| word1){

#       return P(word2| word1);

#   }else{

#       return backOff(word1) * P(word2);

#   }

 

python 實現

 

def wordsProbs(words, dict):

    wordArr = words.split(" ")

    if len(wordArr) == 3:

        if dict.has_key(words):

            return dict.get(words).prob

        elif dict.has_key(wordArr[0] + " " + wordArr[1]):

            return dict.get(wordArr[0] + " " + wordArr[1]).backoff + wordsProbs(wordArr[1] + " " + wordArr[2], dict)

        else:

            return wordsProbs(wordArr[1] + " " + wordArr[2], dict)

    elif len(wordArr) == 2:

        if dict.has_key(wordArr[0] + " " + wordArr[1]):

            return dict.get(wordArr[0] + " " + wordArr[1]).prob

        else:

            return dict.get(wordArr[0]).backoff + wordsProbs(wordArr[1], dict) #make sure OOV change to <unk>,or error

    else:

        return dict.get(wordArr[0]).prob #make sure OOV change to <unk>,or error

 

*通過以上獲取的是logP(3gramWords),probs = 10 ^ logP(3gramWords),probs即是3gramWords的最終概率值

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM