一、例子:將詞匯列表{"周杰倫","陳奕迅","王力宏","李宗盛","吳亦凡","鹿晗"}進(jìn)行onehot編碼并保存:
1、編寫腳本:vim one-hot-test.py
# 導(dǎo)入用于對象保存和加載的包
from sklearn.externals import joblib
# 導(dǎo)入keras中的詞匯映射器Tokenizer
from keras.preprocessing.text import Tokenizer
# 初始化一個詞匯表
vocab = {"周杰倫","陳奕迅","王力宏","李宗盛","吳亦凡","鹿晗"}
# 實例化一個詞匯映射器
t = Tokenizer(num_words=None, char_level=False)
# 在映射器上你和現(xiàn)有的詞匯表
t.fit_on_texts(vocab)
# 循環(huán)遍歷詞匯表,將每一個單詞映射為one-hot張量表示
for token in vocab:
# 初始化一個全零向量
zero_list = [0] * len(vocab)
# 使用映射器轉(zhuǎn)化文本數(shù)據(jù),每個詞匯對應(yīng)從1開始
token_index = t.texts_to_sequences([token])[0][0] -1
# 將對應(yīng)的位置復(fù)制為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 命令執(zhí)行腳本:
python one-hot-test.py
3、運行結(jié)果:
? 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]
二、將上一步的保存結(jié)果加載應(yīng)用:
1、編寫腳本:vim demo2.py
# 導(dǎo)入用于對象保存于加載的包
from sklearn.externals import joblib
# 將之前已經(jīng)訓(xùn)練好的詞匯映射器加載進(jìn)來
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、輸出結(jié)果:
李宗盛 的one-hot編碼為: [0, 0, 0, 0, 0, 1]