1、概述
自然語言處理(Natural Language Processing,NLP)是計算機科學領域與人工智能領域中的一個重要方向。它研究人與計算機之間用自然語言進行有效通信的理論和方法。融語言學、計算機科學、數學等於一體的科學。旨在從文本數據中提取信息。目的是讓計算機處理或“理解”自然語言,以執行自動翻譯、文本分類和情感分析等。自然語言處理是人工智能中最爲困難的問題之一。
2、NLP基礎儲備
2.1 數學基礎
(1)線性代數
- 向量
- 矩陣
- 距離計算(餘弦距離、歐式距離、曼哈頓距離、明可夫斯基距離、切比雪夫距離、傑卡德距離、漢明距離、標準歐式距離、皮爾遜相關係數)
(2)概率論
- 隨機試驗
- 條件概率
- 全概率
- 貝葉斯定理
(3)統計學
- 數據度量標準(平均數、中位數、衆數、期望、標準差、方差、協方差)
- 概率分佈(幾何分佈、二項分佈、正態分佈、泊松分佈)
- 統計假設檢驗
(4)微積分
- 倒數梯度...
(5)信息論
- 自信息
- 互信息
- 熵
2.2 語言學基礎
語音、詞彙、語法
2.3 語言基礎
- Python
- Java
- Julia
- ......
2.4 機器學習基礎
書籍:
- 統計學習方法(李航) ------頻率派經典
- 機器學習(周志華)
- 機器學習實戰
其他:
- Pattern Recognition and Machine Learning -------貝葉斯派經典
2.5 深度學習基礎
- CNN
- RNN
- LSTM
2.6 自然語言處理的理論基礎
- 統計自然語言處理(宗成慶第二版)
- Python自然語言處理
- 數學之美(第二版)
3、NLP主要技術範疇
3.1語義文本相似度分析
語義文本相似度分析是對兩段文本的意義和本質之間的相似度進行分析的過程。
3.2 信息檢索(Information Retrieval, IR)
信息檢索是指將信息按一定的方式加以組織,並通過信息查找滿足用戶的信息需求的過程和技術。
3.3 信息抽取(Information Extraction)
信息抽取是指從非結構化/半結構化文本(如網頁、新聞、 論文文獻、微博等)中提取指定類型的信息(如實體、屬性、關係、事件、商品記錄等),並通過信息歸併、冗餘消除和衝突消解等手段將非結構化文本轉換爲結構化信息的一項綜合技術。
3.4 文本分類(Text Categorization)
文本分類的任務是根據給定文檔的內容或主題,自動分配預先定義的類別標籤。
3.5 文本挖掘(Text Mining)
文本挖掘是信息挖掘的一個研究分支,用於基於文本信息的知識發現。文本挖掘的準備工作由文本收集、文本分析和特徵修剪三個步驟組成。目前研究和應用最多的幾種文本挖掘技術有:文檔聚類、文檔分類和摘要抽取。
3.6 文本情感分析(Textual Affective Analysis)
情感分析是一種廣泛的主觀分析,它使用自然語言處理技術來識別客戶評論的語義情感,語句表達的情緒正負面以及通過語音分析或書面文字判斷其表達的情感等。
3.7 問答系統(Question Answering, QA)
自動問答是指利用計算機自動回答用戶所提出的問題以滿足用戶知識需求的任務。不同於現有搜索引擎,問答系統是信息服務的一種高級形式,系統返回用戶的不再是基於關鍵詞匹配排序的文檔列表,而是精準的自然語言答案。
3.8 機器翻譯(Machine Translation,MT)
機器翻譯是指利用計算機實現從一種自然語言到另外一種自然語言的自動翻譯。被翻譯的語言稱爲源語言(source language),翻譯到的語言稱作目標語言(target language)。
機器翻譯研究的目標就是建立有效的自動翻譯方法、模型和系統,打破語言壁壘,最終實現任意時間、任意地點和任意語言的自動翻譯,完成人們無障礙自由交流的夢想。
3.9 自動摘要(Automatic Summarization)
自動文摘(又稱自動文檔摘要)是指通過自動分析給定的一篇文檔或多篇文檔,提煉、總結其中的要點信息,最終輸出一篇長度較短、可讀性良好的摘要(通常包含幾句話或數百字),該摘要中的句子可直接出自原文,也可重新撰寫所得。
3.10 語音識別(Speech Recognition)
語言識別指的是將不同語言的文本區分出來。其利用語言的統計和語法屬性來執行此任務。語言識別也可以被認爲是文本分類的特殊情況。
4、自然語言處理基本點
4.1 語料庫(Corpus)
語料庫中存放的是在語言的實際使用中真實出現過的語言材料;語料庫是以電子計算機爲載體承載語言知識的基礎資源;真實語料需要經過加工(分析和處理),才能成爲有用的資源。
4.2 中文分詞(Chinese Word egmentation)
(1)中文分詞指的是將一個漢字序列切分成一個一個單獨的詞。分詞就是將連續的字序列按照一定的規範重新組合成詞序列的過程。
(2)現有的分詞方法可分爲三大類:基於字符串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。
(3)比較流行的中文分詞工具:jieba、StanfordNLP、HanLP、SnowNLP、THULAC、NLPIR
4.3 詞性標註(Part-of-speech tagging)
(1)詞性標註是指爲給定句子中的每個詞賦予正確的詞法標記,給定一個切好詞的句子,詞性標註的目的是爲每一個詞賦予一個類別,這個類別稱爲詞性標記(part-of-speech tag),比如,名詞(noun)、動詞(verb)、形容詞(adjective)等。
(2)詞性標註是一個非常典型的序列標註問題。最初採用的方法是隱馬爾科夫生成式模型, 然後是判別式的最大熵模型、支持向量機模型,目前學術界通常採用的結構是感知器模型和條件隨機場模型。近年來,隨着深度學習技術的發展,研究者們也提出了很多有效的基於深層神經網絡的詞性標註方法。
4.4 句法分析(Parsing)
(1)基於規則的句法結構分析
(2)基於統計的語法結構分析
4.5 詞幹提取(Stemming)
詞幹提取是將詞語去除變化或衍生形式,轉換爲詞幹或原型形式的過程。詞幹提取的目標是將相關詞語還原爲同樣的詞幹。
4.6 詞形還原(Lemmatization)
詞形還原是將一組詞語還原爲詞源或詞典的詞目形式的過程。
4.7 停用詞過濾
停用詞過濾是指在文本中頻繁出現且對文本信息的內容或分類類別貢獻不大甚至無貢獻的詞語,如常見的介詞、冠詞、助詞、情態動詞、代詞以及連詞等。
4.8 詞向量化(Word2Vector)
詞向量化是用一組實數構成的向量代表自然語言的叫法。這種技術非常實用,因爲電腦無法處理自然語言。詞向量化可以捕捉到自然語言和實數間的本質關係。通過詞向量化,一個詞語或者一段短語可以用一個定維的向量表示。
4.9 命名實體消歧(Named Entity Disambiguation)
命名實體消岐是對句子中的提到的實體識別的過程。
例如,對句子“Apple earned a revenue of 200 Billion USD in 2016”,命名實體消岐會推斷出句子中的Apple是蘋果公司而不是指一種水果。一般來說,命名實體要求有一個實體知識庫,能夠將句子中提到的實體和知識庫聯繫起來。
4.10 命名實體識別(named entity recognition)
命名實體識別是識別一個句子中有特定意義的實體並將其區分爲人名,機構名,日期,地名,時間等類別的任務。
三種主流算法:CRF,字典法和混合方法
5、特徵處理
5.1 特徵提取(Feature Extraction)
特徵提取是指將機器學習算法不能識別的原始數據轉化爲算法可以識別的特徵的過程。
舉例(文本分類特徵提取步驟):
(1)對訓練數據集的每篇文章,我們進行詞語的統計,以形成一個詞典向量。詞典向量裏包含了訓練數據裏的所有詞語(假設停用詞已去除),且每個詞語代表詞典向量中的一個元素。
(2)在經過第一步的處理後,每篇文章都可以用詞典向量來表示。這樣一來,每篇文章都可以被看作是元素相同且長度相同的向量,不同的文章具有不同的向量值。這也就是表示文本的詞袋模型(bag of words)。
(3)針對於特定的文章,如何給表示它的向量的每一個元素賦值呢?最簡單直接的辦法就是0-1法了。簡單來說,對於每一篇文章,我們掃描它的詞語集合,如果某一個詞語出現在了詞典中,那麼該詞語在詞典向量中對應的元素置爲1,否則爲0。
5.2 特徵選擇( Feature Selection)
當數據預處理完成後,我們需要選擇有意義的特徵輸入機器學習的算法和模型進行訓練。特徵選擇是指去掉無關特徵,保留相關特徵的過程,也可以認爲是從所有的特徵中選擇一個最好的特徵子集。特徵選擇本質上可以認爲是降維的過程。
5.3 降維(Dimension Reduction)
採用某種映射方法,將原高維空間中的數據點映射到低維度的空間中。降維的本質是學習一個映射函數 f : x->y,其中x是原始數據點的表達,目前最多使用向量表達形式。
- PCA
- LDA
- LLE
- Laplacian Eigenmaps
6、模型選擇
6.1 馬爾可夫系列
馬爾可夫模型、隱馬爾可夫模型、層次化隱馬爾可夫模型、馬爾可夫網絡
大佬說:學NLP的話隱馬爾可夫模型和條件隨機場必會!
(1)應用:詞類標註、語音識別、局部句法剖析、語塊分析、命名實體識別、信息抽取等。應用於自然科學、工程技術、生物科技、公用事業、信道編碼等多個領域。
(2)馬爾可夫鏈:在隨機過程中,每個語言符號的出現概率不相互獨立,每個隨機試驗的當前狀態依賴於此前狀態,這種鏈就是馬爾可夫鏈。
(3)多元馬爾科夫鏈:考慮前一個語言符號對後一個語言符號出現概率的影響,這樣得出的語言成分的鏈叫做一重馬爾可夫鏈,也是二元語法。二重馬爾可夫鏈,也是三元語法,三重馬爾可夫鏈,也是四元語法
6.2 條件隨機場(CRF)
(1)條件隨機場用於序列標註,中文分詞、中文人名識別和歧義消解等自然語言處理中,表現出很好的效果。原理是:對給定的觀察序列和標註序列,建立條件概率模型。條件隨機場可用於不同預測問題,其學習方法通常是極大似然估計。
(2)條件隨機場模型也需要解決三個基本問題:特徵的選擇、參數訓練和解碼。
6.3 貝葉斯網絡
貝葉斯網絡又稱爲信度網絡或信念網絡(belief networks),是一種基於概率推理的數學模型,其理論基礎是貝葉斯公式。
6.4 最大熵模型
https://www.cnblogs.com/rossiXYZ/p/12244760.html
7、NLP常用工具
(1)Anaconda
Anaconda是一個用於科學計算的Python開發平臺,支持 Linux,Mac和Windows系統,提供了包管理與環境管理的功能,可以很方便地解決多版本Python並存、切換以及各種第三方包安裝問題。Anaconda利用conda命令來進行package和environment的管理,並且已經包含了Python和相關的配套工具。Anaconda集成了大量的機器學習庫以及數據處理必不可少的第三方庫,比如NumPy,SciPy,Scikit-Learn以及TensorFlow等。
(2)Scikit-learn
Scikit-learn是廣受歡迎的入門級機器學習庫,包含大量的機器學習算法和特徵提取實現,使用非常簡便。Scikit-learn實現的是淺層學習算法,神經網絡僅實現了多層感知機。
(3)TensorFlow
TensorFlow是谷歌基於DistBelief進行研發的第二代人工智能學習系統,可被用於語音識別或圖像識別等多項機器學習和深度學習領域。
(4)Keras
Keras是一個高級別的Python神經網絡框架,能在TensorFlow或者 Theano 上運行。Keras的作者、谷歌AI研究員Francois Chollet宣佈了一條激動人心的消息,Keras將會成爲第一個被添加到TensorFlow核心中的高級別框架,這將會讓Keras變成Tensorflow的默認API。
(5)Gensim
Gensim是一款開源的第三方Python工具包,用於從原始的非結構化的文本中,無監督地學習到文本隱層的主題向量表達。它支持包括TF-IDF,LSA,LDA,和word2vec在內的多種主題模型算法,支持流式訓練,並提供了諸如相似度計算,信息檢索等一些常用任務的API接口。
(6)NLTK
在NLP領域中,NLTK是最常使用的一個Python庫。
(7)Jieba
Jieba,結巴分詞是最受歡迎的中文分詞工具。
8、NLP語言模型
- 詞的獨熱表示(one-hot representation)
- Bag of Words
- Bi-gram 和 N-gram
- 詞的分佈式表示(distributed representation)
- 共現矩陣(Cocurrence martrix)
- 神經網絡語言模型(Neural Networ Language model,NNLM)
- word2vec
- 連續詞袋模型(Continuous Bag of Words,CBOW)
- Skip-Gram模型
9、快速入門NLP方法
(1)認真看完一本NLP相關的書,堅持看完一部視頻。
(2)看這兩年相關方向的綜述論文,然後看一些經典的論文和最新論文。
(3)獨立實現一個小型的自然語言處理項目。
(4)可以在Github上找到很多相關的開源代碼,選一個自己感興趣的方向進行研究。
10、學習資料
10.1、在線課程
- Dan Jurafsky 和 Chris Manning:自然語言處理[非常棒的視頻介紹系列]
- 斯坦福CS224d:自然語言處理的深度學習[更高級的機器學習算法、深度學習和NLP的神經網絡架構]
- Coursera:自然語言處理簡介[由密西根大學提供的NLP課程]
- 吳恩達系列
- 李宏毅系列
10.2、博客
參考:小白NLP學習路線