如果在文本分类或者图片标签分类的过程中有3类,猫,狗,羊,最简单的标签我们可以让猫是0,狗是1,羊是2,但这就有一个问题,如果算距离的话,猫和狗的距离是1,但猫和羊的距离是2,不符合类别之前相互独立的特点。因此我们就可以用一个矩阵来表示:
猫用[1,0,0]表示,狗用[0,1,0]表示,羊用[0,0,1]表示;这样相互之间的距离都相等。如果预测的向量[0.8,0.1,0.1]那我们就可以认为是猫。
如果我们想用one-hot来表示一句话,比如:我喜欢吃番茄;奶奶喜欢吃番茄;我喜欢奶奶;那么我们就可以首先对这三句话分词,一共有以下几个词:[我,喜欢,吃,番茄,奶奶],然后第一句可以表示为[1,1,1,1,0],第二句可以表示为[0,1,1,1,1],第三句可以表示为[1,1,0,0,1]
from keras.preprocessing.text import Tokenizer
tokens_samples = ['我 喜欢 吃 番茄', '奶奶 喜欢 吃 番茄', '我 喜欢 奶奶']
#构建单词索引
tokenizer = Tokenizer()
tokenizer.fit_on_texts(tokens_samples)
word_index = tokenizer.word_index
print(word_index)
print(len(word_index))
# 将词替换成索引
sequences = tokenizer.texts_to_sequences(tokens_samples)
print(sequences)
# 构建one-hot编码
one_hot_results = tokenizer.texts_to_matrix(tokens_samples)
print(one_hot_results)
参考:【NLP修炼系列之词向量(一)】详解one-hot编码&实战