一、例子:将词汇列表{"周杰伦","陈奕迅","王力宏","李宗盛","吴亦凡","鹿晗"}进行onehot编码并保存:
1、编写脚本:vim one-hot-test.py
# 导入用于对象保存和加载的包
from sklearn.externals import joblib
# 导入keras中的词汇映射器Tokenizer
from keras.preprocessing.text import Tokenizer
# 初始化一个词汇表
vocab = {"周杰伦","陈奕迅","王力宏","李宗盛","吴亦凡","鹿晗"}
# 实例化一个词汇映射器
t = Tokenizer(num_words=None, char_level=False)
# 在映射器上你和现有的词汇表
t.fit_on_texts(vocab)
# 循环遍历词汇表,将每一个单词映射为one-hot张量表示
for token in vocab:
# 初始化一个全零向量
zero_list = [0] * len(vocab)
# 使用映射器转化文本数据,每个词汇对应从1开始
token_index = t.texts_to_sequences([token])[0][0] -1
# 将对应的位置复制为1
zero_list[token_index] = 1
print(token, "的one-hot编码为:", zero_list)
# 将拟合好的词汇映射器保存起来
tokenizer_path = "./Tokenizer"
joblib.dump(t, tokenizer_path)
2、python one-hot-test.py 命令执行脚本:
python one-hot-test.py
3、运行结果:
➜ untitled2 python one-hot-test.py
周杰伦 的one-hot编码为: [1, 0, 0, 0, 0, 0]
王力宏 的one-hot编码为: [0, 1, 0, 0, 0, 0]
鹿晗 的one-hot编码为: [0, 0, 1, 0, 0, 0]
吴亦凡 的one-hot编码为: [0, 0, 0, 1, 0, 0]
陈奕迅 的one-hot编码为: [0, 0, 0, 0, 1, 0]
李宗盛 的one-hot编码为: [0, 0, 0, 0, 0, 1]
二、将上一步的保存结果加载应用:
1、编写脚本:vim demo2.py
# 导入用于对象保存于加载的包
from sklearn.externals import joblib
# 将之前已经训练好的词汇映射器加载进来
t = joblib.load("./Tokenizer")
token = "李宗盛"
# 从词汇映射器中得到李宗盛的index
token_index = t.texts_to_sequences([token])[0][0] - 1
# 初始化一个全零的向量
zero_list = [0] * 6
zero_list[token_index] = 1
print(token, "的one-hot编码为:", zero_list)
2、输出结果:
李宗盛 的one-hot编码为: [0, 0, 0, 0, 0, 1]
网友评论