Измерение близости объектов — одна из старейших задач математики и компьютерных наук.
1. Ранние статистические методы (1950–1970-е)
Косинусное сходство
- Происхождение: Основано на теории векторных пространств (работы Германа Грассмана, XIX век).
- Первое применение в NLP: В 1950-х для информационного поиска (Gerard Salton, Vector Space Model).
- Пример: В 1960-х косинусная мера использовалась для сравнения документов в системе SMART (Cornell University).
Евклидово расстояние
- Происхождение: Известно со времён Древней Греции (Евклид, «Начала»).
- В статистике: Применялось Карлом Пирсоном (1900-е) для анализа корреляций.
- В NLP: В 1970-х для кластеризации текстов (например, в алгоритме k-ближайших соседей).
Манхэттенское расстояние
- Происхождение: Введено Германом Минковским (конец XIX века) как частный случай *L1-метрики*.
- Применение: Использовалось в экономике и биологии до NLP (например, для анализа ДНК-последовательностей).
2. Эра матричных методов (1980–2000-е)
С появлением мощных компьютеров стали популярны матричные разложения:
SVD (Singular Value Decomposition)
- 1988: Latent Semantic Analysis (LSA) — применение SVD к матрице «термин-документ» для поиска скрытых тем.
- Пример: Системы автоматического реферирования текстов.
Корреляция Пирсона
- Использовалась в биоинформатике и психометрии, затем адаптирована для NLP.
3. Векторные представления слов (2000–2010-е)
Word2Vec (2013, Mikolov et al.)
- Ввел косинусную близость как стандарт для сравнения эмбеддингов.
- Пример: king – man + woman ≈ queen стал классикой.
GloVe (2014, Stanford)
- Оптимизировал векторы так, чтобы их скалярное произведение приближало логарифм совместной встречаемости.
FastText (2015, Facebook)
- Учитывал морфологию слов, но сохранил косинусную метрику для близости.
4. Современные контекстные методы (2018–2024)
BERT и трансформеры
- 2018: BERT использует косинусное сходство для сравнения контекстных эмбеддингов.
- 2020-е: Метрики адаптируются под многомерные пространства (например, Poincaré Embeddings для иерархических данных).
Новые метрики
- Wasserstein Distance: Для сравнения распределений (популярно в генеративных моделях).
- ArcFace: В компьютерном зрении, затем перенесён в NLP для тонкой настройки эмбеддингов.
Эволюция в одной таблице
| Период | Методы | Применение в NLP |
|---|---|---|
| 1950–1970-е | Косинусное, Евклидово | Поиск документов, кластеризация |
| 1980–2000-е | SVD, LSA | Тематическое моделирование |
| 2000–2010-е | Word2Vec, GloVe | Векторные представления слов |
| 2010–2024 | BERT, трансформеры | Контекстные эмбеддинги |
Пример исторической преемственности:
- В 1960-х косинусная мера сравнивала документы вручную.
- В 2020-х та же метрика работает в ChatGPT для поиска семантически близких фраз.
Близость векторов = близость смысла
Если векторы слов a⃗a и b⃗b близки в векторном пространстве (например, косинусное сходство cos(θ)≈1cos(θ)≈1), то слова семантически похожи.
Пример (Word2Vec/GloVe):
- Вектор(«король») — вектор(«мужчина») + вектор(«женщина») ≈ вектор(«королева»)
- Вектор(«Париж») — вектор(«Франция») + вектор(«Германия») ≈ вектор(«Берлин»)
Методы измерения близости
Чтобы компьютер понимал, что «кот» и «кошка» — близкие слова, а «кот» и «велосипед» — нет, используют методы измерения близости векторов. Разберём 3 главных способа с примерами.
1. Косинусное сходство
- Игнорирует длину векторов, учитывает только направление.
→ Это важно, потому что частые слова (например, «и», «в») имеют длинные векторы, но не несут смысловой нагрузки. - Устойчиво к масштабированию.
→ Даже если векторы растянуты или сжаты, угол между ними остаётся прежним.
Пример:
Допустим, у нас есть векторы:
- «кот» = [1, 2]
- «кошка» = [2, 4] (удвоенный «кот»)
- «велосипед» = [-1, 1]
Косинусное сходство:
- sim(«кот», «кошка») = 1 (идеальное совпадение, хотя длины векторов разные).
- sim(«кот», «велосипед») ≈ 0 (перпендикулярные направления).
Как работает:
Сравнивает угол между векторами. Чем меньше угол, тем ближе слова.

Пример:
Допустим, у нас есть 2D-векторы:
- «кот» = [1.2, 0.8]
- «кошка» = [1.3, 0.7]
- «велосипед» = [-0.5, 0.2]
Считаем для «кот» и «кошка»:

Результат:
- «кот» и «кошка» → 0.99 (почти идентичны).
- «кот» и «велосипед» → -0.21 (противоположны по смыслу).
Когда использовать:
— Для поиска синонимов.
— В рекомендательных системах (например, Netflix определяет похожие фильмы).
2. Евклидово расстояние
Евклидово расстояние чувствительно к длине векторов, но его тоже можно применять, если:
- Векторы нормализованы (длины приведены к 1). Тогда оно эквивалентно косинусному сходству.
- Задача требует учёта частоты слов. Например, для сравнения документов по количеству ключевых терминов.
Пример:
Те же векторы после нормализации:
- «кот» = [0.45, 0.89]
- «кошка» = [0.45, 0.89]
- «велосипед» = [-0.71, 0.71]
Евклидово расстояние:
- d(«кот», «кошка») = 0 (идентичные векторы).
- d(«кот», «велосипед») ≈ 1.4 (далеко).
Минус:
Без нормализации «кот» и «кошка» будут считаться разными, если один вектор длиннее другого.
Как работает:
Считает прямое расстояние между точками в пространстве. Чем меньше число, тем ближе слова.

Пример:
Те же векторы:
- «кот» = [1.2, 0.8]
- «кошка» = [1.3, 0.7]
Считаем:

Результат:
- «кот» и «кошка» → 0.14 (очень близко).
- «кот» и «велосипед» → 1.86 (далеко).
Когда использовать:
— Для кластеризации (например, группировка новостей по темам).
— В гео-приложениях (поиск ближайших кафе на карте).
3. Манхэттенское расстояние
Применяется редко, но может быть полезно:
- Если данные разреженные (много нулей в векторах).
- Для категориальных признаков (например, бинарные вектора «есть слово/нет слова»).
Пример:
Векторы для бинарного случая (1 = слово есть, 0 = нет):
- Текст 1: «кот ест» → [1, 1, 0]
- Текст 2: «кошка ест» → [1, 1, 0]
- Текст 3: «велосипед» → [0, 0, 1]
Манхэттенское расстояние:
- d(Текст 1, Текст 2) = 0 (одинаковые).
- d(Текст 1, Текст 3) = 3 (максимальное отличие).
Как работает:
Считает сумму разниц по каждой координате (как движение по улицам Нью-Йорка).

Сравнение методов
| Метод | Плюсы для текстов | Минусы для текстов | Когда использовать? |
|---|---|---|---|
| Косинусное сходство | Не зависит от длины векторов | Чувствителен к шуму в данных | Поиск синонимов, кластеризация |
| Евклидово расстояние | Интуитивно понятно | Требует нормализации векторов | Сравнение документов по частотам |
| Манхэттенское | Работает с разреженными данными | Не учитывает семантику направлений | Бинарные признаки (например, спам-фильтр) |
Какой метод выбрать?
- Косинусное сходство — лучший выбор для большинства NLP-задач (поиск синонимов, тематическое моделирование).
- Евклидово расстояние — подходит, если важно учитывать интенсивность признаков (например, частоту слов).
- Манхэттенское — для специфических случаев (бинарные вектора, данные с выбросами).
Важно: Если векторы предварительно нормализованы (например, в BERT), косинусное и евклидово расстояние дадут одинаковый результат!
Примеры семантических связей
| Тип близости | Примеры слов | Применение |
|---|---|---|
| Синонимы | «счастье» ≈ «радость» | Поиск замены слов в тексте |
| Тематические | «кофе» ≈ «чай» ≈ «напиток» | Кластеризация документов |
| Контекстные | «доктор» ≈ «врач» ≈ «медицина» | Улучшение поисковых запросов |
| Функциональные | «купить» ≈ «продать» ≈ «магазин» | Анализ тональности отзывов |
Визуализация (2D-пример)
Допустим, после уменьшения размерности (t-SNE/PCA) получаем:
[кот]____[собака]
\ /
[ест]
|
[рыбу]
Интерпретация:
- «Кот» и «собака» близки (домашние животные).
- «Ест» связан с обоими.
- «Рыбу» ближе к «кот», чем к «собака» (логично!).
Ограничения
- Многозначность: Статические эмбеддинги (Word2Vec) не различают значения слова «ключ» (дверной vs музыкальный).
Решение: BERT/ELMo (контекстные эмбеддинги). - Редкие слова: Для них векторы могут быть неточными.
Решение: дообучение на доменных данных. - Культурные различия: «Футбол» в США (soccer) vs Европа (football).
Практическое применение
- Поисковые системы: Расширение запросов синонимами.
- Чат-боты: Понимание intent (например, «хочу купить» ≈ «ищу продавца»).
- Модерация контента: Автоматическое обнаружение токсичных слов.