分词词向量余弦相似度
說白了,就是所有的計算都要轉(zhuǎn)換成數(shù)字,首先分詞,詞集合,轉(zhuǎn)換成ID,然后匹配即可,這種模式比較粗糙。
詞向量余弦
詞向量余弦算法,是將文本作為一個多維空間的向量,計算兩個文本的相識度即計算判斷兩個向量在這個多維空間中的方向是否是一樣的。而這個多維空間的構(gòu)成是通過將文本進行分詞,每個分詞代表空間的一個維度。
下面通過例子來說明多維空間的構(gòu)成即詞向量問題。比如要計算如下兩個短文本的相識度:
文本一:天氣預(yù)報說,明天會下雨,你明天早上去上班的時候記得帶上傘。
文本二:你明天早上去上班的時候記得帶上傘,天氣預(yù)報說的可能會下雨。
首先我們利用某種分詞方法將文本進行分詞,如下:
這里不考慮標點符號,當然也可以涵蓋
文本一分詞:[天氣 預(yù)報 說 明天 會 下雨 你 明天 早上 去 上班 的 時候 記 得 帶 上 傘]
文本二分詞:[你 明天 早上 去 上班 的 時候 記 得 帶 上 傘 天氣 預(yù)報 說 的 可能會 下 雨]
多維空間的詞集合如下:
[天氣 你 的 帶 可能會 雨 上班 上 下 早上 時候 記 預(yù)報 說 明天 下雨 得 會 去 傘]
這是便可以得出連個文本在這個詞集合構(gòu)建的多維空間的詞向量。
文本一的詞向量:[1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1 ]
文本二的詞向量:[1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]
詞向量得到了,這是便可以根據(jù)詞向量余弦的公式計算出相似度值了,公式如下:
計算出的相似度值為: similarity = 0.8295150620062532
由余弦定理可知,cosine值的范圍為[0,1],越趨近于1時兩個向量的夾角越小,也代表兩個文本越相似,
我們在做推薦或者信息檢索任務(wù)時經(jīng)常需要比較項目嵌入和項目嵌入之間或者用戶嵌入和項目嵌入之間的相似度,然后進行推薦。余弦相似度的計算公式如下:
余弦相似度cosine similarity和余弦距離cosine distance是相似度度量中常用的兩個指標,我們可以用sklearn.metrics.pairwise下的cosine_similarity和paired_distances函數(shù)分別計算兩個向量之間的余弦相似度和余弦距離,效果如下:
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, paired_distances
x = np.array([[0.26304135, 0.91725843, 0.61099966, 0.40816231, 0.93606288, 0.52462691]])
print(x)
y = np.array([[0.03756129, 0.50223667, 0.66529424, 0.57392135, 0.20479857, 0.27286363]])
print(y)
余弦相似度
simi = cosine_similarity(x, y)
print(‘cosine similarity:’, simi)
余弦距離 = 1 - 余弦相似度
dist = paired_distances(x, y, metric=‘cosine’)
print(‘cosine distance:’, dist)
這里可以看到,余弦相似度 + 余弦距離 = 1。
我們試一下用cosine_similarity和paired_distances函數(shù)分別計算多個向量與一個向量的余弦相似度和余弦距離,效果如下:
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, paired_distances
x = np.array([[0.26304135, 0.91725843, 0.61099966, 0.40816231, 0.93606288, 0.52462691], [0.26304135, 0.91725843, 0.61099966, 0.40816231, 0.93606288, 0.52462691]])
print(x)
y = np.array([[0.03756129, 0.50223667, 0.66529424, 0.57392135, 0.20479857, 0.27286363]])
print(y)
余弦相似度
simi = cosine_similarity(x, y)
print(‘cosine similarity:’, simi)
余弦距離 = 1 - 余弦相似度
dist = paired_distances(x, y, metric=‘cosine’)
print(‘cosine distance:’, dist)
親測有效的方法:
1、余弦相似性(cosine)
(1)使用sklearn中的向量相似性的計算包,代碼如下:
這個函數(shù)的輸入是n個長度相同的list或者array,函數(shù)的處理是計算這n個list兩兩之間的余弦相似性,最后生成的相似矩陣中的s[i][j]表示的是原來輸入的矩陣中的第i行和第j行兩個向量的相似性,所以生成的是n*n的相似性矩陣
1
2
3
from sklearn.metrics.pairwise import cosine_similarity
s = cosine_similarity([[1, 0, 0, 0]], [[1, 0, 0, 0]])
print(s)
輸出:
[[1.]]
(2)使用scipy包中的距離計算,代碼如下:
這里的vec1和vec2都是一維的array向量。
1
2
3
from scipy.spatial.distance import cosine
vec1 = [1, 2, 3]
vec2 = [2, 3, 4]
s = cosine(vec1, vec2)
print(s)
0.007416666029069763
2、皮爾森相關(guān)系數(shù)(pearson)
from scipy import stats
import numpy as np
a = np.array([0, 0, 0, 1, 1, 1, 1])
b = np.arange(7)
s1 = stats.pearsonr(a, b)
s2 = stats.pearsonr([1,2,3,4,5], [5,6,7,8,7])
print(“s1:”, s1)
print(“s2:”, s2)
s1: (0.8660254037844387, 0.011724811003954626)
s2: (0.8320502943378438, 0.08050957329849848)
前面的0.866025和0.862050即為所要求的相關(guān)系數(shù),具體用法參見:scipy.stats.pearsonr
3、歐式距離
歐式距離,即歐幾里得距離,這里的計算有三種方式:
(1)已知vec1和vec2是兩個Numpy array,即數(shù)組,使用numpy包計算:
1
2
3
import numpy
a = numpy.array([0, 0, 0, 1, 1, 1, 1])
b = numpy.arange(7)
dist = numpy.sqrt(numpy.sum(numpy.square(a - b)))
print(dist)
dist: 7.681145747868608
(2)也是使用numpy包,相對更加直接,代碼如下:
1
import numpy
a = numpy.array([0, 0, 0, 1, 1, 1, 1])
b = numpy.arange(7)
dist = numpy.linalg.norm(a - b)
print(“dist:”, dist)
dist: 7.681145747868608
(3) 使用sklearn中的向量相似性的計算包,這個沒有具體使用,就不貼代碼了。
1
import numpy
a=[1,2,3,1,4,5,5846,464,64,456,456,4]
print(a)
b=numpy.array(a).reshape(len(a),1) # reshape(列的長度,行的長度)
print(b) #轉(zhuǎn)換為二維矩陣
print(‘b的形狀是’+numpy.shape(b)) #12行1列
keys = [‘a(chǎn)’, ‘b’, ‘c’]
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print dictionary
“”"
輸出:
{‘a(chǎn)’: 1, ‘c’: 3, ‘b’: 2}
“”"
[numpy] ndarray 與 list 互相轉(zhuǎn)換
豆腐羲羲 2018-05-19 13:29:20 136354 收藏 32
分類專欄: numpy
版權(quán)
list 轉(zhuǎn) numpy
np.array(a)
ndarray 轉(zhuǎn) list
a.tolist()
————————————————
版權(quán)聲明:本文為CSDN博主「愚昧之山絕望之谷開悟之坡」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_15821487/article/details/115693841
詞向量余弦
詞向量余弦算法,是將文本作為一個多維空間的向量,計算兩個文本的相識度即計算判斷兩個向量在這個多維空間中的方向是否是一樣的。而這個多維空間的構(gòu)成是通過將文本進行分詞,每個分詞代表空間的一個維度。
下面通過例子來說明多維空間的構(gòu)成即詞向量問題。比如要計算如下兩個短文本的相識度:
文本一:天氣預(yù)報說,明天會下雨,你明天早上去上班的時候記得帶上傘。
文本二:你明天早上去上班的時候記得帶上傘,天氣預(yù)報說的可能會下雨。
首先我們利用某種分詞方法將文本進行分詞,如下:
這里不考慮標點符號,當然也可以涵蓋
文本一分詞:[天氣 預(yù)報 說 明天 會 下雨 你 明天 早上 去 上班 的 時候 記 得 帶 上 傘]
文本二分詞:[你 明天 早上 去 上班 的 時候 記 得 帶 上 傘 天氣 預(yù)報 說 的 可能會 下 雨]
多維空間的詞集合如下:
[天氣 你 的 帶 可能會 雨 上班 上 下 早上 時候 記 預(yù)報 說 明天 下雨 得 會 去 傘]
這是便可以得出連個文本在這個詞集合構(gòu)建的多維空間的詞向量。
文本一的詞向量:[1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1 ]
文本二的詞向量:[1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1]
詞向量得到了,這是便可以根據(jù)詞向量余弦的公式計算出相似度值了,公式如下:
計算出的相似度值為: similarity = 0.8295150620062532
由余弦定理可知,cosine值的范圍為[0,1],越趨近于1時兩個向量的夾角越小,也代表兩個文本越相似,
我們在做推薦或者信息檢索任務(wù)時經(jīng)常需要比較項目嵌入和項目嵌入之間或者用戶嵌入和項目嵌入之間的相似度,然后進行推薦。余弦相似度的計算公式如下:
余弦相似度cosine similarity和余弦距離cosine distance是相似度度量中常用的兩個指標,我們可以用sklearn.metrics.pairwise下的cosine_similarity和paired_distances函數(shù)分別計算兩個向量之間的余弦相似度和余弦距離,效果如下:
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, paired_distances
x = np.array([[0.26304135, 0.91725843, 0.61099966, 0.40816231, 0.93606288, 0.52462691]])
print(x)
y = np.array([[0.03756129, 0.50223667, 0.66529424, 0.57392135, 0.20479857, 0.27286363]])
print(y)
余弦相似度
simi = cosine_similarity(x, y)
print(‘cosine similarity:’, simi)
余弦距離 = 1 - 余弦相似度
dist = paired_distances(x, y, metric=‘cosine’)
print(‘cosine distance:’, dist)
這里可以看到,余弦相似度 + 余弦距離 = 1。
我們試一下用cosine_similarity和paired_distances函數(shù)分別計算多個向量與一個向量的余弦相似度和余弦距離,效果如下:
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, paired_distances
x = np.array([[0.26304135, 0.91725843, 0.61099966, 0.40816231, 0.93606288, 0.52462691], [0.26304135, 0.91725843, 0.61099966, 0.40816231, 0.93606288, 0.52462691]])
print(x)
y = np.array([[0.03756129, 0.50223667, 0.66529424, 0.57392135, 0.20479857, 0.27286363]])
print(y)
余弦相似度
simi = cosine_similarity(x, y)
print(‘cosine similarity:’, simi)
余弦距離 = 1 - 余弦相似度
dist = paired_distances(x, y, metric=‘cosine’)
print(‘cosine distance:’, dist)
親測有效的方法:
1、余弦相似性(cosine)
(1)使用sklearn中的向量相似性的計算包,代碼如下:
這個函數(shù)的輸入是n個長度相同的list或者array,函數(shù)的處理是計算這n個list兩兩之間的余弦相似性,最后生成的相似矩陣中的s[i][j]表示的是原來輸入的矩陣中的第i行和第j行兩個向量的相似性,所以生成的是n*n的相似性矩陣
1
2
3
from sklearn.metrics.pairwise import cosine_similarity
s = cosine_similarity([[1, 0, 0, 0]], [[1, 0, 0, 0]])
print(s)
輸出:
[[1.]]
(2)使用scipy包中的距離計算,代碼如下:
這里的vec1和vec2都是一維的array向量。
1
2
3
from scipy.spatial.distance import cosine
vec1 = [1, 2, 3]
vec2 = [2, 3, 4]
s = cosine(vec1, vec2)
print(s)
0.007416666029069763
2、皮爾森相關(guān)系數(shù)(pearson)
from scipy import stats
import numpy as np
a = np.array([0, 0, 0, 1, 1, 1, 1])
b = np.arange(7)
s1 = stats.pearsonr(a, b)
s2 = stats.pearsonr([1,2,3,4,5], [5,6,7,8,7])
print(“s1:”, s1)
print(“s2:”, s2)
s1: (0.8660254037844387, 0.011724811003954626)
s2: (0.8320502943378438, 0.08050957329849848)
前面的0.866025和0.862050即為所要求的相關(guān)系數(shù),具體用法參見:scipy.stats.pearsonr
3、歐式距離
歐式距離,即歐幾里得距離,這里的計算有三種方式:
(1)已知vec1和vec2是兩個Numpy array,即數(shù)組,使用numpy包計算:
1
2
3
import numpy
a = numpy.array([0, 0, 0, 1, 1, 1, 1])
b = numpy.arange(7)
dist = numpy.sqrt(numpy.sum(numpy.square(a - b)))
print(dist)
dist: 7.681145747868608
(2)也是使用numpy包,相對更加直接,代碼如下:
1
import numpy
a = numpy.array([0, 0, 0, 1, 1, 1, 1])
b = numpy.arange(7)
dist = numpy.linalg.norm(a - b)
print(“dist:”, dist)
dist: 7.681145747868608
(3) 使用sklearn中的向量相似性的計算包,這個沒有具體使用,就不貼代碼了。
1
import numpy
a=[1,2,3,1,4,5,5846,464,64,456,456,4]
print(a)
b=numpy.array(a).reshape(len(a),1) # reshape(列的長度,行的長度)
print(b) #轉(zhuǎn)換為二維矩陣
print(‘b的形狀是’+numpy.shape(b)) #12行1列
keys = [‘a(chǎn)’, ‘b’, ‘c’]
values = [1, 2, 3]
dictionary = dict(zip(keys, values))
print dictionary
“”"
輸出:
{‘a(chǎn)’: 1, ‘c’: 3, ‘b’: 2}
“”"
[numpy] ndarray 與 list 互相轉(zhuǎn)換
豆腐羲羲 2018-05-19 13:29:20 136354 收藏 32
分類專欄: numpy
版權(quán)
list 轉(zhuǎn) numpy
np.array(a)
ndarray 轉(zhuǎn) list
a.tolist()
————————————————
版權(quán)聲明:本文為CSDN博主「愚昧之山絕望之谷開悟之坡」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_15821487/article/details/115693841