1. 程式人生 > 其它 >自然語言處理(NLP)——簡介

自然語言處理(NLP)——簡介

自然語言處理(NLP Natural Language Processing)是一種專業分析人類語言的人工智慧。就是在機器語⾔和⼈類語言之間溝通的橋梁,以實現人機交流的目的。
在人工智慧出現之前,機器智慧處理結構化的資料(例如Excel裡的資料)。但是網路中 大部分的資料都是非結構化的,例如:文章、圖片、音訊、視訊...
在非結構資料中,文字的數量是最多的,他雖然沒有圖片和視訊佔用的空間大,但是他的 資訊量是最大的。
為了能夠分析和利用這些文字資訊,我們就需要利用NLP技術,讓機器理解這些文字資訊,並加以利用。

NLP 的主要內容大概如下:

2個核⼼心任務:

  1. 自然語言理解 - NLU
  2. 自然語言生成 - NLG

5個難點:

  1. 語言是沒有規律的,或者說規律是錯綜複雜的。
  2. 語言是可以自由組合的,可以組合複雜的語言表達。
  3. 語言是一個開放集合,我們可以任意的發明創造一些新的表達方式。
  4. 語言需要聯絡到實踐知識,有一定的知識依賴。
  5. 語言的使用要基於環境和上下文。

4個典型應用:

  1. 情感分析
  2. 聊天機器人
  3. 語音識別
  4. 機器翻譯

6個實現步驟:

  1. 分詞-tokenization
  2. 次幹提取-stemming
  3. 詞形還原-lemmatization
  4. 詞性標註-pos tags
  5. 命名實體識別-ner
  6. 分塊-chunking

自然語言理解 - NLU

1. 什麼是自然語言理解(NLU)?

自然語言處理(N LP , Natural Language Processing)是使用自然語言同計算機進行通訊的技術, 因為處理自然語言的關鍵是要讓計算機“理解”自然語言,所以自然語言處理又叫做自然語言理解(NLU ,Natural Language Understanding), 也稱為計算語言學(Computational Ling uistics)。一方面它是語言資訊處理的一個分支 , 另一方面它是人工智慧(AI , Artificial Intelligence)的核心課題之一 。

比如我們平時用的智慧音箱:

我想聽歌
放首歌
來點音樂
...

人們會有很多種自然的表達,可以說“自然的表達”有無窮多的組合都是在代表“聽歌”這個意圖的。而要理解這麼多種不同的表達,對機器是個挑戰。早些時候,機器只能處理結構化的資料(比如關鍵詞),也就是說如果要聽懂人在講什麼,必須要使用者輸入精確的指令。
而這些指令的關鍵詞肯定在不同表達中會被誤判,所以顯得很笨。自然語言理解這個技能出現後,可以讓機器從各種自然語言的表達中,區分出來,哪些話 歸屬於這個意圖;而那些表達不是歸於這一類的,而不再依賴那麼死板的關鍵詞。
再比如說智慧音響:

“太吵了”
機器:“已幫您調小音量”

使用者並沒有提到音量,但是機器需要知道使用者的意圖——音量太高,需要把音量調小。

2. 自然語言理解(NLU)的應用

  • 機器翻譯(有道、百度翻譯等)
  • 機器客服(各種app裡面的機器客戶)
  • 智慧音箱(小愛音箱、天貓精靈等)

3. 自然語言理解(NLU)的難點

難點1:語言的多樣性
自然語言有很多不同的表達,組合方式非常靈活,不同的組合可以表達多種含義,總能找到很多例外的情況。

難點2:語言的歧義性
如果不聯絡上下文,缺少環境的約束,語言有很大的歧義性。

難點3:語言的魯棒性
自然語言在輸入的過程中,尤其是通過語音識別獲得的文字,會存在多字、少字、錯字、噪音等問題。

難點4:語言的知識依賴
語言是對世界的符號化描述,語言天然連線著世界知識。

難點5:語言的上下文
上下文的概念包括很多種:對話的上下文、裝置的上下文、應用的上下文、使用者畫像。

4. NLU的實現方式

自然語言理解一共經歷了 3次迭代:

  1. 基於規則的方法
  2. 基於統計的方法
  3. 基於深度學習的方法
    總結規律來判斷自然語言的意圖,常見的方法有:CFG、JSGF等。
    基於統計學的NLU方式,常見的方法有:SVM、ME等。
    隨著深度學習的爆發,CNN、RNN、LSTM都成為了最新的主流,Transformer是目前最先進的方法。

