¿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?
- 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.
- Flair Embedding se basa en el concepto de incrustaciones de strings contextuales que se utiliza para el etiquetado de secuencias.
- Con Flair también puede combinar diferentes incrustaciones de palabras para obtener mejores resultados.
- 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:
- Frase
- 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