|
Как компьютеры понимают текст? Модель TF–IDF: зачем нужна и как работает
Главная / Статьи / Аналитика / Как компьютеры понимают текст?
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
Как компьютеры понимают текст?
Публикуем тематический цикл статей, подготовленный Центром исследований и разработок Bell Integrator
Статья 2. Модель TF-IDE: зачем нужна и как работает
Оценка ценности слов и их ранжирование
Мы продолжаем путешествие по ключевым вехам эволюционного развития алгоритмов, приближающих компьютер к пониманию смысла текстов. В предыдущей статье на конкретных примерах мы показали необходимость появления метода, который позволил бы машине оценивать важность конкретных слов.
Простая метафора. В последние годы все мы постоянно сидим в Telegram и ежедневно читаем сотни постов из десятков каналов. И, конечно, стараемся выделить главное в этом нескончаемом потоке информации. Авторы часто используют кричащие заголовки — «СРОЧНО», «ЭТО НАДО ЗНАТЬ» и так далее — хотя по факту это лишь фоновый шум. Содержательность поста определяют совсем другие слова, например: «ипотека», «закон», «НДС». Они встречаются реже, и именно по ним с большей вероятностью можно понять, будет ли статья для вас полезной.
TF–IDF как раз предназначен для подобного анализа:
- TF: слово часто встречается в этом документе? Значит, оно здесь важно.
- IDF: слово часто встречается не только в этом документе, но и в других? Значит, оно менее информативно — его значимость уменьшается.
К примеру, возьмем фразу «Не могу войти, ошибка, помогите». Интуитивно по весам модель воспринимает ее примерно так:
- «помогите» → вес около нуля (слишком универсальное слово);
- «ошибка» → небольшой вес (встречается слишком часто);
- «войти» → больший вес (встречается не везде);
- «не могу» → небольшой вес (частая конструкция).
А если взять фразу «Не приходит смс-код при авторизации», то «смс-код» и «авторизация» обычно получают более высокий вес — это содержательные слова, а не фон.
Детальный разбор работы модели
Пусть есть коллекция документов любого размера — хоть 50, хоть 50 000. Введем две переменные: слово t и документ d.
TF (term frequency) — насколько слово важно внутри документа. Самый простой вариант:
tf(t, d) = count(t ∈ d)
Часто применяют нормирование по длине документа, чтобы исключить доминирование длинных текстов.
IDF (inverse document frequency) — насколько слово редкое в коллекции:
idf(t) = log ( N / df(t) )
где N — число документов, а df(t) — количество документов, в которых встречается слово t
Итоговый вес вычисляется так:
tfidf(t, d) = tf(t, d) · idf(t)
Почему используется логарифм? Потому что надо уменьшить вес редких слов. Без логарифмирования они могли бы оказывать чрезмерное влияние, что тоже нежелательно.
Объясним на цифрах. Допустим:
- слово встречается в 50% документов → уже не очень информативно;
- слово встречается в 5% документов → информативно;
- слово встречается в 0,5% документов → еще информативнее.
Но разница между 5% и 0,5% не должна делать слово в 10 раз важнее для всего ранжирования. Логарифм сглаживает этот эффект: он различает редкость, но не дает ей «перекосить» результаты.
На практике часто добавляют сглаживание, например:
idf(t) = log ( (N + 1) / (df(t) + 1) ) + 1
Это позволяет избежать деления на ноль и бесконечных значений, но все это в рамках идеи, описанной выше. Представив любой документ в виде вектора TF–IDF-весов, мы можем:
- искать похожие тексты (например, через косинусную близость);
- строить простые классификаторы;
- ранжировать документы под запрос.
Почему TF–IDF — это уже ранжирование?
Когда каждый документ представлен в виде вектора весов (TF–IDF по словам), мы можем сравнивать документы и запросы.
Типичный алгоритм:
- Запрос пользователя → преобразуем в TF–IDF-вектор.
- Считаем похожесть запроса и каждого документа.
- Сортируем по похожести → получаем ранжированный список результатов.
Для определения похожести чаще всего используют косинусную близость:
cos_sim(a, b) = (a · b) / (|a| · |b|)
У косинусного расстояния есть много полезных свойств. В данном случае оно используется, чтобы показать, что направление текстов примерно одно и то же.
Большой пример: что TF–IDF делает со словами «ошибка» и «смс»
Давайте представим, что у нас есть 40 обращений в техническую поддержку, по которым заведены 40 тикетов в ITSM-системе.
- слово «ошибка» встретилось в 32 обращениях ⇒ df(«ошибка») = 32 ⇒ idf маленький;
- слово «смс» встретилось в 5 обращениях ⇒ idf заметно больше;
- код ошибки «403» встретился в 2 обращениях ⇒ idf еще больше;
- слово «помогите» встретилось в 25 обращениях ⇒ idf маленький;
- слово «авторизация» встретилось в 6 обращениях ⇒ idf достаточно высокий.
В результате в обращении «Помогите с ошибкой авторизации. Не приходит смс с кодом для входа» ключевыми станут слова «смс», «вход», «код», «авторизация», а не «не», «помогите», «ошибка».
Если проводить аналогию, TF–IDF — это не сложнейший алгоритм понимания смысла текста, а скорее аккуратно организованная бухгалтерия.
Где сегодня используют этот подход?
TF–IDF был придуман достаточно давно, пережил несколько пиков популярности и сохранился практически в первозданном виде. При разумных вычислительных затратах он по-прежнему приносит много пользы.
Преимущества алгоритма:
- Дешево: практически не требует вычислений и данных.
- Быстро: работает сразу, без необходимости прогонять весь корпус слов.
- Хорошо объясним: всегда можно показать, какие слова сделали документ релевантным.
- Хорошая база: отличная отправная точка перед более сложными методами.
- Надежен: предсказуемо ведет себя на новых данных.
Области применения:
- Поиск по текстам: статьи, документы, заметки, корпоративные базы знаний, архивы.
- Поиск похожих документов: выявление дублей и близких по содержанию текстов.
- Классификация текста: использование TF–IDF как признаков для простых моделей (логистическая регрессия, линейные SVM).
- Рекомендательные системы: поиск похожих статей, постов, товаров по описанию.
- Контент-аналитика: выделение ключевых слов, сравнение групп текстов, тематические срезы.
Неужели все так хорошо?
Несмотря на простоту и надежность, у TF–IDF есть недостатки.
(1) Не понимает синонимы
Например, «покупка» и «приобретение» для него являются разными словами
В результате тексты об одном и том же могут оказаться далекими по косинусному расстоянию, если используются разные формулировки.
(2) Не различает омонимы
«Корзина» (баскетбольная) и «корзина» (в интернет-магазине) — одно слово, но два разных значения: один термин спортивный, другой связан с онлайн-продажами
TF–IDF может сблизить тексты из-за совпадения формы слова, игнорируя различие смыслов.
(3) Не чувствует контекста
К примеру, «я рекомендую» и «я не рекомендую» алгоритм воспринимает как схожие фразы, хотя их смысл противоположен.
(4) Переоценивает случайные редкие токены
Уникальный мусор типа «xzq12» (например, контрольная сумма архива) встречается один раз ⇒ IDF большой ⇒ модель полагает, что это главное слово документа. Хотя это просто артефакт без смысловой нагрузки.
Что в итоге?
Мы постепенно приближаемся к машинному пониманию текста, хотя до человеческого уровня еще далеко. Однако TF–IDF научился оценивать ценность слов: каждое слово получает свой вес. Модель умеет ранжировать и находить похожие тексты, но пока не умеет связывать смыслы.
В начало⇑
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
Комментарии отсутствуют
Комментарии могут отставлять только зарегистрированные пользователи
|