Я не испытываю ненависти ни к корпоративным блогам, как таковым, ни к большим языковым моделям в целом. А вот к мусорному контенту, созданному левой пяткой ради ссылок на сайт или телеграм-канал - испытываю, и еще как. И как раз вот тут встретились два одиночества - ленивые копирайтеры мусоропроизводители и генеративные сети. Получилась, как вы понимаете, вовсе не конфетка.
Долго работая с LLM и GPT, неизбежно начинаешь замечать характерные паттерны, обороты, формулировки, характерные для генеративного контента. Наткнувшись на очередную очевидно генеративную статью и убедившись, что из таких статей у компании состоит весь блог, я решила исследовать это дело подробнее и желательно - автоматически.
За подробностями, результатами, ужасом и даже кодом на VB.NET приглашаю под кат!
Безмозглолитератор
Итак, представим, что вы... ммм, копирайтер? Да нет, вы же не пишете текст руками и головой. Может, Оператор Нейросети? Нееет, не пойдет, вы же не умеете и не хотите хоть немножко постараться и сделать хорошо. Может, вы хотя бы котик и у вас лапки? Тоже нет, вы не милый и не пушистый. Как же вас назвать? А давайте спросим у GPT!

Ладно, сойдет. Для краткости будем писать БМЛ. Человек вы не очень хороший, но кушать все-таки хотите. Почему-то вас еще и берут на работу (платят мало, так что можно устроиться сразу во много мест, ведь кроме Левой Пятки у вас есть еще много частей тела, для серьезной работы не предназначенных).
В общем, сидите, ковыряете в носу. Прилетает задача "написать статью в блог про смену работы на Хабр". Вы не айтишник, понятия не имеете, что там и как, да и работать не хочется. Хорошо, что есть LLM, думаете вы, пусть вкалывают роботы!

Ага, что-то пишет! Но как будто бы введение коротковато, да и где-то краем уха вы слышали, что начинать надо обязательно с какой-нибудь истории, чтобы, понимаешь, зацепило!

Вооот, так гораздо лучше. Кстати, разметка-то Markdown, удобно вставлять на Хабр!

Но как-то маловато текста! За такое дадут разве что миску риса, а вы - БМЛ Заслуженный Повелитель Нейросетей и Мастер Копирайтинга - заслуживаете куда большего. Пусть роботы вкалывают активнее!

Отлично, отлично! Две секунды, а уже так много знаков! И вроде всё по делу, слова такие знакомые, программистские... А, мы вроде пишем про тестировщика? Пффф, да какая разница! Повторяем процедуру для других шагов, и статья готова.
Постойте-ка. Чего-то не хватает. Точно, нужна же картинка, Васян говорил на прошлой пьянке, что это повышает... Эх, не вспомнить. Но что-то повышает точно.

Вот, теперь отлично! Вы создали прекрасный пост за 5 минут, выглядит совсем, как настоящий, и при этом - совсем не устали, да голова тоже особенно не пригодилась.
Особенности GPT-стиля...
Попробуем посмотреть, что выделяет такие статьи.
-
Очень, очень большое количество воды и общих рассуждений. А что вы хотели получить, если попросили написать "что-нибудь" одной строчкой?
-
Если есть "истории" или "примеры", они шаблонны и характерны.
"Когда-то где-то там-то кто-то столкнулся с большой проблемой, но он не унывал, а благодаря своим лучшим качествам что-то сделал, и стало хорошо. Этот кто-то вдохновился и стало еще лучше! Вот так благодаря всему хорошему стало совсем хорошо. Конец." -
Относительно небольшие абзацы, обычно с заголовком - "шаги", "этапы", "преимущества и недостатки". В целом - много структуры и мало текста.
-
Списки, обязательно списки. Заголовок, пара предложений общими словами, список из 3-5 пунктов, каждый пункт в духе:
"Сделать бочку: Делать бочку позволяет вам лучше погрузиться в интернет среду"
"Изучить мурчание: Изучение мурчания помогает вам быть хорошим котом" -
Характерные речевые обороты и слова: "важно учитывать", "убедитесь, что", "существует множество", "рассмотрите возможность", "общайтесь, посещайте, участвуйте". Обтекаемые формулировки, повелительное наклонение. В общем-то эти обороты не уникальны для любых текстов, но тут их количество просто зашкаливает.
... и как их искать
Вообще, способов можно придумать много и разных. Мне в первую очередь бросается в глаза аномально большое количество двоеточий и пунктов списков, а подсчитать их плотность в среднем на статью - совсем несложно.
Еще идеи:
-
Можно посчитать среднюю длину пункта списка и разброс длины от средней, у нейронки разброс небольшой, у людей - больше.
-
Можно составить словарь характерных слов, и наоборот, слов, которые практически не встречаются в генерации. Если специально не попросить, нейронка слово "жопа" не напишет.
-
Можно посчитать концентрацию повелительных глаголов, как я уже писала, у GPT4 по каким-то причинам их заметный избыток.
-
Наконец, можно попросить GPT саму оценить статью с точки зрения генеративности, как увидите ниже, это неплохо работает.
Парсим и анализируем Хабр
Откроем DevTools в любимом браузере и походим по страничкам какой-нибудь компании. Для примера возьмем сам Хабр.

