基于Word2Vec和TextCNN的中文情感分析

摘要

自然语言处理(NLP)是计算机科学领域的一个重要研究方向,旨在实现人与计算机之间用自然语言进行有效通信。NLP的目标是使计算机能够理解和处理文本数据,从而能够与人类有效地进行交流。NLP的广泛应用将极大地提升人与计算机之间的交流和理解能力。然而,NLP仍面临着语义理解的困难、语言多样性的挑战和数据隐私的问题等。因此,进一步的研究和探索仍然是NLP领域的重要课题。

语言模型

语言模型是自然语言处理中的重要概念,旨在刻画语言的概率分布,并预测给定上下文的词语或字符序列的概率。语言模型可以分为单词级别和字符级别两种类型。单词级别语言模型基于给定上下文的单词序列来预测下一个可能的单词,例如在上下文 “我喜欢吃”中,单词级别语言模型可以预测下一个单词可能是 “水果”、“面条”或者“巧克力”。而字符级别语言模型则是基于上下文字符序列来预测下一个可能的字符。

在本文中,我们将详细介绍经典的NgramN-gram语言模型和最新的GPTGPT模型。

N-gram 语言模型

NgramN-gram语言模型是一种基于统计的自然语言处理模型。它的核心思想是利用前N1N-1个词的出现概率来预测第NN个词的出现概率。其中,NN表示NgramN-gram模型的阶数,通常为1、2或3(即unigramunigrambigrambigramtrigramtrigram)。

一个语言模型通常构建为句子ss的概率分布p(s)p(s)p(s)p(s)反映的是单词序列ss作为一个句子出现的频率。假设s=w1w2w3...wns=w_1w_2w_3...w_n表示由n个基元(字、词或短语等,为了方便以下均默认为“词”)构成的句子,wi(1in)w_i(1≤i≤n)为句子的第ii个词,则句子的概率公式可以表示为:

P(s)=P(w1)P(w2w1)...P(wnw1,...,wn1)=i=1nP(wiw1,w2,...,wi1)P(s)=P(w_1)P(w_2|w_1)...P(w_n|w_1,...,w_{n-1})=\prod_{i=1}^nP(w_i|w_{1},w_{2},...,w_{i-1})

在上述公式中,P(wiw1,...,wi1)P(w_i|w_1,...,w_{i-1})表示第i(1in)i(1≤i≤n)个词的概率由前i1i-1个词决定。通过将每个词的概率连乘,就可以计算出整个句子的概率P(s)P(s)。然而,假设一门语言的词汇量为VV,根据句子长度mm,可以组合出的句子总数为VmV^m。这意味着数据量随着句子长度增长呈几何级数增长。

为了解决参数呈指数级增长的问题,NgramN-gram模型基于马尔可夫假设,即当前词的出现概率仅与前n1n−1个词有关。基于此,可以近似计算单词序列ss的概率如下:

P(s)=P(w1,w2,...,wn)=i=1nP(wiwi1,wi2,...,win+1)P(s)=P(w_1,w_2,...,w_n)=\prod_{i=1}^nP(w_i|w_{i-1},w_{i-2},...,w_{i-n+1})

NgramN-gram模型中,模型参数数量为VnV^n。当nn越大时,模型的理论准确性也越高,但同时也会增加模型的复杂性和计算量,需要更大的训练语料数据。因此,n>4n>4的情况非常少见。

NgramN-gram模型的训练中,一个重要的问题就是模型的参数估计,即估计条件概率,主要就是求得P(wiwin+1,...,wi1)P(w_i|w_{i-n+1},...,w_{i-1})。在给定训练语料的情况下,可以使用最大似然方法估计模型参数。

具体计算公式如下:

P(wiwin+1,...,wi1)=P(win+1,...,wi1,wi)P(win+1,...,wi1)=C(win+1,...,wi1,wi)C(win+1,...,wi1)P(w_i|w_{i-n+1},...,w_{i-1})=\frac{P(w_{i-n+1},...,w_{i-1},w_i)}{P(w_{i-n+1},...,w_{i-1})}=\frac{C(w_{i-n+1},...,w_{i-1},w_i)}{C(w_{i-n+1},...,w_{i-1})}

即训练语料中,在给定win+1,...,wi1w_{i-n+1},...,w_{i-1}的条件下,wiw_i出现的相对频率。其中,C(win+1,...,wi1)C(w_{i-n+1},...,w_{i-1})表示n1n-1元组(win+1,...,wi1)(w_{i-n+1},...,w_{i-1})在训练语料中出现的次数,C(win+1,...,wi1,wi)C(w_{i-n+1},...,w_{i-1},w_i)表示nn元组(win+1,...,wi1,wi)(w_{i-n+1},...,w_{i-1},w_i)在训练语料中出现的次数.

然而,使用最大似然估计的方法计算参数时会遇到零概率的问题,即一些不常见的单词序列在训练语料中没有出现。这会导致统计过程中出现很多频数为零的单词使得其频率为零,通过最大似然估计方法求得的参数也为零。这样,整个句子的概率直接变为零。

为了解决零概率问题,引入了数据平滑(data smoothing)的方法。数据平滑的基本思想是调整最大似然估计的概率值,使零概率增值,非零概率下调,从而消除零概率,提高模型的整体准确性。常用的平滑方法包括拉普拉斯平滑、卡茨回退和Knerser-Ney平滑等。

在优化NgramN-gram统计语言模型时,用困惑度作为其评价标准。香农(Claude Shannon)在论文《通信的数学理论》[1]^{[1]}中提出了熵的概念,并研究了NN元模型的性质。我们可以通过交叉熵来描述统计语言模型在测试集上的性能。

对于一个平滑后的N元模型,其概率可以表示为p(wiwin+1,...,wi1)p(w_i|w_{i-n+1},...,w_{i-1}),通过这个概率可以计算整个句子的概率:p(s)=i=1mp(wiwin+1,...,wi1)p(s)=\prod_{i=1}^m p(w_i|w_{i-n+1},...,w_{i-1})。假设测试语料TTlTl_T个句子构成(t1,t2,...,tlt)(t_1,t_2,...,t_{l_t}),我们可以计算整个测试集的概率(每个句子概率的连乘)P(T)=i=1ltp(ti)P(T)=\prod_{i=1}^{l_t}p(t_i)

因此,统计语言模型对于测试语料的交叉熵可以表示为:

Hp(T)=1WTlog2p(T)=1WTi=1ltlog2p(ti)H_p(T)=-\frac{1}{W_T}log_2p(T)=-\frac{1}{W_T}\sum_{i=1}^{l_t}log_2p(t_i)

