我擁有數百萬個文檔(接近1億個),每個文檔都有諸如skills
,hobbies
,certification
和education
的字段。我想找出每個文檔與評分之間的相似度。計算數百萬個文檔之間的相似性度量
下面是一個數據的例子。
skills hobbies certification education
Java fishing PMP MS
Python reading novel SCM BS
C# video game PMP B.Tech.
C++ fishing PMP MS
所以我想要的是第一行和所有其他行之間的相似性,第二行和所有其他行之間的相似性等等。所以,每一份文件都應該與其他所有文件進行比較。得到相似度分數。
目的是我查詢我的數據庫以獲取基於技能的人。除此之外,我現在想要那些雖然沒有技能,但與具有特定技能的人有點匹配的人。例如,如果我想爲具有JAVA技能的人員獲取數據,則會出現第一行,並且再次顯示最後一行,因爲它與基於相似性得分的第一行相同。
挑戰:我的主要挑戰是要計算一些相似性得分爲每個文件對所有其他文件,你可以從下面的僞代碼見。我該如何更快地做到這一點?有沒有什麼不同的方式來做到這一點,或者有沒有其他的計算(硬件/算法)方法可以更快地做到這一點?
document = all_document_in_db
For i in document:
for j in document:
if i != j :
compute_similarity(i,j)
這聽起來像一個可行的解決方案。 – Enthusiast
對這裏的高層次問題有很好的反應。聚類算法不需要計算每個單獨的成對距離,因此不需要數千億次比較。 –
但是,您將不得不考慮如何對類別進行編碼。由於聚類取決於多維空間中的「距離」,因此不能將字符串作爲特徵傳遞。當將字符串映射到值時,必須對字符串施加某種順序。例如,GED的「教育」比碩士更接近單身漢,甚至更遠離博士學位。您需要爲每個類別設置一個映射,例如GED = 1,BS = 2,MS = 3,PhD = 4。這將允許您在準確表示數據特徵的同時執行聚類。 –