【云栖TechDay有问必答】NLP技术的应用及思考

2017年4月22日在云栖TechDay第35期,阿里巴巴iDST 自然语言处理部总监上乘带来题为“NLP技术的应用及思考”,现场一问一答张显了专家专业理论和技术实践的落地。这期是听到“论文”一词最多,本期有问必答第一个问题很典型的应用场景。

NLP技术的应用及思考(演讲全文整理)https://yq.aliyun.com/articles/78031?spm=5176.8091938.0.0.utD2Ny

No1.我有两个问题,我现在的工作在处理“文摘”,根据一篇长文章整理出短的摘要内容。第一个问题是目前阿里的AliNLP平台,能不能提供一些Tool?第二个问题是在整理文摘时,如上乘提到语言的最大特点是因人而异,一篇很长的文章,文科生看和理科生看,整理的摘要需要不一样,如果想做到因人而异的摘要内容有什么建议或方法?有一些开源的工具的都是针对英文的,如何解决?

阿里巴巴iDST上乘:文摘肯定需要很多底层的分析,如能够把一个句子像我们刚讲的电商领域的语料分析一样,做到很深度的分析,会对整理文摘是有帮助的。可以找到一些开源工具做尝试,AliNLP平台暂时还没有对外开放。第二个问题,做文摘传统的思路有两种,第一种是句子摘取,如一个文章里面有100个句子,一个一个去分析哪一个句子最重要的,每次选择最重要的一个句子出来,选择两三句出来,放在一起看成一个摘要,这是比较简单的做法,甚至都不需要关注流利度的问题。更好一种方式叫做理解式的文摘,是需要把文章真正的读懂,然后生成一些新的句子,句子完整的在整个平台里面是没有出现过的,这其实是很困难的。现在这方面有些很多人在探索,做一些深度学习的叫End2End Learning,可以去搜索这样的文章有很多学习了解下。最近今年的ACL2017里面有很多文章在探讨这个问题,实际上需要找一些深度学习的框架,尝试一些开源的工具。把原文作为一个输入,文摘作为一个输出,自己构建大量的pairs,学习怎么做出来做一些新尝试,这是一种思路。现在很多工具都可以搭建这样的方法,但它的缺点是,分析出来的句子可能读起来并不通顺,或者说讲什么完全不知道,有这种可能。前面这个摘取式的,虽然说结果不能理解全篇的内容,但它是可读的,可读性非常强,所以现在商用的文摘系统全是前面这种方法,在做一些流利度的改写这样就更好了。
对于理科生和文科生输出不同摘要,涉及到一个文摘个性化的算法。可以找文科生和理科生来写不同的文摘,对比他们的文摘有什么样的风格,把这个风格用模型的方式抽象出来,再把这个模型的能力放入到深层算法里面,会使得文摘具有多样性。还有一种方式,对文章的每一个句子,判断它究竟是文科生关注的句子还是理科生关注的句子。这种情况下在摘取的时候做些适当性的差异,也可以做出个性化摘要的效果。这个问题其实是很难的问题,刚才我们讲了文摘也是自然语言处理的四大AI完全问题之一,真正解决是不可能的,只能是做一些模拟和尝试。大家可以多找一些论文读一读,还是有很多很好的解决方法。
有好几个平台的开源工具有针对中文的可以去做一些研发,可以尝试哈工大已经开源的LTP(语言技术平台),还有比如分词上可以尝试ICTClass等等这样的平台。它们都是开源的,但是没有办法去做很深度的定制,最本质的解决方案还是要去学习算法怎么做?自己去开发,或者不断优化底层的算法。

No2.我的问题可能跟今天分享的内容关系不大,想请教一下老师能力上的一个问题,刚才看到有一个很有趣的例子:搜索词,可能一开始从搜索词变成一个毫无理解能力的非自然语言词。比如说看过的一些美剧,可能是句未来的话,有时候不管从语音上面还是文字上面还是发表的内容中,有各种各样的监控,这样可能会不会导致一种行为,可能是对实事的判断或者是有些想法的问题,可能会变成非自然语言的表达,用其他的方式表达会造成这样的现象,对于这个方面有些什么看法?

阿里巴巴iDST上乘:这个问题很有挑战性,刚才讲了语言会变化,某一些人对于某一类特殊的场景会用某一些特殊的官方语言来表达,其他话会相对比较自然,假设对话的两个都是淘宝的卖家,一起讨论标题怎么写。也许会将一些例子,讨论过程中其他话就会比较正常,但混在一起对话,机器再去理解就会很困难。对于这种场景有一个比较初步的解决方法,做一些片断式的场景判断。关于英文,比如电影的字幕,它一定是分场景的,一段一段的对话。这段讲逛街,那段讲买衣服、讲吃东西,要做场景一段一段切分判断之后,再用内部的场景结合这个具体的算法,具体的适配算法去解决这样的问题。这是一种解决的方案。但是最终极的解决方案,我们要对两个人聊天的淘宝卖家所涉及的话题,通常会有一些什么样场景的细分,要做很深度的理解,然后用统一模型去解决。如果逐渐细分,细分到一定程度它是永无止境的,就像做分治算法一样,分治到一定程度,做太细就做不了了,这个问题其实很难,回头我们可以再当面探讨一下。

No3实体关系挖掘在AliNLP平台是否有研究过,深度学习在这个里面有没有一些结合的应用?

