2015-07-12 86 views
0

當前我正在研究數據挖掘,文本比較,並發現了這一個:https://en.wikipedia.org/wiki/Cosine_similarity大數據集上的餘弦相似

由於我已經成功實現了這個算法來比較兩個字符串,我決定嘗試一些更復雜的任務來實現。 我重複了我的數據庫,其中包含大約250k文檔,並將DB中的一個隨機文檔與該數據庫中的整個文檔進行比較。

比較所有這些項目的時間:316.35898590088秒,即 - > 5分鐘比較所有250k文件!

由於這個結果出現了許多問題,我不想問一些建議。爲了清楚起見,我將首先描述一些可能有用的細節。

  • 由於編程語言選擇PHP。
  • 文檔存儲在MySQL中。
  • 餘弦相似度函數的實現只包含這個函數,沒有停止詞和任何其他花哨的東西。

問題

  • 有什麼辦法來實現一些更好的性能?我應該從哪裏開始,通過調整算法(即預先準備向量等),通過使用其他技術等?
  • 如何以及在哪裏我應該存儲這些比較結果。例如,我想打印一些圖表,我可以通過相似性分數查看所有這些250k文檔,以便我可以識別哪些圖形最相似,等等。

回答

1

PHP和MySQL都是你可能做出的最糟糕的選擇。

高效的餘弦相似性是Lucene的核心。關鍵的加速技術是合成倒排索引。但你真的不想在PHP中重新實現它們...