博客
关于我
python对英文文本进行one—hot编码
阅读量:239 次
发布时间:2019-03-01

本文共 2228 字,大约阅读时间需要 7 分钟。

单词级one-hot编码实现(numpy编写)

1. numpy实现

在本节中,我们将从零开始学习如何对文本数据进行单词级的one-hot编码。one-hot编码是一种将文本数据转换为数值表示的技术,常用于机器学习模型中。以下是使用numpy实现one-hot编码的详细步骤:

第一步:导入所需的库

首先,我们需要导入numpy库,因为它将用于创建和处理编码矩阵。

import numpy as np

第二步:准备文本数据

我们准备了一组文本样本:

samples = [    "this cat sat on the mat",    "this dog ate my homework"]

第三步:构建单词索引

我们将创建一个空的字典来存储单词及其对应的索引。通过遍历每个样本中的每个单词,我们可以为每个唯一单词分配一个唯一的索引。

token_index = {}for sample in samples:    for word in sample.split():        if word not in token_index:            token_index[word] = len(token_index) + 1

第四步:确定最大单词长度

在本例中,我们只考虑每个样本前max_length个单词。这里我们将max_length设置为1。

max_length = 1

第五步:创建结果矩阵

我们将创建一个二维矩阵results,其形状为(len(samples), max_length, max(token_index.values()) + 1)。最后一个维度的值加1是为了确保索引从1开始。

max_tokens = max(token_index.values(), default=0)results = np.zeros(shape=(len(samples), max_length, max_tokens + 1))

第六步:填充结果矩阵

接下来,我们遍历样本,逐个单词填充结果矩阵。注意,我们只考虑每个样本前max_length个单词。

for i, sample in enumerate(samples):    for j, word in list(enumerate(sample.split()))[:max_length]:        index = token_index.get(word)        results[i, j, index] = 1

第七步:输出结果

最后,我们打印编码后的结果矩阵。

print(results)

2. 使用Keras内置函数实现one-hot编码

在Keras中,我们可以利用Tokenizer类来实现one-hot编码。这是一个强大的工具,它不仅支持one-hot编码,还可以进行其他类型的文本向量化。

第一步:导入所需的库

首先,我们需要导入Keras预处理模块中的Tokenizer类。

from keras_preprocessing.text import Tokenizer

第二步:准备文本数据

我们准备了相同的文本样本:

samples = [    "this cat sat on the mat",    "this dog ate my homework"]

第三步:创建分词器

我们创建一个Tokenizer对象,并设置其参数以限制单词数量。

tokenizer = Tokenizer(num_words=1000)

第四步:拟合分词器

使用fit_on_texts方法,我们可以让分词器了解我们的文本样本。

tokenizer.fit_on_texts(samples)

第五步:生成词向量序列

使用texts_to_sequences方法,我们可以将文本样本转换为词向量序列。

sequences = tokenizer.texts_to_sequences(samples)

第六步:获取one-hot编码结果

使用texts_to_matrix方法,我们可以直接获取one-hot编码结果。这里我们指定mode='binary'以确保结果是一个二进制矩阵。

one_hot_results = tokenizer.texts_to_matrix(samples, mode='binary')

第七步:获取单词索引

最后,我们可以通过word_index属性获取单词到索引的映射。

word_index = tokenizer.word_index

第八步:打印结果

我们打印生成的词向量序列和one-hot编码结果。

print("sequences\n", sequences)print("word_index\n", word_index)print("one_hot_results[0]\n", one_hot_results[0])print(one_hot_results)

总结

在本节中,我们学习了如何对文本数据进行单词级的one-hot编码。通过使用numpy,我们手动实现了one-hot编码过程,并通过Keras的内置函数简化了这一过程。Keras的Tokenizer类不仅支持one-hot编码,还能自动处理文本预处理任务,如去除特殊字符和只考虑数据集中出现的单词。

转载地址:http://mjpv.baihongyu.com/

你可能感兴趣的文章
Permutation
查看>>
PE文件,节头有感IMAGE_SECTION_HEADER
查看>>
PE知识复习之PE的导入表
查看>>
PGOS:今天动手给电脑装青苹果Win7 X64位系统
查看>>
PgSQL · 特性分析 · PG主备流复制机制
查看>>
phoenix连接hbase报错Can not resolve hadoop120, please check your network_记录026---大数据工作笔记0187
查看>>
PHP
查看>>
Regular Expression Notes
查看>>
PHP $FILES error码对应错误信息
查看>>
PHP $_FILES函数详解
查看>>
php & 和 & (主要是url 问题)
查看>>
php -- 魔术方法 之 判断属性是否存在或为空:__isset()
查看>>
php -- 魔术方法 之 获取属性:__get()
查看>>
php -树-二叉树的实现
查看>>
PHP -算法-二路归并
查看>>
php 360 不记住密码,JavaScript_多种方法实现360浏览器下禁止自动填写用户名密码,目前开发一个项目遇到一个很 - phpStudy...
查看>>
php aes sha1解密,PHP AES加密/解密
查看>>
php csv 导出
查看>>
PHP imap 远程命令执行漏洞复现(CVE-2018-19518)
查看>>
php include和require
查看>>