nlp分享

JimmyLeung1874發表於2018-11-09

NLP 分享:

Section 1:

本節主要內容:

  • 1.中文分詞技術原理解析
  • 2.機器學習與神經網路模型基礎概念
  • 3.關鍵字提取
  • 4.詞向量解析

本節期望:

  • 能使用jieba做基礎的中文分詞與常用演算法進行關鍵字提取
  • 能使用word2vec訓練得到基礎的模型與詞向量

NLP是啥?

zh-wiki: 自然語言處理(英語:Natural Language Processing,縮寫作 NLP)是人工智慧和語言學領域的分支學科

中文分詞技術原理解析:

  • 1.基於字串匹配的分詞方法
  • 2.基於理解的分詞方法
  • 3.基於統計的分詞方法

1.基於字串匹配的分詞方法:

基於字串匹配的分詞方法又稱機械分詞方法,它是按照一定的策略將待分析的漢字串與一個“充分大的”機器詞典中的詞條進行配,若在詞典中找到某個字串,則匹配成功

2.基於理解的分詞方法:

通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法資訊和語義資訊來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義資訊來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和資訊。由於漢語語言知識的籠統、複雜性,難以將各種語言資訊組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段

3.基於統計的分詞方法

基於統計的分詞方法是在給定大量已經分詞的文字的前提下,利用統計機器學習模型學習詞語切分的規律(稱為訓練),從而實現對未知文字的切分。例如最大概率分詞方法和最大熵分詞方法等。隨著大規模語料庫的建立,統計機器學習方法的研究和發展,基於統計的中文分詞方法漸漸成為了主流方法

主要的統計模型有:N元文法模型(N-gram),隱馬爾可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),條件隨機場模型(Conditional Random Fields,CRF)等。

1.馬爾科夫模型

  • 不知道哪個老大的總結:今天的事情只取決於昨天,而明天的事情只取決於今天,與歷史毫無關聯

隨機過程中各個狀態StS_t的概率分佈,只與它的前一個狀態St1S_{t-1}有關,即P(StS1,S2,S3, ,St1)=P(StSt1)P_(S_t|S_1,S_2,S_3,\cdots,S_{t-1}) = P(S_t|S_{t-1})

公式:

馬爾科夫過程:

p(qt=sjqt1=si,qt2=sk, )p(qt=sjqt1=si)p_(q_t = s_j|q_{t-1}=s_i,q_{t-2}=s_k,\cdots)\approx p_({q_t=s_j|q_{t-1}=s_i})

馬爾科夫模型:

(qt=sjqt1=si)=aij,1i,jN_({q_t=s_j|q_{t-1}=s_i}) = a_{ij} \quad,\quad 1\leq i,j\leq N

aij0a_{ij} \geq 0
i=0Naij=1\sum_{i=0}^N a_{ij} =1
)

重要性質:

  • 馬爾科夫鏈模型的狀態轉移矩陣收斂到的穩定概率分佈於我們的初始狀態概率分佈無關
  • 非週期性
  • 任何兩個狀態是連通的: 從任意一個狀態可以通過有限步到達其他的任意一個狀態,不會出現條件概率為0不可達的情況
  • 狀態數是可以是有限的,也可以是無限的。因此可以用於連續概率分佈和離散型概率分佈

在這裡插入圖片描述

2.隱馬爾科夫模型(Hidden Markov Model,HMM)

