人工智能自然语言处理NLP入门教程
導讀:自然語言處理(NLP)是計算機科學,人工智能,語言學關注計算機和人類(自然)語言之間的相互作用的領域。
語言是人類區(qū)別其他動物的本質(zhì)特性。在所有生物中,只有人類才具有語言能力。人類的多種智能都與語言有著密切的關系。人類的邏輯思維以語言為形式,人類的絕大部分知識也是以語言文字的形式記載和流傳下來的。因而,它也是人工智能的一個重要,甚至核心部分。
?人工智能數(shù)學基礎(二)人工智能數(shù)學基礎(一)人工智能數(shù)學基礎(三)
人工智能常用的十大算法
為了方便大家學習交流,我建了一個扣裙:966367816(學習交流、大牛答疑、大廠內(nèi)推)
 另外我還整理了整整200G的人工智能學習筆記、課程視頻、面試寶典一并可以無套路免費
 分享給大家!??
?定義
自然語言處理是計算機科學領域與人工智能領域中的一個重要方向。它研究能實現(xiàn)人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數(shù)學于一體的科學。因此,這一領域的研究將涉及自然語言,即人們?nèi)粘J褂玫恼Z言,所以它與語言學的研究有著密切的聯(lián)系,但又有重要的區(qū)別。自然語言處理并不是一般地研究自然語言,而在于研制能有效地實現(xiàn)自然語言通信的計算機系統(tǒng),特別是其中的軟件系統(tǒng)。因而它是計算機科學的一部分。
?NLP致力于讓計算機能夠理解和生成人類語言。NLP技術應用于多個領域,比如天貓精靈和Siri這樣的語音助手,還有機器翻譯和文本過濾等。機器學習是受NLP影響最深遠的領域之一,尤為突出的是深度學習技術。該領域分為以下三個部分:
1.語音識別:將口語翻譯成文本。
2.自然語言理解:計算機理解人類的能力。
3.自然語言生成:計算機生成自然語言。
NLP為什么有難度
人類語言有其特殊性。人類語言專門用于傳達講話者和寫作者的意思,即使小孩子能夠很快學會,它依然是一個復雜的系統(tǒng)。它的另一個顯著之處在于它完全與符號有關。人類大腦對這些符號的編碼是持續(xù)的激活模式,在這個模式中,符號通過聲音和視覺的連續(xù)信號實現(xiàn)傳輸。
由于其復雜性,理解人類語言被認為是一項艱巨的任務。例如,在句子中排列單詞有無數(shù)種不同的方法。此外,一個單詞可以有多種含義,并且正確解釋句子需要恰當?shù)恼Z境信息。每種語言或多或少都是獨特且含糊的。比如:“The Pope’s baby steps on gays”,這句話顯然有兩種截然不同的解釋,這是反映NLP中的困難之處的一個很好的例子。
隨著計算機對語言的理解愈漸完美,將會產(chǎn)生可以處理互聯(lián)網(wǎng)上全部信息的人工智能(AI),繼而產(chǎn)生強人工智能(AGI)
語義分析是NLP中最棘手的部分之一,仍未完全解決。例如,語音識別技術已非常成熟,并且工作近乎完美,但仍然缺乏在自然語言理解(例如語義)中的熟練程度。手機基本上可以理解我們所說的內(nèi)容,但通常無法用它做任何事情,因為它不了解其背后意義。
技術
數(shù)據(jù)稀疏與平滑技術
大規(guī)模數(shù)據(jù)統(tǒng)計方法與有限的訓練語料之間必然產(chǎn)生數(shù)據(jù)稀疏問題,導致零概率問題,符合經(jīng)典的zip'f定律。如IBM, Brown:366M英語語料訓練trigram,在測試語料中,有14.7%的trigram和2.2%的bigram在訓練語料中未出現(xiàn)。
人們?yōu)槔碚撃P蛯嵱没M行了眾多嘗試與努力,誕生了一系列經(jīng)典的平滑技術,它們的基本思想是"降低已出現(xiàn)n-gram條件概率分布,以使未出現(xiàn)的n-gram條件概率分布非零",且經(jīng)數(shù)據(jù)平滑后一定保證概率和為1,詳細如下:
加一平滑法,又稱拉普拉斯定律,其保證每個n-gram在訓練語料中至少出現(xiàn)1次,以bigram為例,公式如圖:
?其中,V是所有bigram的個數(shù)。
其基本思想是利用頻率的類別信息對頻率進行平滑。調(diào)整出現(xiàn)頻率為c的n-gram頻率為c*:
?直接的改進策略就是"對出現(xiàn)次數(shù)超過某個閾值的gram,不進行平滑,閾值一般取8~10",其他方法請參見"Simple Good-Turing"。
不管是Add-one,還是Good Turing平滑技術,對于未出現(xiàn)的n-gram都一視同仁,難免存在不合理(事件發(fā)生概率存在差別),所以這里再介紹一種線性插值平滑技術,其基本思想是將高階模型和低階模型作線性組合,利用低元n-gram模型對高元n-gram模型進行線性插值。因為在沒有足夠的數(shù)據(jù)對高元n-gram模型進行概率估計時,低元n-gram模型通常可以提供有用的信息。公式如下如右圖1:?
擴展方式(上下文相關)為如圖:
?
λs可以通過EM算法來估計,具體步驟如下:
重要應用
1、機器翻譯。機器翻譯(MachineTranslation)是指運用機器,通過特定的計算機程序?qū)⒁环N書寫形式或聲音形式的自然語言,翻譯成另一種書寫形式或聲音形式的自然語言。機器翻譯是一門交叉學科(邊緣學科),組成它的三門子學科分別是計算機語言學、人工智能和數(shù)理邏輯,各自建立在語言學、計算機科學和數(shù)學的基礎之上。
2、信息檢索。信息檢索是從相關文檔集合中查找用戶所需信息的過程。信息檢索的基本原理是將用戶輸入的檢索關鍵詞與數(shù)據(jù)庫中的標引詞進行對比,當二者匹配成功時,檢索成功。
3、自動問答。自動問答是指利用計算機自動回答用戶所提出的問題以滿足用戶知識需求的任務。自動問答系統(tǒng)在回答用戶問題時,首先要正確理解用戶所提出的問題,抽取其中關鍵的信息,在已有的語料庫或者知識庫中進行檢索、匹配,將獲取的答案反饋給用戶。這一過程涉及了包括詞法句法語義分析的基礎技術,以及信息檢索、知識工程、文本生成等多項技術。
關鍵技術
句法分析:也稱為語法分析或解析,是通過遵循正式語法規(guī)則來分析自然語言的過程。語法規(guī)則適用于單詞和詞組,而不是單個單詞。語法分析主要為文本分配語義結(jié)構(gòu)。
語義分析:是理解單詞、符號和語句結(jié)構(gòu)的含義和解釋的過程,這使計算機能夠以人類的方式理解部分涉及意義和語境的自然語言。
文本生成語音識別
漢字編碼詞法分析
處理工具
OpenNLP:是一個基于Java機器學習工具包,用于處理自然語言文本。支持大多數(shù)常用的 NLP 任務,例如:標識化、句子切分、部分詞性標注、名稱抽取、組塊、解析等。
?FudanNLP:主要是為中文自然語言處理而開發(fā)的工具包,也包含為實現(xiàn)這些任務的機器學習算法和數(shù)據(jù)集。本工具包及其包含數(shù)據(jù)集使用LGPL3.0許可證。開發(fā)語言為Java。
功能:
1.文本分類新聞聚類
2. 中文分詞 詞性標注 實體名識別 關鍵詞抽取 依存句法分析 時間短語識別
3. 結(jié)構(gòu)化學習 在線學習 層次分類 聚類 精確推理
深度學習和自然語言處理
深度學習和自然語言的核心是“詞義”,在這里,單詞用一個實數(shù)向量來表示。因此,通過向量來代表單詞單詞,我們可以將單詞置于高維度的空間中,由向量表示的單詞起到語義空間的作用。這僅僅意味著在該高維向量空間中,形近意近的單詞傾向于聚集在一起。
如果想要知道某一組聚集成類的單詞的含義,可以通過使用主成分分析法(PCA),也可以使用降維法。但這些方法太簡單并且會遺漏了周邊的大量信息,因而產(chǎn)生誤差。在研究的初始階段,這些方法很好用,(如數(shù)據(jù)科學中的邏輯或線性回歸)但并不是前沿技術。
我們還可以將單詞的一部分當作向量,這些向量可以代表單詞的含義。想象一下“undesirability”這個詞。使用“形態(tài)學方法”,它涉及一個詞所具有的不同部分,我們認為它由詞素(單詞部分)構(gòu)成:“Un + desire + able + ity”。每個語素都有自己的向量。這允許我們構(gòu)建一個神經(jīng)網(wǎng)絡,它可以構(gòu)成一個更大的單位的意義,而更大的單位又由所有這些語素組成。
深度學習還可以通過創(chuàng)建句法分析器來理解句子的結(jié)構(gòu),谷歌正在使用這樣的依賴解析技術,在他們的“McParseface”和“SyntaxNet”(兩種語言解析器),不過更加宏大,更加復雜。
通過分析句子結(jié)構(gòu),我們開始理解句子的意義,可以從單詞的含義開始,也可以從整個短語和句子開始,無論單詞的意義、短語還是句子,都用向量來表示。如果想知道句子之間的關系,我們可以創(chuàng)建神經(jīng)網(wǎng)絡來幫助分析。
深度學習也適用于情感分析。請看這個電影評論:“這部電影不在乎是不是巧妙,也不在乎幽默與否”。傳統(tǒng)的機器學習算法會認為這是一個積極的評論,因為“聰明”和“幽默”是積極的詞匯,但是神經(jīng)網(wǎng)絡能夠識別出它的真正含義。
另外,深度學習算法實現(xiàn)的機器翻譯中,它從句子開始翻譯,并生成一個向量,然后用另外一種語言生成所需要的信息。
總而言之,NLP與深度學習相結(jié)合,就是表示單詞、短語的向量,以及它們的含義。
技術難點
單詞邊界界定:在口語中,詞與詞之間通常是連貫的,而界定字詞邊界通常使用的辦法是取用能讓給定的上下文最為通順且在文法上無誤的一種最佳組合。在書寫上,漢語也沒有詞與詞之間的邊界。
詞義的消歧:許多字詞不單只有一個意思,因而我們必須選出使句意最為通順的解釋。
句法的模糊性:自然語言的文法通常是模棱兩可的,針對一個句子通常可能會剖析(Parse)出多棵剖析樹(Parse Tree),而我們必須要仰賴語意及前后文的信息才能在其中選擇一棵最為適合的剖析樹。
或不規(guī)范輸入:例如語音處理時遇到外國口音或地方口音,或者在文本的處理中處理拼寫,語法或者光學字符識別((OCR)的錯誤。
語言行為計劃:句子常常并不只是字面上的意思;例如,“你能把鹽遞過來嗎”,一個好的回答應當是把鹽遞過去;在大多數(shù)上下文環(huán)境中,“能”將是糟糕的回答,雖說回答“不”或者“太遠了我拿不到”也是可以接受的。再者,如果一門課程上一年沒開設,對于提問“這門課程去年有多少學生沒通過?”回答“去年沒開這門課”要比回答“沒人沒通過”好。
需要課件配套課件資料和源碼筆記的伙伴加我微信免費領取!
 為了方便大家學習交流,我建了一個扣裙:966367816學習交流、大牛答疑、大廠內(nèi)推)
 另外我還整理了整整200G的人工智能學習筆記、課程視頻、面試寶典
一并可以無套路免費分享給大家!?
歡迎大家來撩我呀~
總結(jié)
以上是生活随笔為你收集整理的人工智能自然语言处理NLP入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: java单元测试测试异常_Java单元测
- 下一篇: Java基础-集合类-ArrayList
