有时,情况需要我们执行以下操作:
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)
很抱歉,我错过了明显的内容,但我对此很陌生。
答案 0 :(得分:14)
来自source code:
fit_on_texts
根据文本列表更新内部词汇。此方法根据词频创建词汇索引。因此,如果您给它类似“猫坐在垫子上”的字样。它将创建一个字典word_index["the"] = 0; word_index["cat"] = 1
是单词->索引字典,因此每个单词都具有唯一的整数值。因此,较低的整数意味着单词使用频率更高(通常前几个是标点符号,因为它们出现的次数很多)。texts_to_sequences
将文本中的每个文本转换为整数序列。因此,它基本上将文本中的每个单词都用word_index
中的相应整数值替换字典。仅此而已,当然也不会涉及任何魔术。 为什么不将它们组合?,因为您几乎总是适合一次并转换成很多次的序列。您将适合您的训练语料库,并在训练/评估/测试/预测时使用完全相同的word_index
词典将实际文本转换为序列,以将其输入网络。因此,将这些方法分开是很有意义的。
答案 1 :(得分:3)
让我们看看这行代码的作用。
tokenizer.fit_on_texts(文本)
例如,考虑句子“地球是一个很棒的生活场所”
sequences = tokenizer.texts_to_sequences("The earth is an great place live")
适合[[1,2,3,4,5,6,7]]其中3->“ is”,6->“ place”,依此类推。
const menuButtons = document.querySelectorAll('.clickfun');
menuButtons.forEach(button => button.addEventListener('click', toggleButton, false));
function toggleButton() {
const id = this.dataset.id;
const panel = document.getElementById(id);
if (panel.style.display === 'block') {
panel.style.display = 'none';
} else {
panel.style.display = 'block';
}
}
var boxArray = ['box1','box2'];
window.addEventListener('mouseup', function(event) {
for(var i=0; i < boxArray.length; i++){
var box = document.getElementById(boxArray[i]);
if(event.target != box && event.target.parentNode != box) {
box.style.display = 'none';
}
}
});
var anchors = Array.from(document.querySelectorAll('a'));
anchors.map(anchor => {
if(anchor.classList.contains('btn-open') || anchor.classList.contains('btn-down')) {
anchor.addEventListener('click', () => {
if(anchor.classList.contains('btn-open')) {
anchor.classList.remove('btn-open');
anchor.classList.add('btn-down');
}
else {
anchor.classList.add('btn-open');
anchor.classList.remove('btn-down');
}
});
}
});
返回[[1,2,3,4,6,7]]。
您看到这里发生了什么。单词“ great”最初不适合使用,因此无法识别单词“ great”。意思是,可以在火车数据上单独使用fit_on_text,然后可以使用拟合的词汇索引来表示一组全新的单词序列。这是两个不同的过程。因此,这两行代码。
答案 2 :(得分:3)
在上述示例中添加更多答案将有助于更好地理解:
示例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}