Компы учатся мыслить абстрактно

Заголовок несколько громковат, но у меня возникло именно такое впечатление=) Один из современных прорывов в работе компьютеров с семантикой слов и текста это модель word2vec и её производные вроде doc2vec. Модель была предложена всего несколько лет назад ребятами из Гугла. Как следует из названия, слово или набор слов представляется в виде вектора (word to vector), а из школьного курса математики известно, что векторы можно складывать, вычитать и так далее. Соответственно, учительница арифметики идёт лесом со своими советами, что нельзя складывать метры с килограммами! Теперь можно складывать и вычитать слова!


Модель задаёт векторы слов в 300-мерном пространстве, но не надо пугаться. Если вектор на двумерной плоскости записывается двумя числами:

Компы учатся мыслить абстрактно Машинное обучение, IT, Word2vec, Моё, Длиннопост

Цифры 2 и 3 это координаты по осям X и Y


То вектор в 300-мерном пространстве это просто 300 чисел через запятую) Слова сортируются по векторному пространству в зависимости от контекста в процессе учёбы модели по большому количеству текста. И получается сортировка по смыслу/сути/понятию. Соответственно, операции со словами выглядят как операции с смысловыми признаками. Например, при сложении слов “король” и “женщина” подразумевается нечто, обладающее признаками “королевский” и “женский” и модель ответит “королева”! Вычитание “женщины” из “королевы” даст короля. Это достаточно простые примеры, но на лицо работа именно с абстрактными значениями слов.


Модель меня заинтересовала и я написал бота для мессенджера “телеграм”, чтобы удобнее было с ней играться и понять её особенности и возможности. Бот получает от пользователя четыре слова, затем из первого вычитает второе, а третье и четвёртое воспринимает как ответы пользователя на разность и говорит насколько они близки к реальной векторной разности по шкале от -1 до +1. Затем отправляет в чат десять слов, которые по мнению модели наиболее близки к разности. Предыдущие примеры выглядят так (пикабу почему-то сжал картинку, кликабельно):

Компы учатся мыслить абстрактно Машинное обучение, IT, Word2vec, Моё, Длиннопост

Это были простые примеры и, на мой взгляд, модель с ними справилась нормально. Модель способна и на операции с ещё более абстрактными понятиями, но до Скайнета, конечно, далеко. Где-то лажает, где-то нет. Например, вычитая “душу” из “человека” среди ответов модели третье место занимает “шимпанзе” =) На сумму “газа” и “дыхания” модель уверенно отвечает “воздух”, складывая “чувство” и “секс” получает “любовь”.


Вычитая любое слово из самого себя получается нулевой вектор, который никуда не направлен и, значит, и не имеет смысловых признаков. Иными словами - белиберда =)

Компы учатся мыслить абстрактно Машинное обучение, IT, Word2vec, Моё, Длиннопост

Какими-то понятиями модель оперирует легко, какими-то нет. Например, получить “любовь” сложением двух слов оказалось довольно просто (уравнение X + Y = любовь), а вот вычитая что-то из “бога” оказалось трудно получить человека (Бог - X = человек)


Уот так уот) Кто хочет поиграться с моделью - пишите боту в “телеграме” по ссылке выше)


А модель doc2vec позволяет складывать и вычитать не только слова, а целые предложения и тексты (их смыслы), но это уже другая история =)

Автор поста оценил этот комментарий

А как слову сопоставляются цифры и наоборот? Нужен какой-то словарь-тезаурус.

Словарь("король") = (a1, a2, ..., a300)

раскрыть ветку
Автор поста оценил этот комментарий

ну что же, пиши еще)

Автор поста оценил этот комментарий
Сначала мы заставляем их вычитать слова, а потом они начнут вычитать нас из списков живых
Автор поста оценил этот комментарий

классно , особенно "“любовь” сложением двух слов оказалось довольно просто (уравнение X + Y = любовь), а вот вычитая что-то из “бога” оказалось трудно получить человека (Бог - X = человек)" еще машину не сделали, а уже ей религиозные понятия втирают:)

раскрыть ветку
Автор поста оценил этот комментарий

Очень интересно.