博客
关于我
keras-文本序列_文本向量化(二)(利用 Embedding 层学习词嵌入)
阅读量:376 次
发布时间:2019-03-05

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

Keras-文本序列_文本向量化(二)(利用 Embedding 层学习词嵌入)


在现代自然语言处理任务中,词嵌入作为一种重要的技术,能够将单词转化为低维向量表示,从而捕捉词语的语义和上下文信息。Embedding 层在 Keras 中提供了一种高效的实现方式,能够帮助模型学习这些词嵌入。

1. 利用 Embedding 层学习词嵌入

Embedding 层的核心作用是将输入的单词序列转化为嵌入向量。具体来说,Embedding 层需要两个参数:标记的总数(通常是单词最大索引加 1)和嵌入的维度(决定向量的大小)。例如,在代码清单 6-5 中,我们创建了一个 Embedding 层,参数为 1000(标记总数)和 64(嵌入维度)。

from keras.layers import Embedding
embedding_layer = Embedding(1000, 64)

接下来,代码清单 6-6 中加载了 IMDB 数据集,并对其进行了预处理。首先,将文本数据转换为整数序列,然后使用 sequence_pad_sequences 函数对文本进行填充或截断,以确保所有序列的长度一致。

from keras.datasets import imdb
from keras import preprocessing
max_features = 10000 # 选择作为特征的单词数量
maxlen = 20 # 文本的最大长度
(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
x_train = preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = preprocessing.sequence.pad_sequences(x_test, maxlen=maxlen)

2. Embedding 层的几何解释

在词嵌入空间中,常见的几何变换包括“性别”向量和“复数”向量。例如,将 "king"(国王)向量加上 "female"(女性)向量,得到的结果是 "queen"(女王)向量;将 "king" 向量加上 "plural"(复数)向量,得到的结果是 "kings" 向量。这些几何变换使得词嵌入空间具有可解释性,并且可以为很多自然语言处理任务提供有用的特征。

然而,是否存在一个理想的词嵌入空间,可以完美地映射人类语言并适用于所有任务?目前尚未发现。同时,人类语言本身并不是一个固定的、可被完美映射的结构。因此,对于每个具体任务,通常需要学习一个专门的词嵌入空间。幸运的是,反向传播使得这种学习变得高效,而 Keras 提供了便捷的实现方式。

3. 使用 Embedding 层进行模型训练

在代码清单 6-7 中,我们构建了一个完整的模型,包括 Embedding 层和分类器。Embedding 层的输入是一个二维整数张量,其形状为 (batch_size, sequence_length)。经过嵌入层处理后,输出的形状为 (batch_size, sequence_length, embedding_dim)。然后,我们将这个三维张量展平成二维,最后添加一个 Dense 层进行分类。

from keras.models import Sequential
from keras.layers import Flatten, Dense
model = Sequential()
model.add(Embedding(10000, 8, input_length=maxlen))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.summary()

在训练过程中,我们使用了 RMSProp 优化器和二元交叉熵损失函数。训练结果表明,验证集的准确率达到 76%,考虑到仅查看每条评论的前 20 个单词,这个结果已经相当不错。然而,仅仅将嵌入序列展平并在上面训练一个 Dense 层,可能会忽略单词之间的关系和句子结构。因此,在后续任务中,我们将在嵌入序列上添加循环层或一维卷积层,以更好地捕捉语义关系。

模型总结

模型总结如下:

  • 嵌入层:(Embedding) 10000, 8
  • 展平层:(Flatten)
  • 分类器:(Dense) 1, 'sigmoid'

总参数数量为 80,161,其中可训练参数为 80,161。

训练过程使用了 20,000 个样本进行训练,验证集使用了 5,000 个样本。训练结果显示,随着 epoch 的增加,验证准确率逐渐提高,表明模型在学习过程中性能稳定。

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

你可能感兴趣的文章
Nodejs概览: 思维导图、核心技术、应用场景
查看>>
nodejs模块——fs模块
查看>>
Nodejs模块、自定义模块、CommonJs的概念和使用
查看>>
nodejs生成多层目录和生成文件的通用方法
查看>>
nodejs端口被占用原因及解决方案
查看>>
Nodejs简介以及Windows上安装Nodejs
查看>>
nodejs系列之express
查看>>
nodejs系列之Koa2
查看>>
Nodejs连接mysql
查看>>
nodejs连接mysql
查看>>
NodeJs连接Oracle数据库
查看>>
nodejs配置express服务器,运行自动打开浏览器
查看>>
NodeMCU教程 http请求获取Json中文乱码解决方案
查看>>
Nodemon 深入解析与使用
查看>>
NodeSession:高效且灵活的Node.js会话管理工具
查看>>
node~ http缓存
查看>>
node不是内部命令时配置node环境变量
查看>>
node中fs模块之文件操作
查看>>
Node中同步与异步的方式读取文件
查看>>
node中的get请求和post请求的不同操作【node学习第五篇】
查看>>