AI | 向量化 - [什么是向量化]
性质
向量化是一种机器学习的语言,也就是说,它是用数据与算法喂出来的,而不是人为规定的
向量模型是纯反复计算调整出来的,而不是人为制定的
向量模型的训练思路
下面是原始的 Word2Vec 的训练大体思路,不意味着现在流行的模型就是这么训练出来的
但核心思想上应该差不多,可以辅助理解向量模型到底是啥
-
准备
- 准备大量语料,语料就是大量的自然文本
- 统计常用词
- 初始化词表
- 词表是一个固定大小的矩阵
- 如果词表是 10w,维度 300,那么这个矩阵就是 10w*300 的
- 训练后就可以得到一个 10w 词,每词 300 维度的向量模型
- 对它的初始化,其实就是给所有词表所有维度一个 [-1 , +1] 的浮点值
-
训练单元的选择
- 切分语料,并用一个固定大学的窗口滑动选取
- 假设这个窗口是 5,则取到的词可以分为中间的 <中间词> 以及两侧的各两个 <上下文词>
-
预测训练的模式,下面两种模式 二选一
- CBOW:按 <上下文词> 预测 <中间词>
- Skip-gram:按 <中间词> 预测 <上下文词>
-
预测原理
- 所谓预测,基本可以按照完形填空理解
- 假设训练单元选中了 【老周/刚刚/骂/小邹/了】
- CBOW 下,会扣掉 <中间词> 【骂】,然后把剩下的部分给模型,让它预测中间是什么
- 模型会把两侧的 <上下文词> 进行向量计算,得到一个新向量
- 用这个向量去向量模型里匹配,匹配结果是一个 10w 维的向量,相当于对于整个矩阵里所有词的打分
-
反向调参/维度修正
- 误差计算:即上面那个误差向量(10w 维的)
- 梯度计算:用误差向量计算梯度向量,梯度向量是 300 维的
这里原理没看懂,大量矩阵运算,先这么理解
- 小幅更新:用这个梯度向量对窗口内所有词进行修正,梯度向量会 * 一个小系数(学习率)
比如误差向量的第一个维度是 0.5,学习率是 0.2
则实际调整值为 0.1,实际计算时第一维度会 -0.1,这里的 - 就是梯度下降里的下降
小幅调整的目的是防止一次更新太大,因为每次对每个向量的更新都可能影响整个向量矩阵- 剩下的部分由后面的轮次调整,和下面的多轮收敛其实是一回事
-
多轮收敛
- 按上面的流程多轮训练模型
- 最终结果,其语义接近、词性一致,可以互相替换的词的向量会趋于一致
- 最终训练好的成品就是上面说的矩阵
一些辅助理解的说明
- 假设你的向量模型是 300 维度的,那么无论是你还是模型本身,都无法解释这 300 维分别表示什么
- 你用同样的算法,同样的语料,同样的维度,最终训练完的向量模型很可能是不通用的,也就是说模型 1 里是 "猫" 的向量在另一个里面可能是 "车"
- 在向量模型里匹配向量,用的是余弦相似度的计算
- 它用来描述一个 300 维空间里,一个 300维 向量的位置,并可以描述两个向量的距离
- 为什么是余弦
- 因为余弦在 [0,π] 区间里的值,正好是 [1,-1],而正弦是 0->1->0,计算不友好
- 0° = 1,可以表示一致;90° = 0,可以表示无关;180° = -1,可以表示相反
- 向量预测的核心完全可以等效的视为基于 <完形填空+打分+修正> 的过程
- 当然实际上它更复杂,但也是复杂规则的完形填空 + 复杂的打分 + 复杂的修正
浙公网安备 33010602011771号