En este artículo, veremos la incrustación de Word preentrenada usando Glove en modelos NLP usando Python.
incrustación de palabras
En los modelos de PNL, tratamos con textos que son legibles y comprensibles para los humanos. Pero la máquina no entiende de textos, sólo entiende de números. Por lo tanto, la incrustación de palabras es la técnica para convertir cada palabra en un vector flotante equivalente. Existen varias técnicas según el caso de uso del modelo y el conjunto de datos. Algunas de las técnicas son One Hot Encoding, TF-IDF, Word2Vec y FastText.
Ejemplo:
'the': [-0.123, 0.353, 0.652, -0.232] 'the' is very often used word in texts of any kind. its equivalent 4-dimension dense vector has been given.
Datos de guantes
Significa Vectores Globales. Esto es creado por la Universidad de Stanford. Glove tiene vectores densos predefinidos para alrededor de cada 6 mil millones de palabras de literatura inglesa junto con muchos otros caracteres de uso general como coma, llaves y punto y coma.
Hay 4 variedades disponibles en guante:
Cuatro variedades son: 50d, 100d, 200d y 300d.
Aquí d representa la dimensión. 100d significa que en este archivo cada palabra tiene un vector equivalente de tamaño 100. Los archivos Glove son archivos de texto simples en forma de diccionario. Las palabras son clave y los vectores densos son valores de clave.
Crear diccionario de vocabulario
El vocabulario es la colección de todas las palabras únicas presentes en el conjunto de datos de entrenamiento. El primer conjunto de datos se tokeniza en palabras, luego se cuenta toda la frecuencia de cada palabra. Luego, las palabras se ordenan en orden decreciente de sus frecuencias. Las palabras que tienen alta frecuencia se colocan al principio del diccionario.
Dataset= {The peon is ringing the bell} Vocabulary= {'The':2, 'peon':1, 'is':1, 'ringing':1}
Algoritmo para la incrustación de palabras:
- Preprocesar los datos de texto.
- Creó el diccionario.
- Recorra el archivo del guante de una dimensión específica y compare cada palabra con todas las palabras del diccionario,
- si ocurre una coincidencia, copie el vector equivalente del guante y péguelo en embedding_matrix en el índice correspondiente.
A continuación se muestra la implementación:
Python3
# code for Glove word embedding from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.preprocessing.sequence import pad_sequences import numpy as np x = {'text', 'the', 'leader', 'prime', 'natural', 'language'} # create the dict. tokenizer = Tokenizer() tokenizer.fit_on_texts(x) # number of unique words in dict. print("Number of unique words in dictionary=", len(tokenizer.word_index)) print("Dictionary is = ", tokenizer.word_index) # download glove and unzip it in Notebook. #!wget http://nlp.stanford.edu/data/glove.6B.zip #!unzip glove*.zip # vocab: 'the': 1, mapping of words with # integers in seq. 1,2,3.. # embedding: 1->dense vector def embedding_for_vocab(filepath, word_index, embedding_dim): vocab_size = len(word_index) + 1 # Adding again 1 because of reserved 0 index embedding_matrix_vocab = np.zeros((vocab_size, embedding_dim)) with open(filepath, encoding="utf8") as f: for line in f: word, *vector = line.split() if word in word_index: idx = word_index[word] embedding_matrix_vocab[idx] = np.array( vector, dtype=np.float32)[:embedding_dim] return embedding_matrix_vocab # matrix for vocab: word_index embedding_dim = 50 embedding_matrix_vocab = embedding_for_vocab( '../glove.6B.50d.txt', tokenizer.word_index, embedding_dim) print("Dense vector for first word is => ", embedding_matrix_vocab[1])
Producción:
Publicación traducida automáticamente
Artículo escrito por pintusaini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA