斯坦福大学自然语言处理第七课“情感分析(Sentiment Analysis)”

斯坦福大学自然语言处理第七课“情感分析(Sentiment Analysis)”,第1张

<article>

课程地址: https://classcourseraorg/nlp/lecture/31

情感分析 (Sentiment analysis)又可以叫做

意见抽取 (Opinion extraction)

意见挖掘 (Opinion mining)

情感挖掘 (Sentiment mining)

主观分析 (Subjectivity analysis)等等。

引用的论文:

Bo Pang, Lillian Lee, and Shivakumar Vaithyanathan 2002 Thumbs up Sentiment Classification using Machine Learning Techniques EMNLP-2002, 79—86

Bo Pang and Lillian Lee 2004 A Sentimental Education: Sentiment Analysis Using Subjectivity Summarization Based on Minimum Cuts ACL, 271-278

另外需注意,Binarized (Boolean feature) Multinomial Naïve Bayes不同于Multivariate Bernoulli Naïve Bayes,MBNB在文本情感分析上的效果并不好。另外课中也提到可以用交叉验证的方式进行训练验证。

下面罗列了一些比较流行的词典:

当我们拿到一个词我们如何判断他在每个类别中出现的概率呢?以IMDB影评为例

但是!我们不能用单纯的原始计数(raw counts)方法来进行打分,如下图

可以看出,这些否定词同样可以作为单词极性的一个判断依据。

具体步骤为:

联合概率 / 独立的两个概率乘积

之后我们可以看一下统计结果,分别来自于用户好评和差评的统计:

可以看到极性划分的还不错

</article>

</main>

转自csdn

自然语言处理(NLP)在旅游领域具有广泛的应用,其中之一是情感分析。情感分析是指通过计算机程序来识别文本中的情感倾向,分析人们对旅游目的地、酒店、餐厅、交通工具等的评价。这种技术可以帮助旅游公司、酒店、餐厅等机构了解消费者的需求和喜好,改善服务质量和提高客户满意度。

一个典型的旅游情感分析应用是在线评论分析。在线评论是消费者对旅游目的地、酒店、餐厅等的反馈,通过使用 NLP 技术,旅游公司和酒店等机构可以分析这些评论,了解消费者对服务质量、位置、价格、餐饮等的看法。这些信息可以帮助他们改善服务质量、提高客户满意度。

另一个应用是社交媒体情感分析。社交媒体是消费者展示旅游经历的主要渠道,通过使用 NLP 技术,旅游公司和酒店等机构可以分析消费者在社交媒体上发布的文本、和视频,了解消费者对旅游目的地、酒店、餐厅等的感受。这些信息可以帮助他们改善服务质量、提高客户满意度、扩大品牌知名度。

                                   

此外,NLP还可以用于预测未来趋势,通过分析历史数据来预测旅游需求、价格趋势等,进而帮助旅游公司和酒店等机构调量、提高客户满意度。

NLP技术还可以用于语音识别和语音合成,在旅游领域中应用于语音导航、语音查询等场景。例如,旅游公司可以开发一款语音导航应用,让游客在旅游中使用语音命令来获取信息和导航。

总之,NLP在旅游领域有着广泛的应用,它可以帮助旅游公司、酒店、餐厅等机构了解消费者的需求和喜好,改善服务质量和提高客户满意度。通过使用NLP技术,旅游行业可以更好地了解客户,并提供更好的服务和体验。

包括构建情感规则、表示语义标记和属性、构建情感相关性规则和使用独立的混合模型,自动识别文本中的情感,并将情感简化为高兴、不高兴和中立三种[2]。同年,Jon oberlander开始使用个人博客语

1、大数据情感分析是指利用大数据技术和自然语言处理技术,对海量的文本数据进行分析和挖掘,从中提取出文本中所包含的情感信息,

2、情感分析的主要目的是通过计算机技术和语言学知识,帮助人们更好地理解和分析大量的文本数据,并从中挖掘出有用的信息。

google在2018年10月底公布BERT在11项nlp任务中的卓越表现,NLP任务的两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩,包括将GLUE基准推至804%(绝对改进76%),MultiNLI准确度达到867% (绝对改进率56%)等,此后,BERT(Bidirectional Encoder Representation from Transformers)就成为NLP领域大火、整个ML界略有耳闻的模型。

BERT的出现,彻底改变了预训练产生词向量和下游具体NLP任务的关系,提出龙骨级的训练词向量概念。

词向量,就是用一个向量的形式表示一个词。

(1)one-hot编码:词的符号化。

(2)词的分布式表示:词的语义由其上下文决定。以(CBOW)为例,如果有一个句子“the cat sits one the mat”,在训练的时候,将“the cat sits one the”作为输入,预测出最后一个词是“mat”。分布式表示的较大优点在于它具有非常强大的表征能力,比如n维向量每维k个值,可以表征k的n次方个概念。

其中,词嵌入就是分布式表示的一种:基于神经网络的分布表示一般称为词向量、词嵌入( word embedding)或分布式表示( distributed representation)。核心依然是上下文的表示以及上下文与目标词之间的关系的建模。本质:词向量是训练神经网络时候的隐藏层参数或者说矩阵。

两种训练模式:CBOW (Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model)

NLP任务分成两部分,一是预训练产生词向量,二是对词向量操作实现特定功能。而词向量模型是一个工具,可以把抽象存在的文字转换成可以进行数学公式操作的向量,而对这些向量的操作,才是NLP真正要做的任务。从word2vec到ELMo到BERT,做的其实主要是把下游具体NLP任务的活逐渐移到预训练产生词向量上。

(1)word2vec:上下文概率的一种表示,但无法对一词多义进行建模

(2)ELMo:用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。

在预训练好这个语言模型之后,ELMo就是根据下面的公式来用作词表示,其实就是把这个双向语言模型的每一中间层进行一个求和。最简单的也可以使用最高层的表示来作为ELMo。

然后在进行有监督的NLP任务时,可以将ELMo直接当做特征拼接到具体任务模型的词向量输入或者是模型的最高层表示上。总结一下,不像传统的词向量,每一个词只对应一个词向量,ELMo利用预训练好的双向语言模型,然后根据具体输入从该语言模型中可以得到上下文依赖的当前词表示(对于不同上下文的同一个词的表示是不一样的),再当成特征加入到具体的NLP有监督模型里。

(3)bert

word2vec——>ELMo:

 结果:上下文无关的static向量变成上下文相关的dynamic向量,比如苹果在不同语境vector不同。

 操作:encoder操作转移到预训练产生词向量过程实现。

ELMo——>BERT:

 结果:训练出的word-level向量变成sentence-level的向量,下游具体NLP任务调用更方便,修正了ELMo模型的潜在问题。

 操作:使用句子级负采样获得句子表示/句对关系,Transformer模型代替LSTM提升表达和时间上的效率,masked LM解决“自己看到自己”的问题。

(1)bert模型证明了双向预训练对于语言表示的重要性。与采用单向语言模型进行预训练的模型不同,BERT使用masked language models 进行预训练的深层双向表示。

(2)经过预训练的模型表示解决了许多为特定任务而设计架构的需要。BERT是第一个基于微调的表示模型,它在一系列句子级和词级别的任务上实现了最先进的性能,优于许多具有特定任务架构的系统。

bert架构由两步实现:预训练和模型微调;在预训练阶段,基于无标注数据通过多轮预训练任务完成。在微调阶段,bert模型由预训练的参数进行初始化,然后由待下游的任务数据进行参数微调。

bert模型是多层双向transformer编码器。将层的数量(Transformer blocks)表示为L,隐藏的大小表示为H,而self-attention heads 为A。在所有的情况下,我们将feed-forward/filter大小设置为4H,即H=768时,为3072, H=1024时,为4096

bert的两种格式:

BERTBASE : L=12, H=768, A=12, Total Parameter=110M,

BERTLARGE : L=24, H=1024, A=16, Total Parameters=340M

为了使用bert可以应对各式各样的下游任务,bert的输入为token序列,它可以表示一个句子或句子对(比如对话)。使用该方案,输入可以是任意跨度的相邻文本,即一个token序列可以是单个句子,也可以是多个句子。

具体地说,bert使用30000个词的词级别的embeddings。每个序列的起始token是[CLS]。句子对被打包在一个序列中,用两种方式区别句子。方法一,使用特殊token[SEP];方法二,在每个标记中添加一个学习过的嵌入,表示它是属于句子A还是句子B。

两个无监督任务对BERT进行训练。

任务一:Masked LM语言模型。

为了训练双向表示模型,随机按百分比的方式(一般选15%)屏蔽输入序列中的部分词,然后预测那些屏蔽词。在这种情况下,屏蔽词的最终隐向量经softmax运算后输出。有点类似于中文的完形填空。

