Gelegentlich erfordern die Umstände Folgendes:
from keras.preprocessing.text import Tokenizer
tokenizer = Tokenizer(num_words=my_max)
Dann singen wir immer dieses Mantra:
tokenizer.fit_on_texts(text)
sequences = tokenizer.texts_to_sequences(text)
Obwohl ich (mehr oder weniger) verstehe, was der Gesamteffekt ist, kann ich nicht herausfinden, was jeder einzeln tut, unabhängig davon, wie viel Forschung ich mache (einschließlich natürlich der Dokumentation). Ich glaube nicht, dass ich jemals einen ohne den anderen gesehen habe.
Was macht jeder? Gibt es Umstände, unter denen Sie eines ohne das andere verwenden würden? Wenn nicht, warum werden sie nicht einfach zu etwas kombiniert wie:
sequences = tokenizer.fit_on_texts_to_sequences(text)
Entschuldigung, wenn mir etwas Offensichtliches fehlt, aber ich bin ziemlich neu darin.
Antworten:
Aus dem Quellcode :
fit_on_texts
Aktualisiert den internen Wortschatz anhand einer Liste von Texten. Diese Methode erstellt den Vokabularindex basierend auf der Worthäufigkeit. Also, wenn Sie es so etwas wie "Die Katze saß auf der Matte." Es wird ein Wörterbuch erstellt.word_index["the"] = 1; word_index["cat"] = 2
Es ist ein Wort -> Indexwörterbuch, sodass jedes Wort einen eindeutigen ganzzahligen Wert erhält. 0 ist zum Auffüllen reserviert. Eine niedrigere Ganzzahl bedeutet also häufigeres Wort (oft sind die ersten paar Stoppwörter, weil sie häufig vorkommen).texts_to_sequences
Wandelt jeden Text in Texte in eine Folge von ganzen Zahlen um. Im Grunde genommen nimmt es jedes Wort im Text und ersetzt es durch den entsprechenden ganzzahligen Wert aus demword_index
Wörterbuch. Nicht mehr und nicht weniger, schon gar keine Magie.Warum kombinieren Sie sie nicht? Weil Sie fast immer einmal passen und viele Male in Sequenzen konvertieren . Sie werden einmal in Ihr Trainingskorpus passen und genau dasselbe
word_index
Wörterbuch zum Zeitpunkt des Zuges / der Bewertung / des Testens / der Vorhersage verwenden, um den tatsächlichen Text in Sequenzen umzuwandeln, um sie dem Netzwerk zuzuführen. Daher ist es sinnvoll, diese Methoden getrennt zu halten.quelle
0
ein reservierter Index, der keinem Wort zugewiesen wird". In Ihrem Beispiel wäre der erste Wortindex also 1 keras.io/preprocessing/text. Ein weiterer Punkt ist, dass der Standardfilter die meisten Interpunktionssymbole entfernt, daher sind diese nur dann am häufigsten im Vokabular, wenn Sie Interpunktionen aus dem Filter entfernen.Das Hinzufügen weiterer Antworten zu den obigen Antworten mit Beispielen hilft beim besseren Verständnis:
Beispiel 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}
Beispiel 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}
quelle
Mal sehen, was diese Codezeile macht.
tokenizer.fit_on_texts (Text)
Betrachten Sie zum Beispiel den Satz "Die Erde ist ein großartiger Ort zum Leben".
tokenizer.fit_on_texts("The earth is an awesome place live")
passt [[1,2,3,4,5,6,7]] wobei 3 -> "ist", 6 -> "Ort" usw.sequences = tokenizer.texts_to_sequences("The earth is an great place live")
gibt [[1,2,3,4,6,7]] zurück.
Sie sehen, was hier passiert ist. Das Wort "großartig" passt anfangs nicht, daher erkennt es das Wort "großartig" nicht. Das heißt, fit_on_text kann unabhängig für Zugdaten verwendet werden, und dann kann der angepasste Vokabularindex verwendet werden, um einen völlig neuen Satz von Wortfolgen darzustellen. Dies sind zwei verschiedene Prozesse. Daher die beiden Codezeilen.
quelle