私は初心者です。私はマルチスレッドを使用してcountvectorizer()
のコードを再現しようとしています。 LogisticRegression
を使用して感情分析を行うには、私はyelpデータセットを使用しています。これは私がこれまでに書かれたものです:Pythonでのスレッドプールは、期待通りの速さではありません。
コードスニペット:ここ
from multiprocessing.dummy import Pool as ThreadPool
from threading import Thread, current_thread
from functools import partial
data = df['text']
rev = df['stars']
y = []
def product_helper(args):
return featureExtraction(*args)
def featureExtraction(p,t):
temp = [0] * len(bag_of_words)
for word in p.split():
if word in bag_of_words:
temp[bag_of_words.index(word)] += 1
return temp
# function to be mapped over
def calculateParallel(threads):
pool = ThreadPool(threads)
job_args = [(item_a, rev[i]) for i, item_a in enumerate(data)]
l = pool.map(product_helper,job_args)
pool.close()
pool.join()
return l
temp_X = calculateParallel(12)
これはコードのほんの一部です。
説明:
df['text']
レビューをすべて持っているとdf['stars']
を評価(1〜5)を持っています。私はマルチスレッドを使用して単語数ベクトルtemp_X
を見つけようとしています。 bag_of_words
は頻繁に選ぶ単語のリストです。
質問:マルチスレッドなし
、私は約24分でtemp_X
を計算することができましたし、上記のコードは、サイズ100Kレビューのデータセットのために33分を要しました。私のマシンは128GBのDRAMと12個のコアを持っています(6個の物理コアとハイパースレッディング、つまり1コアあたりのスレッド= 2)。
私はここで間違っていますか?
ありがとうございました。私はここでより多くの質問があります。使用するコアの数はどこで指定しますか? –
@bhaskarjupudiそれは、利用可能なコアの数を選択します..... multiprocessing.cpu_count()から自動的に – vks
投稿したコードスニペットでは、lはオブジェクトです。どのようにそのオブジェクトから実際のリストを取得するには? –