开发者社区> 李永彬> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

自然语言理解(Natural Language Understanding)

简介: 自然语言理解(Natural Language Understanding,NLU)以语言学为基础,融合逻辑学、心理学和计算机科学等学科,试图解决以下问题:语言究竟是怎样组织起来传输信息的?人又是怎样从一连串的语言符号中获取信息的?换种表达就是,通过语法、语义、语用的分析,获取自然语言的语义表示。
+关注继续查看

1. 引言

      Siri,Cortana,Google Now,小冰,度秘,随着技术的进步和自然人机交互需求的扩大,个人智能助理渐渐成了各大巨头争夺的下一个入口。这些智能助理尽管能力有大有小,但有一个共同特点——用户能通过“自然语言”与其交互,这比起传统的用关键词进行搜索的方式,显然是一个不小的进步。比如,当你说“订一张明天北京去杭州的机票,国航头等舱”时,一般的搜索引擎会给出如下的网页列表:

52b92ceca75ffd4e24568b97cfa146c9f79be9fe

而我们的个人智能助理能直接给出你期望的答案:

753264f68a5a01679816e4976dc9f8ecf1efb5be

要想从“订一张明天北京去杭州的机票,国航头等舱”得到这种直接答案,首要的一步就是要对自然语言进行理解。

      自然语言理解(Natural Language Understanding,NLU)以语言学为基础,融合逻辑学、心理学和计算机科学等学科,试图解决以下问题:语言究竟是怎样组织起来传输信息的?人又是怎样从一连串的语言符号中获取信息的?换种表达就是,通过语法、语义、语用的分析,获取自然语言的语义表示。

2.自然语言语义表示

自然语言理解的结果,就是要获得一个语义表示(semantic representation):

d0b59282538bcaaa7704c6d4fb55d965526b7725

语义表示主要有三种方式:

  • 分布语义,Distributional semantics
  • 框架语义,Frame semantics
  • 模型论语义,Model-theoretic semantics

2.1 分布语义表示(Distributional semantics)

说distributional semantics大家比较陌生,但如果说word2vec估计大家都很熟悉,word2vec的vector就是一种distributional semantics。distributional semantics就是把语义表示成一个向量,它的理论基础来自于Harris的分布假设:语义相似的词出现在相似的语境中(Semantically similar words occur in similar contexts)。具体的计算方法有多种,比如LSA(Latent Semantic Analysis)、LDA(Latent Dirichlet Allocation)及各种神经网络模型(如LSTM)等。

这种方法的优点在于,它完全是数据驱动的方法,并且能够很好的表示语义,但一个很大的缺点在于,它的表示结果是一个整体,没有进一步的子结构。

2.2 框架语义表示(Frame semantics)

顾名思义,这种方法把语义用一个frame表示出来,比如我们一开始举得例子:“订一张明天北京去杭州的机票,国航头等舱”,表示如下:

eee500b3a562bdf703b6cb992951e9e779c02dcb

在计算方法上,典型的比如语义角色标注(Semantic Role Labeling),具体可以分为两个步骤:frame identification和argument identification,frame identification用于确定frame的类型,argument identification用于计算各个属性的具体值。

       这种方法和distributional semantics相比,能够表达丰富的结构。

2.3 模型论语义表示(Model-theoretic semantics)

       模型轮语义表示的典型框架是把自然语言映射成逻辑表达式(logic form)。比如对于下图中的“中国面积最大的省份是哪个?”,将其表示成逻辑表达式就是图中红色字体部分,进一步那这个逻辑表达式去知识库中查询,就得到了答案。在计算方法上,典型的就是构建一个semantic parser。

e45401b521b04bbc02cc07181e82bd77e9856f1e

模型论语义表示是对世界知识的完整表示,比前两种方法表达的语义更加完整,但是缺点是semantic parser的构建比较困难,这大大限制了该方法的应用。

2.4 我们目前采用的语义表示

       我们目前采用的是frame semantics表示的一种变形:采用领域(domain)、意图(intent)和属性槽(slots)来表示语义结果。其中,

  •    领域是指同一类型的数据或者资源,以及围绕这些数据或资源提供的服务,比如“餐厅”,“酒店”,“飞机票”、“火车票”、“电话黄页”等;
  •    意图是指对于领域数据的操作,一般以动宾短语来命名,比如飞机票领域中,有“购票”、“退票”等意图;
  •    属性槽用来存放领域的属性,比如飞机票领域有“时间”“出发地”“目的地”等;

对于飞机票领域,我们的语义表示结构如下图所示:

832bb2115f2c6f0fb7ae247530e6b51c7154efe9

进一步,我们对于世界的语义描述(又称为domain ontology)如下:

29d68aef2a76182ecd72c164cf9b5af99841874a

3. 自然语言理解技术难点

       在确定了自然语言理解的语义表示方法后,我们把技术方案抽象为如下两步:

b9f63c1c98392741e7d42dd957b89f6dee0dd602

这和前文提到的语义角色标注把过程分为frame identification和argument identification类似,领域分类和意图分类对应frame identification,属性抽取对应argument identification。无论对于分类还是对于抽取来说,都需要有外部知识的支持。在实现的过程中,我们面临着如下的困难:

(1)如何构建知识库

“总参”除了表示总参谋部外,还是南京一家很火的火锅店;“中华冷面”除了是一种面条,还是一首歌名;“王菲的红豆”是指王菲唱的红豆这首歌,但如果说“韩红的红豆”就不对了,因为韩红没有唱过红豆这首歌。要想把这些知识都理解对,就需要一个庞大的知识库,这个知识库中的实体词数以千万计,怎么挖掘,怎么清洗噪音,都是很大的挑战。

(2)如何理解用户语句的意图

“东三环堵吗”这句话意图是查询路况,“下水道堵吗”就不是查路况了;“今天的天气”是想问天气状况,“今天的天气不错”则无此意;“附近哪儿可以喝咖啡”是想找咖啡馆,但“牛皮癣能喝咖啡吗”就是一个知识问答了。类似上述的例子举不胜举,更别说语言理解还受时间、位置、设备、语境等等问题的影响。

(3)如何构建可扩展的算法框架

现实世界包含众多的领域,而我们不可能一次性的把所有领域都定义清楚并且实现之,那我们就需要一个可扩展的算法框架,每当修改或者新增某个领域的时候,不会对其他领域造成干扰。

(4)如何构建数据驱动的计算流程

大数据时代,如果一个算法或者流程不是数据驱动的,不是随着数据的增加而自动提升效果,那这个算法框架就没有持续的生命力。

(5)如何融入上下文知识

在对话场景中,每句话都有对话上下文,同样的句子在不同的上下文中理解结果是不一样的,比如如下的例子,同样的一句话“今天天气好吗”在左侧图中属于天气领域,而在右侧图中则属于音乐领域。

6f96218eb6d4369b94c44ab412cbd96f8af4440e 

4. 自然语言理解技术沉淀

       技术难点的解决过程就是一个技术沉淀的过程。通过在自然语言理解方向上持续研究和开发,我们积累了如下的技术沉淀:

4.1 千万级的高质量知识库

       知识库的核心节点是各种词,而这些词条散布在互联网上的各个地方。通过自己抓取和第三方合作的方式,我们拿到了大量的“毛数据”,这些数据中含有大量的噪音。为了过滤清洗这些数据,我们构建了一套集成了多种过滤方法的过滤流程来对这些数据进行处理。截止目前,我们积累了数千万的高质量的各种类型的词条。

4.2 支持常见的数十个领域的理解

通过自然语言处理、机器学习、深度神经网络等算法和大数据的使用,目前我们理解的领域有60个左右,其中重要的一些领域如下:

f697818fba3c11001e861aff25d30721ada6b7f7

4.3 一套可扩展的算法框架

       领域的优化和扩展是常态,如果某个领域的优化或者新增,会对其他已有的领域的效果造成影响,那这将是一种灾难。我们建立了如下图所示的领域独立的、可扩展的算法框架,各个领域在知识库、数据、模型、算法等方面,都是各自独立的。

86412cecbda35a0393b344ad830a72b0f98405e3

4.4 数据驱动的闭环流程

       我们构建了如下的闭环数据流程,使得数据能够闭环流动,随着用户的使用,我们不断收集日志对系统进行更新,从而不断维持和提升系统的效果。

4d6c3a8cfefd68121e1be311094574729382a0e5

4.5 基于上下文的自然语言理解

       为了理解对话,我们进一步设计了基于上下文的自然语言理解框架,和无上下文相比,它主要的变化在于增加了一个domain selection模块,该模块在基于上下文的知识下,判断当前话语(utterance)是否需要继承上文知识。

5. 结束语

自然语言理解是个人智能助理的基础模块和核心模块,我们目前的自然语言理解服务同时实现了无上下文的理解和有上下文的理解,无上下文的理解主要应用在搜素场景,如YunOS上的One Search搜索,有上下文的理解主要应用于对话场景,如YunOS上的个人智能助理+、阿里小蜜等。后续我们一方面在技术上会进一步做深,另一方面会服务更多的业务,欢迎各位有兴趣的同学一起交流探讨。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Excel中7个常见的“快速”技巧,你学会了几个?
Excel中7个常见的“快速”技巧,你学会了几个?
22 0
Excel中7个常见的“快速”技巧,你学会了几个?
Excel中7个常见的“快速”技巧,你学会了几个?
37 0
C语言怎么写注释
C语言中的注释用于提供有关代码行的信息,它被广泛用于记录代码(或对代码功能实现的说明)。在C语言中有两种类型的注释,它们分别如下 - 单行注释 多行注释
68 0
百度:替换和清除空格
一、替换字符       题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。       将长度为1的空格替换为长度为3的“%20”,字符差的产度变长。
604 0
【自然框架 NatureFW】里的两种“映射”方式
   自然框架里面采用了两种映射关系,一个是流行的ORM,另一是非主流的“CCM ” (我自己想的,呵呵)。   先说一下ORM。ORM是O和R的映射关系。也看到很多人写关于ORM的文章,发现好像有个误区。
803 0
+关注
5
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载