FLAIR: un marco para la PNL

¿Qué es FLAIR?

Es un marco simple para la PNL de última generación. Es una biblioteca muy poderosa desarrollada por Zalando Research. El marco Flair está construido sobre PyTorch.

¿Cuáles son las funciones disponibles en Flair?

  1. Flair admite una serie de incrustaciones de palabras que se utilizan para realizar tareas de NLP, como FastText, ELMo, GloVe, BERT y sus variantes, XLM e incrustaciones de pares de bytes, incluida la incrustación de Flair.
  2. Flair Embedding se basa en el concepto de incrustaciones de strings contextuales que se utiliza para el etiquetado de secuencias.
  3. Con Flair también puede combinar diferentes incrustaciones de palabras para obtener mejores resultados.
  4. Flair es compatible con varios idiomas.

Incrustaciones de strings contextuales:

En esta palabra, cada una de las letras incrustadas en las palabras se envía al modelo de lenguaje de caracteres y luego la representación de entrada se extrae de los LSTM hacia adelante y hacia atrás.

La representación de entrada para la palabra ‘Washington’ se considera en función del contexto anterior a la palabra ‘Washington’. Se toman los estados del primer y último carácter de cada palabra para generar las incrustaciones de palabras.

Puede ver que para la palabra ‘Washington’, la marca roja es la salida LSTM directa y la marca azul es la salida LSTM inversa. Tanto los contextos hacia adelante como hacia atrás se concatenan para obtener la representación de entrada de la palabra ‘Washington’.

Después de obtener la representación de entrada, se alimenta al LSTM hacia adelante y hacia atrás para obtener la tarea particular con la que está tratando. En el diagrama mencionado estamos tratando de obtener el NER.

Instalación de Flair:

Debe tener PyTorch >=1.1 y Python >=3.6 instalados. Para instalar PyTorch en anaconda, ejecute el siguiente comando:

conda install -c pytorch pytorch

Para instalar Flair, ejecute:

pip install flair

trabajo de estilo

1) Tipos de datos Flair:

Flair ofrece dos tipos de objetos. Están:

  1. Frase
  2. fichas

Para obtener el número de tokens en una oración:

Python3

import flair
from flair.data import Sentence
  
# take a sentence
s= Sentence('GeeksforGeeks is Awesome.')
print(s)

Producción:

2) Etiquetas NER:

Para predecir etiquetas para una oración dada, usaremos un modelo previamente entrenado como se muestra a continuación:

Python3

import flair
from flair.data import Sentence
from flair.models import SequenceTagger
  
# input a sentence
s = Sentence('GeeksforGeeks is Awesome.')
  
# loading NER tagger
tagger_NER= SequenceTagger.load('ner')
  
# run NER over sentence
tagger_NER.predict(s)
print(s)
print('The following NER tags are found:\n')
  
# iterate and print
for entity in s.get_spans('ner'):
    print(entity)

Producción:

3) incrustaciones de palabras:

Las incrustaciones de palabras dan incrustaciones para cada palabra del texto. Como se discutió anteriormente, Flair admite muchas incrustaciones de palabras, incluidas sus propias incrustaciones de Flair. Aquí veremos cómo implementar algunos de ellos.

A) Incrustaciones de palabras clásicas: esta clase de incrustaciones de palabras es estática. En esto, a cada palabra distinta se le da solo una incrustación precalculada. La mayoría de las incrustaciones de palabras comunes se encuentran en esta categoría, incluida la incrustación de GloVe.

Python3

import flair
from flair.data import Sentence
from flair.embeddings import WordEmbeddings
  
# using glove embedding
GloVe_embedding = WordEmbeddings('glove')
  
# input a  sentence
s = Sentence('Geeks for Geeks helps me study.')
  
# embed the sentence
GloVe_embedding.embed(s)
  
# print the embedded tokens
for token in s:
    print(token)
    print(token.embedding)

Producción:

Nota: Puede ver aquí que las incrustaciones de la palabra ‘ Geeks ‘ son las mismas para ambas apariciones.

B) Incrustación de estilo: funciona con el concepto de incrustaciones de strings contextuales. Captura información sintáctico-semántica latente. Las incrustaciones de palabras están contextualizadas por las palabras que las rodean. Por lo tanto, proporciona diferentes incrustaciones para la misma palabra según el texto que la rodea.

Python3

import flair
from flair.data import Sentence
from flair.embeddings import FlairEmbeddings
  
# using forward flair embeddingembedding
forward_flair_embedding= FlairEmbeddings('news-forward-fast')
  
# input the sentence
s = Sentence('Geeks for Geeks helps me study.')
  
# embed words in the input sentence
forward_flair_embedding.embed(s)
  
# print the embedded tokens
for token in s:
    print(token)
    print(token.embedding)

