Матрица совместной встречаемости

Матрица совместной встречаемости (Co-occurrence Matrix) — это инструмент, используемый в анализе текстов и компьютерной лингвистике для измерения частоты совместного появления слов или других лингвистических единиц в пределах заданного контекста (например, предложения, абзаца или окна фиксированного размера).

Определение

Матрица совместной встречаемости — это квадратная матрица C, где:

  • Строки и столбцы соответствуют уникальным словам из словаря.
  • Элемент Cij показывает, сколько раз слова i и j встречаются вместе в одном контексте.

Как строится матрица слов-контекстов?

  1. Определение контекста:
    • Контекст — это окно фиксированного размера (например, ±2 слова вокруг целевого).
    • Пример: для предложения «Кошка ловит мышку» при окне ±1:
      • Контексты для «ловит»: («кошка», «мышку»).
  2. Заполнение матрицы:
    • Строки — уникальные слова из словаря.Столбцы — контексты (или тоже слова, если контексты — это соседние слова).Значения в ячейках — частота, с которой слово встречается в данном контексте.

Пример построения

Допустим, у нас есть корпус из трех предложений:

  1. «кот ест рыбу»
  2. «собака гонит кота»
  3. «кот и собака играют»

Шаг 1: Определим словарь (уникальные слова):
["кот", "ест", "рыбу", "собака", "гонит", "и", "играют"]

Шаг 2: Зададим контекст — соседние слова в пределах окна (например, размер окна = 2).

Для слова «кот»:

  • В первом предложении: соседи — «ест»
  • Во втором: «собака», «гонит»
  • В третьем: «и», «собака»

Шаг 3: Заполняем матрицу (симметричную, так как порядок не учитывается):

котестрыбусобакагонитииграют
кот0102110
ест1010000
рыбу0100000
собака2000111

Применение

  1. Векторные представления слов
    Матрица может использоваться для построения word embeddings (например, методом SVD или GloVe).
  2. Анализ семантической близости
    Слова с похожими векторами в матрице часто имеют схожие значения.
  3. Задачи NLP
    Классификация текстов, поиск синонимов, тематическое моделирование.

Как улучшить таблицу?

  1. Нормализация частот: Заменить абсолютные частоты на относительные (например, делить на общее число употреблений слова).
  2. Логарифмирование: Применить log(1 + x) к значениям, чтобы уменьшить влияние редких событий.
  3. Симметризация: Если контексты — это слова, можно сделать матрицу симметричной, добавив встречные направления (например, «кошка» → «ловит» и «ловит» → «кошка»).

Пример: Текст про животных

Исходные предложения:

  1. «Кот ест рыбу»
  2. «Собака гонит кота»
  3. «Кот и собака играют»

Шаг 1: Строим матрицу совместной встречаемости
(Учитываем соседние слова в пределах окна = 1)

котестрыбусобакагонитиграют
кот010210
ест101000
рыбу010000
собака200011
гонит100100
играют000100

Как читать матрицу?

  • Число на пересечении строки и столбца показывает, сколько раз слова встречались рядом.
  • Например, «кот» и «собака» встречались вместе 2 раза (в предложениях 2 и 3).

Шаг 2: Что можно узнать из этой матрицы?

1. Какие слова часто встречаются вместе?

  • «Кот» и «собака» → 2 раза. Значит, они связаны (возможно, это животные).
  • «Кот» и «ест» → 1 раз. Коты едят!
  • «Собака» и «гонит» → 1 раз. Собаки могут гнаться за кем-то.

➡️ Вывод: Слова, у которых большие числа в таблице, связаны по смыслу.

2. Какие слова не связаны?

  • «Рыбу» и «играют» → 0. Рыбы не играют с собаками в нашем примере.
  • «Ест» и «гонит» → 0. Эти действия не связаны.

➡️ Вывод: Нули в таблице означают, что слова почти не встречаются вместе.

3. Можно найти синонимы или похожие слова?

  • Если бы в тексте было слово «кошка», оно тоже часто встречалось бы с «собака» и «ест», как и «кот». Значит, «кот» и «кошка» — близкие по смыслу.

Шаг 3: Как использовать эту матрицу?

1. Поиск ассоциаций

  • Если спросить: «С какими словами связано ‘собака’?», можно посмотреть строку «собака» в матрице:
    • «кот» (2), «гонит» (1), «играют» (1).
      → Значит, собаки могут гонять котов и играть.

2. Упрощённый чат-бот

  • Вопрос: «Что делает кот?»
    • Смотрим строку «кот»:
      • «ест» (1), «собака» (2), «гонит» (1).
        → Ответ: «Кот ест, играет с собакой или убегает от неё».

