Toți plătim taxe, nu și toți sunt satisfăcuți cum ele sunt cheltuite. Taxele noastre se colectează centralizat și se distribuie centralizat. Mai bine zis fiecare instituție a unui stat își face un buget și apoi deputații îl aprobă. Nu neapărat e cea mai bună metodă de a intui ce le trebuie cetățenilor care au plătit acele taxe.

O ideie simplă, ar fi, ca orice instituție publică să-ți poată deschide pentru orice proiect câte un cont trezorial. În care să specifice unele date despre proiect și câți bani sunt necesari pentru a implementa acel proiect. De exemplu o grădiniță vrea să renoveze sala de muzică. O școală vrea să construiască un teren de sport. Un anumit drum să fie reparat. Să fie zeci de mii de astfel de proiecte care sunt create de instituțiile publice și plasate online dar totodată și promovate offline, prin QRCoduri la ușa de la grădiniță/școală/pe drum...

Iar cetățenii să poată transfera taxele lor scanând acel qrcode sau intrând online și semnând digital de pe telefonul mobil. Cumulativ să permitem oricărui cetățean, de exemplu 50% din taxele lui, să le redirecționeze unde el dorește.

Astfel decentralizăm cheltuirea taxelor noastre și motivăm ca cetățenii să declare și să ajute cu taxele lui problema care îl doare cel mai mult.

Un scenariu la renovarea unei grupe în grădiniță.

  1. Directoare descrie pe un site guvernamental, ce vrea să repare, perioada de colectare și suma de bani necesară pentru a o realiza.
  2. Primește un cont trezorial și un qrcode pentru a-l lipi pe ușa grădiniței.
  3. Părinții având o aplicație de management a taxelor, scanează acel qrcode și transferă de pe credit cardul bancar pe contul trezorial bani.
  4. Dacă la expirarea perioadei de colectarea s-a adunat suma necesară, atunci toți banii se duc la grădiniță pentru a repara clasa.
  5. Dacă nu s-a colectat toată suma, banii se întorc înapoi pe conturile bancare a părinților.
  6. La sfârșitul anului Inspectoratul fiscal deduce din taxe părinților sumele redirecționate către grădiniță.

Astfel părinții văd cum se cheltuie taxelor lor și totodată o face responsabilă pe directoare de repararea clasei. Sumele sunt deduse din taxe iar fiecare părinte ar dori să-și declare taxele.

Tehnic, e simplu de realizat. Politic?

Una din întrebările pe care mi le puneau prietenii cu care am discutat despre votemeapp sună în felul următor.

“În sistemul democratic actual, toate voturile au putere egală de decizie. De ce nu și la votmeapp?”

Nu voi discuta aici cum lucrează votemeapp, însă voi încerca să vă conving că voturile care le dați nicidecum nu sunt egale.

În sistemul actual democratic se utilizează o metodă arhaică și nedemocratică de înaintarea candidaților. Ca și rezultat, la alegeri avem o listă de candidați (nu tocmai cei mai buni) care se luptă între ei pentru a învinge. Pentru a câștiga ei utilizează tot felul de tehnici, că uneori îți este scârbă să vezi că au ajuns candidați. În final avem de ales. Trebuie să alegem răul cel mai mic.

În democrația de azi, tu ai două opțiuni. Ori mergi la vot și votezi +1 ori nu mergi la vot 0. E totul binar. Însă fiecare dintre noi chiar dacă merge la vot are o anumită “încredere” despre candidatul pe care îl votează. Să zicem că această încredere eeste de (0…1]. Dacă este 0 nici nu mergi, dacă e puțin mai mare de 0 mergi, dar mai mult cu gândul că votul tău contează în democrație. Dacă încrederea e 1.0 cel mai probabil că tu însuți votezi pentru tine sau mama ta te votează.

Programatorii are scrie asta așa:

votulTau=ceil(max(incredereCandidat1,incredereCandidat2))

Din punct de vedere al candidatului că voturile date pentru el toate sunt egale cu 1.0, însă din punct de vedere al votanților fiecare vot întoteauna este <=1.0.

Această distribuție statistică a încrederii poate fi distribuția Gauss, sau Power Law. Va trebui să fac niște experimente unde oamenii votează cu o valoare de la [0..1] ca mai apoi să găsești distribuția exactă. Însă sunt sigur că nimeni nu votează pentru candidați cu încrederea maximă.

Democrația clasică întoteauna îți forțează încrederea care o ai într-un anumit candidat să o rotunjești în sus până la 1.0 și să o dai candidatului ales. E ca și cum ai cumpăra de la magazin un produs care costă 10 bani însă casierița îți declară că nu are rest, plătește 1 leu.

De aici avem un efect interesant. Candidatul care câștigă, se mândrește că au acumulat numărul maxim de voturi însă încrederea acumulată poate fi mult mai mică. De fapt dacă să trecem de la sistemul binar de calculare a voturilor la unul flotant, bazat pe încredere, putem avea situații când cel cu mai puține voturi poate câștiga.

Ca rezultat avem o clasă politică care continue să câștige voturi însă nu mai poate să câștige și încrederea oamenilor.

Deci voturile pot fi egale sau pot fi inegale, depinde din ce parte privești.

Primul exercițiu electoral cu care se confruntă copiii este pe cine aleg șeful clasei (grupei).  Va fi un șef care va fi competent, modest și uman sau unul toxic, fudul sau tupeist.

Cea mai răspândită metodă este cea simplă, adică fiecare elev scrie numele colegului căruia îi dă votul său pe o foiță, le plasează într-o cutie comuna, apoi se numără, iar cel care acumulează cele  mai multe voturi — câștigă. De obicei diriginta insistă pe această ideie, ca să scape mai repede de acest proces. 

Încă o metodă este că dirigintele oferă copiilor 3-4 candidați (preferați de ea), iar toată clasa e nevoită să aleagă doar dintre acestia.

O nouă opțiune este una mai puțin obișnuită, dar foarte îndrăgită de copii: printr-o aplicație pe telefonul mobil, care ia în considerare nu doar numărul de voturi, ci și influența (ponderea) lor.

Procesul e cât se poate de simplu.

  1. Instalezi aplicația VoteMeApp.
  2. Cineva dintre elevi creează un scrutin, iar linkul îl distribuie prin messenger.
  3. Toți ceilalți intră de pe acest link în aplicatie, aderând anume la acest scrutin (proces de alegere), votează pentru unul sau câțiva colegi, care merită să fie șeful clasei.
  4. În câteva secunde de la finalizarea scrutinului aplicația calculează și anunță câștigătorul.

Mai jos am plasat câteva screen-uri cum se organizează un scrutin.

Nu voi intra în detalii matematice , ca să nu a vă sperii, însă unul din avantajele noului sistem sunt.

  • îți permite să votezi pentru mai mulți colegi, nu doar unul.
  • puterea votului fiecărui elev este diferită în dependență de către cine a fost votat (și nu doar de nr. voturi primite).
  • afișează și lista celor mai influenți copii din clasă.

Succese!

Boss Tweed

În euforia alegerilor din Moldova, cred că-mi va fi cel mai ușor să explic idea mea de un App și viziunile pe termen lung de schimbare a democrației.

Sistemul democratic pe care îl folosim noi acum un bug mare (eroare, neajuns - termen folosit în programare). Acel bug este la înaintarea candidatului și se mai numește tweedism. Tweedism-ul nu are o definiție clară însă constă în coruperea democrației și stabilirea unui grup de control. Acest grup de control chiar și la statele democratice că și US de obicei este 0.02% din populație. Adică 0.02% populație hotărăște cine va candida la alegeri. Iar ceilalți 99.98% votează doar pe cine acest grup de interese dorește. La unele democrații pot fi un grup de oameni cu bani iar la dictaturi un grup mic de acoloții dictatorului… În Moldova aproximatic 480 de persoane cu bani controlează cine vor ajunde deputați, primari sau consilieri.

Pe de altă parte chiar și în alegerile mici de zi cu zi procesul de înaintare a candidatului e destul de anevoios de exemplu: alegerea șefului clasei; alegerea starostei; administratorului de casă; cel mai bun angajat al unei companii...

Idea de un așa App (sistem de votare) am realizat-o în anul 2008 în forma unui website. Scopul a fost testarea rezultatelor. În cazul meu nu știi dacă e funcțional acest sistem până nu-l compari în paralel cu un alt sistem.

Primul experiment a fost alegerile de la Blogovăț. Unde a fost un juriu și în paralel bloggerii s-au votat între ei. M-au inpirat rezultatele, aproximativ 80% din cei care juriul i-au ales se regăseau în topul calculat de acest sistem.

Al doilea experiment l-am făcut pe studenții de la UTM. La sfârșitul cursului, studenții aveau un examen unde răspundeau la întrebări și erau punctați pentru răspunsurile corecte. Însă ultima întrebare suna în felul următor, “Cine crezi că dintre colegii tăi, știe cel mai bine acest obiect?”. Aici rezultatele au fost și mai uimitoare. Studentul care într-adevăr a răspuns cel mai bine era ales și de colegi că știe cel mai bine. Și corelarea continua. Surpriză a fost că pe locul doi era starostea grupei.

Aceste două experimente arată că sistemul e destul de viabil pentru a calcula câștigătorul în baza voturilor pe care concurenții le dau între ei și nu mai este necersar pasul de înaintare a candidatului.

Au trecut 10 ani. Am așteptat atât pentru ca toată lumea să aibă telefoane mobile. Experimentele mele au fost într-un mediu unde era controlat de mine și cunoșteam persoanele care votează. Însă dacă doresc să scalez un așa sistem de votare la nivel internațional e crucial să ai și confirmarea identității. Anume din această cauză am așteptat atâta timp pentru ca oamenii să-și cumpere câte un telefon mobil.

În viitor va fi un App ca și Uber, AirBnB, Lift... pentru democrație. Ți-a venit un push notification, citești titlu alegerilor, te alături, deschizi lista membrilor și votezi pe unul, câțiva oameni din listă care știi că merită să câștige. Peste puțin timp sistemul printr-o magie matematică declară câștigătorul și instant anunță pe toți care au participat. Gata. Fără candidați, fără agitație, fără trolli, fără manipulare, fără promisiuni deșarte, fără murdărie, fără tweedism.

Veți spune că niciodată un guvern nu va folosi un așa sistem nou. Sunt de acord! Însă scopul acestul sistem este ca votările mici online să devină cât mai automatizate, cât mai ușoare și să dea rezultate bune să devină net superioare sistemului clasic. Și dacă în final vreun partid nou creat va face alegeri interne cu un așa sistem și oamenii care vor topul listele partidului nimeri doar cei buni, acel partid va câștiga la alegerile clasice. Politicienii care au acest comportament care îl știm noi, îl au nu de azi, nu de ieri.. ei l-au căpătat la alegerile mici la școală, la universitate sau colective. Cu un un sistem nou creat avem șansa în timp să scăpăm de oameni care cheltuie timp pentru a se murdări între ei și nu a se ține de cuvânt și să se lupte doar pentru a sta la putere utilizând resursele unui grup mic de interese.

Poate atunci nu vom mai fi forțați să votăm răul cel mai mic.

Detalii tehnice voi oferi în următorul articol. Cei care s-au prins și au o speranță că se poate ceva de schimbat vă invit să descărcați aplicația de pe https://voteme.app. Vă rog să dați și un share la acest articol pentru prietenii tăi. Sistemul e funcțional dacă ai prieteni în el ca să ai pe cine vota.

Siri așteaptă întrebarea.

Siri așteaptă întrebarea. (Siri - asistent virtual cu Inteligență Artificială)

La conferința ICEEFEST 2018 am asistat la un panel despre politică, internet, revolte și AI. La întrebarea mea paneliștilor “Cum arată sfârșitul democrației în contextul tematicii panelului” ei au arătat nedumeriți, să nu spunem că m-au considerat un țâcnit.

Mai jos voi încerca să răspund ce am avut eu în vedere. Stați cu mine.

Rezultatul electoral depinde în mare măsură de faptul cum candidații sunt arătați de mass-media. Odată cu popularizarea Internetului și a rețelelor de socializare tot mai mulți politicieni recurg la dialogul cu electoratul prin Internet. Pentru cei sceptici, în anul 2019 timpul petrecut în Internet va întrece timpul petrecut în fața TV-ului. Adică consumul neliniar de informație va întrece consumul liniar și centralizat (Radio/TV). De ziare nu mai vorbim, ele sunt duse.

Însă în epoca Internetului există o mare problemă cu informația, ea este mult prea multă. La început au fost multe search-uri care au dat faliment după ce a apărut google cu un nou algoritm de aranjare a informației (PageRank) și care practic a acaparat tot Internetul. Mai târziu Google a introdus un nou sistem, BrainRank. Atunci când cauți ceva informație pe o anumită temă, AI (Inteligența Artificială) decide ce rezultate vei vedea.

Pe de altă parte, Facebook-ul vine cu o altă invenție destul de revoluționară, News Feed. Unde informația curge spre tine, nu tu o cauți. Însă acest șir informațional la fel este generat în dependență de preferințele tale, prietenii tăi, timp și multe alte semnale care Facebook-ul alimentează EdgeRank-ul lor pentru a scoate ceva relevant pentru ochii tăi în timp ce tu faci scroll de pe mobil. Deci și aici șirul informațional va depinde sau deja depinde de AI pentru că Facebook investește resurse considerabile în acest domeniu.

Similar e și la Twitter, Youtube, Netflix... și alte servicii unde abundă informația, iar tehnologiile de growth hacking încearcă să te facă să revii și să revii pentru că îți arată doar ceea ce dorești.

Marea majoritate din noi având dispozitive mobile transmitem cantități enorme de date la companiile care produc telefoane sau aplicații. Acestea la rândul lor ne servesc informațiile care nouă ne plac.

Viralitatea revoltelor mult lăudate din Chișinău și #rezist din București este dependentă de diciziile AI-ului. AI decide cât de viral poate fi un eveniment sau grup, sau o postare; în dependență de numărul de like-uri, share-uri, comentarii, locație, timp… La un eveniment care a avut succes posibil sunt sute de evenimente la care organizatorii nu au reușit să adune lume. De ce? Pentru că creierul artificial a decis că nu se merită de promovat în news feed-ul oamenilor.

Facebook are atât de multe date despre fiecare din noi că își permite să genereze liste de oameni în baza unei alte liste de oameni (Lookalike). De exemplu, dacă vrei să-ți mărești numărul membrilor în partid, îi dai Facebook-ului lista tuturor membrilor de partid care au cont în Facebook și el îți face o altă listă de oameni care au viziuni similare, însă încă nu sunt membri de partid. Îți rămâne să plasezi un îndemn și să îi chemi în partid.

Scandalul Cambridge Analytica i-a făcut pe congresmeni să înțeleagă puterea unui sistem cu inteligență artificială și cum el poate influența alegerile. Alegeri care până mai ieri se făceau de pe ecranele TV-ului.

Deci sistemele bazate pe AI deja controlează fluxul informațional și totodată știu foarte mult despre comportamentul nostru.

În viitorul apropiat când majoritatea populației va fi în Internet (în unele țăre majoritatea deja este în Internet) partidele politice pot adopta o altă tactică, cea de simulare a candidatului cu cea mai mare probabilitate de câștig în dependență de preferințele electoratului. Vor lupta în a găsi candidatul, nu în promovarea lui. De aceea în viitor mult va conta brandul personal. La alegerile parlamentare lista candidaților se va face în dependență de simulările membrilor de partid care au cele mai mari șanse de câștig a electoratului. Sau se va încerca diversificarea listei. De exemplu, un candidat este popular printre bucătari, altul printre ingineri, al treilea pe instagram….

Democrația devine broasca care încetul cu încetul se fierbe în apă și nu-și dă seama că moare. Vom avea iluzia că am găsit candidatul cel mai bun însă cine este acest candidat îl va decide inteligența artificială.

În final vom ajunge să întrebăm de Siri pe cine să votăm.

Există vreo soluție pentru a evita această dependență de AI? Dacă aveți și voi una sunteți bineveniți să o lăsați în comentarii.

Eu am una. Vă aștept să o citiți în articolul viitor.

bell curve

Când fac un sondaj, organizatorii încearcă să aleagă eșantionul cât mai reprezentativ pentru ca sondajul să fie cât mai corect.  După ce se colectează un număr relativ mare de respondeți, se declară marja de eroare și se anunță în presă rezultatele sondajului. Atenție însă, marja de eroare este de fapt o eroare tehnică (adică câte % din oameni au greșit indicațiile). Aceasta nu e o eroare de la purul adevăr care sondajul trebuie să-l găsească. Recomandarea mea este ca această eroare să nu fie inclusă în slide-uri pentru a nu induce în eroare jurnaliștii.

Părerea mea subiectivă este că toate sondajele realizate până acum sunt făcute greșit. Vă explic și de ce.

Problema este în alegerea eșantionului reprezentativ.

Noi, oamenii, când încercăm să facem eșantionul ne străduim să inventăm câteva categorii de persoane, apoi vedem care este distribuția lor în societate și repectiv extrapolăm în eșantion.

De exemplu: Eșantionul e de 1000, iar studenți în țară sunt 5% înseamnă că în eșantion trebuie să avem exact 50 studenți, nici mai mult nici mai puțin.

Aceste categorii în domeniul Machine Learning se mai numesc features.  Noi, oamenii, încercăm să gândim ce categorii de oameni poate să voteze diferit de o altă categorie și să le includem în sondaj pe ambele; Machine Learning ia în vedere orice bifă care indică fiecare om și încearcă să și calculeze care anume din aceste bife influențează deciziile omului.

Extragerea features sau embed-urilor nu este o noutate în domeniul deep learning. Mai țineți minte cum Google Translate și-a inventat propriul limbaj de comunicare? Sau cum diacritice.ai plasează corect diacritice fără să știe măcar regulele limbii române?

Deci cum ar trebui să arate un sondaj făcut corect?

  1. Trebuie să colectăm cât mai multă informație despre persoanele care au votat în trecut și cum au votat ei.
  2. Crearea unor embed-uri în baza acestor date.
  3. Crearea unui sondaj și colectarea a cât mai multor respondenți.
  4. Eliminarea repondenților care nu sunt relevanți conform proporției de embeduri.
  5. Publicarea datelor statistice de la respondenții rămași.

Știu, veți spune că niciodată nimeni nu va declara cu cine a votat și cu atât mai mult o mulțime de bife care indică totul despre el. Sunt de acord cu voi.

Ne rămâne până atunci să ne jucăm de-a pseudo-sondajele.

4 Comments

Orice decizie care face o persoană normală în - Andrew Ng

Recent experimentam cu Inteligența Artificială, mai exact cu Machine Learning, mai exact cu Deep Learning… pentru geeks… mă jucam cu LSTM.

Mi-a venit un gând să încerc să corectez cu ajutorul LSTM diacriticele în limba română.

Am cumpărat cel mai puternic GPU găsit prin țară, un NVIDIA Geforce GTX 1080 TI. Fără GPU în Deep Learning nu faci nimic. Cumperi cât te ține buzunarul, altfel pierzi timpul. Am construit un model AI, am colectat texte în limba română de pe Internet. I-am dat GPU-ului să ”rugume” acest text și rezultatul l-am pus pe server online.

Țin să menționez că modelul AI nu are idee de limba română, cuvinte în limba română sau reguli de care să se conducă. Simplu, îi dai cât mai mult text și îl lași singur să se descurce. Serverul a muncit din greu câteva zile până am primit precizia uimitoare de 99.97%.

Boom! AI-ul a învățat să pună diacriticele în dependență de context. Încercați: "Langa casa mea nu creste iarba. Langa casa creste un copac." 😉

Vedeți ce mi-a reușit pe https://diacritice.ai sau să vă instalați extensiunea Chrome.

Pentru curioși urmează detalii.

Machine Learning deschide noi perspective în rezolvarea problemelor care până acum nu se puteau rezolva pe cale algoritmică. Diacriticele sunt un exemplu.

Nu e ușor să construiești un algoritm care să corecteze diacriticele pentru că unele din ele reies din context. Exemplu: “Lângă casa mea crește un copac. Lângă casă nu este nimeni”. În același cuvânt casa și casă se pune sau nu diacritic în dependență de context.

Pentru a rezolva astfel de probleme îți trebuie multă informație. Eu am colectat tocmai 7.3 GB de texte în limba română scrise cu diacritice.

Apoi îți trebuie putere de calcul. În cazul meu, am cumpărat NVIDIA Geforce GTX 1080 TI, una din cele mai puternice cartele grafice găsite în Moldova. Antrenarea rețelei neuronale se face pe cartele grafice cu cele 3584 de CUDA procesoare care lucrează în paralel. Anume această tranziție de la procesor la cartele grafice a dat un imbold mare dezvoltării acestui domeniu.

Ne mai trebuie și un framework pentru a crea rețeaua neuronală. Eu am ales Keras pentru simplitate și Tensorflow pentru execuție.

Ideea este următoarea. Să căutăm în text literele a, i, s, t și apoi analizăm 30 de litere în dreapta și 30 din stânga și le transmitem la intrare în rețeaua neuronală, iar la ieșire îi spunem că trebuie să avem a, i, s, t, ă, â, î, ș, ț. De ce 30 din stânga și din dreapta? Am încercat și câte 15 caractere și câte 20, însă cu 30 am ajuns la un rezultat bun. Posibil că există și alte lungimi mai bune, rămâne pe viitor să mai încerc.

Deep learning se reduce până la urmă la înmulțiri de matrici (aka tensori). X*W + b = Y. Unde X este matricea de intrare (textul nostru codat într-o anumită formă), Y este rezultatul în baza căruia se învață, în cazul nostru e un vector cu 3 elemente căruia îi indicăm dacă este simbolul diacritic sau nu.

Cum transformăm textul în matrice? Îi atribuim fiecărei litere din alfabetul român o poziție în spațiul creat de noi. Pentru simplitate tot textul este convertat la minuscule.

alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r',
's','t','u','v','w','x','y','z',' ','.',',','!','?','-']

Facem o matrice 32x61 adica lungimea afabetului (32 caractere) și fereastra care noi o analizăm (61 caractere).

Să luam de exemplu textul:
langa casa creste un copac
Prima literă din șir 'l' este în afabet pe locul 11, deci primul rând în matrice va avea totul cu 0 și doar pe locul 11 va fi scris 1.
[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
A doua literă din șir 'a', al doilea rând va fi pe locul 0 scris 1 și restul va fi 0....
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
și așa încă 59 de rânduri.

Așa căpătăm matricea X care trebuie servită la intrare. Vectorul Y de la ieșire e din 3 elemente și poate fi [1, 0, 0] sau [0, 1, 0] sau [0, 0, 1]. Mai jos urmează explicația de ce Y anume așa este reprezentat.

Matricea W și vectorul b se inițializează cu niște valori arbitrare. Apoi în procesul de antrenare Deep Learning încearcă să schimbe valorile la W și b cât mai exact pentru ca la înmulțirea a cât mai multor X*W+b  să ne dea cât mai exact rezultatul indicat de noi în Y.

O problemă observată de mine aici e că dacă folosești LSTM doar într-o singură direcție, la texte scurte sau la începutul textului, apar dificultăți cu detectarea corectă. Așa că am trecut la LSTM bidirecțional. Modelele bidirecționale se mai folosesc și la recunoașterea vorbirii, traduceri, recunoașterea scrisului de mână. Adică indic rețelei neuronale cele 61 caractere de la dreapta la stânga și apoi de la stânga la dreapta.

Schematic arată așa:

Bidirectional LSTM

Codul exprimat în frameworkul Keras arată așa:

Modelul LSTM pentru corectarea diacriticilor în limba română.

Modelul LSTM pentru corectarea diacriticilor în limba română.

Pentru a face iterații cât mai multe testăm pe un text mai mic, am luat toate transcrierile de la privesc.eu (aproximativ 62 MB) și după un weekend am ajuns la performanța de 98.98% la training set, 98.97 la validation set și 97.71 la test set (1MB de texte din arhiva revistei contrafort.md)

Primul lucru încercat a fost ca la ieșire rețeaua să aleagă din cele  9 caractere, a, i, s, t, ă, â, î, ș, ț. Însă teoretic ar fi mai bine să ne dea răspunsul 0 sau 1. Adică dacă trebuie să fie diacritic pus pe locul 31 ori nu. Și deoarece noi știm că dacă pe locul 31 este i atunci și rezultatul 1, atunci pune î. Problema e că unii scriu cu â din a și la a avem 3 opțiuni a, ă, â. Pentru a minimiza spațiul de răspunsuri am ales vector cu 3 categorii [1, 0, 0] - nu este diacritic, [0, 1, 0] - este diacritic [0, 0, 1] - este â.

Dacă ați observat nicăieri nu indic sistemului că, de fapt,  caracterul diacritic care noi îl căutăm e anume pe poziția 31. Însă după câteva milioane de iterații el își dă seama singur :D.

După training cu Keras și Tensorflow urmărim rezultatul cu Tensorboard. Dacă nu avem overfit sau underfit e super, am găsit modelul corect. Am exportat modelul pentru a fi servit cu Tensorflow Serving. Am arendat pe Digitalocean un server de 5$/lună, am instalat Tensorflow Serving. Pentru a nu mă complica cu web serverul, am utilizat Flask.

Job done.

Vă invit să vă expuneți cu idei, sugestii, laude sau critici pe site-ul diacritice.ai.

PS: Ce urmează?
Versiunea curentă 1.1 e antrenată pe un volum de text de 1.4 GB. O epocă (iterație peste tot textul) durează aproximativ 15 ore. Urmează să încep să fac training pe cele 7.3 GB, însă va dura câteva săptămâni până voi face câteva epoci. Calitatea de 99.97% care o are sistemul acum e destul de acceptabilă. Nu mă opresc aici, sper să ajung la 99.99%

Coder Dojo la Tekwill.

Coder Dojo la Tekwill.

Dojo - cuvânt japonez, înseamnă locul iluminării.

Cercul de fotografie și aviamodelism au fost Dojo-ul generației mele. Pe care le așteptam în fiecare săptămână. Mi-am cumpărat și aparat foto și restul pentru a developa fotografiile alb-negru. Cele color erau peste puterile noastre.

La cercul de aviamodelism construiam avioane din lemn, piesă cu piesă și am învățat cum pornește, cum funcționează un motor cu ardere internă micuț-micuț.

Mai târziu au apărut calculatoarele și toți copii stăteau nopțile prin Internet cafenele. A fost o perioadă de lipsă de calculatoare, însă era oportunitate de comunicare cu oricine din lume.

Generația tânără acum are de toate: calculatoare, tablete, telefoane, youtube, e-book-uri. Le lipsește doar îndrumare.

Le lipsește un Dojo, un CoderDojo.

Dacă știi să contruiești ceva cu ajutorul tehnologiilor informaționale, să codezi, să construiești jocuri, site-uri, web design, aplicații pe IOS sau Android, te invit să aderi mentor la CoderDojo.

O mulțime de copii deștepți și doritori de cunoștințe te așteaptă să-i îndrumi.

Aici găsiți un formular de înregistrare. Veronica Eșanu (soția mea dragă) vă stă la dispoziție pentru mai multă informație.

"Bots are the new apps." Microsoft CEO Satya Nadella

Acum câțiva ani m-am lăsat de făcut aplicații pentru dispozitive mobile din simplul motiv că acest segment a devenit supraaglomerat.

Cu un cost per install de la $0.35 până la $3.35 pentru o aplicație care o dădea-i gratuită era destul de greu să-ți întorci banii în 3 luni (statistic un utilizator ține instalată o aplicație la el în dispozitivul mobil).

Cu timpul, oamenii au început a păstra aplicațiile rețelelor sociale și chat-urile. Deși unele rețele sociale permit să faci aplicații pentru ele, de obicei sunt doar pentru desktop. Însă în chat-uri integrarea e universală și este mult mai simplă. Prin boți!

Ce este un bot?

E o aplicație care rulează undeva pe un server și nu are o interacțiune directă cu utilizatorul. Comunică doar cu serverele sistemului de chat. Botul nu se instalează, trebuie doar să începi să comunici cu un anumit @nickname din acel sistem de comunicare.

Sistemele de comunicare, skype, facebook messange, kik, telegram… toate au metode de interacțiune cu boți și practic iau asupra lor toată comunicarea cu oamenii.  Rămâne doar să primiți mesajele, să le procesați și să dați un răspuns.

Începând cu anul trecut s-a început o bătălie între companiile mari pentru crearea de platforme pentru boți. Iată câteva: Microsoft cu luis.ai, IBM cu Watson, Amazon cu Lex, Google cu api.ai, Facebook cu wit.ai, Apple cu SiriKit.

Pe șleau spun, aceste platforme nu sunt așa de inteligente precum declară ei pe site.  Practic totul să reduce la crearea de către programator a unei liste de Intent-uri și Entities. Apoi, sistemul inteligent să poată din textul pe care îl scrie omul să aleagă un intent deja definit de programator, să separe o entitate și să dea răspunsul corespunzător.

O altă formă de comunicare este restricționarea răspunsurilor, unde persoana poate culege doar unele cuvinte sau apăsa unele butoane direct în chat.

O problemă și mai mare este că ele lucrează doar cu engleza sau cu limbile de circulație largă. Nu și cu româna. 🙁

Nu v-ați plictisit? Vă invit să citiți cum am construit bot-ul pentru privesc.eu care comunică în română și răspunde la orice întrebare despre serviciile privesc.eu.

După o lungă cercetare a platformelor de boți am dat peste http://dev.botframework.com/  . O platformă care combină orice chat cu orice platformă de inteligență artificială. Practic face toată munca de integrare a botului care îl faci cu mai toate sistemele de comunicare populare: SMS, Email, Skype, Telegram, Facebook Messanger, Slack…. Îți rămâne să faci logica și să apelezi după caz prin REST la alte servicii de procesare a informației textual cum ar fi: LUIS, Wit.AI, Watson, Lex…

Bot framework integration

Pentru a răspunde la întrebările frecvente la privesc.eu am apelat la serviciul https://qnamaker.ai de la Microsoft. Face un lucru simplu. Îi dai paginile cu FAQ-uri pentru a-și construi cu baza de date,  încearcă să înțeleagă ce întrebare îi adresează omul și caută răspunsul corect din lista de răspunsuri. Nu-ți generează el un răspuns, doar îți returnează cel mai probabil răspuns conform întrebării adresate.

După cum și am spus mai sus, aceste sisteme lucrează doar cu limba engleză. Am tradus în engleză cele 3 pagini de FAQ de pe privesc.eu și le-am dat la procesare. Am mai adăugat și unele întrebări care nu erau în FAQ. Am dat Train & Publish. Buh.. Gata de utilizare.

Codul acestui bot e destul de simplu și practic se reduce la chemarea altor servicii de procesare a informației.

Mesanger Controller

Prin REST, facem un apel la acest serviciu cu întrebarea în engleză și el ne întoarce în engleză răspunsul corect.

Deh.. moldovenii noștri nu prea știu engleza. Pentru a rezolva problema am utilizat https://cloud.google.com/translate/docs/. Traduce întrebarea din română în engleză, apoi întreb de qnamaker și apoi traduc răspunsul în română. Done.

Code for bot Privesc.Eu

Acest bot e destul de prostuț, nu prea înțelege întrebările. Doar 30 de întrebări-răspunsuri am în baza de date. Rezolvarea e simplă, vă rog pe voi să întrebați orice, botul îți va răspunde aiureli însă eu voi urmări logurile și voi adăuga răspunsurile.

Din botframework îmi rămâne să conectez cu sistemele de comunicare dorite, se face foarte simplu. De obicei se reduce la preluarea unor key-uri din sistemele de chat și salvarea lor în botframework.

Vă invit la o degustare testare.

1 Comment

Puișori
M-am întâlnit cu mulți politicieni care auzind de Silicon Valley, doresc să replice acest model la noi în țară. Pentru a evita populismul din partea lor, am identificat o serie de probleme și provocări care împiedică dezvoltarea ecositemului de startup-uri la noi.

  1. Startup-urile IT, e adevărat, pot fi lansate cu bani puțini. Un SRL se deschide ușor, însă e foarte greu să-l închizi. Doar 5% din startup-uri au succes, restul mor. E important să-ți închizi ușor afacerea.
  2. Pentru ca ulterior să poți atrage investiții, să dai cote părți și drepturi de vot, e nevoie să fie creată o companie de tip Corporate. Legislația învechită nu prea permite acest lucru.
  3. Legislația muncii din Moldova și Europa prea mult favorizează angajații, astfel ecosistemul de startup-uri practic nu există în această regiune. Antreprenorii au frică să angajeze.
  4. Sistemul de impozitare de tip TVA, fac toate startup-urile locale necompetitive cu cele americane.
  5. Dacă ai o companie care lucrează pe piața internațională trebuie să ții conturile bancare în valută, însă statul îți mai taxează odată conturilor în valută ca și profit, atunci când crește cursul leului. E adevărat că dacă scade cursul se dă la pierderii. Problema e că leul nu scade.
  6. Lipsa juriștilor cu cunoștințe în IT. (Chiar am asistat la o judecată unde 2 avocați și un judecător vorbeau aiureli în domeniul IT).
  7. Lipsa Angel Investors care să investească în startup-uri. Aceștia de regulă sunt persoanele care fac parte din foarte multe board-uri și contribuie la dezvoltarea noului startup prin intermediul relațiilor pe care le au.
  8. Antreprenori care nu au cunoștințele necesare pentru a înțelege cum lucrează investițiile. Le tratează ca pe împrumuturi bancare.
  9. Investitori puțini și cu gândire sovietică, atunci când îți dau bani, iar înapoi cer 51% din companie.
  10. Accesul la procesoarele de carduri internaționale practic inexistent (bine că Paypal a venit), astfel e foarte greu să-ți construiești o afacere digitală internațională cu sistemul de plăți local rudimentar.
  11. Lipsa acceleratoarelor.
  12. Suntem o națiune care nu știe să vândă. (spre deosebire de SUA sau Israel)

Rezultatul este:

  1. Companii de IT care au afaceri cu statul, având ca proprietari funcționari sau birocrați. Aceste companii de obicei fiind folosite la furtul banilor din buzunarul cetățenilor.
  2. Deși se vehiculează că 10% din PIB este generat de către ITC, în realitate doar 2% sunt generate de IT și 8% de comunicații (Orange, Moldcell, Moldtelecom).
  3. Marea majoritate a companiilor de IT sunt de tip outsource, adică primesc banii din afară doar atât cât să plătească salariile și taxele aferente.
  4. Chiar dacă se fac o mulțime de evenimente pentru crearea startup-urilor, de obicei vin aceiași concurenți. Iar după eveniment noua echipa de regulă se desființează.

PS: Doar cu Internet de calitate superioară nu poți face un startup.