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