×

bilstm代码

bilstm代码(Prompt-NLP新范式)

admin admin 发表于2023-12-02 05:12:09 浏览31 评论0

抢沙发发表评论

大家好,今天小编来为大家解答以下的问题,关于bilstm代码,Prompt-NLP新范式这个很多人还不知道,现在让我们一起来看看吧!

本文目录

Prompt-NLP新范式

NLP技术发展的四种范式:

Prompt的起源可以追溯到GPT-2,T5,GPT-3等的一些研究,发现在输入样本前加入一个和任务相关的 前缀 ,就可以提示模型接下来要输出的内容。比如在GPT-3的预测阶段,只需要在输入样本前加上Translate English to French: 就可以提示模型接下来要进行翻译任务,即完全依靠模型在预训练阶段学到的知识来进行预测,不需要在下游任务上再依靠task-specific的 监督数据 对模型进行fine-tune就可直接使用,一方面减少了fine-tune模型的计算和存储代价,另一方面也给样本量极度缺乏的 少样本领域(zero/few-shot) 带来了福音。

这种依靠 提示信息(Prompt) 来激发模型的内在潜能,挖掘模型在大规模预训练阶段学到的知识的做法引领了NLP领域的第四范式。人们逐渐开始思考如何更加 高效地利用 预训练语言模型的大量参数,如何将各种下游任务都统一到一个 通用框架 下,使得模型能够根据不同的提示信息进行不同的任务,从而不需要再为每个下游任务训练单独的模型。

本文将对Prompt快速发展过程中一些重要论文的核心创新点进行简要介绍,而不会详细描述过多模型细节(欲知全貌建议直接读原论文)。

论文:Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference (2020)

该论文对Prompt模式的研究进行了规范,提出了 Pattern-Verbalizer 的概念:

比如对于5分类任务,给定输入样本 a ,对应的模板函数 P 和标签映射函数 v 可为:

注意这里多种Prompt模板函数以及答案映射函数都是 人工手动设计 的。 然后利用新构建出来的 P(x),v(l) 对预训练模型进行fine-tune,其他更多细节不再展开,实验结果显示该方法在少样本任务上表现很好。

