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