【深度学习】将文本数据转换为张量的方法总结

目录

问题描述:

方法概括:

1.单词级的one-hot编码

2.字符级的one-hot编码

3.用keras实现单词级的one-hot编码

4.用散列技巧的单词级的one-hot1编码

参考:


问题描述:

        深度学习模型不会接收原始文本作为输入,它只能处理数值张量。 文本向量化(vectorize)是指将文本转换为数值张量的过程。实现方法:①文本中的每个单词转换为一个向量.②文本中的每个字符转换为一个向量。

方法概括:

1.单词级的one-hot编码

代码展示

import numpy as np

samples = ['The cat sat on the mat.', 'The dog ate my homework.']

#构建数据中被标记的索引
token_index = {}
for sample in samples:
    #利用split方法进行分词
    for word in sample.split():
        if word not in token_index:
            # 为唯一单词指定唯一索引
            token_index[word] = len(token_index) + 1


max_length = 10

#结果保存在result中
results = np.zeros((len(samples), max_length, max(token_index.values()) + 1))
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.字符级的one-hot编码

代码展示

import string

samples = ['The cat sat on the mat.', 'The dog ate my homework.']
#所有可以打印的ASCII字符
characters = string.printable
token_index = dict(zip(range(1,len(characters) +1),characters))

max_length = 50
results = np.zeros((len(samples),max_length,max(token_index.keys()) + 1))
for i ,sample in enumerate(samples):
    for j,character in enumerate(sample[:max_length]):
        index = token_index.get(character)
        results[i,j,index] =1.
print(results)

实现截图

 

3.用keras实现单词级的one-hot编码

代码展示

from keras.preprocessing.text import Tokenizer

samples = ['The cat sat on the mat.', 'The dog ate my homework.']
#创建分词器,设置只考虑前1000最常见单词
tokenizer = Tokenizer(num_words=1000)
#构建单词索引
tokenizer.fit_on_texts(samples)

#将字符串转换为由,整数索引组成的列表
sequences = tokenizer.texts_to_sequences(samples)

one_hot_results = tokenizer.texts_to_matrix(samples,mode='binary')
word_index = tokenizer.word_index
print('found %s unique tokens'%len(word_index))

实现截图

 

4.用散列技巧的单词级的one-hot1编码

代码展示

samples = ['The cat sat on the mat.', 'The dog ate my homework.']

#将单词保存长度为1000的向量
dimensionality = 1000
max_length= 10

results = np.zeros((len(samples),max_length,dimensionality))
for i ,sample in enumerate(samples):
    for j, word in list(enumerate(sample.split()))[:max_length]:
    #for j,word in list(enumerate(samples.split()))[:max_length]:
        index = abs(hash(word)) % dimensionality
        results [i,j,index] =1.
print(results)

实现截图

 

参考:

《Python深度学习》

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值