状況によっては、次のことを行う必要があります。
from keras.preprocessing.text import Tokenizer
tokenizer = Tokenizer(num_words=my_max)
次に、必ずこのマントラを唱えます。
tokenizer.fit_on_texts(text)
sequences = tokenizer.texts_to_sequences(text)
私は(多かれ少なかれ)全体の効果を理解していますが、どれだけの研究(明らかにドキュメントを含む)に関係なく、それぞれが個別に何をしているのか理解できません。私は、他の人なしでこれまで見たことがないと思います。
それで、それぞれは何をしますか?どちらか一方をもう一方なしで使用する状況はありますか?そうでない場合、なぜそれらは単に次のようなものに結合されないのですか?
sequences = tokenizer.fit_on_texts_to_sequences(text)
明らかなものがない場合はお詫びしますが、これはかなり新しいです。
ソースコード から:
fit_on_texts
_テキストのリストに基づいて内部語彙を更新します。このメソッドは、Wordの頻度に基づいて語彙インデックスを作成します。つまり、「猫はマットの上に座った」のようなものを与えると、辞書s.tを作成します。 _Word_index["the"] = 1; Word_index["cat"] = 2
_これはWord->索引辞書なので、すべてのWordは一意の整数値を取得します。 0はパディング用に予約されています。したがって、整数が小さいほどWordの頻度が高くなります(多くの場合、最初のいくつかはストップワードです)。texts_to_sequences
_テキスト内の各テキストを整数のシーケンスに変換します。基本的に、テキスト内の各Wordを取得して、_Word_index
_辞書。それ以上でも、それ以下でも、確かに魔法は必要ありません。それらを組み合わせないのはなぜですか?ほとんど常に1回に当てはまり、シーケンス何度も。トレーニングコーパスに一度はめ込み、train/eval/Testing /予測時にまったく同じ_Word_index
_辞書を使用して、実際のテキストをシーケンスに変換し、ネットワークにフィードします。したがって、これらのメソッドを分離しておくことは理にかなっています。
上記の回答に例を追加すると、理解が深まります。
例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}
例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}
このコード行が何をするか見てみましょう。
tokenizer.fit_on_texts(テキスト)
たとえば、「地球は生きている素晴らしい場所です」という文を考えてみましょう。
tokenizer.fit_on_texts("The earth is an awesome place live")
fits [[1,2,3,4,5,6,7]] where 3-> "is"、6-> "place"など。
sequences = tokenizer.texts_to_sequences("The earth is an great place live")
[[1,2,3,4,6,7]]を返します。
ここで何が起こったかがわかります。 「素晴らしい」という言葉は最初は適合しないので、「素晴らしい」という言葉を認識しません。つまり、fit_on_textはトレインデータに対して個別に使用でき、その後、適合した語彙インデックスを使用して、まったく新しいWordシーケンスのセットを表すことができます。これらは2つの異なるプロセスです。したがって、2行のコードです。