虽然如些操作可以获得一个双向的预训练模型,但这在预训练和微调之间创建了一个不匹配,因为在微调过程中从来没有见过[MASK]词。为了减轻这一点,我们并不总是用实际的[MASK]词替换被屏蔽的词。相反,生成随机选择15%的词进行预测,例如在句子 my dog is hairy 选择了 hairy。接着执行下面的过程:

数据生成器不会总是用[MASK] 替换所选单词,而是执行以下操作:

80%的时间,将单词替换为[MASK]词。例如 my dog is hairy -> my dog is [MASK]

10%的时间, 用一个随机词替换这个词, 例如 my dog is hairy -> my dog is apple

10%的时间, 保持单词不变,例如 my dog is hairy -> my dog is hairy。

每一轮使用交叉熵损失来预测原始词。

任务二:下一句的预测;

许多重要的下游任务,如问答(QA)和自然语言推理(NLI),都基于理解两个文本句之间的关系,而语言建模并不能直接捕获到这两个文本句之间的关系。为了训练一个理解句子关系的模型,我们预训练了一个二分类的预测下一个句子的任务,该任务可以由任何单语语料库生成。

具体来说,在为每个训练前的例子选择句子A和B时,50%的时间B是A后面的实际下一个句子,50%的时间B是来自语料库的随机句子。例如:

Input =[CLS] the man went to [MASK] store [SEP],he bought a gallon [MASK] milk [SEP]

Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP],penguin [MASK] are flight ##less birds [SEP]

Label = NotNext

我们完全随机选择NotNext 句子,最终预测模型在这个任务中达到97%-98%的准确率。

预训练数据:预训练过程很大程度上依赖现有语言模型的数据。从维基百科上抽取文本信息,忽略列表,表格和标题。对于预训练过程来说,使用文档级别的语料库而不是经过乱序后的句子级语料库来提取长的连续序列是很重要的。

对于序列级别分类任务,BERT微调很简单。BERT使用self-attention机制来统一两个过程。因为编码文本序列中,使用self-attention有效地包含了两上句子之间双向交叉的attention。

微调过程,就是对于每一个任务,简单地将特定的输入和输出接入bert,然后端到端地调节全部参数即可。在输入端,句子A和句子B类似于(1)语义句子对(2)假设前提(3)问答中的问句(4)文本分类或序列标记中文本。在输出端,token向量被传递给token级别任务的输出层,例如,序列标签,问答对的答案。[CLS]向量被传递给分类的输出层,用于分类或情感分析。

相对于预训练,微调要相对容易。大多数模型超参数与预训练相同,除了批的大小、学习率和训练轮数。

可以通过一个额外的输出层对预训练的BERT表示进行微调,以创建适用于各种任务的最先进模型,比如问答和语言推断,无需对特定与任务的架构进行实质性修改。

第一,如果NLP任务偏向在语言本身中就包含答案,而不特别依赖文本外的其它特征,往往应用Bert能够极大提升应用效果。

第二,Bert特别适合解决句子或者段落的匹配类任务。就是说,Bert特别适合用来解决判断句子关系类问题,这是相对单文本分类任务和序列标注等其它典型NLP任务来说的,很多实验结果表明了这一点。

第三,Bert的适用场景,与NLP任务对深层语义特征的需求程度有关。感觉越是需要深层语义特征的任务,越适合利用Bert来解决

第四,Bert比较适合解决输入长度不太长的NLP任务,而输入比较长的任务,典型的比如文档级别的任务,Bert解决起来可能就不太好。

引用:

bert论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

https://wwwcnblogscom/robert-dlut/p/8638283html

https://blogcsdnnet/DarrenXf/article/details/89184225

https://wwwcnblogscom/xlturing/p/10824400html

https://wwwcnblogscom/ylHe/p/10193166html

1、朴素贝叶斯公式:

2、 API: from sklearnnaive_bayes import MultinomialNB

3、 注意事项: 一个完整的文本不能直接拿来训练,所以在训练之前,我们需要将自己的语句分词,构建词向量,所以我们这里需要先进行分词处理,这里我选择的是结巴分词。

从上面预测结果看,预测的三个结果均与真实值一致,模型评估结果值为:10 很高!

欢迎分享,转载请注明来源:浪漫分享网

原文地址:https://hunlipic.com/qinggan/7852960.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-09-07
下一篇2023-09-07

发表评论

登录后才能评论

评论列表(0条)

    保存