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