####它用來描述一個含有隱含未知引數的馬爾可夫過程。其難點是從可觀察的引數中確定該過程的隱含引數。

  • 維基百科上的例子——通過朋友的行為去預測當地天氣的變化
    隱藏馬爾柯夫
    ![avatar](./Image/v2-13a9848cdad479aaafa282e51c0d6e72_hd.jpg

Viterbi演算法:

演算法原理:

  • 用動態規劃求解HMM模型預測問題

avatar

演算法結果:

根據狀態序列得到分詞結果
演算法過程:

  • 輸入:
    λ=(A,B,π)O=(O1,O2, ,OT)模型 \lambda = (A,B,\pi) 和觀察序列 O =(O_1,O_2,\cdots,O_T)
  • 輸出:
    :I=(i1,i2, ,it)最優路徑:I^*=(i_1,i_2,\cdots,i_t)

####n元模型演算法 (n-gram)

  • 語言模型聯合概率:
    p(W)=p(w1T)=p(w1,w2, ,wT)p(W) = p(w^T_1)=p(w_1,w_2,\cdots,w_T)

  • Bayes公式鏈式分解:
    p(w1T)=p(w1)(w2w1)p(wTw1T1)p(w^T_1)=p(w_1)\cdotp(w_2|w_1)\cdots p(w_T|w^{T-1}_1)

  • 當n=1:(unigram model)
    p(w1,w2, ,wm)=p(w1)p(w2)p(wm)p(w_1,w_2,\cdots,w_m) = p(w_1)p(w_2)\cdots p(w_m)

句子的概率等於每個詞的概率的乘積,即每個詞之間都是相互獨立的

  • 當n=2:(bigram model)
    p(wiw1,w2, ,wi1)=p(wiwi1)p(w_i|w_1,w_2,\cdots,w_i-1) = p(w_i|w_{i-1})

  • 當n=3:(trigram model)
    p(wiw1,w2, ,wi1)=p(wiwi2,wi1)p(w_i|w_1,w_2,\cdots,w_i-1) = p(w_i|w_{i-2},w_{i-1})

  • n+n\rightarrow+\infty

P(wiwi(n1), ,wi1)=p(wiwi(n1), ,wi1,wi)=count(wi(n1), ,wi1,wi)count(wi(n1), ,wi1)P(w_i | w_{i-(n-1)},\cdots,w_{i-1})= p(wi|w_{i-(n-1)},\cdots,w_{i-1},w_i) = \frac{count(w_{i-(n-1)},\cdots,w_{i-1},w_i)}{count(w_{i-(n-1)},\cdots,w_{i-1})}

  • 齊次馬爾科夫假設:
    p(wkw1k)p(wkwkn+1k1)p(w_k|w^k_1)\approx p(w_k|w^{k-1}_{k-n+1})

    每個輸出僅僅與上一個輸出有關

#3.jieba分詞:

github: https://github.com/fxsjy/jieba

演算法

  • 基於字首詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG)
  • 採用了動態規劃查詢最大概率路徑, 找出基於詞頻的最大切分組合
  • 對於未登入詞,採用了基於漢字成詞能力的 HMM 模型,使用了 Viterbi 演算法

機器學習與神經網路模型基礎:

機器學習基本概念:

必要元素:

  • 1.資料
  • 2.轉換資料的模型
  • 3.衡量模型好壞的損失函式
  • 4.調整模型權重以便最小化損失函式的演算法

機器學習分類:

  • 1.監督學習
  • 2.無監督學習:

區別:資料集是否有人工分類標籤

神經網路模型基礎概念:

  • 1.啟用函式:
  • 2.損失函式(代價函式) :
  • 3.反向傳播:
    在這裡插入圖片描述

###啟用函式: 躍階函式 與 Sigmoid函式
在這裡插入圖片描述
###神經網路發展史
神經網路發展史

神經網路型別

https://36kr.com/p/5115489.html

27種神經網路
在這裡插入圖片描述

  • 泛化(generalization) : 機器學習模型學習到的概念在它處於學習的過程中時模型沒有遇見過的樣本時候的表現, 好的機器學習模型的模板目標是從問題領域內的訓練資料到任意的資料上泛化效能良好。 在機器學習領域中, 當我們討論一個機器學習模型學習和泛化的好壞時, 我們通常使用術語: 過擬合和欠擬合。

  • 過擬合(over-fitted) : 過擬合指的是 referstoa 模型對於訓練資料擬合程度過當的情況。當某個模型過度的學習訓練資料中的細節和噪音, 以至於模型在新的資料上表現很差, 我們稱過擬合發生了。 這意味著訓練資料中的噪音或者隨機波動也被當做概念被模型學習了。 而問題就在於這些概念不適用於新的資料, 從而導致模型泛化效能的變差。

  • 欠擬合(under-fitted) : 欠擬合指的是模型在訓練和預測時表現都不好的情況。 一個欠擬合的機器學習模型不是一個良好的模型並且由於在訓練資料上表現不好這是顯然的。

