Хабрахабр

Совершеннолетняя журналистика: от России до Кремля

Анализ публикаций Lenta.ru за 18 лет (с сентября 1999 по декабрь 2017 гг.) средствами python, sklearn, scipy, XGBoost, pymorphy2, nltk, gensim, MongoDB, Keras и TensorFlow.

Автор любезно предоставил 3 гигабайта статей в удобном формате, и я решил, что это прекрасная возможность протестировать некоторые методы текстовой обработки. В исследовании использованы данные из поста «Анализируй это — Lenta.ru» пользователя ildarchegg. Заодно, если повезёт, узнать что-то новое о российской журналистике, обществе и вообще.

Содержание:

MongoDB для импорта json в python

Поэтому сначала импортнул в MongoDB, а уж потом через MongoClient из библиотеки pymongo загрузил массив и пересохранил в csv по кускам. К сожалению, json с текстами оказался немного битый, для меня некритично, но python отказался работать с файлом.

запускать базу пришлось командой sudo service mongod start – есть и другие варианты, но они не сработали; 2. Из замечаний: 1. mongoimport – отдельное приложение, из монго-консоли не запускается, только из терминала.

Период меньше года использовать не планирую, надеюсь, на корректности выводов скажется не сильно. Пропуски в данных равномерно распределены по годам.

Очистка и нормализация текста

MorphAnalyzer). Перед непосредственным анализом массив нужно привести к стандартному виду: удалить специальные символы, перевести текст в нижний регистр (строковые методы pandas прекрасно справились), удалить стоп-слова (stopwords.words('russian') из nltk.corpus), вернуть словам нормальную форму с помощью лемматизации (pymorphy2.

Без огрехов не обошлось, например Дмитрий Песков превратился в «дмитрий» и «песок», но в целом результатом я остался доволен.

Облако тегов

Выведем 50 наиболее частотных слов, которые употребляли журналисты Ленты с 1999 по 2017 год, в виде облака тегов. В качестве затравки посмотрим, что из себя представляют публикации в самом общем виде.

«Риа новость» (самый популярный источник), «миллиард доллар» и «миллион доллар» (финансовая тематика), «настоящее время» (речевой оборот, свойственный всем новостным сайтам), «правоохранительный орган» и «уголовный дело» (криминальные новости), «премьер министр» и «владимир путин» (политика) – вполне ожидаемая стилистика и тематика для новостного портала.

Тематическое моделирование на основе LDA

LDA (тематическое моделирование методом латентного размещения Дирихле) автоматически выявляет скрытые темы (набор слов, которые встречаются совместно и наиболее часто) по наблюдаемым частотам слов в статьях. Вычислим самые популярные темы для каждого года с помощью LDA из gensim.

Краеугольным камнем отечественной журналистики оказались Россия, Путин, США.

С 2008 по 2009 года на первое место вышла экономика: процент, компания, доллар, рубль, миллиард, миллион. В отдельные годы эта тематика разбавлялась Чеченской войной (с 1999 по 2000 гг.), 11-м сентября – в 2001 г., Ираком (с 2002 по 2004 гг.). часто писали о Каддафи. В 2011 г.

в России начались и продолжаются годы Украины. С 2014 по 2017 гг. Пик пришёлся на 2015 г., потом тренд пошёл на спад, но всё ещё продолжает держаться на высоком уровне.

Интересно, конечно, но ничего такого, о чем бы я не знал или не догадывался.

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

Самым интерпретируемым вариантом оказался Топ-5:

  1. Криминал (мужчина, полиция, произойти, задержать, полицейский);
  2. Политика (Россия, Украина, президент, США, глава);
  3. Культура (спиннер, гнойный, instagram, рамбнуть – да, вот такая у нас культура, хотя конкретно эта тема получилась довольно смешенной);
  4. Спорт (матч, команда, игра, клуб, спортсмен, чемпионат);
  5. Наука (учёный, космический, спутник, планета, клетка).

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

Однако пик популярности политических материалов пройден в 2014 г., сейчас их доля снижается, растёт вклад в информационную повестку Криминала и Спорта. Политика получилась самой популярной – под 80% всех публикаций.

Топовые подрубрики удалось более-менее корректно выделить с 2013 года. Проверим адекватность тематических моделей, используя подрубрики, которые указали редакторы.

Особых противоречий не замечено: Политика стагнирует в 2017 г., Футбол и Происшествия растут, Украина по-прежнему в тренде, с пиком в 2015 г.

Предсказание популярности: XGBClassifier, LogisticRegression, Embedding & LSTM

В качестве целевой переменной я взял количество репостов на Фейсбук за 2017 год. Попытаемся понять, можно ли по тексту предсказать популярность статьи на Ленте, и от чего эта популярность вообще зависит.

статей за 2017 г. 3 тыс. материалов с самым большим количеством репостов получили метку «самые популярные». репостов на Fb не имели – им присвоен класс «непопулярные», 3 тыс.

публикаций за 2017 г.) был разбит на унограммы и биграммы (слова-токены, как одиночные, так и словосочетания из двух слов) и построена матрица, где колонками являются токены, рядами – статьи, а на пересечении – относительная частота вхождения слов в статьи. Текст (6 тыс. Использованы функции из sklearn – CountVectorizer и TfidfTransformer.

Подготовленные данные были поданы на вход XGBClassifier (классификатор на основе градиентного бустинга из библиотеки xgboost), который через 13 минут перебора гиперпараметров (GridSearchCV при cv=3) выдал точность на тесте 76%.

LogisticRegression) и через 17 секунд получил точность в 81%. Потом я использовал обычную логистическую регрессию (sklearn.linear_model.

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

Перевёл слова в числа с помощью one_hot из keras, привёл все статьи к одинаковой длине (функция pad_sequences из keras) и подал на вход LSTM (свёрточная нейронная сеть, using TensorFlow backend) через слой Embedding (чтобы сократить размерность и ускорить время обработки). Как дань моде немного потестил нейронные сети.

Совсем не предел, но сильно заморачиваться в данном случае нет смысла. Сеть отработала за 2 минуту и показала точность на тесте 70%.

Как показывает опыт, алгоритмы классификации хорошо работают при разнообразии стилистики, – на авторских материалах, другими словами. Вообще, все методы выдали сравнительно небольшую точность. На Lenta.ru такие материалы есть, но их очень мало – менее 2%.

И популярность новостей определяет не сам текст и даже не тема как таковая, а их принадлежность к восходящему информационному тренду. Основной массив написан с использованием нейтральной новостной лексики.

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

Изучение объектов с помощью Word2Vec

В качестве завершения хотел провести сентимент-анализ – понять, как журналисты относятся к наиболее популярным объектам, которые они упоминают в своих статьях, меняется ли отношение со временем.

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

Выбрал статьи, в которых они упомянуты, перевёл текст в многомерное векторное пространство (Word2Vec из gensim.models) и спроецировал на двумерное с помощью метода Главных компонент. В качестве теста взял Украину (2015 vs 2017) и Путина (2000 vs 2017).

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


Что заметил.

всегда появлялся в контексте с Россией и выступал с обращениями лично. Путин образца 2000 г. президент РФ превратился в лидера (чтобы это ни значило) и дистанцировался от страны, теперь он, если судить по контексту, – представитель Кремля, который общается с миром через своего пресс-секретаря. В 2017 г.

Украина-2017 фигурирует преимущественно в контексте переговоров между официальными лицами, и у этих лиц появились конкретные имена. Украина-2015 в российских СМИ – война, бои, взрывы; упоминается обезличено (Киев заявил, Киев начал).

...

Желающие могут посмотреть самостоятельно. Заниматься интерпретацией полученной информации можно довольно долго, но, как мне думается, на данном ресурсе это оффтоп. Код и данные прилагаю.

Ссылка на скрипт

Ссылка на данные

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Проверьте также

Закрыть
Кнопка «Наверх»
Закрыть