¿Qué es FastText y cómo funciona?

Autor: | Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

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á:
FastText

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
¿Qué es FastText y cómo funciona?
! 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)
¿Qué es FastText y cómo funciona?
¿Qué es FastText y cómo funciona?
¿Qué es FastText y cómo funciona?

¿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!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado