Игорь Градов
Игорь Градов
7 мин
ai

Нейротекст похож один на другой: как измерить шаблонность кодом до публикации

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

Нейротекст похож один на другой: как измерить шаблонность кодом до публикации

Ниже разберём, откуда берётся эта шаблонность, и покажу конкретные способы измерить похожесть нейротекста кодом, чтобы проверять материал до публикации, а не спорить о вкусах.

Почему это важно

Пока похожесть нельзя посчитать, разговор о том, шаблонный ли нейротекст, остаётся спором мнений. С числом на руках это становится проверкой, которую можно встроить в редакционный процесс перед каждой публикацией.

Проблема не в конкретной модели. Три независимых механизма сводят ответы языковых моделей к одному покрою, и все три работают одновременно. Источник фактов ниже: разбор основан на двух исследовательских работах 2023 года и практике промпт-инжиниринга (работы с промптами для управления выводом модели).

Почему нейросети выдают похожие тексты?

Декодирование. Модель на каждом шаге выбирает следующее слово из распределения вероятностей. При стандартных настройках температуры (параметр, который регулирует «смелость» выбора слов) и top-p (порог отсечения маловероятных вариантов) выигрывают самые вероятные продолжения. Два автора, попросившие «статью про продвижение в соцсетях», получают тексты одного покроя, даже если формулировки промптов немного отличались.

Дообучение на предпочтениях. Модели, которые доводят до диалогового режима через RLHF (обучение на обратной связи от людей, когда модель учат давать «правильные» ответы), становятся послушнее, но платят за это разнообразием. В работе «Understanding the Effects of RLHF on LLM Generalisation and Diversity» (Kirk и соавторы, 2023) это измерили отдельно: разнообразие выходов у таких моделей падает по сравнению с моделями после обычного дообучения (fine-tuning, обучение модели на ваших примерах под узкую задачу).

Сами пользователи. В эксперименте «Does Writing with Language Models Reduce Content Diversity?» (Padmakumar и He, 2023) люди писали эссе с помощью двух моделей. Нейротекст, созданный вместе с моделью, дообученной на предпочтениях, оказался менее разнообразным между авторами. С базовой моделью такого эффекта не нашли. Однообразие возникает не внутри одного текста, а между текстами разных людей, которые пользуются одним инструментом.

Три причины складываются: модель тяготеет к средним формулировкам, дообучение сужает коридор, а пользователи дают похожие промпты.

Что понадобится

  • Python 3.10+ (бесплатно, установка занимает 5 минут)
  • Библиотека datasketch (ставится командой pip install datasketch)
  • Корпус ваших текстов для калибровки (от 20 материалов)
  • 30 минут на настройку, дальше проверка нового текста занимает доли секунды

Пошаговая инструкция

Шаг 1. Измерьте похожесть двух текстов шинглами

Шинглы (перекрывающиеся цепочки из нескольких слов) и коэффициент Жаккара (доля общих цепочек среди всех) дают самый простой и честный результат. Цепочки из пяти слов ловят повторяющиеся обороты, но не срабатывают на случайно совпавшие пары слов.

import re

def shingles(text: str, n: int = 5) -> set[tuple[str, ...]]:
    words = re.findall(r"[а-яёa-z0-9]+", text.lower())
    return {tuple(words[i:i + n]) for i in range(len(words) - n + 1)}

def jaccard(a: str, b: str, n: int = 5) -> float:
    sa, sb = shingles(a, n), shingles(b, n)
    if not sa or not sb:
        return 0.0
    return len(sa & sb) / len(sa | sb)

Не берите порог из чужих статей. Возьмите пары текстов, которые вы сами считаете разными, и пары, которые считаете переписанными друг из друга. Посмотрите на распределение значений и проведите границу между ними. На коротких текстах коэффициент «шумит» сильнее, поэтому сравнивайте тексты сопоставимой длины.

Шаг 2. Проверяйте новый текст против всего архива через MinHash

Попарное сравнение быстро перестаёт работать: число пар растёт квадратично. MinHash сворачивает каждый текст в короткую подпись фиксированной длины, а индекс LSH (locality-sensitive hashing, метод быстрого поиска похожих объектов) сразу отдаёт кандидатов в «близнецы» без перебора всех пар.

from datasketch import MinHash, MinHashLSH

def signature(text: str, num_perm: int = 128) -> MinHash:
    m = MinHash(num_perm=num_perm)
    for sh in shingles(text):
        m.update(" ".join(sh).encode("utf-8"))
    return m

lsh = MinHashLSH(threshold=0.3, num_perm=128)
for doc_id, text in archive.items():
    lsh.insert(doc_id, signature(text))

suspects = lsh.query(signature(new_text))

Кандидатов, которых вернул индекс, перепроверьте точным коэффициентом Жаккара из первого шага. Подписи архива считайте один раз и храните рядом с текстами.

Шаг 3. Проверьте структуру, а не только слова

Два нейротекста могут не иметь ни одной общей цепочки из пяти слов и при этом читаться как близнецы: одинаковый ритм коротких абзацев, одни и те же первые слова у предложений, списки вместо рассуждений.

from collections import Counter
from statistics import pstdev

