【发布时间】:2021-12-14 14:56:19
【问题描述】:
我已将 Sentiment140 数据集用于 twitter 进行情绪分析
代码:
从推文中获取单词:
tweet_tokens = []
[tweet_tokens.append(dev.get_tweet_tokens(idx)) for idx, item in enumerate(dev)]
从令牌中获取未知单词
words_without_embs = []
[[words_without_embs.append(w) for w in tweet if w not in word2vec] for tweet in tweet_tokens]
len(words_without_embs)
最后一部分代码,计算向量作为左右词(上下文)的均值
vectors = {} # alg
for word in words_without_embs:
mean_vectors = []
for tweet in tweet_tokens:
if word in tweet:
idx = tweet.index(word)
try:
mean_vector = np.mean([word2vec.get_vector(tweet[idx-1]), word2vec.get_vector(tweet[idx+1])], axis=0)
mean_vectors.append(mean_vector)
except:
pass
if tweet == tweet_tokens[-1]: # last iteration
mean_vector_all_tweets = np.mean(mean_vectors, axis=0)
vectors[word] = mean_vector_all_tweets
有 1058532 个单词,这段代码的最后一部分运行速度很慢,大约每分钟 250 个单词。
如何提高这个算法的速度?
【问题讨论】:
-
您是否尝试过分析您的代码?
-
与性能无关,但它被认为是非 Pythonic 使用列表理解来处理副作用,即
[tweet_tokens.append(dev.get_tweet_tokens(idx)) for...参见:Is it Pythonic to use list comprehensions for just side effects?
标签: python algorithm machine-learning nlp word2vec