3,583 papers
arXiv:2510.11482 83 13 окт. 2025 г. FREE

LLM для предобработки текста: контекстное удаление стоп-слов, лемматизация и стемминг

КЛЮЧЕВАЯ СУТЬ
Традиционный метод удаляет стоп-слово "не" везде – отзыв "не понравилось" превращается в "понравилось". Смысл перевернут, анализ тональности даёт противоположный результат. LLM для предобработки позволяет удалять стоп-слова, лемматизировать и стеммить с учётом контекста задачи. Модель получает описание задачи в промпте и оценивает важность каждого слова для конкретной цели – "не" в sentiment analysis остаётся, в новостной статье удаляется. 97% точность для стоп-слов, +6% к F1-метрике классификаторов.
Адаптировать под запрос

TL;DR

LLM-based text preprocessing — использование больших языковых моделей для удаления стоп-слов, лемматизации (приведение к словарной форме: "бежал" → "бежать") и стемминга (отсечение до корня: "бежал" → "беж"). Вместо жёстких списков и правил LLM получает промпт с описанием задачи и несколькими примерами (few-shot learning), затем обрабатывает текст с учётом контекста.

Традиционные методы работают без учёта контекста: стоп-слово "не" удаляется везде, хотя для анализа тональности оно критически важно. Слово "leaves" лемматизируется одинаково в статье про ботанику ("лист") и HR-документе ("отпуск"), хотя это разные значения. Модель следует фиксированным спискам и правилам, которые не знают ни о задаче, ни о домене, ни о контексте предложения.

LLM решает это через явное указание контекста в промпте: для sentiment analysis можно написать "слово 'не' часто важно, оставь его", для ботанической статьи — "это текст о растениях". Модель анализирует окружение слова, тему документа и цель обработки, затем принимает решение для каждого слова отдельно. Исследование показало: LLM воспроизводят традиционные методы с точностью 97% для стоп-слов, 82% для лемматизации, 74% для стемминга, а ML-классификаторы на LLM-обработанных текстах показывают +6% F1-score против традиционной предобработки.

🔬

Схема метода

Одношаговый промпт:

ПРОМПТ: [описание операции] + [few-shot примеры] + [контекст задачи] + [текст для обработки]
 ↓
LLM: генерирует обработанный текст

Компоненты промпта:

  • Описание: "Стоп-слова — это артикли, предлоги, местоимения..."
  • Примеры: "например 'is', 'are', 'being', 'the', 'an'..."
  • Контекст: "задача — определить тональность твита (позитив/негатив)"
  • Исключения: "слово 'not' важно для задачи, оставь его"
  • Инструкция: "выведи только обработанный текст без пояснений"
🚀

Пример применения

Задача: Подготовить отзывы с Wildberries для классификатора тональности. Нужно убрать шум (стоп-слова), но сохранить важные для оценки слова типа "не понравилось".

Промпт:

Ты специализируешься на удалении стоп-слов из текста. 
Стоп-слова — это слова, не важные для обработки текста. 
Обычно это артикли, предлоги, местоимения, вспомогательные глаголы.
Например: 'это', 'был', 'были', 'я', 'ты', 'который', 'что', 'по', 'для'.

Контекст: нужно определить тональность отзыва (положительный/отрицательный).
В этой задаче слово 'не' часто важно — оставь его в тексте.

Убери стоп-слова из этого отзыва:
"Заказывала через приложение, пришло быстро. Качество не очень, 
но за эту цену норм. Рекомендую тем кто не привередливый."

Выведи только обработанный текст, без пояснений.

Результат: Модель выдаст текст с удалёнными общими стоп-словами ("через", "за", "тем", "кто"), но сохранит критичное "не очень" и "не привередливый". Традиционный метод удалил бы "не" везде, разрушив смысл. Формат вывода — чистый текст без технических блоков, готовый для следующего этапа пайплайна.

🧠

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

