[英]Statistical sentence suggestion model like spell checking
已經有拼寫檢查模型,可以幫助我們根據經過訓練的正確拼寫語料庫找到建議的正確拼寫。 可以將粒度從字母增加到“單詞”,以便我們甚至可以提供短語建議,這樣,如果輸入了錯誤的短語,那么它應該建議正確短語語料中最接近的正確短語,當然,它是從有效短語列表。
是否有任何已經實現此功能的python庫,或如何針對現有的大型金標准短語語料庫進行此操作以獲取統計上相關的建議?
注意:這與拼寫檢查器不同,因為拼寫檢查器中的字母是有限的,而短語校正器中的字母本身是一個單詞,因此從理論上講是無限的,但是我們可以限制短語庫中單詞的數量。
您要構建的是一個N元語法模型,該模型包含計算每個單詞遵循n個單詞序列的概率。
您可以使用NLTK文本語料庫來訓練模型,也可以使用nltk.sent_tokenize(text)
和nltk.word_tokenize(sentence)
標記您自己的語料庫。
您可以考慮2克(馬爾可夫模型):
“小貓”跟隨“可愛”的可能性是多少?
...或3克:
“小貓”跟隨“可愛”的可能性是多少?
等等
顯然,使用n + 1-gram訓練模型比使用n-gram花費更高。
除了考慮單詞以外,您還可以考慮一對(word, pos)
,其中pos
是詞性標簽(可以使用nltk.pos_tag(tokens)
獲得標簽)
您也可以嘗試考慮引理而不是單詞。
以下是有關N-gram建模的一些有趣的講座:
這是一個未經優化的簡單代碼示例(2克):
from collections import defaultdict
import nltk
import math
ngram = defaultdict(lambda: defaultdict(int))
corpus = "The cat is cute. He jumps and he is happy."
for sentence in nltk.sent_tokenize(corpus):
tokens = map(str.lower, nltk.word_tokenize(sentence))
for token, next_token in zip(tokens, tokens[1:]):
ngram[token][next_token] += 1
for token in ngram:
total = math.log10(sum(ngram[token].values()))
ngram[token] = {nxt: math.log10(v) - total for nxt, v in ngram[token].items()}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.