Creeu un model NER personalitzat amb incrustació de paraules contextuals en idiomes vernacles

Avui en dia tenim una gran quantitat de dades no estructurades procedents de diverses fonts, com ara xarxes socials, articles de notícies, dades de converses, etc. Aquestes dades són riques en informació, tot i que la informació és difícil de recuperar i aquest és un dels majors desafiaments del PNL (processament del llenguatge natural).

Aquí és on entra en joc el reconeixement d’entitats denominades. En aquest article coneixem NER (Named Entity Recognition). Implementarem NER personalitzat mitjançant el marc Allennlp en un conjunt de dades hindi que conté sentències "Weather" marcades amb entitats.

Conèixer el reconeixement d'entitats amb nom (NER)

NER és una tasca d’etiquetes de seqüència en què intentem obtenir el significat contextual de les paraules mitjançant incrustacions de paraules. Utilitzem el model d’extracció d’informació NER per classificar les entitats amb nom de text no estructurat en categories predefinides. Les entitats amb nom són objectes reals com el nom, la ubicació, el punt de referència d’una persona, etc.

NER juga un paper clau a l’hora d’extreure informació de documents (per exemple, correus electrònics), dades de converses, etc. De fet, els dos components principals de la NLU d’un bot conversacional són la classificació d’intencions i l’extracció d’entitats. NER in Conversational Agents s’utilitza per descobrir entitats i extreure informació per obtenir informació com data, ubicació, adreça de correu electrònic, número de telèfon, etc.

Tenir en compte el context és una part integral de diverses tasques de PNL. A NER, conèixer el context és molt important, cosa que no es pot aconseguir amb incrustacions convencionals de paraules com (GLOVE, Fasttext, Word2Vec, etc.). Aquests incrustacions només assignen una representació per paraula, mentre que en realitat les paraules diferents tenen significats diferents segons on s’utilitzen i en quin context s’utilitzen. Ara veurem com la inserció contextualitzada de paraules mitjançant un model ELMO proporciona informació contextual eficient.

