1.词向量转换(Transforming word vectors)
1.1 基本原理
概述:先得到源语言和目标语言的词向量,再通过变换矩阵R将源语言的词向量转换成目标语言的词向量,距离转换后词向量最近的词向量即为最可能的翻译结果
1.2 整体流程
利用梯度下降法计算转换矩阵R:
(1)通过弗罗贝尼乌斯范数计算损失值
(2)计算损失值的梯度
(3)用梯度更新R
1.2.1 弗罗贝尼乌斯范数(Frobenus norm)
(1)弗罗贝尼乌斯范数
定义:衡量矩阵的大小;是针对于矩阵的范数,类比于对向量的L2范数
计算公式:
例:即矩阵内各元素平方和再开根号
(2)平方弗罗贝尼乌斯范数(Frobenus norm squared)
定义:即弗罗贝尼乌斯范数的平方
例:
python实现
1.2.2 计算梯度
使用平方弗罗贝尼乌斯范数作为损失函数,其导数计算如下:
2.K-近邻算法(K-nearest neighbors)
2.1 基本概念
功能:在翻译时,使用变换矩阵R对源词向量X进行变换,但变换后的词向量XR并不能完全对应目标语言的词向量,因此需要算法搜索最相近的词向量选为最终结果
例:"hello"经过R矩阵变换后,得到目标词向量XR,需要选择距离目标词向量最近的词向量作为结果,即从"salut"和"bonjour"中选择距离最近的
常用方法:
局部敏感哈希:基于哈希表的方法,通过一种精巧的哈希函数,使得相邻元素能被最大概率分到同一桶中,在同一桶中进行搜索,以减少搜索空间
KD树:基于分层划分与二叉树的方法,通过使用一种特殊的数据结构,来减少搜索空间,从而加快搜索速度
2.2 近似最近邻搜索(Approximate nearest neighbors,ANN)
定义:一类通过牺牲一定准确度来换取更快的搜索速度的方法,能够在较短时间内找出任何查询点的最近点
原因:搜索整个空间十分缓慢,而通过ANN方法,能够在确保一定准确度的情况下,极大加快搜索速度
功能:更高效计算K近邻问题
原理:将空间用多组随机平面划分,如果两个点相距很近,则其有很大概率被划分在同一子空间,因此不用搜索全部空间,而是在每个子空间内进行搜索
实现:
2.3 局部敏感哈希(Locality sensitive hashing)
定义:一种ANN方法,通过一种精妙的哈希函数,将高维空间中的相近点映射到同一桶中,而后在相同桶中进行搜索已减少搜索空间
2.3.1 哈希函数与哈希表
定义:将向量映射为一个哈希值,加快计算速度
原理:高维空间中相邻的数据经过哈希函数映射到低维空间后,落入同一桶的概率很大,而不相邻的数据映射到同一桶的概率很小
例子:
实现:
2.3.2 具体方法
(1)超平面划分
定义:通过划分超平面,将原数据空间分割为多个子空间
方法:对于每个向量v,在超平面上与法线向量进行点乘运算,点乘结果的符号,说明其所在的方向
例:点乘结果为正,表明两向量同向;结果为负,表明两向量反向
实现:
(2)哈希值计算
公式:
例:通过点乘结果的符号来计算哈希值,为正h=1,为负h=0
实现:
3.应用
3.1 机器翻译
概述:通过词向量变换与k近邻搜索,将源语言词向量转换为目标语言词向量,再使用k近邻算法找出最接近的一项,即为翻译结果
3.2 文档搜索
文档表示:一个文档可由其包含单词的词向量的和来表示;通过搜索与源文档词向量最近的目标文档词向量,即可找到与其含义最相似的文档
实现:
课后作业代码:https://github.com/Ogmx/Natural-Language-Processing-Specialization
可将代码与数据下载至本地,使用jupyter notebook打开