Слабость традиционных методов: они применяют универсальные правила без понимания контекста. Список стоп-слов для новостей включает "президент", "заявил" — но для политической классификации эти слова критичны. Лемматизатор видит слово "saw" и не знает, глагол это ("видел" → "see") или существительное ("пила" → "saw"), потому что не видит окружение. Стеммер обрезает "running" → "run" по правилу, но в документе про спортивную обувь "running shoes" и "runs fast" — это разные концепты, которые не должны схлопываться в один термин.

Сильная сторона LLM: модель обучена на миллиардах примеров использования слов в разных контекстах. Она умеет определять часть речи, значение, роль слова в предложении через анализ окружения. Когда видит "saw a tree" и "used a saw" — понимает разницу. Few-shot примеры в промпте дают модели паттерн поведения для конкретной задачи, а описание контекста ("это sentiment analysis") объясняет критерии важности слов.

Механика обхода слабости: промпт создаёт виртуальные правила через естественный язык. Вместо "если слово из списка → удали" LLM получает: "если слово не важно для определения тональности → удали". Модель применяет понимание контекста к задаче, описанной словами. Для каждого слова она оценивает: важно ли оно здесь, в этом предложении, для этой цели. Результат — динамическая фильтрация вместо статических списков.

Рычаги управления:

  • Few-shot примеры (количество и качество) → меньше примеров = быстрее, но может быть менее точно
  • Описание контекста ("это медицинские тексты", "это отзывы пользователей") → меняет критерии отбора
  • Явные исключения ("оставь 'не'", "сохрани числа") → точная настройка под задачу
  • Инструкция вывода ("только текст" vs "текст + объяснение") → контроль формата для парсинга
📋

Шаблон промпта

📌

Удаление стоп-слов

Ты специализируешься на удалении стоп-слов из текста.
Стоп-слова — это слова, не важные для обработки текста.
Обычно это артикли, предлоги, местоимения, вспомогательные глаголы.
Например: {примеры_стоп_слов}.

Контекст: {описание_задачи}.
{исключения_если_нужны}.

Убери стоп-слова из этого {тип_текста}:
"{текст}"

Выведи только обработанный текст, без пояснений.

Подставь:

  • {примеры_стоп_слов} — 8-12 примеров на языке текста
  • {описание_задачи} — "определить тональность", "извлечь ключевые темы"
  • {исключения_если_нужны} — "Слово 'не' важно — оставь его" (для sentiment)
  • {тип_текста} — "отзыва", "новости", "поста"
  • {текст} — твой текст для обработки
📌

Лемматизация

Ты специализируешься на лемматизации текста.
Лемматизация — это приведение слов к их словарной форме (лемме).
Например: глаголы "бежал", "бежит", "побежит" → лемма "бежать".
Существительные "компьютера", "компьютеру" → лемма "компьютер".

Контекст: {описание_контекста_документа}.

Лемматизируй этот {тип_текста}:
"{текст}"

Выведи только лемматизированный текст, без пояснений.

Подставь:

  • {описание_контекста_документа} — "это технический текст", "это разговорная речь"
  • {тип_текста}, {текст} — как выше
📌

Стемминг

Ты специализируешься на стемминге текста.
Стемминг — это приведение слов к базовой форме (корню).
Например: "программист", "программирование", "программа" → корень "программ".
Слова "доказательство", "доказал", "доказывает" → корень "доказ".

Примени стемминг к этому {тип_текста}:
"{текст}"

Выведи только обработанный текст, без пояснений.

🚀 Быстрый старт — вставь в чат:

Вот шаблон для [лемматизации/удаления стоп-слов/стемминга]. 
Адаптируй под мою задачу: [опиши свою задачу]. 
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит про язык текста, домен, цель обработки — потому что эти детали влияют на выбор стоп-слов и способ обработки. Она возьмёт структуру из шаблона и заполнит конкретными примерами для твоей задачи.

