我在嘗試一些計算PMI的例子,試圖計算我收到的一些tweet消息(收集〜50k),如果發現algorithm的執行瓶頸在defaultdict(lambda : defaultdict(int))
中,並且我不知道爲什麼:defaultdict的內存效率
這裏是我異形它的例子,並採取了大量的內存和時間
for term, n in p_t.items():
positive_assoc = sum(pmi[term][tx] for tx in positive_vocab)
negative_assoc = sum(pmi[term][tx] for tx in negative_vocab)
semantic_orientation[term] = positive_assoc - negative_assoc
其中一部分:
positive_assoc = sum(pmi[term][tx] for tx in positive_vocab)
negative_assoc = sum(pmi[term][tx] for tx in negative_vocab)
由於某種原因分配了大量內存。我假設對於不存在的值返回0,所以傳遞給總和函數的數組非常大。
我用簡單的if value exist
和一個變量sum_pos
解決了這個問題。
從博客的整個實現:
pmi = defaultdict(lambda : defaultdict(int))
for t1 in p_t:
for t2 in com[t1]:
denom = p_t[t1] * p_t[t2]
pmi[t1][t2] = math.log2(p_t_com[t1][t2]/denom)
semantic_orientation = {}
for term, n in p_t.items():
positive_assoc = sum(pmi[term][tx] for tx in positive_vocab)
negative_assoc = sum(pmi[term][tx] for tx in negative_vocab)
semantic_orientation[term] = positive_assoc - negative_assoc
這裏的什麼是'defaultdict'? –