《计算传播学导论》读书笔记:第三章 情感分析

目录

第三章 情感分析

第一节 情感分析简介

第二节 情感分析与传播学研究

一、用户评论的情感倾向分析与口碑营销

二、社会化媒体虚假信息的判定

三、社会化媒体的情绪刻画与情绪传播

第三节 Python进行情感分析

一、Textblob

二、Snownlp

第四节 情感分析的基本算法

一、语词的情感倾向判定

二、句子的情感分析:基于词典匹配的方法 

三、句子的情感分析:有监督机器学习情感分类方法


第三章 情感分析

传播学研究为什么需要情感分析?一个重要的原因是我们希望获知其他人的“意见”。人们的意见是影响行为的重要因素。同时,作为一种社会化动物,人们的意见还影响其他人对事物的看法,继而影响个体和群体做出决策。社会化媒体的兴起,使得研究者有更多机会获取用户关于公共事务、产品服务等反馈。利用计算方法,我们则有可能对用户发布的上述内容进行情感分析获知。

情感分析是一种计算研究。情感分析旨在对大规模文本经过结构化处理后,利用相应算法,自动分析出文本的情感倾向。

第一节 情感分析简介

在自然语言处理领域,情感分析,又称为“意见挖掘”“情感挖掘”“主观分析”“情感探测”等。其旨在基于大规模文本处理,利用相关算法,对给定文本的情感倾向进行划分,如“高兴”“愤怒”“悲哀”“快乐”,或者“积极”“中性”“消极”。

情感分析的任务还可以继续细分为多个子领域,如文本的情感分类、句子主观性判断以及情感分类、多方面情感分析和意见总结、情感词典生成、挖掘对比意见、评论有用性分析等。

对以社交媒体为代表的主观性和非结构化内容进行情感分析,需要解决的首要任务就是如何让机器理解情感。换言之,如何对情感或者意见进行结构化,是情感分析主要需要解决的任务。具体而言,对于一个典型的情感分析任务,其大体需要从给定文本中抽取出以下内容,即五元组,来完成结构化任务。

第一,意见对象,即具体的评价对象以及他们的某些具体方面。意见对象可以是一个实体,也可以是一个话题。

第二,具体层面,意见对象还有更具体的层面,即特点。

第三,情感倾向,包括积极、中性或消极。

第四,意见主体,即持有上述意见的个体。

第五,时间,即情感意见的表达时间。

第二节 情感分析与传播学研究

情感分析是用来探究人们对于事件、话题、产品、服务等对象的态度,而研究个体态度是传播学传播效果的重要领域。知识-态度-行为模型是信息传播效果的基本理论模型之一。信息传播的直接效果是获取知识,继而产生态度,而对人们态度的测量和分析,是预测其后续行为的重要变量。

一、用户评论的情感倾向分析与口碑营销

在线口碑营销能够增加消费者对品牌的知识。口碑营销具有知名效应,即口碑传播信息使得用户得知产品或品牌的存在,从而将其作为备选购买商品之一。从广义上来讲,以用户评论和打分为主要形式的在线口碑传播内容的特点包括数量、感情倾向、视觉线索等。研究发现,评论数量和情感倾向会影响到用户的品牌认知和态度。

用户的评论情感倾向会影响产品销量。既往研究认为,情感倾向是所有口碑传播内容特点中预测产品销量最准的一个特征。

用户评论的情感分析既是用户“主观评价”的一部分,也常常被独立用来获知消费者对产品的基本态度。情感倾向分析目前主要有以下三种不同的实现途径:1.人工标注;2.利用情感词典进行匹配;3.利用语词共生网络关系对语词情感倾向进行推断。

人工标注指人工构建语词情感分类以及语词间相近关系。目前,基于人工判定感情倾向应用较广的测量方式为Glaster&Strauss于1967年提出的编码表。该编码表对句子的情感倾向由负到正编码为以下几个维度:无感情的、恶劣的、坏的、一般的、比较好的以及非常好的。每个等级均有量化的判定标准。

