自然语言理解(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上的个人智能助理+、阿里小蜜等。后续我们一方面在技术上会进一步做深,另一方面会服务更多的业务,欢迎各位有兴趣的同学一起交流探讨。

目录
相关文章
|
1月前
|
机器学习/深度学习 自然语言处理 监控
自然语言处理(Natural Language Processing, NLP)中的情感分析
自然语言处理(Natural Language Processing, NLP)中的情感分析
38 3
|
机器学习/深度学习 人工智能 算法
书籍:python自然语言处理(PyTorch) Natural Language Processing with PyTorch - 2019
简介 使用PyTorch 进行自然语言处理 自然语言处理(NLP)为解决人工智能问题提供了无限机会,使亚马逊Alexa和谷歌翻译等产品成为可能。如果您是NLP和深度学习新手的开发人员或数据科学家,本实用指南将向您展示如何使用PyTorch(一种基于Python的深度学习库)应用这些方法。
|
自然语言处理 Python
Python自然语言处理Step0:Natural Language Toolkit工具配置
Natural Language Processing with Python Python 自然语言处理 针对自然语言设计,以python作为处理工具,其中涉及到很多语言学的东西 当然也包括一些相关的python的工具 首先是nltk工具的安装, 前置条件:你已经安装并配置好了python:你可以到官方网站下载https://www.
1011 0
|
1月前
|
机器学习/深度学习 自然语言处理 监控
利用深度学习技术实现自然语言处理中的情感分析
本文将深入探讨如何利用深度学习技术在自然语言处理领域中实现情感分析。通过介绍情感分析的背景和原理,结合深度学习模型如LSTM、BERT等的应用,帮助读者了解情感分析的重要性以及如何利用最新技术实现更准确的情感识别。
|
1月前
|
机器学习/深度学习 自然语言处理 算法
探索机器学习中的自然语言处理技术
【2月更文挑战第16天】 在数字化和智能化的浪潮中,自然语言处理(NLP)技术已成为连接人类与机器沟通的重要桥梁。本文深入探讨了机器学习在自然语言处理中的应用,包括最新的模型架构、算法优化技巧及实际场景中的挑战和解决方案。通过逻辑严密的分析,我们将揭示如何有效利用机器学习提升NLP系统的性能,同时对未来发展趋势进行预测。
23 0
|
1月前
|
机器学习/深度学习 自然语言处理 监控
利用深度学习技术实现自然语言处理中的情感分析
本文将深入探讨如何利用深度学习技术,特别是神经网络模型,来实现自然语言处理领域中的情感分析任务。通过结合深度学习算法和大规模文本数据集,可以实现更准确和高效的情感分析,为情感识别和情感推断提供更好的解决方案。
|
1月前
|
机器学习/深度学习 自然语言处理
自然语言处理技术(NLP)
自然语言处理技术(NLP)
38 1
|
2月前
|
自然语言处理
举例说明自然语言处理(NLP)技术
举例说明自然语言处理(NLP)技术
18 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
springboot基于人工智能和自然语言理解技术的医院智能导医系统源码
智能导诊系统可为患者提供线上挂号智能辅助服务,患者根据提示手动输入自己的基本症状,通过智能对话方式,该系统会依据大数据一步步帮助患者“诊断”,并最终推荐就医的科室和相关专家。患者可自主选择,实现“一键挂号”。这一模式将精确的导诊服务前置,从源头上让医疗服务更高效。
363 2
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
探索机器学习中的自然语言处理技术
【2月更文挑战第31天】 随着人工智能的飞速发展,自然语言处理(NLP)技术在机器学习领域扮演着越来越重要的角色。本文旨在深入探讨NLP的关键技术,包括语言模型、词嵌入和深度学习方法,并分析这些技术如何相互协作,以实现更高效的文本分析和理解。通过案例研究和最新研究成果的介绍,我们展示了NLP在实际应用中的强大潜力,以及它如何推动人机交互和信息检索系统的革新。
18 0