自然语言理解(Natural Language Understanding)

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介: 自然语言理解(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上的个人智能助理+、阿里小蜜等。后续我们一方面在技术上会进一步做深,另一方面会服务更多的业务,欢迎各位有兴趣的同学一起交流探讨。

目录
相关文章
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,旨在使计算机能够理解、处理和生成人类语言。
自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,旨在使计算机能够理解、处理和生成人类语言。
|
6月前
|
机器学习/深度学习 自然语言处理 监控
自然语言处理(Natural Language Processing, NLP)中的情感分析
自然语言处理(Natural Language Processing, NLP)中的情感分析
117 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.
1039 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【10月更文挑战第3天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将分析NLP的基本原理,介绍AI技术如何推动NLP的发展,并讨论当前的挑战和未来的趋势。通过本文,读者将了解AI技术在NLP中的重要性,以及如何利用这些技术解决实际问题。
|
2月前
|
机器学习/深度学习 数据采集 自然语言处理
深度学习在自然语言处理中的应用与挑战
本文探讨了深度学习技术在自然语言处理(NLP)领域的应用,包括机器翻译、情感分析和文本生成等方面。同时,讨论了数据质量、模型复杂性和伦理问题等挑战,并提出了未来的研究方向和解决方案。通过综合分析,本文旨在为NLP领域的研究人员和从业者提供有价值的参考。
|
25天前
|
自然语言处理 算法 Python
自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
【10月更文挑战第9天】自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
41 4
|
27天前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在自然语言处理中的创新应用
【10月更文挑战第7天】本文将深入探讨人工智能在自然语言处理领域的最新进展,揭示AI技术如何改变我们与机器的互动方式,并展示通过实际代码示例实现的具体应用。
33 1
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用
【9月更文挑战第17天】本文主要介绍了AI技术在自然语言处理(NLP)领域的应用,包括文本分类、情感分析、机器翻译和语音识别等方面。通过实例展示了AI技术如何帮助解决NLP中的挑战性问题,并讨论了未来发展趋势。
|
6天前
|
机器学习/深度学习 自然语言处理 知识图谱
GraphRAG在自然语言处理中的应用:从问答系统到文本生成
【10月更文挑战第28天】作为一名自然语言处理(NLP)和图神经网络(GNN)的研究者,我一直在探索如何将GraphRAG(Graph Retrieval-Augmented Generation)模型应用于各种NLP任务。GraphRAG结合了图检索和序列生成技术,能够有效地处理复杂的语言理解和生成任务。本文将从个人角度出发,探讨GraphRAG在构建问答系统、文本摘要、情感分析和自动文本生成等任务中的具体方法和案例研究。
23 5