自然語言處理(NLP Natural Language Processing)是一種專業分析人類語言的人工智能。就是在機器語⾔和⼈類語言之間溝通的橋梁,以實現人機交流的目的。
在人工智能出現之前,機器智能處理結構化的數據(例如Excel裏的數據)。但是網絡中 大部分的數據都是非結構化的,例如:文章、圖片、音頻、視頻...
在非結構數據中,文本的數量是最多的,他雖然沒有圖片和視頻佔用的空間大,但是他的 信息量是最大的。
爲了能夠分析和利用這些文本信息,我們就需要利用NLP技術,讓機器理解這些文本信息,並加以利用。
NLP 的主要內容大概如下:
2個核⼼心任務:
- 自然語言理解 - NLU
- 自然語言生成 - NLG
5個難點:
- 語言是沒有規律的,或者說規律是錯綜複雜的。
- 語言是可以自由組合的,可以組合複雜的語言表達。
- 語言是一個開放集合,我們可以任意的發明創造一些新的表達方式。
- 語言需要聯繫到實踐知識,有一定的知識依賴。
- 語言的使用要基於環境和上下文。
4個典型應用:
- 情感分析
- 聊天機器人
- 語音識別
- 機器翻譯
6個實現步驟:
- 分詞-tokenization
- 次幹提取-stemming
- 詞形還原-lemmatization
- 詞性標註-pos tags
- 命名實體識別-ner
- 分塊-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次迭代:
- 基於規則的方法
- 基於統計的方法
- 基於深度學習的方法
總結規律來判斷自然語言的意圖,常見的方法有:CFG、JSGF等。
基於統計學的NLU方式,常見的方法有:SVM、ME等。
隨着深度學習的爆發,CNN、RNN、LSTM都成爲了最新的主流,Transformer是目前最先進的方法。
自然語言生成 - NLG
NLG是爲了跨越人類和機器之間的溝通鴻溝,將非語言格式的數據轉換成人類可以理解的 語言格式,如文章、報告等
1. 自然語言生成-NLG有2種方式:
- text - to - text:文本到語言的生成
- 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類:
- 基於詞典匹配
- 基於統計
- 基於深度學習
給予詞典匹配的分詞方式
優點:速度快、成本低
缺點:適應性不強,不同領域效果差異大
我的這篇博文就是一個基於詞典匹配的分詞方法:C#實現前向最大匹配、字典樹(分詞、檢索)
基於統計的分詞方法
優點:適應性較強
缺點:成本較高,速度較慢
這類目前常用的是算法是HMM、CRF、SVM、深度學習等算法,比如Stanford、Hanlp分 詞工具是基於CRF算法。
基於深度學習
優點:準確率高、適應性強 缺點:成本高,速度慢
例如有人員嘗試使用雙向LSTM+CRF實現分詞器,其本質上是序列標註,所以有通用性, 命名實體識別等都可以使用該模型,據報道其分詞器字符準確率可高達97.5%。
中文分詞工具
下面排名根據GitHub上的star數排名:
- Hanlp
- Stanford 分詞
- ansj分詞器
- 哈工大LTP
- KCWS分詞器
- jieba
- IK
- 清華大學THULAC
- ICTCLAS
英文分詞工具
- Keras
- Spacy
- Gensim
- 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】的學習分享。