導航:首頁 > 源碼編譯 > 自然語言最常用的演算法

自然語言最常用的演算法

發布時間:2024-05-01 10:40:25

『壹』 nlp演算法是什麼

nlp演算法是自然語言處理。

自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智慧領域中的一個重要方向。

它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數學於一體的科學。

nlp演算法發展:

在一般情況下,用戶可能不熟悉機器語言,所以自然語言處理技術可以幫助這樣的用戶使用自然語言和機器交流。從建模的角度看,為了方便計算機處理,自然語言可以被定義為一組規則或符號的集合,我們組合集合中的符號來傳遞各種信息。

這些年,NLP研究取得了長足的進步,逐漸發展成為一門獨立的學科,從自然語言的角度出發,NLP基本可以分為兩個部分:自然語言處理以及自然語言生成,演化為理解和生成文本的任務。

『貳』 nlp演算法是什麼呢

1、nlp演算法是自然語言處理演算法。自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智慧領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。

2、自然語言處理(nlp)是一門融語言學、計算機科學、數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言,所以它與語言學的研究有著密切的聯系,但又有重要的區別。

3、自然語言處理(nlp)並不是一般地研究自然語言,而在於研製能有效地實現自然語言通信的計算機系統,特別是其中的軟體系統。因而它是計算機科學的一部分。

4、自然語言處理(nlp)主要應用於機器翻譯、輿情監測、自動摘要、觀點提取、文本分類、問題回答、文本語義對比、語音識別、中文OCR等方面。

5、自然語言(nlp)的形式(字元串)與其意義之間是一種多對多的關系。其實這也正是自然語言的魅力所在。但從計算機處理的角度看,我們必須消除歧義,而且有人認為它正是自然語言理解中的中心問題,即要把帶有潛在歧義的自然語言輸入轉換成某種無歧義的計算機內部表示。

『叄』 用自然語言描述:求兩個正整數a和b最大公約數的演算法

輾轉相除法:設兩數為a、b(b<a),求它們最大公約數(a、b)的步驟如下:用b除a,得a=bq.r 1(0≤r).若r1=0,則(a,b)=b;若r1≠0,則再用r1除b,得b=r1q.r2 (0≤r2).若r2=0,則(a,b)=r1,若r2≠0,則繼續用r2除r1,……如此下去,直到能整除為止.其最後一個非零餘數即為(a,b).
————————————--------------------------------------------
輾轉相除法是利用以下性質來確定兩個正整數 a 和 b 的最大公因子的:1.若 r 是 a ÷ b 的余數,則 gcd(a,b) = gcd(b,r) 2.a 和其倍數之最大公因子為 a.另一種寫法是:1.a ÷ b,令r為所得余數(0≤r<b) 若 r = 0,演算法結束;b 即為答案.2.互換:置 a←b,b←r,並返回第一步.

『肆』 AI PM應該懂的自然語言處理(NLP)知識

NLP是人工智慧的一個子領域,作為AI產品經理,我們至少要知道NLP是什麼,它能做什麼事,這樣我們就能獲得一種解決問題的思維,將遇到的問題和方法連接起來。接下來我從「NLP是什麼、能做什麼、目前遇到的難題」三個方面來簡單介紹下NLP。

一.什麼是NLP

NLP,中文叫自然語言處理,簡單來說,是一門讓計算機理解、分析以及生成自然語言的學科,大概的研究過程是:研製出可以表示語言能力的模型——提出各種方法來不斷提高語言模型的能力——根據語言模型來設計各種應用系統——不斷地完善語言模型。

NLP理解自然語言目前有兩種處理方式:

1.基於規則來理解自然語言,即通過制定一些系列的規則來設計一個程序,然後通過這個程序來解決自然語言問題。輸入是規則,輸出是程序;

2.基於統計機器學習來理解自然語言,即用大量的數據通過機器學習演算法來訓練一個模型,然後通過這個模型來解決自然語言問題。輸入是數據和想要的結果,輸出是模型。

接下來簡單介紹NLP常見的任務或應用。

二.NLP能做什麼:

1.分詞

中文可以分為字、詞、短語、句子、段落、文檔這幾個層面,如果要表達一個意思,很多時候通過一個字是無法表達的一個含義的,至少一個詞才能更好表達一個含義,所以一般情況是以「詞」為基本單位,用「詞」組合來表示「短語、、句子、段落、文檔」,至於計算機的輸入是短語或句子或段落還是文檔就要看具體的場景。由於中文不像英文那樣詞與詞之間用空格隔開,計算機無法用區分一個文本有哪些詞,所以要進行分詞。目前分詞常用的方法有兩種:

(1)基於規則:Heuristic(啟發式)、關鍵字表

(2)基於機器學習/統計方法:HMM(隱馬爾科夫模型)、CRF(條件隨機場)

(註:在這里就不具體介紹方法的原理和實現過程了,大家感興趣,可以自行網路了解)

現狀分詞這項技術非常成熟了,分詞的准確率已經達到了可用的程度,也有很多第三方的庫供我們使用,比如jieba,所以一般在實際運用中我們會採用「jieba+自定義詞典」的方式進行分詞。

2.詞編碼

