NLTK:为情感分析添加负面词
NLTK: Adding negative words for sentiment analysis
我正在使用 nltk 和 SpaCy 进行情绪分析。在工作时,我需要将新词添加到负变量中,以便当这些词出现在任何句子中时它会显示负极性值。我不知道该怎么做,有人可以帮我吗?
到目前为止,您的情绪分析进展如何?这将有助于查看示例以了解您到底想做什么。如果您使用的是某种训练有素的模型,可以为您提供情绪值或情绪 class,那么它绝对不像告诉模型将这些词视为负面那么简单,您必须 re-train/fine-tune 模型。
当然,您可以将模型的结果与您自己的 post-editing 结果混合起来,方法是检查文本中是否有某些词,如果有,则对其评分甚至低于模型评分。总的来说,我很确定经过训练的模型会比您自己构建的任何模型 rule-based 产生更好的性能。根据您是否有可用数据,最佳性能可能是 fine-tune 预训练模型,但对于此 NLTK 和 SpaCy 不是 best/most 用户友好。
编辑:运行 毒性分析
的一些方法
经过训练可检测毒性的模型
进行此分析的最强大 state-of-the-art 方法可能是使用预训练的 transformer 模型,这些模型 fine-tuned 在可能已发布的该主题的可能最好注释的可用数据集上对于 Jigsaw toxicity detection challenges.
在 Python 你可以在 huggingface 上找到一些模型,例如:
https://huggingface.co/SkolkovoInstitute/roberta_toxicity_classifier
https://huggingface.co/unitary/toxic-bert
您还有一个 API 来了解它是如何工作的以及模型可以检测到什么。
纯粹Rule-Based
既然你有一个诽谤列表,你可能希望使用更多的 rule-based 方法。为句子分配毒性值的基本方法是:使用 NLTK 的 sent_tokenize()
将推文拆分为句子。然后使用 word_tokenize()
将每个句子拆分为单词。将所有单词设置为小写。计算句子中有多少有害词。有害词出现的次数是该句子的亵渎分数。
混合Rule-Based和情绪分析
由于到目前为止您的方法似乎是使用情绪分析模块,您可以尝试将从 NLTK 的情绪分析 module/Vader 模块中获得的情绪分数与基于规则的方法混合使用,该方法计算列表中的单词。
你应该意识到情绪分析与亵渎或毒性检测不同。如果你对 NLTK 的情绪分析给出“我非常难过”之类的东西,它会 return 一个非常负面的分数,即使这个句子没有亵渎或毒性。另一方面,如果您向情绪分析提供类似“我真他妈的高兴”之类的内容,它至少会检测到这不是太消极,与将其标记为 [ 的纯基于规则的方法相比,这是一个好处=48=]。因此,将这些方法结合起来很有意义,但仅将您拥有的列表插入情绪分析中并没有多大意义。
例如,您可以将每个分数加权为总分的 50%。首先,您计算情绪分数,然后将您自己的 rule-based 分数应用到该分数上,以便在出现任何诽谤时降低该分数。
我正在使用 nltk 和 SpaCy 进行情绪分析。在工作时,我需要将新词添加到负变量中,以便当这些词出现在任何句子中时它会显示负极性值。我不知道该怎么做,有人可以帮我吗?
到目前为止,您的情绪分析进展如何?这将有助于查看示例以了解您到底想做什么。如果您使用的是某种训练有素的模型,可以为您提供情绪值或情绪 class,那么它绝对不像告诉模型将这些词视为负面那么简单,您必须 re-train/fine-tune 模型。
当然,您可以将模型的结果与您自己的 post-editing 结果混合起来,方法是检查文本中是否有某些词,如果有,则对其评分甚至低于模型评分。总的来说,我很确定经过训练的模型会比您自己构建的任何模型 rule-based 产生更好的性能。根据您是否有可用数据,最佳性能可能是 fine-tune 预训练模型,但对于此 NLTK 和 SpaCy 不是 best/most 用户友好。
编辑:运行 毒性分析
的一些方法经过训练可检测毒性的模型
进行此分析的最强大 state-of-the-art 方法可能是使用预训练的 transformer 模型,这些模型 fine-tuned 在可能已发布的该主题的可能最好注释的可用数据集上对于 Jigsaw toxicity detection challenges.
在 Python 你可以在 huggingface 上找到一些模型,例如:
https://huggingface.co/SkolkovoInstitute/roberta_toxicity_classifier
https://huggingface.co/unitary/toxic-bert
您还有一个 API 来了解它是如何工作的以及模型可以检测到什么。
纯粹Rule-Based
既然你有一个诽谤列表,你可能希望使用更多的 rule-based 方法。为句子分配毒性值的基本方法是:使用 NLTK 的 sent_tokenize()
将推文拆分为句子。然后使用 word_tokenize()
将每个句子拆分为单词。将所有单词设置为小写。计算句子中有多少有害词。有害词出现的次数是该句子的亵渎分数。
混合Rule-Based和情绪分析
由于到目前为止您的方法似乎是使用情绪分析模块,您可以尝试将从 NLTK 的情绪分析 module/Vader 模块中获得的情绪分数与基于规则的方法混合使用,该方法计算列表中的单词。
你应该意识到情绪分析与亵渎或毒性检测不同。如果你对 NLTK 的情绪分析给出“我非常难过”之类的东西,它会 return 一个非常负面的分数,即使这个句子没有亵渎或毒性。另一方面,如果您向情绪分析提供类似“我真他妈的高兴”之类的内容,它至少会检测到这不是太消极,与将其标记为 [ 的纯基于规则的方法相比,这是一个好处=48=]。因此,将这些方法结合起来很有意义,但仅将您拥有的列表插入情绪分析中并没有多大意义。
例如,您可以将每个分数加权为总分的 50%。首先,您计算情绪分数,然后将您自己的 rule-based 分数应用到该分数上,以便在出现任何诽谤时降低该分数。