自然语言处理 学习笔记(三)

个人学习nlp笔记:学习材料CS124、COSC572和《Speech and Language Processing》第三版

在这里插入图片描述

自然语言处理 学习笔记(三)

  • 1.朴素贝叶斯
    • 1.1 朴素贝叶斯推导
    • 1.2 朴素贝叶斯训练
    • 1.3朴素贝叶斯和语言模型
    • 1.4效果评估:Precision,Recall, F-measure & accuracy
    • 1.5 实践经验
    • 1.6 模型比较的统计检验
    • 1.7 特征选择
  • 2.情感分析
    • 2.1 情绪词汇(sentiment lexicons)
    • 2.2 句子中的情绪(sentiment)
      • 2.2.1 寻找情绪的目标
      • 2.2.2 Goldenson 算法
      • 2.2.3 实践上的细节
    • 2.3 情感词汇学习
      • 2.3.1 一个半监督学习方法
      • 2.3.2 Turney 算法
    • 2.4 其他的情绪任务
    • 2.5 一个baseline算法
      • 2.5.1 Tokenization
      • 2.5.2 Feature Extraction
      • 2.5.3 伯努利(布尔型)朴素贝叶斯
      • 2.5.5 一些无法解决的问题

1.朴素贝叶斯

本质上就是机器学习中的监督学习的分类方法,情感是否正向(0或1)就是我们所预测 y ^ \hat{y} y^等等等等
自然语言处理 学习笔记(三)_第1张图片

1.1 朴素贝叶斯推导

本文提到的是multinomial 朴素贝叶斯,即特征向量不是连续的,是0~x的整数。其中的特征向量其实就是词袋向量(bag-of-words),即每个单词在一篇文章或句子中的计数组成的一维向量。
自然语言处理 学习笔记(三)_第2张图片
P ( d ) P(d) P(d)是参数,省略
自然语言处理 学习笔记(三)_第3张图片
在这里插入图片描述
自然语言处理 学习笔记(三)_第4张图片
最大后验的贝叶斯和朴素贝叶斯分类器
自然语言处理 学习笔记(三)_第5张图片
自然语言处理 学习笔记(三)_第6张图片

1.2 朴素贝叶斯训练

先验 P ( c ) P(c) P(c)等于类别c出现的概率
自然语言处理 学习笔记(三)_第7张图片

假定 P ( w i ∣ c ) P(w_{i}|c) P(wic)是独立的,则likelihood P ( w i ∣ c ) P(w_{i}|c) P(wic)等于在c类中,单词 w i w_{i} wi出现的概率(出现的次数处以c类中出现的所有单词次数合)
自然语言处理 学习笔记(三)_第8张图片

朴素贝叶斯中的Laplace平滑:
自然语言处理 学习笔记(三)_第9张图片

下面是简化版流程和伪代码
自然语言处理 学习笔记(三)_第10张图片
自然语言处理 学习笔记(三)_第11张图片

1.3朴素贝叶斯和语言模型

朴素贝叶斯有点像多个unigram,以情感positive或者negative为例子,就像训练了一个 L M n e g LM_{neg} LMneg和一个 L M p o s LM_{pos} LMpos,如果 L M n e g LM_{neg} LMneg的概率较大,则句子的情感被分为negative
自然语言处理 学习笔记(三)_第12张图片
自然语言处理 学习笔记(三)_第13张图片

我们也可以使用词袋模型的子空间(去掉很多诸如I,and等中性词),不过词袋模型丢失了很多信息,比如词在原文中的位置等等。
自然语言处理 学习笔记(三)_第14张图片
自然语言处理 学习笔记(三)_第15张图片

1.4效果评估:Precision,Recall, F-measure & accuracy

以二分类问题为例:
自然语言处理 学习笔记(三)_第16张图片
contingency table -> 列联表
gold label -> 人类给定的标签,也就是所谓正确的label
false positive -> select as positive falsely

在一些例子中,比如判断一个词是不是一个鞋的品牌名字,这种情况下,可能我们99.9%的词都不是鞋的品牌(eg.1000个词,只有十个positive的),那我们岂不是所以都标“negative”,那准确率也有99.9%了?所以此时就应该考虑召回率或准确度,在这个例子中:
R e c a l l = # o f   p o s i t i v e   t r u e l y # o f   ( p o s i t i v e   t r u e l y + n e g a t i v e   f a l s e l y ) = 0 0 + 10 = 0.0 % Recall = \frac{\# of\ positive\ truely}{\# of\ (positive\ truely+negative\ falsely)} = \frac{0}{0+10}=0.0\% Recall=#of (positive truely+negative falsely)#of positive truely=0+100=0.0%
P r e c i s i o n = # o f   p o s i t i v e   t r u e l y # o f   ( p o s i t i v e   t r u e l y + p o s i t i v e   f a l s e l y ) = 0 0 + 0 = e m m m m Precision= \frac{\# of\ positive\ truely}{\# of\ (positive\ truely+positive\ falsely)} = \frac{0}{0+0}= emmmm Precision=#of (positive truely+positive falsely)#of positive truely=0+00=emmmm
换个例子
分类器选出来40个positive,其中8个正确

gold positive gold negative
system positive 8 32
system negative 2 958

此时
R e c a l l = # o f   p o s i t i v e   t r u e l y # o f   ( p o s i t i v e   t r u e l y + n e g a t i v e   f a l s e l y ) = 8 8 + 2 = 80.0 % Recall = \frac{\# of\ positive\ truely}{\# of\ (positive\ truely+negative\ falsely)} = \frac{8}{8+2}=80.0\% Recall=#of (positive truely+negative falsely)#of positive truely=8+28=80.0%
P r e c i s i o n = # o f   p o s i t i v e   t r u e l y # o f   ( p o s i t i v e   t r u e l y + p o s i t i v e   f a l s e l y ) = 8 8 + 32 = 20.0 % Precision= \frac{\# of\ positive\ truely}{\# of\ (positive\ truely+positive\ falsely)} = \frac{8}{8+32}= 20.0\% Precision=#of (positive truely+positive falsely)#of positive truely=8+328=20.0%

Recall和Precision之间存在一种权衡的关系,增加Recall的同时Precision会降低,所以我们可以用F-score,一个recall和precision的结合(调和平均)来计算

自然语言处理 学习笔记(三)_第17张图片
自然语言处理 学习笔记(三)_第18张图片

调和平均是一个比较保守的评估方法,对比于算术平均,其的值会更接近两个数中比较小的那个,所以其给Recall和Precion中比较小的那个更大的权重。

多分类问题:
自然语言处理 学习笔记(三)_第19张图片
自然语言处理 学习笔记(三)_第20张图片

使用microaverage和macroaverage使数据更直观:
macroaverage是从宏观角度上,总和,再求准确度,而microaverage是按每个类求准确度再平均
自然语言处理 学习笔记(三)_第21张图片

交叉验证:
自然语言处理 学习笔记(三)_第22张图片

1.5 实践经验

朴素贝叶斯很适合小数据,而且即使在这样的情况下也不会过拟合
自然语言处理 学习笔记(三)_第23张图片

数据量合适时候
自然语言处理 学习笔记(三)_第24张图片
数据量足够时,分类器的影响不大
自然语言处理 学习笔记(三)_第25张图片

不同领域的特征和术语的处理也很重要,而词干提取帮助不大。给与比如标题等更大的权重也是不错的选择
自然语言处理 学习笔记(三)_第26张图片
part number 零件号码

1.6 模型比较的统计检验

我们可以通过macro-averaged F1进行比较,看那个得分高,但是你不知道是不是因为test分割的巧合,导致其恰巧准确率高,所以我们可以引入统计学的方法来检验。模型A和B的分类结果的差为 δ ( x ) \delta(x) δ(x),为了验证这个 δ ( x ) \delta(x) δ(x)大概率不是靠运气的,我们用统计推断方法。

我们可以使用一种非参的方法,bootstrap 检验。bootstrapping 这个词指的是从原始的大样本中反复地有放回地抽取大量较小的样本。引导测试的直观性在于,我们可以通过重复地从观察到的测试集中进行采样来创建许多虚拟(virtual)测试集。该方法假设样本代表总体。

