自然语言处理

自然语言处理（Natural Language Processing，缩写作 NLP）是人工智慧和语言学领域的分支学科。此领域探讨如何处理及运用自然语言；自然语言处理包括多方面和步骤，基本有认知、理解、生成等部分。
自然语言认知和理解是让电脑把输入的语言变成有意思的符号和关系，然后根据目的再处理。自然语言生成系统则是把计算机数据转化为自然语言。
自然语言处理要研制表示语言能力和语言应用的模型, 建立计算框架来实现并完善语言模型，并根据语言模型设计各种实用系统及探讨这些系统的评测技术。

**历史**
自然语言处理大体是从1950年代开始，虽然更早期也有作为。1950年，艾伦·图灵发表论文「Computing Machinery and Intelligence」，提出现在所谓的「图灵测试」作为判断智能的条件。
1954年的乔治城-IBM实验涉及全部 automatic translation 超过60句俄文成为英文。研究人员声称三到五年之内即可解决机器翻译的问题。不过实际进展远低于预期，1966年的 ALPAC report 发现十年研究未达预期目标，机器翻译的研究经费遭到大幅削减。一直到1980年代末期，统计机器翻译系统发展出来，机器翻译的研究才得以更上一层楼。
1960年代发展特别成功的NLP系统包括SHRDLU——一个词汇设限、运作于受限如「积木世界」的一种自然语言系统，以及1964-1966年约瑟夫·维森鲍姆模拟「个人中心治疗」而设计的ELIZA——几乎未运用人类思想和感情的讯息，有时候却能呈现令人讶异地类似人之间的互动。「病人」提出的问题超出ELIZA 极小的知识范围之时，可能会得到空泛的回答。例如问题是「我的头痛」，回答是「为什么说你头痛？」
1970年代，程式设计师开始设计「概念本体论」（conceptual ontologies）的程式，将现实世界的资讯，架构成电脑能够理解的资料。实例有MARGIE、SAM、PAM、TaleSpin、QUALM、Politics以及Plot Unit。许多聊天机器人在这一时期写成，包括 PARRY  、 Racter 以及 Jabberwacky  。
一直到1980年代，多数自然语言处理系统是以一套复杂、人工订定的规则为基础。不过从1980年代末期开始，语言处理引进了机器学习的演算法，NLP产生革新。成因有两个：运算能力稳定增加（参见摩尔定律）；以及乔姆斯基语言学理论渐渐丧失主导（例如转换-生成文法）。该理论的架构不倾向于语料库——机器学习处理语言所用方法的基础。有些最早期使用的机器学习演算法，例如决策树，是硬性的、「如果-则」规则组成的系统，类似当时既有的人工订定的规则。不过part-of-speech tagging 将隐马尔可夫模型引入NLP，并且研究日益聚焦于软性的、以机率做决定的统计模型，基础是将输入资料里每一个特性赋予代表其份量的数值。许多语音识别现今依赖的 cache language model 即是一种统计模型的例子。这种模型通常足以处理非预期的输入数据，尤其是输入有错误（真实世界的数据总免不了），并且在整合到包含多个子任务的较大系统时，结果比较可靠。
许多早期的成功属于机器翻译领域，尤其归功IBM的研究，渐次发展出更复杂的统计模型。这些系统得以利用加拿大和欧盟现有的语料库，因为其法律规定政府的会议必须翻译成所有的官方语言。不过，其他大部分系统必须特别打造自己的语料库，一直到现在这都是限制其成功的一个主要因素，于是大量的研究致力于从有限的数据更有效地学习。
近来的研究更加聚焦于非监督式学习和semi-supervised learning的演算法。这种演算法，能够从没有人工注解理想答案的资料里学习。大体而言，这种学习比监督学习困难，并且在同量的数据下，通常产生的结果较不准确。不过没有注解的数据量极巨（包含了全球资讯网），弥补了较不准确的缺点。
2011年以来，深度学习技巧纷纷出炉 在自然语言处理方面获得最尖端的成果，例如语言模型、语法分析等等。2017年Transformer模型诞生；2018年BERT模型推出，提出了预训练的方法。
2022年底，随着ChatGPT等大型语言模型的推出，自然语言处理的重点从自然语言理解转向了自然语言生成。

