Solución:
Del código fuente:
-
fit_on_texts
Actualiza el vocabulario interno basado en una lista de textos. Este método crea el índice de vocabulario basado en la frecuencia de las palabras. Entonces, si le das algo como “El gato se sentó en la alfombra”. Creará un diccionario stword_index["the"] = 1; word_index["cat"] = 2
es palabra -> diccionario de índice, por lo que cada palabra obtiene un valor entero único. 0 está reservado para el relleno. Por lo tanto, un número entero más bajo significa una palabra más frecuente (a menudo, las primeras son palabras vacías porque aparecen muchas). -
texts_to_sequences
Transforma cada texto en textos en una secuencia de números enteros. Básicamente, toma cada palabra del texto y la reemplaza con su valor entero correspondiente de laword_index
diccionario. Nada más, nada menos, ciertamente no hay magia involucrada.
¿Por qué no combinarlos? Porque casi siempre encajas una vez y convertir a secuencias muchas veces. Cabrás en tu cuerpo de entrenamiento una vez y usarás exactamente el mismo word_index
diccionario en tiempo de entrenamiento / evaluación / prueba / predicción para convertir el texto real en secuencias para alimentarlas a la red. Por lo que tiene sentido mantener esos métodos separados.
Agregar más a las respuestas anteriores con ejemplos ayudará a comprender mejor:
Ejemplo 1:
t = Tokenizer()
fit_text = "The earth is an awesome place live"
t.fit_on_texts(fit_text)
test_text = "The earth is an great place live"
sequences = t.texts_to_sequences(test_text)
print("sequences : ",sequences,'n')
print("word_index : ",t.word_index)
#[] specifies : 1. space b/w the words in the test_text 2. letters that have not occured in fit_text
Output :
sequences : [[3], [4], [1], [], [1], [2], [8], [3], [4], [], [5], [6], [], [2], [9], [], [], [8], [1], [2], [3], [], [13], [7], [2], [14], [1], [], [7], [5], [15], [1]]
word_index : {'e': 1, 'a': 2, 't': 3, 'h': 4, 'i': 5, 's': 6, 'l': 7, 'r': 8, 'n': 9, 'w': 10, 'o': 11, 'm': 12, 'p': 13, 'c': 14, 'v': 15}
Ejemplo 2:
t = Tokenizer()
fit_text = ["The earth is an awesome place live"]
t.fit_on_texts(fit_text)
#fit_on_texts fits on sentences when list of sentences is passed to fit_on_texts() function.
#ie - fit_on_texts( [ sent1, sent2, sent3,....sentN ] )
#Similarly, list of sentences/single sentence in a list must be passed into texts_to_sequences.
test_text1 = "The earth is an great place live"
test_text2 = "The is my program"
sequences = t.texts_to_sequences([test_text1, test_text2])
print('sequences : ',sequences,'n')
print('word_index : ',t.word_index)
#texts_to_sequences() returns list of list. ie - [ [] ]
Output:
sequences : [[1, 2, 3, 4, 6, 7], [1, 3]]
word_index : {'the': 1, 'earth': 2, 'is': 3, 'an': 4, 'awesome': 5, 'place': 6, 'live': 7}
Veamos qué hace esta línea de código.
tokenizer.fit_on_texts (texto)
Por ejemplo, considere la oración “La tierra es un lugar maravilloso para vivir”.
tokenizer.fit_on_texts("The earth is an awesome place live")
encaja [[1,2,3,4,5,6,7]]donde 3 -> “es”, 6 -> “lugar”, etc.
sequences = tokenizer.texts_to_sequences("The earth is an great place live")
devoluciones [[1,2,3,4,6,7]].
Ves lo que pasó aquí. La palabra “grande” no es adecuada inicialmente, por lo que no reconoce la palabra “grande”. Es decir, fit_on_text se puede usar de forma independiente en los datos del tren y luego el índice de vocabulario ajustado se puede usar para representar un conjunto completamente nuevo de secuencia de palabras. Estos son dos procesos diferentes. De ahí las dos líneas de código.