intuition就是若随机样本的准确率差大于 δ ( x ) \delta(x) δ(x),则我们拒绝原假设,并且高概率(1-p值)下,认定我们的 δ ( x ) \delta(x) δ(x)不是一个随机的,偶然的结果。
自然语言处理 学习笔记(三)_第27张图片

比如,每次从test set在随机抽10个,用AB两个模型进行比较,得到A和B两个模型在b轮分类的准确性的差。
自然语言处理 学习笔记(三)_第28张图片

因为我们是从训练集中抽样,所以我们得到的模型A和模型B的分类准确率差 δ ( x ∗ ( i ) ) \delta(x^{*(i)}) δ(x(i))和在整个测试集中得到的 δ ( x ) \delta(x) δ(x)相近或说散布在其周围,即大约有一半的A能超过B, δ ( x ) \delta(x) δ(x)大小的准确率。然后 δ ( x ∗ ( i ) ) − δ ( x ) \delta(x^{*(i)})-\delta(x) δ(x(i))δ(x)(中心化),再进行比较,也就是看是否 δ ( x ∗ ( i ) ) − δ ( x ) > δ ( x ) \delta(x^{*(i)})-\delta(x)>\delta(x) δ(x(i))δ(x)>δ(x)或者说,是否 δ ( x ∗ ( i ) ) > 2 δ ( x ) \delta(x^{*(i)})>2\delta(x) δ(x(i))>2δ(x)
自然语言处理 学习笔记(三)_第29张图片

至于为什么是 δ ( x ) \delta(x) δ(x)而不是0什么的…作者这么解释的, δ ( x i ) \delta(x^{i}) δ(xi)是对称且其的均值为 δ ( x ) \delta(x) δ(x)是,这样就等于 δ ( x i ) < 0 \delta(x^{i})<0 δ(xi)<0…emmmmm…不懂。这tm,怎么想都是对称啊。。因为是有对称界的区间,而且有均值$\delta(x)。

从直觉试着解释。。这应该是个枢轴量置信区间,也就是原假设不是高斯分布,不能用方差来规划置信区间,直接由 α \alpha α的分位数计算。好像挺可能是这样的
自然语言处理 学习笔记(三)_第30张图片

自然语言处理 学习笔记(三)_第31张图片

具体的过程:

自然语言处理 学习笔记(三)_第32张图片

1.7 特征选择

可以使用类似决策树中信息增益的方法来挑选
自然语言处理 学习笔记(三)_第33张图片

2.情感分析

书:J+M (3ed) Chapter 19, "Lexicons for Sentiment, Affect, and Connotation" pages 1-6 plus section 19.6 (pages 14-15)

看法的好坏是最常见的一个研究,其的发出者,接收者,何种态度都很关键。
自然语言处理 学习笔记(三)_第34张图片
由易至难的情绪分析
自然语言处理 学习笔记(三)_第35张图片

2.1 情绪词汇(sentiment lexicons)

每个词可能都代表着不同的情感色彩

本节介绍了几种情绪词汇的数据集:
①The General Inquirer
②LIWC
③MPQA
④Bing Liu opinion lexicons
自然语言处理 学习笔记(三)_第36张图片

自然语言处理 学习笔记(三)_第37张图片
自然语言处理 学习笔记(三)_第38张图片

自然语言处理 学习笔记(三)_第39张图片

自然语言处理 学习笔记(三)_第40张图片

这些词库不仅有重叠,而且在一些字词上有着不同的意见
自然语言处理 学习笔记(三)_第41张图片

在IMDB评论集里分析词的两面性,其实也就是不同评价(评分或星数)中出现的概率
自然语言处理 学习笔记(三)_第42张图片
自然语言处理 学习笔记(三)_第43张图片

再看看逻辑否定词no, not, never,果然也是在低评分上出现的频繁
自然语言处理 学习笔记(三)_第44张图片

自然语言处理 学习笔记(三)_第45张图片

