Prea preocupați de bunul mers politic al Țării, prea îngrijorați că o clică politică sau alta se pregătește să ne arunce înapoi în Evul Mediu Comunist, Creștin, Economic sau dimpotrivă, în Postmodernismul Transgender Apocaliptic Preaindividualizant, prea înfricoșați că vom fi vânduți vrac și în viu, fie rușilor, fie americanilor sau ungurilor sau nemților, prea entuziaști când vine vorba să țintuim pe stâlpul infamiei publice vreun șmecheraș de autogară nimerit în vreo funcție publică vremelnică, uităm cu desăvârșire că pentru Țucănberg și alții ca el, băieți de băieți, pentru care Trecutul nu valorează nicio para chioară și Prezentul este doar o virgulă, în schimb Viitorul este Miza Adevărată, pentru care merită să lupți, ei bine, pentru ei, noi contăm doar în calitate de consumatori, și suntem tratați ca atare.

Dacă asta e de bine sau este de rău, rămâne să judecați singuri. Dar fiți convinși că rezultatul judecății voastre nu va fi altceva decât o variabilă într-un Algoritm cam cât Planeta de mare, între alte multe milioane de variabile.

Ce e un algoritm?

În cazul utilizatorilor blocați de Facebook, Altgoritmul este un fel de Oficiu pentru Protecția Consumatorilor, investit legal să închidă prăvăliile cu marfă împuțită. Degeaba țipă proprietarul tejghelei că el are marfă de calitate – pe Inspector îl doare-n bașcheți. Cu altgoritmii Facebook e mai groasă de-atât, că nu poți să le dai șpagă. Nu prea ai încotro: trebuie să te conformezi! Totul în numele Protecției Consumatorului, un Consumator care trebuie ferit de consumul de produse toxice. Nu de alta, dar trebuie menținut în viață ca să mai consume și cu alte ocazii. Consumatorul fiind noi toți, așa cum ne-a lăsat Dumnezeu: deștepți sau proști, frumoși sau urâți, bărbați sau femei sau is complicated, de dreapta sau de stânga, hoți sau cinstiți, violatori sau virgini.

Pentru Algoritm, ”Dragnea” sau ”Tăriceanu” sau ”Iohannis” sunt doar niște cuvinte cu aceeași valoare ca și altele, cum ar fi ”Șmecher” sau ”Divorț”, sau chiar cu expresii întregi de genul ”Vacanța asta e Mega Super Tare”. Valoarea acestor cuvinte e dată de contextul în care sunt folosite.

Dacă pui un context lângă alt context lângă alt context ș.a.m.d., obții o listă, de preferat cât mai lungă. Lista asta e un fel de manual după care învață Algoritmii ca să devina, cum spuneam, un fel de Inspectori Sanitari – responsabili, cazul nostru, de produsele vândute în prăvălia Facebook.

Algoritmul, la naștere, e prost: dacă ar respira, ar respira pe gură.

El trebuie învățat ce e bine și ce e rău.

Cine îl învață?

În cazul Facebook, Țucănberg și tocilarii lui.

După ce programă școlară?

După lista de context lângă context lângă context… de care făceam vorbire mai devreme.

Să luăm la întâmplare exemplul unui Algoritm care, deși s-a născut prost ca noaptea, l-a înzestrat Dumnezeul Algoritmilor cu capacitatea de a învăța. Acum nu știe nimic, nici măcar limba română. Îl cheamă ”textblob” – chiar așa, cu literă mică, pentru că nu e nici persoană, nici loc, nici Al Doilea Război Mondial: e doar o înșiruire de 0 și 1.

Hai să ne prefacem în Țucănbergi și să-l antrenăm pentru meseria de Inspector pentru Protecția Consumatorilor din Prăvălia Facebook în care se vorbește Limba Română.

Primul pas e să-l invocăm. Nu trebuie să frecăm nicio lampă, e de ajuns să scriem ca mai jos:

from textblob.classifiers import NaiveBayesClassifier

from textblob import TextBlob

Pasul următor este să scriem un manual, ca să aibă după ce învăța. Manualul ăsta ar trebui să aibă două părți: una de Teorie (unde va învăța teorie ca papagalul) și una de Practică (unde își va verifica însușirea corectă a teoriei învățate).

În partea de Teorie scriem propoziții sau chiar fraze întregi, cărora le atribuim câte o valoare profund umană.

Ca să nu vă pierd pe drum, rămânem la valori simple, cum ar fi ”adevărat” sau ”fals”, ”pozitiv” sau ”negativ”… chestii de-astea. Ele se cheamă ”labels”, sau etichete, dar puteți să le spuneți și Mirela, sau cum vreți voi. Important e să vă amintiți că definesc valori profund umane.

