from tensorflow.keras.preprocessing.text import Tokenizer # 标记器(每一个词,以我们的数值做映射,)
words = ['LaoWang has a Wechat account.', 'He is not a nice person.', 'Be careful.'] # 把这句话中每一个单词,映射成我们的数值
tokenizer = Tokenizer(num_words=15) # 上面三句话中,词的总数不超过 15 个(估算的值), num_words 设置单词的数量
tokenizer.fit_on_texts(words)
word_index = tokenizer.word_index
print(word_index, len(word_index))
# 把文本转化为序列编码
sequences = tokenizer.texts_to_sequences(words)
print(sequences)
# 文本转化为矩阵
one_hot_matrix = tokenizer.texts_to_matrix(words, mode='binary')
# 向量化是构建神经网络的第一步
print(tokenizer.word_index.keys())
print(one_hot_matrix, one_hot_matrix.shape)
逐行解读这段代码。
from tensorflow.keras.preprocessing.text import Tokenizer
从tensorflow.keras.preprocessing.text
模块导入Tokenizer
类。Tokenizer
用于文本标记,将每一个词映射为一个整数值。
words = ['LaoWang has a Wechat account.', 'He is not a nice person.', 'Be careful.']
定义了一个列表words
,包含三个字符串。
tokenizer = Tokenizer(num_words=15)
创建一个Tokenizer
对象,并设置参数num_words=15
,意味着最大考虑15个单词。这不代表只有15个单词会被编码,而是在后续转换为矩阵时,只会考虑频率最高的前15个单词。
tokenizer.fit_on_texts(words)
调用fit_on_texts
方法让tokenizer
在words
列表上进行学习,从而创建一个词到整数值的映射。
word_index = tokenizer.word_index
获取tokenizer
的word_index
属性,它是一个字典,其中键是单词,值是单词对应的整数值。
print(word_index, len(word_index))
{‘a’: 1, ‘laowang’: 2, ‘has’: 3, ‘wechat’: 4, ‘account’: 5, ‘he’: 6, ‘is’: 7, ‘not’: 8, ‘nice’: 9, ‘person’: 10, ‘be’: 11, ‘careful’: 12} 12
打印word_index
字典和它的长度。
sequences = tokenizer.texts_to_sequences(words)
调用texts_to_sequences
方法将words
列表中的文本转化为整数序列,保存到sequences
中。
print(sequences)
[[2, 3, 1, 4, 5], [6, 7, 8, 1, 9, 10], [11, 12]]
打印sequences
列表。
one_hot_matrix = tokenizer.texts_to_matrix(words, mode='binary')
调用texts_to_matrix
方法将words
列表中的文本转化为二进制矩阵,保存到one_hot_matrix
中。二进制矩阵意味着,如果某个单词出现在文本中,它的位置会是1,否则是0。
print(tokenizer.word_index.keys())
dict_keys([‘a’, ‘laowang’, ‘has’, ‘wechat’, ‘account’, ‘he’, ‘is’, ‘not’, ‘nice’, ‘person’, ‘be’, ‘careful’])
打印word_index
字典中所有的键(即所有的单词)。
print(one_hot_matrix, one_hot_matrix.shape)
[[0. 1. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0. 1. 1. 1. 1. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0.]] (3, 15)
打印one_hot_matrix
和它的形状。这个矩阵的每一行对应words
列表中的一个文本,每一列对应一个单词。如果文本中有该单词,则该位置的值为1,否则为0。
总结:这段代码首先定义了一个文本列表,然后使用Tokenizer
类将文本转化为整数序列,最后将文本转化为二进制矩阵。这是将文本数据预处理为可以输入到神经网络的形式的常见步骤。