現在把「我喜歡你」這個文本通過分詞分成「我」、「喜歡」、「你」三個詞,此時把這三詞作為計算機的輸入,計算機是無法理解的,所以我們把這些詞轉換成計算機能理解的方式,即詞編碼,現在普遍是將詞表示為詞向量,來作為機器學習的輸入和表示空間。目前有兩種表示空間:

(1)離散表示:

A.One-hot表示

假設我們的語料庫是:

我喜歡你你對我有感覺嗎

詞典{「我」:1,「喜歡」:2,「你」:3,「對「:4,「有」:5,「感覺」:6,「嗎」:7} 。一共有七個維度。

所以用One-hot表示:

「我」  :[1, 0, 0, 0, 0, 0, 0]

「喜歡」:[0, 1, 0, 0, 0, 0, 0]

········

「嗎」  :[0, 0, 0, 0, 0, 0, 1]

即一個詞用一個維度表示

B.bag of word:即將所有詞的向量直接加和作為一個文檔的向量。

所以「我 喜歡 你」就表示為:「[1, 1, 1, 0, 0, 0, 0]」。

C. Bi-gram和N-gram(語言模型):考慮了詞的順序,用片語合表示一個詞向量。

這三種方式背後的思想是:不同的詞都代表著不同的維度,即一個「單位」(詞或片語合等)為一個維度。

(2)分布式表示:word2vec,表示一個共現矩陣向量。其背後的思想是「一個詞可以用其附近的詞來表示」。

離散式或分布式的表示空間都有它們各自的優缺點,感興趣的讀者可以自行查資料了解,在這里不闡述了。這里有一個問題,當語料庫越大時,包含的詞就越多,那詞向量的維度就越大,這樣在空間儲存和計算量都會指數增大,所以工程師在處理詞向量時,一般都會進行降維,降維就意味著部分信息會丟失,從而影響最終的效果,所以作為產品經理,跟進項目開發時,也需要了解工程師降維的合理性。

3.自動文摘

自動文摘是指在原始文本中自動摘要出關鍵的文本或知識。為什麼需要自動文摘?有兩個主要的原因:(1)信息過載,我們需要在大量的文本中抽出最有用、最有價值的文本;(2)人工摘要的成本非常高。目前自動文摘有兩種解決思路:第一種是extractive(抽取式),從原始文本中找到一些關鍵的句子,組成一篇摘要;另一種方式是abstractive(摘要式),計算機先理解原始文本的內容,再用自己的意思將其表達出來。自動文摘技術目前在新聞領域運用的最廣,在信息過載的時代,用該技術幫助用戶用最短的時間了解最多、最有價值的新聞。此外,如何在非結構的數據中提取結構化的知識也將是問答機器人的一大方向。

4.實體識別

實體識別是指在一個文本中,識別出具體特定類別的實體,例如人名、地名、數值、專有名詞等。它在信息檢索、自動問答、知識圖譜等領域運用的比較多。實體識別的目的就是告訴計算機這個詞是屬於某類實體,有助於識別出用戶意圖。比如網路的知識圖譜:

「周星馳多大了」識別出的實體是「周星馳」(明星實體),關系是「年齡」,搜索系統可以知道用戶提問的是某個明星的年齡,然後結合數據「周星馳  出生時間  1962年6月22日」以及當前日期來推算出周星馳的年齡,並把結果直接把這個結果顯示給用戶,而不是顯示候選答案的鏈接。

此外,NLP常見的任務還有:主題識別、機器翻譯、文本分類、文本生成、情感分析、關鍵字提取、文本相似度等,以後有時間再為大家做簡單介紹。

三.NLP目前存在的難點

1.語言不規范,靈活性高

自然語言並不規范,雖然可以找一些基本規則,但是自然語言太靈活了,同一個意思可以用多種方式來表達,不管是基於規則來理解自然語言還是通過機器學習來學習數據內在的特徵都顯得比較困難。

2.錯別字

在處理文本時,我們會發現有大量的錯別字,怎麼樣讓計算機理解這些錯別字想表達的真正含義,也是NLP的一大難點

3.新詞

我們處在互聯網高速發展的時代,網上每天都會產生大量的新詞,我們如何快速地發現這些新詞,並讓計算機理解也是NLP的難點

4.用詞向量來表示詞依然存在不足

上述,我們講到,我們是通過詞向量來讓計算機理解詞,但是詞向量所表示的空間,它是離散,而不是連續,比如表示一些正面的詞:好,很好,棒,厲害等,在「好」到「很好」的詞向量空間中,你是不能找到一些詞,從「好」連續到「很好」,所以它是離散、不連續的,不連續最大的問題就是不可導.計算機是處理可導的函數非常容易,不可導的話,計算量就上來了。當然現在也有一些演算法是計算詞向量做了連續近似化,但這肯定伴隨著信息的損失。總之,詞向量並不是最好的表示詞的方式,需要一種更好的數學語言來表示詞,當然可能我們人類的自然語言本身就是不連續的,或者人類無法創建出「連續」的自然語言。

小結:通過上述的內容,我們已經大概知道了「NLP是什麼、能做什麼以及目前存在的難題」。作為人工智慧產品經理,了解NLP技術能夠提高我們自己的技術理解力,在理解行業需求、推進項目開展都有非常大的幫助,其實這可以讓我們獲得是一種連接能力,將需求與工程師連接起來,將問題與解決方案連接起來。雖然NLP等人工智慧技術存在很多不足,但我們需要調整好自己的心態,人工智慧應用化才剛剛開始,必然是不夠完美的,不要成為批判者,而是成為人工智慧時代的推進者。

nt-sizf@�2W��

『伍』 自然語言處理中語料預處理的方法

語料庫清理

清洗語料庫就是保留語料庫中有用的數據,刪除噪音數據。常見的清洗方法有:手動去重、對早爛齊、刪除、貼標簽等。

以下面的文字為例。這個文本不僅包含漢字,還包含數字、英文字元、標點符號等非常規字元,這些都是無意義的信息,需要清理。

像上面這種情況,清理方法主要是通過正則表達式。可以寫一個簡短的Python腳本來求解,代碼如下:

清潔後的結果:

除了以上需要清理的形式,雜訊數據還包括文本重復、錯誤、遺漏、異常等。清理的方法有手工處理,或者通過開發小工具,寫個小程序,都可以清理數據。

分詞

清理完數據,就可以進行下一步了:文本分割。文本分割,即將文本分割成單詞。常用的分詞方法有基於規則和基於統計的分詞方法,統計樣本內容來自一些標准語譽塵料庫。

比如這句話:「小明住在朝陽區」,我們期望語料庫統計後的分詞結果是「小明住在朝陽區」,而不是「小明住在朝陽區」。那麼你是如何做到這一點的呢?

從統計學的角度來說,可以用條件概率分布來解決。對於一個新句子,通過計算各種分詞方法的聯合分布概率,找到最大概率對應的分詞方法,就是最好的分詞。

到目前為止,研究人員已經開發了許多實用的分詞工具,使用起來非常簡單。如果對分慶睜禪詞沒有特殊要求,可以直接使用這些分詞工具。

各種分詞工具的列表。

詞性標注

詞性標注是指在切分結果中標注每個詞的正確詞性,即確定每個詞是名詞、動詞、形容詞還是其他詞性的過程。

詞性標注有很多重要的功能。

第一,消歧。有些詞在不同的上下文或用法中有不同的意思。比如「這只狗的名字叫開心」和「我今天很開心」這兩句話里,「開心」就有不同的意思。我們可以通過詞性標注來區分它們。

第二,強化以詞為基礎的特徵。以上面這句話為例。如果不進行詞性標注,會將兩個「開心」字視為詞頻為2的同義詞,導致後續分析出錯。

此外,詞性標注具有標准化、詞形還原和有效去除停用詞的功能。

常用的詞性標注方法包括基於規則和統計的演算法,如最大熵詞性標注和HMM詞性標注。

接下來,我們來看一個詞性標注的例子。你也可以自己試試:http://ictclas.nlpir.org/nlpir/

去阻止文字。

我們在接受新聞的時候,會過濾掉無效的信息,篩選出有用的信息。對於自然語言來說,去停詞是一種明智的操作。

一篇課文,無論是中文還是英文,都有連詞、虛詞、語氣詞等無意義詞,如「的」、「把」、「但是」等。這些詞沒有特定的含義,只是用來連接句子和增強語氣。這些詞對文本分析也沒有幫助,所以我們需要對切分後的數據做停用詞處理。

但是我們應該仔細決定刪除哪種停用詞。

下圖列出了一些常用的非索引字表。您可以根據需要選擇要刪除的停用字詞。

詞頻統計

詞頻統計是統計分詞後的文本的詞頻。目的是找出對文本影響最大的詞,是文本挖掘的重要手段。統計這些詞的出現頻率,可以幫助我們理解文章所強調的內容,進而方便後續的模型構建。

例如,我們可以統計四大古典小說之一的《紅樓夢》中的前28個詞,結果如下:

從上圖可以看出,《紅樓夢》中哪個人物的篇幅最多,曹雪芹更關注哪個人物。即使我們不是紅學專家,也能從統計的詞頻中分析出一些關鍵信息。

『陸』 NLP基礎知識和綜述

一種流行的自然語言處理庫、自帶語料庫、具有分類,分詞等很多功能,國外使用者居多,類似中文的jieba處理庫

為單詞序列分配概率的模型就叫做語言模型。

通俗來說, 語言模型就是這樣一個模型:對於任意的詞序列,它能夠計算出這個序列是一句話的概率。或者說語言模型能預測單詞序列的下一個詞是什麼。

** n-gram Language Models **

N-gram模型是一種典型的統計語言模型(Language Model,LM),統計語言模型是一個基於概率的判別模型.統計語言模型把語言(詞的序列)看作一個隨機事件,並賦予相應的概率來描述其屬於某種語言集合的可能性。給定一個詞彙集合 V,對於一個由 V 中的詞構成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,統計語言模型賦予這個序列一個概率P(S),來衡量S 符合自然語言的語法和語義規則的置信度。用一句簡單的話說,統計語言模型就是計算一個句子的概率大小的這種模型。

n-gram模型可以減輕單詞序列沒有在訓練集中出現過而引起的問題,即數據稀疏問題