其中,WTW_T是测试文本T的词数。模型pp的困惑度定义为:PPp(T)=2Hp(T)PP_p(T)=2^{H_p(T)}

对于交叉熵,可以理解为统计语言模型所学习到的统计概率分布与测试集中的实际概率分布之间的差异程度。交叉熵越大,意味着统计概率分布和实际概率分布的差异越大,即统计语言模型的表现越差。困惑度与交叉熵成正相关,因此统计语言模型的优化目标是尽量减小困惑度。

GPT模型

GPT,即生成式预训练模型(Generative Pre-trained Transformer),是一种基于深度学习的语言生成模型。其核心是Transformer模型,旨在通过预训练学习通用的语言表示,并且可以通过微调进行针对特定任务的优化。该模型已经发布了多个版本,最新版本为GPT-4。

GPT的核心思想是利用大量的无监督学习,通过Transformer模型进行预训练,以学习上下文的信息,并为生成下一个词提供概率分布。

GPT发展历程

GPT-1

GPT(Generative Pre-Training)在OpenAI于2018年发表的《Improving Language Understanding by Generative Pre-Training[2]^{[2]}中被提出。

GPT-1模型的Transformer结构:

GPT-1模型的Transformer结构

GPT的核心在于——生成式预训练Transformer

首先,与判别式模型相比,GPT模型是一种生成式模型,两者在问题建模上存在显著差异,从而直接导致了训练方法的不同。传统的监督训练方法依赖有标签的数据,对数据集的要求非常高。然而,制作大规模的带有标签的数据集成本巨大,这进一步限制了训练集规模的扩大。与之不同的是,GPT模型采用了自监督预训练方法,不依赖标签数据,因此可以快速扩大数据集的规模。对于生成式模型来说,一般采用生成学习的自监督方法进行预训练,而判别式模型则通常采用对比学习的方法。

对比

在语言任务的情景中,GPT模型具有明显的优势。在给定一段无标注语料的情况下,人们往往会借助前面的语句来预测后面的语句,这是一种非常自然的行为,也符合语言模型本身的马尔可夫链条件概率定义公式。GPT模型通过Transformer中的Decoder来建立语言模型,它采用了自监督预训练加有监督调优(fine-tuning)的方式进行模型训练。这种训练方式可以使模型具备良好的语言生成能力。而GPT系列的基调也被定下,虽然后续模型经历了多次调整,但生成式(Generative)、预训练(Pre-train)和Transformer这三个关键词始终贯穿其中。

GPT-2

GPT-2在OpenAI于2019年发表的《Language Models are Unsupervised Multitask Learners[3]^{[3]}中被提出。

较之GPT,GPT-2的优化点主要如下:

  • 提升训练数据的数量、质量、广泛度(from WebText)
  • 模型结构在GPT的基础上做了简单调整:LN移至每个sub-block的输入位置、最后一个self-attention block后增加一个LN、调整部分参数的初始化方式、扩大词表、seq_len从512提升至1024、batchsize采用512。

与GPT-1相比,GPT-2尝试将多种自然语言处理任务进行统一,包括阅读理解、机器翻译、问答和文本概括等任务。以往,这些任务通常需要使用不同的模型或者在一个大型的预训练模型上添加用于不同下游任务的小网络来完成。在GPT-1中,除了自监督预训练外,还需要使用fine-tuning的方法,在模型中添加线性加softmax层,针对不同的下游任务进行再训练。然而,GPT-2认为多任务问题同样可以泛化为条件概率的形式,因为具体任务类型的要求往往也包含在自然语言中。因此,无需进行独立的fine-tuning,只通过预训练就可以直接应用于完成多个任务——只要模型足够大。

Learning to perform a single task can be expressed in a probabilistic framework as estimating a conditional distribution p(output|input). Since a general system should be able to perform many different tasks, even for the same input, it should condition not only on the input but also on the task to be performed. That is, it should model p(output|input, task). This has been variously formalized in multitask and meta-learning settings.[3]^{[3]}

此外,GPT-2的论文专门讨论了模型在zero-shot迁移能力(即自发的学会一种训练集中没有的映射关系的能力)方面的表现。论文认为,语言模型的容量对于zero-shot任务迁移的成功至关重要,增加容量可以以对数线性方式提高跨任务性能。这个理念支持着更大规模的GPT-3模型的出现。

GPT-3

GPT-3在OpenAI于2020年发表的《Language Models are Few-Shot Learners[4]^{[4]}中被提出。

较之GPT-2,GPT-3的优化点主要如下:

  • 数据量提升
  • 模型规模提升

GPT-3主要是对GPT-2进行了参数量和训练集大小的显著提升。从GPT-3开始,实现了真正意义上的从量变到质变,大模型的一些“神奇的能力(Emergent Ability)”开始出现。在人们对于神经网络模型的传统理解中,在训练过程中,神经网络通过不断拟合训练集的真实概率分布来学习,当梯度下降到达损失函数的最小值时,模型权重所表征的概率分布与训练集的真实概率分布高度接近,这就是神经网络学习能力的来源。在以往的神经网络中,权重决定了模型的所有能力。训练结束后,权重被确定下来,模型的能力也就固定了,无法获得新的知识。

然而,大模型打破了这种范式。GPT-3展现出了场景学习(in-context learning)的能力,即通过设计的输入变化(prompting),模型的输出就展现出了惊人的性能提升,仿佛在权重固定的情况下,模型从输入中学到了新的知识。

这些大型语言模型(LLMs)的成功往往归因于在上下文中进行的少样本学习或零样本学习。它们可以通过简单地将模型条件化于少量示例(few-shot)或描述任务的指令(zero-shot)来解决各种任务。这种对语言模型进行条件化的方法被称为“prompting”。

The success of large language models (LLMs) is often attributed to (in-context) few-shot or zero-shot learning. It can solve various tasks by simply conditioning the models on a few examples (few-shot) or instructions describing the task (zero-shot). The method of conditioning the language model is called “prompting”.[4]^{[4]}

在Few-shot场景中,通过向模型展示同类问题的解题思路,即所谓的思维链(Chain of Thought,CoT),而不是直接给出答案,模型能够解决本来无法正确回答的问题。而在Zero-shot-CoT场景中,仅通过——Let’s think step by step,GPT-3的输出从错误答案变成了正确答案,并且给出了详细的分析过程。

in-context learning

GPT-3.5(InstructGPT)

