Word2vec学习笔记(一)
文章目录
word2vec 简介
-
word2vec 在2013年被Google开源的一种词向量计算的工具(框架). 可在百万级别的词典和亿级别的数据集上进行高效训练.
-
该工具最终的输出结果—词向量,能够度量词的语义问题和词词之间相似关系.
-
word2vec是一个开源工具,本身不是一个算法或模型。但描述word2vec算法或模型时,实指背后用于计算词向量的模型
-
word embedding与word2vec关系: 前者是把词装换成实数向量一系列技术的统称,具有语言模型和特征学习的特点. 后者是前者的一个具体工具实现.
常见的word embedding方法
- 基于bool表示法
- 基于词频表示法
- 基于TFIDF表示法:计算每个词的重要程度从而成表示词向量,可用于提取文章的关键词.
- word2vec 词向量表示法:每个单词最后都有一个固定的表示, 而与该词出现的位置无关.
- Bert 词向量表示法(名字不一定准确):单词的表示受上下文动态的影响.
- 其它 。。。。
模型
模型特例(bigram)
使用特殊情况的模型示例:1 vs n vs 1,即input层:一个词,1个hidden层, 有N个神经元节点,output层:1个词。
该特例的结构简单,计算方便,更为重要的是,可通过该特例可左扩展到CBow模型,右扩展到Skip-Gram模型. 模型如下:
符号说明
V | 语料库的大小 |
---|---|
N | 隐藏层的神经元个数 |
W | 词向量矩阵(input→output层),权重矩阵,维度(V, N) |
W’ | 上下文权重矩阵(hidden层→output层),词向量矩阵,维度(N, V),vj‘ 表示该矩阵的第j行向量 |
X | input层的输入数据,经过one-hot编码的列向量, (1,V),Xi 表示第i个分量 |
小写w | word 词, wj表示第j个分量 |
uj | 在已知词向量的输入, 预测输出(列)向量(V, 1)中的是第j个词的分数 (经softmax作用之后称概率值) |
yj | 表示softmax作用后,概率分布中是第j个词的概率值。预测结果 |
ti | 第i个词的one-hot向量,实际标签 |
η | 学习率(步长) |
计算过程说明
损失函数及链式法则关系
用梯度下降(GD)推导权重更新方程
说明:
-
当yi > ti=0 时(高估),在更新过程中,上下文的输入向量与单词的输出向量的差值越来越大
-
当yi < ti=1 时(低估),同理,越来越小
-
当yi ≈ ti 时(微偏),同理,越来越接近
CBow模型(多词向下文输入)
全称continuous bag of words(连续词袋模型),CBow网络结构图在直观上在特例模型的基础上进行了左扩展,即在输入层面上: 多词输入.
特点:
-
C个ont-hot向量同时作为input,输出一个概率分布,输入维度**(C, V, 1)**,其中C为滑动窗口大小,每个词维度均是(V, 1)
-
隐藏的输出是由多个词向量经过求和取平均后的结果,即h = (x1W + x2W+…+xc*W)/C
Skip-Gram
在特例模型的基础上进行右扩展,即在输出层面上: 多词输出
特点:
- output是C个多项式,即C个概率分布,也就是C个词都有一个对应的概率分布,维度是(C, V, 1)
计算过程说明:
input→hidden:同特例模型的该阶段
hidden→output:
模型总结
模型 | 计算量 |
---|---|
cbow | 训练次数=词典大小V |
skip-gram | 训练次数=词典大小V * 窗口大小C |
说明
目前为止,特例模型(特殊的“bigram”)、cbow、skip-gram均是在未采用任何优化配置下的原始结构.,在计算时造成维度灾难,计算代价太大,故有层次softmax和负采样两种优化方式(见下文)。
模型优化
层次softmax(hierarchical softmax)
结构图
结构特点
- 本质上一棵带权路径最短的二叉树—霍夫曼树
- 词作为叶子结点,即有V个叶子,V-1个非叶节点
- 根节点到某一叶节点(某一词)的路径是唯一的,路径长度L=路径中节点的个数(叶节点+非叶节点)
- 每一个非叶节点均对应着一个上下文词向量
若要预测w0的概率,计算说明如下
示例:预测结果是w2的计算结果如下:
负采样(Negative Sampling)
比层次softmax更易懂,只更新采到的样本权重(W和W’),避免每次迭代都要更新多个输出词的词向量
采样公式
指数的默认值为0.75,属于超参数。
注意事项
- 只考虑语料库中单词在句子中词频, 则会导致负样本中的功能词如the、of、and、a…等词频过高(基于词频表示法),故采用概率的方式采样
- 只考虑词汇表(句子)中的词频,新词(总词数变大)会影响已有的词的概率,这种采样没有意义.
总结
-
层次softmax:①将N分类的sigmoid改成二分类sigmoid,计算量由V变成logV
②更新目标:上下文权重向量W’改成tree的非叶节点词向量,W依旧要更新
③适用于低频,避免生僻词远离根节点,致使计算代价过大
-
负采样:每次迭代只更新部分权重W’和W(部分样本更新部分权重),适用于高频、低维度的词向量