阿里巴巴iDST上乘:实体关系挖掘是知识图谱构建中很核心的一个问题,其实已经做了很多尝试,但今天没有讲到。实体关系挖掘主要分为两个步骤来做,第一就是先要识别出来,句子里面有什么样的实体,第二就是人和实体之间的关系怎么识别?前一个问题是需要建一个实体库,用基于规则的方式去做处理。第二个要构建一些实体识别的训练语料,用模型的方式解决,利用模型和规则的方式做融合,才会使得实体识别做的能足够好。对关系层面需要对这两种实体之间的某一些关系,最好先做预定义,比如先定义有几十种关系,每一种关系大概的Pattern是什么样子?或者说每一种关系的大概的那个就是它关系两个实体之间的context是什么,再做训练模型进行训练,这样可以做到一定的效果,深度学习对于实体关系学习是非常重要的。可以关注一下ACL,ACL有一个开源的一个论文库叫ACL Anthology,里面有上万篇论文搜索下,里面有很多论文在探讨此问题:实体关系之后在深度学习上怎么做?所谓深度学习无外乎是说,把context做representition的表示之后,向量化以便使context更加的语义化,然后在实体关系判别过程当中,不管是层次化的分类还是多分类,逐级二分类的方式来做,在做特征构建和分类算法的时候,使用深度学习去做特征表示,还是用深度学习去做最终的端到端的学习,都可以做尝试。也可以用fasText去试一试,也可以用DNN,或者RNN、CNN等等,LSTM、还有GRU等等。

No4.目前深度学习在context上的向量化表示,跟传统的word to vector,它是浅层的神经网络,差别有多大?word to vector表示出来的已经有一些语义,深度的用DNN、RNN、LSTM这些差异又有多大?是否有研究过能提升多少?

阿里巴巴iDST上乘:好问题,其实word to vector本身也是深度学习中的一种很好的尝试,在整个自然语言处理里面,最早引入深度学习就是从word to vector开始的,里面有几种比较经典的算法.更深入的事情,word to vector会出现这样一种问题,比如说”苹果”这个词,如果用word to vector测定出来结果,向量表示它是唯一的,但是都知道“苹果”有多种意思,可能是水果,可能是品牌名称,向量究竟是倾向于表示品牌还是表示水果呢?有些人已经在探索一种方式,对word to vector出来的结果还要考虑它的语义类别,在不同的语义类别上有不同的vector,这可以做的更细。但是这种更细的做法并不是用了lstm或者RNN去做的,而是把问题描述成一个新的框架,在里面加入一些新的考虑。用分类的方法来做,如果说要一刀切,比如要用锤子找钉子的思路去做,现在有了RNN的锤子,能不能把word to vector的锤子换掉?其实不可以的,它是不同的工具,工具一定是有能力范畴的,最好从问题的本质出发,把向量表示的学习的方式做的更好,这方面在中科院何世柱老师做了很深入的研究,可以搜索调他讲的报告,可以去做一些分析。阿里巴巴也在做这方面的探索,用哪一种表示做的更好?现在比较好的一种表示方法是DSSM,它考虑的是更多此类信息,而且动态化。比单纯的word to vector要考虑的更深入一点,模型之间本身没有优劣之分,word to vector目前也是整个自然语言处理领域里面深度学习最好用的工具,它很容易上手,但确实因为太容易上手了,使得它更深入去定制就相对困难一点,大家可以做多的尝试,DSSM是微软最早发明的,里面也有很好的论文和工具。

NO.5分享中所讲的语料库,同义词、近义词库还有字典,这些字典是怎么得出来的呢?

阿里巴巴iDST上乘:各种各样的同义词、上下位、语义词库,还有情感词库怎么得来的?首先算法,假设我们今天什么都没有,从零开始做,首先根据业务至少拍脑袋想出来一些词,想出来的词可以作为种子,用bootstrap的算法,或者用自动扩展的思路去搭建词库,比如说应该知道种子词在什么上下文或者什么样的意思,可以先把上下文片断拿出来,把种子词替换成一个X。然后X形成的pattern,在更大的海量语料库里面再做新一轮的抽取,抽取出来某种关系,大量的X,然后出现Y、Z,然后再把Y、Z扩展出来若干词,再放到另外新一轮的语料中进行迭代,扩展出来很多pattern。pattern和种子词一轮一轮的迭代,就会出现大量的信息。但是随着迭代增多后,会使得扩展的质量变差,这时要找一个threshold,找个平衡点。确认好平衡点后才会使得最终词库的质量比较高,但如果要商用的话,一定要一条一条查看一遍,否则一旦某一条有错误会给造成很大的损失,这是第一种做法。
第二种做法也可以找专业的专家来编辑,要保证效果足够好,确实要雇佣几个专业人士天天处理这个事。这方法看起来比较笨,但是有比较好的效果。但是在处理的过程中开发人员可以做各种各样的工具,来辅助把这个事情越做越快、越做越好,甚至形成一个产品。可以再去做任何事情,只要做类似的事情,都可以就按照这个方法找几个人快速的做这完事情。很多人正在做这种事情,以翻译为例,翻译现在最火爆的市场不是自动翻译,是人工辅助机器翻译,找一堆人来帮助机器快速的翻译,或者机器翻译好之后人工怎么快速的校对,类似的思路可以做很多尝试。现在网上也有很多开源的辞典可以用,可以把它们当做一个很好的输入再扩展,这个一定要结合自己的领域来定制,这是最快的方式。要一蹴而就或者直接拿过来就可以用,目前几乎是不可能的。

点击查看更多云栖TechDay的往期视频:https://yq.aliyun.com/edu/lessonTagSearch/cid_695-tagid_13553?spm=5176.8643059.740229.6.6LaMOR

你可能感兴趣的:(【云栖TechDay有问必答】NLP技术的应用及思考)