系列文章綜述
這個系列會包含兩部分與金融數(shù)據(jù)處理有關(guān)的文章,第一部分分析數(shù)據(jù)娃循,第二部分從已經(jīng)分析的數(shù)據(jù)中進行信息提取胎围,具體涉及到的內(nèi)容:
第一部分-文本分析器
- 文本數(shù)據(jù)清洗
- 數(shù)據(jù)分類(邏輯回歸+基于規(guī)則)
- 章節(jié)結(jié)構(gòu)分析(LSTM分類器+規(guī)則)
- 圖語義識別(識別報表欲低、合同等)
- 句法分析(LSTM(段落分析)+ 規(guī)則(句子分析))
- 表格識別(GBDT+CNN分類器)
第二部分-信息提取
- 命名實體識別(實體消歧+規(guī)則識別器+CRF)
- 關(guān)系/事件提让渍摺(Distant Supervision+Bootstrapping+規(guī)則+語法樹分析)
- 表格信息提染禄(表格結(jié)構(gòu)+表格對齊+表格補全)
本章綜述
現(xiàn)實世界中非結(jié)構(gòu)化信息太多,例如網(wǎng)絡(luò)上大量html蔓搞、txt文本胰丁,想要利用這些數(shù)據(jù),我們需要將這些非結(jié)構(gòu)化信息轉(zhuǎn)換為結(jié)構(gòu)化信息喂分,讓計算機理解锦庸。
傳統(tǒng)的文本方法的主要流程是人工設(shè)計一些特征,從原始文檔中提取特征蒲祈,然后指定分類器如LR甘萧、SVM,訓練模型對文章進行分類讳嘱,比較經(jīng)典的特征提取方法如頻次法幔嗦、tf-idf、互信息方法沥潭、N-Gram。
深度學習火了之后嬉挡,也有很多人開始使用一些經(jīng)典的模型如CNN钝鸽、LSTM這類方法來做特征的提取汇恤。
文本分類應(yīng)該是自然語言處理中最普遍的一個應(yīng)用,例如文章自動分類拔恰、郵件自動分類因谎、垃圾郵件識別、用戶情感分類等等颜懊,現(xiàn)在很多文本分類項目直接用了CNN财岔,但這篇文章暫時只介紹LR用于文本分類,再加上一些規(guī)則方法河爹,實現(xiàn)效果并不比CNN差匠璧。
目錄
一. 獲取預料
二. 文本數(shù)據(jù)預處理
三. 構(gòu)造文本特征
四. 特征選擇處理
五. 模型訓練
一. 獲取預料
獲取文本語料通常有以下幾種方式:
1。 標準開放公開測試數(shù)據(jù)集咸这,比如國內(nèi)的中文漢語有搜狗語料夷恍、人民日報語料;國際English的有stanford的語料數(shù)據(jù)集媳维、semavel的數(shù)據(jù)集等等
- 爬蟲抓取酿雪,獲取網(wǎng)絡(luò)文本,主要是獲取網(wǎng)頁HTML的形式侄刽,利用網(wǎng)絡(luò)爬蟲在相關(guān)站點爬取目標文本數(shù)據(jù)指黎。
二. 文本數(shù)據(jù)預處理
除了一般分類問題的數(shù)據(jù)清洗都包含的缺失值處理、去重處理和噪聲處理等步驟之外州丹,還包括:
- 進行jieba分詞
中文文本數(shù)據(jù)袋励,比如一條中文的句子,詞語詞之間是連續(xù)的当叭,而數(shù)據(jù)分析的最小單位粒度我們希望是詞語茬故,所以我們需要進行分詞工作,這樣就給下一步的工作做準備蚁鳖。而對于英文文本句子磺芭,就不存在分詞這一說法了,應(yīng)為英文的句子的最小單位就是詞語醉箕,詞語之間是有空格隔開的;
使用jieba包進行分詞處理钾腺,我們可以得到干凈的文本,文本中起到關(guān)鍵作用的是一些詞讥裤,主要詞就能決定文本的取向放棒。
由于計算機無法識別自然語言,我們自然也就無法直接將原始文本直接扔到分類算法當中得到分類結(jié)果己英。因此我們需要先將文本轉(zhuǎn)化為一定格式的特征編碼间螟,文本分類區(qū)別于其他文類問題的特點在于此。顯然,轉(zhuǎn)化后的特征編碼能夠攜帶越多的文本特征厢破,就越能幫助分類算法預測出對于的類別荣瑟。
中文文本分類最常用的特征提取的方法就是分詞。區(qū)別于英文天然的存在空格符作為詞與詞之間的間隔標志摩泪,中文文本中詞的提取必須通過基于序列預測等方法的分詞技術(shù)來實現(xiàn)笆焰。在提取了特征值之后,再采用One-hot或TF-IDF等方法將每個樣本轉(zhuǎn)化為固定長度的特征編碼作為分類算法的輸入见坑。
除了分詞嚷掠,N-gram模型也完全值得你去嘗試。分詞產(chǎn)生的特征丟失了原文本中詞與詞之間的的位置和順序信息荞驴,以至于對于“我愛你”不皆、“你愛我”這樣的短語,分詞得到的特征完全相同戴尸。同樣的例子粟焊,若采用二元的Bi-gram模型則能提取出“我愛”、“愛你”以及“你愛”孙蒙、“愛我”兩組完全不同的特征项棠,更清晰得表達的原文的原意。
在在中文文本分類中挎峦,另一個N-gram模型相對分詞的優(yōu)勢在于:N-gram模型不受分詞準確率的影響香追。并且當N取足夠大時,字符級別的N-gram模型總是能完全覆蓋分詞+詞袋模型的特征集合坦胶,同時能極大得召回其他特征透典,這一點在短文本分類中效果格外明顯。
在工程實踐中顿苇,為了不讓特征集合過于龐大從而拖累分類速度峭咒,一般同時采用N為1到3的N-gram就能取得較好的效果。 - 詞性標注(可選)
通過很多分詞工具分出來的會出現(xiàn)一個詞纪岁,外加該詞的詞性凑队,比如說啊是語氣助詞。 - 去除指定無用的符號
可以使用python中的replace替換一些指定的字符數(shù)據(jù)幔翰,可以用在去除文本中大量重復的符號 - 去除停用詞(stop words)
經(jīng)過上面的步驟漩氨,我們已經(jīng)把所有的詞進行了分類。但是這些所有的詞遗增,并不都是我們所需要的叫惊,比如說句號(。)顯然做修,句號對意思的表達沒有什么效果霍狰。還有”是“抡草、”的“等詞,也沒有什么效果蚓耽。因為這些詞在所有的文章中都大量存在渠牲,并不能反應(yīng)出文本的意思旋炒,可以清理掉步悠,通常情況下,在文本中去掉這些停用詞能夠使模型更好地去擬合實際的語義特征瘫镇,從而增加模型的泛化能力鼎兽。
但值得注意的是,停用詞表并不是一成不變的铣除。針對不同的文本分類情景谚咬,所采用的停用詞表也應(yīng)該作出針對性的調(diào)整。例如書名號“《”和“》”往往比書名本身更能代表書名的特征尚粘、冒號“:”通常出現(xiàn)在人物訪談類文章的標題中择卦,以及人稱代詞“他”和“她”在情感類文章標題中的頻繁使用等。根據(jù)情景靈活地使用停用詞表郎嫁,往往能夠起到意想不到的效果秉继。
例如:
標點符號:, 泽铛。尚辑! /、*+-
特殊符號:?????????????▲?等
無意義的虛詞:“the”盔腔、“a”杠茬、“an”、“that”弛随、“你”瓢喉、“我”、“他們”舀透、“想要”栓票、“打開”、“可以”等 - 非文本數(shù)據(jù)
很多時候我們的分類文本都來自爬蟲的爬取結(jié)果盐杂,因此文本中常常會附帶有HTML標簽逗载、URL地址等非文本內(nèi)容,所以需要清除這部分內(nèi)容對分類沒有什么幫助的內(nèi)容链烈。 - 長串數(shù)字或字母
通常情況下中文文本中長串的數(shù)字代表手機號厉斟、車牌號、用戶名ID等文本內(nèi)容强衡,在非特定的文本分類情境下可以去除擦秽。或者將其轉(zhuǎn)換為歸一化的特征,如是否出現(xiàn)長串數(shù)字的布爾值特征HAS_DIGITAL感挥、按長度歸一的DIGIAL_LEN_10等等缩搅。值得一提的是,表情代號常常作為長串數(shù)字或字母出現(xiàn)触幼,卻能在情感分析中卻能起到巨大作用硼瓣。 - 無意義文本
此外,還需要過濾掉剩余文本當中的諸如廣告內(nèi)容置谦、版權(quán)信息和個性簽名的部分堂鲤,毫無疑問這些也都不應(yīng)該作為特征被模型所學習。 - 變形詞識別和替換
變形詞問題除了能讓我們感嘆中文博大精深之外媒峡,也時時刻刻困擾文本分類工作者瘟栖,極大地增加了廣告識別、涉黃涉政等特殊的文本分類場景下的分類難度谅阿。對中文詞的變形通常采用的方法有:特殊符號替換半哟、同音近型替換、簡繁替換等签餐。
要做到變形詞的識別和替換寓涨,除了建立常見變形詞的映射表以外,還可以嘗試用拼音首字母的方法來鑒別同音替換的變形詞贱田;以及用 Word2vec詞向量來對比變形詞與上下文的語意關(guān)聯(lián)度缅茉,從而識別出該詞是否經(jīng)過了變形。
三. 構(gòu)造文本特征
接下來我們需要將文本符號串轉(zhuǎn)變?yōu)閿?shù)字男摧,更確切滴說是向量陣列:矩陣
- 詞袋表示
詞袋表示(bag of word, BOW), 即不考慮詞語的原本在句子中的順序蔬墩,直接將每一個詞語或者符號按照計數(shù)的方式,即出現(xiàn)的次數(shù)來進行統(tǒng)計耗拓。當然了拇颅,統(tǒng)計詞頻這只是最基本的方式。還有很多的處理乔询,具體如下樟插。
1.1 count
先將關(guān)鍵的keywords作為文本特征,然后再用此最直接的方式進行句子表示竿刁,就是直接統(tǒng)計詞頻黄锤,然后將每一個句子或者文本篇章按照每一個特征出現(xiàn)的頻率進行統(tǒng)計,這樣處理后將得到句子或者文檔對應(yīng)的一個特征向量食拜,向量的每個元素便是對應(yīng)特征詞的出現(xiàn)頻數(shù)鸵熟。
1.2 tf-idf
與count類似,不過對其進行了改進负甸。TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現(xiàn)的頻率TF高流强,并且在其他文章中很少出現(xiàn)痹届,則認為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類打月。TFIDF實際上是:TFIDF队腐,TF詞頻(Term Frequency),IDF反文檔頻率(Inverse DocumentFrequency)奏篙。TF表示詞條柴淘,在文檔d中出現(xiàn)的頻率。IDF的主要思想是:如果包含詞條t的文檔越少报破,也就是n越小悠就,IDF越大千绪,則說明詞條t具有很好的類別區(qū)分能力充易。 同樣的,處理后將得到一個句子的特征向量荸型,不過每個元素應(yīng)該是一個[0盹靴, 1]的實數(shù),表示一個概率瑞妇。一個好的tf-idf需要進行很多的處理稿静,比如進行光滑處理。這里貼一篇文章作為參考 TF-IDF與余弦相似性的應(yīng)用(一):自動提取關(guān)鍵詞 - 詞向量表示
詞向量又名詞嵌入word embedding辕狰,具體的無門檻科普請參考隔壁一篇博客《DeepNLP的表示學習·詞嵌入來龍去脈·深度學習(Deep Learning)·自然語言處理(NLP)·表示(Representation)》改备。分布式表示的優(yōu)點就是1.維度低,節(jié)省計算等等一堆資源蔓倍;2.capture了相對位置的語義信息悬钳,這一點革命性的。當然了偶翅,不同類型的詞向量有不同的能力默勾,這里不啰嗦。下面舉兩個例子聚谁。
2.1 word2vec
不是說word2vec只能用于神經(jīng)網(wǎng)絡(luò)的輸入母剥,詞向量只是一種詞的表示方式,同樣適用于經(jīng)典的ML模型形导。具體請參考博客《DeepNLP的表示學習·詞嵌入來龍去脈·深度學習(Deep Learning)·自然語言處理(NLP)·表示(Representation)》
2.2 glove
likewise.
四. 特征選擇處理
- 特征選擇
在文本挖掘與文本分類的有關(guān)問題中环疼,常采用特征選擇方法。原因是文本的特征一般都是單詞(term)朵耕,具有語義信息炫隶,使用特征選擇找出的k維子集,仍然是單詞作為特征憔披,保留了語義信息等限,而特征提取則找k維新空間爸吮,將會喪失了語義信息。
在解決一個實際問題的過程中望门,選擇合適的特征或者構(gòu)建特征的能力特別重要形娇。這成為特征選擇或者特征工程。特征選擇時一個很需要創(chuàng)造力的過程筹误,更多的依賴于直覺和專業(yè)知識桐早,并且有很多現(xiàn)成的算法來進行特征的選擇。 對于一個語料而言厨剪,我們可以統(tǒng)計的信息包括文檔頻率和文檔類比例哄酝,所有的特征選擇方法均依賴于這兩個統(tǒng)計量, 目前祷膳,文本的特征選擇方法主要有:DF, MI, IG, CHI陶衅,WLLR,WFO六種。
1)DF(Document Frequency)
2)MI(Mutual Information)
3)IG(Information Gain)
4)CHI(Chi-square)
5)WLLR(Weighted Log Likelihood Ration)
具體地不過多地贅述直晨,網(wǎng)絡(luò)有資料搀军,可以查閱相關(guān)論文。還有這些:WET(文檔證據(jù)權(quán)重)勇皇,OI罩句,CC(相關(guān)系數(shù))等常用的特征選擇。除此之外還可以利用LDA進行特征優(yōu)化敛摘。 - 特征降維(非必須)
對于文本類的數(shù)據(jù)挖掘項目门烂,基本不考慮降維的問題。
具體地有這些:LDA(線性特征抽刃忠)屯远,PCA(主成分分析),F(xiàn)A(因子分析)拖叙,SVD(奇異值分解)氓润,NMF(非負矩陣分解),LSI或者LSA(潛在語義分析) - 劃分訓練集薯鳍、測試集
可以使用sklearn將數(shù)據(jù)集進行分類咖气,便于訓練,也可以分為訓練集挖滤、驗證集崩溪、測試集,訓練集進行數(shù)據(jù)訓練斩松,驗證集進行具體的調(diào)參工作伶唯,在測試集上進行測試
五. 模型訓練
經(jīng)過上面幾步處理后的數(shù)據(jù)我們得到了常規(guī)的廣義特征數(shù)據(jù)結(jié)構(gòu),我們所要做的就是將這些特征喂入學習模型惧盹,然后適用于心得測試數(shù)據(jù)集乳幸,最后得到結(jié)果瞪讼。
對于各種算法內(nèi)部的原理和實現(xiàn),本文并不打算深入探討粹断。在機器學習算法庫趨于成熟的今天符欠,無論是在單機還是分布式甚至GPU集群上,所有你需要做的就是調(diào)用和調(diào)參即可瓶埋。因此希柿,在條件允許的情況下,建議盡可能多的在各種數(shù)據(jù)集上測試不同算法养筒,并且記錄其在各項指標上的效果曾撤,從而清楚地了解各種算法的特點。
下表總結(jié)了各個常用分類算法在中文文本分類情景下的對比情況晕粪,可供參考挤悉。
*注:TextCNN和LSTM模型的訓練一般需要通過GPU加速。
事實上分類算法并沒有絕對的好壞之分兵多,在合適的場合才用適當?shù)乃惴ú攀顷P(guān)鍵尖啡。如果是在線分類場景,那么預測速度較快的算法應(yīng)該成為首選剩膘;如果需要快速迭代,那么訓練速度快且調(diào)參難度小的算法更合適盆顾;若不考慮時間開銷怠褐,那么嘗試對多個模型進行集成(Ensemble)是最常用的提升分類效果的方法。
- 模型訓練學習
對于文本分類問題您宪,我們可以采用KNN奈懒,SVM,Naive Bayes宪巨,決策樹磷杏,GBDT,當然捏卓,直接上xgboost也是杠杠滴极祸。
對于文本聚類問題,可選擇K-means怠晴,agent遥金,divided,DBSCAN 等模型蒜田。 - 模型評估
當然最后也需要對模型進行必要的評估稿械,以讓模型optimized。
關(guān)于評價指標冲粤,一般最先想到的就是分類準確率(Precision)美莫,但準確率并不是全部页眯。如果一個分類模型的準確率很高而召回率很低(Recall),那么反而意味著模型沒能把其他本該預測出來的類別給預測出來厢呵。這常常在兩種情況下發(fā)生:
一是在非均衡樣本中餐茵,模型由于學習不到足夠的小類的特征而傾向于把大部分小類樣本預測為大類類別,雖然預測為小類的部分準確率較高述吸,但是更多的小類樣本卻沒有被召回忿族。面對這種情況,應(yīng)該關(guān)注小類類別的F1值情況蝌矛,即準確率與召回率調(diào)和平均值道批;
二是在多標簽分類中,如果一個模型偏向于保守入撒,那么其可能只對某個多標簽的樣本預測出最有把握的一個標簽隆豹,雖然保證了預測準確性,但是仍然沒有召回其它的有效標簽茅逮。此時璃赡,可以適當降低內(nèi)部的二元分類器的預測閾值。如假設(shè)原來只有預測得分高于0.5的候選標簽被輸出献雅,則將閾值降低到0.3時可以得到更多的預測標簽碉考,從而提高分類的召回率。
具體有這些指標可以參考:
2.1 保持挺身、隨機二次抽樣侯谁、交叉驗證、自助法
2.2 準確率章钾,錯誤率墙贱,精確度,召回率
2.3 ROC曲線贱傀、AUC曲線惨撇。