Матрица совместной встречаемости (Co-occurrence Matrix) — это инструмент, используемый в анализе текстов и компьютерной лингвистике для измерения частоты совместного появления слов или других лингвистических единиц в пределах заданного контекста (например, предложения, абзаца или окна фиксированного размера).
Определение
Матрица совместной встречаемости — это квадратная матрица C, где:
- Строки и столбцы соответствуют уникальным словам из словаря.
- Элемент Cij показывает, сколько раз слова i и j встречаются вместе в одном контексте.
Как строится матрица слов-контекстов?
- Определение контекста:
- Контекст — это окно фиксированного размера (например, ±2 слова вокруг целевого).
- Пример: для предложения «Кошка ловит мышку» при окне ±1:
- Контексты для «ловит»: («кошка», «мышку»).
- Заполнение матрицы:
- Строки — уникальные слова из словаря.Столбцы — контексты (или тоже слова, если контексты — это соседние слова).Значения в ячейках — частота, с которой слово встречается в данном контексте.
Пример построения
Допустим, у нас есть корпус из трех предложений:
- «кот ест рыбу»
- «собака гонит кота»
- «кот и собака играют»
Шаг 1: Определим словарь (уникальные слова):["кот", "ест", "рыбу", "собака", "гонит", "и", "играют"]
Шаг 2: Зададим контекст — соседние слова в пределах окна (например, размер окна = 2).
Для слова «кот»:
- В первом предложении: соседи — «ест»
- Во втором: «собака», «гонит»
- В третьем: «и», «собака»
Шаг 3: Заполняем матрицу (симметричную, так как порядок не учитывается):
| кот | ест | рыбу | собака | гонит | и | играют | |
|---|---|---|---|---|---|---|---|
| кот | 0 | 1 | 0 | 2 | 1 | 1 | 0 |
| ест | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
| рыбу | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| собака | 2 | 0 | 0 | 0 | 1 | 1 | 1 |
Применение
- Векторные представления слов
Матрица может использоваться для построения word embeddings (например, методом SVD или GloVe). - Анализ семантической близости
Слова с похожими векторами в матрице часто имеют схожие значения. - Задачи NLP
Классификация текстов, поиск синонимов, тематическое моделирование.
Как улучшить таблицу?
- Нормализация частот: Заменить абсолютные частоты на относительные (например, делить на общее число употреблений слова).
- Логарифмирование: Применить
log(1 + x)к значениям, чтобы уменьшить влияние редких событий. - Симметризация: Если контексты — это слова, можно сделать матрицу симметричной, добавив встречные направления (например, «кошка» → «ловит» и «ловит» → «кошка»).
Пример: Текст про животных
Исходные предложения:
- «Кот ест рыбу»
- «Собака гонит кота»
- «Кот и собака играют»
Шаг 1: Строим матрицу совместной встречаемости
(Учитываем соседние слова в пределах окна = 1)
| кот | ест | рыбу | собака | гонит | играют | |
|---|---|---|---|---|---|---|
| кот | 0 | 1 | 0 | 2 | 1 | 0 |
| ест | 1 | 0 | 1 | 0 | 0 | 0 |
| рыбу | 0 | 1 | 0 | 0 | 0 | 0 |
| собака | 2 | 0 | 0 | 0 | 1 | 1 |
| гонит | 1 | 0 | 0 | 1 | 0 | 0 |
| играют | 0 | 0 | 0 | 1 | 0 | 0 |
Как читать матрицу?
- Число на пересечении строки и столбца показывает, сколько раз слова встречались рядом.
- Например, «кот» и «собака» встречались вместе 2 раза (в предложениях 2 и 3).
Шаг 2: Что можно узнать из этой матрицы?
1. Какие слова часто встречаются вместе?
- «Кот» и «собака» → 2 раза. Значит, они связаны (возможно, это животные).
- «Кот» и «ест» → 1 раз. Коты едят!
- «Собака» и «гонит» → 1 раз. Собаки могут гнаться за кем-то.
➡️ Вывод: Слова, у которых большие числа в таблице, связаны по смыслу.
2. Какие слова не связаны?
- «Рыбу» и «играют» → 0. Рыбы не играют с собаками в нашем примере.
- «Ест» и «гонит» → 0. Эти действия не связаны.
➡️ Вывод: Нули в таблице означают, что слова почти не встречаются вместе.
3. Можно найти синонимы или похожие слова?
- Если бы в тексте было слово «кошка», оно тоже часто встречалось бы с «собака» и «ест», как и «кот». Значит, «кот» и «кошка» — близкие по смыслу.
Шаг 3: Как использовать эту матрицу?
1. Поиск ассоциаций
- Если спросить: «С какими словами связано ‘собака’?», можно посмотреть строку «собака» в матрице:
- «кот» (2), «гонит» (1), «играют» (1).
→ Значит, собаки могут гонять котов и играть.
- «кот» (2), «гонит» (1), «играют» (1).
2. Упрощённый чат-бот
- Вопрос: «Что делает кот?»
- Смотрим строку «кот»:
- «ест» (1), «собака» (2), «гонит» (1).
→ Ответ: «Кот ест, играет с собакой или убегает от неё».
- «ест» (1), «собака» (2), «гонит» (1).
- Смотрим строку «кот»:
3. Классификация текстов
- Если в новом предложении есть слова «кот» и «рыбу», можно предположить, что оно про еду животных.
А что, если слов станет много?
В реальности слов тысячи, и матрица будет огромной. Тогда:
- Убираем редкие слова (например, которые встретились 1-2 раза).
- Используем алгоритмы (например, SVD или нейросети), чтобы найти скрытые связи.
Итоги
Матрица совместной встречаемости — это «социальная сеть» слов:
- Числа в таблице = сколько раз слова «общались» (встречались рядом).
- Большие числа = слова дружат (связаны по смыслу).
- Нули = слова не знают друг друга.
С её помощью можно научить компьютер понимать смысл слов без сложных правил!
Как из «сухой» матрицы совместной встречаемости получаются «умные» векторы, которые помогают компьютеру находить синонимы.
Шаг 1: Строим матрицу совместной встречаемости
Возьмём упрощённую версию матрицы из прошлого примера:
| кот | собака | ест | рыбу | играет | |
|---|---|---|---|---|---|
| кот | 0 | 2 | 1 | 0 | 0 |
| собака | 2 | 0 | 0 | 0 | 1 |
| ест | 1 | 0 | 0 | 1 | 0 |
| рыбу | 0 | 0 | 1 | 0 | 0 |
| играет | 0 | 1 | 0 | 0 | 0 |
Что это значит?
— «Кот» и «собака» встречались вместе 2 раза (например, в предложениях «Кот и собака играют» и «Собака гонит кота»).
— «Кот» и «ест» — 1 раз («Кот ест рыбу»).
Шаг 2: Превращаем слова в векторы
Каждому слову нужно присвоить вектор так, чтобы схожие слова имели похожие координаты. Для этого:
- Берём строку матрицы для слова (это и есть «сырой» вектор).
Например:- «кот» =
[0, 2, 1, 0, 0] - «собака» =
[2, 0, 0, 0, 1]
- «кот» =
- Упрощаем векторы (чтобы они были короче и содержали только главные особенности).
— Используем метод 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: Поиск синонимов на практике
Вопрос: Какое слово ближе всего к «кошка»?
- Считаем расстояния между точками:
- Расстояние(«кошка», «кот») = 0.1
- Расстояние(«кошка», «собака») = 0.2
- Расстояние(«кошка», «ест») = 1.5
- Ближайшее слово — «кот» → значит, это синоним!
А если заменить «кошку» на «киса»?
— Вектор «киса» окажется рядом с «кот» и «кошка» → компьютер поймёт, что это синонимы, даже если они не встречались в тексте вместе!
Почему это работает?
— Статистическая магия: Если «кот» и «собака» часто встречаются в одинаковых контекстах (например, с «играет», «бегает»), их векторы будут похожи.
— Даже без словаря: Компьютер не знает, что «кошка» = «кот», но видит, что они ведут себя одинаково в текстах.
Где применяется?
- Поисковики: Найдёт «купить автомобиль», даже если вы написали «приобрести машину».
- Исправление опечаток: «превет» → ближайший вектор «привет».
- Переводчики: Поймёт, что «happy» и «joyful» — близкие слова.
Вариации
- Взвешенная матрица: Учет расстояния между словами (близкие слова получают больший вес).
- Нормализованная матрица: Деление на частоту отдельных слов (PMI — Pointwise Mutual Information).
Ограничения
- Размер матрицы растет квадратично с увеличением словаря.
- Требует больших вычислительных ресурсов для больших корпусов.
| Метод | Контекстная обработка | Многозначность | Скорость | Пример использования |
|---|---|---|---|---|
| Word2Vec | ❌ Нет | ❌ Нет | ⚡ Быстро | Поиск синонимов, чат-боты |
| GloVe | ❌ Нет | ❌ Нет | ⚡ Быстро | Анализ тональности |
| BERT | ✅ Да | ✅ Да | 🐢 Медленно | Машинный перевод, распознавание именованных сущностей |
Какой метод выбрать?
- Если нужно быстро и просто → Word2Vec (подходит для чат-ботов, рекомендаций).
- Если важен контекст → BERT (лучше для сложных задач, например, вопросно-ответных систем).
- Если мало данных → GloVe (работает лучше, чем Word2Vec на маленьких корпусах).