Pull to refresh

Мета-анализ Хабра 2024: так ли всё плохо?

Level of difficultyMedium
Reading time8 min
Views1.7K

Люди с самых древних времён интересовались тремя главными вопросами мироздания: почему горит огонь, какой формы земля и мёртв ли Хабр. На последний я постараюсь ответить. И если коротко - я понятия не имею. Быстрый сбор статистики и интерпретация результатов растянулась в несколько раз, ведь чем дальше тем становится всё больше и больше вопросов. А искать ответы - вообще и близко не моё любимое занятие, поэтому все данные будут опубликованы для открытого доступа и возможно кто-то сможет уменьшить количество этих чертовски важных вопросов.

Подготовка

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

  • Мета информация может быть использована в любом виде. Это касается id статьи, url, даты публикации, количества просмотров и т.д.

  • Название статьи и никнейм автора можно использовать для ссылки на конкретную публикацию или автора.

  • Любая информация из тела статьи не может использоваться. Вообще любая и в любом виде: ни скриншотов, ни цитат.

Время творить

Для всех действий использовался C# и библиотеки: MathNet, HtmlAgilityPack, ClosedXML, Microsoft.ML. Начало начал - парсинг нужных статей. Тут всё просто, берём типичную ссылку на статью - 'https://habr.com/ru/articles/' лепим в конце id нужной статьи. Этот id присваивается инкрементально, то есть увеличивается с каждой статьёй, поэтому ищем id стартовой статьи и последней, диапазон между ними парсим.

Первая проблема. Id присваивается не в момент публикации как казалось бы, а в момент первого сохранения черновика. А значит при выборке по id может получиться так что некоторые статьи могут быть опубликованы в 2025 году и попасть в выборку, а часть статей опубликованных в 2024 не попадут в выборку потому что их черновик был сохранён в 2023 году. С первыми особых проблем не было, можно просто увеличить конечный id и затем отсечь лишние статьи по дате публикации. А вот со вторым сложнее, тут как не крути если не скачивать вообще весь Хабр то часть статей в любом случае теряется. Если стартовый id брать по статье опубликованной самой последней в 2023 году то теряется ориентировочно не больше 2000 статей, если ориентироваться на статью опубликованную последней в середине 2023 года, то есть Июне то теряется уже не более 300 статей и это уже терпимо.

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

А ещё есть статьи которые были отброшены после парсинга и не попали в выборку из-за проблем с их структурой. Таких статей менее 10.

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

Структуризация статей

После парсинга я получил 59390 файлов в виде HTML кода. Ещё до сохранения оттуда было вырезано всё кроме тела класса 'tm-layout__wrapper' в котором лежит нужная мне информация. В итоге вся эта кипа статей весит всего чуть больше 3гб. Однако это всё ещё HTML код сохранённый в текстовиках. Поэтому его нужно привести в удобный для работы вид.

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

Однако 2 переменные не были получены непосредственно из статей. Конечно же это метрика на использование нейронки в тексте. Другая метрика отображает примерное время которое статья провела в виде черновика с момента первого сохранения до публикации (дата создания этой статьи - статья id которой больше текущей и дата публикации самая ранняя).

Тут также стоит отметить ещё одну метрику - рейтинг статьи. Он есть в статье, но его нету в необработанных данных полученных после парсинга, вероятно я закосячил с обрезкой HTML при сохранении и удалил лишнего. Поэтому это значение тоже высчитывается отдельно как разность плюсов и минусов на статье. Это не совсем тот же рейтинг что на сайте в виду того что на Хабре используется весовая система рейтинга.

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

Тренировка модели

Так как использовать онлайн сервисы для проверки статей на использование нейронок это банально чертовски долго, так что тут даже сомнения не было в том что делать. Изначально выбор был из двух вариантов: эвристическую оценку полученную на основе простых правил и паттерном или использование нейронки. Начал я с первого варианта, но его точность оказалась крайне низкой из-за множества ложноположительных результатов. Следом перешёл к другому варианту, найти уже обученную модель, удобную для использования и самое главное достаточно быструю, не вышло. Ну найти датасет и обучить собственную модель было легко. Датасет из данных 50 на 50 с текстом сгенерированным Chat Gpt 4 и текстом из Википедии и этих самых данных там более 3 миллионов штук. Использовалась регрессионная модель 'Sdca', на входе даём текст, на выходе получаем float число от 0 до 255, собственно чем ближе это число к 255 тем более нейронный текст.

Ну точнее это то как должно было быть. В реальности точность у модели получилась едва лучше чем у броска монетки. Значение в большинстве своём оказывалось в диапазоне между 200 и 250, а иногда выходило за верхний предел пробивая отметку в 328. Ну оно как минимум работает и делает это быстро, для большой выборки сойдёт и так. При этом здесь нет огромного количества ложноположительных результатов как в случае с эвристикой.

