「自然语言处理(NLP)」入门系列(一)初识NLP

来源:AINLPer微信公众号
编辑: ShuYini
校稿: ShuYini
时间: 2020-01-07

初识自然语言处理(NLP)

本次主要内容:
1、解释自然语言处理的目标和应用。
2、描述自然语言处理的挑战。

    该模块为深度学习和自然语言处理奠定了基础。不过,在开始之前,请确保您有所需的背景知识。这是一个高级主题,本模块假设您对机器学习词汇有基本的理解,有一些Python方面的经验,至少有一些处理机器学习数据和算法的实际经验。如果您还没有这方面的背景知识,您可以使用以下资源来快速了解情况。

什么是自然语言处理?

    自然语言处理(NLP)汇集了计算机科学、语言学和人工智能的思想。它的目标是给计算机某种形式的语言理解,使它们能够处理人类的语言。计算机使用语言处理来执行一些有用的任务,如翻译、回答问题或预约。

    NLP在人工智能领域中发挥着独特的作用,因为语言本身就是人类思考和表达自我的重要组成部分。但是语言是复杂的!一台完全理解自然语言含义的计算机就是“AI-complete”。AI-complete指的是人工智能的核心问题。要开发一个真正理解人类语言的系统,你实际上必须解决一个更大的问题:人工智能本身。为此,人们一直在思考开发能够解释语言的系统。同时增强在自然语言处理层的能力来对语言表示做出高层次理解。
自然语言处理流程图

    1、语音或文本的输入和初始处理过程,并将其分解成小块进行处理。对于语音来说,这一步叫做语音分析,它包括把语音分解成单个的声音,叫做音素。对于文本输入,这包括光学字符识别(OCR)和标记化。OCR是用来识别文本中的单个字符的,如果它是作为图像而不是字符组成的单词输入的。标记化指的是把一个连续的文本分解成单个的标记,通常是单词。
    2、形态学分析——将复杂的单词分解成它们的组成部分,以便更好地理解它们的意思。例如,您可以将“incomprehensible”分解为它的组成部分。其中“in”表示:不的意思;“comprehens”表示:理解;“ible”表示:这个词是一个形容词,用来描述某事是否可以被理解。
    3、句法分析——试图通过观察单词是如何组合在一起来理解句子的结构。这一步类似于为一个句子绘制图表,在这个过程中,您将确定每个单词在这个句子中所扮演的角色。
    4、语义解释——通过将单个单词的意义与其在句子中的句法角色结合起来,来确定句子的意义。
    5、话语加工——理解句子周围的语境,以充分理解其含义。

    为了成功地帮助计算机理解(NLU)和生成自然语言(NLG),NLP必须处理语言的所有层次。仅仅创建一个字典并定义每个单词是不够的,计算机必须理解这些单词在语法和上下文中是如何协同工作的。在这篇文章中,我们主要讨论了第三步和第四步,句法分析和语义解释。

自然语言处理可以做什么?

    自然语言处理使我们每天使用的许多工具和技术成为可能,从(相对)简单到复杂。例如,拼写检查器、自动完成函数和关键字搜索(特别是当搜索自动包含同义词时)都使用简单的NLP形式。

    更复杂的NLP形式可以让我们做一些事情,比如从网站上自动提取地址和其他公司信息(例如,显示在在线地图上),或者根据情绪或阅读水平自动对文档进行分类。我们使用最强大的NLP工具来完成任务,如机器翻译(如谷歌翻译)、具有自然语言的聊天机器人,以及复杂的虚拟助理(如Siri、谷歌助理和亚马逊的Alexa)。

    自从移动设备广泛使用以来,人们对NLP的兴趣就开始激增。与计算机的全键盘不同,移动设备的键盘通常很小,很难输入长串文本。通过语音与移动设备的交互极大地扩展了该设备的功能。近年来,自然语言处理(NLP)领域取得了长足的进步,但要让计算机完全理解人类语言,还有很长的路要走。

语言编码的意义

    许多机器学习数据是由真实世界的数据集组成的,没有太多的顺序。例如,销售记录、电影观看数据或普通通勤时间都是对机器学习有用的数据集。创建这类数据的人不会考虑它所形成的模式或它所传递的信息。然而,说话者和作者使用人类语言来传达信息。语言不是随机混合的数据,而是有意地构建来传达意义给其他人。

    人类的语言可能看起来很简单,因为你每天都在使用它,当你还是个小孩子的时候就学会了它,但它也是一个能够深度编码、具有微妙意义的符号系统。语言使用符号信号(有时也称为离散信号或分类信号)来有意地传达说话者或作者的意思。词语对应于特定的概念。例如,狗这个词对应着狗的概念,小提琴这个词对应着小提琴的概念,等等。

    语言是由符号组成的。语言将这些符号编码成连续的基板,如声音(如讲话)、手势(如手语)和图像(如书写)。因此,虽然语言是由离散的、独立的符号组成的,但我们把它作为一种长时间连续的编码模式进行交流和理解。当一个人使用语言与另一个人交流时,他们采用一种连续的内在思维模式,将其转换成离散的符号,并将其编码到一个连续的基底中,如语音、书写或手势。

    接受这种交流的人接受连续的交流,将其解析为离散的符号,并以连续的思维模式理解它。因此,语言将意义从连续的模式转换为离散的符号,然后再转换回连续的模式。

语言歧义

    人类语言不像编程语言。虽然编程语言被构造成尽可能清晰和明确的,但是人类语言本质上是模棱两可的。许多句子的解释取决于上下文和经验。以下是一些标题中模糊语言的真实例子。

    例1、办公室MM问我为什么另一个MM能玩的游戏在她的机器上要S机。答曰,可能显卡驱动不行。MM遂要求帮助下载最新版,并安装。答曰,我有什么好处。MM说:“最多我让你玩一会儿好了”。(“让你玩一会就比较有歧义”)
    例2、上海大学的学生都很努力优秀。(“上海大学是指的学校还是上海所有大学的学生?”)
    例3、北京人多。(“是指的北京这个地方人多,还是北京人比较多?”)

    除了含糊不清的措辞外,人类语言还有很多前提条件。用编程语言编写的代码必须包含计算机运行所需的所有内容,而人类语言通常假设监听器或阅读器可以自己插入重要的上下文和信息。这样,它的工作方式有点像代码片段。当你说话的时候,你假设你的听众熟悉语言和文化的“样板代码”,并且只包含了让你的观点被理解的最低限度的信息。

    例如,你如何选择将自己描述为“熟悉”、“了解”或“某一主题的专家”?每个概念都是不同的,但你是在一个连续体上理解它们的,你知道它们是如何相互联系的。例如,你知道,虽然这些描述符之间没有明显的界限,但是熟悉某个主题的人比专家知道的要少得多。然而,当你把这些想法提炼成文字的时候,你就失去了很多关于它们之间联系的信息。但是,与其花更多的词语精确地描述你的背景,你不如依靠其他人对从“熟悉”到“精通”这一连续体的知识来解释你知道多少。

    习语也是类似的原理。当你在会议一开始就说你“准备好直接参与”时,你的意思并不是说你真的要跳进房间里,或者在办公室的游泳池里跳水。你依靠你的听众对文化和习语的知识来解释这句话,并且知道你的意思是你已经准备好直接进入会议的重要部分。

    所有这些模糊性和上下文都很难用代码来解释。早期的自然语言处理尝试明确定义一门语言中的所有单词,并手动编写解释含义的规则。不过,这种方法通常效果不是很好。有太多的极端情况,以及太多的未说出口的上下文,以至于无法实际地手工编写全部代码。在自然语言处理中使用深度学习避免了用代码清楚地描述模糊语言的问题。

ACED

Attention

更多自然语言处理相关知识,还请关注AINLPer公众号,极品干货即刻送达。

你可能感兴趣的:(「自然语言处理(NLP)」入门系列(一)初识NLP)