![](/img/trans.png)
[英]How to preprocess a huge dataset and save it such that I can train the data in Python
[英]How can i optimize my Embedding transformation on a huge dataset?
我使用來自gensim
package 的 FastText,我使用下面的代碼將我的文本轉換為密集的表示,但是當我有一個巨大的數據集時,它需要很多次。 你能幫我加速嗎?
def word2vec_features(self, templates, model):
if self.method == 'mean':
feats = np.vstack([sum_vectors(p, model) / len(p) for p in templates])
else:
feats = np.vstack([sum_vectors(p, model) for p in templates])
return feats
def get_vect(word, model):
try:
return model.wv[word]
except KeyError:
return np.zeros((model.size,))
def sum_vectors(phrase, model):
return sum(get_vect(w, model) for w in phrase)
請注意,這種文本的摘要向量——所有詞向量的平均值(或總和)——相當粗糙。 在某些情況下,它可以作為基線工作——例如短文本中的模糊信息檢索,或作為分類器輸入。
在某些情況下,如果KeyError
經常被命中,那么異常處理可能會很昂貴 - 而檢查集合in
是否有一個鍵可能是有意義的。 而且,您可能不希望對任何缺失的單詞使用原始向量(全為零)——它可能比跳過這些單詞沒有任何好處。
因此,您可以通過更改代碼以忽略丟失的單詞來獲得一些加速,而不是在異常處理程序中添加全零向量。
而且:如果你真的使用FastText
model (而不是說Word2Vec
),它永遠不會出現未知單詞的KeyError
,因為它總是會從它在訓練期間學到的字符 n-gram(單詞片段)合成一個向量. 您可能應該完全放棄get_vect()
function - 僅依賴於正常的[]
-access。
此外,Gensim 的KeyedVector
模型已經支持在由多個鍵的列表索引時返回多個結果。 而且, numpy
np.sum()
在這些 arrays 上的運行速度可能比純 Python sum()
快一點。 因此,如果將sum_vectors()
替換為:
def sum_vectors(phrase, model):
return np.sum(model.wv[phrase], axis=0)
要進一步優化,您可能需要分析大量使用循環中的代碼,或者甚至重新考慮這是否是您想要追求的文本矢量化形式。 (不過,更好的方法通常需要比這個簡單的總和/平均值更多的計算。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.