现在很多做AI语音的厂商都在说NLP,NLP和传统关键词的区别究竟是什么?

现在很多做AI语音的厂商都在说NLP,NLP和传统关键词的区别究竟是什么?,第1张

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也未尝不可。

41 论文: 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。

42 论文: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策略主要有以下三种:

二、配置ntp服务器端
restrict 0000 mask 0000 nomodify notrap noquery
restrict 1921681660 mask 2552552550 nomodify
restrict 127001
server 2107214544 prefer
server 12712710
fudge 12712710 stratum 8
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
说明:关于权限设定部分
权限的设定主要以 restrict 这个参数来设定,主要的语法为:
restrict IP地址 mask 子网掩码 参数
其中 IP 可以是IP地址,也可以是 default ,default 就是指所有的IP
参数有以下几个:
ignore :关闭所有的 NTP 联机服务
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :客户端除非通过认证,否则该客户端来源将被视为不信任子网
noquery :不提供客户端的时间查询
注意:如果参数没有设定,那就表示该 IP (或子网)没有任何限制!
三、查看NTP服务的运行状况
#watch ntpq -p
参数说明:
remote: 它指的就是本地机器所连接的远程NTP服务器
refid: 它指的是给远程服务器(eg 1936019975)提供时间同步的服务器
st: 远程服务器的层级别(stratum) 由于NTP是层型结构,有顶端的服务器,多层的Relay Server再到客户端 所以服务器从高到低级别可以设定为1-16 为了减缓负荷和网络堵塞,原则上应该避免直接连接到级别为1的服务器的
t: 这个我也不知道啥意思^_^
when: 我个人把它理解为一个计时器用来告诉我们还有多久本地机器就需要和远程服务器进行一次时间同步
poll: 本地机和远程服务器多少时间进行一次同步(单位为秒) 在一开始运行NTP的时候这个poll值会比较小,那样和服务器同步的频率也就增加了,可以尽快调整到正确的时间范围之后poll值会逐渐增大,同步的频率也就会相应减小
reach: 这是一个八进制值,用来测试能否和服务器连接每成功连接一次它的值就会增加
delay: 从本地机发送同步要求到服务器的round trip time
offset: 这是个最关键的值, 它告诉了我们本地机和服务器之间的时间差别 offset越接近于0,我们就和服务器的时间越接近
jitter: 这是一个用来做统计的值 它统计了在特定个连续的连接数里offset的分布情况 简单地说这个数值的绝对值越小我们和服务器的时间就越精确
四、客户端配置
ntpdate 192168166100
LINUX做为客户端自动同步时间
如果想定时进行时间校准,可以使用crond服务来定时执行。
编辑 /etc/crontab 文件
加入下面一行:
30 8 root /usr/sbin/ntpdate 192168166100; /sbin/hwclock -w #19216801是NTP服务器的IP地址
然后重启crond服务
service crond restart
这样,每天 8:30 Linux 系统就会自动的进行网络时间校准。
WINDOWS 需要打开windows time服务和RPC的二个服务
如果在打开windows time 服务,时报 错误1058,进行下面 *** 作
1运行 cmd 进入命令行,然后键入
w32tm /register 进行注册
正确的响应为:W32Time 成功注册。
2如果上一步正确,用 net start "windows time" 或 net start w32time 启动服务。
五、报错说明
当用ntpdate -d 来查询时会发现导致 no server suitable for synchronization found 的错误的信息有以下2个:
错误1Server dropped: Strata too high
在ntp客户端运行ntpdate serverIP,出现no server suitable for synchronization found的错误。
在ntp客户端用ntpdate –d serverIP查看,发现有“Server dropped: strata too high”的错误,并且显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”。
这是因为NTP server还没有和其自身或者它的server同步上。
以下的定义是让NTP Server和其自身保持同步,如果在/ntpconf中定义的server都不可用时,将使用local时间作为ntp服务提供给ntp客户端。
server 12712710 fudge
12712710 stratum 8
在ntp server上重新启动ntp服务后,ntp server自身或者与其server的同步的需要一个时间段,这个过程可能是5分钟,在这个时间之内在客户端运行ntpdate命令时会产生no server suitable for synchronization found的错误。
那么如何知道何时ntp server完成了和自身同步的过程呢?
在ntp server上使用命令:
# watch ntpq -p
出现画面:
Every 20s: ntpq -p Thu Jul 10 02:28:32 2008
remote refid st t when poll reach delay offset jitter
==============================================================================
1921683022 LOCAL(0) 8 u 22 64 1 2113 179133 0001
LOCAL(0) LOCAL(0) 10 l 21 64 1 0000 0000 0001
注意LOCAL的这个就是与自身同步的ntp server。
注意reach这个值,在启动ntp server服务后,这个值就从0开始不断增加,当增加到17的时候,从0到17是5次的变更,每一次是poll的值的秒数,是64秒5=320秒的时间。
如果之后从ntp客户端同步ntp server还失败的话,用ntpdate –d来查询详细错误信息,再做判断。
错误2Server dropped: no data
从客户端执行netdate –d时有错误信息如下:
transmit(1921683022)
transmit(1921683022)
transmit(1921683022)
transmit(1921683022)
transmit(1921683022)
1921683022: Server dropped: no data
server 1921683022, port 123

28 Jul 17:42:24 ntpdate[14148]: no server suitable for synchronization found
出现这个问题的原因可能有2:
1检查ntp的版本,如果你使用的是ntp42(包括42)之后的版本,在restrict的定义中使用了notrust的话,会导致以上错误。
使用以下命令检查ntp的版本:
# ntpq -c version
下面是来自ntp官方网站的说明:
The behavior of notrust changed between versions 41 and 42
In 41 (and earlier) notrust meant "Don't trust this host/subnet for time"
In 42 (and later) notrust means "Ignore all NTP packets that are not cryptographically authenticated" This forces remote time servers to authenticate themselves to your (client) ntpd
解决:
把notrust去掉。
2检查ntp server的防火墙。可能是server的防火墙屏蔽了upd 123端口。
可以用命令
#iptables INPUT -p udp -m udp --dport 123 -j ACCEPT
如果觉得麻烦就直接把防火墙停掉
#service iptables stop
来关掉iptables服务后再尝试从ntp客户端的同步,如果成功,证明是防火墙的问题,需要更改iptables的设置。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/12980865.html

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

发表评论

登录后才能评论

评论列表(0条)

保存