3,583 papers
arXiv:2605.07186 74 8 мая 2026 г. FREE

Text Uncanny Valley: умеренно испорченный текст бьёт точность LLM сильнее, чем полностью разрушенный

КЛЮЧЕВАЯ СУТЬ
Парадокс: текст с 30–40% искажений ломает LLM хуже, чем текст, разобранный по буквам полностью. Кривая точности не падает линейно — она проваливается в яму посередине и частично восстанавливается при полном разрушении. Именно здесь живёт обычный OCR-мусор. Двухшаговый промпт разрывает задачу на очистку и анализ — модель сначала восстанавливает слова, потом работает с чистым текстом. Точность на совпадениях по тексту — с провала до нормы одним дополнительным запросом.
Адаптировать под запрос

TL;DR

Когда ты вставляешь в чат текст из PDF, OCR или скрейпинга — слегка искажённый текст опаснее, чем полностью нечитаемый. Это контринтуитивно, но задокументировано: с ростом количества случайных пробелов внутри слов точность LLM сначала падает, достигает дна, а потом — при почти полном разрушении слов — частично восстанавливается. Умеренный OCR-мусор оказывается в самой опасной зоне.

Исследователи назвали это Text Uncanny Valley — по аналогии с роботами из "Зловещей долины": робот, который почти человек, вызывает отвращение сильнее, чем явно механическая кукла. Текст, который почти нормальный, вводит модель в хаос сильнее, чем полностью разобранный по буквам. Причина: LLM переключается между двумя режимами обработки — пословным (нормальный текст) и побуквенным (полный хаос). А вот в середине — ни то ни другое не работает стабильно.

Практический вывод: если ты работаешь с текстом из PDF, сканов, веб-скрейпинга — не надейся, что "почти нормальный" текст пройдёт незаметно. Либо чисти до конца, либо предупреждай модель и используй двухшаговый подход: сначала восстановить слова, потом выполнять задачу.


📌

Схема явления

Уровень искажения текста:
НОРМАЛЬНЫЙ (0%)     → точность высокая
      ↓
ЛЁГКОЕ (10-20%)     → начинает падать
      ↓
УМЕРЕННОЕ (30-50%)  → ДНО (хуже всего) ← здесь живёт OCR-мусор
      ↓
СИЛЬНОЕ (70-80%)    → всё ещё плохо
      ↓
ПОЛНЫЙ ХАОС (100%)  → частично восстанавливается

Задача с corrupted текстом:
ШАГ 1: очистка текста → восстановленные слова (отдельный запрос)
ШАГ 2: основная задача → результат на чистом тексте

Оба шага выполняются через отдельные запросы в чате.


🚀

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

Задача: Ты получил от юриста договор аренды, вытащенный из скана через OCR. Нужно проверить ключевые условия: срок, цену, штрафные санкции. Текст выглядит примерно нормально, но кое-где слова "рассыпаны": "аренд атор", "обяза тельств", "рас торжени я".

Промпт (шаг 1 — очистка):

У меня текст из OCR-распознавания скана документа. 
В нём местами слова разбиты случайными пробелами внутри — 
например: "аренд атор", "обяза тельств", "рас торжения".

Восстанови все разбитые слова. Правило: 
если пробел стоит внутри слова (нет смысла делить) — убери его. 
Другое форматирование не трогай.

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

Текст:
[вставить текст договора]

Промпт (шаг 2 — анализ на очищенном тексте):

Проанализируй этот договор аренды. Выдели:
1. Срок аренды
2. Размер арендной платы и порядок изменения
3. Условия досрочного расторжения и штрафы
4. Красные флаги — условия, которые невыгодны арендатору

[вставить очищенный текст из шага 1]

Результат: На шаге 1 модель вернёт текст с восстановленными словами. На шаге 2 — структурированный анализ с конкретными пунктами договора. Без очистки та же модель могла бы неверно процитировать условия, пропустить пункты или "не увидеть" ключевые формулировки — и при этом ответить уверенно, как будто всё нормально.


🧠

Почему это работает (и почему проблема не очевидна)

Почему LLM ломается на "почти нормальном" тексте. Модели разбивают слова на части (токены) перед обработкой. "Международный" → один-два токена. "Меж ду народ ный" → восемь токенов. При умеренном искажении словарь модели становится максимально хаотичным: часть слов целые, часть разбита по-разному. Это пик неразберихи — модель не может устоявшимся способом сопоставлять слова с их смыслом.

Два режима обработки и провал между ними. При нормальном тексте LLM работает пословно — распознаёт токены как знакомые единицы. При полном разрушении ("м е ж д у н а р о д н ы й") переключается в побуквенный режим — читает символ за символом, как шифр. Оба режима дают стабильный (пусть и разный) результат. Беда — в зоне между ними: модель не может выбрать режим и ошибается сильнее, чем в крайних случаях.

Что это значит на практике. Привычные OCR-артефакты — "не очень плохой" текст с 20-40% искажений — это именно дно кривой. Пользователь видит "читаемый" текст, отправляет в чат и получает уверенный, но неточный ответ. Это опаснее явного мусора: на явном мусоре видно, что что-то не так, а здесь всё выглядит нормально.

Рычаги управления: - Провери источник текста перед вставкой — PDF через Ctrl+C, OCR, веб-скрейпинг = зона риска - Двухшаговый промпт (очистка → задача) снижает риск - Попроси модель сначала пересказать текст своими словами — если пересказ корявый, текст нужно чистить - Thinking mode не помогает systematically — не надейся на него как на защиту


📋

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

Шаблон для работы с подозрительным текстом (двухшаговый):

=== ШАГ 1: ОЧИСТКА ТЕКСТА ===

Этот текст получен из {источник: PDF / OCR / скрейпинга / скана}.
В нём могут быть случайные пробелы внутри слов.

Восстанови разбитые слова: убери пробелы, которые стоят внутри слова 
(не между словами). Другое форматирование не меняй.

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

{текст}

=== ШАГ 2: ОСНОВНАЯ ЗАДАЧА ===
(отправь отдельным сообщением после получения очищенного текста)

{задача}

Плейсхолдеры: - {источник} — откуда текст: PDF, скан, сайт - {текст} — полный текст для очистки - {задача} — что нужно сделать с очищенным текстом

Когда применять: - Текст из PDF через копирование - Результаты OCR-сканирования - Текст спарсенный с сайта - Документы от клиентов "в виде скана"


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

Вот шаблон двухшагового промпта для работы с OCR/PDF-текстом. 
Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы понять что именно нужно сделать с текстом.

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

LLM спросит про источник текста и конечную задачу — потому что от этого зависит, насколько агрессивно чистить и что именно анализировать на втором шаге.


⚠️

Ограничения

⚠️ Нет промпт-решения для самой проблемы: few-shot примеры в промпте не убирают "долину" — проблема на уровне токенизации, не стратегии. Чистить нужно сам текст, а не инструкцию для модели.

⚠️ Более сильные модели устойчивее: GPT-5.2 показывает наиболее плоскую кривую. Менее мощные модели падают глубже. Если работаешь на слабой модели с PDF-текстом — риск выше.

⚠️ Задачи без точного совпадения — меньше риска: если ты просишь "перескажи суть" — эффект слабее. Если ты просишь "найди конкретную фразу" или "сравни два документа" — риск максимальный.

⚠️ Thinking mode не спасает: включение расширенного режима рассуждений не убирает "долину" — особенно у Gemini. Дорого и часто не помогает.


🔍

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

Исследователи взяли три типа документов — юридические договоры, описания коммитов на GitHub и задачи по математике — и начали методично вставлять пробелы внутрь слов с разной плотностью: от 0% (чистый текст) до 100% (каждая буква отдельно). Одиннадцать уровней искажения, сотня документов на домен, восемь разных моделей.

Задача была конкретная: найди строки, которые удалили или добавили в документ. Казалось бы — чем больше мусора, тем хуже результат. Но у трёх из восьми моделей (GPT-5.2, Claude 4.5 Haiku, Gemini 3.0 Flash) кривая была U-образной: точность падала, достигала дна при 30-50% искажений, а потом росла обратно при высоких уровнях. Удивительный результат — потому что "хуже, чем 50% мусора" оказывался лучше, чем "50% мусора".

Чтобы проверить гипотезу о двух режимах, команда поставила четыре эксперимента. Few-shot примеры — вставили 3 примера с искажённым текстом в промпт. Не помогло, долина осталась. Регулярное искажение (пробел всегда после первого символа слова, предсказуемо) — U-кривая почти исчезла. Случайные пробелы между словами (не внутри) — не дали никакого эффекта вообще. Задачи на математику — слабые модели показали U-кривую, сильные — нет. Каждый эксперимент "закрывал" альтернативное объяснение и оставлял одно: дело в хаосе токенизации, а не в сложности самого текста.


📄

Оригинал из исследования (опционально)

Ключевой фрагмент с описанием гипотезы двух режимов:

"At low word_fragmentation_rate, subword tokenizers produce familiar multi-character 
tokens and the model reasons over words as coherent units. 

At word_fragmentation_rate = 1.0, every character is space-separated, 
collapsing the vocabulary to near-uniform single-character tokens; 
the model falls back to character-level pattern matching.

Both extremes are internally consistent. The problem arises at intermediate 
word_fragmentation_rate, where words are inconsistently affected: while some 
remain intact, others are partially or fully shattered into irregular fragments; 
the model cannot commit to either processing strategy."

Контекст: Авторы объясняют, почему производительность восстанавливается при полном разрушении текста — это не парадокс, а смена режима обработки.


💡

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

💡 Адаптация: диагностика "грязного" текста перед задачей

Прежде чем гнать важный документ в анализ — быстро проверь качество:

Прочитай этот текст и коротко ответь:
1. Есть ли слова, разбитые пробелами внутри? Приведи 2-3 примера если есть.
2. Насколько текст читаем от 1 до 5?
3. Нужна ли очистка перед серьёзной аналитикой?

{текст}

Модель скажет тебе сама, стоит ли идти на второй шаг очистки.


🔧 Техника: "нормализуй и выполни" — одним запросом

Если текст не очень длинный, можно объединить оба шага:

Выполни задачу в два этапа:

ЭТАП 1. Восстанови разбитые слова в тексте ниже (убери пробелы внутри слов).
ЭТАП 2. {задача} — используй восстановленный текст из Этапа 1.

Покажи оба этапа.

Текст: {текст}

Это работает для коротких текстов (до 1-2 страниц). Для длинных документов — лучше два отдельных запроса, чтобы не потерять качество очистки.


🔧 Экстраполяция: принцип "чистый контекст" перед сложной задачей

Тот же принцип работает шире, чем только для OCR. LLM хуже работает с "почти хорошим" входом, чем с явно плохим или явно хорошим. Это значит:

  • Полуструктурированные данные (таблица, скопированная из Excel через Ctrl+C, но съехавшая) → нормализуй перед анализом
  • Переведённый текст с артефактами → попроси сначала "сгладить" перевод
  • Транскрипция встречи с ошибками → очисти прежде чем извлекать задачи

Общий шаблон:

Шаг 1: "Привeди этот {тип данных} к нормальному виду. 
Убери артефакты: {список артефактов}. Выведи только результат."

Шаг 2: Основная задача на очищенных данных.

🔗

Ресурсы

The Text Uncanny Valley: Non-Monotonic Performance Degradation in LLM Information Retrieval

Авторы: Zekai Tong, Ruiyao Xu, Aryan Shrivastava, Chenhao Tan, Ari Holtzman

Университеты: University of Chicago, Northwestern University

Контакт: zekaitong@uchicago.edu