论文:It’s Not Just Size That Matters: Small Language Models Are Also Few-Shot Learners ( PET原班人马

GPT-3出来后显示了其在少样本学习上的惊人能力,但是其庞大的参数量也令人望而却步。而本文作者提出 “小模型在少样本学习上也可以有卓越表现” ,直接对标GPT-3这个庞然大物,从而奠定了 PET所提范式 在江湖的霸主地位,引起了各大武林人士的关注。

该文证明了PET所提范式的有效性,同时作者还分析发现设计不同的 Prompt 模板和标签映射函数 Verbalizer 对模型性能影响较大,从而引起后来人员涌入改进Prompt模板和标签映射Verbalizer构造的浪潮中。

论文:Making Pre-trained Language Models Better Few-shot Learners

取代PET中手动构建Prompt模板和标签映射函数的过程,自动化搜索模板和标签映射,同时参考GPT-3中的in-context learning,在输入样本中加入示例(demonstrations)作为上下文,帮助模型更好地理解要做什么。

实验表明,在少样本上,这种基于prompt的fine-tune效果能够明显好于标准的fine-tune,并且在样本中加入示例确实能够带来增益。

也许未必非要构建人能理解的 离散tokens式 的Prompt,构建模型能够接受的 连续向量式 的Prompt也未尝不可。

4.1 论文: Prefix-Tuning : Optimizing Continuous Prompts for Generation

该文针对 NLG(Natural Language Generation) 任务,提出了构建连续的prompts。在预训练模型的每一层加上一个Prefix前缀矩阵,固定预训练模型的参数,仅训练前缀矩阵的参数,在few-shot设定下,性能超过标准的fine-tune。

实验结果表明,在 全量 数据下,prompt-based fine-tune的效果能够 相当 standard fine-tune;在 少样本 下,能够 超过 standard fine-tune。

4.2 论文:GPT Understands, Too ( P-tuning )

该文针对 NLU(Natural Language Understanding) 任务,也提出了构建连续的prompts。与 Prefix-tuning 不同的是,这里的prompts仅需要加在输入层,而不用加在网络的每一层,就可以work well。

利用 biLSTM 对prompts进行 Encode ,然后将编码后的 prompts embedding 和样本 x 输入预训练语言模型(PLM),之后同时fine-tune prompt embeddings 和 pretrained model 。

考虑到优化连续的prompt向量有两个问题:

因此作者提出先采用 biLSTM 作为 Prompt Encoder 来编码prompt向量。

具体Prompt模板设计为:

实验结果表明,在 全量 数据下,prompt-based fine-tune的效果能够 相当 或超过standard fine-tune。

论文:The Power of Scale for Parameter-Efficient Prompt Tuning

该文提出为每个下游任务设计自己的prompt,拼接到输入样本上,然后完全freeze预训练模型的权重,仅训练prompts对应的权重参数。发现随着模型体积的增大, Prompt-tuning 的效果逐渐追上标准 fine-tune 的效果。

这里 Model Tuning 就是指标准的 fine-tune ,即在下游任务上对预训练模型的参数进行更新。

最后对各论文实验结果的普遍规律进行一个总结。各论文采用的fine-tune策略主要有以下三种:

bigru和bilstm结果差距

BiGRU参数更少因此更容易收敛,但是数据集很大的情况下,BiLSTM表达性能更好。在该题中经过尝试后发现BiGRU的模型表达能力比BiLSTM更优秀。attention即为注意力,当前的输入与目标状态越相似,那么在当前的输入的权重就会越大,说明当前的输出越依赖于当前的输入。

bilstm哪年发布的

1997年。bilstm的产品介绍显示,bilstm是1997年发布的。LSTM的全称是Long Short-Term Memory,是RNN(Recurrent Neural Network)的一种。LSTM由于其设计的特点,非常适合用于对时序数据的建模,如文本数据。

bilstm模型结构

biLSTM即双向LSTM,它是由两个单独的两个lstm组合合成,为了更直观的理解,我画了下面的图 组合起来就是下面的图 注意上图只是一层的bilstm,如果是多层的bilstm,则是两个不同方向的多层lstm按照上图拼接在一起 最终的每个时间步i输出hi = 表示拼接操作,即如果lstm的隐层维度是50,那么bilstm的维度为100

cnn和cnn与bilstm对于多分类哪个精度高

bilstm对于多分类精度高。BiLSTM:Bi-directionalLongShort-TermMemory的缩写,是由前向LSTM与后向LSTM组合而成。可以看出其很适合做上下有关系的序列标注任务,因此在NLP中常被用来建模上下文信息。我们可以简单理解为双向LSTM是LSTM的改进版,LSTM是CNN的改进版。这里简单说一下CNN,熟悉的可以直接跳过。CNN的意思是,为了预测最后的结果,我先用第一个词预测,当然,只用第一个预测的预测结果肯定不精确,我把这个结果作为特征,跟第二词一起,来预测结果;接着,我用这个新的预测结果结合第三词,来作新的预测;然后重复这个过程;直到最后一个词。这样,如果输入有n个词,那么我们事实上对结果作了n次预测,给出了n个预测序列。整个过程中,模型共享一组参数。因此,CNN降低了模型的参数数目,防止了过拟合,同时,它生来就是为处理序列问题而设计的,因此,特别适合处理序列问题。LSTM对CNN做了改进,使得其能够捕捉更长距离的信息。但是不管是LSTM还是CNN,都有一个问题,它是从左往右推进的,因此后面的词会比前面的词更重要。因此出现了双向LSTM,它从左到右做一次LSTM,然后从右到左做一次LSTM,然后把两次结果组合起来。

Bert加bilstm和crf做ner的意义

bert为什么加不加crf都行,加crf好处在哪? 加crf:相当于是显式地去捕捉标签之间的依赖关系。 但是为什么很多人说bert和bert+crf效果差不多,我觉得bert能够表达的语义空间足够丰富,去捕捉到标签之间的依赖关系。也有人说bert+crf还是会好一些,我认为可能是数据集相关特性的关系,或者调参等等原因。 1.BERT+BiLSTM+CRF》BiLSTM+CRF 多了一层BERT初始化word embedding,比随机初始化肯定要好,这个就不多解释了。 2.BERT+BiLSTM+CRF》BERT+CRF 首先BERT使用的是transformer,而transformer是基于self-attention的,也就是在计算的过程当中是弱化了位置信息的(仅靠position embedding来告诉模型输入token的位置信息),而在序列标注任务当中位置信息是很有必要的,甚至方向信息也很有必要(我记得复旦大学去年的一篇NER论文TENER当中有提到过这一点,感兴趣可以直接知乎搜TENER),所以我们需要用LSTM习得观测序列上的依赖关系,最后再用CRF习得状态序列的关系并得到答案,如果直接用CRF的话,模型在观测序列上学习力就会下降,从而导致效果不好。(纯属个人见解)

bilstm需要自动调参嘛

需要。bilstm是一种特殊的循环神经网络架构,需要通过自动调参来处理序列数据。bilstm同时也是一种神经网络的结构,它能够让网络在处理序列数据时关注序列中的某些特定元素,能够帮助网络理解句子。所以说bilstm需要自动调参。

序列标注任务常用方法

HMM 中,有5个基本元素:{N,M,A,B,π},结合 序列标志任务(NER) 对其的概念定义为:

而以上的这些元素,都是可以从训练语料集中统计出来的。最后根据这些统计值,应用 维特比(viterbi) 算法,算出词语序列背后的标注序列了,命名实体识别本质上就是序列标注,只需要定义好对应的标签以及模式串,就可以从标注序列中提取出实体

假设对于t时刻的一个词 公式就可写作: 齐次马尔科夫性假设:隐藏的马尔科夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关

观测独立性假设:假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测即状态无关.观测概率的公式可以表达如下: 将发射概率和转移概率相结合,得到整个句子最后的公式:

相对于HMM,CRF有两个优势

令 是观测序列, 是状态序列, 是 CRF 模型的参数,则 的条件概率是: 其中 是 CRF 特征函数集,加上正则化项,在做对数变换就得到 CRF 训练的目的是求解令 最大化的

应用于NER中的BiLSTM-CRF模型主要由Embedding层(主要有词向量,字向量以及一些额外特征),双向LSTM层,以及最后的CRF层构成。 实验结果表明biLSTM-CRF已经达到或者超过了基于丰富特征的CRF模型,成为目前基于深度学习的NER方法中的最主流模型。 在特征方面,该模型继承了深度学习方法的优势,无需特征工程,使用词向量以及字符向量就可以达到很好的效果,如果有高质量的词典特征,能够进一步获得提高

正常 CNN 的filter,都是作用在输入矩阵一片连续的区域上,不断sliding做卷积。 dilated CNN 为这个filter增加了一个 dilation width ,作用在输入矩阵的时候,会skip所有 dilation width 中间的输入数据;而filter本身的大小保持不变,这样filter获取到了更广阔的输入矩阵上的数据, 看上去就像是膨胀了一般。 具体使用时, dilated width 会随着层数的增加而指数增加。这样随着层数的增加,参数数量是线性增加的,而 receptive field 却是指数增加的,可以很快覆盖到全部的输入数据。

图中可见感受域是以指数速率扩大的。原始感受域是位于中心点的1x1区域:

对应在文本上,输入是一个一维的向量,每个元素是一个 character embedding :

IDCNN 对输入句子的每一个字生成一个 logits ,这里就和 BiLSTM 模型输出 logits 完全一样,加入 CRF 层,用 Viterbi 算法解码出标注结果,在 BiLSTM 或者 IDCNN 这样的网络模型末端接上 CRF 层是序列标注的一个很常见的方法。 BiLSTM 或者 IDCNN 计算出的是每个词的各标签概率,而 CRF 层引入序列的转移概率,最终计算出loss反馈回网络

BERT模型+全连接层 :BERT的encoding vector通过 FC layer 映射到标签集合后,单个token的output vector经过Softmax处理,每一维度的数值就表示该token的词性为某一词性的概率。基于此数据便可计算loss并训练模型。但根据 BiLSTM+CRF 模型的启发,在 BERT+FC layer 的基础上增加 CRF layer 加入一些约束来保证最终的预测结果是有效的。这些约束可以在训练数据时被CRF层自动学习得到,从而减少预测错误的概率

BiLSTM+CRF 优点是泛化能力强;缺点是 需要大量的标注样本 。在样本很少的情况下,效果会很不理想。为了更快速地实现一个实体提取器,提高系统易用性,可以采用 迁移学习 的思想,在先验知识的基础上进行模型训练,从而使用 BERT+BiLSTM+CRF

同样的,输入是wordPiece tokenizer得到的 tokenid ,进入Bert预训练模型抽取丰富的文本特征得到 的输出向量,输出向量过 BiLSTM 从中提取实体识别所需的特征,得到 的向量,最终进入 CRF 层进行解码,计算最优的标注序列

NLP新人,欢迎大家一起交流,互相学习,共同成长~~

关于bilstm代码到此分享完毕,希望能帮助到您。