Как я могу использовать «Интерполированное абсолютное дисконтирование» для биграмной модели в языковом моделировании? - PullRequest
0 голосов
/ 01 марта 2019

Я хочу сравнить два метода сглаживания для модели биграмм:

  • Сглаживание с доплатой
  • Интерполированное абсолютное дисконтирование

Для первого методаЯ нашел несколько кодов.

def calculate_bigram_probabilty(self, previous_word, word):
    bigram_word_probability_numerator = self.bigram_frequencies.get((previous_word, word), 0)
    bigram_word_probability_denominator = self.unigram_frequencies.get(previous_word, 0)
    if self.smoothing:
        bigram_word_probability_numerator += 1
        bigram_word_probability_denominator += self.unique__bigram_words
    return 0.0 if bigram_word_probability_numerator == 0 or bigram_word_probability_denominator == 0 else float(
        bigram_word_probability_numerator) / float(bigram_word_probability_denominator)

Однако я ничего не нашел для второго метода, за исключением некоторых ссылок на KneserNeyProbDist.Однако это для триграмм!

Как я могу изменить свой код выше, чтобы рассчитать его?Параметры этого метода должны быть оценены из набора разработки.

1 Ответ

0 голосов
/ 31 марта 2019

В этом ответе я просто проясняю несколько вещей, которые я только что нашел о вашей проблеме, но я не могу предоставить кодовое решение.

  • с KneserNeyProbDist вы, похоже, ссылаетесь наРеализация этой проблемы на python: https://kite.com/python/docs/nltk.probability.KneserNeyProbDist
  • Существует статья о сглаживании Кнезера – Нея в Википедии: https://en.wikipedia.org/wiki/Kneser%E2%80%93Ney_smoothing
  • В приведенной выше статье есть ссылки на этот учебник: https://nlp.stanford.edu/~wcmac/papers/20050421-smoothing-tutorial.pdf но это имеет небольшую ошибку на самой важной странице 29, открытый текст таков:

    Модифицированный Кнезер-Ней
    Чен и Гудман представили modified Kneser-Ney:

    • Вместо отката используется интерполяция.Используется отдельная скидка для одного и двух счетов вместо единой скидки для всех счетов.Оценивает скидки на удерживаемые данные вместо использования формулы, основанной на количестве тренировок.
    • Эксперименты показывают, что все три модификации улучшают производительность.
    • Модифицированный Кнезер-Ней неизменно демонстрировал наилучшие показатели.

    К сожалению, измененная версия не объясняется в этом документе.

  • К счастью, имеется оригинальная документация Чена и Гудмана, объяснение Modified Kneser–Ney smoothing приведено на странице 370 этогодокумент: http://u.cs.biu.ac.il/~yogo/courses/mt2013/papers/chen-goodman-99.pdf.
    Я копирую самый важный текст и формулу в виде скриншота: enter image description here

Итак, Modified Kneser–Ney smoothing теперь известен и, кажется, являетсяЛучшее решение, просто перевести описание рядом с формулой в работающий код - это еще один шаг.Может быть полезно, что ниже показанного текста (выше на скриншоте) в исходном связанном документе все еще есть какое-то объяснение, которое может помочь понять необработанное описание.

...