
特征工程与句法相似性
|
147
另一种我们经常会遇到的计算相似性的方法是,计算两个文档向量的点积(
Dot
Product
,又称数量积)。点积的计算是对两个向量的相应元素求积,然后再对所有
积求和。可见,只有当两个元素都为
1
时,积才为
1
,因此我们可以快速计算向量
中同一位置上均为
1
的元素个数。下面,我们来试试看:
np.dot(onehot[0], onehot[1])
输出结果:
4
5.3.4
相似性矩阵
如果想找出所有文档彼此之间的相似性,那么有一种非常强大的快捷方式,只需一
个命令即可计算出所有的数字。我们可以根据上一节概括出一个公式,我们发现文
档
i
与文档
j
的相似性可以表示如下:
S
ij
= d
i
·d
j
使用上述文档词条矩阵,我们就可以求出点积之和:
S
ij
= ∑
k
D
ik
D
jk
= ∑
k
D
ik
D
= D·D
上述公式是文档词条矩阵与其转置矩阵的乘积。在
Python
中,这种计算非常简单(为
了方便检查相似性,结果中输出了句子本身):
注
3
np.dot(onehot, np.transpose(onehot))
输出结果:
array([[6, 4, 3, 3], # It was the best of times
[4, 6, 4, 4], # it was the worst of times
注 3: 容易令人不解的是,
numpy.dot
既可用于点积(内积),也可用于矩阵乘法。如果
Numpy 检测到两个相同维度的行向量或列向量(即一维数组),它就会计算点积并
产生一个标量。否则 ...