Удобно, что текущий интерфейс - SPA, который загружает список статей и сами статьи через API, где они доступны в приятночитаемом JSON. Легко находим нужный запрос, он имеет вид:
habr.com/kek/v2/articles/?company=habr&fl=ru&hl=ru&page=1&perPage=20

Внутри нас интересует узел "publicationIds", внутри которого - список идентификаторов статей. Таким же образом находим адрес, отдающий статьи целиком:
Для автоматизации этого дела напишем программку на VB.NET. Почему на нем? А я странная, мне нравится когда-то давным-давно начинала с бейсика, потом VB6, потом VB.NET, в котором синтаксического сахара и плюшевости долгое время было больше, чем в C#, да как-то так и прижилось.
Парсинг тривиален. HttpClient, Newtonsoft.Json для разбора JSON, Textify для преобразования HTML в plain text.

Комментировать особенно нечего. Последние две строчки - доли двоеточий и звездочек (в начале элемента списка после преобразования в текст).
Кроме таких простейших подсчетов, попробуем просто спросить GPT-4o, похожа ли статья на генеративную или нет, используя вот такой запрос:
"Оцени, написана ли статья человеком или GPT. Напиши только одно число от 0 до 100, где 0 - статья точно написана человеком. 100 - статья точно написана GPT."
Проверим, что результат - число от 0 до 100, если нет - спросим еще раз. Если не получилось за 5 раз - ну что же, не судьба, идем дальше. В конце сохраним полученные цифры в файл CSV.

Анализируем результаты

Сначала откроем получившиеся таблички и посмотрим глазами. Вот пример "плохого" корпоративного блога, в котором все или практически все статьи нагенерированы нейронкой. При этом их кто-то читает, хотя рейтинг плавает от нуля до десяти.
Средняя доля двоеточий: 0.28%
Средняя доля звездочек: 0.26%
Средняя оценка GPTшности с помощью самой GPT - 85% и очень равномерна.

К счастью, не все владельцы корпоративных блогов такие халтурщики, во многие из них статьи пишут живые авторы и эти блоги интересно читать, что легко заметить по оценкам - средняя: 70.
Средняя доля двоеточий: 0.25%
Средняя доля звездочек: 0.05%, в пять раз меньше
Средняя оценка GPTшности с помощью самой GPT - 40% и сильно плавает.

Доля двоеточий оказалась не так интересна, хотя и заметен больший разброс в "человеческом" блоге.

А вот со звездочками, они же - пункты списка, всё нагляднее. Любит GPT списки!

Зато GPT прекрасно опознает свое же творчество!
Такие дела

Мне кажется, всё довольно наглядно. Предлагайте или пробуйте свои метрики и признаки в комментариях.
Что с этим делать?
Если вы компания - владелец корпоративного блога - НЕ ПИШИТЕ в блог подобный мусор! Безмозглолитератора выгоните на мороз! У ваших статей низкий рейтинг - не потому, что блог не раскручен, не потому что конкуренты минусуют, а потому, что вместо статей - мусор. Который портит Хабр, Интернет и вашу репутацию.
Если вы читатель - не плюсуйте статьи, состоящие из воды и генеративного мусора, гоните и насмехайтесь над БМЛами! Не победим - хоть согреемся...
https://ufile.io/ninb90pf - исходники, вдруг кому нужны.
Автор: Александра