近来,通过词典匹配文本中具有情感倾向的词汇逐步取代了人工标注方法。这种方法需要利用已有情感词典,识别并提取出文本中与情感相关的词汇,继而通过机器学习相关算法训练出情感分类模型,从而判定句子的情感倾向。在此基础上,分析句子在文档中的重要性程度,从而聚合每个句子,分析文档的情感倾向。

此外,借助于情感词,研究者还能够抽取用户的在线评论意见。“基于特征的意见挖掘算法”也能够有效用于探测用户对产品的意见。集体而言,该方法首先断定产品特征,并选取能够反映该产品特征的情感倾向的形容词,最终断定用户意见倾向。在一条评论中,距离产品特征最近的具有积极或消极情感意义的形容词被视为有效意见。形容词的积极或消极程度用WordNet等词库中相应的近义词与该词的相似关系进行匹配标注和预测。

基于特征的意见挖掘算法不仅能够根据产品特征判定意见倾向,还能够反过来根据情感倾向来发现隐含的产品特征。具体而言,如果一个句子中只包含具有情感倾向的形容词词汇,而不包含产品特征,则能够通过寻找距离情感形容词最近的名词或名词短语来发现不被大多数人提及的辅助产品特征。产品特征的抽取还能够转化为分类问题通过最大熵特征选择实现。最大熵方法的基本思想是:给定一个已经标注出产品特征的训练样本,模型所建立的条件概率要与训练样本表现出来的分布相同。最大熵可以看作一种统计推断方法,即利用给定的已知信息,推断未知信息;对未知信息不做任何有偏见的假设,使得未知信息的推断概率的熵值最大。简言之,最大熵表示的是对不确定度的无偏见分配。

二、社会化媒体虚假信息的判定

社会化媒体不仅提高了信息传播效率,也滋生了虚假信息,如虚假新闻、虚假评论等,不同领域的虚假信息影响用户各方面行为。因此,判别社会化媒体中哪些是虚假内容,特别是用户自创的虚假信息,是一个兼具理论意义与现实意义的问题。

然而,判定社交媒体的虚假信息,难处在于缺少对比组。目前,社交媒体造假水军大概分为“个人单独作战”和“集团军作战”。“个人单独作战”使用自己的单一社交媒体账号提供虚假评论。“集团军作战”则主要专门提供水军评论的机构雇佣大量水军进行造假。对于上述两种途径产生的虚假信息,无论研究者还是社交媒体平台,都不能确切知道哪些信息是虚假的,哪些信息是真实的;而只有水军作者知道哪些是杜撰信息。这就限制了研究者构建机器学习分类算法的训练集。以往的垃圾邮件等虚假信息往往都是广告,而社交媒体中的虚假评论和虚假信息基本没有任何直接的广告信息。因此,判定社交媒体的虚假信息的核心任务是如何尽可能提高虚假信息甄别的效率和准确率。

既往研究发现,利用情感倾向判定信息是否虚假,是一个有效的方法。

三、社会化媒体的情绪刻画与情绪传播

社交媒体即使没有任何非语言介质的存在,也能够成功进行情绪传播。情绪的积累与传染也可能引发大规模的群体事件。因此,探讨用于社交媒体的海量、精细、带有时间标号的文本数据为刻画描述用户的情感变化提供了宝贵的平台。

情绪传播有何种规律?研究发现,愤怒情绪更容易传播。用户的愤怒情绪与现实公共事件相关。此外,用户网络结构特征影响了情绪的传播。丽日,节点的度、聚类系数以及关系强度都正向促进了情绪的传播,特别是愤怒的传播。

不同类别的情绪与临近用户的相关性随着用户的网络距离迅速减小。更重要的是,愤怒和喜悦的相关性较悲伤和恶心两类情绪相关系数更高,尤以“愤怒”情绪相关系数最高。换言之,愤怒和喜悦情绪更容易传播。而相比较,愤怒比喜悦更容易传播。

第三节 Python进行情感分析

一、Textblob

Textblob是一个用于简单情感分析的程序包。它首选可以进行文本的预处理工作,即分词、语词标注、词频计算、名词词组的提取;同时该程序包也可以用来进行情感分析,如情感分类等。该程序包使用的情感分类方法主要是朴素贝叶斯算法和决策树法。该程序包可以进行简单的情感分析,即用户可以给定文本,该程序包可以利用语词匹配的方法来计算“极性”和“主观性”。同时,Textblob还可以实现语义的翻译。

from textblob import TextBlob
# python -m textblob.download_corpora
# import nltk
# nltk.download('punkt')

text = "I am happy today. I feel sad today."
blob = TextBlob(text)

for sentence in blob.sentences:
    print(sentence, sentence.sentiment)
I am happy today. Sentiment(polarity=0.8, subjectivity=1.0)
I feel sad today. Sentiment(polarity=-0.5, subjectivity=1.0)

如果punkt无法下载可以参考这位老哥的博客:解决nltk download(‘punkt‘) 连接尝试失败_wamg潇潇的博客-CSDN博客_nltk.download('punkt')

二、Snownlp

Snownlp的最大优势是能够处理中文文本内容。该程序包也能够实现中文文本分析中的预处理工作,例如,分词、词性标注、文本分类、提取文本关键词和摘要,以及对文本相似度的计算。该程序包加载了一些训练好的词典。这个程序包的一个优势是能够进行繁体简体转换,同时能够进行汉字和拼音间的转换。但是,需要注意的是,这些训练集数据的大部分是商品评价,因此,在情感分析任务中,对于在线产品评论等专有任务,准确度更好一些。

from snownlp import SnowNLP

text = '我今天很快乐。我今天很愤怒。'
s = SnowNLP(text)
for sentence in s.sentences:
    print(sentence, SnowNLP(sentence).sentiments)
我今天很快乐 0.971889316039116
我今天很愤怒 0.07763913772213482

与TextBlob不同的是,SnowNLP的情感Fenix取值为[0, 1]。0表示极端负面,1表示极端正面。

第四节 情感分析的基本算法

对于给定文本的情感分析,可以按照语词、句子与篇章分成三个不同的分析单位来进行情感分析。

一、语词的情感倾向判定

在不考虑语境的情况下,对于某个语词的情感倾向判定,最简单的方法是直接利用情感词典来确定。语词的情感倾向并非仅决定于字面意思,其更多的时候决定于语境的情感倾向,特别是本义为中性的语词。

点式互信息(PMI)利用语词的共生关系,比较两个语词共同出现的概率与其各自单独出现的概率,从而判定两个语词的出现是否是独立事件。利用这个原理,我们可以比较目标词汇与某一个已知的具有某种情感倾向的词汇的“互信息”联系,从而推断目标词汇的情感倾向。具体而言,这种算法的基本假设是,如果一个词语与一个已标注的词语共现的概率越高,这两个词语的情感倾向越接近。

值得说明的是,上下文目标词汇的情感倾向判定方法,也存在着一定的问题。如果对比词汇选择得不好,则会影响判断结果。例如,计算一个目标词汇与一个常用的表示正向情感的对比词汇的PMI指数,可能和该目标词汇与一个极端正面但不常用的词汇作为对比词汇的PMI指数,结论迥异。因此,对于词汇的选择直接影响了目标词汇的情感倾向判定。一个解决上述问题的办法是,研究者可以将最常用的停用词作为对比词汇。如果研究者利用某个停用词来计算PMI指数,在前期文本处理时则需要保留某个停用词。

PMI指数还可以创造性地用于对词汇在互联网中的情感倾向判定。PMI指数的利用给研究者一个启示,即如何创造性地利用已有的算法,来完成传播研究中的变量测量,是未来计算传播学的一个重要发展方向。

二、句子的情感分析:基于词典匹配的方法 

简单而言,基于词典匹配的情感分析方法主要通过匹配情感词典,确定给定文本中积极情感和消极情感词的比例,或者对不同情绪类别进行加总,从而判定给定文本的基本情感倾向。最简单的一种做法是对消极情感词汇和积极情感词汇进行简单加总,得分大于零即判断给定文本为积极情感,得分小于零即判断给定文本为负向情感。因此,情感词典是进行基于词典匹配的情感分析方法不可缺少的部分。

第一个中文情感词典是知网情感词典(以下简称HowNet)。它不仅仅是一个情感词典,还是“以汉语和英语的词语所代表的概念为描述对象,以揭示概念与概念之间以及概念所具有的属性之间的关系为基本内容的常识知识库”。

第二个中文情感词典是台湾大学简体中文情感极性词典(NTUSD)。NTUSD将情感简单分为2类,积极情感和消极情感。

第三个广泛使用的英文词典是LIWC。LIWC词库已经开发了不同的语言版本。

基于语词匹配的情感分析的基本步骤:首先我们需要对文档进行预处理,即分词。情感分析的分析单位基本可以分成三个层面:语词、句子和篇章。 

具体而言,首先利用情感词典判定给定文本语词的基本情感倾向,继而向前追溯否定词和程度副词。否定词的存在会改变一个句子的情感倾向,判定否定词的数量是进行情感分析不可缺少的一步。

程度副词会改变情感倾向的强烈程度。程度副词以及表示情感极性的标点符号加强了积极情感倾向的强度。一般而言,研究者可以将情感倾向按照程度副词进行加权。

三、句子的情感分析:有监督机器学习情感分类方法

上文讲了语词级别的情感分析。情感分析的算法的基本原理是“分类思想”,即将给定语料分成积极和消极,或者不同的情感类别。

对于分类问题,最有效率的解决方法主要来自机器学习方法,而情感分析问题可以转化为机器学习的分类问题。对于以机器学习为主要算法的情感分析,研究者首先需要对文本进行结构化预处理,即对文本进行分词、去除词根、去除停用词等。

在完成前期准备工作后,研究者随机抽取一定比例的文本集,进行人工情感标注。对于有监督机器学习方法,研究者需要人工构建训练集和测试集。这两个数据集都需要事先人工干预,即对文本进行“打标签”的工作。然后将数据集随机分成训练集和测试集,用于对后续算法的训练和准确度检测。

接下来进行特征选择。在进行文本情感分析的过程中,如果将给定文本的所有字词都纳入机器学习模型作为输入特征,会造成输入文本呈现为高维稀疏矩阵,不仅计算量非常大,大量的缺失值也会降低计算精度。因此,我们一般需要进行特征选择,即利用互信息算法、卡方算法等方法,提取具有识别度的语词——而非纳入全部语词,进入机器学习模型。

有监督机器学习情感分类算法的第四步是选择情感分类算法。将人工分类结果交给计算机算法,让计算机来进行“学习”,随后利用学习好的算法,对独立测试集数据进行试分类和验证。

最后一步是模型预测,即比对利用某个机器学习分类算法预测的测试集中每个文档的情感所属类别与人工标注的情感类别的差距、计算正确率。当准确率达到要求时,可将训练好的算法用于更大规模的数据,进行分类。

一个好的分类结果取决于两个重要指标:准确率和召回率。这两个指标的提高,主要取决于三个因素:第一,训练集样本的准确性。训练集样本的准确性对于机器学习至关重要。训练集样本的“打标签”的过程,其本质就是传统的传播学研究的“编码”过程,编码的准确性会直接影响机器学习的效果。从这个意义上说,机器学习或者更宽泛的“大数据”研究,并非不需要人工介入;相反,其需要更为精准的人为判断,来指导算法。第二,训练集的样本量大小。样本量的大小决定了是否尽可能广泛地覆盖了文本和语词。第三个条件是hi分类算法的恰当性。根据具体的分析任务,研究者需要选择一种计算量小、正确率高的算法。一般而言,对社会科学研究者而言,最方便、经济的方法是通过Python、R等程序软件直接调用已有的广泛使用的方法,来完成任务。

1.特征提取

特征提取的核心任务是选择将训练集中每个类别具有代表性的词汇纳入分类算法中。有两种在情感分析任务中广泛应用的特征提取方法,即互信息算法和卡方算法。

(1)互信息算法。互信息算法测量的是一个语词的出现对于给定类别判断所贡献的信息量。换言之,互信息越高的语词,其存在越能够提高该类别正确判断的概率。

如果某个语词在某个特别类别出现频率非常高,而在其他类别出现频率很低,则该语词与该类别的互信息比较大。因此互信息算法能够显示某一个语词“属于”该类别的程度。

(2)卡方算法。卡方算法旨在量化某个词汇与某个类别的出现概率是否是独立的。具体而言,卡方测量了期望值E和观测值N偏离的程度。这个偏离程度表示了一个语词对于某个类别的重要性。

有卡方公式可以发现,卡方值计算的是期望值与观测值的偏离程度。偏离程度越大,卡方值越大。

 2.朴素贝叶斯算法

朴素贝叶斯算法是文本分析和机器学习中一个最基本的分类算法,其不仅可以用于文本的情感倾向分类,还可以用于一般性的分类问题。朴素贝叶斯算法基于给定训练集中每个案例的确定分类,即计算每个词在每个类别中的比重。对于由上述语词组成的新的文本,朴素贝叶斯算法可以用来确定每个新的文本所属的类别。

利用朴素贝叶斯算法进行情感分析分类,还需要对该算法的准确率进行判定。研究者需要人工判定一部分文档,其中一部分作为训练集,来进行算法的训练,并判定分类的准确率。在朴素贝叶斯算法中,一个高质量的训练集能够准确估算出每个语词在每个类别中的概率。继而研究者可以将训练结果用于测试集。测试集同样是已经经过人工判定的文本集。利用贝叶斯分类算法算出的分类结果与人工标注结果比对,从而计算贝叶斯分类算法的正确率。

只有在测试集数据中达到一定的准确率,该算法才能够被用于进一步大规模进行文本的情感分类。因此,对于一个给定的情感分析任务,研究者需要三个数据集:训练集、测试集以及未经人工分类的文本。需要强调的是,训练集和测试集二者必须独立。如果用训练集同时作为测试集,就好比考试作弊。算法需要通过一个独立的样本集测试,才能被用于海量文本进行情感分类。

基于Python的贝叶斯算法情感分类代码编写:

第一步,加载贝叶斯分类器。

from textblob.classifiers import NaiveBayesClassifier

第二步,载入或者构建训练集。

train = [
    ('I love this car', 'pos'),
    ('This view is amazing', 'pos'),
    ('I feel great', 'pos'),
    ('I am so excited about the concert', 'pos'),
    ('He is my best friend', 'pos'),
    ('I do not like this car', 'neg'),
    ('This view is horrible', 'neg'),
    ('I feel tired this morning', 'neg'),
    ('I am not looking forward to the concert', 'neg'),
    ('He is an annoying enemy', 'neg')
]

第三步,构建测试集。

test = [
    ('I feel happy this morning', 'pos'),
    ('Oh I love my friend', 'pos'),
    ('not like that man', 'neg'),
    ('this house is not great', 'neg'),
    ('your song is annoying', 'neg')
]

第四步,对训练集进行机器学习,确定每一个语词在每一个类别中的概率。

cl = NaiveBayesClassifier(train)

第五步,对测试集进行分类。

for sentence in test:
    print(sentence[0], ': ', cl.classify(sentence[0]))
I feel happy this morning :  neg
Oh I love my friend :  pos
not like that man :  neg
this house is not great :  neg
your song is annoying :  neg

第六步,输出贝叶斯情感分类算法的正确率。

