NLP-Tools

摘要

本文提供并介紹一個(gè)NLP模型工具箱初澎,能夠完成“分類”屹逛,“序列標(biāo)注”疾渣,“文本匹配”和“文本生成”這四種常見(jiàn)的NLP任務(wù),每類任務(wù)都提供多種模型供用戶進(jìn)行使用冗茸,用戶只需要按照規(guī)范準(zhǔn)備訓(xùn)練數(shù)據(jù)席镀,使用本工具箱就可以訓(xùn)練得到模型,并且可以直接使用本框架提供的java客戶端調(diào)用wpai平臺(tái)獲取預(yù)測(cè)結(jié)果(離線訓(xùn)練和在線預(yù)測(cè)需要用戶手工執(zhí)行夏漱,本框架會(huì)提供“在線預(yù)測(cè)”中預(yù)測(cè)文件的解析代碼)豪诲,用戶無(wú)需任何編碼工作。

前言

NLP有四類常見(jiàn)的任務(wù)挂绰,分別是分類屎篱,序列標(biāo)注,文本匹配和文本生成葵蒂,在實(shí)際應(yīng)用中交播,這四類任務(wù)能夠解決大多數(shù)場(chǎng)景的問(wèn)題。
目前為止深度學(xué)習(xí)模型的構(gòu)建還是基于一些基礎(chǔ)的模塊践付,比如rnn秦士,cnn,transformer等永高。上述四類常見(jiàn)的任務(wù)隧土,底層都需要對(duì)輸入進(jìn)行編碼,并且這些任務(wù)的底層編碼器基本都可以共用命爬。因此曹傀,我們提供了一套工具,對(duì)這四類任務(wù)常用到的模型進(jìn)行拆解饲宛,把相同的模塊進(jìn)行了封裝皆愉,抽象成了一個(gè)統(tǒng)一的框架,對(duì)外提供統(tǒng)一的接口艇抠。
NLP-Tools具有如下的特點(diǎn):

  1. 用戶無(wú)需編碼幕庐。對(duì)每種任務(wù),我們定義了標(biāo)準(zhǔn)的輸入文件格式练链,并提供標(biāo)準(zhǔn)的輸出格式翔脱,用戶只需要按照規(guī)范準(zhǔn)備訓(xùn)練數(shù)據(jù),就可以直接使用本框架提供的java客戶端調(diào)用wpai平臺(tái)獲取預(yù)測(cè)結(jié)果媒鼓,用戶不需要任何編碼工作届吁。
  2. 模型訓(xùn)練簡(jiǎn)單。使用者只需要改變配置即可改變模型結(jié)構(gòu)和訓(xùn)練方式绿鸣,不需要改變代碼疚沐。
  3. 多種模型可選。每個(gè)任務(wù)潮模,我們都提供了多種業(yè)界最常見(jiàn)的模型亮蛔,對(duì)于同一個(gè)任務(wù),同一份數(shù)據(jù)集擎厢,用戶可以跑多個(gè)模型比較效果究流,然后選擇最好的模型辣吃。
  4. 簡(jiǎn)單使用wpai平臺(tái)。 NLP-Tools提供導(dǎo)出saved_model的功能芬探,“離線訓(xùn)練”后可以直接在wpai平臺(tái)進(jìn)行部署(提供“在線預(yù)測(cè)”中預(yù)測(cè)文件的解析代碼神得,用戶不用自己編寫),并且提供java客戶端調(diào)用wpai平臺(tái)獲取預(yù)測(cè)結(jié)果偷仿。
  5. 可以進(jìn)行單條數(shù)據(jù)測(cè)試哩簿。提供單條數(shù)據(jù)測(cè)試的功能,讓使用者更直觀地感受模型的訓(xùn)練效果酝静。

下面會(huì)分別介紹每種基本任務(wù)节榜,最后介紹NLP-Tools工具的架構(gòu)和使用方式。

文本分類任務(wù)

文本分類任務(wù)是NLP中最常見(jiàn)也最實(shí)用的任務(wù):對(duì)于給出的文本别智,我們來(lái)判斷這條文本所屬的類別宗苍。

文本分類任務(wù)架構(gòu)如下:


classification.png

其中encoder是對(duì)輸入text進(jìn)行編碼,生成表示text的vec亿遂,然后接一層全連接層浓若,最后跟一層softmax,計(jì)算出每個(gè)label的概率蛇数。本工具集成的模型有cnn挪钓,rnn,transformer耳舅,bert和albert(后續(xù)會(huì)集成進(jìn)更多的分類模型)碌上。bert在各種NLP任務(wù)中都表現(xiàn)得非常出色,但是由于模型結(jié)構(gòu)復(fù)雜浦徊,線上推理耗時(shí)較長(zhǎng)馏予。albert使用了參數(shù)共享的方法,但是在bert的基礎(chǔ)上減少了隱藏層維度盔性,并減少了層數(shù)霞丧,使得推理速度加快。

