Как обучить Ngram модель на моем собственном корпусе - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть список строк:

corpus = ["Hello I am Sam", "This is a white desk","I ate cereals", ...]

Я хочу построить модель языка (желательно с использованием nltk) на этом корпусе, чтобы получить вероятность слова в предложении.Итак, в дальнейшем я буду использовать

P ("Сэм" | "Я есть")

в этом корпусе.Я не мог найти - какой лучший способ сделать это?Как обучить модель ngram, а затем получить такие вероятности?

Спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

Я бы порекомендовал использовать цепи Маркова https://en.wikipedia.org/wiki/Markov_chain

Очень банальный пример для вашей справки.

Предположим, что вы собираетесь анализировать 1-грамм.

Проанализированные тексты:

monkey eats banana

dog eats bone

униграммы: monkey, eats, banana, dog, bone, BEGIN, END.

Каждое предложение начинается с начала.

Возможны два перехода:

BEGIN->monkey

BEGIN->dog

Это означает, что существует 50% вероятность того, что предложение начнется с monkey.

Теперь после monkey есть 100% шанс перехода monkey->eats (потому что не было никакого другого monkey->* переходав проанализированных текстах.

Теперь после eats есть 50% шанс banana и 50% шанс bone.

Так что в целом с этой моделью мы можем генерировать следующие предложения:

monkey eats banana
monkey eats bone
dog eats bone
dog eats banana

каждый из них должен получить 25%

Обратите внимание, что кость и банан всегда переходят в END

С диграммами вы просто разделите его наmonkey eats -> banana END

Это просто упрощенная общая картина, надеюсь, это поможет

Редактировать

Что касается сглаживания, упомянутого в комментарии, используйте Лаплас.

Предположим, что вы видели каждое слово на единицу больше, чем мы на самом деле.

Так, например, теперь у нас будет:

eats bone (2)
eats banana (2)
eats chocolate (1)
eats dog (1)

Конечно, в этом случае мы имеемочень маленький набор данных, но для большего набора данных вы получите что-то вроде:

eats bone (104)
eats banana (1031)
eats chocolate (1)
eats dog (3)
...
...