相似度分析任务:
实验室实习期间,要做一个基于相似度的句子无监督聚类。所有句子一共有130w个,从一开始读数据就遇到了一些问题,以此记录整个流程。
一开始很无知的创建了一个130万*130万的矩阵,结果我的小电脑就直接终止了这个进程,还好不是在实验室的gpu上跑的,于是需要考虑如何有效的构建这样的矩阵。
在学长的建议下,先进行小规模测试,即选出和3000个以上句子都有相似度的句子,这样经过过滤整个句子就从130w变成了仅有4000多个句子,减少了很大的计算量,可以在自己的小电脑上跑一下验证,再在实验室的gpu上跑结果,也算是学到了。
由于矩阵形式是两个句子之间的jaccard相似度即,例 第一个句子与第1000个句子相似度为0.5,与第二个句子相似度为0.3等等。
首先这些不是一个距离度量,因此直接基于距离kmeans算法并不能直接使用,如果要使用kmeas算法必须得把这个矩阵转换成一个距离的问题。
基于相似度矩阵的话,可以利用谱聚类进行聚类分析,谱聚类原本是一种基于图结构的聚类方法,其在图中的使用相当于一个切分子图的方法,在子图中其相当于两个图之间的边的权重值,在这里就对应了两个事件之间的相似度。
简介写一下相关原理:
首先考虑这是一个无向图,即1和2与2和1之间的相似度是相同的。
定义一个nxn矩阵
以这个作为一个3x3矩阵的例子,其中的d是与其它节点相似度的合,没有相似度的为0,有的则为对应的值。
而任意两个点之间的权值又可以构成我们的邻