InstructGPT的主要目标是在GPT-3预训练模型上开发出模型理解指令的能力[5]^{[5]}。为此,在原始的GPT-3模型上进行了三个主要步骤的改进:

  1. 通过手动选择一些问题并提供手动答案构建了一个用于有监督调优(Supervised Fine-Tuning,SFT)的数据集,用于训练GPT-3模型。
  2. 使用训练好的SFT模型回答一些问题,并通过人工对答案进行评分排序构建了用于训练奖励模型(Reward Model)的数据集。
  3. 利用近端策略优化(Proximal Policy Optimization,PPO)算法,根据奖励模型的评分结果进一步优化SFT模型。同时,研究者还尝试了将预训练梯度和PPO梯度进行融合,称之为(PPO-ptx)。

这一重大范式变化在于将强化学习思想引入语言模型的训练过程中,通过人类协助构筑Reward Model,并将SFT模型视作被优化的Policy。因此,InstructGPT的训练过程采用了监督学习、自监督学习和强化学习三种方法。

通过这样的训练,在不改变模型结构和规模的情况下,显著提高了模型理解人类指令的能力,展现了大语言模型的潜能,Prompting,RLHF等都是在尝试“解锁”这些隐藏的能力。

RLHF

在GPT-3向GPT-3.5的演化过程中,出现了一些技术路线上的分歧和整合。除了上述的针对指令理解的调优方法InstructGPT,对于原始的预训练大模型GPT-3,还出现了针对代码理解能力的CodeX模型(通过在独立的代码数据集上重新训练GPT-3模型)[6]^{[6]},并且衍生出了功能强大的编程助手Copilot。此外,在具备代码能力和指令理解能力的下一代模型Text-davinci-002上,又延伸出了两条技术路径,一条是为了恢复在指令调优过程中丢失的部分上下文学习能力而设计的Text-davinci-003,另一条是为了获取建模对话历史能力而牺牲了几乎所有上下文学习能力的ChatGPT。

GPT-3演变方向

GPT-4

GPT-4是OpenAI语言模型的最新、也是最先进的版本。它于2023年3月14日推出,被定义为是深度学习发展的新里程碑。

较之GPT-3.5,GPT-4的优化点主要如下:

  • 一个大型多模态模型
  • 更可靠、更有创意、更具协作性,并且能够处理更细微的指令。
  • 上下文窗口达到32000token
  • 基于规则的奖励模型
  • 可定义模型的基调、风格和行为
  • 训练稳定性更高,安全性措施更强

与以往GPT稍有不同,GPT-4 是一个大型多模态模型,即它可以接受图像和文本作为输入,并输出文本。大型多模态模型指的是能够处理和融合多种不同类型数据的深度学习模型。传统的深度学习模型主要处理单一模态的数据,例如图像、语音或文本。而大型多模态模型具有能够同时处理和综合多种模态数据的能力,例如图像、文本、语音和视频等。这种模型可以通过联合挖掘多个模态之间的关联性和相互依赖性,从而实现更加全面和准确的分析、理解和生成。

GPT-4的关键仍在于人类反馈强化学习(RLHF)微调。通过RLHF技术,模型能倾向出高质量回答,确保模型输出对人类有益,进而保证模型的安全性。经分析,RLHF也是保持多轮对话不偏离主题的关键保障。在具体实现上,人类标记员扮演对话的用户和人工智能助手,提供多模态对话样本,让模型生成一些回复,然后标记者会对回复选项打分排名,将更好的结果反馈回模型中。模型同时从两种反馈模式中学习——人类强化和马尔可夫决策过程奖励作为一个整合的系统,通过奖励策略对模型进行微调并持续迭代。

奖励模型的过拟合导致模型性能下降(来源:OpenAI)

因为模型仅仅从狭窄分布的训练数据中学习,所以GPT-4中奖励模型只是人类偏好的部分表征,过度的训练反而可能导致奖励模型过拟合(以偏见代替整体),并导致模型训练效果的下降。另一方面,模型的人类标注员可能也无法代表用户所在地区人群的总体偏好。

在安全性方面,模型可能在给定不安全的输入时生成不良内容,比如提供关于犯罪的建议。此外,模型还可能对安全输入变得过于谨慎,拒绝无害的请求。为了解决这些问题,GPT-4引入了一套安全流水线,主要包括两个部分:一组额外的安全相关的强化学习(RLHF)训练提示和基于规则的奖励模型(RBRM)。

RBRM是一种用于强化学习的奖励函数模型。传统的强化学习方法通常需要通过试错来学习适当的策略,这需要大量尝试和奖励信号的反馈。而RBRM则利用领域专家或人类知识来定义奖励函数,通过事先设定一组规则来指导代理系统的学习过程。RBRM的核心思想是将人类专家的知识转化为规则,并根据这些规则为代理系统提供奖励信号。这些规则可以基于任务特定规定、先验知识或预先设定的目标。代理系统通过优化其策略以最大化规则定义的奖励来学习适应特定任务的行为。

在GPT-4模型中,基于规则的奖励模型由一组Zero-shot 迷你GPT-4分类器组成,根据预定义的规则为特定动作或事件分配奖励。这些分类器在RLHF微调期间为GPT-4策略模型提供额外的奖励信号,以正确的输出行为为目标进行训练,比如拒绝生成有害内容或不拒绝无害的请求。通过使用RBRM,GPT-4能够更好地保持安全性,并更准确地遵循人类期望的行为。

基于规则的奖励模型(来源:日本国立信息学研究所)

通过利用RBRM的优势,GPT-4在模型中使用一些简单实用的规则,使得建立成本低于常规奖励模型,减少训练数据集的成本,并缩短构建时间。

自然语言理解

词法分析、句法分析和语义分析是自然语言处理(NLP)中三个重要的分析任务,它们关注的是不同层次和角度的语言理解。

词法分析主要关注分词和词性标注,将输入的文本切割成不同的单词,并为每个单词标注上其相应的词性。词法分析是NLP任务的基础,它为后续的句法分析和语义分析提供了基本的单元。

句法分析的目标是理解句子的结构和语法关系,识别句子中的短语和成分之间的依存关系。常见的句法分析方法包括基于规则的分析方法和基于统计的分析方法。句法分析可以帮助我们了解句子的句法结构,有助于后续的语义分析和其他文本理解任务。

语义分析关注的是句子的含义和语义关系。它旨在理解句子中词语之间的关系、句子的语义角色和推理等。语义分析常常需要利用知识库、语义规则和逻辑推理等方法来推断和表示句子的语义。语义分析是NLP中比较复杂和困难的任务,涵盖了词义消歧、命名实体识别、关系抽取等多个子任务。

