從0到1構建新聞長文字分類系統

2021-08-27 08:17:01 字數 2659 閱讀 5629

新聞分類系統,顧名思義,就是對於一片新聞或者是一片文章,進行自動的分類,例如政治,財經,娛樂等等

從技術角度講,其實屬於自然語言處理中比較經典的文字分類問題。當然在乙個工業級別的分類系統當中,會遇到各種各樣的問題,例如語料優化,文字預處理,特徵抽取,模型選擇及融合,硬規則等一系列問題。本人有幸在國內某一線網際網路公司做過相關的工作,故做一些總結。

對於傳統的分類系統來講,就是如下這幾個模組,包括文字預處理,特徵抽取,特徵選擇,模型訓練等。但是對於乙個工業級的分類系統來說,這是遠遠不夠的。

更加詳細的分類模及每個模組的元件如下所示,將每個模組的結果都存入dataflow用於定位問題。規則干預系統可以短期處理模型解決不了的case。

文字預處理

文字預處理主要是指分詞(涉及到分詞粒度的選取),停留詞,高頻詞和低頻詞的過濾。值得注意的是,訓練時的處理流程和**時的處理流程要保持一致,否則很有可能出現訓練和測試分詞不一致的情況,從而影響整個分類系統的效能。

特徵抽取

特徵抽取主要是從新聞的標題,正文中提取出特徵,把新聞轉換成固定維度的向量

對於深度模型而言,可能不需要做特徵抽取的工作,端到端直接訓練即可。例如,fasttext,textcnn;

對於傳統的機器學習模型來說,特徵工程的質量會直接影響模型的分類效能;

在我的分類系統中,特徵抽取主要包含三個方面:

n-gram特徵,即如果是uni-gram,文字裡面每個單詞就是乙個特徵,如果是bi-gram,那麼文字裡面連續的兩個單詞也是乙個特徵。通常來講,一般是uni-gram+bi-gram。n如果很大的話,特徵會非常稀疏,導致特徵向量維度過大

實體歸一化特徵是指,對於某些實體,可以將其對映到乙個實體桶中,從而增加特徵的泛化效能。例如"花千骨" ->「娛樂_電視劇集」,「反恐精英」 ->"遊戲_射擊遊戲"等等。但有兩個問題是,很多實體有歧義,對於這種實體可以不將其歸一化,也可以根據上下文進行實體消歧(不在本文討論範圍內);第二個問題是實體歸一化依賴於人工運營,且需要不斷的更新,需要比較多的人力成本,但是對整個分類系統的改進也是非常明顯的。

人工特徵其實就是認為的設計一些規則,如果命中規則,那麼就補充特徵。相比於硬規則(命中規則就分到某個類別),更加平滑。

實際得到的特徵是以上三類特徵的級聯

特徵過濾及特徵選擇

特徵過濾:

卡方檢驗進行特徵選擇:

基分類器的選取及訓練

選用了四個模型fasttext, svm, pa, nb

模型融合策略

對於四個子模型,如果四個子模型或三個子模型**的結果一致,則直接投票處理;

如果是其他情況,則可以考慮使用xgboost進行模型融合,具體的融合方法就是,對於每個樣本來說,經過模型輸出乙個結果(可能是概率向量,即每個類別都對應的乙個概率,實際去概率最大的那個類別),也可以經過各種平滑轉換成概率向量。對於xgboost來說,輸入就是每個子模型的輸入的向量,輸出就是類別。

規則系統

規則系統簡單來說就是,當某個樣本滿足規則的時候,就將這個樣本分到某個類別,而忽略模型的分類結果。比較硬,一般用於最新的新聞,比如最近"延禧攻略"等等。這種新聞因為語料庫中沒有相似的樣本,所以分類很可能出錯,使用規則可以短期處理這個問題,但是長期來看,可以將這批最新的資料加到語料中,重新訓練模型。

需要注意的是:

模型打包上線,對外提供服務1. 新聞時效性問題

新聞的時效性問題很普遍,在乙個工業級的產品中,有專門的演算法去過濾過期的新聞。我們關心的是對於一些新的新聞,而且在訓練語料中沒有出現的特徵,該怎麼處理。短期可以用規則系統去解決。長期來講,就要構造新的訓練資料,和老訓練資料做一定的融合,再進行特徵抽取和特徵選擇,最後用總的資料重新訓練再上線即可。

實際操作的時候可以寫乙個總的離線訓練腳本,輸入檔案的路徑,輸出模型。指令碼中包含特徵抽取,模型訓練,模型融合,模型評估等步驟,這樣處理起來比較高效

2. **直掛

對於乙個feed流產品而言,很多的內容都是自**創造的,所以可以根據**的型別進行直掛。比如某個**是講nba的,那麼這個**的內容大概率都是體育類。

3. 訓練語料的分布及優化

4. debug資訊管理

乙個工業級別的分類系統當中,往往都需要分析badcase,如果系統只給出分類結果的話,很難去查錯。正確的姿勢應該是在系統的每個節點,都給出相關的資訊。比如每個子模型的每個結果,融合後模型的分類結果,是否命中**直掛系統,是否命中規則系統等等,對於樸素貝葉斯模型,可以給出每個單詞的權重。通過這種方式去分析badcase,可以直接找到錯誤的原因,提高效率.

這個不在本文討論範圍內,有興趣的同學可以自己去了解

文字分類(0) scrapy爬新浪滾動新聞

參考了 謝謝學長給我的去年他們的爬蟲 這基本上就是乙個從入門到差點放棄的故事。在最下面 這門課需要100萬的中文語料來做文字分類,所以還要自己爬一些。xpath沒有獲取到任何東西,看了下網頁的原始碼,才發現資料是由ajax獲取的 然後發現了api是 就決定直接爬介面了。返回的資料是下面這樣的 可能因...

基於字元「從0開始學習」的文字分類

2.二 精讀 3.三 實現 4.四 問題思索 1.文字分類簡介 2.文字分類的相關方法 1.文字分類簡介文字分類 文字分類就是根據將文字內容將其分到合適的類別 意義 文字分類是自然語言的基礎問題,可以用於資訊檢索 資訊過濾 郵件分類等任務。文字分類的發展 基於機器學習的文字分類 大致流程 輸入文字 ...

推薦系統從0到1 前言

自己在工作中做推薦系統也有不短的時間了,基本上把推薦系統的各個環節都接觸到並自己親自動手操作了一遍,但是並沒有完整的自己去實現一整套推薦系統,心裡感覺總是少了點什麼。程式設計師嘛,就算有現成的輪子,也想自己實現一套,這樣可以更好的了解其中的細節,查缺補漏,從而提公升自己。會定期更新 推薦系統從 0 ...