關鍵字提取:

#常用演算法:

  • TF/IDF演算法: (Term Frequency - Inverse Document Frequency)
    • 基於統計學原理,統計詞頻數
      • 表示式為:
        tfidf(i,j)=tfijidfi=nijknkjlog(D1+Di) tf*idf(i,j) = tf_{ij} * idf_i = \frac{n_{ij}}{\sum_k{n_{kj}}} * log\left (\frac{|D|}{1+|D_i|}\right)

為啥要取對數和相乘?答先輩在實驗室得出來的結論,不接受反駁!!!!!

  • TextRank(源於PageRank演算法)

    • 基本思想是:

      • 連線數量,一個網頁被越多的其他網頁連線,說明這個網頁越重要
      • 連線質量,一個網頁被越高權值的網頁連線,說明這個網頁越重要
    • 表示式為:
      WS(Vi)=(1d)+dj(1Out(VjIn(Vj))WS(Vj))WS(V_i) = (1-d) + d * \sum_{j}\left(\frac{1}{|Out(V_j\in In(V_j))|}*WS(V_j)\right)

  • LSA/LSI 演算法:

    • LSA 主要採用 SVD(奇異值分解) 【Latent Semanitc Analysis,潛在語義分析】
    • LSI 主要採用 貝葉斯學派的方法對分佈資訊進行擬合[I for index,潛在語以索引]
  • LDA演算法:

    • 根據此的共現資訊的分析,擬合出詞-文件-主題的分佈,進而將詞,文字都對映到一個予以上面

實驗程式碼:KeywordExtract.py

詞表示:

  • one-hot表示法:
  • 詞嵌入
// One-hot Representation 向量的維度是詞表的大小,比如有10w個詞,該向量的維度就是10w
v('足球') = [0 1 0 0 0 0 0 ......]
v('籃球') = [0 0 0 0 0 1 0 ......]

// Distributed Representation 向量的維度是某個具體的值如50
v('足球') = [0.26 0.49 -0.54 -0.08 0.16 0.76 0.33 ......]
v('籃球') = [0.31 0.54 -0.48 -0.01 0.28 0.94 0.38 ......] 

word2vec基本介紹:

###Word2Vec就是把單詞轉換成向量。它本質上是一種單詞聚類的方法,是實現單詞語義推測、句子情感分析等目的一種手段。

演算法核心


在這裡插入圖片描述

word2vec = CBOW + Skip-Gram

#CBOW (Continue bags of word)

CBOW(Continuous Bag-of-Words Model)是一種根據上下文的詞語預測當前詞語的出現概率的模型,其圖示如上圖左。CBOW是已知上下文,估算當前詞語的語言模型;

#skip-Gram

而Skip-gram只是逆轉了CBOW的因果關係而已,即已知當前詞語,預測上下文,其圖示如上圖右;

在這裡插入圖片描述

#####實驗過程:

  • 1.資料集 中文維基百科資料集
  • 2.分詞,jieba
  • 3.模型訓練,gensim

######code:w2v.py

	//通過一系列複雜的運算以後結果為:
res1:[('小孩', 0.8762074112892151), ('子女', 0.838797926902771),
	 ('女兒', 0.8185409903526306), ('弟妹', 0.7953422665596008), 
	 ('兄弟姐妹', 0.7813134789466858), ('第二胎', 0.7718782424926758), 
	 ('妻子', 0.7622642517089844), ('女兒', 0.7622190713882446), 
	 ('私生女', 0.7616469264030457), ('女孩', 0.7608779668807983)]
	
res2:[('女人', 0.5232132077217102), ('王后', 0.4952596426010132), 
	('太后', 0.4879013001918793), ('妃子', 0.47403064370155334), 
	('王妃', 0.46553662419319153), ('皇太后', 0.45517897605895996), 
	('侍女', 0.45335230231285095), ('太子妃', 0.45140954852104187), 
	('王太后', 0.4455147683620453), ('太皇太后', 0.44461196660995483)]
	
res3:	西瓜
res4:	香蕉

參考連結:

郵箱:ljm500@163.com

相關文章