这三个任务在NLP中有密切的联系。词法分析是句法分析和语义分析的基础,准确的分词和词性标注对于后续的分析任务至关重要。句法分析和语义分析相互依存,句法分析提供了句子的结构信息,而语义分析分析了句子的意义和语义关系。在实际应用中,这三个任务通常是连续进行的,通过相互配合和迭代来实现对文本的深入理解。

词法分析

词是最小的能够独立运用的语言单位,因此词法分析对于其他自然语言处理问题(如句法分析、语义分析、文本分类、信息检索、机器翻译、机器问答等)至关重要,对后续问题具有深刻的影响。

在自然语言处理(NLP)中,词法分析(Lexical Analysis)的目标是将自然语言文本分解为词素(Lexeme)或标记(Token),并将其分类为不同的语法单元。词法分析是NLP中的一个基本任务,为其他高级NLP任务如语法解析、语义分析和机器翻译提供了重要的前提。

以下是常用的词法分析方法:

  1. 分词(Tokenization):将文本划分成一个个离散的词或符号单元,作为后续处理和分析的基本单位。分词可以根据不同的语言和需求来进行,常用的分词方法有基于规则、基于统计以及基于机器学习等。
  2. 词性标注(Part-of-speech Tagging):确定每个词汇在句子中的词性,例如名词、动词、形容词等。词性标注可以帮助识别词汇的语法角色,从而更好地理解句子的结构和含义。
  3. 词形还原(Lemmatization):将词汇还原为其基本形式,消除不同时态、形式和派生形式等带来的歧义性。通过词形还原,可以将具有相同词根的变体词汇合并为同一个基本形式,减少词表中的重复和冗余。
  4. 停用词过滤(Stopword Filtering):去除常见的无实际含义的词汇,如"的"、“是”、"和"等。停用词过滤可以减少数据维度和提高语义判断的准确性,特别是在文本分类、信息检索等任务中常被使用。
  5. 词源分析(Morphological Analysis):将词分解为词干(stem)和词缀(affix)的过程,以分析和理解词汇的形态变化、词法关系和词义关系。词源分析通常用于处理复杂形态的词汇,对于理解语义和词义的变化非常重要。
  6. 命名实体识别(Named Entity Recognition,NER):识别文本中具有特定意义的实体,如人名、地名、组织机构、日期等。命名实体识别可用于从文本中提取重要信息,并支持自然语言理解和信息提取的任务。
  7. 未登录词处理(Out-of-vocabulary Handling):处理在语料库中没有出现过的词汇,通过基于规则、规则与统计结合的方法或基于上下文的推断来解决这种未登录词的识别问题。未登录词处理对于解决低频词或专有词汇的识别与处理非常重要。
  8. 词边界检测(Word Boundary Detection):在没有明确分词边界符的情况下,确定词语边界的位置,从而进行有效的分词处理。词边界检测是自然语言处理中常见的挑战之一,特别是对于一些相对没有明确词语边界的语言。
  9. 词频统计(Word Frequency Counting):统计文本中每个词汇的出现次数,用于分析词汇的重要性、频率分布等。词频统计可用于文本摘要、关键词提取和语言模型等任务。
  10. 词义消歧(Word Sense Disambiguation):确定词汇在不同上下文中的具体含义,解决一词多义的问题。词义消歧对于机器翻译、问答系统等任务的准确性和可理解性至关重要。
  11. 词对齐(Word Alignment):将源语言和目标语言中的词汇进行对应和配对的过程。在机器翻译、跨语言信息检索等任务中,词对齐是一个重要的步骤,它可以帮助建立源语言和目标语言之间的词级对应关系。常见词对齐方法有基于双语平行语料库的统计方法、基于隐马尔可夫模型(Hidden Markov Model,HMM)的方法。
  12. 字母大小写标准化(Case Normalization):将文本中的字母大小写统一为全部小写或全部大写,以消除大小写带来的差异性。字母大小写标准化可以用于信息检索、文本分类等任务,提高词汇的匹配和比较的准确性。
  13. 标点符号处理(Punctuation Handling):对文本中的标点符号进行处理,可以选择去除标点符号、保留部分标点符号或将标点符号作为独立的词汇进行处理。标点符号处理对于句子分割、文本排版和语义分析都有很大的影响。
  14. 数字处理(Number Handling):对文本中的数字进行处理,可以选择保留数字、将数字转换为特殊符号或将其替换为文本形式。数字处理在文本预处理和文本分析中都是重要的步骤,可以减少词表大小和文本的复杂性。
  15. 错误处理(Error Handling):识别和处理文本中的错误、拼写错误、缩写等常见错误问题。错误处理可以通过规则、语音纠错、上下文信息等方法进行,可以提高文本的质量、可读性和语义理解的准确性。
  16. 识别特殊字符(Special Character Recognition):识别文本中的特殊字符、符号或特殊形式的词汇,如URL、邮箱地址、电话号码等。特殊字符识别在文本处理和信息提取任务中非常有用,可以提取和处理特定类型的信息。

以上常用词法分析方法在NLP领域得到了广泛应用,在实际应用中,还可以根据具体的任务和需求,结合不同的方法和技术进行定制化的词法分析处理。

句法分析

句法分析(Syntactic Parsing)是自然语言处理领域中的一个关键任务,旨在分析和理解句子的语法结构。它通过识别句子中的词汇、短语和句法关系,并将其组织成一个树状结构或图结构,以表示句子的句法组织和句法角色。

句法分析的目标是将输入的自然语言句子转化为一种形式化、结构化的表示,从而更好地理解句子的语法和语义信息。通过句法分析,我们可以获得句子中的主谓关系、修饰关系、并列关系等各种句法关系的详细描述,有助于后续的语义分析、机器翻译、信息检索等自然语言处理任务。

句法分析可以分为两个主要方向:依存句法分析和短语结构句法分析。依存句法分析关注的是句子中词与词之间的依存关系,通过构建依存句法树来表示词语之间的依存关系,比如谓词和论元之间的关系等。短语结构句法分析则关注句子中的短语结构,通过构建短语结构树来表示短语之间的层次关系,比如句子的主语短语和谓语短语等。

句法分析可以基于不同的理论和方法进行,其中包括基于规则的分析方法、基于统计的分析方法和基于机器学习的分析方法。基于规则的方法通过定义一系列语法规则和句法规则,逐步应用规则来解析句子的语法结构。基于统计的方法利用大规模的语料库和概率模型,通过学习和推测最可能的句法结构。基于机器学习的方法则通过使用机器学习算法,如隐马尔可夫模型、条件随机场、神经网络等,从有标注的句子数据中学习句法结构模型。

