Повнолітня журналістика: від Росії до Кремля

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

 

 

У дослідженні використані дані з посту «Аналізуй це Lenta.ru» користувача ildarchegg. Автор люб’язно надав 3 гігабайти статей у зручному форматі, і я вирішив, що це прекрасна можливість протестувати деякі методи текстової обробки. Заодно, якщо пощастить, дізнатися щось нове про російській журналістиці, суспільстві і взагалі.

 

Зміст:

 

  • MongoDB для імпорту json в python
  • Очищення і нормалізація тексту
  • Хмара тегів
  • Тематичне моделювання на основі LDA
  • Пророкування популярності: XGBClassifier, LogisticRegression, Embedding & LSTM
  • Вивчення об’єктів за допомогою Word2Vec

 

MongoDB для імпорту json в python

 

На жаль, json з текстами виявився трохи битий, для мене не критично, але python відмовився працювати з файлом. Тому спочатку импортнул в MongoDB, а вже потім через MongoClient з бібліотеки pymongo завантажив масив і пересохранил в csv по шматках.

 

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

 

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

 

 

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

 

Перед безпосереднім аналізом масив потрібно привести до стандартного вигляду: видалити спеціальні символи, перевести текст в нижній регістр (рядкові методи pandas чудово впоралися), видалення стоп-слова (stopwords.words(‘ukrainian’) з nltk.corpus), повернути словами нормальну форму з допомогою лематизації (pymorphy2.MorphAnalyzer).

 

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

 

Хмара тегів

 

В якості затравки подивимося, що з себе представляють публікації в самому загальному вигляді. Виведемо 50 найбільш частотних слів, які вживали журналісти Стрічки з 1999 по 2017 рік, у вигляді хмари тегів.

 

 

«Риа новину» (найпопулярніший джерело), «мільярд долар» і «мільйон долар» (фінансова тематика), «нині» (мовний зворот, властивий всім новинним сайтам), «правоохоронний орган» і «кримінальний справа» (кримінальні новини), «прем’єр міністр» та «володимир путін» (політика) – цілком очікувана стилістика і тематика для новинного порталу.

Читайте також  Підсилювачі низької частоти класів: А, B, AB, D, G, H

 

Тематичне моделювання на основі LDA

 

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

 

Наріжним каменем вітчизняної журналістики виявилися Росія, Путін, США.

В окремі роки ця тематика розбавлялася Чеченської війною (з 1999 по 2000 рр.), 11-му вересня – у 2001 р., Іраком (з 2002 по 2004 рр..). З 2008 по 2009 року на перше місце вийшла економіка: відсоток, компанія, долар, рубль, мільярд, мільйон. У 2011 р. часто писали про Каддафі.

З 2014 по 2017 рр .. в Росії почалися і тривають роки України. Пік припав на 2015 р., потім тренд пішов на спад, але все ще продовжує триматися на високому рівні.

 

 

Цікаво, звичайно, але нічого такого, про що б я не знав або не здогадувався.

 

Змінимо трохи підхід – виділимо топові теми за весь час і подивимося, як змінювався їх співвідношення з року в рік, тобто вивчимо еволюцію тим.

 

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

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

Далі візьмемо кожну статтю і подивимося, з якою ймовірністю вона відноситься до тієї чи іншої теми, в результаті всі матеріали будуть поділені на п’ять груп.

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

Читайте також  Як консольні війни стимулювали прогрес консолей і відеоігор

 

 

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

 

Особливих протиріч не помічено: Політика стагнує в 2017 р., Футбол і Події ростуть, Україна як і раніше в тренді, з піком у 2015 р.

 

Пророкування популярності: XGBClassifier, LogisticRegression, Embedding & LSTM

 

Спробуємо зрозуміти, чи можна за текстом передбачити популярність статті на Стрічці, і від чого ця популярність взагалі залежить. В якості цільової змінної я взяв кількість репостов на Фейсбук за 2017 рік.

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

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

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

 

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

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

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

Мережа відпрацювала за 2 хвилини і показала точність на тесті 70%. Зовсім не межа, але сильно заморочуватися в даному випадку немає сенсу.

Взагалі, всі методи видали порівняно невелику точність. Як показує досвід, алгоритми класифікації добре працюють при різноманітності стилістики, – на авторських матеріалах, іншими словами. На Lenta.ru такі матеріали є, але їх дуже мало – менше 2%.

Читайте також  Парсим X12 «на коліні»

Основний масив написаний з використанням нейтральною новинний лексики. І популярність новин визначає не сам текст і навіть не тема як така, а їх належність до висхідного інформаційному тренду.

Наприклад, досить багато популярних статей висвітлюють події на Україні, найменш популярні даної теми майже не стосуються.

 

Вивчення об’єктів за допомогою Word2Vec

В якості завершення хотів провести сентимент-аналіз – зрозуміти, як журналісти належать до найбільш популярних об’єктів, які вони згадують у своїх статтях, змінюється ставлення з часом.

 

Але розмічених даних у мене немає, а пошук за семантичним тезаурусам навряд чи відпрацює коректно, так як новинна лексика досить нейтральна, скупа на емоції. Тому вирішив зосередитися на самому контексті, в якому об’єкти згадуються.

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

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


 

Що помітив.

 

Путін зразка 2000 р. завжди з’являвся в контексті з Росією і виступав зі зверненнями особисто. У 2017 р. президент РФ перетворився в лідера (щоб це не значило) і дистанціювався від країни, тепер він, якщо судити з контексту, – представник Кремля, який спілкується зі світом через свого прес-секретаря.

 

Україна-2015 в російських ЗМІ – війна, бої, вибухи; згадується знеособлено (Київ заявив, що Київ почав). Україна-2017 фігурує переважно у контексті переговорів між офіційними особами, і в цих осіб з’явилися конкретні імена.

Займатися інтерпретацією отриманої інформації можна досить довго, але, як мені здається, на даному ресурсі це оффтоп. Бажаючі можуть подивитися самостійно. Код і дані додаю.

Степан Лютий

Обожнюю технології в сучасному світі. Хоча частенько і замислююся над тим, як далеко вони нас заведуть. Не те, щоб я прям і знаюся на ядрах, пікселях, коллайдерах і інших парсеках. Просто приходжу в захват від того, що може в творчому пориві вигадати людський розум.

You may also like...

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *