Može li računar da zameni novinare Telegrafa? (FOTO)

 

Van Srbije živim već neko vreme i glavno sredstvo informisanja o domaćim dešavanjima mi je putem internet medijskih portala.

Nažalost, čini mi se da sve teže i teže postaje pronaći dobre vesti koje su odgovarajućeg kvaliteta. Čak i tradicionalne medijske kuće su postale sklone izbacivanju takozvanih “clickbait” članaka koje u prvom planu nemaju vest niti njen kvalitet već isključivo povećanje poseta web portalu i dalje širenje vesti na društvenim mrežama upotrebom pompeznih naslova.

Pre oko godinu dana Dnevnjak ekipa je izbacila odličan snimak gde su satirično prikazali kako se prave naslovi za vesti.

Gledajući razne naslove i inspirisan snimkom, postavio sam sebi sledeće pitanje:

Da li je zaista potrebna  ljudska inteligencija da bi se napisali clickbait naslovi?

Postavka zadatka

Da bih odgovorio na svoje pitanje rešio sam da izgradim model sposoban da piše clickbait naslove.

Kao i za svaki drugi zadatak prvi korak je prikupljanje podataka koji će se koristiti za modelovanje – u našem slučaju srpskih clickbait naslova.

Nije mi trebalo puno vremena da odlučim koji medijski portal da izaberem za izgradnju skupa podataka – Telegraf, arhetip clickbait novinarstva, se nametnuo kao logičan izbor.

U drugom koraku je izgrađen model nad prikupljenim podacima i generisani su naslovi pomoću modela. U ovom slučaju, to će biti rekurentna neuronska mreža, odnosno specifična implementacija Long Short-Term Memory mreže.

Prikupljanje podataka

Veličina našeg skupa podataka mora biti dosta velika kako bi izlazi modela koji će nad tim skupom biti izgrađen bili smisleni. Veći skup podataka uglavnom znači da će model bolje naučiti domen.

Ručno prikupljanje podataka bi bilo besmisleno jer bi izgradnja skupa podataka odgovarajuće veličine potrajala predugo.

Kako možemo da automatizujemo prikupljanje naslova?

Hajde da pogledamo kako izgledaju stranice sa vestima na Telegrafu. Brzim odlaskom na Vesti i inspekcijom izvornog koda zaključujemo da se naslovi nalaze u okviru HTML span elemenata. Dalje, pri dnu se nalazi dugme Starije koje nas vodi do starijih vesti, sa veoma zgodnom strukturom URL-a:  http://www.telegraf.rs/vesti/page/2.

Šta iz ovoga zaključujemo?

  1. Izdvajanjem teksta unutar span elemenata možemo da dobijemo sve naslove sa jedne stranice
  2. Izmenom kategorije i rednog broja u URL adresi možemo da prikupimo naslove sa velikog broja stranica iz njihovih span elemenata

Hajde da to i pretočimo u kod. Za svrhe prikupljanja naslova rešio sam da iskoristim Scrapy, Python framework za ekstrahovanje sadržaja web stranica.

Framework je odličan i za 10-15 minuta sam imao funkcionalno rešenje za preuzimanje naslova.

Koliko je jednostavno napraviti svoj scraper možete videti iz priloženog:


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import scrapy

_URL_TEMPLATE = 'http://www.telegraf.rs/{}/page/{}'
_MAX_PAGE_COUNT = 999
_CATEGORIES = 'vesti', 'sport', 'jetset', 'zanimljivosti', 'zivot-i-stil'
_SKIPPED_SPAN_VALUES = '0.20', 'starije', 'novije', u'©Telegraf 2016', u'Sva prava zadržana.'

class TelegrafSpider(scrapy.Spider):
name = 'naslovi'

def start_requests(self):
urls = (_URL_TEMPLATE.format(cat, i) for cat in _CATEGORIES for i in range(_MAX_PAGE_COUNT))

for url in urls:
    yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
for title in response.css('span::text').extract():
    if title in _SKIPPED_SPAN_VALUES:
        continue
    yield {
        'title': title.strip()
    }

Kombinovanjem naslova iz kategorija Vesti, JetSet, Zanimljivosti Život i stil napravljen je skup podataka koji sadrži 63119 naslova koje ćemo koristiti za treniranje modela.

Ispod se nalazi 10 nasumično odabranih naslova koji ilustruju skup podataka:

Stigla je nova beba Kardašijan! Da li biste detetu IKADA dali OVO IME?! (FOTO) (VIDEO)
Milica Pavlović, Aleksandra Bursać, Ivana… Pogledajte ko je bio na venčanju zvezde “Granda”! (FOTO)
BEZOBRAZNI KUĆNI SNIMAK: Srpska pevačica se milovala u krevetu pa prste stavila… (VIDEO)
Evo kako je Filip prokomentarisao priče o raskidu sa Marijom Anom! (FOTO)
Pre 30 godina je bila bomba, gola se mazala šlagom, nestala, ušla na Farmu, a ovako sada izgleda seksi Suzana! (FOTO) (VIDEO)
POKUŠAO DA SILUJE MAJKU I ĆERKU: Drama u porodičnoj kući u Ivanjici
ŠUMADIJSKI RULET: Srbi se PREKRSTE, pa krenu preko ovog mosta! (FOTO)
OGROMAN USPEH SRPSKIH LEKARA: Ugrađen prvi implantabilni monitor srca!
(UZNEMIRUJUĆI VIDEO) KAKAV LUDAK: Pucao sam sebi u glavu zbog opklade i PREŽIVEO (VIDEO)
Fenomenalan trik da se ZAUVEK otarasite MUVA, i to bukvalno PREKO NOĆI, a potrošićete samo 75 dinara

Kombinovani skup podataka i pojedinačne skupove možete da preuzmete za svoje istraživačke potrebe. Linkovi se nalaze na dnu teksta.

Izgradnja modela

Modelovanje jezika je jako zanimljiv zadatak u mašinskom učenju iz više aspekata, od prirode ulaznih podataka do kompleksnosti odnosa između karaktera, reči, rečenica i njihovog značenja.

U ovom slučaju ćemo se poslužiti Long Short-Term Memory (LSTM) rekurentnom neuronskom mrežom koju ćemo istrenirati da generiše clickbait naslove.

LSTM rekurentna neuronska mreža
LSTM rekurentna neuronska mreža. Izvor: colah.github.io

LSTM arhitektura rekurentnih neuronskih mreža se pokazala odlično kod modelovanja sekvencijalnih podataka. Danas je jedna od najčešće korišćenih arhitektura za modelovanje govora, rukopisa,  prevođenja, označavanja slika i video zapisa…

Glavna karakteristika koja LSTM neuronske mreže čini moćnim u odnosu na klasične neuronske mreže jeste njihova sposobnost da “pamte” kontekst.

Na primer, neka zadatak modela bude da predvidi poslednju reč u izrazu. Neka je izraz “Jede mi se nešto slatko. Čokolada je slatka. Idem da kupim čokoladu.” . Klasične neuronske mreže bi imale poteškoće da uspešno predvide poslednju reč u izrazu. Međutim, zadatak predviđanja čokolade bi bio značajno lakši za LSTM mreže zbog njihove sposobnosti da kroz svoje stanje nauče i zapamte odnose između entiteta, gde same entitete mreža uči bez pomoći čoveka.

Za one koji bi želeli više da saznaju o LSTM mrežama savetujem da pročitaju tekst Christophera Olaha.
Pored njega, ako biste ozbiljno želeli da uđete u materiju, zapratite Andreja Karpathyja. Andrej je sjajan istraživač sa Stanford univerziteta koji sa zajednicom deli svoj rad na savremenim modelima neuronskih mreža.

Model LSTM mreže koji ćemo trenirati baziran je na njegovoj implementaciji objavljenoj na GitHubu. U pitanju je model koji predviđa sledeći karakter (slovo) u sekvenci karaktera.

Iako ovo možda ne deluje značajno na prvi pogled, setite se da mreža neće predviđati sledeće slovo na bazi prethodnog slova, već takođe i oslanjajući se na svoje stanje, a stanje daje širi kontekst: više prethodnih karaktera, prvi karakter, sav tekst koji je pre toga viđen, i ko zna kakve ostale implicitne atribute koje mreža sama nauči kroz treniranje nad skupom podataka.

Model je istreniran sa rekurentnom mrežom sa 2 sloja i 128 jedinica po sloju. Ukupno vreme treniranja neuronske mreže je trajalo oko 12 sati a tokom treninga su zapamćene različite konfiguracije mreže kako bi se ispratio napredak u učenju.

Rezultati

Hajde da pogledamo šta je naš đak naučio u novinarskoj školi Telegrafa:

Nakon prvog prolaska kroz skup podataka, mreža je generisala sledeće naslove:

JEDNI NARADINE U SRBI: Pogolita izgledao na izgradi PODINIRE PREDSED! (FOTO)
VAO NA REKLA PUCA U MINA: Klaca Srpinti zgredi! (VIDEO)
ČLIŠAVA TREGNA NEVEZA: Pampunjaši svaku “Zoruovanom pita! (VIDEO)

Vidimo da je mreža već naučila da se Telegrafovi naslovi završavaju sa (FOTO) i (VIDEO), kao i da je praksa da prvi deo rečenice pre dvotačke bude ispisan velikim slovima. Ipak, ne deluje baš kao da naslove možemo da pročitamo.

