2012-03-06 114 views
6

最近我一直在進行潛在語義分析。我通過使用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 ; 

但是怎樣確定的維數?有沒有一種方法可以確定系統應該減少的維數以獲得最佳結果?我們考慮哪些其他參數來提高LSA的有效性能?

回答

12

關於維數的選擇:

1)http://en.wikipedia.org/wiki/Latent_semantic_indexing

到LSI的另一個挑戰是所稱難以 確定尺寸的最佳數目以使用用於執行 SVD。作爲一般規則,更少的維度允許文本集合中包含的概念的更廣泛的比較 ,而更高維度允許更具體(或更相關)比較概念。可以使用的實際維度數量 受到集合中文檔數量的限制。研究 已經證明,對於較大的文檔 集合(數百萬個文檔),大約300個維度通常會提供中等尺寸文檔集合(數百個 數千個文檔)的最佳結果以及可能的400個維度。然而,最近的研究指出 根據文檔集合的大小和性質012-,50-1000維是合適的。

在計算SVD 後,檢查數據中的方差量可用於確定要保留的最佳維數。 數據中包含的方差可以通過在scree plot中繪製奇異值(S)來查看。一些LSI從業者選擇與曲線拐點相關的維數,作爲要保留的維數的截止點 。其他人則認爲必須保留一些方差數量,並且數據中的方差數量應該規定要保留的正確維度。 經常提到百分之七十爲 數據中的差異數量,該數據應該用於選擇重新計算SVD的最佳維數 。



2)http://www.puffinwarellc.com/index.php/news-and-articles/articles/33-latent-semantic-analysis-tutorial.html?showall=1

在使用SVD訣竅是在找出許多維度或 「概念」 如何逼近矩陣時使用。太多的維數 和重要的模式被遺漏了,太多的噪音以及由 造成的噪音會隨之迴歸。 SVD算法有一點涉及,但幸運的是Python有一個 庫函數,使它易於使用。通過將以下一行 方法添加到我們的LSA類中,我們可以將我們的矩陣分解爲另外三個 矩陣。U矩陣給出了我們的 「概念」空間上每個單詞的座標,Vt矩陣給出了我們在「概念」空間中每個文檔的座標,奇異值的S矩陣給我們提供了線索包含多少個維度或「概念」,我們需要包含哪些維度或「概念」。

def calc(self): self.U, self.S, self.Vt = svd(self.A)

爲了 選擇尺寸合適的使用數量,我們可以使奇異值的平方的直方圖 。這個圖表顯示了每個奇異值有助於近似我們的矩陣。這裏是我們例子中的 直方圖。

enter image description here

有關文檔大集合,所用的維數是在100至500範圍 。在我們的小例子中,因爲我們想要繪製 它,我們將使用3個維度,丟棄第一個維度,並且圖表 第二個維度和第三個維度。

我們拋出第一個維度的原因很有趣。對於 文檔,第一維與 文檔的長度相關。就單詞而言,它與所有文檔中已使用單詞 的次數相關。如果我們將矩陣置於中心位置,則從 減去每列中的平均列值,那麼我們將使用第一維度 。作爲比喻,考慮高爾夫比分。我們不想 想知道實際得分,我們想知道 從比分中減去它後的得分。這告訴我們玩家是否做出了 小鳥,轉向架等部件



3)蘭道爾,TK,福爾茲,PW,Laham,D.(1998)「,介紹潛在語義分析 ',Discourse Processes,25,259-284:

enter image description here