▾ 第一部分
▾ 关键词:
•自然语言处理(NLP).词向量(Word Vectors).奇异值分解(Singular Value Decomposition). Skip-gram. 词组的持续爆(CBOW),负采样样本(Negative Sampling)
▾ 词向量
• What:要NLP转为ML问题,第一步就是将符号数学化
• Why:词向量编码词组,使它代表在词组的N维空间中的一个点(而点与点之间有距离的远近等关系,可以体现深层一点的信息)。每一个词向量的维度都可能会表征一些意义(物理含义),这些意义我们用“声明speech”来定义。例如,语义维度可以用来表明时态(过去与现在与未来),计数(单数与复数),和性别(男性与女性)
▾ How:编码方式
▾ one-hot vector
• What:假设我们的词库总共有n个词,那我们开一个1*n的高维向量,而每个词都会在某个索引index下取到1,其余位置全部都取值为0
• How:
• Disadvantge:词向量没办法给我们任何形式的词组相似性权衡:【】/ 当然也会造成维数灾难。
• Disadvantge —Reason:你开了一个极高维度的空间,然后每个词语都会占据一个维度,因此没有办法在空间中关联起来。
• Improve:因此我们可能可以把词向量的维度降低一些,在这样一个子空间中,可能原本没有关联的词就关联起来了。
▾ 基于SVD的方法
• What:一种构造词嵌入(词向量)的方法
▾ How:我们首先会遍历所有的文本数据集,然后统计词出现的次数,接着用一个矩阵X来表示所有的次数情况,紧接着对X进行奇异值分解得到一个的分解。然后用U的行(rows)作为所有词表中词的词向量。对于矩阵X,我们有几种选择,咱们一起来比较一下:
▾ X的构建一:词-文档矩阵:
• What:我们猜测:相互关联的词组同时出现在相同的文件中的概率很高。比如:银行、钱等可能出现在一起,而银行,香蕉不会一直出现。
• How:遍历文件,词组i出现在文件J中,将Xij值加一。得到矩阵R|V|×M。需要进行处理和优化。
▾ X的构建二:基于窗口的共现矩阵:
• What:同理,不过换了统计方法。把矩阵X记录的词频变成相关性矩阵。
• How:固定大小的窗口,然后统计每个词出现在窗口中的次数。例子如下:
▾ 然后做奇异值分解:并根据保留百分比保留k个维度https://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
• What:【让机器学会抽取重要的特征】将复杂矩阵用更小更简单的子矩阵的相乘来表示,小矩阵描述的是矩阵的重要特征【用描述人类似】【区别于特征值分解只能针对方阵而言】
• Why:降维。【机器学习领域:feature reduction的PCA。数据(图像)压缩的算法。搜索引擎语义层次检索的LSI(Latent Semantic Indexing)】
• How:奇异值σ跟特征值类似,在矩阵Σ中也是从大到小排列,而且σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:。
在这儿,r越接近于n,也就是:越接近100%。则相乘的结果越接近于A。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵A,我们如果想要压缩空间来表示原矩阵A,我们存下这里的三个矩阵:U、Σ、V就好了
• 这样把字矩阵U作为词嵌入矩阵,对于词表中的每一个词,都用一个k维的向量来表示