NLP (Prelucrarea limbajului natural)

Această lucrare este un ghid pentru procesarea textului în limba franceză,

cuvinte oprire

Acest articol vă va prezenta vocabularul de bază și un flux de lucru sugerat pentru crearea de aplicații NLP pentru a vă ajuta să începeți cu cele mai frecvente sarcini, cum ar fi analiza sentimentului, recunoașterea entității, încorporarea cuvintelor și traducerea. Automată ... etc.

Este compus din 4 articole în total

NLP (Natural Language Processing) - învățarea cu mașina Clasificarea 2

În articolul precedent,

medium.com

NLP (Procesarea limbajului natural) Flux de lucru pentru clasificarea textului (luați n-grame ca intrare)

__PARTE__ 3

medium.com

Analiza modernă a textului este acum foarte accesibilă folosind Python și instrumentele open source, care vă permit să aflați cum să analizați datele dvs. text. Vom revizui pe scurt diferitele etape ale pre-procesării.

Date textuale ale căror formate sunt în mare parte nestructurate. Datele nestructurate nu pot fi reprezentate sub formă de tabel. Prin urmare, este esențial să-l convertiți în funcționalitate numerică, deoarece majoritatea algoritmilor de învățare automată sunt capabili să proceseze numai numere. Se va pune mai mult accent pe pași precum tokenizarea, derivația, lematizarea și oprirea eliminării cuvintelor. De asemenea, veți învăța două metode populare de extragere a caracteristicilor: punga de cuvinte și TFIDF, precum și diverse metode de creare a noilor caracteristici din caracteristicile existente.

Înainte de a începe acest articol, vom instala scikit-learn și celelalte biblioteci (spațiale) utilizate în acest articol. Veți găsi pașii pentru a le instala aici:

  • pip install -U spacy
  • pip instalează scikit-learn

De cele mai multe ori, datele text nu pot fi utilizate așa cum sunt. Acest lucru se datorează faptului că prezența diferitelor simboluri sau linkuri necunoscute îl face nepotrivit pentru utilizare. Curățarea datelor este arta de a extrage părți semnificative de date prin eliminarea detaliilor inutile. Diverse simboluri, cum ar fi „_/\ _” și „:)”. Aceste simboluri, de exemplu, nu contribuie prea mult la semnificația sa. Trebuie să eliminăm aceste detalii nedorite. Acest lucru se face nu numai pentru a se concentra mai mult pe conținutul real, ci și pentru a reduce calculele. Pentru a realiza acest lucru, sunt folosite metode precum tokenizarea și stemming-ul. .Vom discuta în detaliu diverse sarcini de pre-procesare și le vom demonstra cu exemple.

Având în vedere o propoziție, descompunerea ei în caractere sau cuvinte se numește tokenizare. Există biblioteci, cum ar fi spaCy, care oferă soluții complexe pentru tokenizare.

Tokenizarea unui text în propoziții.

[Aceasta este prima frază. ’,„ Apoi scriu a doua. ”, În sfârșit, iată o a treia fără scriere cu majuscule”]

Tokenizarea unui text în jetoane.

['Aceasta', 'este', '1', 'prima', 'propoziție', '.', 'Apoi', „j” ”,„ în ”,„ scrieți ”,„ una ”,„ a doua ”, '.', 'for', 'finish', 'in', 'here', 'one', 'third', 'without', 'put', 'of', 'majuscule']

Conversia textului în caractere

Funcția listă din Python preia un șir și îl convertește într-o listă de caractere individuale. Aceasta convertește textul în caractere. Următorul bloc de cod arată codul utilizat.

Prelucrarea volumelor mari de text

Dacă trebuie să procesați un număr mare de texte și să creați mai multe obiecte Doc la rând, metoda nlp.pipe poate accelera considerabil această operațiune. Tratează textele ca un flux și generează obiecte Doc. Este mult mai rapid decât apelarea nlp pe fiecare text.

[['Aceasta', 'este', '1', 'prima', 'propoziție', '.'], ['Apoi', 'j' ',' en ',' scrie ',' a ',' al doilea ','. '], [' pentru ',' finisare ',' în ',' voila ',' unul ',' al treilea ',' fără ',' pus ',' din ',' majuscule ']]

Cuvintele stop sunt cuvinte uzuale care sunt folosite pur și simplu pentru a ușura construcția frazelor. Deoarece apar foarte frecvent și prezența lor nu are un impact prea mare asupra semnificației propoziției, acestea ar trebui șterse. „Cuvintele oprire” sunt stabilite ca liste de cuvinte. Aceste liste sunt de obicei disponibile într-o librărie numită spacy și în multe limbi diferite.

Nu există o listă de cuvinte cheie universale pentru fiecare limbă, o mare parte din aceasta depinde de cazul de utilizare și de tipul de rezultate pe care le așteptați. În general, aceasta este o listă cu cele mai frecvente cuvinte din limbă. Cu spaCy, cuvintele de stop sunt foarte ușor de identificat, fiecare jeton are un atribut IS_STOP, care ne permite să știm dacă cuvântul este sau nu un cuvânt gol. De asemenea, putem adăuga propriile noastre cuvinte de oprire la lista de cuvinte de oprire.

Accesăm listele în franceză în acest fel.

Număr de cuvinte de oprire: 600
Primele zece cuvinte de oprire: [cincizeci ’,‘ tes ’, suprapune’, redă ’, diverse’, ‘n’ ’,‘ cu siguranță ’, acum’, după ’,‘ les ’]

Ștergeți cuvintele stop

Textul original: [„Aceasta este prima frază.”, „Apoi scriu a doua.”, „În sfârșit, iată o a treia fără scriere cu majuscule”]
text fără cuvinte de oprire: [[1, propoziție,.], [scrie, a doua,.], [terminați, puneți, majusculă]]

Adăugați cuvinte de oprire personalizate

Textul original: [„Aceasta este prima frază.”, „Apoi scriu a doua.”, „În sfârșit, iată o a treia fără scriere cu majuscule”]
text fără cuvinte de oprire: [[„propoziție”], [scrie ”,„ a doua ”], [terminați”, puneți ”, majuscule”]]

Unele cuvinte sunt scrise, pronunțate și reprezentate diferit, de exemplu Mumbai și Bombay, precum și SUA și Statele Unite. Deși sunt diferite, înseamnă același lucru. Există, de asemenea, diferite forme de cuvinte care trebuie convertite în forme de bază. De exemplu, cuvinte precum „făcut” și „fesait”, atunci când sunt convertite la forma lor de bază, devin „face”. În acest sens, normalizarea textului este un proces în care diferite variații ale textului sunt convertite într-un formular standard. Trebuie să facem normalizarea textului, deoarece unele cuvinte pot însemna același lucru. Există diferite moduri de a normaliza textul, cum ar fi verificarea ortografică, stemming și lematizare. Pentru o mai bună înțelegere a acestui subiect, vom analiza implementarea practică.

[['aceasta', 'este', '1', 'prima', 'propoziție', '.'], ['apoi', „j” ”,„ en ”,„ scrie ”,„ a ”,„ al doilea ','. '], [' pentru ',' finisare ',' în ',' voila ',' unul ',' al treilea ',' fără ',' pus ',' din ',' majuscule ']]

Vrem să înlocuim „SUA” cu „Statele Unite” și „18” cu „2018”. Pentru a face acest lucru, folosim funcția de înlocuire

Dacă trebuie să se potrivească cu liste mari de terminologie, puteți utiliza și obiecte PhraseMatcher spațiu pentru a transforma expresiile comune cu mai multe cuvinte în elemente simple

„Nou”, „Yourk” ==> „New York” ceea ce este mult mai eficient.

['', 'Angela Merkel', 'și', 'the', 'president', 'american', 'Barack Obama', 'are', 'to', 'the', 'inside', 'of', „the”, „House”, „White”, „at”, „Washington, DC”]

Deoarece spaCy este utilizat pentru a procesa atât modelele, cât și potrivirea textului, nu va trebui să vă faceți griji cu privire la tokenizarea specifică

Stemming și Lemmatization

În limbi precum franceza și engleza, cuvintele se transformă în diferite forme atunci când sunt folosite într-o propoziție. De exemplu, cuvântul „produs” se poate transforma în „producție” atunci când se referă la procesul de fabricație sau se poate transforma în „produse” la plural.

De exemplu, cuvintele „spune”, „spune” și „a spus” ne furnizează aproximativ aceleași informații, cu excepția diferențelor gramaticale. rezultatele noastre nu conduc la o reprezentare unică a acestor cuvinte.

Există două tehnici populare pentru a realiza acest lucru, stemming și lematizare.

Stemming implică de obicei încălcarea sfârșitului cuvântului, respectând câteva reguli de bază. De exemplu, cuvintele spune, spune și spune vor deveni „spune”.

Stemming-ul este lipsit de context și nu se bazează pe o parte a discursului, pentru a lua deciziile sale.

lematizarea, în schimb, efectuează o analiză morfologică pentru a găsi cuvântul rădăcină. În ceea ce ne privește, nu trebuie să ne facem griji cu privire la locul în care tocmai am obținut cuvintele noastre cheie, ci doar să le primim în SpaCy, forma lematizată a unui cuvânt este accesibilă cu atributul. lama_.

Acum, cu ceea ce știm, putem face o preprocesare de bază.

Să ne curățăm datele: am dori să scăpăm de cuvintele stop, numerele și să convertim șirul nostru într-o listă, astfel încât să îl putem folosi mai târziu

Folosind atributele. is_stop, is_punct și w. like_num, am putea elimina părțile din propoziție de care nu aveam nevoie. Asigurați-vă că rețineți că am adăugat la propoziție, forma matimizată a cuvântului prin care am accesat. lema_. În plus, putem sau nu șterge cuvinte în funcție de cazul nostru de utilizare. În exemplul nostru, numerele sunt considerate a nu fi informații importante, dar în unele cazuri pot fi. De exemplu, s-ar putea să vrem să eliminăm toate verbele dintr-o propoziție, caz în care putem verifica doar eticheta POS a acelui simbol.

Am văzut cum textul poate fi reprezentat ca caractere și cuvinte. Uneori, vă ajută să priviți două, trei sau mai multe cuvinte împreună. N-grame sunt grupuri de cuvinte extrase dintr-un text dat.

De exemplu, ia în considerare expresia „Nu te urăsc, dar urăsc comportamentul tău”.

Aici, dacă tratăm fiecare dintre jetoane, precum „ură” și „comportament”, separat, atunci adevăratul sens al propoziției nu ar fi înțeles. În acest caz, contextul în care sunt prezente aceste jetoane devine esențial.

Astfel, considerăm n jetoane consecutive la un moment dat. Într-un n-gram, n reprezintă numărul de cuvinte care pot fi utilizate împreună. Să vedem un exemplu de cum arată un bigram (n = 2). Am folosit pachetul Python nltk pentru a genera un bigram.

Să înțelegem extragerea caracteristicilor cu exemple reale. Caracteristicile reprezintă caracteristicile unei persoane sau a unui lucru. Aceste caracteristici pot reprezenta sau nu în mod unic o persoană sau un lucru. De exemplu, caracteristicile generale ale unei persoane, cum ar fi numărul de urechi, mâini și picioare, nu sunt în general suficiente pentru a identifica în mod unic o persoană. Dar caracteristici precum amprentele digitale și secvențele ADN pot fi folosite pentru a recunoaște în mod distinct acea persoană. La fel, în extragerea caracteristicilor, încercăm să extragem atribute din texte care reprezintă în mod unic textele respective. Algoritmii de învățare automată iau doar caracteristicile digitale ca intrare, deci trebuie să reprezentați textul în reprezentare digitală.

Procesul de conversie a reprezentării digitale a textului se numește vectorizare și poate fi realizat în mai multe moduri, așa cum se arată aici:

  • Convertiți textul în cuvinte și reprezentați fiecare cuvânt ca vector
  • Convertiți textul în caractere și reprezentați fiecare caracter ca un vector
  • Creați n-gram de cuvinte și reprezentați-le ca vectori

Modelul Bag of Word este, fără îndoială, cea mai simplă formă de reprezentare a unei propoziții ca vector. Să începem cu un exemplu:

  • S1: „Câinele stătea lângă covor”.
  • S2: „Pisica iubește câinele. „

Dacă urmăm aceiași pași de preprocesare pe care i-am făcut în secțiunea Preprocesare, vom primi următoarele propoziții.

Dacă vrem să reprezentăm acest lucru ca un vector, trebuie mai întâi să ne construim vocabularul, care ar fi cuvintele unice pe care le găsim în propoziții. Vectorul nostru de vocabular este acum după cum urmează:

Aceasta înseamnă că reprezentarea noastră a propozițiilor noastre va fi, de asemenea, vectori cu lungimea de 5, putem spune, de asemenea, că vectorii noștri vor avea 5 dimensiuni. Ne putem gândi, de asemenea, să potrivim fiecare cuvânt din vocabularul nostru cu un număr (sau index), la care ne putem referi în vocabularul nostru ca un dicționar.

Modelul sacului de cuvinte implică utilizarea frecvențelor cuvintelor pentru a ne construi vectorii. Cum vor arăta propozițiile noastre acum?

S1: [1, 0, 1, 1, 0]
S2: [0, 1, 1, 0, 1]

Este destul de simplu de înțeles, există 1 apariție de câine în ambele propoziții și 0 apariție a cuvântului „aprecieri” în prima propoziție, astfel încât indexurilor corespunzătoare li se dă valoarea pe baza frecvenței cuvântului. Dacă prima propoziție are 2 apariții ale cuvântului câine, aceasta ar fi reprezentată după cum urmează .

O caracteristică importantă a modelului pungii de cuvinte pe care trebuie să o amintim este că este o reprezentare mai puțin ordonată, nu ține cont de ordinea cuvintelor. Nu știm ce cuvinte au venit mai întâi. Acest lucru duce la pierderea informațiilor spațiale și, prin extensie, a informațiilor semantice. Cu toate acestea, în mulți algoritmi, ordinea cuvintelor nu este importantă și sunt suficiente doar aparițiile cuvintelor.

Pentru început, filtrul de spam este un exemplu de utilizare a modelului bag-of-word: e-mailurile care sunt considerate spam conțin probabil cuvinte legate de spam, cum ar fi achiziții, bani și acțiuni. Putem folosi probabilitatea bayesiană pentru a determina dacă este mai probabil ca un e-mail să fie spam sau nu. Acest lucru funcționează deoarece, așa cum am văzut anterior, în acest caz ordinea cuvintelor nu contează. .

Anterior, ne-am uitat la modelul sacului de cuvinte. Acest model are un dezavantaj serios. Cât de des apare un simbol nu reprezintă în totalitate cantitatea de informații pe care le conține despre un document. Acest lucru se datorează faptului că un termen care apare de mai multe ori în multe propoziții nu transmite prea multe informații. Termenii rare pot conține mult mai multe informații despre propozițiile în care se găsesc.

TF-IDF face posibilă evidențierea importanței relative a fiecărui cuvânt 𝑚 (sau perechi de cuvinte consecutive) într-un text 𝑑. Funcția 𝑇𝐹 (𝑚, 𝑑) contează numărul de apariții ale cuvântului 𝑚 în descrierea 𝑑. Funcția 𝐼𝐷𝐹 (𝑚) măsoară importanța termenului în întregul document, acordând mai multă greutate termenilor mai puțin frecvenți, deoarece aceștia sunt considerați a fi cei mai discriminanți (motivație similară cu cea a metricei chi2 în analiza corespondenței). 𝐼𝐷𝐹 (𝑚, 𝑙) = jurnal (𝐷/𝑓 (𝑚)) unde 𝐷 este numărul de documente, dimensiunea eșantionului de instruire și 𝑓 (𝑚) numărul de documente sau descrieri care conțin cuvântul 𝑚. Noua variabilă sau caracteristici este 𝑉𝑚 (𝑙) = 𝑇𝐹 (𝑚, 𝑙) × 𝐼𝐷𝐹 (𝑚, 𝑙).

Există două abordări populare de mapare a jetoanelor generate la vectori digitali, numite codare cu un singur hot. și încorporarea cuvintelor. Vă voi povesti despre aceste metode în articolul următor. De asemenea, vom discuta despre diferitele avantaje și dezavantaje ale fiecărei metode.

Ingineria alimentării este o metodă de extragere a noilor funcționalități din funcționalitatea existentă. Aceste noi caracteristici sunt extrase deoarece tind să explice în mod eficient variabilitatea datelor. O aplicație a Ingineriei Feature ar putea fi calcularea similarității diferitelor bucăți de text. Există diferite moduri de a calcula asemănarea dintre două texte. Cele mai populare metode sunt similitudinea cosinusului și similitudinea Jaccard.

Similitudinea cosinusului dintre două texte este cosinusul unghiului dintre reprezentările lor vectoriale. Matricile BoW și TF-IDF pot fi considerate ca reprezentări vectoriale ale textelor

acesta este raportul dintre numărul de termeni comuni între două documente text și numărul total de termeni unici prezenți în aceste texte.

În acest articol, am învățat diferiți pași pentru manipularea datelor text nestructurate. Datele textuale sunt de obicei dezordonate și trebuie curățate și prelucrate în prealabil. Etapele de preprocesare constau în principal din: tokenizare, stemming, lematizare și oprirea ștergerii cuvintelor. După preprocesare, caracteristicile sunt extrase din texte folosind diverse metode, cum ar fi Bog of word și TF-IDF. Acest pas convertește datele text nestructurate în date numerice structurate. Funcțiile noi sunt create din funcțiile existente folosind o tehnică numită Ingineria caracteristicilor.

În articolul următor veți afla câteva dintre cele mai bune practici cheie de învățare automată pentru rezolvarea problemelor de clasificare a textului. Iată ce veți învăța: