自然语言(yán)处理入门教程(chéng)
自(zì)然(rán)语(yǔ)言处理(lǐ)(NLP)是计算机科(kē)学(xué)领(lǐng)域和人工智能领域中(zhōng)的一个(gè)分支,它与计算机和人类之间使用自然语言进行互动密切相关(guān)。NLP的最终目标是使计算机(jī)能(néng)够像人类一样(yàng)理解语言(yán)。它是虚拟(nǐ)助手、语音识(shí)别、情感(gǎn)分析、自动文本摘要(yào)、机器翻译等的驱动力。在这(zhè)篇文章中,你将学习到自然语言处(chù)理的基础知识,深入了解到它(tā)的一些技术,了解(jiě)到NLP如何从深度(dù)学习的最新(xīn)进展。
1.简介(jiè)
自然语言处(chù)理(NLP)是计算机科(kē)学(xué)、语言学和机器学习的交叉点,它关注计算机与人类之(zhī)间(jiān)使用(yòng)自然(rán)语言中(zhōng)的沟通(tōng)交流。总之,NLP致力于让计算机能够理解和生成人类语言。NLP技术应用于多(duō)个领域,比(bǐ)如天猫精灵(líng)和Siri这样的语音助手(shǒu),还有机器翻译和文(wén)本过滤等。机器学习是受NLP影响最深远的(de)领域之(zhī)一,尤为突出的是深(shēn)度学习技术。该领(lǐng)域(yù)分为以下三个部分:
1.语音识别:将口语翻译成文本。
2.自然(rán)语言理解:计算机理解人类的能力。
3.自然语言生成(chéng):计(jì)算(suàn)机生(shēng)成自然语(yǔ)言。
2.为什么NLP很难
人类语言有其特殊性。人(rén)类语言专门用于传达讲话者和写作者的意思,即使小孩子能够很(hěn)快学会(huì),它依然(rán)是一个复杂的系统。它的另一个显著之(zhī)处在于它(tā)完全(quán)与(yǔ)符(fú)号有关。Chris Manning(斯坦福教授(shòu))表示,它(tā)是一个离散的、象征性的、绝(jué)对的信号系统,这意味(wèi)着人(rén)们(men)可以(yǐ)通过(guò)使(shǐ)用不(bú)同的方式传达相同的含义,比如演说,手(shǒu)势(shì),信号等。人类大脑对这些符(fú)号的编码是持续的激活(huó)模(mó)式,在这个(gè)模(mó)式中,符号通(tōng)过声音和视觉的连续信号实现传输。
由于其复杂性,理解(jiě)人类语言(yán)被认(rèn)为是(shì)一项(xiàng)艰巨(jù)的任务(wù)。例如(rú),在句子(zǐ)中排列单词有无数种(zhǒng)不同的方法。此外,一个单词可以有多种含(hán)义(yì),并且正确解释句子(zǐ)需要恰当的(de)语境信息。每种语(yǔ)言或多或少都是独特且含(hán)糊的。比如:“The Pope’s baby steps on gays”,这句话显(xiǎn)然有两种截然不同的解释(shì),这是反映NLP中的困难之处(chù)的一个很好的例子(zǐ)。
随着计算机对(duì)语言的理解愈(yù)渐完美(měi),将会产(chǎn)生(shēng)可以处理互联网(wǎng)上全部信息的人工智能(néng)(AI),继而产生强人工智能(AGI)。
3.句(jù)法和语义(yì)分析
句法分析和语义分(fèn)析是(shì)理解自然语言的两种主(zhǔ)要方法(fǎ)。语言是(shì)一组意义(yì)的语(yǔ)句,但是什么使(shǐ)语句有意义呢?实际上,你可以将有效性(xìng)分为两类(lèi):句法和语(yǔ)义。术(shù)语“句法”是指文本(běn)的语(yǔ)法结构(gòu),而术语“语义”是指由它(tā)表达的含义。但是,句法上正确的(de)语句不(bú)必在语义上(shàng)正确。只需看看下(xià)面的例(lì)子(zǐ)。语句“cow kow supremely”在语法上是有效(xiào)的(主语-动(dòng)词-副词),但(dàn)没有任(rèn)何意义。
句法分析:
句法分析,也称为语法分析或解(jiě)析,是(shì)通过遵循正式语法规则来分析自(zì)然语言的过程。语法(fǎ)规(guī)则适(shì)用于单(dān)词和词组,而(ér)不是单个单(dān)词。语法分析主(zhǔ)要(yào)为文本分配语义结构(gòu)。
语义分(fèn)析:
我们理(lǐ)解他人(rén)的语言是一种无意识的(de)过程,依赖于直觉和对语言本身的认(rèn)识(shí)。因(yīn)此,我们理解语言的方式很大程(chéng)度(dù)上取决(jué)于意义和语境(jìng)。计(jì)算机却不能依赖(lài)上述方(fāng)法,需要采用不同的途(tú)径(jìng)。 “语义”这个词是一个(gè)语(yǔ)言术语,意思与(yǔ)意义或(huò)逻辑相近(jìn)。
因此(cǐ),语(yǔ)义分(fèn)析是理解单词、符号和(hé)语(yǔ)句结构的含义(yì)和解释的过程,这使计(jì)算机能够以人类的方式(shì)理解部分涉及意(yì)义和语境的自然语(yǔ)言。为什么说只能(néng)部分(fèn)理(lǐ)解呢?是因为语义分(fèn)析(xī)是NLP中最棘手的部分之一,仍未完全解决。例如(rú),语音识别技术已非常成熟,并且工(gōng)作近乎完美,但仍(réng)然缺乏(fá)在自然语言(yán)理解(例如(rú)语义)中的熟练程度。手机基本上可以理解我们所说的(de)内容,但通常无(wú)法用它做任何事情,因为它不了解其背后意(yì)义。
4.理解文本的(de)技巧
下面我们将讨论(lùn)多(duō)种用于自然语言处(chù)理的现行技术。
什么是解析?首先,让我们看一下词典释义(yì):
解析—“将句子分解为其组成部分,并阐述各部分(fèn)的句法角色(sè)。”
实际(jì)上解释的已经非常到位,但它可以更全面(miàn)一些。解析是指计算机对句子的(de)形式分析,其结果是一个解析树,这个解(jiě)析树可以可视化(huà)地显示句(jù)子(zǐ)成分(fèn)之间(jiān)的(de)句法关系,用于进一步处理和理解。
在下面你可以看到句子“The thief robbed the apartment”的解析树,以及由它传达(dá)的三种(zhǒng)不同(tóng)信息类型(xíng)的描述。
我先看单个单词正上方的字母,它们用于显示每个单(dān)词的(de)词性(名词-N,动词-V和限定词(cí)-DT)。我(wǒ)们再看解析(xī)树中更(gèng)高的层级,一些单词进行层次分组组成短语。例如,“the thief”是一个名词短语(NP),“robbed the apartment”是一个动词短语(VP),这些短语一起形成一个(gè)句子(S),在树中(zhōng)标记在更高的层级。
这(zhè)些(xiē)短语以名(míng)词为主(zhǔ)体,包(bāo)含(hán)一个(gè)或多个单词,可能还包含描述(shù)性词语、动(dòng)词或副词(cí),简言之,就是把(bǎ)把名词和(hé)与其相关的单词组(zǔ)合在一起。
从解析树中(zhōng)还能看出,单词的表述结构(gòu)影响(xiǎng)其在句中(zhōng)的语法关(guān)系。例如(rú),在此(cǐ)结构中,“thief”是“robbed”的主语(yǔ)。
结合结构(gòu)来看(kàn),动词“robbed”,上方标有“V”,更上一级标有“VP”;主语“thief”,上方标有N和(hé)“NP”,通过“S”联系在一起。这就像主语—动词关系的(de)模板,同样(yàng)还有许多其他类型的关系。
词干(gàn)提取:
词干提取(qǔ)是一(yī)种(zhǒng)来自形态学和信息检索(suǒ)的技术,在NLP中用于预处理和(hé)效率(lǜ)提升。但是,我们(men)首先看一下词典中的释义:词干 — “起源于或(huò)由(yóu)其引起。”
基本上(shàng),“词干提取”是将(jiāng)单词进行(háng)缩(suō)减得到词干的过程,而“词干”的实(shí)际意(yì)义是(shì)是在删(shān)除单词(cí)的所有的前缀(zhuì)后缀之后保留(liú)的一(yī)部(bù)分。例如,“touched”,它的词干是“touch”,同时“touch”也是“touching”等词的(de)词(cí)干。
为(wéi)什(shí)么(me)需要词干?因为(wéi)我们会遇到不同的词汇(huì)变(biàn)形,而实际上它们具有相同的词干(gàn)和(hé)意义。举例来说:
# I was taking a ride in the car
# I was riding in the car.
这两个句子意思是一致的,ride和riding的用法(fǎ)也是(shì)相同的(de)。
词汇表(biǎo)中所有(yǒu)的单词有不同的注释,其中还(hái)包括大量实际意义相同的单词,要存储它们,需要一个庞大数据库,但是通过词干(gàn)提取,仅关注单词的词干,可(kě)以很好地解决这个问题。现行(háng)的通用算法之一是1979年的“Porter Stemming Algorithm”(波特词干算法),非常使用便捷。
文字分割:
NLP中的文(wén)本分割是将(jiāng)文本转换为有意义的单(dān)元的过程,可以(yǐ)是单词、句子、也可以是不同的(de)主题或潜在的(de)意图等。在文本分(fèn)割中,文本根据不同(tóng)语种被分割为成份单词,由于人类语言的复杂性,通常(cháng)比较难。举(jǔ)个(gè)例子,在英语中利用空格来分隔单词,相对高效实用,但是(shì)也(yě)有(yǒu)像“ice box”这类词语的例(lì)外,ice和box这两个(gè)由空(kōng)格隔开(kāi)的词合并一起使用才有原本含义的,所以人们(men)有时把(bǎ)它写作“ice-box”,那么(me)就给文字分割带来了(le)难(nán)题。
命名实体(tǐ)识别:
命(mìng)名实体(tǐ)识别(bié)(NER)用于确定文本中哪些词条属于命名实(shí)体,这些(xiē)词条(tiáo)可(kě)以被定位并归入预定义的(de)类别,类别的(de)范围包括人(rén)名(míng),组(zǔ)织(zhī),地点,还有货(huò)币价值和(hé)百分比(bǐ)。
看下面的例子:
NER之前(qián):Martin bought 300 shares of SAP in 2016.
NER之后:[Martin]Person bought 300 shares of [SAP]Organization in [2016]Time.
关系抽(chōu)取:
关系提(tí)取采用“命名实体识别(NER)”的(de)命名实体,并识(shí)别它们之间的语(yǔ)义(yì)关系(xì)。这可能意味着它能(néng)够发现(xiàn)文本(běn)中词语之(zhī)间的关(guān)联性,例(lì)如(rú)谁与谁结婚(hūn),某人(rén)在哪个公司工(gōng)作等。这个问题也可以转换为分类问题,然后为每种关(guān)系(xì)类(lèi)型训练机器学习模型。
情感分析:
通过情感(gǎn)分析(xī),我们想要确定(dìng)例如说话者或(huò)作者关于文档,互动(dòng)或事件的态(tài)度(例如(rú)情绪(xù))。因(yīn)此,需要理解文本以预测潜在意图是一种自然语言处理问题(tí)。情绪主要分为积极,消极(jí)和(hé)中性两类。通过使用情感分析,我们(men)希望根据他撰写的关于(yú)产品的评论来(lái)预测客户对产品的看法和态度。因此,情(qíng)感分析广泛(fàn)应用于评论,调查,文档等(děng)等
如果你对(duì)使用Python中的某些技术感(gǎn)兴趣,可(kě)以查看(kàn)我创建的Python的自然语言工具(jù)包(NLTK)的Jupyter Notebook。你还可以查(chá)看我的博客文章,了解如何(hé)使用Keras构建神经网络,我将训练神经(jīng)网络进行情感分析。
5.深度学习和NLP
深(shēn)度(dù)学习和自(zì)然语言(yán)的核心是“词(cí)义(yì)”,在这里,单(dān)词(cí)用一个(gè)实(shí)数(shù)向量来表(biǎo)示。因(yīn)此,通过(guò)向量来代表单词单词,我(wǒ)们(men)可以将单词(cí)置于(yú)高维度的空间中,由向量表示的单词起到(dào)语义空间的作用。这仅(jǐn)仅(jǐn)意味着在(zài)该高维向量空间中,形近意近的单词倾向(xiàng)于聚集在(zài)一起(qǐ)。下图中,可以(yǐ)看(kàn)到单词(cí)含义的直观展示:
在此空间中,如(rú)果想要知道(dào)某一(yī)组聚(jù)集成类的单(dān)词的含义,可以通过使用主成(chéng)分分析法(PCA),也可(kě)以使用降维法。但(dàn)这些方法太简单并且(qiě)会遗漏了周边的大量信(xìn)息,因而产生误差。在研究的初始阶段,这些方(fāng)法很好用,(如(rú)数据科学中的(de)逻辑或线性回归)但并不是前沿(yán)技术。
我(wǒ)们还可以将单词的一(yī)部分当作向(xiàng)量,这些向量可以(yǐ)代表单词(cí)的含义。想(xiǎng)象一(yī)下“undesirability”这个词。使用“形态学方法(fǎ)”,它涉及一(yī)个词所具有的不同(tóng)部分(fèn),我们认为它由词素(单词部分)构(gòu)成:“Un + desire + able + ity”。每个语素都有自己的向量。这允许我们构建一个神经(jīng)网络,它(tā)可(kě)以(yǐ)构成一个(gè)更大的单(dān)位的意义,而更(gèng)大的(de)单(dān)位又由所有这(zhè)些语素组(zǔ)成。
深度学习还(hái)可以通过创建句法分(fèn)析(xī)器来(lái)理解句子的(de)结构,谷歌正在使用这样的依赖解析(xī)技术,在他们的“McParseface”和“SyntaxNet”(两种语言解析器(qì)),不过更(gèng)加宏(hóng)大,更加复杂。
通(tōng)过分析句子结构(gòu),我们开始理(lǐ)解(jiě)句子的意义(yì),可以(yǐ)从单(dān)词(cí)的含义开始,也(yě)可以从整个短语和句子开始,无论单词的意义、短语还是句子,都用向量来表示。如(rú)果想(xiǎng)知道(dào)句子之间的(de)关系,我们可以创建神经网络来帮助分析。
深度(dù)学习也适用于情感(gǎn)分(fèn)析。请看这个电影评论:“这部电影不在(zài)乎是不是(shì)巧妙(miào),也不在乎幽默与否”。传统的机器学习算法会认为(wéi)这是一个积极的评论,因(yīn)为(wéi)“聪明”和“幽默”是积极的词汇,但是(shì)神经网络能够(gòu)识别出它的真正含义。
另外(wài),深度(dù)学习算(suàn)法实现(xiàn)的机器翻译中,它从句子开始翻译,并生成(chéng)一个向(xiàng)量,然后用(yòng)另(lìng)外一种语言生成所需要的信息。
总而言之,NLP与深度学习相结合,就是表示单词、短语的向量,以及(jí)它们的含义。