keras处理文本数据

1处理文本数据

文本是一种以字符或者单词为序列数据,而如何让他让计算机读懂从而进行一系列处理是比较关键的一步。从本质上来说文字其实就是便于人这种碳基生命理解的抽象符号,而对于计算机这种硅基生命胚胎来说,或许向量才是它们最便于理解的形式,因此下面介绍如何将文本向量化。
将文本分解成的单元叫做标记,将文本分解成标记的过程叫做分词。标记有单词、字符和单词或字符的n-grame三种,其中n-grame很少用于深度学习,这里不再多说。而向量和标记相关联的方法主要有两种,一种为one-hot编码,一种为标记嵌入(包含词嵌入(word embedding))

单词和字符的one-hot编码

单词级的one-hot编码

import numpy as np

samples = ['The cat sat on the mat.', 'The 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 = 10
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.

调用keras API实现单词级分类

from keras.preprocessing.text import Tokenizer

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

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

得到one-hot编码的二进制表示
one_hot_results = tokenizer.texts_to_matrix(samples, mode='binary')

找回单词引索
word_index = tokenizer.word_index
print('Found %s unique tokens.' % len(word_index))

使用词嵌入

有没有一个理想的词嵌入空间,可以完美映射人类语言,并可用于所有自然语言处理任务?可能有,但我们尚未发现。因此合理的做法是对每个新任务都学习一个新的嵌入空间。

利用Embedding层学习词嵌入

IMDB数据集是Keras内部集成的,初次导入需要下载一下,之后就可以直接用了。
IMDB数据集包含来自互联网的50000条严重两极分化的评论,该数据被分为用于训练的25000条评论和用于测试的25000条评论,训练集和测试集都包含50%的正面评价和50%的负面评价。该数据集已经经过预处理:评论(单词序列)已经被转换为整数序列,其中每个整数代表字典中的某个单词。

from keras.layers import Embedding
from keras.datasets import imdb
from keras import preprocessing
from keras.models import Sequential
from keras.layers import Flatten
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值