Семантические облака голдвилльских имён

Здесь представлены графические визуализации имён годвилльского контента - "семантические облака". Те, кто хочет узнать детали алгоритма, пусть читают текст до конца. Для остальных же скажу лишь, что это способ преобразования слов в вектора ("эмбеддинги") с их последующей проекцией на плоскость. Упрощённо можно считать, что чем ближе сходство между словами, тем ближе их вектора. Рисунок состоит из центрального слова, выделенного красным, и двадцати ближайших к нему слов, выделенных синим. В заголовке графика можно видеть два числа в скобках: чем они больше, тем меньше сходство между словом и его соседями, то есть тем оно оригинальнее.

Вот, например, визуализация имени монстра "Скупой Рыцарь":

Мы видим, что окружён он в основном различными рыцарями (Пси-Рыцарь, Топлессный рыцарь, Электрыцарь и т.д.), но в компанию ближайших соседей попали также слегка созвучные Плазменный Рысак, Трудный Рыбёнок, Царь Горы ("(ры)царь") и даже Косарь Зелени ("косарь - царь - рыцарь").

Кролика-Убийцу окружают кролики, убийцы и разные другие -ийцы, но в соседи, по каким-то ассоциациям, попали Кровопролитий и Кубик Трупика.

Иногда алгоритм вылавливает и менее тривиальные сходства семантики. Например, у Властелина Овец в соседях оказались Великий И Ушастый, Повелитель Мух, Мышкин Князь, Маменькин Принц. Мастер Неловкой Паузы, Пахан Целины... То есть личности выдающиеся, в том или ином смысле, и (или) коронованные

И ещё несколько семантических тучек:

Теперь - обещанное, более формальное описание, алгоритма:

  1. Имя разбивается на 2-3 буквенные перекрывающиеся токены. Например, "Ксеновал" = "кс"+"сен"+"ено"+"нов"+"ова"+"ал".
  2. Для каждого полученного токена (редкие токены не выбрасываются!) с помощью модели Word2Vec (из питоновской библиотеки Gensim) для длины окна контекста 5 строятся 300-мерные эмбеддинги.
  3. Эмбеддинг имени считается как среднее по эмбеддингам составляющих его токенов.
  4. Для выбранного слова находятся его 20 ближайших (в смысле косинусного расстояния) соседей. Предполагается, что у этих соседей - близкая (в том или ином смысле) семантика.
  5. Затем размерность эмбеддингов выбранных слов снижается с помощью алгоритма tSNE (t-distributed Stochastic Neighbor Embedding из библиотеки sklearn.manifold), и они отображаются на плоскости.
  6. Для выбранного слова считается расстояние до ближайшего соседа m и среднее по всем соседям M. Эти числа даны в заголовке в виде (m/M).

К карте сайта