⚠️

Ограничения

⚠️ Стемминг — слабое место: LLM показывают 74% точности против традиционных алгоритмов и непоследовательны — одно слово могут обработать по-разному в разных текстах. Для стемминга традиционные методы (Porter, Snowball) пока надёжнее.

⚠️ Вычислительная стоимость: запрос к LLM в тысячи раз дороже чем вызов библиотечной функции. Оправдано для небольших объёмов или когда контекст критичен.

⚠️ Оптимально для низкоресурсных языков: если для языка нет качественных лемматизаторов — LLM даёт хороший результат из коробки. Для английского/русского традиционные инструменты работают отлично и быстрее.

⚠️ Зависимость от промпта: результат сильно зависит от качества описания задачи и примеров. Плохо сформулированный промпт может дать худший результат чем традиционные методы.

🔍

Как исследовали

Команда взяла 5 современных LLM (Gemma-2, Gemma-3, Llama-3.1, Phi-4, Qwen-2.5) и проверила их на 7 английских датасетах (Twitter, новости) плюс 5 языках (французский, немецкий, итальянский, португальский, испанский). Тестировали три операции: удаление стоп-слов, лемматизацию, стемминг.

Двойная проверка эффективности: (1) измерили насколько LLM повторяют традиционные методы — сравнили каждое слово с выводом NLTK/spaCy; (2) обучили три ML-классификатора (Naive Bayes, Decision Tree, Logistic Regression) на традиционно обработанных и LLM-обработанных текстах — измерили F1-score на реальных задачах классификации.

Ключевой дизайн: промпты содержали few-shot примеры (8-12 слов) и описание downstream-задачи ("определить тональность твита"). Например, для sentiment analysis явно указывали "слово 'not' важно — оставь его", чтобы LLM не удалила отрицание. Для неанглийских языков проверили оба варианта — промпт на английском и на целевом языке.

Результаты удивили: LLM превзошли традиционные методы в 25 из 35 комбинаций (датасет + операция) на английском. Особенно сильны в лемматизации — лучший результат во всех 7 датасетах. Улучшение классификации достигло +6% F1 (датасет AG News, удаление стоп-слов + лемматизация).

Неожиданная находка про языки: для неанглийских языков язык промпта почти не важен — английский промпт работал так же хорошо как native. Исключение — Llama-3.1 показала +20% улучшение с промптами на целевом языке (80% задач), хотя она изначально multilingual. Gemma-2 (обучена в основном на английском) показала лучшие результаты среди всех моделей даже на других языках.

Инсайт про контекст: LLM удаляют 13-33% слов, которые НЕ стоп-слова по традиционным спискам. Это не баг — это feature: модель убирает контекстно-избыточные слова. Например, "user" часто удаляется в Twitter-данных (и правильно — это шум для классификации). Традиционные методы слепо следуют списку, LLM понимают домен.

💡

Адаптации и экстраполяции

💡 Адаптация: гибридный подход — LLM + традиционные методы

Для больших объёмов: (1) традиционный метод на 90% текста, (2) LLM только на спорных случаях или сложном контексте.

Ты специализируешься на проверке предобработки текста.

Текст уже обработан автоматически: удалены стоп-слова из стандартного списка.
Твоя задача: найти ОШИБКИ — слова, которые:
- Удалены, но важны для задачи "{задача}"
- Оставлены, но являются шумом в контексте

Обработанный текст: "{текст}"
Оригинал: "{оригинал}"

Выведи:
1. Ложно удалённые (важные слова, которые убрали)
2. Ложно оставленные (шум, который остался)
3. Исправленную версию текста

Выгода: LLM работает как контроль качества — дешёвый базовый метод + точная коррекция сложных случаев. Снижение стоимости в 10-20 раз при сохранении качества LLM-обработки.

🔧 Техника: указание специфичных доменных стоп-слов

