Предоставляет ли nltk или любой другой инструмент NLP построение деревьев вероятности на основе входных предложений, таким образом сохраняя языковую модель входного текста в дереве словаря, следующий пример дает мне приблизительную идею, но мне нужна такая же функциональность, что слово Wt не просто вероятностно смоделировано по прошлым входным словам (истории) Wt-n, но также и в виде таких слов, как Wt + m. Кроме того, счетчик обратного и ожидаемого слов также должен быть 2 или более, т.е. Bigrams или больше. Есть ли другие библиотеки на python, которые достигают этого?
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()}
решение требует как lookahead, так и backback, а специально подобранный словарь может помочь в решении этой проблемы. Можно также указать на соответствующие ресурсы, которые говорят о внедрении такой системы. Похоже, что nltk.models делает что-то подобное, но больше не доступно. Существуют ли какие-либо существующие шаблоны проектирования в НЛП, которые реализуют эту идею? пропущенные граммовые модели похожи на эту идею, но я считаю, что это должно было быть реализовано уже где-то.