Nakon oko pet prolazaka, generisani naslovi već počinju da dobijaju više (Telegraf) smisla:

ZA DOBRO JUTRO: Nikad žena preće? Evo kako!
ZVAĆINOVO: Hočin Tačić rado! (18+) (VIDEO)
Viking donacija zbog guza hoće na državljaju
HAOS U DAMCI: Pevačica otkrio Karadžiću u kišu (FOTO)

Oko osmog prolaza model je naučio malo više o mračnim stranama Telegraf naslova:

SILOVAO DA SE ZAMALO PROSTITETNIM BEOGRADA OGROMNIM ALBANSKO
Putinski seks-ulom idem sa živeti!
Vučić: (VIDEO)

36 prolaza kasnije:

PINKOVE GLAS PRIČA: Karan Kalifi Marija Foksabi, ali ga napravili PUCALE na Instagramu?
EKSKLUZIVNO: Aleksandar Švercina Milijara Šabanova beba u nju (VIDEO)
NIĆI RAZBILA: Sloboda Gagijen, pomislio klopa u Telegraf (FOTO) (VIDEO)
TRUDNICA IZVEDENIH KRIZA U BEOGRADU: Na zamaklu, Srbiji u ritnu na izborima i kafića vakcinise (VIDEO)


42 prolaza, izgleda da nas model implicitno upozorava da je Telegraf zlo:

ŽIVI SE PLATI: Svetski život BEZ TELEGRAFA SE KOJI ĆE VAM SE VAM SE PREŽBUNJA!
BIĆA LAZI: Milan Hramrić zabranio Barara? Sodina izazvala protestu! (FOTO)

50 prolaza kasnije:

ZBOGODISLI MIS PUTINA: Napravite dualja (FOTO)
SILOVAO DA JE OVO! Ovako zatvorile smuvao dete o maju!
OSTAO TE: Hrvati otrov na svetu, ključjusa i banane, za jednim četvrtivno! (FOTO)

I moj favorit:

HRVATSKA NUKLEARNA GLAVA: Tamara ispala Malomečević u ćansi detalja

 

Zaključak

Prvi trening mreže je dao dosta zanimljive rezultate. Iako gramatika definitivno nije jača strana delovi naslova ne zvuče skroz suludo i nasumično, naročito ako se posmatra prvi deo naslova, ispisan velikim slovima. U obzir se mora uzeti i složenost gramatike srpskog jezika; kada bismo naslove preveli na engleski koji nije osetljiv na padeže, rod i slično rezultati bi delovali dosta bolje.

Posmatrajući vrednost funkcije troškova kroz više iteracija deluje kao da je ona konvergirala jako brzo. Moguće je da se se funkcija zaglavila i da nije mogla da dostigne minimum zbog visoke vrednosti stope učenja, iako je ona iterativno smanjivana.

Funkcija troškova
Funkcija troškova

Funkcija troškova je, najprostije rečeno, razlika između stvarne vrednosti i onoga što je model predvideo. Njenu vrednost želimo da minimizujemo kroz proces učenja. Stopa učenja se može zamisliti kao veličina koraka na putu ka minimumu – ako je korak preveliki nećemo moći da se spustimo do minimuma jer ćemo ga preskakati. Ilustracija će pomoći da razumete koncept. U primeru se radi o pronalaženju minimuma u dvodimenzionalnom prostoru. Kod savremenih neuronskih mreža broj dimenzija se meri desetinama i stotinama miliona.

Izmene konfiguracije modela koje potencijalno mogu da poboljšaju performanse su promena stope učenja i broja jedinica u slojevima. Svaka od ovih izmena bi neminovno dovela do dužeg trajanja treninga koji je već sada iznosio 12 sati što predstavlja ograničenje.

Ipak, nadam se da ste se nasmejali nekim od ovih naslova isto koliko i ja kada sam ih čitao. A nadam se i da ste naučili nešto novo.

Disclaimer

Ovo je moj lični blog. Sva izražena mišljenja na blogu su isključivo moja i ne pripadaju mom poslodavcu.
Preuzimanje naslova, treniranje modela i pisanje članka su obavljeni za vreme mog slobodnog vremena, van radnih sati.
Rezultati koje je model generisao su naučeni iz originalnih naslova i nisu korigovani (u pitanju su sirovi izlazi modela).

Ceo rad je izveden u istraživačke svrhe i bez loših namera.

Skupovi podataka

Svi upotrebljeni skupovi podataka se mogu preuzeti kao tekstualne datoteke sa mog GitHub naloga.

Priznanja

Autor upotrebljene implementacije LSTM modela je Andrej Karpathy. Ponovo, toplo preporučujem da pratite njegov rad.