FastText es un modelo de Gensim que sirve para realizar word embedding y clasificación. En él se crean algoritmos de aprendizaje supervisado y no supervisado que sirven para obtener representaciones vectoriales de palabras. Es compatible con CBOW y Skip-gram, modelos que hemos visto en otros artículos, como el de Word2Vec.
Ahora, veamos un poco más acerca de la librería FastText para entender su funcionamiento.
Algunas generalidades sobre FastText
A diferencia de Word2Vec, que trabaja a nivel de palabra, FasText trata de capturar la información morfológica de las palabras.
De esta manera, una palabra quedará representada por sus n-gramas. El tamaño de los n-gramas deberá definirse como hiperparámetro:
- min_n: el valor mínimo de n a considerar.
- max_n: el valor máximo de n a considerar.
Ejemplo:
«Me gusta el procesado del lenguaje natural»*
- Ejemplo de skip-gram preprocesado con una ventana de contexto de 2 palabras.
wtarget = «procesado» wcontext = [“gusta”, “el”, “del”, “lenguaje”]
("procesado", "gusta")
Descomposición de n-gramas con min_n = 3 y max_n = 4:
“procesado” = [“<pr”, “pro”, …, “ado”, “do”> ” , ” <pro”, “roce”, …, “sado”, “ado>”]
- De este modo, la similitud será:
Ejercicio con FastText
Ahora veamos un ejercicio que incluirá esta herramienta, en donde podremos ver cómo funciona en contexto.
Palabras más similares
Lo primero que hacemos es instalar las dependencias. Esto nos permite capturar más información morfológica de las propias palabras, y no solamente para el contexto. Es decir, también va a generar unas representaciones vectoriales que se puedan extrapolar para cualquier flexión verbal de las palabras que tengamos.
! wget https://transfer.sh/J4o169/requirements.txt
! pip install -r requirements.txt
import numpy as np
Utilizamos una función para hacer la similitud de palabras:
#Ejercicio con FastText
def print_sim_words (word, model1, model2):
query = "Most similar to {}".format (word)
print (query)
print (" - "*len (query))
for (sim1, sim2) in zip (model1.wv.most_similar (word), model2.wv.most_similar (word)):
print ("{ } : { } {:.3f} { } { } : { } {:-3f}".format (sim1 [0], " "* (20 - len (sim1 [0])), sim1 [1], " "*10, sim2 [0], " "* (20 - len (sim2 [0])), sim2 [1]))
print ("\n")
Importamos las librerías
También utilizaremos Gensim, que tiene incluido el modelo del FastText en su librería:
from gensim.models import FastText
from gensim.models.word2vec import LineSentence
Lectura de datos
! wget https://transfer.sh/KWNxRn/datasets.zip
! wget https://transfer.sh/XoRKUW/utils.py
! unzip datasets.zip
Cargamos el corpus:
corpus = LineSentence ('./datasets/spanish_news_corpus_doc.txt', limit = 1000)
Hiperparámetros
Establecemos los parámetros:
#Ejercicio con FastText
sg_params = {
'sg': 1,
'size': 300,
'min_count': 5,
'window': 5,
'hs': 0,
'negative': 20,
'workers': 4,
'min_n': 3,
'max_n': 6
}
cbow_params = {
'sg': 0,
'size': 300,
'min_count': 5,
'window': 5,
'hs': 0,
'negative': 20,
'workers': 4,
'min_n': 3,
'max_n': 6
}
Inicializamos el objeto FastText
#Ejercicio con FastText
#Skip Gram
ft_sg = FastText (**sg_params)
#CBOW
ft_cbow = FastText (**cbow_params)
Construimos el vocabulario
ft_sg. build_vocab (corpus)
#CBOW
ft_cbow. build_vocab (corpus)
print ('Vocabulario compuesto por { } palabras'.format (len (ft_sg.wv.vocab)))
Vocabulario compuesto por 8606 palabras.
print ('Vocabulario compuesto por { } palabras'.format (len (ft_cbow.wv.vocab)))
Vocabulario compuesto por 8606 palabras.
Entrenamos los pesos de los embeddings
#Skip gram
ft_sg.train (sentences = corpus, total_examples = ft_sg. corpus_count, epochs = 10)
#Skip gram
ft_cbow.train (sentences = corpus, total_examples = ft_cbow. corpus_count, epochs = 10)
Guardamos los modelos
ft_sg.save ('./ft_sg_ d300_ mc5_ w5.pkl')
ft_cbow.save ('./ft_cbow_ d300_ mc5_ w5.pkl')
Guardamos los modelos
#Ejercicio con FastText
print_sim_words ('elecciones', ft_cbow, ft_sg)
print_sim_words ('botín', ft_cbow, ft_sg)
print_sim_words ('sánchez', ft_cbow, ft_sg)
print_sim_words ('rafa', ft_cbow, ft_sg)
print_sim_words ('impeachment', ft_cbow, ft_sg)
¿Quieres seguir avanzando?
Ahora que hemos visto cómo se elabora y desarrolla un ejercicio de aplicación con el modelo FasText, perteneciente la librería Gensim, podemos dar el siguiente paso en nuestro proceso formativo. Para acceder a las opciones laborales del Big Data, una de las áreas en el mundo de la industria IT mejor pagadas y más demandadas, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación de alta calidad adquirirás los conocimientos imprescindibles para conseguir el trabajo de tus sueños en pocos meses. ¡No esperes más para impulsar tu futuro y solicita información ahora!