ChatGPT оставляет невидимые маркеры в тексте — как их найти и убрать

Эти символы выдают, что текст написал ИИ.

Что случилось

С обновлением модели ChatGPT до GPT‑5 во многих каналах про нейронки и технологии начали обсуждать так называемые невидимые маркеры, или водяные знаки, в сгенерированных текстах. Речь о непечатаемых символах Unicode, которые отображаются только в редакторах с определёнными настройками, а в самом ChatGPT и после вставки на какой-нибудь сайт не выводятся. 

⚡️Новости из мира гаджетов, обзоры, гайды и не только — в телеграм-канале «Технологии | Лайфхакер».

На самом деле эту проблему заметили давно: ещё в начале года пользователь Reddit жаловался, что стал часто находить в текстах непечатаемый символ U+2019, которым нейронка решила заменить обычный апостроф (‘). 

Тогда никакой реакции обществености не было, но из каждого утюга об этом заговорили уже в апреле — с релизом GPT-o3 и GPT-o4 mini. В блоге платформы для интеграции ИИ Rumi опубликовали статью о том, что в текстах от новых моделей полно неразрывных пробелов Unicode U+A0 (они же <0xa0>) и узких неразрывных пробелов U+202F.

Сверху — как текст выглядит в обычном редакторе, снизу — в редакторе с поддержкой непечатаемых символов. Скриншот: Rumi

Эти символы могли появляться в любом месте текста вне зависимости от того, есть ли рядом цифры или аббревиатуры. И в теории по ним можно было определить, что текст сгенерирован ИИ. Это вызвало беспокойство: вдруг OpenAI решила стрелять себе в ногу и маркировать нейросетевые тексты?

Оказалось, нет: уже спустя три дня OpenAI исправила проблему и все успокоились. 

Вот только с релизом GPT‑5 в августе, похоже, узкие неразрывные пробелы вернулись — и паранойя заиграла новыми красками. Но даже если сообщения об этом правдивы, подтвердить это нельзя, потому что OpenAI, видимо, опять всё починила. 2 сентября мы не смогли заставить бота выдать неразрывные пробелы ни на русском, ни на английском. Зато получилось найти кое-что другое: оказалось, что некоторые символы вроде $ и ~ чат-бот пишет как \$ и \~. Только в интерфейсе и обычных редакторах \ не отображается и всё выглядит нормально. 

Скриншот: Лайфхакер

Нечитаемый обратный слеш с Unicode уже не связан — дело в экранировании символов. Поскольку ~ и $ имеют специальное значение в языках программирования и разметке, \ перед ними ставится, чтобы дать машине понять: печатай символ как есть, ничего другого не выполняй. А вот это уже звоночек для каждого, кто посмотрит на текст внимательно. Ежу понятно: если текст писал человек, то экранировать он ничего не будет.

В общем, даже если какие-то дыры OpenAI латает, найти косяки машинного текста можно, даже не имея особых знаний и хитрых инструментов. Скорее всего, внимательным взглядом поймать ИИ на особенностях форматирования получится в любой версии модели, но это не означает, что нужно перепечатывать каждую букву вручную, боясь скрытых символов.

Как искать непечатаемые символы в текстах ChatGPT

Для этого есть удобный онлайн-инструмент от SoSci Survey. Работает он максимально просто: вставьте текст в большое поле сверху и нажмите Show me the characters. Непечатаемые Unicode-символы подсветятся фиолетовым, в том числе — неразрывные пробелы, о которых все беспокоились.

Скриншот: Лайфхакер

Если текст писал человек, который не использовал Unicode-символы намеренно, фиолетовой подсветки быть не должно.

Также непечатаемые символы отображаются в редакторах кода вроде VS Code и Sublime Text. Но учтите, что в обоих случаях не подсвечивается символ экранирования, поэтому \~ останется незамеченным. Придётся искать по странице: нажмите Ctrl + F или Cmd + F, далее введите нужную комбинацию в окошке поиска.

Как избавиться от непечатаемых символов

Если вы заметили всего пару лишних символов, их проще удалить прямо в редакторе или заменить на нужный знак с клавиатуры. А вот большие тексты с кучей непечатаемых символов вручную вычищать неудобно. Глаз замыливается, и риск что-то пропустить или удалить нужное увеличивается. В таком случае есть несколько вариантов:

  • Скопируйте текст из ChatGPT и вставьте в новый Google-документ. Затем скопируйте из документа и снова проверьте на непечатаемые знаки. Если что-то осталось, вставьте скопированный текст в тот же документ или другой редактор через Ctrl + Shift + V (Windows) или Cmd + Shift + V (Mac). Это уберёт форматирование вместе с непечатаемыми символами.
  • Используйте бесплатный веб-сервиc Humanize AI. Вставьте текст в поле слева, и очищенный вариант отобразится справа и сразу скопируется в буфер обмена. В настройках можно отключить Transform dashes и Transform quotes, чтобы сохранить длинные тире и кавычки-ёлочки соответственно.
  • Воспользуйтесь инструментом замены в текстовом редакторе: через поиск найдите, какие символы появились в тексте, и по одному настройте правила для их замены. Например, выберите ~ вместо \~. Это вариант для тех, кто хочет максимально сохранить форматирование или боится что-то упустить с другими методами. 
  • В редакторе кода выделите нужную комбинацию символов и нажмите Alt + F3. Это подсветит все точные совпадения в пределах файла. Нажмите Del, чтобы удалить сразу все. Повторите это действие с другими символами, если нужно.

Это самые простые методы, не требующие особых знаний. Но если вы хоть немного разбираетесь в программировании, то можете воспользоваться скриптами для удаления всех символов, кроме печатных. Такой скрипт вам спокойно предложит тот же ChatGPT, а варианты для нетипичных сценариев (например, требующих убрать только часть непечатаемых символов) можно поискать на Stack Overflow. Хотя это уже ближе к стрельбе из пушки по воробьям.

Обложка: limpreom / shutterstock / Лайфхакер
Если нашли ошибку, выделите текст и нажмите Ctrl + Enter

Это упрощённая версия страницы.

Читать полную версию
Ярослав Паламарчук
Боже, сколько можно положить безграмотность, вы же вроде бы просветительское издание. Никто нейронки специально "защитные" символы не вставляет, просто нейронки знают ГОСТы и ISO, в отличие от их пользователей. В любом дипломе, курсаче, научной статье или даже статье на Википедии после года, при названиях рейсов самолётов, при обозначениях типа 100 г., 1000 р. обязан ставиться неразрывный пробел. То же самое с длинным, коротким тире и дефисом.
Олег Макаров
Авторы вообще не знают разницы между словами "непечатный" и "непечатаемый" в русском языке.А на редакторах лайфхакер экономит.
Наталья Мурахтанова
Спасибо за внимательность, исправили.
Дарья Громова
Фишка в том, что есть примеры неразрывных пробелов в местах, где их человек бы не поставил, это уже не списать на соответствие правилам. Как и символы экранирования - или они тоже в ГОСТе есть?