De exemplu: ”Imi place berea!”, în cazul meu, are valoarea de ”pozitiv”. În cazul tău, aceeași propoziție poate avea valoarea opusă, adică ”negativ”. De-asta vă spuneam la început că lista asta de context lângă context lângă context trebuie să fie cât mai lungă, altminteri Algoritmul o să rămână prost. Exact ca-n viață: cu cât înveți mai mult, cu atât ești mai deștept, iar dacă nu înveți, rămâi prost.

Hai să trecem mai departe, să înjghebăm un manual de teorie pentru textblob:

Teorie = [(‘Imi place mancarea!’, ‘pozitiv’),

          (‘Nu imi place aceasta mancare!’, ‘negativ’),

          (‘Locul acesta este minunat!’, ‘pozitiv’),

          (‘Locul asta e oribil!’, ‘negativ’),

          (‘Ma simt bine cand beau bere!’, ‘pozitiv’),

          (‘Ma simt extraordinar cand beau Jack’, ‘pozitiv’),

          (‘Nu pot sa cred ca fac tampenia asta’, ‘negativ’),

          (‘M-am saturat de brocoli!’, ‘negativ’),

          (‘Seful meu e un tampit!’, ‘negativ’),

          (‘Am invatat sa schiez!’, ‘pozitiv’),

          (‘Vreau sa emigraz in Canada’, ‘pozitiv’),

          (‘Portugalia este o tara superba’, ‘pozitiv’),

          (‘Mersul in Bulgaria la schi e de cacat’, ‘negativ’)]

Partea de practică e ca un fel de exerciții și probleme rezolvate: Algoritmul își testează cunoștințele acumulate din Teorie, să vadă dacă a înțeles bine sau nu:

Practica = [(‘Nu imi place in Bulgaria’, ‘negativ’),

            (‘Jack e prietenul meu cel mai bun’, ‘pozitiv’),

            (‘Brocoli e sanatate curata!’, ‘pozitiv’),

            (‘M-am saturat sa tastez’, ‘negativ’),

            (‘Bateria unui MacBook Air tine 12 ore’, ‘pozitiv’),

            (‘Bateria unui Dell tine o ora’, ‘negativ’),

            (‘Vine primavara!’, ‘pozitiv’)]

Bun! Astea find zise, îl trimitem la învățat! În cazul nostru, vorbim despre un proces de clasificare: textblob trebuie să învețe să clasifice propozițiile (frazele, cuvintele) în funcție de valoarea pe care le-am atribuit-o, adica ”pozitiv” sau ”negativ”. Punem algoritmul cu burta pe carte cu formula magica:

cl = NaiveBayesClassifier(Teorie)

Apoi îl scoatem la tablă să vedem ce a învățat. Pentru asta, îi dăm o problemă: ia clasifică matale următoarele propoziții: ”Berea are un gust oribil!” și ”Vreau să dau o fuga in Portugalia!”.

text = TextBlob(‘Berea are un gust oribil! Vreau să dau o fuga in Portugalia!’, classifier = cl)

Lăsați-l să se gândească câteva nanosecunde, apoi cereți răspunsul:

for s in text.sentences:

    print(s)

    print(s.classify())

Algoritmul vă răspunde după cum urmează:

Berea are un gust oribil!

negativ

Vreau să dau o fuga in Portugalia!

pozitiv

Cam atât a învățat, și aproape că am fi tentați să-i dăm notă de trecere. Propun însă să-i mai punem câteva întrebări.

text = TextBlob(‘Altgoritmul asta e tampit!, Imi place Simona Halep’, classifier = cl)

Algoritmul asta e tampit!

negativ

Imi place Simona Halep’

pozitiv

Nu vă grăbiți să-i lăudați obiectivitatea în autoevaluare. Hai să mai încercăm una:

text = TextBlob(‘Dragnea e rau! Iohannis e bun!’, classifier = cl)

Dragnea e rau!

negativ

Iohannis e bun!

negativ

Hopaaaaaa!…

Stați așa, nu dați cu pietre! Încercați să vă obișnuiți cu ideea că, pentru Algoritm, ”Dragnea e rau!” e la fel de negativ ca ”Iohannis e bun!”.

Vorba lu’ Leana lu’ Costel: iegzistă o explicație! De fapt, mai multe.

1. Algoritmul nu a avut un manual consistent la dispoziție. De fapt, ce a învățat altgoritmul? Punem afla dacă-l întrebăm astfel:

cl.show_informative_features(20)

Și el ne va răspunde, în ordinea importanței, primele douăzeci de lucruri pe care le ia de bune:

