Предсказание следующего слова с text2vec в R

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

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


person Sasha    schedule 21.04.2016    source источник


Ответы (3)


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

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

person Dmitriy Selivanov    schedule 27.04.2016

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

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

Код на Python находится здесь https://github.com/vicmak/ProofSeer.

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

person Sergio    schedule 11.08.2017

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

person Aaron    schedule 21.04.2016
comment
Знаете ли вы, есть ли реализация R для RNNLM? - person Sasha; 22.04.2016
comment
Вероятно, не было бы моим предположением. - person Aaron; 23.04.2016