在 nltk 语言模型中定义和使用新的平滑方法

Define and Use new smoothing method in nltk language models

我正在尝试为语言模型提供和测试新的平滑方法。我正在使用 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)

Here,可以看到MLE的定义。如您所见,没有平滑功能的选项(但同一个文件中还有其他功能,可能其中一些符合您的需求?)。

InterpolatedLanguageModel(参见上面的同一文件)确实接受平滑 classifier 需要实现 alpha_gamma(word, context) 和 unigram_score(word) 并且是一个子class 平滑度:

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

因此,如果您确实需要向 MLE 添加功能 class,您可以这样做,但我不确定这是否是个好主意:

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