00:13
我们接下来呢,下午主要的这个话题呢,讲的是这个自然语言理解,呃在自然语言理解这块呢,里边内容是非常非常多,嗯,大家以后工作里边,我估计很大程度上都会需要,但是呢,呃,真正掌握自然语言处理的技术的人呢,我觉得还是比较少了,在这个业内,所以如果大家在工作当中呢,碰到一些问题的话,如果能掌握这个技术,你很可能就很快的就脱颖而出,这个对大家工作是一个很好的事情哈,但是C然语言处理的这个难度呢,相比于呃,CNN这个图像数理来说要困难一些,我们能看到这个CN很简单,就是卷积石化,卷积石化就下一个分类,就得到了一个正确结构,对吧,但是现在可能不理解,但是下去一看这个代码肯定不难,对不对,但是呢,自然语言处理它和图像不一样,比如说图像我们看了一眼,我们不需要看第二眼,所有信息都拿过去来了,对吧。
01:14
啊,我们可以给它分类,但是语言呢,你需要按顺序读,对吧,你不能从后往前读对吧,也不能从中间随便读,就像我们昨天讲的磁带模型,那个效果是上不去的,对吧?你必须得从头读,因为有的时候语序非常重要。对吧,你这个话调个个数就不对了,对语序非常重要,但是我们昨天同时也讲过了,语言模型里边哈,可以对这个语序做建模,比如说第一个词就我出现我的情况下,第二个词词出现是的情况,概率是非常大的,对吧,我是什么什么什么是吧,我是什么一名是吧。你你说你是一名的后边接职业的概率就更大了,对吧,这是一个很好的一个模型,很理想,但是呢,他的问题是这个模型只要到达三元组之上,它的运算量就特别大。
02:12
特别特别大对吧。比如说我昨天说过,整个那个常用词可能有10万,或者是这几万词是吧,一直到10万词有可能,那么你现在就相当于什么呢?带语序的一个建模,就相当于A10万取四对不对,有这么多数字。而且呢,这还是,这还不是最严重的问题,空间很膨胀,这还不是最严重的问题,空间膨胀就为数灾难带来的主要的问题是什么呢?说大部分数据,99%的数据你都没见过,你把人民语料,人民日报的语料拿过来,近近20年的语料全拿过来了去学,你也学不到这个模型里的10%的这样一个数据覆盖90%的数据,你绝对没见过,对吧?那你既然没见过怎么办呢?你就需要做各种各样的假设,你需要做平滑,做各种各样的假设,对吧?一旦做平滑做假设,那么一旦做平滑做假设这个东西就是什么,就错了,大家现在知道啊,就是你所做的所有的假设,肯定对数据拟合有帮助,但是毫无疑问,你最后的那个天花板,就那个瓶颈,肯定也是由于你假设造成的,对不对,我们昨天假设了一个什么磁带模型,对吧。
03:32
假设一个文本,这垃圾文本是从一个垃圾磁带里边不断的垃圾词拿拿出来的,对吧?但这个假设合理吗?对吧?最开始它可以帮助我们把准确度提升到70%,但是我们发现做到80%就非常困难,上不去了。对吧,这就是磁带模型的一个假设的一个问题,最好是什么假设都没有,就是原来是什么样你就是什么样,你就去学原来那个情况就行了,对吧,但是呢,对于这种A10万取四来说,或者取五,哪怕取五来说,这个东西根本就学不出来。
04:06
对吧,所以用言模型去做这个事根本就做不了,那么在这个语言模型之前呢,我们先讲一个很基础的一个东西,叫做词向量。词向量呢,也是一个inbding的一个思想,从这里大家就有这个inding的这个思想。现在大家拿到很多网互联网的文本,拿到那个图像肯定是没有任何办法,对吧?表演人摸黑,我这个文本不知道该怎么处理对不对,最多你能想到做处理可能是关键词匹配对吧?比如说现在让你做摄政敏感词检测。那现在比如说这个管控比较严格是吧,你这个言论你肯定要要要为此言论负责是吧,那好,我怎么识别你是暴恐言论呢。大家可能想到第一个想法就是说我先弄一批关键词过来,对吧,关键词肯定能匹配上对吧?但是这里的问题在于什么呢?这个关键词你弄那批很典型的关键词都没问题,或者说你说他这个这个文本就是爆恐文本,这都没问题,但是还有大量的文本,它不是纯粹的暴恐词。
05:17
明白吧,打个比方说啊,还是说说的事儿,苹果在某些场合下是苹果,手机在某些场合下是真正的苹果,如果你去做,假如今年苹果卖的不好,然后你想你接受了别人的任务,你要去删帖是吧,然后你需要把这个苹果所有的词,有的文章全删掉。那你把苹果手机的也都删掉了对吧?苹果手机算大头对不对,那怎么办呢?你可能会想,那我再加一个手机对不对,其实手机呢,也并不一定真的就在这个场合下就肯定会出现,比如说果农,他说我自己的手机坏了。那这个文本可能也会被你干掉,对吧。是吧,这是这是另外一个问题,那么你可能为了补补补这个问题,你也不断的在补,不断在补,到最后你根本就不知道这个词我该补还是不该补,这就导致你这个文本识别非常困难,这是我们自然语言处理里边最困难的一件事,对吧?那么在这个所有这个这个情况之前啊,这个东西之前,我们有一个对语言上有一个有一个认识,我们认为一句话,它是有一个语义的,它肯定是表示一个意思,对不对。
06:27
有一个意思,我就认为它在一个向量空间里,它可以落成一个点,对吧。这个这个可以理解啊,打个比方说,你说一句话和我说一句话,我们两个人说的话非常相似,就可以认为我们两个向量之间那个距离非常小。对吧,比如说今天今天晚上我说今天下雨了,你说今天天气不好,我们两个的距离就非常小。我说今天下雨了,你说今天我要出差,这完全是不相关的东西,对吧,这个距离就非常大。
07:01
对吧?所以关键问题是,我们如果能学到让一个词或者让一个句子变成一个三维空间中的一个点。三维,当三维肯定装不下了啊,可能是一个高维空间,咱们先以三维空间去理解边三维空间一个点,而且呢,相近的语义离得近,尽可能的近。非常近啊,不相近的语义呢,离得尽可能的远。那么是不是就可以得到一个很好的一个所谓的inbing一个表达了,对吧?这个可以理解之后需要做什么呢?之后如果你问我,你给了我一句话,你问我这句话跟哪些哪些句话是相似的语义,我就可以按照欧式距离去把他们最近的向量给找出来就OK了。就做一个向量的距离就OK了,对吧?所以你问我哪个文本是爆恐文本,那你只需要提供一批种子文本,然后我把所有的sentence的in都算一遍,看看哪个跟你种子离得近,卡一个阈值,把这些近的全拿出来就完事了呗,对。
08:06
这么做的做法是不是比那个关键词匹配要智能的多呀,对吧。能够理解是吧。所以关键的问题呢就来了,怎么去做in bedding?In半是什么东西呢?就是一个向量表达,我们上午讲CNN对吧,CNN最后也是把图像变成了一个向量,对不对,所以它本身也是一个in白。对吧,因为假假设啊,你就是叫人说话,教小孩子说话,你得告诉他我说这话什么意思,对不对,他都不知道,你说这话什么意思,他怎么知道你这两个语言之间,语句之间是有联系的呢,对吧。所以呢,CN也是一个in bedding,然后呢,我们这个自然语言处理里边也需要inbding,我们现在第一步啊,先对词做inviding。针对持续做白领。怎么对词做in呢?有,有的人之前提出过,说两个词在字典里边,这个意思越相近,我让他这个距离越近是吧,那两个词意思越远,那个距离越远是吧?这么做我们是可以理解的,是是OK的,但是这样一个问题,就是说两个词距离越近,那你这个近怎么去衡量?
09:22
你从字典里就没有办法衡量对吧。有一个更好的假设是怎么做的呢?是这么做的。比如诺基亚手机,操作非常方便,通话质量也很好,就那句话说事啊。苹果手机操作也很方便,通话质量也不错。经过两句话的对比,我们发现诺基亚和苹果这两个词总是出现在同样一个上下文里面。能理解是吧?总是出现在同样一个上下文里,这意味着什么呢?诺基亚和苹果的语义非常相似。
10:04
明白诺基亚和操作系统就不会出现在一个上下文里。而比如说Windows Windows和诺基亚就不会出现在一个上下文,理就很少哈,而Windows经常和Mac出现在一个上下纹理,就是Windows如何如何如何,那什么市场份额如如何,Mac市场份额如何如何,他们俩总出现在一上下文里,我们就有理由认为他们两个这个语义上相似,对吧?当然了,这个语义相似,只是说它这个描述的这个性质上相似。也不能说他俩完全是一个东西对吧,那可能有的比较好些,有的不太好用一些是吧。包括比如说呃,国王和皇后他们也会出现在一个位置上,对吧,那他们俩你从局部来看,他俩是完全对调,就是完全那个对称的两个概念哈,所以呢,通过这种方式呢,我们只只需要先对所有的这个文本做切词。
11:05
切磁是吧,之后我们去比对诺基,当然问很非常大,我们只能去比对啊,诺基亚和苹果都出现在手机上下文的这个概率是多大就可以了,这就是词向量的一个基本的一个思想。明白了是吧。明白这意思是吧?那么大家能不能告诉我,词向量是一个有监督学习还是无监督学习呢?实际上是一个无监督学习。对,他这个监督信息不属于人提供给他的,就是你没有告诉他你这个词和谁意思是相近的,他通过自己阅读文章去理解的。明白是吧。
12:02
OK,一会儿给大家那个发一个此销量的那个文件下去,大家能看到。然后之前还有人提到过这样一个解决方案。嗯,既然我们有很多词,然后你也说过one号编码,对吧,我们是不是可以对所有词做一个完号编码,去解决呃,词和词之间的这个向量的这个问题呢。大家想想这个外号密码,这个可行吗?就是不是有同学觉得可行是吧。为什么不行?对。主要的问题就在于什么,它那个词汇量特别大,比如说10万个常用词的话,你每一个词就要用10万这个向量的维度去表示,对吧?这个维度如果全是数字还好,这个维度里边只有一个是数字,只有一个是一,剩下的全是零,对吧?
13:12
这样一个向量,你去存储它的话,当然你是可以用一些那个系数矩阵去存储它,当然你去做运算的时候,这也不方便啊,对吧。而且关键的问题是猫和猫咪是两个词,对吧,他俩从销量上看不出任何联系,对,但是呢,如果我们把这个就像我们刚才说的。我们做这个。呃,向量的这个一个学习,将它向量尽可能相似的话,我们是没有必要让所有位都是零的。对吧,我们可以让它变成比如打语啊诺基亚,我可以让它向量是0.50.20.3。对吧,然后苹果呢,可以是0.40.2还是0.3。对吧,我没有必要让它一位上是零,呃,一位上是一,剩下都是零,做完后的编码,没有必要我给他做一个因白影这样一个嵌入式的一个编码,那么这种情况下呢,苹果和诺基亚是可以算成一个余弦值的是吧?也可以算欧式距离的是吧?你可以用余弦值去表证它们两个之间的语音相似度,同时呢,苹果和另外一个词呢,它也是有语音相似度的。
14:21
他就不会说,比如说你这010100和1001,他们距离全一样,对吧。就不会出现这个问题。所以呢,像猫和猫咪这种东西,还有喵星人,狗去,汪星人就会靠到一起去。明白是吧。嗯,在中文处理里边最关键的一个问题是未登录词,就是这个词从来没见过。就这个词,比如说他,比如说我们现在这个互联网就是这个挑战,每天有很多很多新词,呃,经常会出现什么呢?就过两天出现一个累觉不爱。
15:02
对吧,或者十动然具这样的颜色。对,然后呢,不管是搜索引擎还是推荐系统,他看不懂这个词,就把这个词切开了,就切成了十动然具四个字对吧?所以呢,这种切完之后呢,毫毫无疑问,它这个语义就被切开了嘛,对吧,那词都不存在了,那义也没了,对吧?所以你就没有办法去推荐了,对吧?微生素词的这个问题比较大,所以呢,在这个语言里边,我们有也有一些新词挖掘的一些算法。通过商去计算一些新词挖掘啊,这个大家可以下去了解。然后我们看一下我们已经训练好的一个词,向量。这是之前我在我这边跑出来的一个结果,当然这只是其中一小部分,因为那个所有词的数量特别大,也看不过来,我们从从这个图上可以看到啊,King和queen他们俩之间的距离呢,基本上等于men和woman。
16:03
对吧?而king和和king和woman他俩的距离也正好相等。对吧。这就是词向量要做的一件事情,就是相近的语义尽可能在一起,不相近的尽可能离远,因为大家的量都差不多,我是king是吧?那我跟king之间的关系和man和woman之间关系肯定会很近,对吧?所以他们的距离就也就是相等,基本上是一样的。所以呢,就就可以用词向量去做一些公式,比如说P减men加等于queen。你从这个地方开始呢,单词就可以计算了。大家要理解这一步,这一步非常重要的单词原来是不能计算的。你你要么去做文本匹配对吧,你要么就是那个,嗯,你可以统计它出现个数,甚至是以前的那个机器学习里边很多很多模型都有各种各样的做法,但是前提都有一个条件,就是单词是磁带模型。
17:03
磁带模型,然后把它编个号,编个什么010这样的一个号,然后让你去算都是这样的,但是从词向量开始呢。单词是可以计算语义的。计算语义这个这件事情非常重要,因为什么呢?我现在有一句话,一句话就由单词组成的,对吧,我先把它们都切开,然后呢,每个单词的向量我全给加在一起,然后取个平均。就可以认为是什么?这句话的语义对不对?是,是不是这样对吧?我说了一句话,我把所有词的向量都加一块,然后做一个平均,就可以认为是sentence的语义,对吧?嗯,有人会质疑说那这里面不还是带模型吗?那个相加是可交换的,还是带模型,对吧?但是没关系,后面我们还有更高级的应用。这这至少是一个基础应用了,也有很多人用这种东西做事了。词向量这个东西呢,也是在2013年前后提出来的,到现在为止不过是四五年,但这四五年里边,他帮助整个互联网做了很多文本的事情,可以说现在做文本的话,如果不了解词向量已经是呃,就没有办法去做了。
18:22
然后我们简单讲一下这个词向量的训练过程。词项量的训练过程和大家之前看到那个老机这个回归基本上是很像的。首先呢,我刚才跟大家说了啊,比如说诺基亚,比如说诺基亚,是不是诺基亚出现在A和B之间,那苹果也出现在。啊,A和B之间,我们认为诺基亚和苹果是语义上相似的,对吧,所以呢,我在训练的时候会怎么训练呢?我会拿一个滑动窗口。滑动窗口的这个概念对大家来说应该不陌生吧?啊,任何地方都会需要,TCP里需要对吧。
19:03
那个消息站里需要对吧。你只要再处理一个东西的话,你必须用窗口是吧。用一个双口往前划,一次划一个格是吧,我们刚才那个卷积其实也是一种滑动双口嘛,对吧,一次往前划一格嘛,对吧。那用滑动窗口这一次划到A和B之间了,我把A和B的词向量拿出来去预测诺基亚这个词,预测诺基亚这个词销量。怎么去预测呢?就是一很多这一个数,就是做了好几次这个这个捞锯,这个回归。就是二分类问题嘛,对吧。因为我要现在要拿A去预测诺基亚,无非就是是你不是你,是你不是你对不对,是不是诺基亚就是二分类问题嘛,牢记这个回归就可以了。是吧,这个细节呢,我就再给大家展开讲。嗯。
20:00
词向量的应用呢,现在是非常广泛的,有这个类比,比如说打个比方前就是前几天那个呃,就是这个国家可能就是对这个呃英乐要召开一些会议是吧,所以呢,对这个暴恐和这些反动这个言论就是管控比较严格,那么怎么把这个呃暴恐类的词汇挖掘出来呢?怎么办呢?你可以去互联网上爬100万个文章。然后训练词向量。然后你再拿一批种子词扔进去,对吧。种子词肯定是你觉得这个东西是什么,是有问题的词,或者说这个词本身就是暴恐词对吧。那这些词匹配出来,哪些词和哪些距离最近,那些词就可以作为什么候选的种子。对吧,人再过一遍就可以了,你基本上就能把所有的词都挖出来。明白是吧。OK。
21:00
然后呢,语义相似度计算是吧,同义词就是刚才说的这个这些东西,然后呢,某一任务可以作为特征,可以作为什么呢?情感分类的特征,比如说难过对吧,我想我想知道我现在除了难过以外,还有什么和难过相似的词,去跑一下词向量就可以了啊,然后命名是你识别对吧。就像诺基亚和苹果,本身就是一种命名实体识别,对吧。然后情感分类和词性标注。
我来说两句