以下是几种常见的句法分析方法:

  1. 基于规则的句法分析(Rule-based Parsing):基于语法规则和句法规则,通过逐步应用规则来解析句子的语法结构。规则可以是手动编写的语法规则,也可以是从语法书籍或语料库中自动学习得到的。

  2. 基于转录文法的句法分析(Phrase Structure Parsing):转录文法(Context-Free Grammar,CFG)是用于描述句子结构的形式语言。基于CFG的句法分析方法将句子解析为一个树结构,其中叶子节点是单词,内部节点表示短语结构。

  3. 依存句法分析(Dependency Parsing):依存句法分析旨在识别句子中的词语之间的依存关系,并将其表示为依存树。依存关系表示了词语之间的句法关系,如主谓关系、修饰关系等。

  4. 统计句法分析(Statistical Parsing):统计句法分析方法使用机器学习技术,如隐马尔可夫模型(Hidden Markov Model,HMM)、条件随机场(Conditional Random Fields,CRF)、最大熵模型(Maximum Entropy Model)等,从大规模语料库中学习句法结构的概率模型。

  5. 基于神经网络的句法分析(Neural Network Parsing):基于神经网络的句法分析方法利用深度神经网络模型,如卷积神经网络(Convolutional Neural Network,CNN)、循环神经网络(Recurrent Neural Network,RNN)等,从句子中学习句法结构。

  6. 基于转换的句法分析(Transition-based Parsing):转换句法分析方法利用转换操作,如移位、规约等,逐步构建句法结构树。典型的转换句法分析方法有移进-归约(Shift-Reduce)和弧标记(Arc-Labeling)方法。

  7. 基于图的句法分析(Graph-based Parsing):图句法分析方法将句子的句法结构表示为一个图,通过在图上执行算法来分析和解释语法结构。

这些句法分析方法各有优缺点,可以根据具体任务和需求的不同选择合适的方法。在实际应用中,还有基于统计的方法和基于深度学习的方法等创新技术不断涌现,为句法分析带来了更高的性能和效率。句法分析在自然语言处理中具有重要地位,对于文本分析、自动问答、机器翻译等任务都起着重要的作用。

语义分析

语义分析(Semantic Analysis)是自然语言处理领域中的一个重要任务,旨在理解和推断句子的意义和语义信息。它通过分析句子的语法结构、词汇关系和上下文信息,以及利用语义知识库和语言模型等方法,来获取句子的深层语义信息,包括词义、语义角色、语义依存关系、逻辑推理、情感倾向等。

语义分析的目标是使计算机能够像人类一样理解和推理自然语言句子的意义。通过对句子进行语义分析,我们可以识别出句子中词汇的具体含义和上下文关系,理解句子中的逻辑关系和语义角色,从而更好地解释和理解句子的含义。

语义分析涉及到多个子任务和技术,如词义消歧、语义角色标注、语义依存分析、文本蕴含、重述识别、情感分析和语义相似度计算等。这些子任务都旨在从不同的角度和层次上揭示句子的语义信息,并为自然语言处理任务和应用提供更准确的语义理解和推断。

以下是几种常见的语义分析方法:

  1. 词义消歧(Word Sense Disambiguation,WSD):词义消歧是指在文本中确定一个多义词的正确含义。这个任务涉及到使用上下文信息、词法资源和统计方法等,来判断一个多义词在特定上下文中的实际含义。

  2. 语义角色标注(Semantic Role Labeling,SRL):语义角色标注是指标注句子中的谓词及其它论元的语义角色。语义角色表示了一个句子中各个成分之间的语义关系,如动作的施事者、受事者、时间和地点等。

  3. 语义依存分析(Semantic Dependency Parsing):语义依存分析是指识别句子中的语义依存关系,并将其表示为一种图结构。语义依存关系描述了句子中词汇之间的语义关系,如动作的触发词、论元关系等。

  4. 文本蕴含(Textual Entailment):文本蕴含任务旨在判断一个文本是否可以从另一个文本中推导出来。它涉及到识别前提和假设句之间的逻辑关系,如蕴含、矛盾、非法蕴含等。

  5. 重述识别(Paraphrase Identification):重述识别任务旨在判断两个句子是否具有相同的语义或近似的意思。这个任务对于问答系统、信息检索和自然语言生成等应用非常重要。

  6. 文本情感分析(Sentiment Analysis):文本情感分析旨在分析和识别文本中的情感倾向和情感极性。它可以帮助分析文本的情感态度、情绪等信息,从而用于舆情分析、社交媒体分析等应用领域。

  7. 语义相似度计算(Semantic Similarity):语义相似度计算是对两个句子之间的语义相似程度进行量化和比较。这个任务可以用于问答系统、信息检索、自动摘要等多个自然语言处理任务中。

在实际应用中,结合多个技术和方法,进行多层次的语义分析可以获得更准确和全面的语义理解。语义分析在自然语言处理中起着重要作用,可以提高文本处理和理解的能力,为人机交互和智能应用提供更加智能的支持。

神经语言模型的发展历程

神经语言模型(Neural Language Models)是一种基于深度学习的自然语言处理方法,其主要目的是通过学习大量文本数据中的统计规律,从而预测和生成符合语言规则和上下文语义的语言表达。

神经语言模型的发展历程可以追溯到20世纪80年代,当时主要采用的是基于NgramN-gram的经典统计语言模型以及隐马尔可夫模型(Hidden Markov Models)。这些模型存在着许多问题,如无法处理长程依赖关系、难以实现端到端训练等,在实际应用中存在着诸多限制。

随着深度学习算法的发展,神经网络开始逐渐成为自然语言处理领域中最具潜力的研究方向之一。

前馈神经网络语言模型

最早的前馈神经网络语言模型——NNLM(Neural Network Language Model)是由Bengio在2003年发表的《A Neural Probabilistic Language Model》[7]^{[7]}中提出的。

传统的统计语言模型将每个词视为独立的抽象符号,忽略了词与词之间的语义关联性,并且面临着数据稀疏的问题。为了解决这个问题,将词汇表VV中所有词按照出现的顺序进行排序,并为每个词分配唯一的下标,将每个词都表示为大小为V|V|的one-hot向量,其中任意两个one-hot向量的内积均为0,即完全正交。

然而,在实际的语言中,存在许多意思相近或具有语义关联的单词,比如"枯燥"和"无聊","这个"和"那个"等。因此,我们希望能够在低维、稠密的连续实数空间中对这些词进行表示,使得具有高语义关联性的单词在空间中距离更近,向量内积更大,而语义关联性较小的单词在空间中距离较远,向量内积较小。

前馈神经网络语言模型

在神经网络的输入层,将大小为V×m|V| × m的look-up table参数矩阵CC与one-hot向量表示的词汇表VV中的单词wiw_i相乘,得到该词的稠密向量表示C(wi)C(w_i),神经网络的输入向量x=(C(wtn+1),...,C(wt2),C(wt1))x =(C(w_{t-n+1}),...,C(w_{t-2}),C(w_{t-1}))为将输入序列对应的所有向量进行拼接。

在神经网络的隐藏层,设置hh个隐藏单元,使用权重矩阵HRh×(n1)mH \in \mathbb{R}^{h\times(n-1)m}和偏置向量dRhd \in \mathbb{R}^h,并采用tanh作为激活函数。

在神经网络的输出层,将隐藏层到输出层的运算结果(权重矩阵URV×hU \in \mathbb{R}^{|V|\times h}和偏置向量bRVb \in \mathbb{R}^{|V|})与从输入层直接到输出层的运算结果(权重矩阵WRV×(n1)mW \in \mathbb{R}^{|V|\times(n-1)m})相加,得到:

y=b+Wx+Utanh(d+Hx)y=b+Wx+Utanh(d+Hx)

最后,通过softmax函数对yy进行转换,得到以概率表示的p(wiwin+1,...,wi1)p(w_i|w_{i-n+1},...,w_{i-1})

前馈神经网络语言模型通过用实数向量表示一个单词或单词的组合,提高了语言表示的效率、泛化性和可扩展性。在使用词向量的基础上,通过神经网络对语言模型进行表示,大大减少了模型的参数数量。尽管前馈神经网络语言模型仍然受到NgramN-gram模型的局限,使用定长的句子作为输入,但是这种方法彻底改变了语言模型的范式,并且启发了大量的后续研究。此外,将单词转换为稠密向量的word embedding技术成为了后续神经网络语言模型的基石。

循环神经网络语言模型

循环神经网络(RNN)语言模型是由Tomas Mikolov在2010年发表的《Recurrent neural network based language model》[8]^{[8]}中提出的,并且彻底解决了传统语言模型无法捕捉长距离信息的问题。

循环神经网络模型

在循环神经网络的输入层,输入向量x(t)x(t)是由当前输入词向量w(t)w(t)和上一隐藏层向量s(t1)s(t-1)相加而得。

在循环神经网络的隐藏层,采用sigmoid函数作为激活函数,使用权重矩阵UU对输入进行变换。

在循环神经网络的隐藏层,采用softmax函数作为激活函数,使用权重矩阵VV将隐藏层向量变换为最终的输出概率分布,得到p(wiwin+1,...,wi1)p(w_i|w_{i-n+1},...,w_{i-1})

x(t)=w(t)+s(t1)sj(t)=f(ixi(t)uji)yk(t)=g(jsj(t)vkj)x(t) = w(t) + s(t − 1) s_j (t) = f(\sum_ix_i(t)u_{ji}) y_k(t) = g( \sum_js_j (t)v_{kj})

循环神经网络的通过不断迭代计算当前隐藏层,以捕捉当前输入的词向量和上一隐藏层(包含了前文中所有词向量的信息),从而实现对任意长度句子的全句信息捕捉。

但循环神经网络存在参数经过多次传递后,易发生梯度消失或爆炸的问题,且其平等的对待所有的输入单词,但是在实际的语言中,不同的单词对于句子的重要性其实是不一样的。

为了解决这些问题,后续提出的长短期记忆(Long short-term memory,LSTM)神经网络。LSTM能够通过某种策略有选择地保留或者遗忘前文的信息,在不改变循环神经网络基本结构的基础上,解决了循环升级网络的问题,同时也保留了其可以捕捉全文信息的优点。

Qian Chen等人在2016年发表的《Enhanced LSTM for Natural Language Inference》[9]^{[9]}将LSTM应用于自然语言处理,并提出了增强型LSTM(Enhanced LSTM)。相比循环神经网络,LSTM神经网络引入了遗忘门(forget gate),并且通过CtC_t(Cell State)而非隐藏层hth_t来维护从句子中学习的记忆。而Enhanced LSTM,在保留LSTM原有优点的同时,通过引入增强门和残差连接,增强了模型对于长期依赖关系的建模能力和表示能力。Enhanced LSTM通过引入增强门,用于控制单元状态(Cell State)的更新。增强门可以调节输入门和遗忘门相互作用的强弱,提高信息传递的精确性和灵活性;引入了残差连接,将前一层的输出与当前层的输入进行直接相加,从而构建更深层次的网络结构,促进信息的流动和梯度的传播。这使得Enhanced LSTM在自然语言处理任务中表现出更好的性能,如句子分类、机器翻译等。

LSTM模型

尽管循环神经网络语言模型(以及LSTM)具备了捕捉全句信息的能力,由于其串行结构(下一次输出的计算依赖于上一次输出),导致训练速度非常慢。对于大规模语料库,训练RNN语言模型所需的时间过长,而使用小规模语料库又导致模型对于训练文本过于敏感。

自我注意机制语言模型

谷歌团队在2017年发表的《Attention Is All You Need》[10]^{[10]}中提出的Transformer是一种基于自注意力(Self-Attention)机制的模型,用于解决自然语言处理问题。该模型在保证全文捕捉能力的同时,改变了传统循环神经网络语言模型的串行结构,可以并行化地在大规模语料库上进行训练。

Transformer整体架构

Transformer应用于翻译任务时,由Encoder和Decoder两部分组成,并且这两部分可以单独应用于语言模型。

在Transformer的输入层,通过将单词进行word embedding后得到词向量,然后将词向量与单词在句子中的位置进行position embedding后的位置向量相加,得到输入向量序列XX。这样做可以使Transformer获得单词的位置信息,从而更好地处理输入序列的顺序关系。

Transformer的自注意力机制非常关键。首先,通过线性变换矩阵WQW_QWKW_KWVW_V分别与输入向量序列X相乘,得到查询向量序列QQ、键向量序列KK和值向量序列VV。然后,利用自注意力机制计算输出值:

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

其中dkd_k表示查询向量的维度。

那什么是Self-Attention机制?Self-Attention机制是一种关键的注意力机制,用于Transformer模型中。在忽略线性变换矩阵对输入向量序列X=[x1,...,xj1,xj]X=[x_1,...,x_{j-1},x_{j}]的影响时,Self-Attention机制可以表示为以下形式:

ejk=1dkxjxkajk=exp(ejk)kexp(ejk)=softmax(qKTdk)Attention(q,K,V)=kajkxke_{jk}=\frac{1}{\sqrt{d_k}}x_j \cdot x_k a_{jk}=\frac{exp(e_{jk})}{\sum_{k^{'}}exp(e_{jk^{'}})} = softmax(\frac{q \cdot K^T}{\sqrt{d_k}}) Attention(q,K,V)=\sum_ka_{jk}x_k