Связанные работы упомянутые в статье: - AbsenceBench [Fu et al., 2025] — задача обнаружения удалённых строк - NIAH (Needle in a Haystack) [Kamradt, 2023] — классический тест поиска в длинном контексте - Концепция "Зловещей долины" [Mori, 1970] — оригинальный термин из робототехники


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

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

Парадокс: текст с 30–40% искажений ломает LLM хуже, чем текст, разобранный по буквам полностью. Кривая точности не падает линейно — она проваливается в яму посередине и частично восстанавливается при полном разрушении. Именно здесь живёт обычный OCR-мусор. Двухшаговый промпт разрывает задачу на очистку и анализ — модель сначала восстанавливает слова, потом работает с чистым текстом. Точность на совпадениях по тексту — с провала до нормы одним дополнительным запросом.

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

LLM читает текст в одном из двух режимов. Нормальный текст — пословный режим: модель видит знакомые токены и сопоставляет их со смыслом. Полная каша из отдельных букв — побуквенный режим: модель переключается и читает как шифр, посимвольно. Оба режима дают стабильный результат, пусть и разный. Беда — в зоне между ними: часть слов целые, часть разбита по-разному. Модель не может выбрать режим и сбивается сильнее, чем в крайних случаях. Два шага принудительно разводят режимы: шаг 1 выводит текст из опасной зоны, шаг 2 работает уже в безопасном пословном режиме.

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

Причина — токенизация. «Международный» разбивается в 1–2 токена. «Меж ду народ ный» — уже в 7–8. При умеренном искажении словарь токенов становится максимально хаотичным: одни слова целые, другие разбиты по-разному в каждом предложении. Это пик неразберихи — модель тратит весь «бюджет внимания» на распознавание формы слов, а не на смысл. При полном разрушении модель хотя бы переключается в устойчивый побуквенный режим. В середине — не переключается, а зависает. Вот почему «почти читаемый» OCR-текст опаснее явного мусора: пользователь видит нормальный ответ, а внутри — тихая ошибка.

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

Любая работа с текстом из PDF (через копирование), OCR-сканов, веб-скрейпинга — особенно для задач точного поиска: «найди конкретную фразу», «сравни два документа», «выдели условия договора». Чем точнее нужно совпадение — тем выше риск. НЕ подходит как обязательный шаг для задач типа «перескажи суть» на чистом тексте — там эффект слабее и двух запросов не требуется.

Мини-рецепт

1. Проверь источник: PDF через «выделить-скопировать», скан, OCR, парсинг сайта — это зона риска. Чистый набранный текст — нет.
2. Шаг первый — отдай модели грязный текст на очистку: скажи откуда текст и попроси убрать пробелы внутри слов, не трогая остальное форматирование. Выведи только исправленный текст — без комментариев.
3. Получи чистый текст: забери результат из первого ответа.
4. Шаг второй — отдельным сообщением задай основную задачу: вставь уже очищенный текст и формулируй вопрос. Не смешивай очистку и анализ в одном промпте — это сводит двухшаговость к нулю.
5. Сомневаешься насчёт качества? После шага 1 попроси модель пересказать текст своими словами. Если пересказ корявый — проблема глубже, нужна ручная правка или другой инструмент OCR.

Примеры

[ПЛОХО] : Вот договор аренды из скана, вытащенный OCR. Найди срок аренды, цену и условия расторжения. [текст с «аренд атор», «обяза тельств»]
[ХОРОШО] : Шаг 1: Текст из OCR-скана. В нём слова разбиты случайными пробелами — «аренд атор», «обяза тельств». Восстанови разбитые слова: убери пробелы внутри слов. Другое форматирование не трогай. Только исправленный текст, без комментариев. [текст] Шаг 2 (отдельным сообщением, после получения чистого текста): Проанализируй договор аренды. Выдели: срок аренды, размер платы, условия расторжения и штрафы, условия невыгодные арендатору. [очищенный текст из шага 1]
Источник: The Text Uncanny Valley: Non-Monotonic Performance Degradation in LLM Information Retrieval
ArXiv ID: 2605.07186 | Сгенерировано: 2026-05-11 05:38