Вместо общих примеров — дай специфичные для домена стоп-слова в few-shot.

Было (общие примеры):

Например: 'is', 'are', 'the', 'an', 'and', 'I', 'which'...

Стало (доменные примеры):

Для медицинских текстов стоп-слова:
'пациент', 'исследование', 'данные', 'результат', 'показал', 'выявлено'
(часто встречаются, но не несут специфичного медицинского смысла)

Для tech-новостей стоп-слова:
'компания', 'заявил', 'сообщил', 'представил', 'анонсировал'
(канцелярит, не ключевые термины)

Эффект: модель понимает специфику домена через примеры → точнее определяет что важно именно для этой области. Few-shot learning натаскивает модель на паттерны конкретной предметной зоны.

💡 Экстраполяция: создание кастомного списка стоп-слов для задачи

Используй LLM для генерации списка доменных стоп-слов, затем применяй традиционный метод с этим списком.

Проанализируй корпус из {количество} {тип_текстов}.
Задача: {описание_задачи}.

Сгенерируй список из 50-100 стоп-слов для этой задачи:
- Слова, которые часто встречаются, но не важны для {задача}
- Канцелярит и шаблонные фразы специфичные для {домен}
- Технические термины, которые не несут смысловой нагрузки

Формат вывода: один список, каждое слово с новой строки.

Примеры текстов:
"{пример_1}"
"{пример_2}"
"{пример_3}"

Выгода: получаешь кастомный список за один запрос к LLM, затем используешь быстрый традиционный метод для обработки миллионов текстов. Лучшее из двух миров: контекстное понимание LLM + скорость традиционных методов.

🔗

Ресурсы

Investigating Large Language Models' Linguistic Abilities for Text Preprocessing


📋 Дайджест исследования

Ключевая суть

Традиционный метод удаляет стоп-слово "не" везде – отзыв "не понравилось" превращается в "понравилось". Смысл перевернут, анализ тональности даёт противоположный результат. LLM для предобработки позволяет удалять стоп-слова, лемматизировать и стеммить с учётом контекста задачи. Модель получает описание задачи в промпте и оценивает важность каждого слова для конкретной цели – "не" в sentiment analysis остаётся, в новостной статье удаляется. 97% точность для стоп-слов, +6% к F1-метрике классификаторов.

Принцип работы

Традиционные методы работают по жёстким спискам: видят "не" → удаляют везде, независимо от контекста. Слово "saw" лемматизируется одинаково в статье про инструменты ("пила") и тексте про наблюдения ("видел"), хотя это разные значения. LLM анализирует окружение слова, тему документа и цель обработки – решает для каждого слова отдельно, опираясь на описание задачи из промпта.

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

LLM обучена на миллиардах примеров использования слов в разных контекстах. Видит "saw a tree" и "used a saw" – понимает что первое глагол ("видел"), второе существительное ("пила"). Промпт с описанием задачи создаёт виртуальные правила через естественный язык – вместо "если слово из списка → удали" модель получает "если слово не важно для определения тональности → удали". Для каждого слова она оценивает: важно ли оно здесь, в этом предложении, для этой цели.

Когда применять

Предобработка текстов для ML-задач → конкретно для анализа тональности, классификации тем, извлечения ключевых слов, особенно когда контекст критичен для понимания важности слова. Отлично для низкоресурсных языков, где нет качественных лемматизаторов. НЕ подходит для больших объёмов данных – вычислительно дорого (запрос к LLM в тысячи раз дороже чем вызов библиотечной функции). Для стемминга традиционные алгоритмы (Porter, Snowball) пока надёжнее – LLM показывают только 74% точности и непоследовательны.

Мини-рецепт

