Компьютерная лингвистика

Новостная лента www.solarix.ru

Удобная сортировка текстовых датасетов с помощью LSA и t-SNE
kelijah
По-моему, самый простой, полностью unsupervised, и удобный для визуального анализа способ сортировки датасетов типа этого получается вот так:

1) у нас есть текстовый файл, в каждой строке которого находится одно предложение.

2) выполняем LSA по символьным шинглам:

vectorizer = TfidfVectorizer(max_features=None, ngram_range=(3, 5), min_df=1, analyzer='char')
svd_model = TruncatedSVD(n_components=LSA_DIMS, algorithm='randomized', n_iter=20, random_state=42)
svd_transformer = Pipeline([('tfidf', vectorizer), ('svd', svd_model)])
svd_transformer.fit(tfidf_corpus)
phrase_ls = svd_transformer.transform(tfidf_corpus)


3) выполняем встраивание получающегося списка векторов phrase_ls в одномерное пространство с помощью t-SNE, так что близкие вектора предложений, полученные в п.2, будут примерно так же близки друг к другу, как в исходном LSA-пространстве (я задавал LSA_DIMS=60, но это влияет больше на общее время выполнения, чем на качество итоговых результатов):

tsne = TSNE(n_components=1)
phrases_1d = tsne.fit_transform(phrase_ls)


4) остается только отсортировать предложения по получившемуся ключу 1d встраивания и сохранить результат в файл.

В результатах такой сортировки можно увидеть разные группы, например:
Read more...Collapse )

Модуль поддержания разговора (smalltalk режим) для чатбота
kelijah
В кодовую базу чат-бота добавлен небольшой модуль, которые позволяет в ответ на реплики пользователя, не являющиеся вопросами, отвечать для поддержания разговора (с условным названием smalltalk режим - см. также описание светской беседы в вики). В комплекте с общим retrieval-based алгоритмом чатбота и динамическим обновлением базы знаний из диалога получается более плавное общение (Q - мои реплики, A - ответы чат-бота):

Q:> привет
A:> Здравствуй

Q:> как тебя зовут?
A:> кеша

Q:> меня зовут Илья
A:> Привет!

Q:> я сегодня ел арбуз
A:> Арбуз очень вкусный был?

Q:> что я сегодня ел?
A:> арбуз




Read more...Collapse )

Корпус русскоязычных диалогов и обменов репликами (неочищенный)
kelijah
Для экспериментов с различными моделями для русскоязычного чат-бота.
Пара сотен тысяч фраз, диалоги разной степени осмысленности и законченности, не субтитры.
Текстовый файл

Extreme learning machine для рекуррентной сетки и быстрое получение эмбеддингов текстов
kelijah
Случайно наткнулся на следующий необычный эффект при обучении рекуррентной нейросетки.

Read more...Collapse )

Изменения в модели wordchar2vector (посимвольный рекуррентный автоэнкодер)
kelijah
Подробное описание модели: https://github.com/Koziev/chatbot/blob/master/PyModels/trainers/README.wordchar2vector.md
Исходники выложены в репо https://github.com/Koziev/chatbot, в частности код тренера и скрипт запуска обучения.

Read more...Collapse )

Матрица соответствия шинглов в задаче определения релевантности факта и вопроса
kelijah
Далее - пример того, как некоторые особенности технологии подготовки датасета, наложившись на свойства самого языка, могут проявить себя в NLP модели весьма необычным образом.
Read more...Collapse )

Генерация деепричастных форм из инфинитивов - SQL словарь + Python + xgboost
kelijah
Read more...Collapse )

Большой рефактиринг C++ исходников грамматического движка
kelijah
Закончил первый из двух запланированных больших рефакторингов для проекта https://github.com/Koziev/GrammarEngine: теперь строковые классы FString и UFString являются прямыми наследниками std::string и std::wstring соответственно.

Цель рефактиринга - заменить в коде все древние велосипеды на стандартные вещи, присутствующие либо в стандартной библиотеке, либо в Boost'е (например, всевозможные алгоритмы для работы со строками). Кроме чисто эстетических последствий это должно упростить любую интеграцию C++ кода движка - меньше преобразований для строковых типов, проще развивать код.

На данный момент все части проекта успешно собираются под Windows с помощью VisualStudio 2015, словарная база нормально компилируется, парсер работает. Под Linux собирать еще не пробовал, могут быть compile-time и runtime ошибки.

Сравнение оптимизаторов nadam и rmsprop с помощью F-теста
kelijah
Еще одна серия экспериментов с моделью для векторизации символьного представления слов.
Сравним две штатных реализации оптимизаторов в Keras - rmsprop и nadam. Фиксируем batch_size значением 250, делаем несколько запусков обучения модели для каждого варианта оптимизатора (см. строку 356 в файле wordchar2vector_trainer.py).
ANOVA для сравнения алгоритмов оптимизации...Collapse )

Коэффициент Пирсона для корреляции между batch_size и достигаемой точностью нейросетевой модели
kelijah
Коэффициент Пирсона получается около -0.5, то есть о линейной корреляции между размером батча и максимальной достигаемой точностью нейросетки говорить очень трудно.

Расчет добавлен в тетрадку, в самом конце.

Визуально зависимость тоже почти не видна, есть только некий тренд на понижение, о чем говорит и знак коэффициента:
Read more...Collapse )
Предыдущее сообщение по теме - тут
PS: добавлена визуализация регрессии полиномом второй степени

?

Log in

No account? Create an account