自然语言处理 Paddle NLP
基础自然语言处理(NLP)自然语言处理PaddleNLP-词向量应用展示自然语言处理(NLP)-前预训练时代的自监督学习自然语言处理PaddleNLP-预训练语言模型及应用自然语言处理PaddleNLP-文本语义相似度计算(ERNIE-Gram)自然语言处理PaddleNLP-词法分析技术及其应用自然语言处理PaddleNLP-快递单信息抽取理解自然语言处理PaddleNLP-信息抽取技术及应用自然语言处理PaddleNLP-基于预训练模型完成实体关系抽取--实践自然语言处理PaddleNLP-情感分析技术及应用-理论自然语言处理PaddleNLP-情感分析技术及应用SKEP-实践问答自然语言处理PaddleNLP-检索式文本问答-理论自然语言处理PaddleNLP-结构化数据问答-理论翻译自然语言处理PaddleNLP-文本翻译技术及应用-理论自然语言处理PaddleNLP-机器同传技术及应用-理论对话自然语言处理PaddleNLP-任务式对话系统-理论自然语言处理PaddleNLP-开放域对话系统-理论产业实践自然语言处理PaddleNLP-预训练模型产业实践课-理论什么是任务型对话:
任务型:用于帮助用户完成某领域的特定任务,例如订餐、查天气、订票等闲聊型:也称作开放域对话系统,目标是让用户持续的参与到交互过程,提供情感陪伴问答型:提供知识满足,具体类型比较多,如图谱问答、表格问答、文档问答等Pipeline型任务型对话系统什么是NLU?NLU(自然语言理解):是指将用户表述映射为结构化的语义表示,典型的结构化语义表示是意图+词槽的形式。意图:是指对话中用户想要表达的目的,比如订票,查天气等词槽:是指用户表述中,与任务相关的核心语义元素意图分类+词槽识别==>文本分类+序列标注什么是DST?DS(对话状态):是指将t时刻的对话表示为可供系统选择下一时刻动作信息的抽象信息(数据结构),典型而言就是每个槽值的取值分布情况(BelifState)。DST:对DS进行追踪,当前大多数工作采用BelifStatePipeline型任务式对话系统中的Policy对话策略是指根据DST估计的对话状态,通过预设的候选动作集,选择系统动作的过程。Policy中的典型方法典型方式:在离线阶段,通过监督学习或模拟学习在语料上进行学习在线阶段,通过强化学习的方式,与真实用户交互过程中学习用户模拟器在DPL中的应用定义:用户模拟器是另一套对话系统,其动作行为与真实用户类似,用来提供进行训练或评估的环境缺点:用户模拟器并不能完全模拟真实用户的对话习惯,它本身行为的有偏可能会导致学习到的是不是最优模型,从而在与真实用户交互时表现较差。Pipeline型任务式对话系统中的NLG什么是NLG?定义:自然语言生成的主要任务是将对话管理模块输出的抽象表达转换为句法合法、语义准确的自然语言句子,一般被视为一个条件语言生成任务。评估标准:人为标准:是否自然、是否多样,是否完整传达了语义、是否流畅,可读性是否好等机器指标:BLEU、perplexity、ROUGE、METEOR等虽然有多种机器评估指标,但实际上依然缺乏一种能够贴近人为感知的评估标准
端到端任务型对话系统什么是端到端任务型对话系统?
端到端任务型对话系统是受开放域对话领域的进步启发,使用模型以端到端的方式而不是分模块优化的方式构建任务型对话系统。虽然大多数端到端任务型对话系统采用了Seq2Seq框架,但端到端任务型对话系统≠Seq2Seq模型端到端任务型对话系统--示例工业界的任务型对话系统UNIT任务式对话技术发展UNIT--面向小样本的意图识别UNIT--TaskFlow:可编程对话流管理框架UNIT网站:https://ai.baidu.com/unit/home
go语言异常处理
异常处理
Go的设计者认为其它语言异常处理太过消耗资源,且设计和处理复杂,导致使用者不能很好的处理错误,甚至觉得异常和错误处理起来麻烦而被忽视、忽略掉,从而导致程序崩溃。为了解决这些问题,Go将错误处理设计的非常简单
函数调用,返回值可以返回多值,一般最后一个值可以是error接口类型的值如果函数调用产生错误,则这个值是一个error接口类型的错误如果函数调用成功,则该值是nil检查函数返回值中的错误是否是nil,如果不是nil,进行必要的错误处理error是Go中声明的接口类型
typeerrorinterface{Error()string}所有实现Error()string签名的方法,都可以实现错误接口。用Error()方法返回错误的具体描述。
packagemainimport("fmt")typeMyerrstruct{sstring}//error接口中只有一个方法,因此实现了error接口func(p*Myerr)Error()string{returnp.s}//构造实例,返回指针类型,也可以是*errorfuncNewMyerr(tstring)*Myerr{return&Myerr{t}}funcdiv(a,bint)(int,error){ifb==0{return0,NewMyerr("除零异常")}returna/b,nil}funcmain(){err:=NewMyerr("自定义error")fmt.Printf("%#v ",err)fmt.Println(err.Error())vare1error=errfmt.Printf("%#v ",e1)fmt.Println(div(5,0))}示例下面是上面代码的返回:
panic
panic发生时,往往会造成程序崩溃、服务终止等后果,所以没人希望它发生。但是,如果在错误发生时,不及时panic而终止程序运行,继续运行程序恐怕造成更大的损失,付出更加惨痛的代价。所以,有时候,panic导致的程序崩溃实际上可以及时止损,只能两害相权取其轻。panic虽然不好,体验很差,但也是万不得已,可以马上暴露问题,及时发现和纠正问题。
panic产生
runtime运行时错误导致抛出panic,比如数组越界、除零主动手动调用panic(reason),这个reason可以是任意类型panic执行
逆序执行当前已经注册过的goroutine的defer链(recover从这里介入)打印错误信息和调用堆栈调用exit(2)结束整个进程recover
recover即恢复,defer和recover结合起来,在defer中调用recover来实现对错误的捕获和恢复,让代码在发生panic后通过处理能够继续运行。类似其它语言中try/catch。
err:=recover(),v:=err.(type),v就是panic(reason)中的reason,reason可以是任意类型。
funcdiv(a,bint)int{deferfunc(){err:=recover()fmt.Printf("%T%[1]v ",err)switchv:=err.(type){casestring:fmt.Println("字符串",v)caseruntime.Error:fmt.Printf("%T%[1]v ",v)}}()r:=a/breturnr}funcmain(){fmt.Println(div(5,0))}打印结果:
一旦在某函数中panic,当前函数panic之后的语句将不再执行,开始执行defer。如果在defer中错误被recover后,就相当于当前函数产生的错误得到了处理。当前函数执行完defer,当前函数退出执行,程序还可以从当前函数之后继续执行。
有panic,一路向外抛出,但没有一处进行recover,也就是说没有地方处理错误,程序崩溃
有painc,有recover来捕获,相当于错误被处理掉了,当前函数defer执行完后,退出当前函数,从当前函数之后继续执行。