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