¿Existe alguna manera de utilizar embedding pre-entrenados con Tf-Idf en tensorflow?
Estoy utilizando la implementación por defecto y básica de Clasificación de Texto como sigue:
tokenizer = Tokenizer(num_words=tamaño_vocabulario, filters=filtros)
tokenizer.fit_on_texts(list(train_X))
train_X = tokenizer.texts_to_sequences(train_X)
val_X = tokenizer.texts_to_sequences(val_X)
train_X = pad_sequences(train_X, maxlen=longitud_maxima)
val_X = pad_sequences(val_X, maxlen=longitud_maxima)
def obtener_coeficientes(palabra,*arr): return palabra, np.asarray(arr, dtype='float32') #Para cargar el Embedding
embeddings_index = dict(obtener_coeficientes(*o.split(" ")) for o in open(ARCHIVO_EMBEDDING))
todos_embs = np.stack(embeddings_index.values())
media_emb, desviacion_emb = todos_embs.mean(), todos_embs.std()
dimension_emb = todos_embs.shape[1]
indice_palabra = tokenizer.word_index
tamaño_vocabulario = min(tamaño_vocabulario, len(indice_palabra))
matriz_embedding = np.random.normal(media_emb, desviacion_emb, (tamaño_vocabulario, dimension_emb)) # tamaño_vocabulario era nb_words
for palabra, indice in indice_palabra.items():
if indice >= tamaño_vocabulario: continue
vector_embedding = embeddings_index.get(palabra)
if vector_embedding is not None: matriz_embedding[indice] = vector_embedding
Funciona bien, pero ¿hay alguna manera de utilizar texts_to_matrix
, donde hay opciones como binario, tfidf, count
, etc.? ¿Es posible que pueda usarlos con los Embeddings existentes?
Una posible forma podría ser utilizar un modelo de entrada múltiple y luego concatenar las dos entradas en un solo lugar. ¿Aparte de eso, hay alguna otra forma posible?
davy.ai
Sí, es posible utilizar la función
texts_to_matrix
con embeddings existentes. La funcióntexts_to_matrix
puede recibir un parámetro opcional llamadomode
, el cual te permite elegir cómo representar cada palabra en el texto de entrada como un vector.Para utilizar embeddings pre-entrenados con
texts_to_matrix
, puedes establecer el valor demode
encount
obinary
, y luego multiplicar la matriz resultante con la matriz de embeddings pre-entrenados.Por ejemplo, para utilizar el modo
binary
con embeddings pre-entrenados, puedes modificar el código de la siguiente manera:Ten en cuenta que en este ejemplo, las llamadas a
texts_to_sequences
ypad_sequences
han sido reemplazadas portexts_to_matrix
. La matriz binaria resultante es luego multiplicada con la matriz de embeddings pre-entrenados.Otros modos como
tfidf
también pueden ser utilizados de manera similar, multiplicando la matriz resultante con la matriz de embeddings pre-entrenados.Además del enfoque de
texts_to_matrix
, también es posible utilizar un modelo de múltiples entradas y concatenar las entradas como una opción viable.