博客
关于我
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/

你可能感兴趣的文章
Nim教程【十二】
查看>>
Nim游戏
查看>>
NIO ByteBuffer实现原理
查看>>
Nio ByteBuffer组件读写指针切换原理与常用方法
查看>>
NIO Selector实现原理
查看>>
nio 中channel和buffer的基本使用
查看>>
NIO三大组件基础知识
查看>>
NIO与零拷贝和AIO
查看>>
NIO同步网络编程
查看>>
NIO基于UDP协议的网络编程
查看>>
NIO笔记---上
查看>>
NIO蔚来 面试——IP地址你了解多少?
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
NISP国家信息安全水平考试,收藏这一篇就够了
查看>>
NIS服务器的配置过程
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>