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