**用途**
在许多情况下，学者们需要通过许多不同的数据库来确定新的研究方向，以识别研究差距并确定迄今为止尚未研究的领域。检查所有电子数据库很麻烦，而且经常会遗漏重要的部分。通过使用网络抓取和自然语言处理来缩短识别研究差距所需的时间。在Google学术搜索上索引的出版物的标题, 自然语言处理标记化(Tokenization)从最高频率到最低频率对搭配进行排序。因此，自然语言处理标记化(Tokenization)确定了标题中未提及的关键字集，并将最初的想法确定为研究空白。

**任务和限制**
理论上，NLP是一种很吸引人的人机交互方式。早期的语言处理系统如SHRDLU，当它们处于一个有限的“积木世界”，运用有限的词汇表会话时，工作得相当好。这使得研究员们对此系统相当乐观，然而，当把这个系统拓展到充满了现实世界的含糊与不确定性的环境中时，他们很快丧失了信心。
由于理解（understanding）自然语言，需要关于外在世界的广泛知识以及运用操作这些知识的能力，自然语言认知，同时也被视为一个人工智慧完备（AI-complete）的问题。同时，在自然语言处理中，“理解”的定义也变成一个主要的问题。

**实际问题**
一些NLP面临的问题实例：- 句子“我们把香蕉给猴子，因为（-{牠}-们）饿了”和“我们把香蕉给猴子，因为（-{它}-们）熟透了”有同样的结构。但是代词“它们”在第一句中指的是“猴子”，在第二句中指的是“香蕉”。如果不了解猴子和香蕉的属性，无法区分。（简体中文和英文的-{它/it}-没有区分，但在正体中文里-{「牠」和「它」}-是有区别的，只是代词在中文里常常被省略，因此需区别属性并且标示出来）
不少的中文相关笑话即是利用类似结构的中文造句而成，此类笑话通常带有“中文博大精深”之类的词汇，叙述多以老外参加考试为背景。例子如下：

**自然语言处理研究的难点**

**单词的边界界定**
在口语中，词与词之间通常是连贯的，而界定字词边界通常使用的办法是取用能让给定的上下文最为通顺且在文法上无误的一种最佳组合。在书写上，汉语也没有词与词之间的边界。

**词义的消歧**
许多字词不单只有一个意思，因而我们必须选出使句意最为通顺的解释。

**句法的模糊性**
自然语言的文法通常是模棱两可的，针对一个句子通常可能会剖析（Parse）出多棵分析树（Parse Tree），而我们必须要仰赖语意及前后文的资讯才能在其中选择一棵最为适合的剖析树。

**有瑕疵的或不规范的输入**
例如语音处理时遇到外国口音或地方口音，或者在文本的处理中处理拼写，语法或者光学字元识别（OCR）的错误。

**语言行为与计划**
句子常常并不只是字面上的意思；例如，“你能把盐递过来吗”，一个好的回答应当是动手把盐递过去；在大多数上下文环境中，“能”将是糟糕的回答，虽说回答“不”或者“太远了我拿不到”也是可以接受的。再者，如果一门课程去年没开设，对于提问“这门课程去年有多少学生没通过？”回答“去年没开这门课”要比回答“没人没通过”好。

**当前自然语言处理研究的发展趋势**
第一，传统的基于句法-语义规则的理性主义方法过于复杂，随着语料库建设和语料库语言学的崛起，大规模真实文本的机器学习处理成为自然语言处理的主要选择。
第二，统计数学方法越来越受到重视，自然语言处理中越来越多地使用机器自动学习的方法来获取语言知识。
第三，浅层处理与深层处理并重，统计与规则方法并重，形成混合式的系统。
第四，自然语言处理中越来越重视词汇的作用，出现了强烈的“词汇主义”的倾向。词汇知识库的建造成为了普遍关注的问题。

**统计自然语言处理**
统计自然语言处理运用了推测学、机率、统计的方法来解决上述，尤其是针对容易高度模糊的长串句子，当套用实际文法进行分析产生出成千上万笔可能性时所引发之难题。处理这些高度模糊句子所采用消歧的方法通常运用到语料库（Corpus）以及马可夫模型（Markov models）。统计自然语言处理的技术主要由同样自人工智慧下与学习行为相关的子领域：机器学习及资料采掘所演进而成。

