【问题标题】:Emotional score of sentences using Spacy使用 Spacy 的句子情感评分
【发布时间】:2020-08-01 10:55:54
【问题描述】:

我有一系列 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) 升级此问题的最佳方法是什么?我正在考虑将所有句子添加到熊猫数据框中,然后将匹配函数应用于每个句子

提前致谢!

【问题讨论】:

    标签: python nlp spacy sentiment-analysis wordnet


    【解决方案1】:

    主要有两种方法:

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

    第一种方法会随着你给它更多的词而变得更好,但你最终会达到一个极限。 (仅仅是由于人类语言的模糊性和灵活性,例如,虽然“你”比“它”更情绪化,但会有很多不带情绪的句子使用“你”。)

    关于如何从 wordnet 中提取情感词有什么建议吗?

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2020-09-28
      • 2018-02-27
      • 1970-01-01
      • 2017-08-03
      相关资源
      最近更新 更多