2017-08-13 116 views
0

我想重複使用名稱相似度的公司(40M +)的巨大列表。我有一個500K的公司名稱對被標記爲相同/不相同(如I.B.M. =國際商用機器)。通過對名稱對的向量差異進行邏輯迴歸建立的模型具有很好的f-分數(0.98),但推論(找到最相似的名字)太慢(每名稱差不多2秒)。培訓doc2vec公司名稱相似度

是否可以使用名稱相似性對(正值和負值)來訓練doc2vec模型,從而導致類似名稱具有相似的向量,以便我可以使用像Annoy這樣的快速向量相似度算法?

回答

2

在高維空間中搜索前N個最近鄰居是困難的。要獲得完美精確的top-N,通常需要進行徹底搜索,這可能是您令人失望的性能原因。

當可以應用某些索引時,與ANNOY庫一樣,需要一些額外的索引時間和索引存儲,並且會犧牲準確性,因爲可能會錯過某些真正的前N鄰居。

你還沒有提到你的現有載體是如何創建的。您不需要採用新的矢量創建方法(如doc2vec)來使用索引;您可以將索引庫應用於現有的矢量。

如果你現有的向量是稀疏的(例如,如果他們是大包字符n克表示,有許多維度但最多爲0.0),你可能想看看Facebook的PySparNN庫。

如果它們很密集,除了你提到的ANNOY之外,可以考慮Facebook FAISS

而且,即使是窮舉的搜索鄰居也是高度可並行化的:在M個不同的系統上將數據分割成M個分片,並且每個分支上的最高N往往接近同一時間的1/N在整個索引上進行操作,然後合併M個前N個列表相對較快。因此,如果發現最相似的是你的關鍵瓶頸,並且你需要100毫秒內最相似的N,那麼在20個問題的分片上扔20臺機器。 (同樣,所有前N項結果都可能值得批量計算,如果你使用雲資源,租500臺機器做4000萬次2秒的操作,你將在兩個以內完成天。)

+0

Gojomo,謝謝你的努力。是的,我確實有一個很稀少的n-gram表示(40434120,487654)。最慢的部分是從語料庫矩陣(csr_matrix)中減去查詢向量以準備邏輯迴歸。這就是爲什麼我正在尋找一些能夠使ANN搜索獲得最佳n結果的矢量表示(然後我可以進行精確搜索) –