Python 使用空格的句子情感得分

Python 使用空格的句子情感得分,python,nlp,spacy,sentiment-analysis,wordnet,Python,Nlp,Spacy,Sentiment Analysis,Wordnet,我有一系列超过10万个句子,我想对它们的情绪进行排名 我对NLP的世界还很陌生,但我就是这样开始的(改编自) MyMotionalWordList是我手工创建的大约200个单词的列表 我的问题是: (1-a)计算情感词语的数量似乎不是最好的方法。有人有没有更好的方法 (1-b)如果这种方法足够好,有没有关于如何从wordnet中提取情感词语的建议 (2) 升级的最好方法是什么?我正在考虑将所有句子添加到pandas数据框中,然后将match函数应用到每个句子中 提前谢谢 主要有两种方法: 你已

我有一系列超过10万个句子,我想对它们的情绪进行排名

我对NLP的世界还很陌生,但我就是这样开始的(改编自)

MyMotionalWordList是我手工创建的大约200个单词的列表

我的问题是:

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

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

(2) 升级的最好方法是什么?我正在考虑将所有句子添加到pandas数据框中,然后将match函数应用到每个句子中


提前谢谢

主要有两种方法:

  • 你已经开始了,这是一个情感词汇的列表,并计算它们出现的频率
  • 举例说明你认为情感句子和什么是无感情的句子到机器学习模型,并让它解决这个问题。
第一种方法会变得更好,因为你给它更多的话,但你最终会达到一个极限。(仅仅是由于人类语言的模糊性和灵活性,例如,虽然“you”比“it”更具情感性,但会有很多使用“you”的非情感性句子。)

有没有关于如何从wordnet中提取情感词语的建议

看看sentiwordnet,它为每个wordnet条目添加了积极性、消极性或中立性的度量。对于“情绪化”,您可以只提取pos或neg分数超过0.5的部分。(请注意非商业专用许可证。)

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

我认为2020年的方法将是从预先训练好的伯特模型开始(越大越好,请参见),然后用手动注释的10万个句子的样本对其进行微调。在另一个示例上对其进行评估,并为错误的示例注释更多的训练数据。继续这样做,直到达到所需的精度水平

(顺便说一句,Spacy对这两种方法都有支持。我上面所说的微调也被称为转移学习。另请参阅谷歌搜索“Spacy情绪分析”可以找到很多教程。)

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)