其中表示查询向量的维度。
那什么是Self-Attention机制?Self-Attention机制是一种关键的注意力机制,用于Transformer模型中。在忽略线性变换矩阵对输入向量序列的影响时,Self-Attention机制可以表示为以下形式:
其中,为输入向量,表示输入向量序列的矩阵形式。
从上述公式可以看出,Self-Attention机制的计算结果是输入向量的加权累加形式,类似于卷积神经网络中的卷积运算。权重来源于当前词与整个序列的向量内积,在稠密向量空间中,向量内积表示了词与词之间的关联度,具有高关联度的词对应的内积较大,从而赋予输入值更大的权重,而相互无关的词则被赋予较小的权重。
Multi-Head Attention是由多个Self-Attention组合而成,首先计算多个由Self-Attention得到的矩阵,然后将这些矩阵拼接起来,再经过全连接操作,最终得到Multi-Head Attention的输出。
Transformer的诞生使得全句信息的捕捉和大规模语料库上的训练两大问题都得到了解决,使得语言模型进入了一个全新的阶段。
随着神经网络语言模型的发展,语言模型的准确度得到了持续的提升。然而,构成神经网络语言模型基石的word embedding存在着一词多义的问题,因为通过look-up table矩阵计算得到的向量表示是唯一的,难以区分不同上下文环境下的词。
为了解决这个问题,预训练语言模型使用词向量在神经网络模型中的隐藏层向量作为word embedding,从而能够在编码上区分不同上下文环境下的词。
ELMo(Embeddings from Language Models)是由AllenAI于2018年发表的《Deep contextualized word representations》一文中提出的。
ELMo使用双向LSTM模型来捕捉上下文信息,并以双向语言模型为优化目标。经过在语料库上的训练得到参数后,ELMo使用多个网络前向层和后向层隐藏层拼接后的向量加权和,作为输入词的embedding。
ELMo的word embedding结果可以作为下游任务的词向量输入。它创造性地解决了一词在不同上下文中如何区分的问题。然而,由于ELMo采用了较浅的两层双向LSTM,其难以学习文本数据的所有语言规律,因此其潜力有限。此外,双向LSTM并不是捕获长距离依赖性的最佳方法,因为它的串行结构会受到梯度消失问题的影响,并且无法进行并行计算。最后,ELMo未充分发挥预训练模型的能力,因为它仅在获取隐层表示时使用,并且在下游任务中微调模型是从头开始学习的,不共享预训练模型的参数。
GPT(Generative Pre-Training)是由OpenAI于2018年发表的《Improving Language Understanding by Generative Pre-Training》一文中提出的。
GPT模型主体采用了Transformer的Decoder结构,不过在原始的Transformer中去除了一个子层——Multi-Head Attention。模型的训练目标是单向语言模型,这使得它具有捕捉上文信息的能力。
与ELMo方法相比,GPT在下游模型的word embedding生成上做了不同的处理。不再使用隐藏层输入的加权和作为下游模型的word embedding,而是在预训练模型的输入和输出上增加任务导向的小型网络结构。这个额外的网络结构通过小参数训练和对预训练模型参数的微调(fine-tuning)来完成下游任务。
在上文中已经对GPT模型进行了详细介绍,所以在此不再赘述。
BERT(Bidirectional Encoder Representations from Transformers)是由Google于2018年发表的一篇论文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》中提出的模型。
该模型采用了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是由Tomas Mikolov等人于2013年提出的一种词向量表示模型。它通过学习词语的分布式表示,将每个词语映射到一个稠密的实值向量空间中。Word2Vec模型主要有两种实现方法:连续词袋模型(CBOW)和跳字模型(Skip-gram)。
跳字模型是Word2Vec的原始形式,它的思想是通过中心词来预测上下文词。具体而言,对于给定的一个中心词,跳字模型通过最大化中心词与其周围上下文词的点积的概率来训练模型。这个概率可以通过使用softmax函数来计算。通过最大化这个概率,模型可以学习到中心词与上下文词之间的关联。
连续词袋模型是跳字模型的一种变体,它的目标是根据上下文词来预测中心词。具体而言,给定一组上下文词,连续词袋模型的目标是最大化预测中心词的概率。同样,可以使用softmax函数来计算这个概率。通过最大化这个概率,模型可以学习到词语之间的语义关联。
在Word2Vec中,词向量的维度是一个可以调整的超参数。通过训练算法,模型会学习到每个词语在向量空间中的表示。这些词向量在语义上相似的词语之间会有更小的距离。因此,Word2Vec模型可以用于计算词语之间的语义相似度。此外,通过执行向量运算,如向量加法和减法,可以进行一些有趣的语义推理。
Word2Vec的理论基础是分布式假设,即具有相似上下文的词语在语义上也是相似的。通过将词语映射到向量空间,Word2Vec模型能够捕捉到这种语义相似性。因此,Word2Vec在自然语言处理任务中具有广泛的应用,如词语表示、语义相似度计算、文本分类和机器翻译等。该模型在语料库上进行训练,通过随机梯度下降等优化算法来优化模型参数。
TextCNN最早于2014年由Kim在论文"Convolutional Neural Networks for Sentence Classification"中提出。该论文主要探讨了使用卷积神经网络(CNN)进行句子分类的方法。
作者Yoon Kim在论文中指出,传统的文本分类方法通常依赖于手工设计的特征,而CNN可以自动学习文本的特征表示,从而避免了繁琐的特征工程。TextCNN主要用于文本分类任务,可以在各种具有分类标签的文本数据上进行应用。
TextCNN的模型结构由以下几个部分组成:
TextCNN的应用非常广泛,特别是在文本分类任务中。它可以用于情感分析,垃圾邮件过滤,媒体评议等任务。通过对不同领域文本数据进行训练,TextCNN可以有效地提取文本中的信息和特征,进行准确的分类预测。此外,TextCNN的模型结构简单,训练速度快,因此被广泛应用于各种文本处理任务。
中科院谭松波博士收集整理语料规模为10000的ChnSentiCorp-Htl-ba10000数据集。
实验环境 | 版本 |
---|---|
python | 3.8.6 |
tensroflow-gpu | 2.3.0 |
keras | 2.3.1 |
matplotlib | 3.5.3 |
numpy | 1.18.5 |
scipy | 1.4.1 |
pandas | 1.0.5 |
参数名 | 值 | 参数名 | 值 |
---|---|---|---|
词向量维度(embedding) | 300 | 优化器 | Adam |
最大序列长度(maxlen) | 256 | 学习率 | 5e-5 |
卷积核大小(filters) | 256 | 损失函数 | WeightedCrossEntropy |
卷积核大小(kernel_size) | 3,4,5 | 小批量样本数 | 64 |
Dropout | 0.2 | 迭代次数 | 20 |
其中最大序列长度(maxlen)根据统计数据集中序列的长度分布情况来确定。可以绘制直方图或使用描述性统计方法来获取最大序列长度。将maxlen设置为数据集中绝大部分序列的长度,可以最大程度地保留数据的信息。由统计图及统计信息,将maxlen设为256,可保留数据集中绝大多数信息。
其中,评价指标中各参数含义如下图所示
采用中文停用词表、哈工大停用词表、百度停用词表、四川大学机器智能实验室停用词库整合词表。
准确率: 0.923
Precision: 0.9235
Recall:0.9230
F1 Score:0.9232
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.