Producción:

Nota: Aquí vemos que las incrustaciones de la palabra ‘Geeks’ son diferentes para ambas ocurrencias dependiendo de la información contextual que las rodea.

C) Incrustaciones apiladas: al usar estas incrustaciones, puede combinar diferentes incrustaciones. Veamos cómo combinar las incrustaciones de GloVe, adelante y atrás de Flair:

Python3

import flair
from flair.data import Sentence
from flair.embeddings import FlairEmbeddings, WordEmbeddings
from flair.embeddings import StackedEmbeddings
# flair embeddings
forward_flair_embedding= FlairEmbeddings('news-forward-fast')
backward_flair_embedding= FlairEmbeddings('news-backward-fast')
  
# glove embedding
GloVe_embedding = WordEmbeddings('glove')
  
# create a object which combines the two embeddings
stacked_embeddings = StackedEmbeddings([forward_flair_embedding,
                                        backward_flair_embedding,
                                        GloVe_embedding,])
  
# input the sentence
s = Sentence('Geeks for Geeks helps me study.')
                                          
# embed the input sentence with the stacked embedding
stacked_embeddings.embed(s)
  
# print the embedded tokens
for token in s:
    print(token)
    print(token.embedding)

Producción:

4) Incrustaciones de documentos:

, A diferencia de las incrustaciones de palabras, las incrustaciones de documentos brindan una incrustación única para todo el texto. Las incrustaciones de documentos que se ofrecen en Flair son:

  • A) Incrustaciones de documentos de transformadores
  • B) Incrustaciones de documentos de transformadores de oraciones
  • C) Documento RNN Embebidos
  • D) Incrustaciones de grupos de documentos

Echemos un vistazo a cómo funcionan las incrustaciones de grupo de documentos:

Incrustaciones de grupos de documentos:  es una incrustación de documentos muy simple y agrupa todas las incrustaciones de palabras y devuelve el promedio de todas ellas.

Python3

import flair
from flair.data import Sentence
from flair.embeddings import WordEmbeddings, DocumentPoolEmbeddings
  
# init the glove word embedding
GloVe_embedding = WordEmbeddings('glove')
  
# init the document embedding
doc_embeddings = DocumentPoolEmbeddings([GloVe_embedding])
  
# input the sentence
s = Sentence('Geeks for Geeks helps me study.')
                                          
#embed the input sentence with the document embedding
doc_embeddings.embed(s)
  
# print the embedded tokens
print(s.embedding)

Producción:

Del mismo modo, también puede utilizar otras incrustaciones de documentos.

5) Entrenamiento de un modelo de clasificación de texto usando Flair:

Vamos a utilizar el conjunto de datos ‘TREC_6’ disponible en Flair. También puede utilizar sus propios conjuntos de datos. Para entrenar nuestro modelo, usaremos Document RNN Embeddings que entrena un RNN sobre todas las incrustaciones de palabras en una oración. Las incrustaciones de palabras que usaremos son GloVe y la incrustación de estilo hacia adelante.

Python3

from flair.data import Corpus
from flair.datasets import TREC_6
from flair.embeddings import WordEmbeddings, FlairEmbeddings, DocumentRNNEmbeddings
from flair.models import TextClassifier
from flair.trainers import ModelTrainer
  
# load the corpus
corpus = TREC_6()
  
# create a label dictionary
label_Dictionary = corpus.make_label_dictionary()
  
# list of word embeddings to be used
word_embeddings = [WordEmbeddings('glove'),FlairEmbeddings('news-forward-fast')]
  
# init document embeddings and pass the word embeddings list
doc_embeddings = DocumentRNNEmbeddings(word_embeddings,hidden_size = 250)
  
# creating the text classifier
text_classifier = TextClassifier(doc_embeddings,label_dictionary = label_Dictionary)
  
# init the text classifier trainer
model_trainer = ModelTrainer(text_classifier,corpus)
  
# train your model
model_trainer.train('resources/taggers/trec',learning_rate=0.1,mini_batch_size=40,anneal_factor=0.5,patience=5,max_epochs=200)

Resultados del entrenamiento:

La precisión del modelo es de alrededor del 95%.

Predicciones: Ahora podemos cargar el modelo y hacer predicciones-

Python3

from flair.data import Sentence
from flair.models import TextClassifier
c = TextClassifier.load('resources/taggers/trec/final-model.pt')
  
# input example sentence
s = Sentence('Who is the President of India ?')
  
# predict class and print
c.predict(s)
  
# print the labels
print(s.labels)

Producción:

[HUM (1.0)]

Ahora tendrá una idea aproximada de cómo usar la biblioteca Flair.

Publicación traducida automáticamente

Artículo escrito por shristikotaiah y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *