Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#926

Что такое Sparse Vector vs Dense Vector в контексте NLP? Назовите плюсы и минусы.

Краткий тезис

Векторные представления текстов делятся на разреженные (sparse) и плотные (dense). Разреженные векторы (one-hot, TF-IDF, Bag of Words) имеют высокую размерность, равную размеру словаря, и содержат много нулей. Плотные векторы (word2vec, BERT) имеют фиксированную низкую размерность (обычно 100–768) и ненулевые значения в каждом измерении, что позволяет улавливать семантические связи. Выбор между ними определяется задачей: sparse лучше для интерпретируемости и точного совпадения терминов, dense — для семантического поиска и обобщения.

2. Dense векторы: word2vec, BERT

Плотные векторы получают путём обучения нейросетей на больших корпусах. Каждое слово (или токен) отображается в непрерывное векторное пространство низкой размерности (обычно 100–300 для word2vec, 768 для BERT-base).

  • Word2vec (Skip-gram, CBOW): предсказывает контекстные слова, обучая эмбеддинги, сохраняющие линейные семантические отношения (king — man + woman ≈ queen).
  • BERT и другие трансформеры: генерируют контекстные эмбеддинги — одно и то же слово может иметь разные векторы в зависимости от окружения («ключ» как инструмент vs «ключ» как родник).

Плюсы dense:

  • Семантическая близость: синонимы и тематически связанные слова имеют близкие векторы (косинусное сходство > 0).
  • Компрессия: низкая размерность (сотни вместо миллионов) экономит память и ускоряет вычисления.
  • Перенос обучения: предобученные модели (BERT, SBERT) можно дообучать под конкретную задачу с малым количеством данных.

Минусы dense:

  • Требуют обучения: word2vec нужно обучать на корпусе (или использовать предобученные), BERT требует GPU для инференса.
  • Потеря интерпретируемости: каждое измерение не соответствует конкретному слову, сложно объяснить, почему два документа похожи.
  • Чувствительность к редким словам: если слово редко встречалось в обучающем корпусе, его эмбеддинг может быть плохим (out-of-vocabulary проблема, хотя BERT решает её через токенизацию на подслова).

3. Sparse: интерпретируемость и размерность

Основное преимущество sparse-векторов — прозрачность. В задачах, где требуется объяснить решение (например, юридический поиск, медицинская диагностика), можно показать, какие именно термины совпали. TF-IDF часто используется как baseline в Information Retrieval.

Однако размерность растёт линейно с размером словаря. Для русского языка с богатой морфологией словарь может достигать 500k+ токенов. Это приводит к:

  • Высокому потреблению оперативной памяти (даже в разреженном формате).
  • Необходимости стемминга/лемматизации для уменьшения словаря.
  • Плохой обобщающей способности: если в тестовом документе встречается слово, отсутствующее в обучающем словаре, оно игнорируется.

4. Dense: семантика, компрессия, требует обучения

Плотные векторы решают проблему семантического разрыва. Например, в word2vec вектор «кошка» близок к «собака», а не к «кошачий корм» (если не учитывать контекст). BERT даёт ещё более точные контекстные представления.

Компрессия: dense-вектор размером 768 занимает 3 КБ (float32), тогда как sparse-вектор из 100k измерений с 1% ненулевых элементов — около 400 КБ (в формате COO). Для миллионов документов разница критична.

Однако dense-векторы требуют:

  • Обучения на больших корпусах (word2vec — десятки гигабайт текста).
  • Вычислительных ресурсов для инференса (особенно трансформеры).
  • Тонкой настройки под домен (например, медицинский BERT).

5. Пет-проект для закрепления

Задача: Сравнить sparse (TF-IDF) и dense (word2vec/BERT) векторы на задаче поиска семантически похожих предложений. Взять 10 коротких текстов на русском языке (например, новости), построить матрицы сходства и проанализировать различия.

Инструменты:

  • Python 3.10+
  • scikit-learn (TfidfVectorizer, cosine_similarity)
  • gensim (KeyedVectors для предобученного word2vec, например, ruscorpora)
  • transformers + torch (для BERT, модель DeepPavlov/rubert-base-cased)
  • numpy, pandas, matplotlib (визуализация)

Шаги:

  1. Собрать корпус из 10 предложений (например, про погоду, спорт, технологии).
  2. Вычислить TF-IDF матрицу (sparse).
  3. Загрузить предобученный word2vec (или BERT) и получить dense-эмбеддинги для каждого предложения (усреднение токенов для BERT).
  4. Рассчитать попарное косинусное сходство для обоих подходов.
  5. Визуализировать тепловые карты сходства.
  6. Выбрать пару предложений-синонимов (например, «Машина едет быстро» и «Автомобиль движется с высокой скоростью») и сравнить значения сходства.

Ожидаемый результат:

  • TF-IDF покажет низкое сходство для синонимичных пар (0.1–0.3), так как лексика разная.
  • Word2vec/BERT дадут высокое сходство (0.7–0.9) за счёт семантической близости.
  • Вы сможете на практике убедиться в компромиссе между интерпретируемостью (TF-IDF) и семантикой (dense).

Связь с другими вопросами

ВопросТема
912Эмбеддинги слов: word2vec, GloVe, FastText

Навигация

  • Предыдущий: 925
  • Следующий: 927
  • Индекс: 00. Индекс разборов