Сгенерировать дёшево, вычистить дорого: как я искал следы ИИ на сайте из 2000 страниц

Я создал сайт с удивительными фактами об арт искусстве artatlas.site Там около 2000 страниц на четырех разных языках, и делал я их вместе с нейросетью. Но сейчас я понял, что очень сильно пахнет ИИ от этого сайта и решил это исправить.
Я понял, что отсутствует душа и какая-то невербальная составляющая, когда увидел эти шаблонные фразы.
Признак | Сколько нашлось |
|---|---|
Абзацы, повторяющиеся на 50+ страницах (RU / EN / ES / FR) | 1019 / 773 / 773 / 773 |
Одинаковые казённые заголовки | 722 страницы на каждом языке |
Пустой слот «живописец» в панели художника | 428 страниц |
Конструкция «не X, а Y» (RU) | 887 предложений |
Длинное тире (RU) | 15,2 на 1000 слов |
# фрагменты, повторяющиеся на 50+ страницах одного языка
from collections import Counter
counts = Counter()
for page in pages_of_language:
for para in set(extract_paragraphs(page)):
counts[normalize(para)] += 1
boilerplate = {p for p, n in counts.items() if n >= 50}
CONTRAST = r"\b[Нн]е\s[^.,;:!?—<]{1,70},\s+а\s" # «не X, а Y»
NOT_JUST = r"\bне просто\b|\bне столько\b"Почему нельзя просто заменить регуляркой
Хотелось, чтобы сайт был человеческим, и мы говорим об искусстве. Значит, мы должны говорить от лица человека.
Было | Стало |
|---|---|
Кипарис слева — не декорация, а символ смерти в средиземноморской культуре. | Кипарис слева в средиземноморской культуре считается символом смерти. |
Такая идеализация не ошибка наблюдения, а ядро замысла. | Идеализирует его Давид сознательно, в этом и состоит замысел. |
Не спокойная трапеза, а волна человеческих реакций (заголовок) | Волна человеческих реакций |
Язык | «не X, а Y» и аналоги: до → после |
|---|---|
RU | 887 → 398 (549 правок на 218 страницах, остальное — факты и цитаты) |
EN | 83 → 36, «not just / merely» 54 → 15 |
ES | 267 → 101 |
FR | 285 → 149 (много ложных срабатываний) |
Дизайн тоже выдаёт нейросеть
Ну и, конечно же, классический дизайн Ии, где читается тысячу похожих сайтов, и невозможно смотреть на это. И думаю, со временем будет еще сложнее.
И главное, Ии обязательно ошибется.
Инструмент | Что нашёл | Масштаб |
|---|---|---|
html-validate | <noscript> Метрики с <div> внутри <head>: canonical, hreflang и robots уезжают в <body> | 2030 страниц |
html-validate | aria-label на <div> без роли | 1265 страниц |
linkinator | внешних ссылок / «битых» / из них 403 и 429 (защита от ботов) | 1374 / 420 / 286 |
linkinator | ссылки, сломанные машинным переводом: American_Gothique, Titien, en.wikipedia.org/wiki/Марк_Шагал | 87 |
npm install -g html-validate linkinator
html-validate index.html masterpieces/*/index.html
linkinator http://127.0.0.1:8772/links.html --concurrency 8 --retryЧто получилось
Что | До | После |
|---|---|---|
Шаблонные абзацы (RU / EN / ES / FR) | 1019 / 773 / 773 / 773 | 0 |
«не X, а Y» в RU | 887 | 398 |
<noscript> в <head> | 2030 страниц | 0 |
Внешние 404 | ~100 | исправлены |
Сейчас я произвел эти изменения и позже выложу метрики до и после. Где-то через неделю я дополню эту статью.
[Одна ссылка как пример «после», например разбор «Менин»: https://www.artatlas.site/masterpieces/meniny/]
KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.