python训练词库_在Python中训练NGramModel
首先,正如您對問題的評論中所指出的,如果培訓/運行速度對您來說是一個問題,KenLM可能是更好的選擇.此時nltk.model主要用于教育/原型設計,但它并不快.
如果您仍然決定堅持使用NLTK,請繼續閱讀.我碰巧是模型分支中新的NgramModel代碼的作者,我會嘗試清楚地說明你可以測試代碼并讓我知道你的想法.由于舊的實現中的a lot of critical bugs,我們不得不對模塊進行大修,我們仍在調整新的設置.
目前在this doctest file中描述了改進模塊的預期用途.盡管如此,我將快速回顧工作流程的主要更改,因為它與舊版本有很大不同.
如果您對我們如何提出新工作流程感興趣,請參閱this thread.
最重要的是要記住,訓練ngram模型現在明確分為以下3個步驟.
1.建立詞匯
當ngram模型遇到訓練期間沒有看到的單詞時,舊實現中出現了一些最煩人的錯誤.解決這個問題的傳統方法是在開始訓練之前創建一個“已知”標記(單詞)詞匯表.
當你訓練你的ngram模型時,你在詞匯表中查找標記并在它們存在時增加它們的計數,否則增加計數器以獲得特殊的UNKNOWN標記.我們的想法是,如果您在測試期間遇到看不見的令牌,您可以使用UNKNOWN的計數來估算其得分.
可以使用您訓練的數據以外的數據創建此詞匯表.例如,你的詞匯可能來自Gigaword語料庫,但你只訓練你的模型華爾街日報.
使用nltk.model.build_vocabulary函數.
2.訓練=計算Ngrams
你有沒有想過當你“訓練”一個ngram模型時究竟發生了什么?從本質上講,培訓模型實際上歸結為簡單地計算文本中的ngrams.當然,這還涉及將文本分解為ngrams并根據您在上一步中創建的詞匯檢查令牌.
適當命名的nltk.model.count_ngrams函數在您完成此任務時是您的朋友.它返回NgramCounter類的一個實例,它試圖提供一個清晰的接口來訪問/更新ngram計數.
3.從計數到分數(更新)
這是整個過程的最終目標,在給定某些上下文的情況下獲得類似于令牌的概率.
這部分模塊仍在進行中,現在只有MLE,Lidstone和Laplace估算器. doctest文件中簡要介紹了它們的用法.
如果你想使用不同的估算器,你必須為它編寫自己的類.但是,我試圖讓它變得非常容易.此外,您可以將您的作品提交給NLTK并成為貢獻者!
以下是您定義自己的估算器的方法:
>創建一個繼承自BaseNgramModel的類.
>在此類中實現您自己的score方法,該方法使用ngram_counts屬性來訪問計數.
隨意從ngram.py中已定義的模型中獲取靈感.
這是基本MLE評分的示例實現:
from nltk.model import BaseNgramModel
class MLENgramModel(BaseNgramModel):
def score(self, context, word):
# how many times word occurs with context
ngram_count = self.ngrams[context][word]
# how many times the context itself occurred we take advantage of
# the fact that self.ngram[context] is a FreqDist and has a method
# FreqDist.N() which counts all the samples in it.
context_count = self.ngram[context].N()
# In case context_count is 0 we shouldn't be dividing by it
# and just return 0
if context_count == 0:
return 0
# otherwise we can return the standard MLE score
return ngram_count / context_count
總結
以上是生活随笔為你收集整理的python训练词库_在Python中训练NGramModel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为K50让路!超大杯K40 Pro+到手
- 下一篇: 全国普及电子驾照!电子驾驶证申领全攻略