自然語言生成 - NLG

NLG是為了跨越人類和機器之間的溝通鴻溝,將非語言格式的資料轉換成人類可以理解的 語言格式,如文章、報告等

1. 自然語言生成-NLG有2種方式:

  1. text - to - text:文字到語言的生成
  2. data - to - text :資料到語言的生成

2. NLG的3個LEVEL

簡單的資料合併:自然語言處理的簡化形式,這將允許將資料轉換為文字(通過類似 Excel的函式)。
模板化的NLG:這種形式的NLG使用模板驅動模式來顯示輸出。。資料動態地保持更改,並由預定義的業務規則集(如if/else迴圈語句)生成。
高階NLG:這種形式的自然語言生成就像人類一樣。它理解意圖,新增智慧,考慮上下 文,並將結果呈現在使用者可以輕鬆閱讀和理解的富有洞察力的敘述中。

3. NLG的6個步驟

第一步:內容確定-Content Determination
作為第一步,NLG系統需要決定哪些資訊應該包含在正在構建的文字中,哪些不應該包 含。通常資料中包含的資訊比最終傳達的資訊要多。
第二步:文字結構-Text Structuring
確定需要傳達哪些資訊後,NLG系統需要合理的組織文字的順序。例如在報道一場籃球比 賽時,會優先表達「什麼時間」「什麼地點」「哪2支球隊」,然後再表達「比賽的概 況」,最後表達「比賽的結局」。
第三步:句子聚合-Sentence Aggregation
不是每一條資訊都需要一個獨立的句子來表達,將多個資訊合併到一個句子裡表達可能會 更加流暢,也更易於閱讀。
第四步:語法化-Lexicalisation
當每一句的內容確定下來後,就可以將這些資訊組織成自然語言了。這個步驟會在各種信 息之間加一些連線詞,看起來更像是一個完整的句子。
第五步:參考表示式生成-Referring Expression Generation|REG
這個步驟跟語法化很相似,都是選擇一些單詞和短語來構成一個完整的句子。不過他跟語 法化的本質區別在於“REG需要識別出內容的領域,然後使用該領域(而不是其他領域) 的詞彙"。
第六步:語言實現-Linguistic Realisation
最後,當所有相關的單詞和短語都已經確定時,需要將它們組合起來形成一個結構良好的 完整句子。

4. NLG的3種典型應用

自動寫作(自動寫新聞,自動寫論文等)
聊天機器人 (各種手機開發的內建聊天機器人,智慧音響,商場導航機器人等)
BI的解讀和報告生成 (各行各業解讀報告生成比如體檢報告)

分詞-TOKENIZATION

分詞就是將句子、段落、文章這種長文字,分解為以字詞為單位的資料結構,方便後續的 處理分析工作。隨著深度學習,部分工作中也可以進行【分字】。
一般分詞我們使用到中英文分詞,中英文分詞有不同

  • 區別1:分詞方式不同,中文更難
    英文有天然的空格作為分隔符,但是中文沒有。所以如何切分是一個難點,再加上中文裡 一詞多意的情況非常多,導致很容易出現歧義。
  • 區別2:英文單詞有多種形態
    英文單詞存在豐富的變形變換。為了應對這些複雜的變換,英文NLP相比中文存在一些獨 特的處理步驟,我們稱為詞形還原(Lemmatization)和詞幹提取(Stemming)。中文 則不需要
    詞性還原:does, done, doing, did需要通過詞性還原恢復成do。
    詞幹提取:cities, children, teeth這些詞,需要轉換為city, child, tooth"這些基本形態。
  • 區別3:中文分詞需要考慮粒度問題
    粒度越大,表達的意思就越準確,但是也會導致召回比較少。

分詞的方法大致分為3類:

  1. 基於詞典匹配
  2. 基於統計
  3. 基於深度學習

給予詞典匹配的分詞方式
優點:速度快、成本低
缺點:適應性不強,不同領域效果差異大
我的這篇博文就是一個基於詞典匹配的分詞方法:C#實現前向最大匹配、字典樹(分詞、檢索)

