自然语言处理算法是什么样的?
发布时间:2018-10-31 作者:jason
这是一个非常广泛的领域,多年来发生了很大的变化。
NLP领域基本上有两个阵营 - 语言学训练营和统计训练营。
NLP的想法一直追溯到人工智能的史前时代。事实上,它一直追溯到艾伦图灵,他是人工智能和计算的主要创始人之一。图灵提出了这样的想法:如果机器可以与人交谈,那么机器可以被认为是智能的,人类无法分辨他们是在与机器还是人交谈。
创造一种能够以与人类无法区分的方式交谈的机器的挑战称为图灵测试。
ELIZA是一个早期着名的AI程序,可以被认为是试图击败图灵测试。你基本上可以把ELIZA想象成Siri的曾祖母。
ELIZA的编程方式没有科学依据。ELIZA和之后出现的许多类似的聊天机器人程序都以相同的方式编程,基本上手工制作了许多规则以响应不同类型的人类输入。但是说ELIZA实际上对自然语言有任何理解是很容易的,因为编写这些程序的目的是欺骗用户认为他们理解自然语言,而不是真正理解自然语言。换句话说,这些聊天机器人更多的是心理学研究,而不是自然语言。
在人工智能的早期,ELIZA仍然给很多人留下了深刻的印象,它激发了人们对制作能够真正理解自然语言的智能程序的兴趣。
所以语言学家也来了。毕竟,这是他们的纪律。简而言之,语言学是语言创造的科学。语言学家在语言中寻找模式,从这些模式中,他们试图制定规则来构建和解释所有发生的自然语言。这些规则推广到特定模型或语法。
为了正确看待这一点,语言学家对自然语言以外的计算机科学产生了深远的影响。如果您曾经构建过编译器,那么您将使用语言学家提出的想法。构建编译器时,您正在使用语言规则来解析和识别人工语言。
解析自然语言的语言方法非常相似,除了无上下文语法有点太局限以至于不能轻易地模拟自然语言句子,所以通常使用上下文敏感语法(并且很少有不同的CSG表示形式)具有相似的表达能力)。
当然,即使使用CSG表示,仍然只能告诉你如何解析句子的句法结构。如果你想做的不仅仅是判断句子是否在语法上是正确的,那么你需要一个更复杂的模型来描述语义。话语表征理论就是这样一种模式。
关键是,要在语言学中获得完美的自然语言模型,您需要考虑许多层次的规则。ELIZA和其他聊天机器人的程序员以及语言学家所做的事情之间的区别在于,前者以临时方式提出规则,后者以更系统的方式提出规则。
但最终,从编程的角度来看,这两种方法都需要同样的工作 - 编程很多很多规则。并且目前仍有许多NLP系统在使用中基本上只有很多很多手动构建的规则,无论这些规则是以临时方式构建还是以专业语言知识构建。
因此,NLP长期以来一直是砖墙,因为构建所有这些规则所需的大量编程工作将NLP应用程序限制在非常有限的域中。
然后在90年代,统计机器学习人员出现并从不同的角度处理NLP问题。他们基本上抛弃了所有的语言学理论,并从一个非常简单的语言模型开始,称为“Bag of Words”模型。
“Bag of Words”模型非常简单。它认为句子只不过是一个单词,而不是关心单词的顺序。
换句话说,“山姆吃苹果”和“苹果吃山姆”在“Bag of Words”模式下没有区别。当然,这两个句子中的一个比另一个句子具有更高的概率。
如果给你这四个字,并告诉他们属于一个句子,但句子中的单词的顺序已经丢失,你可能猜到这句话是什么,对吧?
在使用“Bag of Words”模型的计算机的情况下,它甚至不必猜测句子实际上是什么 - 它只需要能够假设当它看到这四个单词在一个句子中组合在一起时,它可能有类似的含义。
大多数研究过语言学的人会对做出这种假设感到震惊。你当然可以提出许多假设错误的案例,以及你需要知道句子的确切句法结构以推断其真正含义的地方。然而,在许多其他情况下,“Bag of Words”模型将足以让我们粗略地了解一大块自然语言的含义。
为了给“Bag of Words”效果很好的流行应用程序,想想搜索引擎。
语言学家和统计学家在自然语言建模方面有着截然不同的哲学。语言学家正试图想出一个完美的模型来代表一种语言,只要它有很好的机会产生正确的解释,统计学家就可以使用有缺陷的模型。
但是,为什么有人会想要使用蹩脚的“Bag of Words”模型而不是复杂的语言学模型,以及统计营带来的优势呢?
让我们从第二个问题开始。统计学营希望避免手动编写任何语言规则。相反,他们希望通过提供大量标记文本和学习模式来构建系统,这些系统将学习以受监督的方式自动解释语言。
为了能够从有限数量的文本中查看模式,您需要具有较低组合复杂度的简单模型。正常的单词排序具有因子复杂性,但“Bag of Words”仅具有指数复杂性,这显着降低。
我的意思是,如果你想要学习大量的自然语言,让我们说战争与和平,随机选择的任意单词排序在该文本中出现的可能性非常低,因为有一个巨大的可能的单词排序数量。然而,在“ 战争与和平 ”中句子中出现一组随机词的可能性要高得多。
因此,这反过来意味着您可以浏览大文本,并收集有关该文本中句子中不同词袋出现频率的统计信息。如果文本是足够大的样本,则您收集的统计信息应该足以代表同一域中所有文本的统计信息。
现在,您可以使用这些统计数据来推断给您的新自然语言样本!
当然,这当然是一种过度简化,但却提供了统计阵营所做的一般概念。
为了进一步阐述,统计人员首先寻找他们想要解释的自然语言的粗粒度特征。一个特殊的“单词包”可能是一个特征,但可能还有其他功能,如句子长度,单词是否与另一个单词紧密相邻,是否使用特定动词等等。然后,他们会收集这些单词的统计信息。具有大量文本的特征,并运行机器学习算法以尝试基于不同特征的出现来预测模式。
虽然编程工作现在已经减少,但与基于规则的NLP方法相比,在创建标记文本语料库方面还有很多工作要做。此外,找出你感兴趣的NLP问题的正确特征是一项具有挑战性的黑色艺术,称为“特征工程”。
我应该指出,随着时间的推移,统计营最终会考虑采用词序的模型。使用它的一个领域是学习在不同语言(通常具有不同的句法结构)之间自动翻译。即使对于那种情况,该模型也不使用任何语言知识或规则。
有一些有限的研究将统计学与语言学相结合,例如查看概率语法来表示句子,如概率无上下文语法(PCFG)。
最后,有一个新的营地来到城镇,这就是深度学习营地。通过深度学习,您甚至不必担心“特征工程”。您只需将您的巨型语料库提供给神经网络,在其上运行backprop,神经网络就可以神奇地从原始数据中学习模式和规则。或者至少,这就是它的销售方式。