自然语言处理,英文Natural Language Processing,简写NLP。 自然语言,如汉语、英语、日语等,区别于计算机语言C语言、Java语言等。自然语言的特点就是看似无规律的‘自然性’,说的通俗点就是随意说出来的话,无法用计算机规则来定义。人的大脑目前怎么处理的,不得而知。所以目前的科技寄托于计算机来模拟人类的自然语言,以达到让计算机来理解人类的语言。众所周知,计算机处理的程序必然是有规则的,在计算机世界里,一切都是有规则的0-1。所以,冲突的地方在于,用有规则的计算机程序来解决看似表面无规则的自然语言(个人认为是自然语言有规则,只是太复杂,难以表示出来),是非常之难的,特别著名的一个东西叫‘图灵测试’,被誉为“人工智能皇冠上的明珠”。因此,要让计算机处理自然语言,即是计算机接受用户自然语言形式的输入,通过算法进行计算处理,以模拟人类对自然语言的理解,并返回符合人类思维的结果,正如机械解放人类的双手一样。 “人工智能必会颠覆世界,唯我NLP是其灵魂” 话不多说,直接简述一下当下的NLP技术。想入行的小白可以往下看,大神绕路,幻想主义者应该去看科幻小说。 1,NLP技术概述 目前的NLP领域,我们希望解决两种事情,自然语言理解(NLU)和自然语言生成(NLG),前者是后者的基石。NLU侧重于如何理解文本,希望理解自然语言里面的语义、知识、逻辑、语法、句法结构等内容;NLG则侧如何生成一句符合人类思维的自然文本。 从两个角度来说:应用角度和技术角度。 (1)NLP目前有以下几个应用领域:文本分类和文本结构化暂时只需要NLU,文本摘要、机器翻译、对话系统还需要NLG。 【文本分类】:包含文本推荐、文本检索、情感分析等,都可以理解为分类体系,有二分类和多分类。推荐就是根据一个query,推荐出最相似的目标。检索也是同理,情感分析更好理解(分成乐观、悲观、中性三类)。但是各个领域的应用特点不同,所以目前并不是用相同的方法来处理,而是各自演化出了其相应应用领域的解决办法。除此之外,还有很多应用都可以划分到文本分类领域。 【文本结构化】:从自然语言的形式中抽取想要的信息,如命名实体关键词、实体关系、事件逻辑、时间、角色、数理逻辑等所有人类语义单元。应用极广,目前在法律文书分析、医药文本分析上前景不错,但是很难。 【文本摘要】:这是一个NLG的应用,聚焦到最核心的部分,可以根据一篇文章或者论文,自动生成摘要。前景很大,技术很难。 【机器翻译】:即语言翻译,该领域目前发展势头相当好,但是离终极目标很远。其需要NLU和NLG两种技术,同时还需要了解不同语言及其语言差异。 【对话系统】:这是NLP中最难的应用,也是NLG的导向,可以说是NLP的终极目标,旨在以口语化的自然语言与人类进行对话,从而通过机器来解决人类的问题,其目标就是完全理解人类的语言,才能解决的应用。问答系统只是垂直领域的对话系统,智能问答可以精简掉很多不相干的语言语义,所以在应用上,目前有很多‘投机’的方法,单独来开发应用。 (2)NLP目前有以下几个技术方法: 各个应用领域的技术基本上是互通,从开发的角度来说,看每个人对各个领域的深耕吧。所涉及的基本技术有: 传统方法:分词、词性标注、句法分析、词干提取、命名实体识别、指代消歧、关键词抽取等基本技术原理。是HMM、CRF的天下,近年来演化为BiLSTM-CRF体系。传统方法用于分类的算法大致有tfidf、LSI、LSA等主题模型。 机器学习:经典的十大机器学习算法等。 深度学习:词向量(word2vec、GloVe、bert)、神经网络的设计和原理。相应的常见算法大致有TextRank、TextCNN、LSTM/GRU、seq2seq、Attention、bert等。 知识图谱:KG确切的说是一种技术支撑,而不是一个应用领域。关于知识图谱的构建是一个非常庞大的工程,大致从百科知识、语义网里面提取,也有从开放文本中抽取再构建。 2,NLP的发展历程 1948年,香农提出信息熵的概念。此时尚未有NLP,但由于熵也是NLP的基石之一,在此也算作是NLP的发展历程。 按照维基百科的说法,NLP发源于1950年。图灵于该年提出“图灵测试”,用以检验计算机是否真正拥有智能。 -----------NLP规则时代----------- 1950-1970年,模拟人类学习语言的习惯,以语法规则为主流。除了参照乔姆斯基文法规则定义的上下文无关文法规则外,NLP领域几乎毫无建树。 -----------NLP统计时代----------- 70年代开始统计学派盛行,NLP转向统计方法,此时的核心是以具有马尔科夫性质的模型(包括语言模型,隐马尔可夫模型等)。 2001年,神经语言模型,将神经网络和语言模型相结合,应该是历史上第一次用神经网络得到词嵌入矩阵,是后来所有神经网络词嵌入技术的实践基础。也证明了神经网络建模语言模型的可能性。 2001年,条件随机场CRF,从提出开始就一直是序列标注问题的利器,即便是深度学习的现在也常加在神经网络的上面,用以修正输出序列。 2003年,LDA模型提出,概率图模型大放异彩,NLP从此进入“主题”时代。Topic模型变种极多,参数模型LDA,非参数模型HDP,有监督的LabelLDA,PLDA等。 2008年,分布式假设理论提出,为词嵌入技术的理论基础。(分布式假设的思想并非直到08年才有,详见Gavagai - Distributional Semantics - gavagai.se) 在统计时代,NLP专注于数据本身的分布,如何从文本的分布中设计更多更好的特征模式是这时期的主流。在这期间,还有其他许多经典的NLP传统算法诞生,包括tfidf、BM25、PageRank、LSI、向量空间与余弦距离等。值得一提的是,在20世纪80、90年代,卷积神经网络、循环神经网络等就已经被提出,但受限于计算能力,NLP的神经网络方向不适于部署训练,多停留于理论阶段。 -----------NLP深度时代----------- 2013年,word2vec提出,NLP的里程碑式技术,从此万物embedding 随着算力的发展,神经网络可以越做越深,之前受限的神经网络不再停留在理论阶段。在图像领域证明过实力后。在如今的NLP技术上,全都是CNN/RNN/LSTM、到seq2seq、到Attention, 到BERT提出,一切以任务准确率为导向。传统的机器学习瞬间被冷淡。 深度学习时代,神经网络能够自动从数据中挖掘特征,人们从复杂的特征中脱离出来,得以更专注于模型算法本身的创新以及理论的突破,传统的经典算法地位大不如前。但神经网络似乎一直是个黑箱,可解释性一直是个痛点,且由于其复杂度更高,在工业界经典算法似乎还是占据主流。 目前,仍有很多制约NLP发展的因素,这些因素构成了NLP的难点。而且要命的是,大多数是基础技术的难点。个人不完全统计,有: 中文分词:表现不好的话,后面的模型最多也只能尽力纠偏 词义消歧:目前还没有通用的好的解决办法,常常被忽略 二义性:有些句子,往往有多种理解方式,其中以两种理解方式的最为常见,称二义性。 OOV问题,大量的垂直领域的词汇和越来越多的新词让NLP越来越难处理。 最关键的一个点,目前还没人解决语义到底是什么,或者说没有一种通用的定义,导致NLP领域盲目发展,过度追求任务准确率,忽略语言的语义解释。这也是当前亟待解决的一个重大问题。 部分摘自https://taou.cn/pEY3s