Most Informative Features

             contains(e) = False          poziti : negati =      1.9 : 1.0

            contains(Nu) = False          poziti : negati =      1.5 : 1.0

          contains(asta) = False          poziti : negati =      1.5 : 1.0

            contains(sa) = True           poziti : negati =      1.5 : 1.0

            contains(de) = False          poziti : negati =      1.5 : 1.0

          contains(este) = False          negati : poziti =      1.4 : 1.0

          contains(beau) = False          negati : poziti =      1.4 : 1.0

            contains(Ma) = False          negati : poziti =      1.4 : 1.0

          contains(cand) = False          negati : poziti =      1.4 : 1.0

          contains(simt) = False          negati : poziti =      1.4 : 1.0

       contains(brocoli) = False          poziti : negati =      1.2 : 1.0

        contains(tampit) = False          poziti : negati =      1.2 : 1.0

       contains(mancare) = False          poziti : negati =      1.2 : 1.0

           contains(fac) = False          poziti : negati =      1.2 : 1.0

            contains(la) = False          poziti : negati =      1.2 : 1.0

           contains(pot) = False          poziti : negati =      1.2 : 1.0

            contains(ca) = False          poziti : negati =      1.2 : 1.0

          contains(schi) = False          poziti : negati =      1.2 : 1.0

          contains(cred) = False          poziti : negati =      1.2 : 1.0

          contains(M-am) = False          poziti : negati =      1.2 : 1.0

Măcar e sincer! Aproape că mă face să mă simt prost că l-am învățat atât de puține lucruri despre ce e bine și ce e rău pe lumea asta! Algoritmul rămâne sincer și când îl întrebi dacă el crede cu adevărat că ”Iohannis e bun!” e la fel de negativ ca ”Dragnea e rău”!

print(“Acuratetea afirmatiei mele de algoritm prost este de: “, cl.accuracy(Practica))

Dragnea e rau!

negativ

Iohannis e bun!

negativ

Acuratetea afirmatiei mele de algoritm prost este de:  0.5714285714285714

Adică puțin peste 50%. Cam puțin!

Dar asta nu e vina Algoritmului, ci a mea, că nu i-am dat un manual mai consistent, cu o Teorie și o Practică mai de liceu sau facultate, nu de clasa pregătitoare!

2. Etichetele, doar două, sunt total insuficiente. Adevărat, Fals, Neutru, Plictiseală, Nonsens… mă rog, v-ați prins că sunt foarte multe, și e treaba noastră să le alegem pe cele mai bune.

3. Textblob face o treabă infinit mai bună dacă folosim limba engleză. Parcă mai are suport și pentru germană sau franceză sau amândouă, nu sunt sigur și mi-e lene să verific acum. Ideea e că deocamdată nu există un ”Manual” în limba română – minunații noștri aitiști au alte treburi zilele astea.

Facebook folosește alți algoritmi, de altă complexitate, însă mecanismul rămâne cel pe care am încercat acum să-l explic cât m-am priceput de bine.

Așa că, stimați influenceri care vă plângeți că Țucănberg are pică pe voi, am o veste proastă pentru voi: ăla nici măcar nu știe că existați pe Terra!

Problema voastră sunt algoritmii.

Dacă vreți să nu vă mai treziți cu conturile suspendate pentru ”conținut neadecvat” aveți două variante mari și late:

A) puneți mână de la mână și angajați un licean să scrie manualul ăla de dresat algoritmi. S-ar bucura și Țucănberg, și liceanul, și voi. Cu șanse foarte mari să vă recuperați și investiția în munca liceanului – Țucănberg v-ar cumpăra ”manualul”, că am auzit că dă bani serioși pe chestiile astea, gen Machine Learning sau AI

Sau, dacă nu v-ați luat salariile din noiembrie anul trecut,

B) evitați metaforele sau cuvintele care n-au traducere sau semnificație similară în engleză, ca să priceapă și algoritmul că voi nu sunteți toxici, ci doar niște influenceri nevinovați care trăiesc totuși din chestia asta.

Na, că m-am întins la vorbă și uitam să vă dau și codul, să vă jucați cu el precum mâțele lui Creangă cu motoceii, până fie crăpați, fie înțelegeți că ”motocei” nu există și ”Creangă” e parte a unui copac, sinonim cu ”ramură”.

http://musetoiu.ro/wp-content/uploads/2018/02/facebook-1024x684.jpghttp://musetoiu.ro/wp-content/uploads/2018/02/facebook-150x150.jpgdan musetoiuDe necategorisitOff topicOnlineRevista preseialgoritm,facebook,influencer,textblob
Prea preocupați de bunul mers politic al Țării, prea îngrijorați că o clică politică sau alta se pregătește să ne arunce înapoi în Evul Mediu Comunist, Creștin, Economic sau dimpotrivă, în Postmodernismul Transgender Apocaliptic Preaindividualizant, prea înfricoșați că vom fi vânduți vrac și în viu, fie rușilor, fie americanilor...