Исходное сырье: ~45 Гб русских текстов, включая русскую википедию и большой архив прессы, в utf-8. В доступных на рутрекере торрентах, кстати, этот архив прессы содержит примерно 5% украинских новостей на мове. Я их удалил для чистоты эксперимента, хотя не уверен, что это настолько уж необходимо.
Из этого массива отобраны предложения, не содержащие латиницу, длиной от 5 до 55 токенов. Получилось примерно 22 Гб в utf-8.
Слова в этих предложениях приведены к нижнему регистру. Знаки пунктуации убраны.
Далее построено векторное представление слов с помощью word2vec. Примерно 3 часа в одном потоке на машине с 3.6 ГГц, с пиковым потреблением 5 Гб оперативки. При длине векторов=300 получился текстовый файл размером в 5 Гб.
Векторная русская морфология
Далее, на созданном векторном наборе выполняем операцию вида V4=(V2-V1) + V3.
К примеру, V4=(кошкой-кошка) + собака.
Ищем ближайшие к получившемуся V4 слова.
Скрин с результатами (ответ "собакой" на втором месте при сортировке по увеличению расстояния):
Аналогично для родительного/винительного падежа:
Опять правильный ответ на втором месте, при общем объему словаря в ~2 миллиона форм!
Кстати, обратите внимание, что весь top-10 содержит слова в сопоставимой грамматической форме - род/вин падеж единственного числа.
Векторная русская семантика
Ну хорошо, мы видим, что абстрактные морфологические преобразования (склонение по падежам) выполняются на векторном поле очень неплохо.
А как насчет более семантичных отношений?
Пример: V4 = тигр + (волчица-волк)
Получаем:
Наша "тигрица" сидит в топ-10, на четвертом месте! Кстати, весь топ заполнен женскими вариантами названий животных в именительном падеже.