ELMo (incrustació a partir de models d'idiomes)

Arquitectura ELMO

ELMO entén tant el significat de les paraules com el context en què es troben, a diferència de les incrustacions de GLOVE, que només capturen el significat de les paraules i desconeixen el context.

ELMO assigna incrustacions a paraules segons els contextos en què s’utilitzen, tant per copsar el significat de la paraula en aquest context com per recuperar altra informació contextual.

En lloc d’utilitzar una incrustació fixa per a cada paraula com a GLOVE, ELMo examina tota la frase abans d’assignar una incrustació a cada paraula. Utilitza un LSTM bidireccional dissenyat per a tasques específiques per crear aquests incrustacions de paraules.

ELMO va ser un pas important cap a la formació prèvia en el context del processament del llenguatge natural (PNL). Elmo LSTM es pot formar sobre un gran conjunt de dades en qualsevol idioma per crear models d’idiomes personalitzats i després es pot reutilitzar com a component en altres models responsables de NLU (Natural Language Understanding).

ELMO va aprendre a predir la següent paraula en una seqüència de paraules, una tasca anomenada modelatge del llenguatge, que és essencial per a l’NLU (Natural Language Understanding). Això és útil per crear models de llenguatge, ja que disposem de grans quantitats de dades textuals a partir de les quals un model d’aquest tipus pot aprendre sense necessitat d’etiquetes.

Les incrustacions de paraules contextualitzades poden donar a les paraules incrustacions diferents en funció del significat que tinguin en el context de la frase. (Font: Illustrated BERT, ELMo and Co. (How NLP Cracked Transfer Learning) de Jay Alammar)

El document ELMo introdueix incrustacions profundes de paraules contextualitzades que modelen tant característiques complexes de l’ús de paraules com la sintaxi i la semàntica, com les diferències entre els contextos lingüístics. L’article mostra com es poden afegir les seves incrustacions prefabricades en llenguatge contextual als models existents per tal de millorar significativament l’estat de la tècnica per desafiar problemes de PNL. Per obtenir una comprensió més profunda, llegiu el diari

Entreneu un model NER a AllenNLP

Els empleats d’AllenNLP van presentar el concepte d’incorporació de paraules ELMO contextualitzades en el seu article Representacions de paraules contextualitzades en profunditat. Ara utilitzarem el marc AllenNLP per a la nostra tasca NER.

instal·lació

  1. Creació d’un entorn Conda amb Python
conda create -n allennlp python = 3.6

2. Activeu l’entorn.

Activeu la font allennlp

3. Instal·larem des de la font.

Git clone https://github.com/allenai/allennlp.git cd allennlp pip install -r requirements.txt

Per formar un model en Allenlp Framework, heu d’implementar un DatasetReader per llegir dades i un model que trieu, en aquest cas un model CRFTagger.

  1. Llegiu les dades amb DatasetReader

Les dades que tenim s’ofereixen amb etiquetes BILOU i estan en format CoNLL. Les dades formatades de CoNLL contenen una paraula per línia, amb entitats separades per un espai i la següent frase separada per una línia. A l’esquema de marcatge BILOU B (inici), I (dins), L (darrer), O (exterior), U (unitat).

O्या O कल B-date दोपहर L-date में O धूप U-weather type आएगी O
जयपुर Posició en U में O मौसम O की O स्थिति O क्या O है O

Un DatasetReader llegeix un fitxer i el converteix en una col·lecció d’instàncies. Aquí estem utilitzant el lector de registres conll2003 ajustant-lo una mica segons les nostres necessitats, ja que només tenim dades amb etiquetes NER i aquest lector accepta un registre conll2003 que conté etiquetes pos, NER i trossos.

“Un DatasetReader llegeix dades des d’una ubicació específica i crea un conjunt de dades. Tots els paràmetres necessaris per llegir les dades, tret del camí d'accés del fitxer, s'han de passar al constructor del DatasetReader. ”- Documentació AllenNLP.

Tenim un registre meteorològic amb tres entitats: ubicació, tipus de temps i data. Hem d’implementar dos mètodes per llegir i crear instàncies tokenitzades.

llegir ()

El mètode read () obté dades. AllenNLP us permet especificar el camí per als fitxers de dades (per exemple, el camí per a un fitxer JSON). Llegirem tots els textos i etiquetes del registre i l’embolicarem amb text_to_instance () com es mostra a continuació.

text_to_instance ()

Aquest mètode "fa la tokenització o el processament necessari per passar de l'entrada de text a una instància".

2. Continuem amb la part model

Utilitzarem el model CRFTagger proporcionat a Allennlp Framework. Podem utilitzar el model tal qual. El CRFTagger codifica una seqüència de text amb un Seq2SeqEncoder i, a continuació, utilitza un model de camp aleatori condicional per predir una etiqueta per a cada testimoni de la seqüència.

Aquí tenim un model Bi-LSTM + CRF.

Tot i que el bi-lstm pot captar significat conceptual en paraules, encara hem de trobar una connexió entre les etiquetes. Aquest pot ser un problema per a NER, on (per exemple) mai no voleu que un dia comenci una data seguit d'un dia per iniciar una ubicació. Aquí és on el camp aleatori condicional ajuda a trobar dependències entre les etiquetes.

El camp aleatori condicional "cadena lineal" que implementarem té una matriu amb els costos de la transició num_tags x num_tags, on les transicions [i, j] representen la probabilitat d'una transició des del j jorn al ith dia.

A més de les etiquetes que volem predir, s'insereixen etiquetes especials "d'inici" i "final" abans i després de cada frase per capturar la "transició" entre frases.

A més, CRF accepta un conjunt opcional de restriccions que no permeten les transicions "no vàlides" (on "no vàlid" depèn del que vulgueu modelar). Per exemple, les nostres dades NER tenen etiquetes diferents que representen el principi, el mig i el final de cada tipus d'entitat. No volem permetre que un dia d'inici d'una entitat de data sigui seguit d'un dia per finalitzar una entitat d'ubicació, tal com s'explica a continuació.

Si mirem les nostres dates, a la primera frase combinem कल (data B) दोपहर (data L), podem obtenir la data com a कल कल. No obstant això, per raons contextuals, कल (B-Date) no es pot combinar amb (U-Wetter_Typ), ja que कल (B-Date) ha d'anar seguit de दोपहर (L-Date). Això s’aconsegueix amb l’ajut de CRF.

O्या O कल B-date दोपहर L-date में O धूप U-weather type आएगी O
जयपुर Posició en U में O मौसम O की O स्थिति O क्या O है O

Per obtenir una comprensió més profunda del model, aquí teniu algunes coses que podeu comprovar:

Creació d’un fitxer de configuració

Necessitem un fitxer de configuració per especificar tot el necessari per entrenar el model. Hem de proporcionar la ruta del tren, Val, incrustació FastText, pesos ELMo i fitxers d’opcions. Per cert, tots els camps s’autogenifiquen.

Per fi podem començar a entrenar

Ara podem entrenar el model NER. Per això necessitem un parell de fitxers.

  1. Dades de formació i validació.
  2. Fitxer d’opcions i pesos hindi ELMo. Podem utilitzar un model ELMo format en dades wiki hindi. Us oferim incrustacions d’ELMo en hindi que s’han format a Wikidump.
  3. incrustacions ràpides en hindi.

Podeu trobar tots els fitxers aquí.

Durant l'entrenament, fem un seguiment de la precisió després de cada època i es guarden els millors pesos. Podeu començar a entrenar trucant al mètode del tren i passant-lo al fitxer de configuració del model i al camí de sortida del model.

$ allennlp path path / to / config / file -s path / to / output / folder
Mètriques post-formació

Aquí podeu veure que obtenim diferents lectures després de l’entrenament. Ara també podeu jugar amb el conjunt de dades per obtenir bons resultats amb les dades de validació que es donen aquí. Feliç entrenament !!!!!!

previsió

Un cop acabada la formació, podem fer prediccions trucant al "Mètode de predicció" passant-lo al camí del model desat i al fitxer de prova, tal com es mostra a continuació.

allennlp prediu \ ruta / a / model.tar.gz \ ruta / a / test.txt \

Quan feu això, obtindreu diversos registres, etiquetes. Es mostren totes les paraules amb les etiquetes previstes allà.

Recursos per a una comprensió més profunda

  1. Bi-LSTM + CRF amb incrustació de caràcters per a NER i TPV
  2. Els il·lustrats BERT, ELMo and Co. (Com va trencar l'aprenentatge de transferència de la PNL)
  3. Bi-LSTM + CRF amb Pytorch
  4. Documentació Allennlp

Conclusió

Espero que hagueu tingut una visió completa de com podeu utilitzar AllenNLP per implementar un NER amb incrustacions contextualitzades (ELMo) i després aplicar-lo a la pràctica.

Si us ha agradat aquest article, ajudeu-nos a mantenir informats els aspirants a desenvolupadors de PNL. Segueix-nos, comparteix i aplaudeix.