其中,qq为输入向量xjx_jK=V=XK=V=X表示输入向量序列的矩阵形式。

从上述公式可以看出,Self-Attention机制的计算结果是输入向量的加权累加形式,类似于卷积神经网络中的卷积运算。权重来源于当前词与整个序列的向量内积,在稠密向量空间中,向量内积表示了词与词之间的关联度,具有高关联度的词对应的内积较大,从而赋予输入值更大的权重,而相互无关的词则被赋予较小的权重。

Multi-Head Attention是由多个Self-Attention组合而成,首先计算多个由Self-Attention得到的矩阵,然后将这些矩阵拼接起来,再经过全连接操作,最终得到Multi-Head Attention的输出。

Multi-Head Attention

Transformer的诞生使得全句信息的捕捉和大规模语料库上的训练两大问题都得到了解决,使得语言模型进入了一个全新的阶段。

预训练语言模型

随着神经网络语言模型的发展,语言模型的准确度得到了持续的提升。然而,构成神经网络语言模型基石的word embedding存在着一词多义的问题,因为通过look-up table矩阵计算得到的向量表示是唯一的,难以区分不同上下文环境下的词。

为了解决这个问题,预训练语言模型使用词向量在神经网络模型中的隐藏层向量作为word embedding,从而能够在编码上区分不同上下文环境下的词。

ELMo

ELMo(Embeddings from Language Models)是由AllenAI于2018年发表的《Deep contextualized word representations》[11]^{[11]}一文中提出的。

ELMo使用双向LSTM模型来捕捉上下文信息,并以双向语言模型为优化目标。经过在语料库上的训练得到参数后,ELMo使用多个网络前向层和后向层隐藏层拼接后的向量加权和,作为输入词的embedding。

ELMojtask=γtaskk=1Lwktaskhj,kLMhj,kLM=[hj,kLM,hj,kLM]ELMo^{task}_j=\gamma^{task}\sum_{k=1}^{L}w_k^{task}h_{j,k}^{LM} h_{j,k}^{LM}=[\stackrel{\rightarrow}{h}_{j,k}^{LM},\stackrel{\leftarrow}{h}_{j,k}^{LM}]

ELMo的word embedding结果可以作为下游任务的词向量输入。它创造性地解决了一词在不同上下文中如何区分的问题。然而,由于ELMo采用了较浅的两层双向LSTM,其难以学习文本数据的所有语言规律,因此其潜力有限。此外,双向LSTM并不是捕获长距离依赖性的最佳方法,因为它的串行结构会受到梯度消失问题的影响,并且无法进行并行计算。最后,ELMo未充分发挥预训练模型的能力,因为它仅在获取隐层表示时使用,并且在下游任务中微调模型是从头开始学习的,不共享预训练模型的参数。

GPT系列

GPT(Generative Pre-Training)是由OpenAI于2018年发表的《Improving Language Understanding by Generative Pre-Training》[2]^{[2]}一文中提出的。

GPT模型主体采用了Transformer的Decoder结构,不过在原始的Transformer中去除了一个子层——Multi-Head Attention。模型的训练目标是单向语言模型,这使得它具有捕捉上文信息的能力。

与ELMo方法相比,GPT在下游模型的word embedding生成上做了不同的处理。不再使用隐藏层输入的加权和作为下游模型的word embedding,而是在预训练模型的输入和输出上增加任务导向的小型网络结构。这个额外的网络结构通过小参数训练和对预训练模型参数的微调(fine-tuning)来完成下游任务。

在上文中已经对GPT模型进行了详细介绍,所以在此不再赘述。

BERT

BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年发表的一篇论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》[12]^{[12]}中提出的模型。

该模型采用了Transformer的Encoder作为主体,与GPT不同之处在于BERT能够双向地获取句子的信息,从而获得更强的信息理解能力。与GPT系列模型相似,BERT采用了微调(fine-tuning)的方式来应用于下游任务。为了避免前后文信息穿越的问题,BERT的训练目标不是双向语言模型,而是采用了掩码语言模型。

然而,BERT训练中的掩码(MASK)机制存在一些缺点。首先,它仅采用静态MASK机制,随机MASK单个词,这样可能导致模型对于语言上下文的理解不够准确。其次,在预训练和微调之间存在着严重差异,预训练过程中大量使用的MASK几乎不会在下游任务的微调过程中出现,这可能导致模型在不同任务之间的泛化性能较差。最后,BERT假设输入序列中遮盖的词汇之间是相互独立的,但实际上这些被遮盖的词很可能存在相互依赖的关系。

为了改进BERT模型中的MASK机制,后续的模型如RoBERTa、SpanBERT、ERNIE等进行了一些改进。这些模型尝试采用动态MASK机制、更精细的MASK策略,以及更加一致的预训练和微调过程,以提高模型在不同任务上的表现。此外,还有模型引入了新的训练目标,例如SpanBERT引入了跨度生成任务,以更好地捕捉句子中的语义信息。

总的来说,BERT是一种重要的模型,但其掩码机制存在一些缺点。随后的一系列模型对于BERT的MASK机制进行了改进,以提高模型的性能和鲁棒性。这些改进包括使用动态MASK、更细粒度的MASK策略、更一致的预训练和微调过程,以及引入新的训练目标。这些改进为进一步发展和优化神经语言模型奠定了基础。

总之,神经语言模型在深度学习技术的驱动下不断发展和演进,其应用范围也越来越广泛。随着技术的不断创新和突破,我们可以期待更加智能、理解力更强的自然语言处理系统的出现。

实验

实验任务

总结 TextCNN 模型理论,完成基于 Word2Vec 和 TextCNN 进行中文情感分析,对酒店情感分析数据(1 为正面,0 为负面)自行划分训练集、测试集,并采用适当的准则评估分类正确率。

理论介绍

Word2Vec

Word2Vec是由Tomas Mikolov等人于2013年提出的一种词向量表示模型。它通过学习词语的分布式表示,将每个词语映射到一个稠密的实值向量空间中。Word2Vec模型主要有两种实现方法:连续词袋模型(CBOW)和跳字模型(Skip-gram)。

跳字模型是Word2Vec的原始形式,它的思想是通过中心词来预测上下文词。具体而言,对于给定的一个中心词,跳字模型通过最大化中心词与其周围上下文词的点积的概率来训练模型。这个概率可以通过使用softmax函数来计算。通过最大化这个概率,模型可以学习到中心词与上下文词之间的关联。

