自然語言處理

自然語言處理（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