def structure(text: str) -> dict:
    paras = [p.strip() for p in text.split("\n\n")
             if p.strip() and not p.startswith(("#", "-", "*"))]
    sents = [s for p in paras
             for s in re.split(r"(?<=[.!?])\s+", p) if s]
    lengths = [len(s.split()) for s in sents]
    starts = Counter(
        s.split()[0].lower() for s in sents if s.split()
    )
    return {
        "one_sentence_paragraphs":
            sum(len(re.split(r"(?<=[.!?])\s+", p)) == 1
                for p in paras) / max(1, len(paras)),
        "sentence_length_spread":
            pstdev(lengths) if len(lengths) > 1 else 0.0,
        "repeated_openers":
            sum(n for w, n in starts.items()
                if n >= 3 and len(w) > 3),
    }

Разброс длины предложений у живого автора обычно больше, чем у нейротекста: человек чередует длинные периоды и короткие реплики, а модель тяготеет к средней длине. Доля абзацев из одного предложения и повторяющиеся зачины выдают рубленый ритм, который читатели уже научились узнавать.

Абсолютные значения сравнивайте с эталонами из своей ниши, а не с универсальными нормами.

Как это применить

Допустим, вы ведёте канал на Дзене про маркетинг. Попросили ChatGPT написать два поста: «Как продвигать товар в Telegram» и «Продвижение бизнеса через мессенджеры». Прогнали оба через функцию jaccard() и получили коэффициент 0.18. Затем сравнили структуру: one_sentence_paragraphs у обоих текстов 0.6, sentence_length_spread около 4.2 (у ваших авторских текстов обычно от 7 до 12). Вывод: формулировки различаются, но структура одинаково «роботизированная». Прежде чем публиковать, стоит разбить ритм: добавить длинное рассуждение, убрать часть списков, поменять зачины предложений.

Частые ошибки

Порог «из интернета». Чужой порог Жаккара не подходит к вашему корпусу. Тексты про финансы и тексты про кулинарию имеют разную базовую похожесть из-за профессионального словаря. Калибруйте на своих материалах.

Сравнение текстов разной длины. Короткий пост на 300 слов и лонгрид на 3000 слов дадут низкий коэффициент Жаккара просто из-за разницы объёмов, а не содержания. Сравнивайте сопоставимые форматы.

Только словесная похожесть. Шинглы не видят совпадение мысли, пересказанной другими словами. Для этого нужны векторные представления текстов (эмбеддинги) и косинусная близость, но это отдельная задача, которую источник упоминает, но не раскрывает полностью.

«Я перефразирую и всё». Перефразировка снижает коэффициент Жаккара, но не меняет структуру. Если все ваши тексты начинаются вводным абзацем с общим тезисом, затем идут три подзаголовка и вывод-пересказ, читатель всё равно почувствует шаблон.

Что делать с этим прямо сейчас, по ролям

Автору Дзена. Встройте проверку нейротекста онлайн или через скрипт перед каждой публикацией. Даже без кода: откройте два своих последних поста, написанных с помощью ИИ, и проверьте вручную, не начинаются ли предложения одинаково и не совпадает ли ритм абзацев.

Копирайтеру и редактору. Соберите корпус из 20 и более материалов вашей ниши и откалибруйте порог. Это инвестиция на час, которая потом экономит споры с заказчиком о «непохожести на ИИ».

Маркетологу и предпринимателю. Если в вашей команде несколько авторов пользуются одной моделью (ChatGPT, YandexGPT, GigaChat), лента бренда заполняется текстами-близнецами. Попросите авторов менять температуру, давать разные промпты и проверять тексты друг против друга через MinHash.

Мнение редакции dzen.guru

Я тестирую нейросети каждый день и вижу, как быстро Дзен-лента превращается в «одну статью с разными заголовками». Инструменты из этого разбора не требуют глубоких знаний программирования: скрипт на 15 строк и полчаса калибровки. На мой взгляд, через полгода проверка нейротекста на шаблонность станет такой же нормой, как проверка на уникальность через text.ru или «Адвего». Честная оговорка: шинглы и структура не ловят смысловые повторы, для этого нужны эмбеддинги, а это уже посложнее. Но даже базовая проверка отсечёт самые очевидные «клоны» до того, как их заметит читатель.

Проверьте свои тексты на шаблонность

В dzen.guru мы собираем инструменты для авторов, которые работают с нейросетями. Попробуйте наши гайды по промпт-инжинирингу и проверке нейротекста онлайн.

Перейти в dzen.guru

Три скрипта, полчаса настройки и честный корпус своих текстов для сравнения. Этого достаточно, чтобы перестать гадать «похоже ли на робота» и начать проверять числом.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

Читайте также

Полтора месяца ускорял MoE на GTX 1660 SUPER: штатный флаг llama.cpp выиграл в 2,44 раза
ai

Полтора месяца ускорял MoE на GTX 1660 SUPER: штатный флаг llama.cpp выиграл в 2,44 раза

Компания gpt‑oss выпустила модель, которую энтузиаст полтора месяца разгонял на домашнем стенде с GTX 1660 SUPER и 6 ГБ видеопамяти, и главный результат…

6 мин
Заменит ли ИИ аналитиков данных: Сбер собрал конвейер из бесплатных инструментов за полчаса
ai

Заменит ли ИИ аналитиков данных: Сбер собрал конвейер из бесплатных инструментов за полчаса

Компания СберУниверситет (подразделение Сбера, занимающееся образованием и развитием компетенций) описала рабочий конвейер, который позволяет аналитикам…

5 мин
Централизуем использование ИИ с помощью Agentgateway: один шлюз вместо десятка конфигов
ai

Централизуем использование ИИ с помощью Agentgateway: один шлюз вместо десятка конфигов

Agentgateway собирает все обращения к языковым моделям и MCP-серверам (серверам, через которые ИИ-агенты получают доступ к внешним инструментам) в одну точку,…

5 мин