CTs*_*rth 8 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.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 ;
Run Code Online (Sandbox Code Playgroud)
但是我们如何确定尺寸的数量?是否有方法确定系统应减少的尺寸数量以获得最佳结果?对于LSA的有效性能,我们还考虑了哪些其他参数?
Fra*_*urt 15
关于尺寸数量的选择:
1)http://en.wikipedia.org/wiki/Latent_semantic_indexing:
LSI的另一个挑战是所谓的难以确定用于执行SVD的最佳维数.作为一般规则,较少的维度允许对文本集合中包含的概念进行更广泛的比较,而更多维度允许更具体(或更相关)的概念比较.可以使用的实际维度数受集合中文档数量的限制.研究表明,大约300个维度通常会为中等大小的文档集合(数十万个文档)提供最佳结果,对于较大的文档集合(数百万个文档)可能提供400个维度.然而,最近的研究表明,根据文件集的大小和性质,50-1000维度是合适的.
在计算SVD之后检查数据中的方差量可用于确定要保留的最佳维数.可以通过在碎石图中绘制奇异值(S)来查看数据中包含的方差.一些LSI从业者选择与曲线拐点相关的维度作为要保留的维数的截止点.其他人认为必须保留一定数量的方差,数据的方差量应决定保留的适当维度.百分之七十经常被提及为应该用于选择重新计算SVD的最佳维度的数据中的方差量.
使用SVD的技巧在于确定在近似矩阵时要使用多少维或"概念".太多的维度和重要的模式被遗漏,太多,随机单词选择引起的噪音将会重新进入.SVD算法有点牵扯,但幸运的是Python有一个库函数,使其易于使用.通过在我们的LSA类中添加下面的一行方法,我们可以将矩阵分解为3个其他矩阵.U矩阵给出了我们"概念"空间上每个单词的坐标,Vt矩阵给出了我们"概念"空间中每个文档的坐标,奇异值的S矩阵给出了一个关于多少维度的线索或者我们需要包括的"概念".
def calc(self): self.U, self.S, self.Vt = svd(self.A)为了选择要使用的正确维数,我们可以制作奇异值的平方的直方图.这描绘了每个奇异值对近似我们的矩阵的重要性.这是我们示例中的直方图.

对于大量文档,使用的维度数量在100到500之间.在我们的小例子中,由于我们想要绘制图形,我们将使用3个维度,抛出第一个维度,并绘制第二个和第三个维度.
我们抛弃第一个维度的原因很有趣.对于文档,第一个维度与文档的长度相关.对于单词,它与在所有文档中使用该单词的次数相关.如果我们将矩阵居中,通过从每列中减去平均列值,那么我们将使用第一维.作为类比,考虑高尔夫比分.我们不想知道实际得分,我们希望在从标准杆中减去它之后知道得分.这告诉我们玩家是否制作了小鸟,转向架等.
3)Landauer,TK,Foltz,PW,Laham,D.,(1998),"潜在语义分析导论",话语过程,25,259-284:

| 归档时间: |
|
| 查看次数: |
5009 次 |
| 最近记录: |