ІПСО/Фейки — Як знайти та розпізнати
Всім привіт хочу поділитися з Вами історією про те, як я намагався очистити свій особистий інфопростір від фейків і сміття і як це вилилося в проект, який користуються військові.
Але для початку кілька слів про себе. Мене звуть Михайло мені 36 років. Одружений, 4 дітей. Народився і живу у найкращому місті на землі — Харкові. Працюю на комерційній основі розробником вже 18 років.
Початок
Коли йшла революція гідності було дуже багато фейків і вкидів в інфопростір. І я зловив себе на тому, що майже кожну більш-менш гучну новину я сиджу і перевіряю ще раз мінімум на
Було взято wordpress і прикручено кілька RSS стрічок для автоматичного збирання даних. Через пару днів стало зрозуміло, що сайт просто перетворюється на смітник новин, а також є досить багато сайтів, які не віддають повний текст новини по RSS. Значить, рухаємося далі.
Бета версія
На той момент найпросунутішим фреймворком був Yii2 і в мене був найбільший досвід саме з цим фреймворком. Тому вибір припав саме на нього. Була реалізована базова схема і найпростіша реалізація для перевірки того, що схема з Yii2 робоча. Отже для базової схеми було взято: Yii2, PostgreSQL, ElasticSearch, RabbitMQ.
Для першої версії були взяті сайти, у яких в RSS стрічці міститься повний контент новини. І було реалізовано алгоритм «групування» новин певною мірою схожості. Після кількох днів гри з налаштуванням знайшлися оптимальні значення та з’явилися перші цікаві результати. Паралельно був запущений простий UI, в якому можна було відкрити новину і на одній сторінці відразу подивитися як ця новина викладена різними джерелами. І після перших днів тестів здалося дуже цікава картина відразу було видно, що різні групи сайтів просувають однаковий наратив і грубо кажучи ти відразу ж бачиш те, що ця група сайтів дотримується приблизно однієї позиції.
Потім стало зрозуміло, що потрібно додавати більше джерел, щоб отримати більше інформації, але далеко не у всіх сайтів був повний текст новини в RSS стрічці. І тут нове цікаве технічне завдання: в RSS міститься посилання на новину — але як визначити на сторінці, що новина, а що ні? Перша спроба була скористатися якимось набором патернів для css селекторів, але ця спроба розбилася про реальність того, що сайти зроблені абсолютно по-різному. Тому було прийнято радикальне рішення — була написана спеціальна бібліотека, в якій за допомогою математичної моделі знаходився основний контент новини. Це було реалізовано за рахунок обліку глибини вкладення та кількості текстового контенту всередині тегів. І ця бібліотека в більшості випадків видавала справді контент, відсіваючи зайве сміття. Однак були випадки, коли коментар під новиною містив більше тексту, ніж сама новина — у таких випадках бібліотека помилялася і приймала за реальний контент цей коментар.
Було додано ТОП-100 Українських сайтів новин і база почала наповнюватися. Навіть маючи таку невелику кількість даних вже можна було почати відрізняти фейки найпримітивнішим чином — якщо новина представлена лише на 1-2-х не найавторитетніших сайтах — то з ймовірністю 99% це фейк. Якщо ж новина представлена на всіх топових сайтах, то ця новина правдива, але може бути подана зовсім з різних ракурсів. Таким чином відпала необхідність лазити купою сайтів — можна відкрити тільки агрегатор і побачити як і ким представлена та чи інша область.
До речі, згодом на сайт почав звертати увагу роскомнагляд, посилаючи злісні вимоги про видалення інформації. Вони були послані кудись подалі і мабуть на знак образи завели на мене кримінальні справи =).
Комерційне застосування
Через деякий час системою зацікавилося консалтингове агентство. Після тестів було ухвалено рішення щодо подальшого розвитку проекту в рамках потреб агентства.
Першим етапом було розширення бази сайтів. Внесли практично всі доступні сайти новин — їх було близько 10 000. І з’явилася нова проблема — «погані» сайти з точки зору якості та технологій. Далеко не всі сайти мали RSS стрічку або sitemap. Тому був реалізований скрапер/павук, який просто ходить по сайту і стягує максимальну кількість контенту, намагаючись відсіяти сміття. На цьому етапі зустрілася ще вкрай цікава та несподівана проблема — сайти «низької» якості просто лягали якщо намагатися в 10 потоків збирати з них дані — тому довелося вводити обмеження на навантаження на сайт.
Паралельно з проблемою «поганих» сайтів виявилося завдання «хороших» сайтів — багато сайтів генеруються динамічно у клієнта — а це означає, що просто зробивши «curl» запит вже не витягнеш даних — довелося піднімати цілу ферму з puppeteer з хромом. Але і в цьому моменті теж був нюанс «хороших» сайтів — вони захищаються від скрапінгу — Але це вирішилося підняттям N кількості проксей.
Але для повноцінного комерційного використання недостатньо тільки новинних сайтів — необхідні ще й соціальні мережі. І першою соцмережею для аналізу було взято facebook. Скільки разів ми згадували Марка Цукерберга та його друзів поки що шукали підходи до роботи з фейсбуком. Після
Сюди додалася можливість витягувати коментарі під постами у фейсбуці — щоб зрозуміти які наративи просувають різні. ботоферми.
Телеграм
Наступним на аналіз зайшов телеграм. Він також має захист від збору даних, але більш примітивний, ніж фейсбук — тому збирати з нього дані було вже не так важко. Але знову згадували Павла Дурова та його друзів. У якихось місцях телеграм прямий класно реалізований і з ним зручно працювати — а в якихось через «терни до зірок». Але після того як базова взаємодія була налаштована і додалися основні канали, то була виявлена приблизно та ж картина що і на фейсбук, у плані «свободи» думки. Але, до речі, у телеграмі були хоч трохи схожі на «незалежні» канали.
Боротьба з фейками
Отже, маючи вже досить велику кількість джерел даних (приблизно 15 000) був доступний масив даних і зрозумілі групи джерел за загальним наративам. Це допомагало зрозуміти хто публікує та розкручує той чи інший контент, щоб відсіяти «паразитну» інформацію. Усередині проекту було зроблено ще багато цікавого, що виходить за межі цієї статті.
Висновок
Під час повномасштабного вторгнення цією системою зацікавилися військові, і вона була повністю безкоштовно представлена ним. За запитом було внесено доопрацювання та доробки до системи та планувалося її впровадження. Сподіваюся, її використовують для боротьби в інфополі.
Дякуємо за увагу та будьте уважні до контенту, який споживаєте!
13 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів