You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/translations/ro/6-NLP/2-Tasks/README.md

14 KiB

Sarcini și tehnici comune de procesare a limbajului natural

Pentru majoritatea sarcinilor de procesare a limbajului natural, textul care trebuie procesat trebuie să fie descompus, examinat, iar rezultatele stocate sau corelate cu reguli și seturi de date. Aceste sarcini permit programatorului să derive semnificația sau intenția sau doar frecvența termenilor și cuvintelor dintr-un text.

Chestionar înainte de lecție

Să descoperim tehnicile comune utilizate în procesarea textului. Combinate cu învățarea automată, aceste tehnici te ajută să analizezi eficient cantități mari de text. Totuși, înainte de a aplica ML acestor sarcini, să înțelegem problemele întâmpinate de un specialist NLP.

Sarcini comune în NLP

Există diferite moduri de a analiza un text pe care lucrezi. Există sarcini pe care le poți efectua și, prin aceste sarcini, poți înțelege textul și trage concluzii. De obicei, aceste sarcini sunt realizate într-o anumită ordine.

Tokenizare

Probabil primul lucru pe care majoritatea algoritmilor NLP trebuie să-l facă este să împartă textul în tokeni sau cuvinte. Deși pare simplu, luarea în considerare a punctuației și a delimitatorilor de cuvinte și propoziții din diferite limbi poate fi complicată. Este posibil să fie nevoie să folosești diverse metode pentru a determina delimitările.

tokenizare

Tokenizarea unei propoziții din Mândrie și Prejudecată. Infografic de Jen Looper

Embedding-uri

Embedding-urile de cuvinte sunt o modalitate de a converti datele text în format numeric. Embedding-urile sunt realizate astfel încât cuvintele cu semnificații similare sau cuvintele utilizate împreună să se grupeze.

embedding-uri de cuvinte

"Am cel mai mare respect pentru nervii tăi, sunt prietenii mei vechi." - Embedding-uri de cuvinte pentru o propoziție din Mândrie și Prejudecată. Infografic de Jen Looper

Încearcă acest instrument interesant pentru a experimenta cu embedding-uri de cuvinte. Clic pe un cuvânt arată grupuri de cuvinte similare: 'jucărie' se grupează cu 'disney', 'lego', 'playstation' și 'consolă'.

Parsing și Etichetarea părților de vorbire

Fiecare cuvânt care a fost tokenizat poate fi etichetat ca parte de vorbire - substantiv, verb sau adjectiv. Propoziția vulpea roșie rapidă a sărit peste câinele maro leneș ar putea fi etichetată POS astfel: vulpea = substantiv, sărit = verb.

parsing

Parsing-ul unei propoziții din Mândrie și Prejudecată. Infografic de Jen Looper

Parsing-ul înseamnă recunoașterea cuvintelor care sunt legate între ele într-o propoziție - de exemplu, vulpea roșie rapidă a sărit este o secvență adjectiv-substantiv-verb care este separată de secvența câinele maro leneș.

Frecvența cuvintelor și expresiilor

O procedură utilă atunci când analizezi un corp mare de text este să construiești un dicționar al fiecărui cuvânt sau expresie de interes și cât de des apare. Expresia vulpea roșie rapidă a sărit peste câinele maro leneș are o frecvență de 2 pentru cuvântul "the".

Să analizăm un exemplu de text în care numărăm frecvența cuvintelor. Poemul lui Rudyard Kipling, The Winners, conține următorul vers:

What the moral? Who rides may read.
When the night is thick and the tracks are blind
A friend at a pinch is a friend, indeed,
But a fool to wait for the laggard behind.
Down to Gehenna or up to the Throne,
He travels the fastest who travels alone.

Deoarece frecvențele expresiilor pot fi insensibile sau sensibile la majuscule, expresia un prieten are o frecvență de 2, the are o frecvență de 6, iar travels are o frecvență de 2.

N-gramuri

Un text poate fi împărțit în secvențe de cuvinte de o lungime setată, un singur cuvânt (unigram), două cuvinte (bigram), trei cuvinte (trigram) sau orice număr de cuvinte (n-gramuri).

De exemplu, vulpea roșie rapidă a sărit peste câinele maro leneș cu un scor n-gram de 2 produce următoarele n-gramuri:

  1. vulpea roșie
  2. roșie rapidă
  3. rapidă a
  4. a sărit
  5. sărit peste
  6. peste câinele
  7. câinele maro
  8. maro leneș

Ar putea fi mai ușor să vizualizezi acest lucru ca o fereastră glisantă peste propoziție. Iată cum arată pentru n-gramuri de 3 cuvinte, n-gramul fiind evidențiat în fiecare propoziție:

  1. vulpea roșie rapidă a sărit peste câinele maro leneș
  2. vulpea roșie rapidă a sărit peste câinele maro leneș
  3. vulpea roșie rapidă a sărit peste câinele maro leneș
  4. vulpea roșie rapidă a sărit peste câinele maro leneș
  5. vulpea roșie rapidă a sărit peste câinele maro leneș
  6. vulpea roșie rapidă a sărit peste câinele maro leneș
  7. vulpea roșie rapidă a sărit peste câinele maro leneș

fereastră glisantă n-gramuri

Valoare n-gram de 3: Infografic de Jen Looper

Extracția expresiilor nominale

În majoritatea propozițiilor, există un substantiv care este subiectul sau obiectul propoziției. În engleză, acesta poate fi identificat adesea prin prezența cuvintelor 'a', 'an' sau 'the' înaintea sa. Identificarea subiectului sau obiectului unei propoziții prin 'extracția expresiei nominale' este o sarcină comună în NLP atunci când se încearcă înțelegerea semnificației unei propoziții.

În propoziția "Nu pot fixa ora, sau locul, sau privirea sau cuvintele, care au pus bazele. Este prea demult. Eram în mijloc înainte să știu că am început.", poți identifica expresiile nominale?

În propoziția vulpea roșie rapidă a sărit peste câinele maro leneș există 2 expresii nominale: vulpea roșie rapidă și câinele maro leneș.

Analiza sentimentului

O propoziție sau un text poate fi analizat pentru sentiment, sau cât de pozitiv sau negativ este. Sentimentul este măsurat în polaritate și obiectivitate/subiectivitate. Polaritatea este măsurată de la -1.0 la 1.0 (negativ la pozitiv) și de la 0.0 la 1.0 (cel mai obiectiv la cel mai subiectiv).

Mai târziu vei învăța că există diferite moduri de a determina sentimentul folosind învățarea automată, dar un mod este să ai o listă de cuvinte și expresii care sunt categorisite ca pozitive sau negative de un expert uman și să aplici acel model textului pentru a calcula un scor de polaritate. Poți vedea cum ar funcționa acest lucru în unele circumstanțe și mai puțin bine în altele?

Flexiune

Flexiunea îți permite să iei un cuvânt și să obții forma singulară sau plurală a acestuia.

Lemmatizare

Un lemma este rădăcina sau cuvântul principal pentru un set de cuvinte, de exemplu zburat, zboară, zburând au ca lemma verbul a zbura.

Există, de asemenea, baze de date utile disponibile pentru cercetătorii NLP, în special:

WordNet

WordNet este o bază de date de cuvinte, sinonime, antonime și multe alte detalii pentru fiecare cuvânt în multe limbi diferite. Este incredibil de utilă atunci când se încearcă construirea de traduceri, verificatoare ortografice sau instrumente lingvistice de orice tip.

Biblioteci NLP

Din fericire, nu trebuie să construiești toate aceste tehnici singur, deoarece există biblioteci excelente de Python disponibile care le fac mult mai accesibile pentru dezvoltatorii care nu sunt specializați în procesarea limbajului natural sau învățarea automată. Lecțiile următoare includ mai multe exemple despre acestea, dar aici vei învăța câteva exemple utile pentru a te ajuta cu următoarea sarcină.

Exercițiu - utilizarea bibliotecii TextBlob

Să folosim o bibliotecă numită TextBlob, deoarece conține API-uri utile pentru abordarea acestor tipuri de sarcini. TextBlob "se bazează pe umerii giganților NLTK și pattern, și funcționează bine cu ambele." Are o cantitate considerabilă de ML integrată în API-ul său.

Notă: Un Ghid de Start Rapid util este disponibil pentru TextBlob și este recomandat pentru dezvoltatorii Python experimentați.

Când încerci să identifici expresii nominale, TextBlob oferă mai multe opțiuni de extractoare pentru a găsi expresii nominale.

  1. Aruncă o privire la ConllExtractor.

    from textblob import TextBlob
    from textblob.np_extractors import ConllExtractor
    # import and create a Conll extractor to use later 
    extractor = ConllExtractor()
    
    # later when you need a noun phrase extractor:
    user_input = input("> ")
    user_input_blob = TextBlob(user_input, np_extractor=extractor)  # note non-default extractor specified
    np = user_input_blob.noun_phrases                                    
    

    Ce se întâmplă aici? ConllExtractor este "Un extractor de expresii nominale care folosește parsing-ul de fragmente antrenat cu corpusul de antrenament ConLL-2000." ConLL-2000 se referă la Conferința din 2000 despre Învățarea Computațională a Limbajului Natural. Fiecare an, conferința a găzduit un workshop pentru a aborda o problemă dificilă NLP, iar în 2000 aceasta a fost fragmentarea expresiilor nominale. Un model a fost antrenat pe Wall Street Journal, cu "secțiunile 15-18 ca date de antrenament (211727 tokeni) și secțiunea 20 ca date de testare (47377 tokeni)". Poți consulta procedurile utilizate aici și rezultatele.

Provocare - îmbunătățirea botului tău cu NLP

În lecția anterioară ai construit un bot foarte simplu de întrebări și răspunsuri. Acum, vei face ca Marvin să fie puțin mai empatic analizând inputul tău pentru sentiment și afișând un răspuns care să se potrivească sentimentului. De asemenea, va trebui să identifici o expresie nominală și să întrebi despre aceasta.

Pașii tăi pentru construirea unui bot conversațional mai bun:

  1. Afișează instrucțiuni care sfătuiesc utilizatorul cum să interacționeze cu botul
  2. Pornește bucla
    1. Acceptă inputul utilizatorului
    2. Dacă utilizatorul a cerut să iasă, atunci ieși
    3. Procesează inputul utilizatorului și determină răspunsul adecvat pentru sentiment
    4. Dacă se detectează o expresie nominală în sentiment, pluralizeaz-o și cere mai multe informații despre acel subiect
    5. Afișează răspunsul
  3. Revino la pasul 2

Iată fragmentul de cod pentru determinarea sentimentului folosind TextBlob. Observă că există doar patru grade de răspunsuri la sentiment (poți avea mai multe dacă dorești):

if user_input_blob.polarity <= -0.5:
  response = "Oh dear, that sounds bad. "
elif user_input_blob.polarity <= 0:
  response = "Hmm, that's not great. "
elif user_input_blob.polarity <= 0.5:
  response = "Well, that sounds positive. "
elif user_input_blob.polarity <= 1:
  response = "Wow, that sounds great. "

Iată un exemplu de output pentru a te ghida (inputul utilizatorului este pe liniile care încep cu >):

Hello, I am Marvin, the friendly robot.
You can end this conversation at any time by typing 'bye'
After typing each answer, press 'enter'
How are you today?
> I am ok
Well, that sounds positive. Can you tell me more?
> I went for a walk and saw a lovely cat
Well, that sounds positive. Can you tell me more about lovely cats?
> cats are the best. But I also have a cool dog
Wow, that sounds great. Can you tell me more about cool dogs?
> I have an old hounddog but he is sick
Hmm, that's not great. Can you tell me more about old hounddogs?
> bye
It was nice talking to you, goodbye!

O soluție posibilă pentru sarcină este aici

Verificare cunoștințe

  1. Crezi că răspunsurile empatice ar putea 'păcăli' pe cineva să creadă că botul chiar îi înțelege?
  2. Face identificarea expresiei nominale botul mai 'credibil'?
  3. De ce ar fi utilă extragerea unei 'expresii nominale' dintr-o propoziție?

Implementează botul din verificarea cunoștințelor anterioare și testează-l pe un prieten. Poate să-l păcălească? Poți face botul tău mai 'credibil'?

🚀Provocare

Ia o sarcină din verificarea cunoștințelor anterioare și încearcă să o implementezi. Testează botul pe un prieten. Poate să-l păcălească? Poți face botul tău mai 'credibil'?

Chestionar după lecție

Recapitulare și Studiu Individual

În următoarele câteva lecții vei învăța mai multe despre analiza sentimentului. Cercetează această tehnică interesantă în articole precum cele de pe KDNuggets

Temă

Fă un bot să răspundă


Declinare de responsabilitate:
Acest document a fost tradus folosind serviciul de traducere AI Co-op Translator. Deși ne străduim să asigurăm acuratețea, vă rugăm să fiți conștienți că traducerile automate pot conține erori sau inexactități. Documentul original în limba sa natală ar trebui considerat sursa autoritară. Pentru informații critice, se recomandă traducerea profesională realizată de un specialist uman. Nu ne asumăm responsabilitatea pentru eventualele neînțelegeri sau interpretări greșite care pot apărea din utilizarea acestei traduceri.