print('accuracy is:', cl.accuracy(test))
accuracy is: 0.8

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器人学导论第三章是关于矩阵和向量运算的内容。MATLAB是一种常用的数学软件,用于进行矩阵和向量的计算和处理。以下是该章的一些MATLAB习题解答: 1. 假设有两个向量A=[1, 2, 3]和B=[4, 5, 6],求它们的点积和叉积。 解答: ``` A = [1, 2, 3]; B = [4, 5, 6]; dot_product = dot(A, B); cross_product = cross(A, B); ``` 2. 定义一个3x3的单位矩阵。 解答: ``` I = eye(3); ``` 3. 计算以下矩阵的乘积: ``` A = [1, 2, 3; 4, 5, 6; 7, 8, 9] B = [9, 8, 7; 6, 5, 4; 3, 2, 1] ``` 解答: ``` product = A * B; ``` 4. 对以下矩阵进行转置和求逆: ``` A = [1, 2, 3; 4, 5, 6; 7, 8, 9] ``` 解答: ``` transpose = transpose(A); inverse = inv(A); ``` 通过在MATLAB中使用这些函数,可以方便地进行矩阵和向量运算,用于机器人学中的计算和分析。 ### 回答2: 机器人学导论第三章的MATLAB习题主要涉及机器人的运动学以及转换矩阵的计算。以下是一些示例习题的解答: 1. 已知机器人 DH 坐标系参数为:a = [0, 1, 1, 0.5], alpha = [0, 0, 0, 0], d = [0, 0, 0, 1], theta = [0, pi/2, -pi/2, 0],请编写 MATLAB 代码计算机器人从基座标系到末端执行器坐标系的正运动学变换矩阵。 解答: ```MATLAB a = [0, 1, 1, 0.5]; alpha = [0, 0, 0, 0]; d = [0, 0, 0, 1]; theta = [0, pi/2, -pi/2, 0]; n = length(a); T = eye(4); % 初始化变换矩阵为单位矩阵 for i = 1:n % 计算当前关节的变换矩阵 A = [ cos(theta(i)), -sin(theta(i))*cos(alpha(i)), sin(theta(i))*sin(alpha(i)), a(i)*cos(theta(i)); sin(theta(i)), cos(theta(i))*cos(alpha(i)), -cos(theta(i))*sin(alpha(i)), a(i)*sin(theta(i)); 0, sin(alpha(i)), cos(alpha(i)), d(i); 0, 0, 0, 1 ]; % 更新总的变换矩阵 T = T * A; end T % 输出正运动学变换矩阵 ``` 2. 对于一个平面二自由度机器人,其末端执行器的位置分别为 x = t, y = sin(t),请编写 MATLAB 代码绘制机器人的末端执行器的轨迹。 解答: ```MATLAB t = 0:0.01:10; % 时间范围 x = t; % x 轴位置 y = sin(t); % y 轴位置 figure; plot(x, y, 'b-'); % 绘制蓝色曲线 hold on; plot(x(1), y(1), 'ro'); % 标记起始点为红色 plot(x(end), y(end), 'go'); % 标记结束点为绿色 xlabel('x'); ylabel('y'); title('末端执行器轨迹'); grid on; ``` 以上是机器人学导论第三章MATLAB习题的部分示例解答。通过编写代码并求解习题,我们可以学习和掌握机器人的运动学以及MATLAB 在机器人学中的应用。 ### 回答3: 机器人学导论第三章为matlab习题,故需要使用matlab编程进行解答。以下是针对这些习题的简要回答。 第一题要求使用matlab计算机器人坐标系的旋转矩阵。可以使用matlab内置函数`rotx`、`roty`和`rotz`来分别计算绕x、y和z轴的旋转矩阵。通过调用这些函数,并输入相应的角度,即可计算得到机器人坐标系的旋转矩阵。 第二题是关于转换矩阵的计算。题目给出了机器人的DH参数,并要求计算机器人末端执行器的位姿。可以先使用`dh2matrix`函数将DH参数转化为转换矩阵,然后通过乘法运算将各个转换矩阵相乘得到末端执行器的位姿矩阵。 第三题是关于通过已知机器人结构的转换矩阵和末端执行器的位姿,求解机器人的关节角度。可以使用matlab内置函数`matrix2dh`将已知机器人结构的转换矩阵转化为DH参数,然后通过反解DH参数和末端执行器的位姿,即可求解出机器人的关节角度。 这些习题要求对matlab编程语言有一定的了解,并且熟悉机器人学中的基本概念与原理。解答这些习题可以帮助加深对机器人学的理解,并且提高matlab编程的能力。同时,这些习题也可以为以后的机器人学研究与实践提供基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值