Processament del llenguatge natural (NLP)

Descripció

El processament del llenguatge natural (NLP, de l’anglès natural language processing) s’ocupa de les interaccions entre els ordinadors i els llenguatges humans (naturals). En concret, s’ocupa de com programar els ordinadors per a processar i analitzar grans quantitats de dades del llenguatge natural. Els desafiaments en el processament del llenguatge natural freqüentment involucren el reconeixement de la parla, així com la compressió i generació del llenguatge natural.

El processament del llenguatge natural ha de fer-se de manera sistemàtica, dividint-lo en parts, agregant elements gramaticals i identificant elements interessants. Els següents són alguns dels elements comuns del processament en NLP:

  • Tokenització: consisteix a dividir el text en oracions i aquestes, en paraules.
  • Normalització: estandarditza totes les paraules, per exemple, convertint totes les paraules en majúscules o minúscules.
  • Eliminació de paraules redundants: consisteix a ometre o eliminar paraules redundants, com els articles, que no contribueixen en gran manera a entendre el text.
  • Stemming: relaciona els afixos de les paraules per a obtenir l’arrel de la paraula, per exemple, going es converteix en go.
  • Lematització: relaciona una paraula flexionada o derivada amb la seva forma canònica o lema.
  • Etiquetatge POS: consisteix a assignar etiquetes per a substantius, pronoms, verbs, adjectius, adverbis, etc.
  • Borsa de paraules: una oració es considera com un conjunt de paraules, sense tenir en compte la gramàtica ni l’ordre de les paraules.
  • N-grames: son una seqüència contínua de paraules adjacents en una oració, necessàries per a obtenir el significat correctament, per exemple, machine learning és un bigrama.
  • TF (freqüència del terme): és el nombre de vegades que apareix una paraula en un missatge o una oració; indica la importància d’aquesta paraula.
  • Reconeixement d’entitats anomenades: identifica i etiqueta paraules que representen entitats de paraules reals, com ara persones, organitzacions, llocs, dates, etc.

En l’actualitat, el processament del llenguatge natural s’utilitza en múltiples eines o programaris, alguns exemples del seu ús són els següents:

  • Chatbots
  • Resum de textos
  • Anàlisi de sentiments
  • Classificació de textos
  • Traducció automàtica
  • Reconeixement de veu

Per tant, l’NLP tracta d’aconseguir que el llenguatge humà sigui comprensible per a una màquina en cinc grans àrees: fonologia, morfologia, sintaxi, semàntica i pragmàtica. Un factor que ha de depurar i controlar en tot moment és l’ambigüitat, ja que el llenguatge humà n’està ple, i pot variar el significat de les expressions.

Algunes de les principals llibreries per a NLP són:

  • NLTK (https://www.nltk.org/): llibreria Python per a treballar amb llenguatge natural que proporciona interfícies fàcils d’usar juntament amb cinquanta corpus i recursos lèxics com WordNet, així com un conjunt de llibreries de processament de text per a classificació, tokenització, stemming, etiquetatge (tagging), anàlisi (parsing) i raonament semàntic.
  • Polyglot (https://github.com/abosamoor/polyglot): joc d’eines (toolkit) de llenguatge natural que suporta aplicacions multilingües massives, entre les quals es troben el català i el castellà.
  • TextBlob (https://textblob.readthedocs.io/en/dev/): proporciona una API senzilla per a submergir-se en tasques comunes de processament del llenguatge natural (NLP), com l’etiquetatge de part de la veu, l’extracció de frases de noms, l’anàlisi de sentiments, la classificació, la traducció…
  • spaCy (https://spacy.io/): biblioteca de processament de llenguatge natural Python dissenyada específicament amb l’objectiu de ser útil per a implementar sistemes preparats per a la producció.
  • OpenNLP (https://opennlp.apache.org/): kit d’eines basat en l’aprenentatge automàtic per al processament de text en llenguatge natural.

Enllaç al recurs

https://en.wikipedia.org/wiki/natural_language_processing

Exemple d’ús

En l’exemple següent utilitzem la llibreria spaCy amb una simple oració, i identifiquem tokens (components lèxics), stop words (paraules buides) i anàlisi sintàctica. El codi Python utilitzat és el següent (s’han numerat les línies per a millorar-ne la lectura):

1  # Càrrega de packages
2  import spacy
3  from spacy import displacy
4  from spacy.lang.en.stop_words import STOP_WORDS
5  nlp = spacy.lloeu('en')
6
7  sample = u"I would like to give you more than $1000 for your car in cash."
8
9  doc = nlp(sample)
10
11 # Tokens
12 tokens = [token for token in doc ]
13 print(tokens)
14
15 # Stopwords
16 for word in doc :
17     if word.is_stop == True:
18         print(word)
19 # Anàlisi
20 for token in doc :
21     print(token.text, token.lemma_, token.pos_, token.tag_, token.dep_,
22           token.shape_, token.is_alpha, token.is_stop)

En primer lloc, fem la càrrega de la llibreria spaCy i indiquem l’idioma anglès juntament amb els seus stop words (línies 2 a 5). A la línia 7 indiquem l’oració d’exemple, que podríem substituir per un text de més longitud, i l’emmagatzemem en la variable doc després d’incorporar-la al nostre model de spaCy. Posteriorment, en les línies 12 i 13 obtenim i imprimim els tokens de què està composta l’oració. A més, en haver-hi suport d’anglès és possible fer el mateix, però per a les stop words (línies 16 a 18). Finalment, analitzem sintàcticament els elements de l’oració simple (línies 20 a 22).

Enllaços relacionats

Cran NLP: https://cran.r-project.org/web/views/naturallanguageprocessing.html