2.2 句子中的情绪(sentiment)

2.2.1 寻找情绪的目标

感觉sentiment翻译成观点更好些。

上文主要说了一段话的正负情感,这里介绍了句子中的情感分析,比如找到下面这句话的情感,和这个情感是对谁的(food还是service),比如food->great,service->awful,显然更微观。
自然语言处理 学习笔记(三)_第46张图片
可以根据频繁出现的短语和基于规则来找到target也就是情绪针对的词,比如great fish tacos, fish tacos在great(情感词)后,所以fish tacos很可能是一个目标(target)或者,比如短语fish tacos经常在这段话里,说明其很可能是target
自然语言处理 学习笔记(三)_第47张图片

如果我们做一个很有针对性的任务,比如做酒店的评论训练,我们可以提前指定target再找哪句话和哪个target有关。这时候我们可以加入一个监督学习分类器,以hotel为例子,看是否这个句子/短语/从句能被归类到food,serviece…或者None(也就是他说不定只是瞎扯没提到具体的),而restaurant这是我们已知的条件,我们针对这个类型的评论做数据集,再训练分类器
自然语言处理 学习笔记(三)_第48张图片

2.2.2 Goldenson 算法

Goldenson 算法:
①爬取评论,抽取文本进行预处理,获得句子和短语。
②使用情绪分类器识别是positive还是negative
③看这个句子和哪个特征短语有关(前文的target,也就是hotel例子中的food)并合并food +; decor -;
④总结
自然语言处理 学习笔记(三)_第49张图片
结果
自然语言处理 学习笔记(三)_第50张图片

2.2.3 实践上的细节

如果获得的正负情绪评论很不平均,如10w个positive但是只有1w个negative的,可以用F-score做评价,也可以随机的欠采样,使得近似;或者用代价敏感学习,比如分错了就给分类器更高的惩罚等等。
自然语言处理 学习笔记(三)_第51张图片

如果我们的评价是有打分的,比如0到7分,我们可以设其一半边界,把分数映射到二分类的好和坏(如大于3.5就算好),或者是线性或者序数回归,也可以用特殊的模型,比如metric labeling。
不过如果是1-7的打分,是不是应该标准化,毕竟这个开头为1而不为0
自然语言处理 学习笔记(三)_第52张图片
总结:
自然语言处理 学习笔记(三)_第53张图片

2.3 情感词汇学习

2.3.1 一个半监督学习方法

可以通过semi-supervised的方法来学习,bootstrap感觉和决策树中的有些不同,查了查,其英文含义为自助产生,所以…emmm, make sense
自然语言处理 学习笔记(三)_第54张图片
intuition:出现and的就算同一属性,出现but的就算相反的
自然语言处理 学习笔记(三)_第55张图片
第一步:手工进行分类
自然语言处理 学习笔记(三)_第56张图片
第二部,输入was adj and 看谷歌或其他语料库关联出来什么(关联出来的形容词就是adj的情感同向词)
自然语言处理 学习笔记(三)_第57张图片
第三部,用共同出现的次数来表示出词的情感情绪的相似度
自然语言处理 学习笔记(三)_第58张图片
第四部,进行聚类
自然语言处理 学习笔记(三)_第59张图片
结果,不过显然还是有挺多错误。
自然语言处理 学习笔记(三)_第60张图片

2.3.2 Turney 算法

自然语言处理 学习笔记(三)_第61张图片
第一步,提取符合这些条件的phrase(短语)特征,JJ:形容词,NN:名词单数,NNS:名词复数,RB\RBR\RBS:副词副词比较级和副词最高级
RBR就是比如 I run faster than you中的faster,RBS就是I do best in this project 的best。
VB,VBD,VBN,VBG动词、动词过去式,完成时,现在时

这属于part of speech中的内容,也就是词性判断,以后才讲到,这里都是提取修饰或能表达情绪的词
自然语言处理 学习笔记(三)_第62张图片

第二步,计算词组的极性(偏好偏坏)
这个方法的intuition就是在负面短语与poor共同出现的频率高,而正面的与excellent出现频率高,我们可以用逐点的互信息(PMI)计算
自然语言处理 学习笔记(三)_第63张图片
PMI是用来测量两个变量相关性的,从公式上理解,若在x的条件下, p ( x ) > 0 p(x)>0 p(x)>0时,
P M I = l o g 2 p ( x , y ) p ( x ) p ( y ) = l o g 2 p ( y ∣ x ) p ( y ) PMI=log_{2}\frac{p(x,y)}{p(x)p(y)}=log_{2}\frac{p(y|x)}{p(y)} PMI=log2p(x)p(y)p(x,y)=log2p(y)p(yx)
以good和like为例子, p ( l i k e ) > 0 p(like)>0 p(like)>0时候
l o g 2 p ( g o o d ∣ l i k e ) p ( g o o d ) log_{2}\frac{p(good|like)}{p(good)} log2p(good)p(goodlike)
若good和like经常一起出现,则数值就大,而若两个字符从不一起出现,就是0
加个正 ϵ \epsilon ϵ), l o g 2 log_{2} log2就是信息论中转成bits计数

x ⊂ y x\subset{y} xy时, p ( x ∣ y ) p(x|y) p(xy)会小于 p ( x ) p(x) p(x),若 x y = ∅ xy=\varnothing xy=,则为0,也就 p ( x ∣ y ) < p ( x ) p(x|y)<p(x) p(xy)<p(x)

自然语言处理 学习笔记(三)_第64张图片
hits就是出现次数
自然语言处理 学习笔记(三)_第65张图片
一些baby math
自然语言处理 学习笔记(三)_第66张图片

在点赞和踩中的结果
自然语言处理 学习笔记(三)_第67张图片

自然语言处理 学习笔记(三)_第68张图片
结果还不错,而且能得到专业相关的信息(获得的phrase)
自然语言处理 学习笔记(三)_第69张图片

使用更多的(比起excellent和poor),filter就是把一些明显错误的例子剔除
自然语言处理 学习笔记(三)_第70张图片
自然语言处理 学习笔记(三)_第71张图片

2.4 其他的情绪任务

自然语言处理 学习笔记(三)_第72张图片
自然语言处理 学习笔记(三)_第73张图片

可以用在相亲啥的(speed dates)
在这里插入图片描述

2.5 一个baseline算法

自然语言处理 学习笔记(三)_第74张图片

2.5.1 Tokenization

Tokenization 中可能遇到的麻烦:
其中的颜文字/表情也是同样需要处理,因为同样传递了一定的信息
自然语言处理 学习笔记(三)_第75张图片

2.5.2 Feature Extraction

特征提取中,如何处理否定词(negation)非常关键,不然一个isn’t good只被抓到一个good就放进positive就尴尬了。
自然语言处理 学习笔记(三)_第76张图片
一个处理方法就是,创造一个前面加个NOT_的新词,把标点前和否定词后的词全都改为这个形式。
自然语言处理 学习笔记(三)_第77张图片

2.5.3 伯努利(布尔型)朴素贝叶斯

有一些情况下,文字的出现与否要比出现多少次更加重要,这就是伯努利朴素贝叶斯的intuition。其中,我们把所有非零计数改为1
自然语言处理 学习笔记(三)_第78张图片

自然语言处理 学习笔记(三)_第79张图片

其与普通的朴素贝叶斯对比:
自然语言处理 学习笔记(三)_第80张图片
自然语言处理 学习笔记(三)_第81张图片

但是在其他文本任务中,伯努利型的就不大行了,同时, l o g ( f r e q ( w ) ) log(freq(w)) log(freq(w))来处理词频也是一种可行的方法
自然语言处理 学习笔记(三)_第82张图片

2.5.5 一些无法解决的问题

语言是很巧妙的,比如第一个评论偏负面,但是没有负面的词,而是用比较形象生动甚至有些讽刺的方法来给差评,这就很难识别出来
自然语言处理 学习笔记(三)_第83张图片

自然语言处理 学习笔记(三)_第84张图片

你可能感兴趣的:(自然语言处理入门,自然语言处理)