独热向量编码
只有一个1,其余都是0
*问题:*体现不出来两个向量的内在相似性,因两向量的点积为0,得不出词汇与模型之间的关联
*目的:*探索一种直接的方法,可以直接阅读一个单词编码表示的含义,进而看出来单词间的相似性。
所以我们要做的就是构造这些向量,然后做一种类似求解点积的操作,这样就可以让我们了解词汇之间有多少相似性。
分布相似性:通过观察其出现的上下文并对这些上下文做一些处理可以得到大量表示某个词汇含义的值。
*如:*可以找很多包含banking的句子,然后观察每次他出现的场合,统计和banking一起出现过的词,通过某种方式用这些上下文中的词来表示banking的含义,
两个关键字:
分布式
分布式表示:用密集型向量表示词汇
(独热词汇向量是一种存储在某处的本地表示)
Word2vec模型
wt:中心词汇
w-t:除它外所有其他的上下文
低维向量表示:
模型核心是:如何构建一个很简单的可扩展的、快速的训练模型让我们可以处理数十亿单词的文本,并生成非常棒的单词表示
skip-gram算法
概念:在每一个估算步都取一个词作为中心词汇,预测它一定范围内的上下文词汇,即求一个概率分布(给定一个中心词汇,求某个单词在它上下文中出现的概率。对一个词汇,有且仅有一个概率分布,即输出),选取词汇的向量表示以让概率分布值最大化
(目标函数、代价函数、损失函数 都是一个意思)
使用的是交叉熵损失函数
t 和 t+j 是单词在文本中的位置,
v是中心词汇的向量,u是上下文词汇的向量
迭代w:从1到w
softmax:转换成指数形式,求和,求各项概率,归一化,
注:
在这个算法中,和sg模型有关系的仅仅是上下文的单词的id在窗口中的位置,所以上下文词汇都只有一个概率分布和一个表示。即如果只关心单词的意思,就不需要关心单词的位置。
skip gram模型示意图:
优化参数:
思路:调整参数,以便让负的对数似然项最小化,从而使预测的概率最大化。
方法:
Uo是实际输出的上下文词汇,通过计算上下文中可能出现的每一个单词的频率来得到期望,进而得到Ux(期望向量),它是所有可能的上下文向量的平均,以他们出现的似然值来加权,此时求得的是模型的导数。
在半径已知为m(即窗口为2m,c的两端距离分别有m)的情况下,对任意位置,给定中心词汇c的情况下,单词x出现的概率就是出现在窗口中的词汇的概率。
衡量向量相似性的真正常用的方法是余弦函数。即在求分子时取一个点积,然后除以向量的长度,然后得到大小和方差。可以通过让向量变大的方法来作弊。
梯度下降
alpha必须足够小,才可以平缓地朝着最小值方向前进,则梯度下降法才有效。
代码:
随机梯度下降
SGD
只选取文本中的一个位置,则我们就有了一个中心词汇以及它周围的词汇,移动一个位置,对所有的参数求解梯度,然后使用这个位置的梯度估计值,这样就前进了一小步。
非常粗糙的梯度估计。
速度比批处理梯度下降算法快几个数量级。