n-gram模型問題
對於n-gram模型的問題,這兩頁ppt說的很明白

N-gram模型基於這樣一種假設,當前詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。這些概率可以通過直接從語料中統計N個詞同時出現的次數得到。常用的是二元的Bi-Gram(N=2)和三元的Tri-Gram(N=3).Bi-Gram所滿足的假設是馬爾科夫假設。

一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分別用公式表示如下:

Bi-Gram:P(T)=p(w1|begin) p(w2|w1) p(w3|w2)***p(wn|wn-1)

Tri-Gram:P(T)=p(w1|begin1,begin2) p(w2|w1,begin1) p(w3|w2w1)***p(wn|wn-1,wn-2)

注意上面概率的計算方法:P(w1|begin)=以w1為開頭的所有句子/句子總數;p(w2|w1)=w1,w2同時出現的次數/w1出現的次數。以此類推。

對於其中每項的計算舉個例子:

由上可見Bi-Gram計算公式中的begin一般都是加個<s>標簽。

N-gram存在的問題:

舉一個小數量的例子進行輔助說明:假設我們有一個語料庫(注意語料庫),如下:

老鼠真討厭,老鼠真丑,你愛老婆,我討厭老鼠。

想要預測「我愛老」這一句話的下一個字。我們分別通過 bigram 和 trigram 進行預測。

1)通過 bigram,便是要對 P(w|老)進行計算,經統計,「老鼠」出現了3次,「老婆」出現了1次,通過最大似然估計可以求得P(鼠|老)=0.75,P(婆|老)=0.25, 因此我們通過 bigram 預測出的整句話為: 我愛老鼠。

2)通過 trigram,便是要對便是要對 P(w|愛老)進行計算,經統計,僅「愛老婆」出現了1次,通過最大似然估計可以求得 P(婆|愛 老)=1,因此我們通過trigram 預測出的整句話為: 我愛老婆。顯然這種方式預測出的結果更加合理。

