1. 自然語言處理(NLP)知識整理及概述(一)
這是我在留學期間選修的課程 :natura language process。 這篇文章主要是為了大致的梳理這門課上的知識點,方便日後復習。因此,語言處理的主體對象是English。
簡單來說,語言模型就是一個對於不同單詞出現概率的統計。
然而,對於英語來說,每個單詞可能有不同的時態和單復數等形態變化。因此,在做統計前,需要先對原始數據進行預處理和歸一化。
分割句子後,每句話應該作為一個元素單獨存儲。
一般來說,常用的是 unigram, bigram 和trigram, 即以1-3 個詞作為一個對象來統計。n 越大, 統計結果也越稀疏。一個七八個詞的組合重復出現的概率,顯然遠低於2-3個詞的組合。 另一方面,根據馬爾科夫鏈, 一個單詞的出現,可以認為僅跟前一個詞有關系,所以也沒有太大必要追求過大的n。
n-gram 是一個重要的基礎概念, 它所提供的概率分析可以做到很多事情, 例如機器翻譯「請給我打電話」:P(「please call me」) > P("please call I ")。 又比如拼寫糾正:基於概率, 「its 5pm now」 → 糾正為 「it's 5pm now」
沒有比較就沒有傷害。 對於語言模型的評估, 也需要有一個比較的對象。因此,要用兩種方法建立不同的語言模型(當然也可以對比前人的工作成果)。顯然,任意給一個測試用的句子,如果在某一模型中的出現概率都比較大,那麼這個模型顯然更好。 具體來說, 評估方法有兩種:
首個單詞問題 :對於一個基於bigram或trigram的模型,在計算一個句子的perplexity時,前1或2個單詞需要不能直接得到,依賴於句子開頭的標識符。也即是說,在訓脊塌租練 n-gram 模型時, 對於每個句子,分別在開頭和結尾填充n-1個<s>。從而保證在計算perplexity的時候能夠正確地從第一個單詞開始計算。這也是為什麼前面 sentence segmentation 的時候要將句子區別存儲的原因。
顯然,無論用來生成LM的corpus多麼龐大,總會有些單詞沒有被包含其中(稱為out of vocabulary, OOV)。 解決方法有兩種, 一是實現設定一個固定的字典,在訓練LM過程中,所有不在字典中的單詞統一轉換成 token <UNK>, 另一種是將LM中出現頻率小於n次的單詞當作 <UNK>,剩下的作為字典。 根據字典對測試數據做相同操作,就可以避免OOV的問題。
在處理完OOV問題後,還有一個問題需要處理:所有單詞都在字典中,但是單詞的組合並沒有在LM中出現這一情況。 此時就需要對基於bigram或trigram的LM進行smooth操作,規避這一問題。Smoothing過程有1點需要注意,就是smooth之後的模型,其所有概率加起來,必須仍然為1。常見的smoothing方法有:
特別的,工程上最適合的應該是 stupid backoff algorithm, 這一演算法並不確保整體概率為1。僅僅是在回退時乘以系數0.4計櫻兆算。即如果trigram沒有找到,就使用0.4×P(bigram), 如果bigram還是沒找到, 就是要 0.4×0.4×P(unigram)。由於OOV問題已解決,所以對於任意一個詞,必然能計算出其概衫手率。
相關閱讀: Large Language Models in Machine Translation
2. nlp全稱是什麼
nlp是自然語言處理。
自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智慧領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。
自然語言處理是一門融語言學、計算機科學、數學於一體的科學。因此,這一領域的研究將涉及自然語言,即人們日常使用的語言,所以它與語言學的研究有著密切的聯系,但又有重要的區別。
自然語言處理的特點:
自然語言處理以語言為對象,利用計算機技術來分析、理解和處理自然語言的一門學科,即把計算機作為語言研究的強大工具,在仿粗計算機的支持下對語言鉛大慎信息進行定量化的研究,並提供可供人與計算機之間能共同使用的語言描寫。
包括自然語言理解和自然語言生成兩部分。它是典型邊緣交叉學科,涉及到語言科學、槐敬計算機科學、數學、認知學、邏輯學等,關注計算機和人類(自然)語言之間的相互作用的領域。
3. nlp演算法是什麼
nlp演算法是自然語言處理。
自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智慧領域中的一個重要方向。
它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數學於一體的科學。
nlp演算法發展:
在一般情況下,用戶可能不熟悉機器語言,所以自然語言處理技術可以幫助這樣的用戶使用自然語言和機器交流。從建模的角度看,為了方便計算機處理,自然語言可以被定義為一組規則或符號的集合,我們組合集合中的符號來傳遞各種信息。
這些年,NLP研究取得了長足的進步,逐漸發展成為一門獨立的學科,從自然語言的角度出發,NLP基本可以分為兩個部分:自然語言處理以及自然語言生成,演化為理解和生成文本的任務。
4. 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��
5. 誰比較了解語音技術這塊大家天天在說NLP,究竟什麼是NLP
NLP 翻譯成中文肆悄態就是自然語言處理,所有和自然語言相關的處理演算法包括文本語音的演算法都是屬於 NLP 的范疇。可能大家熟悉的像 ASR 語音識別、 TTS 語音合成這種演算法都是屬於廣義的 NLP 。過去幾年大家只把文本理解叫成 NLP ,但是它是比較狹義的一個概念。
電話機器人這一塊現在我們的產品做得還是挺好的。但是距離真正的真人客服還是有一定的差距。所以我們演算法就是希望能夠讓機器人越來越擬人,像真人。其實說到最終的理想狀態,我希望機器人能做得比人更好。
可以舉一個例子,我們正常人打電話的過程中,說完一句話之後,它有一些線路的傳輸延時,可能你在七八百毫秒之後甚至一秒鍾之後才能聽到我現在裂源說的內容。包括如果信號不太好,你可能聽到是斷斷續續的,可能就聽到幾個詞但不是一句完整的話。對於一些普通人可能就不理解什麼意思,但我們通過一些機器演算法的運液方法,是可以把它真正的意思還原出來的。如果能做到這一步的話,其實我們機器人就會比真人理解能力更強。參考下網路也查得到的
6. 自然語言處理(NLP)入門
NLP:計算機或系統真正理解人類語言並以與人類相同的方式處理它的陸升能力。
難度:理解話中的潛在意圖;理解句子中的歧義。
歧義包括:單詞、句子、語義中歧義。
在文本數據上執行的一些基本操作
正則表達式:對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個「規則字元串」,這個「規則字元串」用來表達對羨沒字元串的一種過濾邏輯。
給定一個正則表達式和另一個字元串,我們可以達到如下的目的:
1. 給定的字元串是否符合正則表達式的過濾邏輯(稱作「匹配」)
2. 可以通過正則表達式,從字元串中獲取我們想要的特定部分。
可以讀取一個文本文件並根據需要將其轉化為一列單詞或句子。
方式:
1、將一個單詞替換為另一個單詞;
2、刪除或添加某些特定類型的單詞;
...
可以通過urllib包獲取。
停止詞:索引擎會忽略的常用詞。例如:the
是SciKit-Learn庫的一個工具,可以接收任何大量的文本,將每個獨特的單詞作為特徵返回,並計算每個單詞在文本中出現的 次數。
TF:術語頻率。特定單詞的計數與文檔中單詞總數的比率。
IDF:反向文檔頻率。文檔總數與包含特定單詞的文檔數量的對數比率。
TF-IDF權重:二者的乘積。
作用: 衡量一個詞對於一段文本的重要性
例如,文本可以被分為正面和負面。通調取TExtBlob包可以獲取許多這樣的架構。
神經網路的基本結構
基本原理:人工神經元或感知器的基本元素的集合。
採用多個二元輸入x1, x2, x3....,如果總和大於激活電位,則產生單個二進制輸出,神經元會執行稱為"發射"的指令,發射的神經元沿著信號傳遞到與其他樹突相連的神經元,如果超過了激活電位,其他神經元也會發射。
神經網路的類型
前饋神經網路:神經網路家族的基本單元
循環神經網路:處理 NLP 中普遍存在的動態輸入序列的一個最佳的技術方案。但是很快被經典的LSTM取代
卷積神經網路:應用於文本的卷積神經網路只在兩個維度上工作,其中濾波器(卷積核)只需要沿著時間維度移動。卷積也可以用來 加速 LSTM。
遞歸神經網路:將句子視為樹而不是序列
詞嵌入:利用所有個體單詞 相鄰 的單詞,使用給定文本中的信息並將其傳遞給模型。這使得嵌入以密集向量的形式存在,在連續向量空間中表示個體單詞的投影。 即將「不可計算」「非結構化」的詞轉化為「可計算」「結構化」的向量。
這一步解決的是」將現實問題轉化為數學問題「 ,是人工智慧非常關鍵的一步。
嵌入:單詞在新學習的向量空間中的 坐標
詞嵌入是無監督學習領域最重要的應用之一
2 神經語言模型
Bengio提出的前饋神經網路語言模型(FNNLM)引入了前饋神經網路,是為詞嵌入模型奠定了基礎。
該模型中仍然用於詞嵌入模型的部分有:
1、 嵌入層:
作用:記錄訓練數據集中所有單詞的表示。
初始化:由一組隨機權重初始化
組成:詞彙表的大小,詞嵌入向量輸出的大小、模型輸入序列的長度
結果輸出:二維向量,包含給定單詞序列中所有單詞的最終嵌入
2、隱藏層:
位置:位於初始層到最終層之間,可以一個或多個
作用:通過將神經網路中的 非線性函數 應用於先前n個詞的詞嵌入,來產生 輸入文本數據的表示 。
3、Softmax層:
位置早派老:神經網路體系結構的最後一層
作用:返回輸入詞彙表中存在的所用單詞的 概率分布
該模型有助於實現當前詞彙表中不存在的單詞的泛化。
Word2vec 是 Word Embedding 的方法之一, Word Embedding 的模型本身並不重要,重要的是生成出來的結果——詞向量。因為在後續的任務中會直接用到這個詞向量。
包含兩種模型:CBOW(連續詞袋)和skip-gram
區別:執行預測的方式。
CBOW:利用上下文或周圍的單詞來預測中心詞
skip-gram:使用中心詞來預測上下文
優點:與單熱編碼相比,word2vec有利於減我碼空間大小,並將單詞的表示壓縮到所需的向量長度。
word2vec創建單詞表示的方式基於單詞的上下文。
過程:使用序列中的當前單詞來預測周圍的單詞
周圍單詞的分類 得分 基於 語法關系 和它們與中心詞一起出現的 次數
CBOW模型
CBOW是一種基於窗口的語言模型。(窗口:句子中的一個固定長度的片段,窗口中間的詞為中心詞,其他詞問中心詞的上下文)
原理:通過三層神經網路接受上下文的特徵向量,預測中心詞是什麼
結構:輸入層、隱藏層、輸出層
該模型的6個步驟:
7. 自然語言處理(NLP)的基礎難點:分詞演算法
自然語言處理(NLP,Natural Language Processing)是人工智慧領域中的一個重要方向,主要研究人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理的底層任務由易到難大致可以分為詞法分析、句法分析和語義分析。分詞是詞法分析(還包括詞性標注和命名實體識別)中最基本的任務,也是眾多NLP演算法中必不可少的第一步,其切分准確與否往往與整體結果息息相關。
金融領域分詞的難點
分詞既簡單又復雜。簡單是因為分詞的演算法研究已經很成熟了,大部分的演算法(如HMM分詞、CRF分詞)准確率都可以達到95%以上;復雜則是因為剩下的5%很難有突破,主要可以歸結於三點:
▲粒度,即切分時的最小單位,不同應用對粒度的要求不一樣,比如「融資融券」可以是一個詞也可以是兩個詞
▲歧義,比如「恆生」一詞,既可指恆生公司,又可指恆生指數
▲未登錄詞,即未出現在演算法使用的詞典中的詞,比如不常見的專業金融術語,以及各種上市公司的名稱
在金融領域中,分詞也具有上述三個難點,並且在未登錄詞方面的難點更為突出,這是因為金融類詞彙本來就多,再加上一些專有名詞不僅有全稱還有簡稱,這就進一步增大了難度。
在實際應用中,以上難點時常會造成分詞效果欠佳,進而影響之後的任務。尤其是在一些金融業務中,有許多需要與用戶交互的場景,某些用戶會用口語化的詞彙描述業務,如果分詞錯誤會影響用戶意圖的解析,這對分詞的准確性提出了更高的要求。因此在進行NLP上層應用開發時,需要對分詞演算法有一定的了解,從而在效果優化時有能力對分詞器進行調整。接下來,我們介紹幾種常用的分詞演算法及其應用在金融中的優劣。
幾種常見的分詞演算法
分詞演算法根據其核心思想主要分為兩種:
第一種是基於字典的分詞,先把句子按照字典切分成詞,再尋找詞的最佳組合方式,包括最大匹配分詞演算法、最短路徑分詞演算法、基於N-Gram model的分詞演算法等;
第二種是基於字的分詞,即由字構詞,先把句子分成一個個字,再將字組合成詞,尋找最優的切分策略,同時也可以轉化成序列標注問題,包括生成式模型分詞演算法、判別式模型分詞演算法、神經網路分詞演算法等。
最大匹配分詞尋找最優組合的方式是將匹配到的最長片語合在一起,主要的思路是先將詞典構造成一棵Trie樹(也稱為字典樹),Trie樹由詞的公共前綴構成節點,降低了存儲空間的同時可以提升查找效率。
最大匹配分詞將句子與Trie樹進行匹配,在匹配到根結點時由下一個字重新開始進行查找。比如正向(從左至右)匹配「他說的確實在理」,得出的結果為「他/說/的確/實在/理」。如果進行反向最大匹配,則為「他/說/的/確實/在理」。
這種方式雖然可以在O(n)時間對句子進行分詞,但是只單向匹配太過絕對,尤其是金融這種詞彙較豐富的場景,會出現例如「交易費/用」、「報價單/位」等情況,所以除非某些詞的優先順序很高,否則要盡量避免使用此演算法。
最短路徑分詞演算法首先將一句話中的所有詞匹配出來,構成詞圖(有向無環圖DAG),之後尋找從起始點到終點的最短路徑作為最佳組合方式,例:
我們認為圖中每個詞的權重都是相等的,因此每條邊的權重都為1。
在求解DAG圖的最短路徑問題時,總是要利用到一種性質:即兩點之間的最短路徑也包含了路徑上其他頂點間的最短路徑。比如S->A->B->E為S到E到最短路徑,那S->A->B一定是S到B到最短路徑,否則會存在一點C使得d(S->C->B)<d(S->A->B),那S到E的最短路徑也會變為S->C->B->E,這就與假設矛盾了。利用上述的最優子結構性質,可以利用貪心演算法或動態規劃兩種求解演算法:
(1)基於Dijkstra演算法求解最短路徑,該演算法適用於所有帶權有向圖,求解源節點到其他所有節點的最短路徑,並可以求得全局最優解;
(2)N-最短路徑分詞演算法,該方法是對Dijkstra演算法的擴展,在每一步保存最短的N條路徑,並記錄這些路徑上當前節點的前驅,在最後求得最優解時回溯得到最短路徑。這種方法的准確率優於Dijkstra演算法,但在時間和空間復雜度上都更大。
相較於最大匹配分詞演算法,最短路徑分詞演算法更加靈活,可以更好地把詞典中的片語合起來,能更好地解決有歧義的場景。比如上述「他說的確實在理」這句話,用最短路徑演算法的計算結果為「他/說/的/確實/在理」,避免了正向最大匹配的錯誤。但是對於詞典中未存在的詞基本沒有識別能力,無法解決金融領域分詞中的「未登錄詞」難點。
N-Gram(又稱N元語法模型)是基於一個假設:第n個詞出現與前n-1個詞相關,而與其他任何詞不相關。在此種假設下,可以簡化詞的條件概率,進而求解整個句子出現的概率。
現實中,常用詞的出現頻率或者概率肯定比罕見詞要大。因此,可以將求解詞圖最短路徑的問題轉化為求解最大概率路徑的問題,即分詞結果為「最有可能的詞的組合「。
計算詞出現的概率,僅有詞典是不夠的,還需要充足的語料,所以分詞任務已經從單純的「演算法」上升到了「建模」,即利用統計學方法結合大數據挖掘,對「語言」(句子出現的概率)進行建模。
我們將基於N-gram模型所統計出的概率分布應用到詞圖中,可以得到詞的概率圖。對該詞圖用最短路徑分詞演算法求解最大概率的路徑,即可得到分詞結果。
相較於前兩種分詞演算法,基於N-Gram model的分詞演算法對詞頻進行了統計建模,在切分有歧義的時候力求得到全局最優值,比如在切分方案「證券/自營/業務」和「證券/自/營業/務」中,統計出「證券/自營/業務」出現的概率更大,因此結果有更高的准確率。但也依然無法解決金融場景中未登錄詞的問題。
生成式模型主要有隱馬爾可夫模型(HMM,Hidden Markov Model)、樸素貝葉斯分類等。HMM是常用的分詞模型,基於Python的jieba分詞器和基於Java的HanLP分詞器都使用了HMM。
HMM模型認為在解決序列標注問題時存在兩種序列,一種是觀測序列,即人們顯性觀察到的句子,另一種是隱狀態序列,即觀測序列的標簽。假設觀測序列為X,隱狀態序列是Y,則因果關系為Y->X。因此要得到標注結果Y,必須對X的概率、Y的概率、P(X|Y)進行計算,即建立P(X,Y)的概率分布模型。
HMM演算法可以在一定程度上解決未登錄詞的問題,但生成式模型的准確率往往沒有接下來要談到的判別式模型高。
判別式模型主要有感知機、支持向量機(SVM,Support Vector Machine)、條件隨機場(CRF,Conditional Random Field)、最大熵模型等,其中感知機模型和CRF模型是常用的分詞模型。
(1)平均感知機分詞演算法
感知機是一種簡單的二分類線性模型,通過構造超平面,將特徵空間(輸入空間)中的樣本分為正負兩類。通過組合,感知機也可以處理多分類問題。但由於每次迭代都會更新模型的所有權重,被誤分類的樣本會造成很大影響,因此採用平均的方法,在處理完一部分樣本後對更新的權重進行平均。
(2)CRF分詞演算法
CRF可以看作一個無向圖模型,假設給定的標注序列為Y,觀測序列為X,CRF對條件概率P(Y|X)進行定義,而不是對聯合概率建模。
平均感知機演算法雖然速度快,但仍不夠准確。適合一些對速度要求高、對准確性要求相對不那麼高的場景。CRF分詞演算法可以說是目前最常用的分詞、詞性標注和實體識別演算法,它對未登陸詞也有很好的識別能力,是目前在速度、准確率以及未登錄詞識別上綜合表現最突出的演算法,也是我們目前所採用的解決方案,但速度會比感知機慢一些。
在NLP中,最常用的神經網路為循環神經網路(RNN,Recurrent Neural Network),它在處理變長輸入和序列輸入問題中有著巨大的優勢。LSTM(Long Short-Term Memory,長短期記憶網路)為RNN變種的一種,在一定程度上解決了RNN在訓練過程中梯度消失和梯度爆炸的問題。
目前對於序列標注任務,業內公認效果最好的模型是BiLSTM+CRF。相比於上述其它模型,雙向循環神經網路BiLSTM,可以更好地編碼當前字等上下文信息,並在最終增加CRF層,核心是用Viterbi演算法進行解碼,以得到全局最優解,避免B,S,E這種不可能的標記結果的出現,提高准確率。
神經網路分詞雖然能在准確率、未登錄詞識別上有更好的表現,但RNN無法並行計算,在速度上沒有優勢,所以該演算法通常在演算法研究、句子精確解析等對速度要求不高的場景下使用。
分詞作為NLP底層任務之一,既簡單又重要,很多時候上層演算法的錯誤都是由分詞結果導致的。因此,對於底層實現的演算法工程師,不僅需要深入理解分詞演算法,更需要懂得如何高效地實現和調試。
而對於上層應用的演算法工程師,在實際分詞時,需要根據業務場景有選擇地應用上述演算法,比如在搜索引擎對大規模網頁進行內容解析時,對分詞對速度要求大於精度,而在智能問答中由於句子較短,對分詞的精度要求大於速度。
8. nlp演算法判斷是不是胡亂輸入
不是。該種算寬鎮法不是雀巧亂胡亂輸入的。nlp演算法是自然語言處理演算法。自然語言處理是計算頃檔機科學領域與人工智慧領域中的一個重要方向。
9. nlp演算法是什麼
nlp演算法是自然語言處理。
自然語言處理( Natural Language Processing, NLP)是計算機科學領域與人工智慧領域中的一個重要方向。它研究能實現人與計算機之間用自然語言進行有效通信的各種理論和方法。自然語言處理是一門融語言學、計算機科學、數學於一體的科學。
相關信息:
自然語言處理是指利用人類交流所使用的自然語言與機器進行交互通訊的技術。通過人為的對自然語言的處理,使得計算機對其能夠可讀並理解。自然語言處理的相關研究始於人類對機器翻譯的探索。
雖然自然語言處理涉及語音、語法、語義、語用等多維度的操作,但簡單而言,自然語言處理的基本任務是基於本體詞典、詞頻統計、上下文語義分析等方式對待處理語料進行分詞,形成以最小詞性為單位,且富含語義的詞項單元。
10. NLP自然語言處理
羅素悖論:由所有不包含自身的集合構成的集合
例子:理發師稱只給那些不給自己理發隱空的人理發。
基於集合論,理發師無論給自己理發還是不給自己理發都是矛盾的。
因此集合論不是完備的。 即使後面馮羅伊德等科學家提出了各種假定條件。
由於上述的原因,集合率無法很好的描述自然語言,科學家發現通過概率模型可以更好的描述自然語言。
深度學習來處理自然語言屬於概率模型
證明最小點位於坐標軸上
h = f+c|x|
由於在x = 0處不可導
h-left'(0)*h-right'(0) = (f'+c)*(f'-c)
那麼如果c>|f'(0)|可得,h在0處左右導數異號
0是最值。
那麼在損失函數加入L1正則化後,可以得到某些維度容易為0,從而得到灶扒瞎稀疏解
幾乎所有的最優化手段,都將適用凸優化演算法來解決
P(A|B) = P(A and B) / P(B)
if A and B 獨立
=》P(A and B| C) = P(A|C)*P(B|C)
也可以推出
=>A(A|B and C) = P(A|C) (B交C不為空)
拋9次硬幣,硬幣出現正面的概率是0.5,出現k次的概率分布如下如
服從正態分布
x的平均值
E = x*p(x) + ...
x相對於期望的偏離
var = (x-E(x))^2
conv = (x - E(x))*(m - E(m))
描述x,m是否有同分布
按理協方差為0,並不代表x和m沒有關系
例如下圖
如果點的分布對稱的分布,會得此森到協方差為0,但是其實他們是有關系的。
把每個相關的概率累加,得到聯合概率
P(x1=m1,x2=m2...) = n!*P1 m1/m1!*P2 m2/m2!
T(n) = (n-1)!
T(x)用一條曲線逼近n!,進而可以求得非整數的階乘
由二項式分布推出
P = T(a+b)*x (a-1)*(1-x) (b-1)/(T(a)*T(b))
則正態分布
y為0時,不考慮y『。y為1時,y'越接近1,越小,越靠近0,越大
把D最小化,迫使y'逼近y
對於一個句子,有若干單片語成。例如
C1: The dog laughs.
C2: He laughs.
那麼計算P(C1) = P(The, Dog, laughs)的概率和P(C2) = P(He, laughs)的概率。
根據歷史文本的統計學習。
可以得到P(C1)<<P(C2)
P('I love the game') = P('I')*P('love')*P('the')*P('game')
其中P(<work>) = 頻率/總單詞數
計算一篇文章是積極的還是消極的。
P(y|x) = sigmod(wx)
x是文章內每個單詞的頻率
y表示積極和消極情感
其中P(xk|x1, x2,..xk-1) = frequence(x1, x2 ,, xk)/frequence(x1, x2..xk-1)
2-gram模型例子
把多個gram的模型進行線性整合
P(y|x1, x2, .. xn) = P(y)*P(x1, x2, ... xn|y) / P(x1, x2, ... xn)
y代表是否是垃圾郵件
x代表單詞
廣州市長壽路 -》 廣州市長|壽路
廣州市長壽路 -》 廣州市|長壽路
匹配詞袋:廣州市,廣州市長,長壽路
使用最大匹配發,第二個分詞更優
通過統計P(A|B),得出各個option的概率,取最大的概率,則為最後的分詞
word => [0, 0 , ... 1, ... 0]
word => [0, 1, 0, 1, 0, ...]
可以解決詞相似性問題
計算附近詞的頻率
word => [0, 3, 0, 1, 0, ...]
w是附近詞的one-hot encoding
score是詞的one-hot encoding
最後一層通過softmax,取擬合文本
最終中間層則為詞向量
輸入為詞one-hot encoding
輸出為附近此的one-hot encoding
最後通過softmax預測附近詞
最後中間層則為結果詞向量
混合模型是一種統計模型,問題中包含若干個子問題,每個子問題是一個概率分布,那麼總問題就是若干個子問題的組合,也就是若干個子分部的組合,這樣就形成了混合模型。
有紅黑兩種硬幣,把它們放在盒子里,從盒子里隨機抽取一個硬幣並投幣,抽到紅色的概率是p,紅色硬幣正面的概率是q,黑色硬幣正面的概率是m,假設我們沒辦法看到抽取出的硬幣的顏色,只能看到最終是正面或者反面的結果,例如HTTHTTTTHHH (H:正面 T: 反面)。需要估計p,q,m三個參數。
此時可以計算出
通過EM演算法迭代如下:
隨機p q m
迭代以下過程:
計算上面table
p = (aC(正)+cC(反))/total
q = aC(正)/(aC正+cC正)
m = bC(正)/(bC正 + dC正)
假設有上述數據,需要用混合模型來逼近,通過分析,紅色和藍色數據分別為高斯正態分布,N(u, v)
此時可以得到如下表
p = pN紅x/(pN紅x+(1-p)N藍x)
u = pN紅x/n
v = pN紅(x-u)^2/n
詞性轉換概率
詞性到單詞的轉換概率
通過EM遞歸演算法,訓練以上參數,得到隱馬爾可夫模型
PLSA主題模型
只統計詞的頻率,不計算詞的相對位置
計算文檔和單詞頻率的矩陣
進行奇異矩陣分解
得到A矩陣的壓縮U,U中的k則為k個主題
通過分析,LSA得到的主題是跟現實無法關聯,它只是一個量,而沒有明顯的意義。
PLSA為了解決此問題,引入概率模型,先確定主題個數
然後通過構建Doc->topic的概率table,和topic->word的概率table。
然後通過EM模型,得到這兩個table的所有概率值。
進而得到文檔的主題表示
PLSA的缺陷是,對於預測未知的doc,無法計算此文檔的相關概率。隨著doc數量的增加,PLSA模型的參數會線性增加,從而會造成過擬合。
LDA通過引入先驗概率來克服PLSA的問題。
類似於編譯原理的上下文無法句法分析,一顆語法樹
通過對CFG引入概率參數
有了概率,可以計算每顆語法樹的極大似然概率,並取最大概率的樹為最終輸出
上一個狀態中間層的輸出作為下一隱層的輸入
類似於HMM的2-gram模型。t狀態受到t-1時刻輸出的影響,受t-k的輸出的k越大,影響越小
由於RNN幾乎只受到上一時刻的影響,而忽略了久遠信息的影響。從而造成了一定的局限性。
LSTM通過引入長短記憶方法,來維持長記憶的信息。
通過訓練核內的sigmod函數,使得LSTM可以根據不同的句子,有條件的保留和過濾歷史信息,從而達到長記憶的功能。
GRU是LSTM的簡化版,它只需要處理兩個sigmod函數的訓練,而LSTM需要三個sigmod函數的訓練,減少了訓練的參數,加快了訓練的速度,但也損失了一部分模型的復雜,在處理較復雜問題時,沒有LSTM那麼好。
auto-encoder-decoder的特點是輸出的單元數是固定的。對於一般自然語言處理,例如機器翻譯,輸入的單元個數跟輸出單元的個數並不是一一對應的,此時就需要動態的生成輸出單元。Seq2Seq通過動態的輸出結束符,代表是否輸出完成,達到可以動態的根據輸入輸出不同的單元個數。
seq2seq的缺點是,所有的輸入序列都轉化為單一的單元c,導致很多信息都將消失,對於不同的輸出yi,它可能依賴的輸入xj有可能不一樣,此時通過加入注意力模型,通過對xi進行softmax處理,並加入到y權重的訓練中,可以讓不同的y,有不同的x對它進行影響
softmax的輸入為輸入單元x,和上一個輸出單元y,聯合產生softmax的權重,進而對不同的序列,對於同一個x,會有不同的注意力到輸出
q = Wq(x)
k = Wk(x)
v = Wv(x)
x為詞向量
通過訓練,得到權重w,從而學習到這一層的softmax注意力參數
R是前一次encoder的輸出
通過增加w的數量,產生多個z,並進行堆疊,通過前饋網路,最後產生z
在使用self attention處理句子時,是沒有考慮單詞在句子中的位置信息的。為了讓模型可以加入考慮單詞的位置信息,加入了位置編碼的向量
計算如下:
pos為單詞在句子中的位置
i為詞向量的位置
d為句子的長度
位置編碼加上詞向量形成tranformer的輸入
加入了歸一化和殘差網路
最終通過softmax,輸出每個單詞的概率,並最終輸出單詞