Определите и используйте новый метод сглаживания в языковых моделях nltk - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь предоставить и протестировать новый метод сглаживания для языковых моделей. Я использую инструменты nltk и не хочу переопределять все с нуля. Так есть ли способ определить и использовать мой собственный метод сглаживания в моделях nltk?

Редактировать: я пытаюсь сделать что-то вроде этого:

def my_smoothing_method(model) :
    # some code using model (MLE) count

model = nltk.lm.MLE(n, smoothing_method=my_smoothing_method)
model.fit(train)

1 Ответ

0 голосов
/ 30 марта 2020

Здесь , вы можете увидеть определение MLE. Как видите, функции сглаживания не существует (но в этом же файле есть и другие, возможно, некоторые из них соответствуют вашим потребностям?).

InterpolatedLanguageModel (см. Тот же файл выше) принимает классификатор сглаживания, который должен реализовывать alpha_gamma (слово, контекст) и unigram_score (слово) и быть подклассом сглаживания:

model = nltk.lm.InterpolatedLanguageModel(smoothing_cls=my_smoothing_method, order)

Так что если вам действительно нужно добавить функциональность в класс MLE, вы можете сделать что-то так, но я не уверен, что это хорошая идея:

class MLE_with_smoothing(LanguageModel):
"""Class for providing MLE ngram model scores.
Inherits initialization from BaseNgramModel.
"""

def unmasked_score(self, word, context=None):
    """Returns the MLE score for a word given a context.
    Args:
    - word is expcected to be a string
    - context is expected to be something reasonably convertible to a tuple
    """
    freq = self.context_counts(context).freq(word)
    #Do some smothing 
    return 
...