连续词袋模型是跳字模型的一种变体,它的目标是根据上下文词来预测中心词。具体而言,给定一组上下文词,连续词袋模型的目标是最大化预测中心词的概率。同样,可以使用softmax函数来计算这个概率。通过最大化这个概率,模型可以学习到词语之间的语义关联。

Word2Vec

在Word2Vec中,词向量的维度是一个可以调整的超参数。通过训练算法,模型会学习到每个词语在向量空间中的表示。这些词向量在语义上相似的词语之间会有更小的距离。因此,Word2Vec模型可以用于计算词语之间的语义相似度。此外,通过执行向量运算,如向量加法和减法,可以进行一些有趣的语义推理。

Word2Vec的理论基础是分布式假设,即具有相似上下文的词语在语义上也是相似的。通过将词语映射到向量空间,Word2Vec模型能够捕捉到这种语义相似性。因此,Word2Vec在自然语言处理任务中具有广泛的应用,如词语表示、语义相似度计算、文本分类和机器翻译等。该模型在语料库上进行训练,通过随机梯度下降等优化算法来优化模型参数。

TextCNN

TextCNN最早于2014年由Kim在论文"Convolutional Neural Networks for Sentence Classification"中提出。该论文主要探讨了使用卷积神经网络(CNN)进行句子分类的方法。

双通道的TextCNN结构

作者Yoon Kim在论文中指出,传统的文本分类方法通常依赖于手工设计的特征,而CNN可以自动学习文本的特征表示,从而避免了繁琐的特征工程。TextCNN主要用于文本分类任务,可以在各种具有分类标签的文本数据上进行应用。

TextCNN模型结构

TextCNN的模型结构由以下几个部分组成:

  • 嵌入层(embedding layer):将词或字映射为长度为k的词向量,可以使用预训练好的词向量(如word2vec或Glove),也可以根据构建的vocabulary词表随机初始化词向量
  • 卷积层(convolutional layer):使用不同大小的卷积核(filter size)对文本向量进行多次卷积操作,提取文本特征。每次卷积操作相当于一次特征向量的提取,通过定义不同的窗口,可以提取不同的特征向量。
  • 池化层(max pooling):对每个卷积层的特征图进行最大池化操作,提取最显著的特征。也可采用平均池化操作,但实验表明最大池化效果更好。
  • 拼接层(concatenation):将所有池化后得到的特征拼接在一起。
  • 全连接层(fully connected layer):通过全连接层对拼接后的特征进行分类预测。
  • 输出层(output layer):通常使用softmax函数输出分类概率分布。对于多标签分类或二分类任务,可使用sigmoid激活函数输出每个类别的概率。

TextCNN的应用非常广泛,特别是在文本分类任务中。它可以用于情感分析,垃圾邮件过滤,媒体评议等任务。通过对不同领域文本数据进行训练,TextCNN可以有效地提取文本中的信息和特征,进行准确的分类预测。此外,TextCNN的模型结构简单,训练速度快,因此被广泛应用于各种文本处理任务。

实验数据集

中科院谭松波博士收集整理语料规模为10000的ChnSentiCorp-Htl-ba10000数据集。

ChnSentiCorp-Htl-ba10000

实验环境

实验环境版本
python3.8.6
tensroflow-gpu2.3.0
keras2.3.1
matplotlib3.5.3
numpy1.18.5
scipy1.4.1
pandas1.0.5

参数设置

参数名参数名
词向量维度(embedding)300优化器Adam
最大序列长度(maxlen)256学习率5e-5
卷积核大小(filters)256损失函数WeightedCrossEntropy
卷积核大小(kernel_size)3,4,5小批量样本数64
Dropout0.2迭代次数20

其中最大序列长度(maxlen)根据统计数据集中序列的长度分布情况来确定。可以绘制直方图或使用描述性统计方法来获取最大序列长度。将maxlen设置为数据集中绝大部分序列的长度,可以最大程度地保留数据的信息。由统计图及统计信息,将maxlen设为256,可保留数据集中绝大多数信息。
序列长度统计

评价指标

accuracy=TP+TNTP+TN+FP+FNaccuracy = \frac{TP+TN}{TP+TN+FP+FN}

precision=TPTP+FPprecision = \frac{TP}{TP+FP}

recall=TPTP+FNrecall = \frac{TP}{TP+FN}

F1=2×(precision×recall)precision+recallF1=\frac{2×(precision×recall)}{precision+recall}

其中,评价指标中各参数含义如下图所示

评价指标

停用词表

采用中文停用词表、哈工大停用词表、百度停用词表、四川大学机器智能实验室停用词库整合词表。

实验结果

准确率: 0.923
Precision: 0.9235
Recall:0.9230
F1 Score:0.9232

loss

Confusion matrix

项目代码

Github地址:https://github.com/libertysea/Chinese-sentiment-analysis

参考文献

[1] Shannon C E , Shannon C E .The mathematical theory of communication.[J]. 1949.

[2] Radford, Alec and Karthik Narasimhan. “Improving Language Understanding by Generative Pre-Training.” (2018).

[3] Radford A .Language Models are Unsupervised Multitask Learners[J].[2023-06-20].

[4] Kojima, Takeshi et al. “Large Language Models are Zero-Shot Reasoners.” ArXiv abs/2205.11916 (2022): n. pag.

[5] Ouyang L , Wu J , Jiang X ,et al.Training language models to follow instructions with human feedback[J].arXiv e-prints, 2022.DOI:10.48550/arXiv.2203.02155.

[6] Evaluating Large Language Models Trained on Code[J]. 2021.DOI:10.48550/arXiv.2107.03374.

[7] Bengio Y ,Réjean Ducharme, Vincent P .A Neural Probabilistic Language Model[J]. 2000.DOI:10.1162/153244303322533223.

[8] Mikolov T ,M. Karafiát, Burget L ,et al.Recurrent neural network based language model[C]//Annual conference of the International Speech Communication Association;INTERSPEECH 2010.ACM, 2011.DOI:10.1145/3236024.3264597.

[9] Chen Q , Zhu X , Ling Z ,et al.Enhanced LSTM for Natural Language Inference.2016[2023-06-20].DOI:10.18653/v1/P17-1152.

[10] Vaswani A , Shazeer N , Parmar N ,et al.Attention Is All You Need[J].arXiv, 2017.DOI:10.48550/arXiv.1706.03762.

[11] Peters M , Neumann M , Iyyer M ,et al.Deep Contextualized Word Representations[J]. 2018.DOI:10.18653/v1/N18-1202.

[12] Devlin J , Chang M W , Lee K ,et al.BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J]. 2018.