我試圖計算熊貓數據框中兩列之間的tf-idf向量餘弦相似度。一列包含一個搜索查詢,另一列包含一個產品標題。餘弦相似度值旨在成爲搜索引擎/排序機器學習算法的「特徵」。Python:MemoryError當計算tf-idf熊貓中兩列之間的餘弦相似度
我在iPython筆記本上做了這個,不幸的是運行到MemoryErrors中,我不知道爲什麼經過幾個小時的挖掘。
我的設置:
- 聯想E560筆記本
- 睿i7-6500U @ 2.50 GHz的
- 16 GB的RAM
- 的Windows 10
- 使用蟒蛇3.5內核的一個新的更新所有庫
我測試了我的代碼/目標上的一個小玩具數據集作爲每一個類似計算器的問題正是如此:
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from scipy import spatial
clf = TfidfVectorizer()
a = ['hello world', 'my name is', 'what is your name?', 'max cosine sim']
b = ['my name is', 'hello world', 'my name is what?', 'max cosine sim']
df = pd.DataFrame(data={'a':a, 'b':b})
clf.fit(df['a'] + " " + df['b'])
tfidf_a = clf.transform(df['a']).todense()
tfidf_b = clf.transform(df['b']).todense()
row_similarities = [1 - spatial.distance.cosine(tfidf_a[x],tfidf_b[x]) for x in range(len(tfidf_a)) ]
df['tfidf_cosine_similarity'] = row_similarities
print(df)
這給出了以下(好!)輸出:
a b tfidf_cosine_similarity
0 hello world my name is 0.000000
1 my name is hello world 0.000000
2 what is your name? my name is what? 0.725628
3 max cosine sim max cosine sim 1.000000
然而,當我嘗試同樣的方法適用於數據框(df_all_export)與尺寸186154×5(其中5列的查詢(SEARCH_TERM)和文件(PRODUCT_TITLE)這樣的2:
clf.fit(df_all_export['search_term'] + " " + df_all_export['product_title'])
tfidf_a = clf.transform(df_all_export['search_term']).todense()
tfidf_b = clf.transform(df_all_export['product_title']).todense()
row_similarities = [1 - spatial.distance.cosine(tfidf_a[x],tfidf_b[x]) for x in range(len(tfidf_a)) ]
df_all_export['tfidf_cosine_similarity'] = row_similarities
df_all_export.head()
我得到......(沒有給這裏的整體錯誤,但你的想法):
MemoryError Traceback (most recent call last)
<ipython-input-27-8308fcfa8f9f> in <module>()
12 clf.fit(df_all_export['search_term'] + " " + df_all_export['product_title'])
13
---> 14 tfidf_a = clf.transform(df_all_export['search_term']).todense()
15 tfidf_b = clf.transform(df_all_export['product_title']).todense()
16
絕對失去了這一個,但我擔心的解決方案將是很簡單和優雅:)
預先感謝您!
請務必發佈完整的堆棧跟蹤,以便我們知道錯誤來自何處。 –