python - 使用 Spacy 对句子进行情感评分

标签 python nlp spacy sentiment-analysis wordnet

我有一系列 100.000 多个句子,我想对它们的情绪化程度进行排名。

我对 NLP 世界还很陌生,但这就是我设法入门的方式(改编自 spacy 101)

import spacy
from spacy.matcher import Matcher

matcher = Matcher(nlp.vocab)

def set_sentiment(matcher, doc, i, matches):
    doc.sentiment += 0.1

myemotionalwordlist = ['you','superb','great','free']

sentence0 = 'You are a superb great free person'
sentence1 = 'You are a great person'
sentence2 = 'Rocks are made o minerals'

sentences = [sentence0,sentence1,sentence2]

pattern2 = [[{"ORTH": emotionalword, "OP": "+"}] for emotionalword in myemotionalwordlist]
matcher.add("Emotional", set_sentiment, *pattern2)  # Match one or more emotional word

for sentence in sentences:
    doc = nlp(sentence)
    matches = matcher(doc)

    for match_id, start, end in matches:
        string_id = nlp.vocab.strings[match_id]
        span = doc[start:end]
    print("Sentiment", doc.sentiment)

myemotionalwordlist 是我手动构建的大约 200 个单词的列表。

我的问题是:

(1-a) 计算情感词的数量似乎不是最好的方法。有人有更好的建议吗?

(1-b) 如果这种方法足够好,有什么关于如何从 wordnet 中提取情感词的建议吗?

(2) 升级此事件的最佳方式是什么?我正在考虑将所有句子添加到 Pandas 数据框中,然后将匹配函数应用于每个句子

提前致谢!

最佳答案

主要有两种方法:

  • 你已经开始的那个,这是一个情感词列表,并计算它们出现的频率
  • 向机器学习模型展示您认为情绪化句子和非情绪化句子的示例,并让它解决问题。

第一种方法会随着您输入更多单词而变得更好,但您最终会达到极限。 (仅仅是由于人类语言的歧义性和灵 active ,例如,虽然“你”比“它”更情绪化,但会有很多使用“你”的非情绪化句子。)

any suggestions on how I can extract emotional words from wordnet?

看看 sentiwordnet,它为每个 wordnet 条目添加了积极性、消极性或中立性的衡量标准。对于“情绪化”,您可以只提取那些得分超过 pos 或 neg 的内容,例如0.5。 (注意非商业许可。)

第二种方法可能会更好如果您可以为其提供足够的训练数据,但“足够”有时可能会太多。其他缺点是模型通常需要更多的计算能力和内存(如果您需要离线或在移动设备上工作,这是一个严重的问题),而且它们是一个黑盒子。

我认为 2020 年的方法是从预训练的 BERT 模型开始(越大越好,请参阅 the recent GPT-3 paper ),然后使用您手动注释的 10 万个句子样本对其进行微调.在另一个样本上对其进行评估,并为错误的数据注释更多的训练数据。继续这样做,直到获得所需的准确度。

(顺便说一下,Spacy 支持这两种方法。我在上面所说的微调也称为迁移学习。请参阅 https://spacy.io/usage/training#transfer-learning 谷歌搜索“spacy 情感分析”也会找到很多教程。)

关于python - 使用 Spacy 对句子进行情感评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63204418/

相关文章:

python - 如何检查 urllib2 是否遵循重定向?

nlp - 词汇化解析器 vs 依赖解析器

machine-learning - 响应生成如何在 RASA 核心中工作?

python - PyGame:每像素 alpha 的半透明 Sprite

python - mysql - 如何确保使用flask-sqlalchemy 在 Flask 中成功连接 mysql 数据库?

python - Django,如何通过模型字段访问模型内​​部的模型

nlp - 词干提取和去复数化之间的区别

python - NLTK 停用词可用语言

nlp - Spacy - 使用两个可训练的组件和两个不同的数据集

python - 在 spacy 中安装后删除 en_core_web_trf .whl 文件