Java 如何确定潜在语义分析的维度数?
我最近一直在做潜在语义分析。我使用Jama包在java中实现了它 代码如下:Java 如何确定潜在语义分析的维度数?,java,theory,svd,lsa,latent-semantic-indexing,Java,Theory,Svd,Lsa,Latent Semantic Indexing,我最近一直在做潜在语义分析。我使用Jama包在java中实现了它 代码如下: Matrix vtranspose ; a = new Matrix(termdoc); termdoc = a.getArray(); a = a.transpose() ; SingularValueDecomposition sv =new SingularValueDecomposition(a) ; u = sv.getU(); v = sv
Matrix vtranspose ;
a = new Matrix(termdoc);
termdoc = a.getArray();
a = a.transpose() ;
SingularValueDecomposition sv =new SingularValueDecomposition(a) ;
u = sv.getU();
v = sv.getV();
s = sv.getS();
vtranspose = v.transpose() ; // we obtain this as a result of svd
uarray = u.getArray();
sarray = s.getArray();
varray = vtranspose.getArray();
if(semantics.maketerms.nodoc>50)
{
sarray_mod = new double[50][50];
uarray_mod = new double[uarray.length][50];
varray_mod = new double[50][varray.length];
move(sarray,50,50,sarray_mod);
move(uarray,uarray.length,50,uarray_mod);
move(varray,50,varray.length,varray_mod);
e = new Matrix(uarray_mod);
f = new Matrix(sarray_mod);
g = new Matrix(varray_mod);
Matrix temp =e.times(f);
result = temp.times(g);
}
else
{
Matrix temp = u.times(s);
result = temp.times(vtranspose);
}
result = result.transpose();
results = result.getArray() ;
return results ;
但是我们如何确定维度的数量呢?是否有一种方法来确定系统应减少到哪些维度以获得最佳结果?对于LSA的有效性能,我们考虑什么其他参数? 关于尺寸数量的选择: 1) : LSI面临的另一个挑战是据称在 确定用于执行以下操作的最佳尺寸数: SVD。一般来说,维度越少,比较范围就越广 包含在文本集合中的概念,而 尺寸的数量可实现更具体(或更相关) 概念比较。可以使用的实际尺寸数 使用受集合中文档数量的限制。研究 已经证明,大约300个尺寸通常会提供 使用中等大小的文档集(数百个)获得最佳效果 数千个文档),更大的文档可能有400个维度 收藏(数百万份文件)。然而,最近的研究表明 根据尺寸和性质,50-1000个尺寸是合适的 文档集合的一部分 计算SVD后检查数据中的方差量 可用于确定要保留的最佳尺寸数。 数据中包含的差异可以通过绘制 屏幕图中的奇异值。一些LSI从业者选择 与作为分界点的曲线拐点相关联的维度 要保留的标注数的点。其他人则认为 必须保留差异的数量,以及差异的金额 在数据中,应指定要保留的适当维度。 百分之七十经常被称为是项目中的差异量 用于选择最佳维度的数据 重新计算SVD
2) : 使用SVD的诀窍在于计算出有多少个维度或维度 近似矩阵时使用的“概念”。维度太少 而重要的图案被遗漏了,太多和噪音造成的 随机选择的单词会重新出现。 SVD算法有点复杂,但幸运的是Python有一个 使其易于使用的库函数。通过添加一行 对于我们的LSA类,我们可以将我们的矩阵分解为3个因子 矩阵。U矩阵为我们提供了每个单词的坐标 “概念”空间中,Vt矩阵为我们提供了每个 文档在我们的“概念”空间中,以及奇异值的S矩阵中 给我们一个线索,关于我们需要多少维度或“概念” 包括
def calc(self):self.U、self.S、self.Vt=svd(self.A)
为了
选择合适的维数,我们可以制作直方图
奇异值的平方。这张图表显示了每种方法的重要性
奇异值有助于近似我们的矩阵。这是你的电话号码
我们的例子中的直方图
对于大型文档集合,使用的维度数为
在100到500之间。在我们的小示例中,因为我们要绘制
它,我们将使用3维,去掉第一维,然后用图表
第二和第三维度
我们抛弃第一维度的原因很有趣。对于
文档中,第一个维度与文档的长度相关
文件。对于单词,它与该单词的次数相关
已在所有文档中使用。如果我们把矩阵放在中心
从每列中减去平均列值,我们将
使用第一个维度。作为一个类比,考虑高尔夫得分。我们没有
想知道实际的分数,我们想知道之后的分数
从平价中减去它。这告诉我们球员是否犯了错误
小鸟、转向架等
3) 兰道尔,T.K.,福尔茨,P.W.,拉厄姆,D.,1998,“潜在语义导论” 《分析》,话语过程,25259-284:
有人删除了维基百科页面的最后一段。为什么?那是2019年6月,一个用户已经不存在了。他的评论是“删除了有关在LSI中寻找最佳维度的错误信息”。我不确定引用70%数字的任何参考文献是否正确(它们似乎是PCA)。我看到在R中的lsa包中默认使用了50%。