1. Опиши операцию: Что делаем (удаление стоп-слов / лемматизация / стемминг) и что это значит – Стоп-слова — это артикли, предлоги, местоимения, вспомогательные глаголы
2. Дай примеры: 8-12 конкретных примеров на языке текста – Например: 'это', 'был', 'были', 'я', 'ты', 'который', 'что', 'по', 'для'
3. Укажи контекст задачи: Для чего готовишь текст – Контекст: нужно определить тональность отзыва (положительный/отрицательный)
4. Добавь исключения: Какие слова сохранить – В этой задаче слово 'не' часто важно — оставь его в тексте
5. Инструкция вывода: Как форматировать результат – Выведи только обработанный текст, без пояснений

Примеры

[ПЛОХО] : Убери стоп-слова из отзыва: "Заказывала через приложение, пришло быстро. Качество не очень, но за эту цену норм." – без контекста задачи модель может удалить критичное "не", смысл сломается
[ХОРОШО] : Ты специализируешься на удалении стоп-слов. Стоп-слова — это артикли, предлоги, местоимения. Например: 'это', 'был', 'я', 'ты', 'через', 'за'. Контекст: определение тональности отзыва. Слово 'не' важно — оставь его. Убери стоп-слова: "Заказывала через приложение, пришло быстро. Качество не очень, но за эту цену норм." Выведи только текст. – модель сохранит "не очень" и "не привередливый", удалит общие стоп-слова
Источник: Investigating Large Language Models' Linguistic Abilities for Text Preprocessing
ArXiv ID: 2510.11482 | Сгенерировано: 2026-01-11 23:40

Концепты не выделены.

📖 Простыми словами

LLM для предобработки текста: контекстное удаление стоп-слов, лемматизация и стемминг

arXiv: 2510.11482

Традиционная предобработка текста — это когда ты пытаешься починить швейцарские часы кувалдой. Старые методы вроде стемминга или лемматизации работают по тупым правилам: они просто кромсают слова, не глядя по сторонам. Для них слово saw — это всегда либо «пила», либо «видел», и им плевать, что в предложении речь про лесопилку. LLM-предобработка меняет саму логику: модель не просто режет буквы, она сначала читает и понимает, что вообще происходит в тексте, и только потом наводит порядок.

Это как нанять для сортировки почты не робота-манипулятора, который выкидывает всё тяжелее ста грамм, а живого секретаря. Робот выкинет и спам, и важную посылку с запчастями, потому что «правило есть правило». Секретарь же посмотрит на конверт, поймет контекст и решит, что мусор, а что — критически важная инфа. В этом и есть корень: LLM превращает механическую чистку в интеллектуальную фильтрацию, где смысл слова важнее его формы.

Вместо того чтобы скармливать коду бесконечные списки исключений, ты просто даешь модели промпт с примерами (few-shot learning). Что реально работает: модель видит разницу между «не понравилось» и обычным мусором, который стандартный список стоп-слов выкинул бы не глядя. Она понимает, что в отзыве на Wildberries слово «не» — это не шум, а центр смысла, без которого весь анализ тональности летит в трубу. Традиционный стеммер просто превратил бы всё в невнятные обрубки, а LLM сохраняет нужные связи, потому что видит контекст на 360 градусов.

Исследование проводили на классических задачах лингвистики, но принцип универсален. Эту логику можно и нужно втыкать везде: от подготовки данных для нейросетей до парсинга сложных юридических документов или медицинских карт. Везде, где обычный алгоритм лажает из-за многозначности слов, LLM-based preprocessing вытягивает результат за счет понимания нюансов. Жёсткие правила умирают, уступая место гибким моделям, которые не тупят на ровном месте.

Короче: хватит мучить тексты древними библиотеками, которые превращают живую речь в кашу из корней и суффиксов. Переход на LLM для очистки данных — это не просто мода, а способ перестать терять смысл еще на этапе подготовки. Да, это дороже по ресурсам, чем обычный скрипт, но зато на выходе ты получаешь чистый контент без потери сути. Кто продолжит юзать старые списки стоп-слов, тот так и будет гадать, почему его классификатор несет полную херню.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с