NLP cu API-ul Google Cloud Natural Language
Publicat: 2022-03-11Procesarea limbajului natural (NLP), care este combinația dintre învățarea automată și lingvistică, a devenit unul dintre cele mai intens cercetate subiecte în domeniul inteligenței artificiale. În ultimii câțiva ani, au fost atinse multe etape noi, cel mai nou fiind modelul OpenAI GPT-2, care este capabil să producă articole realiste și coerente despre orice subiect dintr-o scurtă intrare.
Acest interes este determinat de numeroasele aplicații comerciale care au fost aduse pe piață în ultimii ani. Vorbim cu asistenții noștri de acasă care folosesc NLP pentru a transcrie datele audio și pentru a înțelege întrebările și comenzile noastre. Tot mai multe companii transferă o mare parte a efortului de comunicare cu clienții către chatbot-uri automate. Piețele online îl folosesc pentru a identifica recenzii false, companiile media se bazează pe NLP pentru a scrie articole de știri, companiile de recrutare potrivesc CV-urile cu pozițiile, giganții rețelelor sociale filtrează automat conținutul instigator la ură, iar firmele juridice folosesc NLP pentru a analiza contractele.
Antrenarea și implementarea modelelor de învățare automată pentru sarcini ca acestea a fost un proces complex în trecut, care a necesitat o echipă de experți și o infrastructură costisitoare. Dar cererea mare pentru astfel de aplicații i-a determinat pe marii furnizori să dezvolte servicii legate de NLP, care reduc foarte mult volumul de muncă și costurile de infrastructură. Costul mediu al serviciilor cloud a scăzut de ani de zile, iar această tendință este de așteptat să continue.
Produsele pe care le voi prezenta în acest articol fac parte din Google Cloud Services și se numesc „Google Natural Language API” și „Google AutoML Natural Language”.
API-ul Google Natural Language
API-ul Google Natural Language este o interfață ușor de utilizat pentru un set de modele NLP puternice care au fost pregătite în prealabil de Google pentru a îndeplini diverse sarcini. Deoarece aceste modele au fost instruite pe corpusuri de documente enorm de mari, performanța lor este de obicei destul de bună atâta timp cât sunt utilizate pe seturi de date care nu folosesc un limbaj foarte idiosincratic.
Cel mai mare avantaj al utilizării acestor modele pre-antrenate prin intermediul API-ului este că nu este nevoie de un set de date de antrenament. API-ul permite utilizatorului să înceapă imediat să facă predicții, ceea ce poate fi foarte valoros în situațiile în care sunt disponibile puține date etichetate.
API-ul Natural Language cuprinde cinci servicii diferite:
- Analiza sintaxei
- Analiza sentimentelor
- Analiza entității
- Analiza Sentimentului Entității
- Clasificarea textului
Analiza sintaxei
Pentru un anumit text, analiza de sintaxă Google va returna o defalcare a tuturor cuvintelor cu un set bogat de informații lingvistice pentru fiecare simbol. Informațiile pot fi împărțite în două părți:
Parte de vorbire: această parte conține informații despre morfologia fiecărui simbol. Pentru fiecare cuvânt, se returnează o analiză fină care conține tipul acestuia (substantiv, verb etc.), genul, cazul gramatical, timpul, starea gramaticală, vocea gramaticală și multe altele.
De exemplu, pentru propoziția introdusă „Un computer m-a bătut odată la șah, dar nu s-a potrivit pentru mine la kickboxing”. (Emo Philips) analiza părții de vorbire este:
A | tag: DET |
'calculator' | tag: SUBSTANȚIU număr: SINGULAR |
'o singura data' | tag: ADV |
'bate' | tag: VERB mod: timp INDICATIV: TRECUT |
'pe mine' | tag: PRON caz: ACUZATIV numar: SINGULAR persoana: PRIMA |
la | Etichetă: ADP |
'şah' | tag: SUBSTANȚIU număr: SINGULAR |
',' | Etichetă: PUNCT |
'dar' | tag: CONJ |
'aceasta' | tag: PRON caz: NOMINATIV gen: NEUTRE număr: SINGULAR Persoană: A TREIA |
'a fost' | etichetă: VERB mod: INDICATIV număr: SINGULAR Persoană: AL TREILEA timp: TRECUT |
'Nu' | tag: DET |
'Meci' | tag: SUBSTANȚIU număr: SINGULAR |
'pentru' | Etichetă: ADP |
'lovitură' | tag: SUBSTANȚIU număr: SINGULAR |
'box' | tag: SUBSTANȚIU număr: SINGULAR |
'.' | Etichetă: PUNCT |
Arbori de dependență: a doua parte a returnării se numește arbore de dependență, care descrie structura sintactică a fiecărei propoziții. Următoarea diagramă a unui citat celebru Kennedy arată un astfel de arbore de dependență. Pentru fiecare cuvânt, săgețile indică cuvintele care sunt modificate de acesta.
Bibliotecile Python utilizate în mod obișnuit nltk și spaCy conțin funcționalități similare. Calitatea analizei este constant ridicată pentru toate cele trei opțiuni, dar API-ul Google Natural Language este mai ușor de utilizat. Analiza de mai sus poate fi obținută cu foarte puține linii de cod (vezi exemplul mai jos). Cu toate acestea, în timp ce spaCy și nltk sunt open-source și, prin urmare, gratuite, utilizarea API-ului Google Natural Language costă bani după un anumit număr de solicitări gratuite (vezi secțiunea de costuri).
În afară de engleză, analiza sintactică acceptă zece limbi suplimentare: chineză (simplificată), chineză (tradițională), franceză, germană, italiană, japoneză, coreeană, portugheză, rusă și spaniolă .
Analiza sentimentelor
Serviciul de analiză de sintaxă este folosit în mare parte la începutul canalului pentru a crea caracteristici care sunt ulterior introduse în modelele de învățare automată. Dimpotrivă, serviciul de analiză a sentimentelor poate fi folosit imediat.
Analiza sentimentelor Google va oferi opinia emoțională predominantă într-un text furnizat. API-ul returnează două valori: „Scorul” descrie înclinarea emoțională a textului de la -1 (negativ) la +1 (pozitiv), cu 0 fiind neutru.
„Mărimea” măsoară puterea emoției.
Să ne uităm la câteva exemple:
Propoziție de intrare | Rezultatele sentimentelor | Interpretare |
Trenul spre Londra pleacă la ora patru | Scor: 0,0 Magnitudine: 0,0 | O afirmație complet neutră, care nu conține deloc emoție. |
Această postare pe blog este bună. | Scor: 0,7 Magnitudine: 0,7 | Un sentiment pozitiv, dar nu foarte puternic exprimat. |
Această postare pe blog este bună. A fost de mare ajutor. Autorul este uimitor. | Scor: 0,7 Magnitudine: 2,3 | Același sentiment, dar exprimat mult mai puternic. |
Această postare pe blog este foarte bună. Acest autor este de obicei un scriitor oribil, dar aici a avut noroc. | Scor: 0,0 Magnitudine: 1,6 | Amploarea ne arată că există emoții exprimate în acest text, dar sentimentul arată că ele sunt amestecate și nu clar pozitive sau negative. |
Modelul de analiză a sentimentelor Google este antrenat pe un set de date foarte mare. Din păcate, nu există informații disponibile despre structura sa detaliată. Eram curios de performanța sa în lumea reală, așa că l-am testat pe o parte a setului de date Large Movie Review, care a fost creat de oamenii de știință de la Universitatea Stanford în 2011.
Am selectat aleatoriu 500 de recenzii pozitive și 500 de recenzii negative de filme din setul de testare și am comparat sentimentul prezis cu eticheta reală a recenziei. Matricea de confuzie arăta astfel:
Sentiment pozitiv | Sentiment negativ | |
Bună recenzie | 470 | 30 |
Review proastă | 29 | 471 |
După cum arată tabelul, modelul are dreptate aproximativ 94% din timp pentru recenzii bune și rele de filme. Aceasta nu este o performanță proastă pentru o soluție ieșită din cutie, fără nicio reglare fină a problemei date.
Notă: analiza sentimentelor este disponibilă pentru aceleași limbi ca și analiza de sintaxă, cu excepția rusă.
Analiza entității
Analiza entităților este procesul de detectare a entităților cunoscute, cum ar fi personaje publice sau repere dintr-un text dat. Detectarea entităților este foarte utilă pentru toate tipurile de sarcini de clasificare și modelare a subiectelor.
API-ul Google Natural Language oferă câteva informații de bază despre fiecare entitate detectată și chiar oferă un link către articolul Wikipedia respectiv, dacă acesta există. De asemenea, se calculează un scor de proeminență. Acest scor pentru o entitate oferă informații despre importanța sau centralitatea acelei entități pentru întregul text al documentului. Scorurile mai apropiate de 0 sunt mai puțin proeminente, în timp ce scorurile mai apropiate de 1,0 sunt foarte importante.
Când trimitem o solicitare către API cu această propoziție exemplu: „Robert DeNiro a vorbit cu Martin Scorsese la Hollywood în Ajunul Crăciunului în decembrie 2011”. Primim urmatorul rezultat:
Entitate detectată | informatii suplimentare |
Robert De Niro | tip : PERSOANă salience : 0.5869118 wikipedia_url : https://en.wikipedia.org/wiki/Robert_De_Niro |
Hollywood | tip : LOCATION salience : 0.17918482 wikipedia_url : https://en.wikipedia.org/wiki/Hollywood |
Martin Scorsese | tip : LOCATION salience : 0.17712952 wikipedia_url : https://en.wikipedia.org/wiki/Martin_Scorsese |
Ajunul Craciunului | tip : PERSOANă salience : 0.056773853 wikipedia_url : https://en.wikipedia.org/wiki/Christmas |
decembrie 2011 | tip : DATA Anul : 2011 Luna : 12 salience : 0.0 wikipedia_url : - |
2011 | tip: NUMBER salience: 0.0 wikipedia_url: - |
După cum puteți vedea, toate entitățile sunt identificate și clasificate corect, cu excepția faptului că 2011 apare de două ori. În plus față de câmpul din rezultatul exemplu, API-ul de analiză a entității va detecta și organizații, opere de artă, bunuri de larg consum, numere de telefon, adrese și prețuri.
Analiza Sentimentului Entității
Dacă există modele pentru detectarea entităților și analiza sentimentelor, este firesc să facem un pas mai departe și să le combinați pentru a detecta emoțiile predominante față de diferitele entități dintr-un text.
În timp ce API-ul Sentiment Analysis găsește toate afișările de emoții din document și le adună, Entity Sentiment Analysis încearcă să găsească dependențele dintre diferitele părți ale documentului și entitățile identificate și apoi atribuie emoțiile din aceste segmente de text entităților respective.
De exemplu textul cu opinie: „Autoarea este un scriitor oribil. Pe de altă parte, cititorul este foarte inteligent.” duce la rezultate:
Entitate | Sentiment |
autor | Sentință: 0,8773350715637207 Sentiment: magnitudine: 1,89999976158142 scor: -0,899999761581421 |
cititor | Sentință: 0,08653714507818222 Sentiment: magnitudine: 0,8999999761581421 scor: 0,899999761581421 |
Până acum, analiza sentimentului entității funcționează numai pentru engleză, japoneză și spaniolă.
Clasificarea textului
În cele din urmă, API-ul Google Natural Language vine cu un model de clasificare a textului plug-and-play.
Modelul este antrenat pentru a clasifica documentele de intrare într-un set mare de categorii. Categoriile sunt structurate ierarhic, de exemplu, Categoria „Hobby-uri și agrement” are mai multe subcategorii, dintre care una ar fi „Hobby-uri și petrecere a timpului liber/În aer liber” , care în sine are subcategorii precum „Hobby-uri și timp liber/În aer liber/Pescuit”.
Acesta este un exemplu de text dintr-un anunț pentru o cameră Nikon:
„Senzorul mare în format DX de 24,2 MP al D3500 surprinde fotografii bogat în detalii și filme Full HD, chiar și atunci când înregistrați în condiții de lumină slabă. În combinație cu puterea de redare a obiectivului dvs. NIKKOR, puteți începe să creați portrete artistice cu neclaritate netedă a fundalului. Cu ușurință."

API-ul Google returnează rezultatul:
Categorie | Încredere |
Artă și divertisment/Artă vizuală și design/Arte fotografice și digitale | 0,95 |
Hobby-uri și agrement | 0,94 |
Calculatoare și electronice/Electronice de larg consum/Cameră și echipamente foto | 0,85 |
Toate aceste trei categorii au sens, chiar dacă intuitiv am clasa a treia intrare mai sus decât a doua. Cu toate acestea, trebuie luat în considerare faptul că acest segment de intrare este doar o scurtă parte din documentul publicitar complet al camerei și performanța modelului de clasificare se îmbunătățește odată cu lungimea textului.
După ce l-am încercat cu o mulțime de documente, am găsit rezultatele modelului de clasificare semnificative în majoritatea cazurilor. Totuși, ca toate celelalte modele din API-ul Google Natural Language, clasificatorul vine ca o soluție de tip cutie neagră care nu poate fi modificată sau chiar ajustată de către utilizatorul API-ului. În special în cazul clasificării textului, marea majoritate a companiilor vor avea propriile categorii de text care diferă de categoriile modelului Google și, prin urmare, serviciul de clasificare a textului Natural Language API ar putea să nu fie aplicabil pentru majoritatea utilizatorilor.
O altă limitare a modelului de clasificare este că funcționează numai pentru textele în limba engleză.
Cum să utilizați API-ul Natural Language
Avantajul major al API-ului Google Natural Language este ușurința în utilizare. Nu sunt necesare abilități de învățare automată și aproape deloc abilități de codare. Pe site-ul web Google Cloud, puteți găsi fragmente de cod pentru apelarea API-ului pentru o mulțime de limbi.
De exemplu, codul Python pentru a apela API-ul de analiză a sentimentelor este scurt ca:
from google.cloud import language_v1 from google.cloud.language_v1 import enums import six def sample_analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment print('Score: {}'.format(sentiment.score)) print('Magnitude: {}'.format(sentiment.magnitude))
Celelalte funcționalități API sunt apelate într-un mod similar, pur și simplu prin schimbarea client.analyze_sentiment
la funcția corespunzătoare.
Costul general al API-ului Google Natural Language
Google taxează utilizatorii săi pe bază de cerere pentru toate serviciile API-ului Natural Language. Acest lucru are avantajul că nu există costuri fixe pentru niciun server de implementare. Dezavantajul este că poate deveni scump pentru seturi de date foarte mari.
Acest tabel arată prețurile (la 1.000 de solicitări) în funcție de numărul de solicitări lunare:
Dacă un document are mai mult de 1.000 de caractere, acesta contează drept cereri multiple. De exemplu, dacă doriți să analizați sentimentul a 10.000 de documente, care au 1.500 de caractere fiecare, veți fi taxat cu 20.000 de solicitări. Deoarece primele 5.000 sunt gratuite, costurile totale s-ar ridica la 15 USD. Analizarea unui milion de documente de aceeași dimensiune ar costa 1.995 USD.
Convenabil, dar inflexibil
API-ul Google Natural Language este o opțiune foarte convenabilă pentru soluții rapide, iute din cutie. Sunt necesare foarte puține cunoștințe tehnice și nicio înțelegere a modelelor de învățare automată subiacente.
Principalul dezavantaj este inflexibilitatea acestuia și lipsa accesului la modele. Modelele nu pot fi reglate la o anumită sarcină sau set de date.
Într-un mediu real, majoritatea sarcinilor vor necesita probabil o soluție mai adaptată decât o pot oferi funcțiile standardizate API Natural Language.
Pentru acest scenariu, Google AutoML Natural Language este mai potrivit.
Limbajul natural Google AutoML
Dacă API-ul Natural Language nu este suficient de flexibil pentru scopurile dvs. de afaceri, atunci AutoML Natural Language ar putea fi serviciul potrivit. AutoML este un nou serviciu Google Cloud (încă în versiune beta) care permite utilizatorului să creeze modele personalizate de învățare automată. Spre deosebire de API-ul Natural Language, modelele AutoML vor fi instruite pe datele utilizatorului și, prin urmare, se potrivesc unei sarcini specifice.
Modelele personalizate de învățare automată pentru clasificarea conținutului sunt utile atunci când categoriile predefinite care sunt disponibile din API-ul Natural Language sunt prea generice sau nu se aplică cazului de utilizare specific sau domeniului de cunoștințe.
Serviciul AutoML necesită un pic mai mult efort pentru utilizator, în principal pentru că trebuie să furnizați un set de date pentru a antrena modelul. Cu toate acestea, instruirea și evaluarea modelelor sunt complet automatizate și nu sunt necesare cunoștințe de învățare automată. Întregul proces se poate face fără a scrie niciun cod folosind consola Google Cloud. Desigur, dacă doriți să automatizați acești pași, există suport pentru toate limbajele de programare comune.
Ce se poate face cu Google AutoML Natural Language?
Serviciul AutoML acoperă trei cazuri de utilizare. Toate aceste cazuri de utilizare acceptă doar limba engleză pentru moment.
1. Clasificarea textului AutoML
În timp ce clasificatorul de text al API-ului Natural Language este pre-antrenat și, prin urmare, are un set fix de categorii de text, clasificarea text AutoML construiește modele personalizate de învățare automată, cu categoriile pe care le furnizați în setul de date de antrenament.
2. Analiza sentimentelor AutoML
După cum am văzut, analiza sentimentului API-ului Natural Language funcționează excelent în cazuri de utilizare generale, cum ar fi recenziile de filme. Deoarece modelul de sentiment este antrenat pe un corpus foarte general, performanța se poate deteriora pentru documentele care folosesc mult limbaj specific domeniului. În aceste situații, AutoML Sentiment Analysis vă permite să antrenați un model de sentiment care este personalizat pentru domeniul dvs.
3. Extragerea entității AutoML
În multe contexte de afaceri, există entități specifice domeniului (contracte legale, documente medicale) pe care API-ul Natural Language nu le va putea identifica. Dacă aveți un set de date în care entitățile sunt marcate, puteți antrena un extractor de entități model personalizat cu AutoML. Dacă setul de date este suficient de mare, modelul de extracție a entităților antrenate va putea, de asemenea, să detecteze entități nevăzute anterior.
Cum să utilizați limbajul natural AutoML
Utilizarea celor trei AutoML este un proces în patru pași și este foarte asemănător pentru toate cele trei metodologii:
Pregătirea setului de date
Setul de date trebuie să fie într-un format specific (CSV sau JSON) și trebuie să fie stocat într-o găleată de stocare. Pentru modelele de clasificare și sentiment, seturile de date conțin doar două coloane, textul și eticheta. Pentru modelul de extragere a entităților, setul de date are nevoie de text și de locațiile tuturor entităților din text.Training model
Antrenamentul modelului este complet automat. Dacă nu sunt date instrucțiuni altfel, atunci AutoML va împărți automat setul de antrenament în seturi de tren, de testare și de validare. Această împărțire poate fi decisă și de utilizator, dar aceasta este singura modalitate de a influența antrenamentul modelului. Restul instruirii este complet automatizat într-o cutie neagră.Evaluare
Când antrenamentul se termină, AutoML va afișa scoruri de precizie și reamintire, precum și o matrice de confuzie. Din păcate, nu există absolut nicio informație despre modelul în sine, ceea ce face dificilă identificarea motivelor modelelor proaste.Previziune
Odată ce sunteți mulțumit de performanța modelului, modelul poate fi implementat convenabil cu câteva clicuri. Procesul de implementare durează doar câteva minute.
Performanța modelului AutoML
Procesul de antrenament este destul de lent, probabil pentru că modelele de bază sunt foarte mari. Am antrenat o mică sarcină de clasificare a testelor cu 15.000 de mostre și 10 categorii, iar antrenamentul a durat câteva ore. Un exemplu din lumea reală cu un set de date mult mai mare mi-a luat câteva zile.
Deși Google nu a publicat niciun detaliu despre modelele utilizate, cred că modelul BERT al Google este folosit cu mici adaptări pentru fiecare sarcină. Reglarea fină a modelelor mari, cum ar fi BERT, este un proces costisitor din punct de vedere computațional, mai ales atunci când se efectuează multă validare încrucișată.
Am testat modelul de clasificare AutoML într-un exemplu real cu un model pe care l-am dezvoltat eu, care se baza pe BERT. În mod surprinzător, modelul AutoML a funcționat semnificativ mai rău decât propriul meu model, atunci când a fost antrenat pe aceleași date. AutoML a atins o precizie de 84%, în timp ce modelul meu a atins 89%.
Asta înseamnă că, deși folosirea AutoML ar putea fi foarte convenabilă, pentru sarcinile critice de performanță este logic să investești timp și să dezvolți singur modelul.
Prețuri AutoML
Prețul AutoML pentru predicții cu 5 USD per 1.000 de înregistrări text este semnificativ mai scump decât API-ul Natural Language. În plus, pentru antrenamentul modelului, AutoML percepe 3 USD pe oră. Deși acest lucru este neglijabil la început, pentru cazurile de utilizare care necesită recalificare frecventă, acest lucru poate ajunge la o sumă substanțială, mai ales că antrenamentul pare a fi destul de lent.
Să folosim același exemplu ca pentru API-ul Natural Language:
Doriți să analizați sentimentul a 10.000 de documente, care au câte 1.500 de caractere fiecare, astfel încât să vi se plătească 20.000 de solicitări. Să presupunem că antrenarea modelului durează 20 de ore, ceea ce costă 48 USD. Predicția nu te-ar costa nimic, deoarece primele 30.000 de solicitări sunt gratuite. Pentru seturi de date mici ca acesta, AutoML este foarte economic.
Cu toate acestea, dacă setul de date este mai mare și trebuie să preziceți sentimentul unui milion de aceeași dimensiune, ar costa 9.850 USD, ceea ce este destul de scump. Pentru astfel de seturi de date mari, este logic să vă dezvoltați propriul model, să îl implementați singur, fără a utiliza AutoML.
API-ul Google Natural Language vs. AutoML Natural Language
Google AutoML Natural Language este mult mai puternic decât API-ul Natural Language, deoarece permite utilizatorului să antreneze modele care sunt personalizate pentru setul de date și domeniul specific.
Este la fel de ușor de utilizat și nu necesită cunoștințe de învățare automată. Cele două dezavantaje sunt costurile mai mari și necesitatea furnizării unui set de date de înaltă calitate, care trebuie să antreneze modele care funcționează bine.
AutoML beta acceptă doar trei sarcini NLP deocamdată (clasificare, analiză a sentimentelor, extragerea entităților) și acceptă doar documente în limba engleză. Când acest serviciu este lansat complet, mă aștept ca alte limbi și sarcini NLP să fie adăugate în timp.