NLP学习2-词向量和词义

2020-06-27  本文已影响0人  efffffff

探索词义和词向量

B站视频地址 https://www.bilibili.com/video/BV1s4411N7fC?p=2

词向量表示

复习下上一篇文章中的词向量https://www.jianshu.com/p/a0755b865dd9

词向量是每个单词对应的稠密向量表示,是从稀疏的表示之中转换而来。
每个词向量的表示都包含两部分uv

优化算法

使用优化算法最小化前一篇文章提到的损失函数。

梯度下降

使用\alpha来表示下降速度
\theta^{new} = \theta^{old} - \alpha\nabla_{\theta}J(\theta)

随机梯度下降

因为梯度下降里\nabla_{\theta}J(\theta)是使用了全部数据集的计算结果,但数据集非常庞大时,使用全部数据集就很耗时,所以将大的数据集分为一个个bitch,来进行训练,可以加快训练的速度。
这种方式叫做随机梯度下降SGD

词向量和随机梯度下降

因为在训练词向量时,使用的输入是稀疏矩阵。所以在运算时会包含很多的0,。这个时候如果像正常的稠密矩阵进行梯度更新的话,会存在很多的无效更新。所以在词向量的训练上,可以在更新梯度时只更新输入非0的维度,减少同一时间的运算数量,减少内存使用加快更新速度。

两个主要算法

Skip-grams(SG)算法

给定中心词去预测outside词

Continuous Bag of Words(CBOW)

给定context词,预测中心词

HW2-负采样(Negative Sampling)

由于使用了softmax进行计算概率,但是如果词空间较大时,计算成本较高。
所以使用一种二元回归模型,将中心词和上下文词给一个比较高的权重,其他的噪音词汇给较低的权重。然后去最大化目标
J(\theta) = \frac{1}{T} \sum_{t=1}^TJ_t(\theta)

使用sigmod去使用单个的概率替换softmax,比softmax的计算量要小。对于中心词和上下文词,最大化
J(\theta) = \log \sigma(u_o^Tv_c) + \sum_{i=1}^k\mathbb{E}_{j\sim P(w)}[\log \sigma(-u_j^Tv_c)]
对于随机采样的噪音词汇,最小化。
J_{neg-sample}(o, v_c, U) = -\log \sigma(u_o^Tv_c) -\sum_{i=1}^k\log \sigma(-u_j^Tv_c)

通过对采样算法的控制,可以提高低频词汇被采样的概率,提高对低频词汇的训练性能。

基于窗口的计数统计

特点

  1. 随词空间大小而增长
  2. 维度非常高
  3. 里面的大部分空间是稀疏的
  4. 健壮性和输入的词空间大小有关

降维

SVD,奇异值分解

变种

COALS 模型

  1. 加权采样
  2. 设置频率上限
  3. 使用相关性代替计数

计数统计和概率预测的对比

计数 预测
代表模型 LSA, HAL / COALS, Hellinger-PCA Skip-gram/CBOW, NHLM, HLBL, RNN
训练速度快 依赖语料库大小
统计学的有效应用 在统计学上不具备有效性
擅于捕捉词的相似性 在其他任务上也可以改进生成性能
计数的大小和重要性不成比例 可以捕捉词的复杂相似性

使用共现频率来作为概率的权重和目标

GloVe,假设X是共现矩阵,则可以根据共现矩阵的定义,如果词向量的值符合预期的话,那么,通过词向量出的共现概率应该接近于共现矩阵。
w_i * w_j = \log P(i|j)
J=\sum_{i,j=1}^Vf(X_{ij})(w_i^T\tilde{w_j} + b_i + \tilde{b_j}-\log X_{ij})
函数f(X_{ij})是一个类似于min(max(0, x), 1),存在上下限,避免高频词汇的扰动。

如何评估词向量

内在评估

  1. 评估一个特定中间的子任务
  2. 计算速度
  3. 帮助理解系统
  4. 在真实统计简历前,无法确定是否真的有效

外在评估

  1. 评估真实任务
  2. 可以花大量事件计算准确率
  3. 使用一个更好的子系统替换,就会提高性能
上一篇 下一篇

猜你喜欢

热点阅读