Поезд NGramModel в Python

Я использую Python 3.5, установленный и управляемый с помощью Anaconda. Я хочу подготовить NGramModel (из nltk), используя некоторый текст. Моя установка не находит модуль nltk.model

Есть несколько возможных ответов на этот вопрос (выберите правильный вариант и объясните, как это сделать):

  1. Другая версия nltk может быть установлена ​​с помощью conda, так что она содержит модуль модели. Это не только более старая версия (она должна быть слишком старой), но и другая версия, содержащая ветвь модели (или model2) текущей разработки nltk.
  2. Версия nltk, упомянутая в предыдущей точке, не может быть установлена ​​с использованием conda, но может быть установлена ​​с помощью pip.
  3. nltk.model устарел, лучше использовать другой пакет (объясните, какой пакет)
  4. есть лучшие варианты, чем nltk для обучения модели ngram, использование какой-либо другой библиотеки (объясните, в какой библиотеке)
  5. ни один из вышеперечисленных, для обучения модели ngram лучший вариант – это что-то другое (объясните, что).

One Solution collect form web for “Поезд NGramModel в Python”

Прежде всего, как было указано в комментариях к вашему вопросу, если для вас проблема с обучением / бегом, KenLM, вероятно, лучший выбор. На данный момент nltk.model в первую очередь предназначен для образовательных / прототипических целей, это не так быстро.

Если вы все еще решите придерживаться NLTK, читайте дальше. Я NgramModel автором нового кода NgramModel в ветке model и я попытаюсь прояснить ситуацию, чтобы вы могли протестировать код и сообщить мне, что вы думаете. Нам пришлось перестроить модуль в течение большого времени из- за множества критических ошибок в старой реализации, и мы все еще настраиваем новую настройку.

Предполагаемое использование обновленного модуля в настоящее время описано в этом файле doctest . При этом я быстро перейду к основным изменениям в рабочем процессе, так как он значительно отличается от старого. Если вам интересно, как мы пришли к новому рабочему процессу, посмотрите эту тему .

Самое главное помнить, что обучение модели ngram теперь четко разделено на следующие 3 шага.

1. Построение словаря

Некоторые из самых раздражающих ошибок в старой реализации произошли, когда модель ngram столкнулась с словами, которые она не наблюдала во время обучения. Обычным способом борьбы с этим является создание словаря «известных» токенов (слов), прежде чем начинать обучение.

Когда вы тренируете свою модель ngram, вы просматриваете токены в словаре и увеличиваете их количество, если они присутствуют, в противном случае увеличивайте счетчик для специального токена UNKNOWN . Идея состоит в том, что если вы сталкиваетесь с невидимым токеном во время тестирования, вы можете использовать подсчеты из UNKNOWN для оценки его оценки.

Этот словарь может быть создан из данных, отличных от того, с которым вы тренируетесь. Например, ваш словарный запас может исходить из корпуса Gigaword, но вы тренируете свою модель только в Wall Street Journal.

Для этого используйте функцию nltk.model.build_vocabulary .

2. Обучение = подсчет Nграмм

Вы когда-нибудь задумывались над тем, что на самом деле происходит, когда вы «тренируете» модель ngram? По сути, обучение модели действительно сводится к простому подсчету ngrams в тексте. Конечно, это также включает разбиение текста на ngrams и проверку токенов против словаря, созданного вами на предыдущем шаге.

Соответствующая функция nltk.model.count_ngrams является вашим другом, когда дело доходит до этой задачи. Он возвращает экземпляр класса NgramCounter который пытается предоставить четкий интерфейс для доступа / обновления счетчиков ngram.

3. От графов до баллов (ОБНОВЛЕНО)

Это конечная цель всего процесса, чтобы получить что-то вроде вероятности для токена в каком-то контексте.

Эта часть модуля все еще находится в процессе разработки, сейчас она приходит только с оценками MLE , Lidstone и Laplace . Их использование кратко описано в файле doctest.

Если вы хотите использовать другую оценку, вам придется написать свой собственный класс. Однако я попытался сделать это очень легко. Кроме того, вы можете отправить свою работу в NLTK и стать автором!

Вот как вы бы определили свою собственную оценку:

  1. Создайте класс, который наследуется от BaseNgramModel .
  2. В этом классе реализуется собственный метод score который использует атрибут ngram_counts для доступа к подсчетам.

Не стесняйтесь получать вдохновение от моделей, уже определенных в ngram.py . И вот пример реализации базовой оценки MLE:

 from nltk.model import BaseNgramModel class MLENgramModel(BaseNgramModel): def score(self, context, word): # how many times word occurs with context ngram_count = self.ngrams[context][word] # how many times the context itself occurred we take advantage of # the fact that self.ngram[context] is a FreqDist and has a method # FreqDist.N() which counts all the samples in it. context_count = self.ngram[context].N() # In case context_count is 0 we shouldn't be dividing by it # and just return 0 if context_count == 0: return 0 # otherwise we can return the standard MLE score return ngram_count / context_count 
  • Почему virtualenv эффективно отключает заполнение вкладки Python 3?
  • cx_Freeze ImportError: невозможно импортировать имя
  • Подкладка Pip
  • изменить класс __dict__ (mappingproxy) в python
  • Python. Параметры и возвращаемые значения
  • Преобразование строки в список бит и наоборот
  • Округление Python3 до ближайшего четного
  • Как напечатать возвращаемое значение метода в Python?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.