3. Классификация текстов

  • Если в новом предложении есть слова «кот» и «рыбу», можно предположить, что оно про еду животных.

А что, если слов станет много?

В реальности слов тысячи, и матрица будет огромной. Тогда:

  1. Убираем редкие слова (например, которые встретились 1-2 раза).
  2. Используем алгоритмы (например, SVD или нейросети), чтобы найти скрытые связи.

Итоги

Матрица совместной встречаемости — это «социальная сеть» слов:

  • Числа в таблице = сколько раз слова «общались» (встречались рядом).
  • Большие числа = слова дружат (связаны по смыслу).
  • Нули = слова не знают друг друга.

С её помощью можно научить компьютер понимать смысл слов без сложных правил!


Как из «сухой» матрицы совместной встречаемости получаются «умные» векторы, которые помогают компьютеру находить синонимы.

Шаг 1: Строим матрицу совместной встречаемости

Возьмём упрощённую версию матрицы из прошлого примера:

котсобакаестрыбуиграет
кот02100
собака20001
ест10010
рыбу00100
играет01000

Что это значит?
— «Кот» и «собака» встречались вместе 2 раза (например, в предложениях «Кот и собака играют» и «Собака гонит кота»).
— «Кот» и «ест» — 1 раз («Кот ест рыбу»).


Шаг 2: Превращаем слова в векторы

Каждому слову нужно присвоить вектор так, чтобы схожие слова имели похожие координаты. Для этого:

  1. Берём строку матрицы для слова (это и есть «сырой» вектор).
    Например:
    • «кот» = [0, 2, 1, 0, 0]
    • «собака» = [2, 0, 0, 0, 1]
  2. Упрощаем векторы (чтобы они были короче и содержали только главные особенности).
    — Используем метод SVD (как «сжатие» матрицы).
    — Получаем для каждого слова вектор из 2 чисел вместо 5:
    • «кот» → [1.2, 0.8]
    • «собака» → [1.1, 0.6]
    • «ест» → [0.3, -0.4]

Шаг 3: Как найти синонимы?

Теперь слова — это точки на плоскости. Чем ближе точки, тем ближе смысл слов!

Пример координат:

  • «кот» = (1.2, 0.8)
  • «собака» = (1.1, 0.6)
  • «кошка» = (1.3, 0.7) 
  • «ест» = (0.3, -0.4)
  • «грызёт» = (0.4, -0.3)

Шаг 4: Поиск синонимов на практике

Вопрос: Какое слово ближе всего к «кошка»?

  1. Считаем расстояния между точками:
    • Расстояние(«кошка», «кот») = 0.1
    • Расстояние(«кошка», «собака») = 0.2
    • Расстояние(«кошка», «ест») = 1.5
  2. Ближайшее слово — «кот» → значит, это синоним!

А если заменить «кошку» на «киса»?
— Вектор «киса» окажется рядом с «кот» и «кошка» → компьютер поймёт, что это синонимы, даже если они не встречались в тексте вместе!


Почему это работает?

— Статистическая магия: Если «кот» и «собака» часто встречаются в одинаковых контекстах (например, с «играет», «бегает»), их векторы будут похожи.
— Даже без словаря: Компьютер не знает, что «кошка» = «кот», но видит, что они ведут себя одинаково в текстах.


Где применяется?

  1. Поисковики: Найдёт «купить автомобиль», даже если вы написали «приобрести машину».
  2. Исправление опечаток: «превет» → ближайший вектор «привет».
  3. Переводчики: Поймёт, что «happy» и «joyful» — близкие слова.

Вариации

  • Взвешенная матрица: Учет расстояния между словами (близкие слова получают больший вес).
  • Нормализованная матрица: Деление на частоту отдельных слов (PMI — Pointwise Mutual Information).

Ограничения

  • Размер матрицы растет квадратично с увеличением словаря.
  • Требует больших вычислительных ресурсов для больших корпусов.
МетодКонтекстная обработкаМногозначностьСкоростьПример использования
Word2Vec❌ Нет❌ Нет⚡ БыстроПоиск синонимов, чат-боты
GloVe❌ Нет❌ Нет⚡ БыстроАнализ тональности
BERT✅ Да✅ Да🐢 МедленноМашинный перевод, распознавание именованных сущностей

Какой метод выбрать?

  • Если нужно быстро и просто → Word2Vec (подходит для чат-ботов, рекомендаций).
  • Если важен контекст → BERT (лучше для сложных задач, например, вопросно-ответных систем).
  • Если мало данных → GloVe (работает лучше, чем Word2Vec на маленьких корпусах).
Прокрутить вверх