李宏毅2021机器学习笔记——Transformer
Transformer_P1_Encoder
变形⾦刚的英⽂就是Transformer,那Transformer也跟我们之后会,提到的BERT有⾮常强烈的关係,所以这边有⼀个BERT探出头来,代表说
Transformer跟BERT,是很有关係的
Sequence-to-sequence (Seq2seq)
Transformer就是⼀个,Sequence-to-sequence的model,他的缩写,我们会写做Seq2seq,那Sequence-to-sequence的model,⼜是什麼
呢
我们之前在讲input a sequence的,case的时候,我们说input是⼀个sequence,那output有⼏种可能
⼀种是input跟output的长度⼀样,这个是在作业⼆的时候做的
有⼀个case是output指,output⼀个东西,这个是在作业四的时候做的
那接来作业五的case是,我们不知道应该要output多长,由机器⾃⼰决定output的长度,即Seq2seq
1. 举例来说,Seq2seq⼀个很好的应⽤就是 语⾳辨识
在做语⾳辨识的时候,输⼊是声⾳讯号,声⾳讯号其实就是⼀串的vector,输出是语⾳辨识的结果,也就是输出的这段 声⾳讯号,所对应的⽂
字
我们这边⽤圈圈来代表⽂字,每⼀个圈圈就代表,⽐如说中⽂裡⾯的⼀个⽅块⼦,今天输⼊跟输出的长度,当然是有⼀些关係,但是却没有绝
对的关係,输⼊的声⾳讯号,他的长度是⼤T,我们并没有办法知道说,根据⼤T输出的这个长度N⼀定是多少。
输出的长度由机器⾃⼰决定,由机器⾃⼰去听这段声⾳讯号的内容,⾃⼰决定他应该要输出⼏个⽂字,他输出的语⾳辨识结果,输出的句⼦
裡⾯应该包含⼏个字,由机器⾃⼰来决定,这个是语⾳辨识
2. 还有很多其他的例⼦,⽐如说作业五我们会做机器翻译
让机器读⼀个语⾔的句⼦,输出另外⼀个语⾔的句⼦,那在做机器翻译的时候,输⼊的⽂字的长度是N,输出的句⼦的长度是N’,那N跟
N’之间的关係,也要由机器⾃⼰来决定
输⼊机器学习这个句⼦,输出是machine learning,输⼊是有四个字,输出有两个英⽂的词汇,但是并不是所有中⽂跟英⽂的关係,都是输出
就是输⼊的⼆分之⼀,到底输⼊⼀段句⼦,输出英⽂的句⼦要多长,由机器⾃⼰决定
3. 甚⾄可以做更复杂的问题,⽐如说做语⾳翻译
语⾳翻译就是,你对机器说⼀句话,⽐如说machine learning,他输出的不是英⽂,他直接把他听到的英⽂的声⾳讯号翻译成中⽂⽂字
你对他说machine learning,他输出的是机器学习
為什麼我们要做,Speech Translation这样的任务,為什麼我们不直接先做⼀个语⾳辨识,再做⼀个机器翻译,把语⾳辨识系统跟机器翻译
系统,接起来 就直接是语⾳翻译?
因為世界上有很多语⾔,他根本连⽂字都没有,世界上有超过七千种语⾔,那其实在这七千种语⾔,有超过半数其实是没有⽂字的,对这些没
有⽂字的语⾔⽽⾔,你要做语⾳辨识,可能根本就没有办法,因為他没有⽂字,所以你根本就没有办法做语⾳辨识,但我们有没有可能对这些
语⾔,做语⾳翻译,直接把它翻译成,我们有办法阅读的⽂字
Hokkien(闽南语、台语)
⼀个很好的例⼦也许就是,台语的语⾳辨识,但我不会说台语没有⽂字,很多⼈觉得台语是有⽂字的,但台语的⽂字并没有那麼普及,现在听说⼩学
都有教台语的⽂字了,但台语的⽂字,并不是⼀般⼈能够看得懂的
如果你做语⾳辨识,你给机器⼀段台语,然后它可能输出是母汤,你根本就不知道,这段话在说什麼。
所以我们期待说机器也许可以做语⾳的翻译,对它讲⼀句台语,它直接输出的是同样意思的,中⽂的句⼦,那这样⼀般⼈就可以看懂
我们可以训练⼀个类神经⽹路,这个类神经⽹路听某⼀种语⾔,的声⾳讯号,输出是另外⼀种语⾔的⽂字。
今天你要训练⼀个neural network,你就需要有input跟output的配合,你需要有台语的声⾳讯号,跟中⽂⽂字的对应关係,那这样的资料是⽐较
容易收集的。⽐如说YouTube上⾯,有很多的乡⼟剧
乡⼟剧就是,台语语⾳ 中⽂字幕,所以你只要它的台语语⾳载下来,中⽂字幕载下来,你就有台语声⾳讯号,跟中⽂之间的对应关係,你就可以硬
train⼀个模型,然后叫机器直接做台语的语⾳辨识,输⼊台语 输出中⽂
那你可能会觉得这个想法很狂,⽽且好像听起来有很多很多的问题,那我们实验室就载了,⼀千五百个⼩时的乡⼟剧的资料,然后 就真的拿来训
练⼀个,语⾳辨识系统
你可能会觉得说,这听起来有很多的问题
乡⼟剧有很多杂讯,有很多的⾳乐,不要管它这样⼦
乡⼟剧的字幕,不⼀定跟声⾳有对起来,就不要管它这样⼦
台语还有⼀些,⽐如说台罗拼⾳,台语也是有类似⾳标这种东西,也许我们可以先辨识成⾳标,当作⼀个中介,然后在从⾳标转成中⽂,也没有
这样做
直接训练⼀个模型,输⼊是声⾳讯号,输出直接就是中⽂的⽂字,这种没有想太多 直接资料倒进去,就训练⼀个模型的⾏為,就叫作硬train⼀发
那你可能会想说,这样⼦硬train⼀发到底能不能够,做⼀个台语语⾳辨识系统呢,其实 还真的是有可能的,以下是⼀些真正的结果
机器在听的⼀千五百个⼩时的,乡⼟剧以后,你可以对它输⼊⼀句台语,然后他就输出⼀句中⽂的⽂字,以下是真正的例⼦
机器听到的声⾳是这样⼦的
你的⾝体撑不住(台语),那机器输出是什麼呢,它的输出是 你的⾝体撑不住,这个声⾳讯号是你的⾝体撑不住(台语),但机器并不是输出⽆勘,
⽽是它就输出撑不住
或者是机器听到的,是这样的声⾳讯号,没事你為什麼要请假(台语),没事你為什麼要请假,机器听到没事(台语),它并不是输出 没代没誌,它
是输出 没事,这样听到四个⾳节没代没誌(台语),但它知道说台语的没代没誌(台语),翻成中⽂ 也许应该输出 没事,所以机器的输出是,没事
你為什麼要请假
但机器其实也是蛮容易犯错的,底下特别找机个犯错的例⼦,给你听⼀下,你听听这⼀段声⾳讯号,不会腻吗(台语),他说不会腻吗(台语),我⾃
⼰听到的时候我觉得,我跟机器的答案是⼀样的,就是说要⽣了吗,但其实这句话,正确的答案就是,不会腻吗(台语),不会腻吗
当然机器在倒装,你知道有时候你从台语,转成中⽂句⼦需要倒装,在倒装的部分感觉就没有太学起来,举例来说它听到这样的句⼦,我有跟⼚
长拜託(台语),他说我有跟⼚长拜託(台语),那机器的输出是,我有帮⼚长拜託,但是你知道说这句话,其实是倒装,我有跟⼚长拜託(台语),是我
拜託⼚长,但机器对於它来说,如果台语跟中⽂的关係需要倒装的话,看起来学习起来还是有⼀点困难
这个例⼦想要告诉你说,直接台语声⾳讯号转繁体中⽂,不是没有可能,是有可能可以做得到的,那其实台湾有很多⼈都在做,台语的语⾳辨识,如
果你想要知道更多有关,台语语⾳辨识的事情的话,可以看⼀下下⾯这个
Text-to-Speech (TTS) Synthesis
台语语⾳辨识反过来,就是台语的语⾳合成,我们如果是⼀个模型,输⼊台语声⾳ 输出中⽂的⽂字,那就是语⾳辨识,反过来 输⼊⽂字 输出声⾳讯
号,就是语⾳合成
这边就是demo⼀下台语的语⾳合成,这个资料⽤的是,台湾 媠声(台语)的资料,来找GOOGLE台湾媠声(台语),就可以找到这个资料集,裡⾯就是
台语的声⾳讯号,听起来像是这个样⼦
⽐如说你跟它说,欢迎来到台湾台⼤语⾳处理实验室
不过这边是需要跟⼤家说明⼀下,现在还没有真的做End to End的模型,这边模型还是分成两阶,他会先把中⽂的⽂字,转成台语的台罗拼⾳,就
像是台语的KK⾳标,在把台语的KK⾳标转成声⾳讯号,不过从台语的KK⾳标,转成声⾳讯号这⼀段,就是⼀个像是Transformer的network,其
实是⼀个叫做echotron的model,它本质上就是⼀个Seq2Seq model,⼤概长的是这个样⼦
所以你输⼊⽂字,欢迎来到台⼤语⾳处理实验室,机器的输出是这个样⼦的,欢迎来到台⼤(台语),语⾳处理实验室(台语),或是你对他说这⼀句中
⽂,然后他输出的台语是这个样⼦,最近肺炎真严重(台语),要记得戴⼝罩 勤洗⼿(台语),有病就要看医⽣(台语)
所以你真的是可以,合出台语的声⾳讯号的,就⽤我们在这⼀门课裡⾯学到的,Transformer或者是Seq2Seq的model
Seq2seq for Chatbot
刚才讲的是跟语⾳⽐较有关的,那在⽂字上,也会很⼴泛的使⽤了Seq2Seq model
举例来说你可以⽤Seq2Seq model,来训练⼀个聊天机器⼈
聊天机器⼈就是你对它说⼀句话,它要给你⼀个回应,输⼊输出都是⽂字,⽂字就是⼀个vector Sequence,所以你完全可以⽤Seq2Seq 的
model,来做⼀个聊天机器⼈
你就要收集⼤量⼈的对话,像这种对话你可以收集,电视剧 电影的台词 等等,你可以收集到,⼀堆⼈跟⼈之间的对话
假设在对话裡⾯有出现,某⼀个⼈说Hi,和另外⼀个⼈说,Hello How are you today,那你就可以教机器说,看到输⼊是Hi,那你的输出就要
跟,Hello how are you today,越接近越好
那就可以训练⼀个Seq2Seq model,那跟它说⼀句话,它就会给你⼀个回应
Question Answering (QA)
那事实上Seq2Seq model,在NLP的领域,在natural language processing的领域的使⽤,是⽐你想像的更為⼴泛,其实很多natural
language processing的任务,都可以想成是question answering,QA的任务
Question Answering,就是给机器读⼀段⽂字,然后你问机器⼀个问题,希望他可以给你⼀个正确的答案
假设你今天想做的是翻译,那机器读的⽂章就是⼀个英⽂句⼦,问题就是这个句⼦的德⽂翻译是什麼,然后输出的答案就是德⽂
或者是你想要叫机器⾃动作摘要,摘要就是给机器读⼀篇长的⽂章,叫他把长的⽂章的重点节录出来,那你就是给机器⼀段⽂字,问题是这段
⽂字的摘要是什麼,然后期待他答案可以输出⼀个摘要
或者是你想要叫机器做Sentiment analysis,Sentiment analysis就是机器要⾃动判断⼀个句⼦,是正⾯的还是负⾯的;假设你有做了⼀
个產品,然后上线以后,你想要知道⽹友的评价,但是你⼜不可能⼀直找⼈家ptt上⾯,把每⼀篇⽂章都读过,所以就做⼀个Sentiment
analysis model,看到有⼀篇⽂章裡⾯,有提到你的產品,然后就把这篇⽂章丢到,你的model裡⾯,去判断这篇⽂章,是正⾯还是负⾯。你就
给机器要判断正⾯还负⾯的⽂章,问题就是这个句⼦,是正⾯还是负⾯的,然后希望机器可以告诉你答案
所以各式各样的NLP的问题,往往都可以看作是QA的问题,⽽QA的问题,就可以⽤Seq2Seq model来解