作者 | LU_ZHAO
出品 | AI科技大本營(ID:rgznai100)
前言
在自然語言處理中,我們經常需要判定兩個東西是否相似。
比如,在微博的熱點話題推薦那裡,我們需要比較微博之間的相似度,讓相似度高的微博聚集在一起形成一個簇,提出一個主題。
在問答系統中,比如說人工客服,我們需要提前準備好問題和一些答案,讓用戶輸入的問題與題庫中的問題進行相似度的比較,最後輸出答案。
在推薦系統中,我們需要提取一個用戶的所有物品,在根據這個物品找到對應的用戶群,比較兩個用戶之間的相似性,在進行相應的推薦(協同過濾)。
在對語料進行預處理的時候,我們需要給予文本的相似度,把相似度高的重複主題過濾掉。
總之,相似度是一種非常有用的工具,可以幫助我們解決很多問題。
任務目標
一般來說,是比較兩個物體(商品,文本)之間的相似度。這裡的相似度是一個抽象的值,它可以抽象成估計的百分比。
在推薦工程中,計算相似度是為了給用戶推送一定量的物品。即把所有的相似度排序,然後選出最高的那幾個物品。
人是很容易判斷出物品的相似度的,人們會在心裡有一個考量。那麼程序如何判斷呢?
如果是文本分析,它首先就要用到分詞技術,然後去掉不必要的詞(語氣詞,連接詞)。然後對詞給一個抽象的量表示權重,最後在用一些方法去統計出整體的相似度。
如果是其他的,可能首先也需要進行數據清洗的工作,留下那些關鍵的能夠表示物體特徵的部分,對這些部分定權值,再去估計整體。
相似度計算關鍵組件
相似度計算方法有2個關鍵組件:
表示模型
度量方法
前者負責將物體表示為計算機可以計算的數值向量,也就是提供特徵。
後者負責基於前面得到的數值向量計算物體之間的相似度。
距離的度量方式
歐幾里得距離
使用python計算歐式距離:
distance = numpy.linalg.norm(vec1 - vec2)
相似度為:
similarity = 1.0/(1.0 + np.linalg.norm(dataA - dataB))
餘弦距離
餘弦距離的計算方式:
與歐氏距離的區別:
歐氏距離能夠體現個體數值特徵的絕對差異,所以更多的用於需要從維度的數值大小中體現差異的分析,如使用用戶行為指標分析用戶價值的相似度或差異。
餘弦距離更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用於使用用戶對內容評分來區分興趣的相似度和差異,同時修正了用戶間可能存在的度量標準不統一的問題(因為餘弦距離對絕對數值不敏感)
Jacard相似度
distance = 1 / similarity
思想非常簡單,兩個集合共有的元素越多,二者越相似。
漢明距離
兩個字碼中不同位值的數目稱為漢明距離。
Hamming distance = 0 (ai = bi)
Hamming distance = 1 (ai != bi)
最後統計相加。
最小編輯距離是一種經典的距離計算方法,用來度量字符串之間的差異。它認為,將字符串A不斷修改(增刪改)、直至成為字符串B,所需要的修改次數代表了字符串A和B的差異大小。當然了,將A修改為B的方案非常多,選哪一種呢?我們可以用動態規劃找到修改次數最小的方案,然後用對應的次數來表示A和B的距離。
本文來源 CSDN 博客,作者「LU_ZHAO」,原文https://blog.csdn.net/LU_ZHAO/article/details/104860830
【end】
有獎徵文
如何用Jupyter Notebook製作新冠病毒疫情追蹤器?
萬人馬拉松賽事,人臉識別系統如何快速、準確完成校驗?
突破性能極限,阿里雲神龍最新ASPLOS論文解讀
DevOps 轉型時如何安全融入?對企業產出有何影響?2019年 DevOps 最新現狀研究報告解讀
百萬人學AI:CSDN重磅共建人工智能技術新生態
漫畫:如何給女朋友解釋什麼是熔斷?
你點的每個“在看”,我都認真當成了AI
閱讀更多 AI科技大本營 的文章