2016-04-21 7 views
3

Я строю модель языка в R, чтобы предсказать следующее слово в предложении, основанное на предыдущих словах. В настоящее время моя модель представляет собой простую модель ngram с сглаживанием Kneser-Ney. Он предсказывает следующее слово, найдя ngram с максимальной вероятностью (частотой) в обучающем наборе, где сглаживание предлагает способ интерполировать ngrams более низкого порядка, что может быть выгодным в случаях, когда ngrams более высокого порядка имеют низкую частоту и могут не предлагать надежного предсказания , Хотя этот метод работает достаточно хорошо, он «не работает» в тех случаях, когда n-грамм не может захватить контекст. Например, «Тепло и солнечно снаружи, пойдем к ...» и «Холодно и идет дождь, пойдем к ...» предложит такое же предсказание, потому что контекст погоды не захвачен в последнем n-грамме (при условии, что n < 5).Прогнозирование следующего слова text2vec в R

Я изучаю более сложные методы, и я нашел text2vec пакет, который позволяет сопоставлять слова в векторное пространство, где слова с похожим значением представлены схожими (близкими) векторами. У меня такое ощущение, что это представление может быть полезно для следующего предсказания слова, но я не могу понять, как именно определить задачу обучения. Мой quesiton - это то, что text2vec - это правильный инструмент для использования для следующего предсказания слова, и если да, то каков подходящий алгоритм прогнозирования, который можно использовать для этой задачи?

ответ

1

Ваша интуиция прав, что векторы встраивания слов могут использоваться для улучшения языковых моделей путем включения междугородних зависимостей. Алгоритм, который вы ищете, называется RNNLM (модель рекуррентной нейронной сети). http://www.rnnlm.org/

+0

Знаете ли вы, существует ли реализация R для RNNLM? – Sasha

+0

Наверное, не было бы моей догадки. – Aaron

6

Вы можете попробовать char-rnn или word-rnn (google немного). Для реализации модели R/mxnet на уровне персонажа обратите внимание на mxnet examples. Вероятно, этот код можно распространить на текстовую модель, используя вставки text2vec GloVe.

Если у вас будут какие-либо успехи, сообщите нам (я имею в виду разработчиков text2vec или/и mxnet). Я буду очень интересным для сообщества R. Я хотел выполнить такую ​​модель/эксперимент, но у меня еще нет времени.

2

Существует одно реализованное решение в качестве полного примера использования словосочетаний. Фактически, статья Макаренкова и др. (2017) под названием «Модели языка с предварительным обучением» (GloVe) Word Embeddings представляет собой пошаговую реализацию обучения языковой модели с использованием рекуррентной нейронной сети (RNN) и предварительно обученных языковых вложений GloVe.

В статье приводятся инструкции по использованию кода: 1. Загрузите предварительно подготовленные векторы GloVe. 2. Получите текст для обучения модели. 3. Откройте и отредактируйте параметры файла LM_RNN_GloVe.py внутри основной функции . 4. Выполните следующие методы: (а) tokenize_file_to_vectors (glove_vectors_file_name, file_2_tokenize_name, tokenized_file_name) (б) run_experiment (tokenized_file_name)

код в Python здесь https://github.com/vicmak/ProofSeer.

Я также обнаружил, что @Dmitriy Selivanov недавно опубликовал хороший и дружелюбный учебник, используя его пакет text2vec, который может быть полезен для решения проблемы с точки зрения R. (Было бы здорово, если бы он мог прокомментировать дальше).