序列標(biāo)注任務(wù)

常用的序列標(biāo)注任務(wù)包括:分詞冕香,命名實(shí)體識(shí)別和詞性標(biāo)注蛹尝。其中命名實(shí)體識(shí)別最為常用,指的是識(shí)別出文本中具有特定意義的實(shí)體悉尾,比如人名突那,地名或者專有名詞。

序列標(biāo)注任務(wù)架構(gòu)如下:


labeling.png

其中encoder是對(duì)輸入text進(jìn)行編碼构眯,生成表示text的vec愕难,然后對(duì)vec使用crf進(jìn)行解碼,生成解碼序列。對(duì)于序列標(biāo)注任務(wù)來(lái)說(shuō)猫缭,深度學(xué)習(xí)里常用的模型有bilstm+crf葱弟,idcnn+crf,transformer+crf饵骨,bert+crf翘悉,本框架均有集成。

語(yǔ)義匹配任務(wù)

文本匹配任務(wù)居触,即對(duì)于用戶輸入的query,找到與query語(yǔ)義上最匹配的doc老赤。比如對(duì)于網(wǎng)頁(yè)搜索轮洋,query是用戶輸入,doc是所有的網(wǎng)頁(yè)抬旺;對(duì)于智能客服來(lái)說(shuō)弊予,query是用戶輸入的問(wèn)題,doc是所有的標(biāo)準(zhǔn)問(wèn)題开财。對(duì)于文本匹配任務(wù)汉柒,通常會(huì)抽象為:判斷兩個(gè)輸入text1和text2是否相似(0表示不相似,1表示相似)责鳍。
序列標(biāo)注任務(wù)架構(gòu)如下:


matching.png

語(yǔ)義匹配任務(wù)目前有三種常用的模型架構(gòu):

  1. representation-based 類模型碾褂,思路是基于 Siamese 網(wǎng)絡(luò),提取文本整體語(yǔ)義再進(jìn)行匹配历葛。上圖中表示為encoder->matching正塌,不需要interaction。
  2. interaction-based 類模型恤溶,思路是捕捉直接的匹配信號(hào)(模式)乓诽,將詞間的匹配信號(hào)作為灰度圖,再進(jìn)行后續(xù)建模抽象咒程。上圖中表示為encoder->interaction->matching鸠天。
  3. bert類模型,思路是對(duì)text1和text2直接建模帐姻,進(jìn)行分類稠集。上圖中表示為Bert-2->matching,其中Bert-2表示Bert的第二種訓(xùn)練任務(wù)卖宠。
    本框架目前只集成了representation-based類和bert類模型巍杈,后續(xù)會(huì)集成進(jìn)來(lái)interaction-based 類模型。

文本生成

序列生成是自然語(yǔ)言處理里面很重要的一個(gè)任務(wù):對(duì)于特定的輸入扛伍,生成自然語(yǔ)言筷畦。比如,輸入可以是圖片時(shí),輸出是對(duì)圖片的描述鳖宾;輸入是一句話時(shí)吼砂,輸出是這句話的回應(yīng)。本項(xiàng)目中的文本生成鼎文,輸入和輸出都是文本膳凝。目前常見(jiàn)的序列生成任務(wù)模型基本都是encoder-decoder結(jié)構(gòu)的網(wǎng)絡(luò),比如rnn化借,transformer和GPT陶舞。

序列標(biāo)注任務(wù)架構(gòu)如下:


seq2seq.png

目前本工具只集成了rnn模型做文本生成,后續(xù)會(huì)集成進(jìn)來(lái)transformer和GPT撑帖。

NLP-Tools介紹

1. 整體架構(gòu)介紹

通過(guò)上述對(duì)四種任務(wù)的介紹蓉坎,我們可以看出四種任務(wù)的encoder層可以共用,只是每種任務(wù)的decoder層各有不同胡嘿,結(jié)構(gòu)如下:


NLP.png

2. 使用方式

在深度學(xué)習(xí)中蛉艾,訓(xùn)練一個(gè)模型一般需要兩類參數(shù),一類是模型參數(shù)衷敌,用來(lái)設(shè)置模型的結(jié)構(gòu)勿侯,比如lstm有多少層,cnn卷積核的大小等缴罗;另一類是訓(xùn)練參數(shù)助琐,比如學(xué)習(xí)率,訓(xùn)練集路徑瞒爬,訓(xùn)練的epoch數(shù)量等弓柱。在本工具中,模型參數(shù)我們使用配置文件侧但,訓(xùn)練參數(shù)我們使用命令行矢空。用戶只需要對(duì)兩類參數(shù)進(jìn)行配置就可以直接訓(xùn)練,不需要修改任何代碼禀横。

