一、NLP分類:
1.word level:序列標注任務:分詞、詞性標注、命名實體識別
2.sentence level :在句子層面分類的任務:如文本分類,情感識別,關系抽取,語音情感識別等。
3.entence-sentence level:序列和序列之間的分類,這種分類根據分類形式的不同又可以細分。如機器翻譯,問答,對話都是sequence to sequence類型的問題。
二、語言模型與詞向量
語言模型就是用來判斷一個句子的合理性的置信度,最經典的就是n-gram語言模型和NNLM(Nerual Network Language Model)
1.n-gram語言模型
n-gram語音模型主要基于馬爾科夫假設。理論上,n越大越好。但實踐中常用unigram、bigram和trigram,n越大訓練越慢,但精度會更高。
2.神經語言模型
Word2vec就是利用一個簡化版的語言模型來得到剛才提到的矩陣C,因為Hidden layer都是線性層。
CBOW利用一個詞的上下文來預測中心詞,skip-gram則是反過來利用中心詞來預測上下文。
不同點:構建目標函數的方式不同。
CBOW: 根據詞語上下文預測中心詞
Skip-gram: 根據中心詞預測上下文
共同點:以小窗粒度捕獲詞語與上下文的聯系,然后滑動小窗,在整個語料上捕獲聯系。
思路:制定目標函數,量化這種聯系,最優化,從而求得每個詞的向量。
三、分詞技術
分詞任務,難點如下:
1.新詞發現
未登錄詞(人名、機構名、商標名、公司名稱)
2.詞典與算法優先級
我們 中信 仰 佛教 的 人
3.歧義(顆粒度、交集等)
股份 有限公司 、鄭州天和服裝廠
分詞的算法大致分為兩種:
1.基于詞典的分詞算法
正向最大匹配算法 逆向最大匹配算法 雙向匹配分詞法
2.基于統計的機器學習算法
HMM、CRF、SVM、LSTM+CRF
Jieba的分詞的API:
segWords_allmode = jieba.cut(str,cut_all=True) 全模式分詞結果
segWords_accuratemode = jieba.cut(str,cut_all=False)精確模式分詞結果
segWords_defaultmode = jieba.cut(str)默認模式分詞結果
segWords_searchenginemode = jieba.cut_for_search(str)搜索引擎分詞結果
全模式分詞結果:我/是/最/懂/你/的/聊天/天機/機器/機器人/小/辛//
精確模式分詞結果:我/是/最/懂/你/的/聊天/機器人/小辛/!
默認模式分詞結果:我/是/最/懂/你/的/聊天/機器人/小辛/!
搜索引擎分詞結果:我/是/最/懂/你/的/聊天/機器/機器人/小辛/!
注:HMM
HMM狀態狀態序列是馬爾科夫鏈,凡是轉移矩陣的參數不知道。
HMM是馬爾科夫鏈一階導數,多用于分詞;CRF是隱馬的復雜化。
HMM包含兩個序列和三個元素。
序列:觀測序列是我們能夠看到的值,是基于狀態序列生成的值;狀態序列是未知的,是滿足馬爾可夫性質的。
元素:狀態序列中間的狀態初始概率矩陣:派
狀態與狀態之間的概率轉移矩陣:A
狀態到觀測值的混淆概率矩陣:B
四、命名實體識別LSTM-CRF
識別文本中具有特定意義的實體(人名、地名、機構名、專有名詞),從知識圖譜的角度來說就是從非結構化文本中獲取圖譜中的實體及實體屬性。
方法:
(1) 基于規則的方法。根據語言學上預定義的規則。但是由于語言結構本身的不確定性,規則的制定上難度較大。
(2) 基于統計學的方法。利用統計學找出文本中存在的規律。
主要有隱馬爾可夫(HMM)、條件隨機場(CRF)模型和Viterbi算法、支持向量機(Support Vector Machine, SVM)。
(3) 神經網絡。
LSTM+CRF模型,基于RNN的seq2seq模型
難點:
1 中文實體識別
中文識別包含英文識別;英文直譯實體;
2 特定領域的數據
愛爾眼科集團股份有限公司 B-agency,I-agency,
3數據清洗
圖中輸入是word embedding,使用雙向lstm進行encode,對于lstm的hidden層,接入一個大小為[hidden_dim,num_label]的一個全連接層就可以得到每一個step對應的每個label的概率,也就是上圖黃色框的部分,到此,如果我們直接去最大的概率值就可以完成任務了,那么為什么還要接入一個CRF層?
如果將lstm接全連接層的結果作為發射概率,CRF的作用就是通過統計label直接的轉移概率對結果lstm的結果加以限制(這樣條件隨機場的叫法就很好理解了)
比如I這個標簽后面不能接O,B后面不能接B,如果沒有CRF,光靠lstm就做不到這點,最后的score的計算就將發射概率和轉移概率相加就ok了,我這里給出的是直觀感受,不做理論上的講解。
項目:
雙向lstm或IdCNN模型,找到x,y. y是雙標簽,x是文字word2vec映射成的詞向量。
如何擬合x.y:擬合之前第一步提取x的特征,用BiLstm或idCNN對x做特征提取,+分類器(crf條件隨機場)
idCNN與cnn的區別是,idCNN的卷積核是扁的:找一句話之間的關系可以用扁的, 好處:可以有效地抗噪音:完形填空時,扁的卷積核它只會掃當前這句話,不會把上下文卷進來,抗的是上下文的躁
CNN和RNN本質上沒有太大差別,都是把局部的相關性體現出來,CNN體現在空間上,RNN體現在時間時序上
crf:條件隨機場。跟rnn很類似,提供了一個分類結果,當然它也可以做特征提取。它的分類需要算一個聯合概率
第一步,找到x,y
第二步,對x做特征提取、特征工程(之前所有的resnet等都是為特征工程服務的),對y做one_hot向量(或二分類)
第三步,去擬合,分類
五、主題模型
1.PCA主成分分析
是一種無監督學習的降維技術,思想是:投影后樣本越分散,保留的信息越多
做法:將所有的樣本點向直線w投影,目標函數:讓投影后的樣本方差 極大
通過特征值和特征向量來降維
2.LDA線性判別分析
是一種監督學習的降維技術,思想是:投影后類內方差最小,類間方差最大
做法:計算直線上,每個類別下樣本的方差,目標函數:讓均值的投影點間的距離/各類別組內方差和極大。
3.LDA隱含狄利克雷分布(主題模型)
Beta分布:是估計硬幣正面朝上概率的分布,x軸表示出現正面的概率,y表示出現正面概率的可能性。
狄利克雷分布:是beta分布的推廣情形,拋出的結果可能有很多種
np.random.beta(20,20)
np.random.dirichlet(100,100,100,100,100,100)
4.負采樣Negative sampling總結
首先為所有的詞隨機初始化自己的向量(200維)
在基于Negative sampling的CBOW模型中,對某個詞w來說,構造一個函數:
預測出詞w的概率*不預測出其他詞的概率,這是我們想要的極大的,擴展到整個語料庫,就是讓每個詞的函數累乘極大,這便是最終需要最大化的目標函數。
六、知識圖譜
關系抽取是知識圖譜中將文本數據進行結構化的一種方法。
從非結構化文本中獲取圖譜中的實體及實體屬性。
之前實習的任務就是從大量的數據中抽取圖中的每個實體節點。條件:有的只有未標注的數據和一些數據庫中的詞典,要做的就是從數據庫中抽取原始數據和每個類別的詞典進行標注還原。
那么標注還原怎么做呢?這里可以直接將詞典導進分詞器的,將類別作為詞性標注的標簽進行標注,這樣既做了分詞也做了標注。實體識別完成后就是數據入庫審核工作了,然后就是做詞典更新,添加識別出的新詞,繼續做模型訓練。
數據清洗總結:
1.數據中句子的切割:要做成訓練數據那樣的標注并不容易,有些句子長度得有1000+個字了,我們盡量把句子的長度控制在100左右,同時要保證詞語的完整性。
2.符號清理:這里盡量保證句子中亂七八糟的符號不要太多。
3.然后舍去全是‘O’的標注句子。其實有標注的句子占的比重不大,這里要注意清洗干凈。
4.如果對數字識別不做要求,干脆轉換成0進行識別
https://github.com/FuYanzhe2/Name-Entity-Recognition
【Batch Normalization】
https://www.cnblogs.com/guoyaohua/p/8724433.html
https://www.cnblogs.com/skyfsm/p/8453498.html
【馬爾科夫鏈--馬爾科夫隨機場--條件隨機場】
https://www.cnblogs.com/lijieqiong/p/6673692.html
https://blog.csdn.net/Jum_Summer/article/details/80793835