基於統計的分詞方法
優點:適應性較強
缺點:成本較高,速度較慢
這類目前常用的是演算法是HMM、CRF、SVM、深度學習等演算法,比如Stanford、Hanlp分 詞工具是基於CRF演算法。

基於深度學習
優點:準確率高、適應性強 缺點:成本高,速度慢
例如有人員嘗試使用雙向LSTM+CRF實現分詞器,其本質上是序列標註,所以有通用性, 命名實體識別等都可以使用該模型,據報道其分詞器字元準確率可高達97.5%。

中文分詞工具
下面排名根據GitHub上的star數排名:

  1. Hanlp
  2. Stanford 分詞
  3. ansj分詞器
  4. 哈工大LTP
  5. KCWS分詞器
  6. jieba
  7. IK
  8. 清華大學THULAC
  9. ICTCLAS

英文分詞工具

  1. Keras
  2. Spacy
  3. Gensim
  4. NLTK

詞幹提取STEMMING 和詞形還原 LEMMATISATION

詞幹提取和詞形還原是英文語料預處理中的重要環節,英文單詞有多種形態,需要詞性還原和詞幹提取,中文不需要!
詞幹提取是去除單詞的前後綴得到詞根的過程。大家常見的前後詞綴有「名詞的複數」、「進行式」、「過去分詞」...等等提取出詞幹來。比如[dogs]提取[dog]。
詞幹提取更多被應用於資訊檢索領域,如Solr、Lucene等,用於擴充套件檢 索,粒度較粗。

詞形還原是基於詞典,將單詞的複雜形態轉變成最基礎的形態。詞形還原不是簡單地將前後綴去掉,而是會根據詞典將單詞進行轉換。比如[drove] 轉換為[drive]。
形還原更主要被應用於文字挖掘、自然語言處理,用於更細粒 度、更為準確的文字分析和表達。

三種主流詞幹提取演算法:Porter、Snowball、Lancaster

詞性標註-PART OF SPEECH

詞性標註(Part-Of-Speech tagging, POS tagging)也被稱為語法標註(grammatical tagging)或詞類消疑(word-category disambiguation),是語料庫語言學(corpus linguistics)中將語料庫內單詞的詞性按其含義和上下文內容進行標記的文字資料處理技術 。
詞性標註就是在給定句子中判定每個詞的語法範疇,確定其詞性並加以標註的過程,如下是漢語的詞性部分對照表:

命名實體識別 NAMED-ENTITYRECOGNITION | NER

命名實體識別(Named Entity Recognition,NER)是NLP中一項非常基礎的任務。NER是資訊提取、問答系統、句法分析、機器翻譯等眾多NLP任務的重要基礎工具。
命名實體識別,那什麼是實體,簡單的理解,實體,可以認為是某一個概念的例項。

例如,“人名”是一種概念,或者說實體型別,那麼“孫權”就是一種“人名”實體了。“時間”是一種實體型別,那麼“國慶節”就是一種“時間”實體了。
所謂實體識別,就是將你想要獲取到的實體型別,從一句話裡面挑出來的過程。只有好的實體識別才會讓其它任務的開展更有效,比如事件抽取、關係抽取等。

分塊-chunking

文字分塊是將一大段文字分割成幾段小文字,其目的是比如想獲取一段文字中的一小部分,或分割得到固定單詞數目的小部分等,經常用於非常大的文字。
注意文字分塊和分詞不一樣,分詞的目的是把一段文字分割成單詞,而文字分塊的目的是把一大段文字分割成多個小段文字。
組塊分析 (Chunking):標出句子中的短語塊,例如名詞短語(NP),動詞短語(VP)等。

最後

NLP裡面有很多工作和技術需要做,上面只是簡單的介紹了NLP的內容和一些概念,目前有的方法。每一個步驟都可以分開來在不同的應用中發揮作用,也可以聯絡起來做成很棒的產品。
NLP中常見的任務

這是學習NLP開篇需要了解的內容和總結,其中很多解釋和句子摘抄至:https://easyai.tech/ai-definition/nlp/(侵告刪)。

後面會學一些NLP的相關知識,包括【hanlp】的學習分享。

作者:SunSpring

出處:https://www.cnblogs.com/SunSpring

本文版權歸作者所有,歡迎轉載,但未經作者同需在文章頁面明顯位置給出原文連結。