NLP Framework開源方案梳理

轉自:EddyLiu2017

寫在最前面

在這個日新月異的信息時代,海量數據的積累,計算能力的不斷提升,機器學習尤其是深度學習的蓬勃發展,使得人工智能技術在不同領域煥發出蓬勃的活力。自己經歷了嵌入式開發,移動互聯網開發,目前從事自然語言處理算法開發工作。從工程軟件開發到自然語言處理算法開發,希望通過這個系列的文章,能夠由淺入深,通俗易懂的介紹自然語言處理的領域知識,分享自己的成長,同大家一起進步。

問題描述

新的項目開啓時,一般會經歷如下的流程:

  • 業務需求梳理
  • 算法方案選擇
  • 模型實現:選擇開源方案,或自己實現
  • 模型訓練:數據清洗、模型訓練(使用訓練集)
  • 最優模型選擇:依據驗證集結果,選擇最優模型
  • 模型評測:依據測試集結果,對模型進行評測
  • 模型優化:本模型調優,或選擇新的模型
  • 模型服務上線

而在實際的項目開發中,存在如下的問題:
1模型實現問題
模型實現一般會選擇開源方案,或自己編碼實現。自己編碼實現開發和調試成本高。直接選擇開源方案,會面臨開發環境不統一,編譯問題,代碼結果和可靠性難以保證等問題;
2模型訓練和評測問題
該階段會設計到數據清洗,輸入讀入,數據迭代器設計,數據預處理,詞向量訓練與準備,分詞,文本轉索引,
標籤ont-hot表示,訓練集/驗證集/測試集劃分,訓練過程最優模型選擇,模型評測(準確度A、精確度P、召回率R、F1值等),數據分析(結果分析,混淆矩陣分析,ROC/AUC分析),Tensorboard結果查看等。由於該部分設計的流程和步驟較多,自己編碼開發和調試工作量大,而開源方案很多步驟和組件並不全面。
3 模型優化問題
除了在現有模型的基礎上進行局部優化外,還會選擇新的模型。如果選擇新的模型,則會重新自己編碼實現或選擇開源方案,會再次經歷前面提到的問題1(模型實現問題)和問題2(模型訓練和評測問題)。
4 模型服務上線問題
模型服務上線,同模型的訓練和預測和類似,但又不完全相同。模型上線需要和模型訓練一樣的預處理,詞向量,分詞,文本轉索引等步驟,但不需要模型的測評。同時,模型上線要求只能包含模型的訓練文件,
而不能包括模型的代碼。通常需要編寫專門的代碼用於模型服務上線。
一般來說,針對上面的問題,公司都會有一個統一的NLP算法框架,
一方面,統一模型的實現、評測和上線流程
另一方面,框架自身包含很多現成的模型,便於業務在算法落地方面的快速驗證
大多數公司並不開源自己的NLP算法框架,但開源社區NLP開源框架還是蠻多的,這裏做一個統一的梳理。

針對對話系統的Framework

1 DeepPavlov

運行依賴:TensorFlow/Keras
支持功能:

支持功能

項目地址:
https://github.com/deepmipt/DeepPavlov

2 ParlAI

運行依賴:Pytorch
支持功能:

支持功能

項目地址:https://github.com/facebookresearch/ParlAI

3 Rasa

運行依賴:Python
支持功能:純任務型對話
項目地址:https://www.rasa.com/

4 OpenDial

運行依賴:Java
支持功能:對話系統
描述:主要基於傳統方法,深度網絡較少涉及。
項目地址:https://github.com/plison/opendial

通用NLP Framework

1 Intel NLP-Architect

運行依賴:TensorFlow
支持功能:

支持功能

項目地址:http://nlp_architect.nervanasys.com/

2 AllenNLP

運行依賴:Pytorch
支持功能:

支持功能

項目地址:
https://allennlp.org/

3 PyText

運行依賴:Pytorch
支持功能:

支持功能

項目地址:
https://pytext-pytext.readthedocs-hosted.com/en/latest/#

NLP基礎依賴組件項目(提供pre-train模型)

1 Stanford CoreNLP

運行依賴:Java
支持功能:

支持功能

項目地址:
https://stanfordnlp.github.io/CoreNLP/index.html

2 Stanford NLP

運行依賴:Pytorch
支持功能:

支持功能

項目地址:
https://stanfordnlp.github.io/stanfordnlp/tokenize.html

3 spaCy

運行依賴:Python
支持功能:

支持功能

項目地址:
https://spacy.io/

小結

本文梳理了實際的業務算法落地開發過程,並提出了其中存在的問題,和解決方案。對當前開源的NLP框架做了整理,可以依據自身的需要開發自己的NLP算法框架,規範開發流程,提升業務落地效率。同時,也可以直接從開源方案中獲取自己需求的算法實現模塊。後續有新的開源框架方案,會持續整理進來。

      </div>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章