词嵌入

B站上有一个讲词嵌入的视频,我认为讲的还可以:

https://www.bilibili.com/video/BV1Ki4y1x7gJ?from=search&seid=14594580491827061010

 

将文本分解而成的单元(单词、字符或n-gram)叫做标记

将文本分解成标记的过程叫做分词

所有文本向量化过程都是应用某种弄分词方案,然后将数值向量与生成的标记相关联。

这些向量组合成序列张量,被输入到深度神经网络中。

 

将标记转换为向量的最常用最基本的方法是one-hot编码

one-hot编码是将每个单词与一个唯一的整数索引相关联,然后将这个整数索引 i 转换为长度为N的二进制向量(N是词表大小),这个向量只有第 i 个元素是1, 其余元素是0。

将单词与向量相关联的另一种强大的方法是使用密集的词向量,也叫做词嵌入

one-hot编码与词嵌入对比:

one-hot编码得到的向量是二进制的、稀疏的(绝大部分元素都是0)、维度很高的(维度大小等于词表中的单词个数),而词嵌入是低维的浮点数向量(即密集向量,与稀疏向量相对)。

词嵌入与one-hot编码得到的词向量不同,词嵌入是从数据中心学习得到的。常见的词嵌入维度是256、512、1024。而one-hot编码的词向量维度通常为10000(对应包含10000个标记的词表)甚至更高。因此,词嵌入可以将更多的信息塞入更低的维度中。

 

文本处理的步骤:

第一步:文本分词

文本分词也就是将文本分解成标记的过程,如下图所示:

文本分词需要考虑的问题:

1.大小写转化问题:如Apple和apple意思不同

2.常用冠词:如the, a, of等,因为这些词对于情感二分类的预测没有任何帮助

3.拼写检查:如good可能会写成goood

第二步:建立字典

在字典中,统计词频,去除低频词,保留高频词。

第三步:编码(可以one-hot编码,也可以整数编码)

接下来将文本序列转换成整数序列

第四步:序列对齐

因为各条评论的长度不一,也就导致各个序列的长度不一样,所以就需要将各个序列处理成长度一致,然后就可以将它们放入到矩阵或张量中。

在Keras中的preprocessing模块中有一个方法叫做preprocessing.sequence.pad_sequences(),这个方法可以将序列对齐,即给定一个长度,然后将所有序列的长度都处理成该长度。

至此,文本处理已经完成,现在每个词都可以用一个正整数来表示。

接下来,就可以使用词向量了,把这些数据放入一个低维的向量中。可以使用one-hot编码,也可以使用词嵌入,这里重点介绍词嵌入。

 

词嵌入:

将one-hot向量映射为低维的向量:

d 是词向量的维度,这个由用户自己决定(横)

v 是vocabulary,字典里单词的数量(列)

P 是从训练数据中学到的矩阵权重参数

ei 是从字典中第 i 个位置的one-hot向量

 

相乘的结果就是词向量Xi

 

训练矩阵P

矩阵的列表示向量的维度,矩阵的每一行表示一个单词的向量

 

 

获取词嵌入的两种方法:

1.在完成主任务(比如文档分类或情感预测)的同时学习词嵌入。在这种情况下,一开始是随机的词向量,然后对这些词向量进行学习,其学习方式与学习神经网络的权重相同。

利用Keras中的Embedding层学习词嵌入:embedding_layer = Keras.layers.Embedding(1000, 64)

Embedding至少有两个参数:

    标记的个数:这里是1000,表示共有1000个最常见的单词

    嵌入的维度:这里是64,表示一个单词由一个64维的向量表示

最好将Embedding层理解为一个字典,将整数索引(每个整数表示一个特定的单词)映射为密集向量。Embedding层接收整数作为输入,并在内部字典中查找这些整数,然后返回相关联的向量。

Embedding层的输入是一个二维整数张量,其形状为(samples, sequence_length),每个元素是一个整数序列。如输入的二维整数张量为(32, 10),则表示32个长度为10的序列组成的批量。这一批数据中的所有序列的长度相同,这样才能将它们打包成一个张量。

Embedding层返回的是一个形状为(samples, sequence_length,embedding_dimensionality)的三维浮点数张量。然后可以用RNN层或一维卷积层来处理这个三维张量。

将一个Embedding层实例化时,它的权重(即标记向量的内部字典)最开始是随机的,与其它层一样。在训练过程中,利用反向传播来逐渐调节这些词向量,改变空间结构以便下游模型可以利用。一旦训练完成,嵌入空间将会展示大量结构,这种结构专门针对训练模型所要解决的问题。

 

2.在不同于待解决问题的机器学习任务上预计算好词嵌入,然后将其加载到模型中。这些词嵌入叫做预训练词嵌入。

 

 

 

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值