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

你可能感兴趣的文章
PHP文件锁
查看>>
php文本框输入制定文本,php – 当用户没有向文本框输入任何内容时...
查看>>
PHP时间戳和日期相互转换操作总结
查看>>
php时间戳知识点,php 时间戳函数总结与示例
查看>>
PHP查找数组中最大值与最小值
查看>>
php查最大值,在PHP数组中查找最大值
查看>>
php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
查看>>
php根据年月日计算年龄
查看>>
RabbitMQ - 单机部署(超详细)
查看>>
php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
查看>>
php模拟发送GET和POST请求
查看>>
php模板引擎smarty
查看>>
php正则表达式的特殊字符含义
查看>>
PHP水仙花问题解法之一
查看>>
php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
查看>>
php注册页面实现注册后跳转页面
查看>>
PHP消息队列的实现方式与详解,值得一看
查看>>
PHP混合Go协程并发
查看>>
php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
查看>>
php漏洞tips
查看>>