下面定義了四種任務(wù)訓(xùn)練數(shù)據(jù)的輸入格式屁药,用戶只需要按照要求提供訓(xùn)練數(shù)據(jù),借助NLP-TOOLS工具柏锄,就可以在wpai平臺(tái)直接進(jìn)行離線訓(xùn)練酿箭,訓(xùn)練完之后在wpai平臺(tái)進(jìn)行“在線預(yù)測(cè)”部署,NLP-TOOLS工具提供了java版的scf客戶端趾娃,可以讓用戶直接調(diào)用“在線預(yù)測(cè)”部署的模型缭嫡,獲取輸出。

下面會(huì)分別介紹輸入文件格式定義抬闷,模型輸出定義妇蛀,然后介紹下wpai平臺(tái)詳細(xì)操作流程耕突。

2.1 輸入輸出

classification任務(wù):
輸入文件格式定義:

sentence[SEP]label

labeling任務(wù)輸入文件格式定義:
其中char1-char3是sentence1的字,label1-label3是char1-char3對(duì)應(yīng)的BIO標(biāo)注评架,char和label之間用空格分隔眷茁;其中char4-char7是sentence2的字,label4-label7是char4-char7對(duì)應(yīng)的BIO標(biāo)注纵诞。sentence1和sentence2之間用\n 分隔上祈。

# sentence1
char1 label1
char2 label2
char3 label3

# sentence2
char4 label4
char5 label5
char6 label6
char7 label7

matching任務(wù)輸入文件格式定義:

sentence1[SEP]sentence2[SEP]label

seq2seq任務(wù)輸入文件格式定義:

sentence1[SEP]sentence2

2.2 詳細(xì)操作

(1) 離線訓(xùn)練

按照如下方式配置wpai就可以直接進(jìn)行訓(xùn)練。

mkdir -p /workspace/model && hadoop fs -get /home/hdp_teu_dia/guesslike/user/chenlu17/wpai/nlp-tools/python-core . && cd python-core && 
python run.py --task_name=classification 
    --model_name=transformer 
    --config_file=grocery/config/transformer_config.json 
    --do_train=true 
    --do_eval=true 
    --do_export=true 
    --do_predict_single=false 
    --data_dir=grocery/jd_comments_emotions.out 
    --middle_dir=grocery/data 
    --vocab_file=grocery/vocab.txt 
    --max_seq_length=40 
    --train_batch_size=32 
    --learning_rate=5e-4 
    --num_train_epochs=5.0 
    --output_dir=/workspace/model 
    --config_labels=grocery/labels.yml 
    --init_checkpoint_path= 
    --re_convert_tfrecord=true
  • task_name:從classification浙芙,labeling登刺,matching和seq2seq四種模型中選一個(gè)
  • config_file:模型配置文件路徑
  • do_export:是否導(dǎo)出pb文件
  • init_checkpoint_path:預(yù)訓(xùn)練文件的路徑

(2) 在線預(yù)測(cè)

本項(xiàng)目提供了wpai在線預(yù)測(cè)解析的jar包,并提供客戶端scf的調(diào)用代碼茁裙。

客戶端scf調(diào)用的輸入輸出定義如下:

java-client.png

client目錄下的文件是客戶端調(diào)用文件塘砸,每個(gè)文件提供main函數(shù)提供直接調(diào)用,只需要java文件中的TASK_ID即可晤锥。
impl目錄下的文件是預(yù)測(cè)解析文件,用戶只需要把PredictiOnline后面的任務(wù)改為自己的taskid廊宪,并打成jar包即可使用矾瘾。

3. demo頁(yè)面

對(duì)于每個(gè)任務(wù)本文都訓(xùn)練了一個(gè)模型,然后提供web頁(yè)面來(lái)調(diào)用箭启。

3.1 classification任務(wù)

classification-web.png
  • 測(cè)試地址:http://10.126.86.69:9966/ailab/classification?text=剛買來(lái)就壞了壕翩,再也不想要了
  • 數(shù)據(jù)集:京東商品評(píng)論情感分類
  • 模型:transformer
  • result中的NEG表示負(fù)情感的概率,POS表示正情感的概率

3.2 labeling任務(wù)

