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

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

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


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

1. 利用 Embedding 层学习词嵌入

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

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

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

from keras.datasets import imdbfrom keras import preprocessingmax_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 Sequentialfrom keras.layers import Flatten, Densemodel = 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/

你可能感兴趣的文章
Open Graph Protocol(开放内容协议)
查看>>
Open vSwitch实验常用命令
查看>>
Open WebUI 忘了登入密码怎么办?
查看>>
Open-E DSS V7 应用系列之五 构建软件NAS
查看>>
open-vm-tools-dkms : 依赖: open-vm-tools (>= 2:9.4.0-1280544-5ubuntu3) 但是它将不会被安装
查看>>
open3d-Dll缺失,未找到指定模块解决
查看>>
Openbox-桌面图标设置
查看>>
opencart出现no such file or dictionary
查看>>
opencv Mat push_back
查看>>
opencv SVM分类Demo
查看>>
opencv videocapture读取视频cap.isOpened 输出总是false
查看>>
opencv waitKey() 函数理解及应用
查看>>
OpenCV 中的图像转换
查看>>
OpenCV 人脸识别 C++实例代码
查看>>
OpenCV 在 Linux 上的 python 与 anaconda 无法正常工作.收到未实现 cv2.imshow() 的错误
查看>>
Opencv 完美配置攻略 2014 (Win8.1 + Opencv 2.4.8 + VS 2013)上
查看>>
opencv 模板匹配, 已解决模板过大程序不工作的bug
查看>>
OpenCV 错误:(-215)size.width>0 &&函数imshow中的size.height>0
查看>>
opencv&Python——多种边缘检测
查看>>
opencv&python——高通滤波器和低通滤波器
查看>>