第六课 从词向量到NLP分类问题

1 nlp的常见任务

分词
词性标注
自动摘要
指代消解
机器翻译
主题识别
文本分类

2 词向量表示

文本不同于图片与视频。图片与视频天然是以二进制形式表示的,计算机能够处理。
文本是人造的,只有人可以懂,怎么让计算机读懂,需要使用词向量

表示方式要能够解决:
1 需要保证词的相似性
例如 frog toad rana 相似

2 向量空间分布的相似性
英语中的1 2 3 4 要和西班牙语的 1 2 3 4 分布相似

3 向量空间子结构
向量是可以用于运算的

2.1 离散表示

1 one-hot
2 bag of words
文档的向量可以直接将各词的词向量表示加和。
在这里插入图片描述

3 tf-idf
4 bi-gram和n-gram

离散表示的问题:
1 没有办法衡量词向量之间的关系
2 词表维度随着语料库膨胀
3 n-gram 随着语料库膨胀更快
4 数据稀疏问题

2.2 分布式表示

用一个词附近的词表示这个词。
局域窗中的word-word共现矩阵可以挖掘语法和语义信息。
例如:
I like deep learning.
I like NLP.
I enjoy flying.
如果窗口为1(一般在5-10之间),那么可以得到这样的矩阵。
在这里插入图片描述

这是一个对角阵。
I和like 出现2次
I和enjoy出现1次…

存在的问题:

•向量维数随着词典大小线性增长
• 存储整个词典的空间消耗非常大
• 一些模型如文本分类模型会面临稀疏性问题
• 模型会欠稳定

SVD降维

2.3 NNLM(2013年)

NNLM=Neural Network Language Model
以下内容转载自CSDN博主「马飞飞」的原创文章

NNLM是从语言模型出发(即计算概率角度),构建神经网络针对目标函数对模型进行最优化,训练的起点是使用神经网络去搭建语言模型实现词的预测任务,并且在优化过程后模型的副产品就是词向量。

进行神经网络模型的训练时,目标是进行词的概率预测,就是在词环境下,预测下一个该是什么词,目标函数如下式, 通过对网络训练一定程度后,最后的模型参数就可当成词向量使用.
在这里插入图片描述

2.3.1模型

NNLM的网络结构(四层神经网络)如右图,主要参数有:

  [1]词库大小(假定有8W个词)            

  [2]转化的词向量大小(假定为300维长度)            

  [3]输入层神经元数(即词的滑动窗口容量,假定滑窗大小为4)            

  [4]隐层神经元数量(假定为100个)            

  [5]输出层神经元数(对应词容量,有8W个)

  [6]由输入层到投影层的矩阵C(一个大的矩阵,大小为8W*300,是最后求解的目的,开始时随机初始化)          

  [7]从投影层到隐层的权值矩阵H和偏置矩阵B          

  [8]从隐层到输出层的权值矩阵U和偏置矩阵D

在这里插入图片描述
现在咱们针对NNLM模型,由下往上进行分析:

1 每次从语料库中滑动4个数据,将其中前三个词转为one-hot编码形式,将三个one-hot形式作为输入喂入网络。

2 从输入到映射层所做的事情是(one-hot向量 * 矩阵C),这里词的one-hot编码会根据为1的位置去对应C矩阵,去抽出对应位置的300维的词向量,将此向量作为投影层的输出。

在这里插入图片描述

3 上一步投射层会将词的one-hot表示表示成300维的稠密向量,从投影层到隐层是一种全连接的连接方式,参数的数量是3*100个,每个隐层神经元有3条线相连接,最后使用tan函数结合H与B获取激活输出。

4 从隐层到输出层也是一直全连接的形式,连接线数量为100*8W,使用softmax函数结合U与D获取最后的概率输出。

5 计算交叉熵损失函数值,以梯度下降方式进行反向传播,在反向传播过程中对参数矩阵C、H、B、U、D进行更新。(C、H、B、U、D分别指什么?)

通过不断的喂入批次数据,对网络进行反向传播调参,最后训练出一个进行词预测任务的模型,并将训练好模型中的C矩阵里的每一列都作为,对应于one-hot编码中位置为1词的词向量(大小为1*300),这个词向量就是我们要转化的结果。

2.3.2特点

优点:使用NNLM模型生成的词向量是可以自定义维度的,维度并不会因为新扩展词而发生改变,而且这里生成的词向量能够很好的根据特征距离度量词与词之间的相似性。例如上面就固定是300维。
缺点:计算复杂度过大,参数较多(word2vec是一种改进)。
在这里插入图片描述

每个训练样本的计算复杂度:NxD+NxDxH+HxV
这一段的描述还可以参考知乎讲得更详细。

2.4 Word2Vector:CBOW连续词袋

NNLM太复杂了。

2.4.1 样本处理

一个滑窗长度n=5。在滑窗范围内以中间词为预测对象,左右词作为上下文。
例如:我|爱|吃|海底捞|火锅。以我,爱,海底捞,火锅这4个词作为上下文,预测中间的词应该是吃。

2.4.2 结构

输入是4个 Vx1的向量,上一步中的矩阵C是DxV维度,每一个Cx向量=一个Dx1的向量。将这4个向量相加,作为输入送入softmax,预估中心词。
与NNLM的区别就是去掉了隐藏。
在这里插入图片描述

2.4.3 CBOW:层次softmax

上面W矩阵(也就是从SUM到输出层)需要DxV维度。V有点大。

Huffman tree 可以根据词频对词典中的词做编码。编码之后频率高的词编码长度短。这棵树的深度为 l o g 2 V log_2V log2V

那么输出层是一个若干次的二分类。

计算:对数似然

2.4.4 CBOW:负例采样

正确的词:吃
负利:不是吃的词,可以取300个左右。取哪些词?

词典中的每个词对应线段的每一小段。
线段长度= c o u n t e r ( w ) ∑ u ∈ D c o u n t e r ( u ) \dfrac{counter(w)}{\sum_{u \in D} counter(u)} uDcounter(u)counter(w)

将[0,1]划分为M= 1 0 8 10^8 108等分,每次随机生成[1,M]的一个数,看落在哪个词对应的部分上。所以出现频次高的词更可能被选择。

2.4.5 Word2Vec:skip-gram模型

用中心词预测周边词

2.4.6 word2vec存在的问题

1 对每个local context window 单独训练,没有用包含在gobal co-currence矩阵中的信息。
2 一词多义不能表示,每个词有唯一的向量。

2.4.6 word2vec优点

在这里插入图片描述
在这里插入图片描述

word2vec可以保证词的相似性
能够发现woman-man结果和queue-king相似

工具库 google word2vec,这是c++版本的。
工具gensim里面集成了word2vec,fast-text等工具。详见链接
使用word2vec+CNN做文本分类。 详见链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值