有没有办法提高 nltk.sentiment.vader 情绪分析的性能?
Is there a way to improve performance of nltk.sentiment.vader Sentiment analyser?
我的文字来自社交网络,所以你可以想象它的本质,我认为文字是我想象中的干净和最小的;执行以下消毒后:
- 没有网址,没有用户名
- 没有标点符号,没有重音符号
- 没有数字
- 没有停用词(我想 vader 还是这样做了)
我认为 运行 时间是线性的,我不打算进行任何并行化,因为更改可用代码需要大量工作,
例如,对于大约 1000 个文本,范围从 ~50 kb 到 ~150 kb 字节,大约需要
运行在我的机器上,宁时间大约是 10 分钟。
是否有更好的方法来提供算法以加快烹饪时间?
代码和 SentimentIntensityAnalyzer 的目的一样简单,这里是主要部分
sid = SentimentIntensityAnalyzer()
c.execute("select body, creation_date, group_id from posts where (substring(lower(body) from (%s))=(%s)) and language=\'en\' order by creation _ date DESC (s,s,)")
conn.commit()
if(c.rowcount>0):
dump_fetched = c.fetchall()
textsSql=pd.DataFrame(dump_fetched,columns=['body','created_at', 'group_id'])
del dump_fetched
gc.collect()
texts = textsSql['body'].values
# here, some data manipulation: steps listed above
polarity_ = [sid.polarity_scores(s)['compound'] for s in texts]
/1。您不需要删除停用词,nltk+vader 已经这样做了。
/2。您无需删除标点符号,因为除了处理开销外,这也会影响 vader 的极性计算。所以,继续使用标点符号。
>>> txt = "this is superb!"
>>> s.polarity_scores(txt)
{'neg': 0.0, 'neu': 0.313, 'pos': 0.687, 'compound': 0.6588}
>>> txt = "this is superb"
>>> s.polarity_scores(txt)
{'neg': 0.0, 'neu': 0.328, 'pos': 0.672, 'compound': 0.6249}
/3.You也要引入句子标记化,因为它会提高准确性,然后根据sentences.Example计算一段的平均极性:https://github.com/cjhutto/vaderSentiment/blob/master/vaderSentiment/vaderSentiment.py#L517
/4。极性计算彼此完全独立,可以使用 multiprocessing pool 小尺寸,比如 10,以提供良好的速度提升。
polarity_ = [sid.polarity_scores(s)['compound'] for s in texts]
我的文字来自社交网络,所以你可以想象它的本质,我认为文字是我想象中的干净和最小的;执行以下消毒后:
- 没有网址,没有用户名
- 没有标点符号,没有重音符号
- 没有数字
- 没有停用词(我想 vader 还是这样做了)
我认为 运行 时间是线性的,我不打算进行任何并行化,因为更改可用代码需要大量工作, 例如,对于大约 1000 个文本,范围从 ~50 kb 到 ~150 kb 字节,大约需要
运行在我的机器上,宁时间大约是 10 分钟。
是否有更好的方法来提供算法以加快烹饪时间? 代码和 SentimentIntensityAnalyzer 的目的一样简单,这里是主要部分
sid = SentimentIntensityAnalyzer()
c.execute("select body, creation_date, group_id from posts where (substring(lower(body) from (%s))=(%s)) and language=\'en\' order by creation _ date DESC (s,s,)")
conn.commit()
if(c.rowcount>0):
dump_fetched = c.fetchall()
textsSql=pd.DataFrame(dump_fetched,columns=['body','created_at', 'group_id'])
del dump_fetched
gc.collect()
texts = textsSql['body'].values
# here, some data manipulation: steps listed above
polarity_ = [sid.polarity_scores(s)['compound'] for s in texts]
/1。您不需要删除停用词,nltk+vader 已经这样做了。
/2。您无需删除标点符号,因为除了处理开销外,这也会影响 vader 的极性计算。所以,继续使用标点符号。
>>> txt = "this is superb!"
>>> s.polarity_scores(txt)
{'neg': 0.0, 'neu': 0.313, 'pos': 0.687, 'compound': 0.6588}
>>> txt = "this is superb"
>>> s.polarity_scores(txt)
{'neg': 0.0, 'neu': 0.328, 'pos': 0.672, 'compound': 0.6249}
/3.You也要引入句子标记化,因为它会提高准确性,然后根据sentences.Example计算一段的平均极性:https://github.com/cjhutto/vaderSentiment/blob/master/vaderSentiment/vaderSentiment.py#L517
/4。极性计算彼此完全独立,可以使用 multiprocessing pool 小尺寸,比如 10,以提供良好的速度提升。
polarity_ = [sid.polarity_scores(s)['compound'] for s in texts]