【NLP】在机器学习中开发情感分析器的5种方法
机器学习初学者
共 4714字,需浏览 10分钟
·
2021-05-05 12:17
编译 | VK
来源 | Towards Data Science
情感分析是一种自然语言处理技术,用于确定给定文本的情感或观点。情感分析模型可以通过从自然语言中提取意义并将其分配分数来预测给定的文本数据是正的、负的还是中性的。
开发或训练情绪分析模型有多种方法,本文中我们将讨论5种不同的方法:
定制训练监督模型 TextBlob 基于词典的模型 Bert 基于命名实体的情感分析器
定制训练监督模型:
收集原始标记数据集进行情绪分析。 文本预处理 文本的数字编码 选择合适的ML算法 调参与训练ML模型 预测
TextBlob:
patternalyzer:(默认)基于模式库。 NaiveBayesAnalyzer:一个基于电影评论语料库的NLTK分类器。
安装:
pip install -U textblob
实施:
from textblob import TextBlob
from textblob.sentiments import NaiveBayesAnalyzer, PatternAnalyzer
text = 'I liked the movie, the actors performance was too good.'
# NaiveBayesAnalyzer
blob = TextBlob(text, analyzer=NaiveBayesAnalyzer())
print(blob.sentiment)
# PatternAnalyzer
blob = TextBlob(text, analyzer=PatternAnalyzer())
print(blob.sentiment)
基于词典的模型
输入文本中的每个积极词都会增加情感得分,而消极词则会减少情感得分。 将最后的情绪分数除以该文本中的字数,以使分数标准化。
实施:
import nltk
pos_words = []
neg_words = []
def compute_sentiment_score(text):
sentiment_score = 0
words = nltk.word_tokenize(text)
for word in words:
if word in pos_words:
print('pos:',word)
sentiment_score=sentiment_score+1
if word in neg_words:
print('neg:',word)
sentiment_score=sentiment_score-1
return sentiment_score/len(words)
with open('datapath') as file:
for line in file:
line_attrib = line.split()
word = line_attrib[2].split('=')[1] #2nd column in the file
polarity = line_attrib[-1].split('=')[1] #last column in the file
if polarity =='positive':
pos_words.append(word)
elif polarity=='negative':
neg_words.append(word)
print('Total positive words found: ',len(pos_words))
print('Total negative words found: ',len(neg_words))
text = 'I loved the movie, the actors performance was mindblowing.'
sentiment = compute_sentiment_score(text)
print('The sentiment score of this text is: {:.2f}'.format(sentiment))
BERT:
安装Transformer库 加载BERT分类器和标记器 创建已处理的数据集 配置和训练加载的BERT模型,并对其超参数进行微调 进行情绪分析预测
实现:
基于命名实体的情感分析器:
第一步是在文本语料库中找到所有命名实体。 在文本上应用名称实体识别来查找各种实体,如PERSON、ORG、GPE。 基于命名实体的情感分析。 以找到包含命名实体的句子为目标,只对这些句子逐一进行情感分析。
结论:
参考文献:
往期精彩回顾
本站qq群851320808,加入微信群请扫码:
评论