one-hot编码

什么是one-hot编码

one-hot编码

one-hot在提取文本特征上的应用

手动实现one-hot编码

import numpy as np
samples = ['他 毕业 于 哈佛大学', '他 就职 于 工科院计算机研究所']
# 分完词之后一般要将词典索引做好,一般叫token_index
token_index = {}
for sample in samples:
    for word in sample.split():
        if word not in token_index:
            token_index[word] = len(token_index)+1
print(len(token_index))
print(token_index)
# 构造one—hot编码
results = np.zeros(shape=(len(samples), len(token_index)+1, max(token_index.values())+1))
for i, sample in enumerate(samples):  # 索引
    for j, word in list(enumerate(sample.split())):   # 对list组进行链接
        index = token_index.get(word)   # 索引和word对应
        print(i, j, index, word)
        results[i, j, index] = 1
print(results)
# 改进的算法
results2 = np.zeros(shape=(len(samples),max(token_index.values())+1) )
for i, sample in enumerate(samples):
    for _, word in list(enumerate(sample.split())):
        index = token_index.get(word)
        results2[i, index] = 1
print(results2)

运行结果

one-hot编码

one-hot编码

Keras中one-hot编码的实现

Keras分词器Tokenizer的办法介绍

生成词典tokenizer.fit_on_texts()

string = ['他 毕业 于 哈佛大学', '他 就职 于 工科院计算机研究所']
# 构建单词索引
tokenizer = Tokenizer()
tokenizer.fit_on_texts(samples)
print(tokenizer.word_index)

将句子序列转换成token矩阵tokenizer.texts_to_matrix()

tokenizer.texts_to_matrix(samples)  #如果string中的word出现在了字典中,那么在矩阵中出现的位置处标1
tokenizer.texts_to_matrix(string,mode='count') #如果string中的word出现在了字典中,那么在矩阵中出现的位置处标记这个word出现的次数

句子转换成单词索引序列tokenizer.texts_to_sequences

sequences = tokenizer.texts_to_sequences(samples)
print(sequences)

分词器被训练的文档(文本或者序列)数量tok.document_count

依照数量由大到小Order排列的token及其数量tok.word_counts

完整代码:

from keras.preprocessing.text import Tokenizer
samples = ['他 毕业 于 哈佛大学', '他 就职 于 工科院计算机研究所']
# 构建单词索引
tokenizer = Tokenizer()
tokenizer.fit_on_texts(samples)
word_index = tokenizer.word_index
print(word_index)
print(len(word_index))
sequences = tokenizer.texts_to_sequences(samples)
print(sequences)
one_hot_results = tokenizer.texts_to_matrix(samples)
print(one_hot_results)

运行结果

one-hot编码

发表回复