下面针对《Spark高级数据分析》中的第六章的实验
进行原理上的分析
先来个矩阵
Mm⋅n
|
word1 |
word2 |
word3 |
doc1 |
|
|
|
doc2 |
|
|
|
doc3 |
|
|
|
doc4 |
|
|
|
doc5 |
|
|
|
Mm⋅n≈Um⋅kSk⋅k(VT)k⋅n
P118有一句十分关键的话:
线性代数运算告诉我们重构矩阵中的两个列的余弦相似度
正好等于
SVT的相应列的余弦相似度
这里的重构矩阵的意思就是
Mm⋅n近似后的结果(就是上面等式的右侧)。
|
表达式 |
对应书本 |
特定词语-每个词语相关度 |
Vn⋅kSk⋅k(VT)k⋅1 |
6.9节 |
特定文档-每个文档相关度 |
Um⋅kSk⋅kU1⋅k |
6.10节 |
特定词语-每个文档相关度 |
Um⋅kSvt=Um⋅kSk⋅k(VT)k⋅1 |
6.11节 |
特定文档-每个词语相关度 |
udTSV=U1⋅kSk⋅k(VT)k⋅n |
6.11节 |
多词项查询 |
Um⋅kSk⋅k⋅多词项构成的向量 |
6.12节 |
(VT)k⋅1:表示从
Vk⋅n中抽取一列,即特定词语
U1⋅k:表示从
Um⋅k中抽取一行,即特定文档
其中多词项查询相当于:
查询的多个关键词做成词向量,
最后计算该词向量和每个文档的相关度
也就是在模仿前面的“特定词语-每个文档相关度”,
计算的时候把特定词语对应的V中的向量替换成“多个关键词”构成的向量。