Проблемы LLM

ПроблемаСутьКак обойти
Умеренно повреждённый текст ломает модель сильнее, чем нечитаемыйВставляешь текст из PDF или OCR. Он выглядит почти нормально — пара "рассы панных" слов. Модель отвечает уверенно. Но ответ неверный. Парадокс: чем хуже текст, тем хуже точность — но только до определённой точки. Потом точность частично восстанавливается. Умеренный мусор (20–40% искажений) дают максимальную ошибку. При этом пользователь видит "читаемый" текст и доверяет ответу. Это опаснее явного мусора — там хотя бы видно, что что-то не такДвухшаговый запрос: сначала попроси модель убрать случайные пробелы внутри слов, потом давай основную задачу на очищенном тексте. Текст из PDF через копирование, OCR, скрейпинг — всё в зоне риска

Методы

МетодСуть
Двухшаговый запрос для OCR/PDF текста — убери артефакты перед задачейШаг 1 — очистка: Этот текст из [OCR / PDF / скана]. В нём могут быть пробелы внутри слов. Убери пробелы которые стоят внутри слова — не между словами. Другое форматирование не трогай. Выведи только исправленный текст. [текст] Шаг 2 — задача: отдельным сообщением после получения очищенного текста. Почему работает: убирает текст из "опасной зоны" умеренного повреждения. Модель получает либо нормальный текст, либо явный мусор — оба варианта лучше чем середина. Когда применять: PDF через копирование, результаты OCR, скрейпинг с сайтов, сканы документов. Не поможет: если текст повреждён на уровне символов (замены букв), а не только пробелами

Тезисы

ТезисКомментарий
Умеренное повреждение текста даёт максимальную ошибку — не максимальноеМодель обрабатывает текст двумя способами. Нормальный текст — словами как единицами. Полный хаос ("м е ж д у") — символ за символом. Оба режима дают стабильный результат. Умеренное искажение ломает оба режима сразу: часть слов целые, часть разбита по-разному. Модель не может выбрать режим и ошибается сильнее чем в крайних случаях. Применяй: не доверяй тексту который выглядит "почти нормально". Именно он в зоне максимального риска. Проверяй: попроси модель пересказать текст своими словами — если пересказ корявый, надо чистить
📖 Простыми словами

The Text Uncanny Valley: Non-Monotonic Performance Degradation inLLMInformation Retrieval

arXiv: 2605.07186

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

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

Исследователи назвали это эффектом зловещей долины текста. Работает это так: при нулевом шуме точность 100%, при появлении случайных пробелов внутри слов (типа «до го вор») точность резко летит вниз. Но когда пробелов становится слишком много и слова рассыпаются на атомы, точность внезапно частично восстанавливается. Модель перестает пытаться прочитать слова «в лоб» и переходит к анализу паттернов. Самый опасный уровень — это «умеренный мусор», когда текст еще кажется читабельным, но для нейронки он уже превратился в минное поле.

Этот принцип универсален для любой работы с данными: будь то юридические договоры, медицинские выписки или старые архивы. Если ты прогнал документ через OCR-распознавание и видишь, что текст «поплыл», не надейся, что нейронка «и так поймет». На самом деле, чем чище выглядит текст на первый взгляд, тем больше шансов, что модель пропустит критическую деталь или перепутает цифры в сумме штрафа. Мусор на входе — бред на выходе, и это правило работает здесь в самом извращенном виде.

Короче: если в твоем тексте есть «очепятки» и лишние пробелы, ты находишься в самой опасной зоне. Либо чисти текст до идеала с помощью регулярных выражений или специальных утилит, либо делай его совсем нечитаемым, чтобы модель перешла в режим реконструкции. Но лучше всего — никогда не доверяй LLM анализ документов с умеренными искажениями. Иначе ты получишь ответ, который выглядит логично, но по факту является полной фигней, рожденной в недрах сломанного токенизатора.

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

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

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