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

你可能感兴趣的文章
NIO基于UDP协议的网络编程
查看>>
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP的神经网络训练的新模式
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
nmon_x86_64_centos7工具如何使用
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>