**主要范畴**
文本朗读（Text to speech）
*语音合成（Speech synthesis）
*语音识别（Speech recognition）
*断词／分词（Text segmentation/Word tokenization）
*中文自动分词（Chinese word segmentation）
*语法分析／剖析（Syntactic analysis/Parsing）
*汉语自动句法分析
*词汇标示框架（Lexical Markup Framework）
*n元语法（n-gram）
*词嵌入（Word2vec）
*词性标注（Part-of-speech tagging）
*文档分类（Document classification）
*自然语言生成（Natural language generation）
*文本分类（Text categorization）
*信息检索（Information retrieval）
*信息抽取（Information extraction）
*文字校对（Text-proofing）
*问答系统（Question answering）
给一句人类语言的问句，决定其答案。 典型问题有特定答案（像是加拿大的首都叫什么？），但也考虑些开放式问句（像是人生的意义是是甚么？）
*聊天机器人（ChatBot）
*对话系统（Dialogue system）
*机器翻译（Machine translation）
将某种人类语言自动翻译至另一种语言
*自动摘要（Automatic summarization）
产生一段文字的大意，通常用于提供已知领域的文章摘要，例如产生报纸上某篇文章之摘要
*文字蕴涵（Textual entailment）
*命名实体识别（Named entity recognition, NER）
*主题模型（Topic Model）
*文本情感分析（Sentiment analysis）
*语意分析（Semantic analysis）
*潜在语义学（Latent Semantic Analysis）
*词袋模型（Bag-of-words model）
*标签云（Tag Cloud）
*自然语言理解（Natural Language Understanding）
*形态分析

**参见**
 universal translator- 电脑语言学- 受限自然语言- 信息抽取- 资讯检索- 词嵌入- 自然语言理解- 潜在语义索引- 潜在语义学- Stochastic grammar- 机器记者- Automated essay scoring- Biomedical text mining- Compound term processing- 计算语言学- Computer-assisted reviewing- 深度学习- Deep linguistic processing- Foreign language reading aid- Foreign language writing aid- Language technology- 隐含狄利克雷分布（LDA）- Native-language identification- Natural language programming- Natural language user interface- 扩展查询- Reification (linguistics)- Semantic folding- 语音处理- Spoken dialogue system- 校对- Text simplification- Thought vector- Truecasing- 问答系统- Word2vec- BERT

**参考文献**

**延伸阅读**
  doi=10.1073/pnas.92.22.9977- Steven Bird, Ewan Klein, and Edward Loper (2009). Natural Language Processing with Python. O'Reilly Media. ISBN 978-0-596-51649-9.- Daniel Jurafsky and James H. Martin (2008). Speech and Language Processing, 2nd edition. Pearson Prentice Hall. ISBN 978-0-13-187321-6.- Christopher D. Manning, Prabhakar Raghavan, and Hinrich Schütze (2008). Introduction to Information Retrieval. Cambridge University Press. ISBN 978-0-521-86571-5.  Official html and pdf versions available without charge. date=20210504232558 - Christopher D. Manning and Hinrich Schütze (1999). Foundations of Statistical Natural Language Processing. The MIT Press. ISBN 978-0-262-13360-9.- David M. W. Powers and Christopher C. R. Turk (1989). Machine Learning of Natural Language. Springer-Verlag. ISBN 978-0-387-19557-5.

**外部连结**
  人类语言技术当前发展情况概览-  哥伦比亚大学自然语言处理研究组 date=20130726132410 -  卡内基梅隆大学语言技术研究院 date=20081216045852 -  斯坦福大学自然语言处理研究小组 date=20051129025046 -  中文自然语言处理开放平台 date=20210504232624 -  ACL（美国电脑语言学协会）提供的相关杂志以及研讨会的论文-  GATE: a Java Library for Text Engineering date=20120502075044 -  LTP:语言技术平台（简体中文）-  Python编程语言的自然语言处理工具包教程 date=20210504232626 -  fastNLP date=20210504232631