問題一:隨著 n 的提升,我們擁有了更多的前置信息量,可以更加准確地預測下一個詞。但這也帶來了一個問題,當N過大時很容易出現這樣的狀況:某些n-gram從未出現過, 導致很多預測概率結果為0, 這就是稀疏問題。 實際使用中往往僅使用 bigram 或 trigram 。(這個問題可以通過平滑來緩解參考: https://mp.weixin.qq.com/s/NvwB9H71JUivFyL_Or_ENA )

問題二:同時由於上個稀疏問題還導致N-gram無法獲得上下文的長時依賴。

問題三:n-gram 基於頻次進行統計,沒有足夠的泛化能力。

n-gram總結:統計語言模型就是計算一個句子的概率值大小,整句的概率就是各個詞出現概率的乘積,概率值越大表明該句子越合理。N-gram是典型的統計語言模型,它做出了一種假設,當前詞的出現只與前面N-1個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現概率的乘積。它其中存在很多問題,再求每一個詞出現的概率時,隨著N的提升,能夠擁有更多的前置信息量,可以使得當前詞的預測更加准確,但是當N過大時會出現稀疏問題,導致很多詞的概率值為0,為解決這一問題,因此常用的為bigram 或 trigram,這就導致N-gram無法獲得上文的長時依賴。另一方面N-gram 只是基於頻次進行統計,沒有足夠的泛化能力。

神經網路語言模型

2003年 Bengio 提出,神經網路語言模型( neural network language model, NNLM)的思想是提出詞向量的概念,代替 ngram 使用離散變數(高維),採用連續變數(具有一定維度的實數向量)來進行單詞的分布式表示,解決了維度爆炸的問題,同時通過詞向量可獲取詞之間的相似性。

結合下圖可知它所建立的語言模型的任務是根據窗口大小內的上文來預測下一個詞,因此從另一個角度看它就是一個使用神經網路編碼的n-gram模型。

它是一個最簡單的神經網路,僅由四層構成,輸入層、嵌入層、隱藏層、輸出層。(從另一個角度看它就是一個使用神經網路編碼的n-gram模型)

輸入是單詞序列的index序列,例如單詞『這』在字典(大小為∣V∣)中的index是10,單詞『是』的 index 是23,『測』的 index 是65,則句子「這是測試」通過『這是測』預測『試』,窗口大小內上文詞的index序列就是 10, 23, 65。嵌入層(Embedding)是一個大小為∣V∣×K的矩陣(注意:K的大小是自己設定的,這個矩陣相當於隨機初始化的詞向量,會在bp中進行更新,神經網路訓練完成之後這一部分就是詞向量),從中取出第10、23、65行向量拼成3×K的矩陣就是Embedding層的輸出了。隱層接受拼接後的Embedding層輸出作為輸入,以tanh為激活函數,最後送入帶softmax的輸出層,輸出概率,優化的目標是使得待預測詞其所對應的softmax值最大。

缺點:因為這是通過前饋神經網路來訓練語言模型,缺點顯而易見就是其中的參數過多計算量較大,同時softmax那部分計算量也過大。另一方面NNLM直觀上看就是使用神經網路編碼的 n-gram 模型,也無法解決長期依賴的問題。

RNNLM

它是通過RNN及其變種網路來訓練語言模型,任務是通過上文來預測下一個詞,它相比於NNLM的優勢在於所使用的為RNN,RNN在處理序列數據方面具有天然優勢, RNN 網路打破了上下文窗口的限制,使用隱藏層的狀態概括歷史全部語境信息,對比 NNLM 可以捕獲更長的依賴,在實驗中取得了更好的效果。RNNLM 超參數少,通用性更強;但由於 RNN 存在梯度彌散問題,使得其很難捕獲更長距離的依賴信息。

Word2vec中的CBOW 以及skip-gram,其中CBOW是通過窗口大小內的上下文預測中心詞,而skip-gram恰恰相反,是通過輸入的中心詞預測窗口大小內的上下文。

Glove 是屬於統計語言模型,通過統計學知識來訓練詞向量

ELMO 通過使用多層雙向的LSTM(一般都是使用兩層)來訓練語言模型,任務是利用上下文來預測當前詞,上文信息通過正向的LSTM獲得,下文信息通過反向的LSTM獲得,這種雙向是一種弱雙向性,因此獲得的不是真正的上下文信息。

GPT是通過Transformer來訓練語言模型,它所訓練的語言模型是單向的,通過上文來預測下一個單詞

BERT通過Transformer來訓練MLM這種真正意義上的雙向的語言模型,它所訓練的語言模型是根據上下文來預測當前詞。

以上部分的詳細介紹在NLP之預訓練篇中有講到

語言模型的評判指標

具體參考: https://blog.csdn.net/index20001/article/details/78884646

Perplexity可以認為是average branch factor(平均分支系數),即預測下一個詞時可以有多少種選擇。別人在作報告時說模型的PPL下降到90,可以直觀地理解為,在模型生成一句話時下一個詞有90個合理選擇,可選詞數越少,我們大致認為模型越准確。這樣也能解釋,為什麼PPL越小,模型越好。
一般用困惑度Perplexity(PPL)衡量語言模型的好壞,困惑度越小則模型生成一句話時下一個詞的可選擇性越少,句子越確定則語言模型越好。

簡單介紹
Word2vec是一種有效創建詞嵌入的方法,它自2013年以來就一直存在。但除了作為詞嵌入的方法之外,它的一些概念已經被證明可以有效地創建推薦引擎和理解時序數據。在商業的、非語言的任務中。

背景
由於任何兩個不同詞的one-hot向量的餘弦相似度都為0,多個不同詞之間的相似度難以通過onehot向量准確地體現出來。
word2vec⼯具的提出正是為了解決上⾯這個問題。它將每個詞表⽰成⼀個定⻓的向量,並使得這些向量能較好地表達不同詞之間的相似和類⽐關系。

word2vec模型
word2vec⼯具包含了兩個模型,即跳字模型(skip-gram)和連續詞袋模型(continuous bag of words,CBOW)。word2vec的input/output都是將單詞作為one-hot向量來表示,我們可以把word2vec認為是詞的無監督學習的降維過程。

MaxEnt 模型(最大熵模型): 可以使用任意的復雜相關特徵,在性能上最大熵分類器超過了 Byaes 分類器。但是,作為一種分類器模型,這兩種方法有一個共同的缺點:每個詞都是單獨進行分類的,標記(隱狀態)之間的關系無法得到充分利用,具有馬爾可夫鏈的 HMM 模型可以建立標記之間的馬爾可夫關聯性,這是最大熵模型所沒有的。

最大熵模型的優點:首先,最大熵統計模型獲得的是所有滿足約束條件的模型中信息熵極大的模型;其次,最大熵統計模型可以靈活地設置約束條件,通過約束條件的多少可以調節模型對未知數據的適應度和對已知數據的擬合程度;再次,它還能自然地解決統計模型中參數平滑的問題。

最大熵模型的不足:首先,最大熵統計模型中二值化特徵只是記錄特徵的出現是否,而文本分類需要知道特徵的強度,因此,它在分類方法中不是最優的;其次,由於演算法收斂的速度較慢,所以導致最大熵統計模型它的計算代價較大,時空開銷大;再次,數據稀疏問題比較嚴重。

CRF(conditional random field) 模型(條件隨機場模型):首先,CRF 在給定了觀察序列的情況下,對整個的序列的聯合概率有一個統一的指數模型。一個比較吸引人的特性是其為一個凸優化問題。其次,條件隨機場模型相比改進的隱馬爾可夫模型可以更好更多的利用待識別文本中所提供的上下文信息以得更好的實驗結果。並且有測試結果表明:在採用相同特徵集合的條件下,條件隨機域模型較其他概率模型有更好的性能表現。

CRF 可以用於構造在給定一組輸入隨機變數的條件下,另一組輸出隨機變數的條件概率分布模型。經常被用於序列標注,其中包括詞性標注,分詞,命名實體識別等領域。

建一個條件隨機場,我們首先要定義一個特徵函數集,每個特徵函數都以整個句子s,當前位置i,位置i和i-1的標簽為輸入。然後為每一個特徵函數賦予一個權重,然後針對每一個標注序列l,對所有的特徵函數加權求和,必要的話,可以把求和的值轉化為一個概率值。

CRF 具有很強的推理能力,並且能夠使用復雜、有重疊性和非獨立的特徵進行訓練和推理,能夠充分地利用上下文信息作為特徵,還可以任意地添加其他外部特徵,使得模型能夠 獲取的信息非常豐富。

CRF 模型的不足:首先,通過對基於 CRF 的結合多種特徵的方法識別英語命名實體的分析,發現在使用 CRF 方法的過程中,特徵的選擇和優化是影響結果的關鍵因素,特徵選擇問題的好與壞,直接決定了系統性能的高低。其次,訓練模型的時間比 MaxEnt 更長,且獲得的模型很大,在一般的 PC 機上無法運行。

潛在語義分析(Latent Semantic Analysis,LSA)模型
在潛在語義分析(LSA)模型首先給出了這樣一個 『『分布式假設」 :一個 單詞的屬性是由它所處的環境刻畫的。這也就意味著如果兩個單詞在含義上比較接近,那麼它們也會出現在相似的文本中,也就是說具有相似的上下文。
LSA模型在構建好了單詞-文檔矩陣之後,出於以下幾種可能的原因,我們會使用奇異值分解(Singular Value Decomposition,SVD) 的方法來尋找該矩陣的一個低階近似。

概率潛在語義分析(Probability Latent Semantic Analysis ,PLSA)模型
概率潛在語義分析(PLSA)模型其實是為了克服潛在語義分析(LSA)模型存在的一些缺點而被提出的。LSA 的一個根本問題在於,盡管我們可以把 U k 和 V k 的每一列都看成是一個話題,但是由於每一列的值都可以看成是幾乎沒有限制的實數值,因此我們無法去進一步解釋這些值到底是什麼意思,也更無法從概率的角度來理解這個模型。
PLSA模型則通過一個生成模型來為LSA賦予了概率意義上的解釋。該模型假設,每一篇文檔都包含一系列可能的潛在話題,文檔中的每一個單詞都不是憑空產生的,而是在這些潛在的話題的指引下通過一定的概率生成的。

在 PLSA 模型裡面,話題其實是一種單詞上的概率分布,每一個話題都代表著一個不同的單詞上的概率分布,而每個文檔又可以看成是話題上的概率分布。每篇文檔就是通過這樣一個兩層的概率分布生成的,這也正是PLSA 提出的生成模型的核心思想。

PLSA 通過下面這個式子對d和 w 的聯合分布進行了建模:

該模型中的 *z * 的數量是需要事先給定的一個超參數。需要注意的是,上面這 個式子裡面給出了 P (w, d ) 的兩種表達方式,在前一個式子里, *d * 和 w 都是在給定 *z * 的前提下通過條件概率生成出來的,它們的生成方式是相似的,因此是 『『對稱』』 的;在後一個式子里,首先給定 d ,然後根據 P ( z | d ) 生成可能的話題 z ,然後再根據 P (w| z ) 生成可能的單詞 w,由於在這個式子裡面單詞和文檔的生成並不相似, 所以是 『『非對稱』』 的。

上圖給出了 PLSA 模型中非對稱形式的 Plate Notation表示法。其中d表示 一篇文檔,z 表示由文檔生成的一個話題,w 表示由話題生成的一個單詞。 在這個模型中, d和w 是已經觀測到的變數,而z是未知的變數(代表潛在的話題)。

容易發現,對於一個新的文檔而言,我們無法得知它對應的 P ( d ) 究竟是什麼, 因此盡管 PLSA 模型在給定的文檔上是一個生成模型,它卻無法生成新的未知的文檔。該模型的另外的一個問題在於,隨著文檔數量的增加, P ( z | d ) 的參數也會隨著線性增加,這就導致無論有多少訓練數據,都容易導致模型的過擬合問題。這兩點成為了限制 PLSA 模型被更加廣泛使用的兩大缺陷。

潛在狄利克雷分配(Latent Dirichlet Analysis , LDA)模型

為了解決 PLSA 模型中出現的過擬合問題,潛在狄利克雷分配(LDA)模型被 Blei 等人提出,這個模型也成為了主題模型這個研究領域內應用最為廣泛的模 型。LDA就是在PLSA的基礎上加層貝葉斯框架,即LDA就是PLSA的貝葉斯版本(正因為LDA被貝葉斯化了,所以才需要考慮歷史先驗知識,才加的兩個先驗參數)。

從上一節我們可以看到,在 PLSA 這個模型里,對於一個未知的新文檔 d ,我們對於 P ( d ) 一無所知,而這個其實是不符合人的經驗的。或者說,它沒有去使用本來可以用到的信息,而這部分信息就是 LDA 中所謂的先驗信息。

具體來說,在 LDA 中,首先每一個文檔都被看成跟有限個給定話題中的每一個存在著或多或少的關聯性,而這種關聯性則是用話題上的概率分布來刻畫的, 這一點與 PLSA 其實是一致的。

但是在 LDA 模型中,每個文檔關於話題的概率分布都被賦予了一個先驗分布,這個先驗一般是用稀疏形式的狄利克雷分布表示的。 這種稀疏形式的狄利克雷先驗可以看成是編碼了人類的這樣一種先驗知識:一般而言,一篇文章的主題更有可能是集中於少數幾個話題上,而很少說在單獨一篇文章內同時在很多話題上都有所涉獵並且沒有明顯的重點。

此外,LDA 模型還對一個話題在所有單詞上的概率分布也賦予了一個稀疏形式的狄利克雷先驗,它的直觀解釋也是類似的:在一個單獨的話題中,多數情況是少部分(跟這個話題高度相關的)詞出現的頻率會很高,而其他的詞出現的頻率則明顯較低。這樣兩種先驗使得 LDA 模型能夠比 PLSA 更好地刻畫文檔-話題-單詞這三者的關系。

事實上,從 PLSA 的結果上來看,它實際上相當於把 LDA 模型中的先驗分布轉變為均勻分布,然後對所要求的參數求最大後驗估計(在先驗是均勻分布的前提下,這也等價於求參數的最大似然估計) ,而這也正反映出了一個較為合理的先驗對於建模是非常重要的。

分詞就是將連續的字序列按照一定的規范重新組合成詞序列的過程。
現有的分詞演算法可分為三大類:基於字元串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。
按照是否與詞性標注過程相結合,又可以分為單純分詞方法和分詞與標注相結合的一體化方法。

中文分詞根據實現原理和特點,主要分為以下2個類別:

(1)基於詞典分詞演算法
也稱字元串匹配分詞演算法。該演算法是按照一定的策略將待匹配的字元串和一個已建立好的「充分大的」詞典中的詞進行匹配,若找到某個詞條,則說明匹配成功,識別了該詞。常見的基於詞典的分詞演算法分為以下幾種:正向最大匹配法、逆向最大匹配法和雙向匹配分詞法等。
基於詞典的分詞演算法是應用最廣泛、分詞速度最快的。很長一段時間內研究者都在對基於字元串匹配方法進行優化,比如最大長度設定、字元串存儲和查找方式以及對於詞表的組織結構,比如採用TRIE索引樹、哈希索引等。

(2)基於統計的機器學習演算法
這類目前常用的是演算法是HMM、CRF(條件隨機場)、SVM、深度學習等演算法,比如stanford、Hanlp分詞工具是基於CRF演算法。以CRF為例,基本思路是對漢字進行標注訓練,不僅考慮了詞語出現的頻率,還考慮上下文,具備較好的學習能力,因此其對歧義詞和未登錄詞的識別都具有良好的效果。

常見的分詞器都是使用機器學習演算法和詞典相結合,一方面能夠提高分詞准確率,另一方面能夠改善領域適應性。

隨著深度學習的興起,也出現了 基於神經網路的分詞器 ,例如有人員嘗試使用雙向LSTM+CRF實現分詞器, 其本質上是序列標注 ,所以有通用性,命名實體識別等都可以使用該模型,據報道其分詞器字元准確率可高達97.5%。演算法框架的思路與論文《Neural Architectures for Named Entity Recognition》類似,利用該框架可以實現中文分詞,如下圖所示:

首先對語料進行字元嵌入,將得到的特徵輸入給雙向LSTM,然後加一個CRF就得到標注結果。

目前中文分詞難點主要有三個:
1、分詞標准 :比如人名,在哈工大的標准中姓和名是分開的,但在Hanlp中是合在一起的。這需要根據不同的需求制定不同的分詞標准。

2、歧義 :對同一個待切分字元串存在多個分詞結果。
歧義又分為組合型歧義、交集型歧義和真歧義三種類型。

一般在搜索引擎中,構建索引時和查詢時會使用不同的分詞演算法。常用的方案是,在索引的時候使用細粒度的分詞以保證召回,在查詢的時候使用粗粒度的分詞以保證精度。

3、新詞 :也稱未被詞典收錄的詞,該問題的解決依賴於人們對分詞技術和漢語語言結構的進一步認識。

典型的文本分類過程可以分為三個步驟:
1. 文本表示(Text Representation)
這一過程的目的是把文本表示成分類器能夠處理的形式。最常用的方法是向量空間模型,即把文本集表示成詞-文檔矩陣,矩陣中每個元素代表了一個詞在相應文檔中的權重。選取哪些詞來代表一個文本,這個過程稱為特徵選擇。常見的特徵選擇方法有文檔頻率、信息增益、互信息、期望交叉熵等等。為了降低分類過程中的計算量,常常還需要進行降維處理,比如LSI。
2. 分類器構建(Classifier Construction)
這一步驟的目的是選擇或設計構建分類器的方法。不同的方法有各自的優缺點和適用條件,要根據問題的特點來選擇一個分類器。我們會在後面專門講述常用的方法。選定方法之後,在訓練集上為每個類別構建分類器,然後把分類器應用於測試集上,得到分類結果。
3. 效果評估(Classifier Evaluation)
在分類過程完成之後,需要對分類效果進行評估。評估過程應用於測試集(而不是訓練集)上的文本分類結果,常用的評估標准由IR領域繼承而來,包括查全率、查准率、F1值等等。

1. Rocchio方法
每一類確定一個中心點(centroid),計算待分類的文檔與各類代表元間的距離,並作為判定是否屬於該類的判據。Rocchio方法的特點是容易實現,效率高。缺點是受文本集分布的影響,比如計算出的中心點可能落在相應的類別之外。

2. 樸素貝葉斯(naïve bayes)方法
將概率論模型應用於文檔自動分類,是一種簡單有效的分類方法。使用貝葉斯公式,通過先驗概率和類別的條件概率來估計文檔對某一類別的後驗概率,以此實現對此文檔所屬類別的判斷。

3. K近鄰(K-Nearest Neightbers, KNN)方法
從訓練集中找出與待分類文檔最近的k個鄰居(文檔),根據這k個鄰居的類別來決定待分類文檔的類別。KNN方法的優點是不需要特徵選取和訓練,很容易處理類別數目多的情況,缺點之一是空間復雜度高。KNN方法得到的分類器是非線性分類器。

4. 支持向量機(SVM)方法
對於某個類別,找出一個分類面,使得這個類別的正例和反例落在這個分類面的兩側,而且這個分類面滿足:到最近的正例和反例的距離相等,而且是所有分類面中與正例(或反例)距離最大的一個分類面。SVM方法的優點是使用很少的訓練集,計算量小;缺點是太依賴於分類面附近的正例和反例的位置,具有較大的偏執。

文本聚類過程可以分為3個步驟:
1. 文本表示(Text Representation)
把文檔表示成聚類演算法可以處理的形式。所採用的技術請參見文本分類部分。
2. 聚類演算法選擇或設計(Clustering Algorithms)
演算法的選擇,往往伴隨著相似度計算方法的選擇。在文本挖掘中,最常用的相似度計算方法是餘弦相似度。聚類演算法有很多種,但是沒有一個通用的演算法可以解決所有的聚類問題。因此,需要認真研究要解決的問題的特點,以選擇合適的演算法。後面會有對各種文本聚類演算法的介紹。
3. 聚類評估(Clustering Evaluation)
選擇人工已經分好類或者做好標記的文檔集合作為測試集合,聚類結束後,將聚類結果與已有的人工分類結果進行比較。常用評測指標也是查全率、查准率及F1值。

1.層次聚類方法
層次聚類可以分為兩種:凝聚(agglomerative)層次聚類和劃分(divisive)層次聚類。凝聚方法把每個文本作為一個初始簇,經過不斷的合並過程,最後成為一個簇。劃分方法的過程正好與之相反。層次聚類可以得到層次化的聚類結果,但是計算復雜度比較高,不能處理大量的文檔。

2.劃分方法
k-means演算法是最常見的劃分方法。給定簇的個數k,選定k個文本分別作為k個初始簇,將其他的文本加入最近的簇中,並更新簇的中心點,然後再根據新的中心點對文本重新劃分;當簇不再變化時或經過一定次數的迭代之後,演算法停止。k-means演算法復雜度低,而且容易實現,但是對例外和雜訊文本比較敏感。另外一個問題是,沒有一個好的辦法確定k的取值。

3.基於密度的方法
為了發現任意形狀的聚類結果,提出了基於密度的方法。這類方法將簇看作是數據空間中被低密度區域分割開的高密度區域。常見的基於密度的方法有DBSCAN, OPTICS, DENCLUE等等。

4.神經網路方法
神經網路方法將每個簇描述為一個標本,標本作為聚類的"原型",不一定對應一個特定的數據,根據某些距離度量,新的對象被分配到與其最相似的簇中。比較著名的神經網路聚類演算法有:競爭學習(competitive learing)和自組織特徵映射(self-organizing map)[Kohonen, 1990]。神經網路的聚類方法需要較長的處理時間和復雜的數據復雜性,所以不適用於大型數據的聚類。

『柒』 nlp演算法是什麼

nlp演算法是自然語言處理。

自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智慧領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數學於一體的科學。

相關信息:

自然語言處理是指利用人類交流所使用的自然語言與機器進行交互通訊的技術。通過人為的對自然語言的處理,使得計算機對其能夠可讀並理解。自然語言處理的相關研究始於人類對機器翻譯的探索。

雖然自然語言處理涉及語音、語法、語義、語用等多維度的操作,但簡單而言,自然語言處理的基本任務是基於本體詞典、詞頻統計、上下文語義分析等方式對待處理語料進行分詞,形成以最小詞性為單位,且富含語義的詞項單元。

閱讀全文

與自然語言最常用的演算法相關的資料

熱點內容
蜜源app是什麼時候創立的 瀏覽:704
計算機專業學51單片機 瀏覽:208
程序員不接受反駁 瀏覽:294
微軟自帶的壓縮軟體 瀏覽:286
中國玩家在日本伺服器做什麼 瀏覽:48
12864和單片機 瀏覽:898
25匹空調壓縮機 瀏覽:649
adkandroid下載 瀏覽:308
如何在蘋果電腦上裝python 瀏覽:327
哪個app的跑步訓練內容最豐富 瀏覽:583
廣訊通怎麼刪除文件夾 瀏覽:206
解壓的視頻化妝品 瀏覽:674
易語言新進程監視源碼 瀏覽:941
turbo碼解碼演算法 瀏覽:956
stc11f16xe單片機 瀏覽:282
linuxupdate命令行 瀏覽:578
pdf轉化成wps 瀏覽:765
php拋出錯誤 瀏覽:159
買車看車用什麼app 瀏覽:656
dos怎麼清除屏幕上的命令 瀏覽:813