Category: общество

а вот простейшая seq2seq модель для генерации реплик в читчат боте что выдает

После обучения на объединенном датасете диалогов из Толоки + мои датасеты для чатбота, модель, не учитывающая контекст, а только текст заданного вопроса, выдает такую "болтовню":
Collapse )

Изменения в порядке генерации ответов в чатботе

В коде релиза 0.0.2.2 кроме всяких правок ошибок и более точных NLP моделек сделана одна существенная модификация в генераторе ответов.
Раньше чатбот на вопросы, относящиеся к нему "лично", генерировал ответ общим алгоритмом, то есть искал релевантный факт в базе знаний, брал отуда необходимый фрагмент и строил ответ. Выглядело это примерно так:
Collapse )

Профили в чатботе

В новом релизе чатбота я добавил "профили" - текстовые файлы (json), в которых указываются пути к файлам с фактами и правилами. С их помощью, думаю, будет проще создавать разные "характеры". В этих же профилях в будущем будут доступны тонкие настройки характера бота (ну не прямо как тут, конечно, хотя...). Сейчас сделан базовый отладочный профиль, который позволяет чатботу отвечать на десяток простых вопросов о самом себе, примерно так:
Collapse )

Датасет с сэмплами подлежащее+глагол+предлог+существительное

Обнаружил у себя датасет (файл в репе 3 Мб) с большим списком сэмплов такого вида:
Collapse )
Сэмплы были собраны автоматически из 10Гб корпуса текстов. Некоторые сэмплы содержат неполные предложения ("Я расскажу с позиции"). Я планирую использовать их для обучения модели валидации синтаксиса для чатбота, но, возможно, они будут кому-то полезны и для других языковых моделей.

Изменения в грамматическом словаре касательно составных прилагательных

В "грамматическом словаре русского языка" закончена большая чистка русского лексикона. Из словарной базы убраны почти все составные прилагательные такого вида "ярко-зеленый", "багрово-красный" и т.д. В итоге словарь стал меньше, но мощность описываемой им лексики - больше. Далее - пояснения мотивации и последствия.

Collapse )

Датасеты по сочетаемости слов в группах из 2, 3 и 4 слов (mutual information)

В репозитории https://github.com/Koziev/NLP_Datasets/tree/master/MutualInfo выложены датасеты со статистикой по устойчивым сочетаниям слов. Датасеты получены с помощью C# кода, выложенного тут (см. описание) и урезаны до 100,000 первых записей, так как выложить полные файлы размером более 2 Гб на гитхаб невозможно.

Внутри файлов можно увидеть такие данные:
Collapse )

Сравнение разных способов представления слов для NLP задачи построения языковой модели

В слаке ODS недавно проскочила тема про варианты представления категориальных переменных для решающих деревьев. В частности, приводилась ссылка https://medium.com/data-design/visiting-categorical-features-and-encoding-in-decision-trees-53400fa65931. А я как раз хотел еще раз поднять тему с использованием Brown Clustering представлений слов для NLP. Вот и получилось совместить оба вопроса в одном бенчмарке - см. далее подробности.
Collapse )

Неудачный эксперимент: генерация морфологических признаков слов через w2v и кластеризацию

Сама идея простая. Делал её экспериментальную реализацию для для Парсера. Потом вторая попытка - для morphorueval2017. Особого эффекта добиться не удалось, но возможно в каком-то другом сценарии анализа текста она будет полезной.

Далее описываю реализацию для morphorueval.
Есть набор корпусов, предоставленных организаторами конкурса.
Мы берем из них только слова, генерируем текстовый файл в формате: одна строка - одно предложение. Слова разделены пробелами. Занимается этим простой скриптик generate_w2v_corpus.py.
Далее выполняется встраивание слов корпуса в векторное пространство через gensim - второй скриптик train_w2v.py.
Далее выполняется кластеризация слов с помощью K-Means - см. скрипт word_clusters.sklearn.py
Наконец, номера кластеров слов используем как отдельный категориальный признак в любом алгоритме.

Если посмотреть на содержимое кластеров, то обычно можно понять, какие морфологические признаки использованы для объединения:

Collapse )

Главная проблема - небольшой объем текстового корпуса, на котором обучается word2vec. Из-за этого некоторые кластеры получаются неконсистентными.