labeling-web.png
  • 測(cè)試地址:http://10.126.86.69:9966/ailab/labeling?text=我在去年七月份曾經(jīng)去過(guò)中國(guó)的北京
  • 數(shù)據(jù)集:98年人民日的命名實(shí)體數(shù)據(jù)集傅寡,標(biāo)注了時(shí)間(TIM)放妈,地點(diǎn)(LOC),人物(PER)和機(jī)構(gòu)(ORG)
  • 模型:transformer+crf
  • result表示輸入text的字對(duì)應(yīng)的BIO序列荐操,從中我們看到識(shí)別出來(lái)了時(shí)間去年七月份芜抒,地點(diǎn)中國(guó)北京

3.3 matching任務(wù)

matching-web.png
  • 測(cè)試地址:http://10.126.86.69:9966/ailab/matching?text1=找工作網(wǎng)站哪個(gè)好?&text2=用哪個(gè)網(wǎng)站找工作比較好啊
  • 數(shù)據(jù)集:LCQMC(大規(guī)模中文問(wèn)題匹配)數(shù)據(jù)集
  • 模型:雙transformer(representation-based結(jié)構(gòu))
  • result中的NEG表示text1和text2不相似的概率托启,POS表示相似的概率

3.4 seq2seq任務(wù)

seq2seq-web.png

后續(xù)計(jì)劃

  1. 分別詳細(xì)介紹每種任務(wù)宅倒,包括常用模型,評(píng)測(cè)指標(biāo)屯耸,常用數(shù)據(jù)集等拐迁。并且會(huì)挑選一種數(shù)據(jù)集,使用NLP-Tools工具評(píng)測(cè)該數(shù)據(jù)集在多種模型上的效果對(duì)比疗绣。
  2. 完善每種任務(wù)的模型類別线召,跟進(jìn)業(yè)界最新的模型。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末多矮,一起剝皮案震驚了整個(gè)濱河市缓淹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖割卖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件前酿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡鹏溯,警方通過(guò)查閱死者的電腦和手機(jī)罢维,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丙挽,“玉大人肺孵,你說(shuō)我怎么就攤上這事⊙詹” “怎么了平窘?”我有些...
    開(kāi)封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凳怨。 經(jīng)常有香客問(wèn)我瑰艘,道長(zhǎng),這世上最難降的妖魔是什么肤舞? 我笑而不...
    開(kāi)封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任紫新,我火速辦了婚禮,結(jié)果婚禮上李剖,老公的妹妹穿的比我還像新娘芒率。我一直安慰自己,他們只是感情好篙顺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布偶芍。 她就那樣靜靜地躺著,像睡著了一般德玫。 火紅的嫁衣襯著肌膚如雪匪蟀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天化焕,我揣著相機(jī)與錄音萄窜,去河邊找鬼。 笑死撒桨,一個(gè)胖子當(dāng)著我的面吹牛查刻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凤类,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼穗泵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谜疤?” 一聲冷哼從身側(cè)響起佃延,我...
    開(kāi)封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤现诀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后履肃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體仔沿,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年尺棋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了封锉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膘螟,死狀恐怖成福,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荆残,我是刑警寧澤奴艾,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站内斯,受9級(jí)特大地震影響蕴潦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜俘闯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一品擎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧备徐,春花似錦、人聲如沸甚颂。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)振诬。三九已至蹭睡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赶么,已是汗流浹背肩豁。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辫呻,地道東北人清钥。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像放闺,于是被迫代替她去往敵國(guó)和親祟昭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 本文上兩篇系列 NLP的巨人肩膀(上) NLP的巨人肩膀(中) 4.6 Bidirectional Encoder...
    weizier閱讀 6,427評(píng)論 1 22
  • 他們提供了一系列開(kāi)源的Java文本分析工具怖侦,包括分詞器(Word Segmenter)篡悟,詞性標(biāo)注工具(Part-O...
    重新出發(fā)_砥礪前行閱讀 544評(píng)論 0 0
  • 微軟亞洲研究院:NLP將迎來(lái)黃金十年 比爾·蓋茨曾說(shuō)過(guò)谜叹,「語(yǔ)言理解是人工智能皇冠上的明珠」。自然語(yǔ)言處理(NLP搬葬,...
    Quincy_baf0閱讀 1,127評(píng)論 0 11
  • 前面的文章主要從理論的角度介紹了自然語(yǔ)言人機(jī)對(duì)話系統(tǒng)所可能涉及到的多個(gè)領(lǐng)域的經(jīng)典模型和基礎(chǔ)知識(shí)荷腊。這篇文章,甚至之后...
    我偏笑_NSNirvana閱讀 13,906評(píng)論 2 64
  • 真正對(duì)美有追求的人急凰,對(duì)美的追求是沒(méi)有下限的女仰。 所以丑就被從美的背后揪出來(lái)了——?jiǎng)e以為你改個(gè)名字就沒(méi)人認(rèn)識(shí)了,你其實(shí)...
    wahow閱讀 358評(píng)論 0 0