Статистика и немного самых самых

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

  • Всего охвачено id - 116,792 из них было доступно только 59,390 статей. То есть почти каждая вторая статья так и не будет опубликована, будет скрыта или удалена. В выборку попало 38,307 это те статьи которые были опубликованы в 2024 году.

  • Суммарное количество просмотров 325,841,040 . Всего было потрачено человеко-времени на просмотр статей: 4078 лет, 20 дней, 23 часа, 45 минут. Тут нужно оговориться что в реальности это число конечно меньше, но циферка всё равно поражает.

  • Самая длинная статья 127 минут.

  • Самый большой рейтинг на статье 638, самый маленький -93.

  • Самая просматриваемая статья 944,000 просмотров. (пока готовил статью количество просмотров ещё подросло, о вкусах конечно не спорят но...)

  • Статья которая пролежала в черновике дольше всех: 411 дней, 19 часов, 52 минуты и 22 секунды она ждала своего часа. И эта статья стоит не в начале выборки, а лишь на 20 месте, её id 773690, самый маленький id который попал в выборку - 754792 с 391 днём ожидания в черновике.

  • Автор с наибольшим количеством публикаций denis-19, за 2024 год опубликовал 2,993 статей или 7.813% от всего объёма статей.

  • Самый статейный месяц - декабрь, за него было опубликовано 3,669 статей.

  • Самые популярные типы публикаций по количеству статей: Обзор, Туториал, Перевод, Кейс, Из песочницы.

  • Самые популярные хабы по количество статей: Искусственный интеллект - 3628, Информационная безопасность - 3403, Программирование - 2664, Научно-популярное - 2423, Машинное обучение - 2192.

  • Самые популярные хабы по просмотрам: Информационная безопасность - 33,015,586, Искусственный интеллект - 26,965,434, Программирование - 26,344,123, Научно-популярное - 25,515,196, Карьера в IT-индустрии - 25,368,232.

  • Самые популярные теги по количеству статей: искусственный интеллект - 1,737, ии - 966, python - 899, нейросети - 758, информационная безопасность - 720.

  • Самые популярные теги по просмотрам: искусственный интеллект - 11,429,247, python - 8,587,806, youtube - 8,474,710, ruvds_статьи - 7,297,600, программирование - 6,983,877.

  • Количество статей с высокой вероятностью использование ИИ (значение больше 235) среди обычных авторов - 28.706%, среди компаний - 41.050%.

Корреляции

Здесь уже интереснее. Для расчётов будут использоваться Pearson и Spearman коэффициенты, первый ловит линейную зависимость, второй монотонную. Каждая метрика соотносится по очереди ко всем остальным, в результате получается отношение метрики А к метрике Б в виде числового значения от -1 до 1, где 1 указывает на сильную положительную корреляцию (метрики растут вместе), -1 указывает на сильную отрицательную корреляцию (при увеличении значения одной метрики значение другой падает), 0 означает что линейной зависимости между метриками нет.

Pearson

Spearman

Использование ИИ к рейтингу автора

-0,206

-0,336

Рейтинг автора к количеству тегов у статьи

-0,189

-0,112

Время чтения статьи к рейтингу автора

-0,167

-0,312

Использование ИИ к рейтингу статьи

0,182

0,260

Время чтения к рейтингу статьи

0,213

0,360

Использование ИИ к количеству хабов у статьи

0,227

0,266

Статья от компании к времени чтения

0,236

0,383

Время на чтения к количество сохранений статьи

0,310

0,644

Использование ИИ к времени чтения статьи

0,647

0,823

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

И всё это позволяет мне сказать следующее - использование нейронки для написания статьи приводит к значительному увеличению объёма текста фактически превращая статью в океан. При этом рейтинг таких статей незначительно выше среднего, а рейтинг самих автором незначительно ниже среднего чем у авторов которые не используют ИИ. К использованию ИИ значительно чаще прибегают компании чем обычные авторы. Если взглянуть на динамику использования ИИ по месяцам то можно увидеть сильный восходящий тренд к концу года: если в январе среднее значение коэффициента ИИ для одиночек и компаний было 222,84 и 230,16 то в декабре это уже 225,07 и 232,12. Это становится проблемой так такие статьи вообще вообще никак не модерируются, а статьи написанные через ctrl+c ctrl+v и рекламой тг канала в конце это уже даже не смешно. Вставляют нейронный текст без правок и корректировок, не проверяя факты, даже не читая нормально текст который они публикуют, банально не убирают метку с ссылок которые вставляет нейронка (ChatGPT при определённых обстоятельствах может добавлять в конец URL адреса - '?utm_source=chatgpt.com').

Заключение

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

Что касаемо поиска нелинейных корреляций и нормального сопоставления метрик - это то чем я скорее всего не буду заниматься. К моему разочарованию на c# разнообразие библиотек для математического анализа крайне скудное, использовать другой язык или реализовывать алгоритмы самостоятельно вообще не мой вариант. К тому же едва ли выборки в 38 тысяч статей хватит. Всё-таки подобный анализ займёт сильно больше времени и проводить его желательно для статей вышедших лет за 5-7. Помимо этого текущая погрешность не позволяет на такой маленькой выборке адекватно оценить динамику изменений, да и банально хочется просто иметь более точные результаты. Ну и раз на то пошло при таком качественном анализе просто жуть как надо сделать ещё пару штук: во-первых кроме как на 'ИИшность' я больше никак не анализировал текст статьи, а лишь опирался на мета-данные; во-вторых косяк с расчётом рейтинга статьи не очень приятное явление; в-восьмых нужны автогенерируемые графики, очень сложно смотреть на цифры и пытаться понять что происходит; помимо этого есть идея сопоставить динамику по медианным значениям метрик и новости в момент выхода статей, сделать такой своеобразный календарь; и напоследок - с большой выборкой открываются большие возможности и это по любому нужно использовать.

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

Ссылки
Tags:
Hubs:
+15
Comments25

Articles