rasa對話系統(tǒng)踩坑記(八)

如何將bert應(yīng)用在rasa-nlu-gao

BERT應(yīng)用到rasa-nlu-gao亩鬼,其實(shí)在rasa對話系統(tǒng)踩坑記(四)的開頭有簡單提到過山害。當(dāng)時(shí)覺得沒什么嘉涌,所以就略過了。但最近肖大神的bert-as-service項(xiàng)目改動(dòng)的比較大固惯,致使有朋友反饋現(xiàn)在BERT的component跑不了了梆造,所以今天將bert-as-service更新到了最新的版本和最新的方法,這兒做個(gè)簡單的總結(jié)。具體的demo可以參照rasa_chatbot_cn镇辉。

BERT

BERT這個(gè)深水炸彈一經(jīng)引爆屡穗,在nlp領(lǐng)域反響劇烈。幾乎席卷了nlp的所有領(lǐng)域忽肛。如果用一句話形容BERT的出現(xiàn)村砂,一切過往,皆為序章屹逛。

那當(dāng)然作為rasa-nlu的資深玩家础废,當(dāng)然不能錯(cuò)過,所以早在一個(gè)月前我就加上去了罕模。然后最近根據(jù)bert-as-service這個(gè)項(xiàng)目的更新做了調(diào)整评腺。

bert-as-service

想要將bert-as-service用起來,首先需要將service和client下載下來淑掌。

pip install bert-serving-server==1.6.0  # server
pip install bert-serving-client==1.6.0  # client, independent of `bert-serving-server`

然后需要下載一個(gè)Pre-trained BERT Model蒿讥,再啟動(dòng)一個(gè)BERT服務(wù)

bert-serving-start -model_dir /tmp/chinese_L-12_H-768_A-12/ -num_worker=4

對應(yīng)的bert-serving-start的參數(shù)參見bert-as-service

rasa_nlu_bert_finetune(增加@2019-01-11)

之前在rasa-nlu-gao中使用bert訓(xùn)練,是用的google開源的中文model(chinese_L-12_H-768_A-12)抛腕,而并沒有將finetune加上去芋绸。最近將這一功能加了上去,代碼傳送rasa-bert-finetune担敌。主要是在run_classifier.py代碼里面加了RasaJsonProcessor function摔敛,代碼如下:

class RasaJsonProcessor(DataProcessor):
    def __init__(self):
        self.labels = set()

    def get_train_examples(self, data_dir):
        file_path = os.path.join(data_dir, "rasa_dataset_training.json")
        return self._create_examples(self._read_json(file_path), "train")

    def get_dev_examples(self, data_dir):
        file_path = os.path.join(data_dir, "rasa_dataset_testing.json")
        return self._create_examples(self._read_json(file_path), "dev")

    def get_labels(self):
        return list(self.labels) 

    def _create_examples(self, lines, set_type):
        examples = []
        data = lines['rasa_nlu_data']['common_examples']

        for (i, line) in enumerate(data):
          guid = "%s-%s" % (set_type, i)
          text_a = tokenization.convert_to_unicode(line['text'])
          label = tokenization.convert_to_unicode(line['intent'])
          self.labels.add(label)

          examples.append(InputExample(guid=guid, text_a=text_a, label=label))

        return examples

訓(xùn)練finetune前先要準(zhǔn)備好rasa json的訓(xùn)練數(shù)據(jù),train為rasa_dataset_training.json全封,dev為rasa_dataset_testing.json马昙,這只是命名的問題。訓(xùn)練完成之后售貌,需要在bert-as-server命令行中加上tuned_model_dir這個(gè)參數(shù)即可给猾,比如:

bert-serving-start -model_dir ./chinese_L-12_H-768_A-12/ -num_worker=4 -tuned_model_dir ./rasa_model_output/

這樣的話疫萤,之后使用bert_vectors_featurizer調(diào)用就會(huì)是finetune之后的model了颂跨。就是如此簡單 :)

bert_vectors_featurizer

我在rasa-nlu-gao中增加了bert_vectors_featurizer組件,并已發(fā)布扯饶,請pip install rasa-nlu-gao至最新版本恒削。如名字所示,bert_vectors_featurizer組件只是提供word embedding featurizer.后面可以接其他的分類器尾序,這里用的是intent_classifier_tensorflow_embedding組件钓丰,當(dāng)然你也可以自己加個(gè)全連接和softmax分類。具體的配置如下:

language: "zh"

pipeline:
- name: "tokenizer_jieba"
- name: "bert_vectors_featurizer"
  ip: '172.16.10.46'
  port: 5555
  port_out: 5556
  show_server_config: True
  timeout: 10000
- name: "intent_classifier_tensorflow_embedding"

- name: "ner_crf"
- name: "jieba_pseg_extractor"
  • ip: 指的是service的ip地址
  • port: 指的是從客戶端傳到服務(wù)端數(shù)據(jù)的端口每币,需要和服務(wù)端設(shè)置的一致
  • prot_out: 指的是將結(jié)果從服務(wù)端傳到客戶端的端口携丁,需要和服務(wù)端一致
  • show_server_config: 是否在第一次連接時(shí)候展示服務(wù)端的config信息
  • timeout: 設(shè)置客戶端接收服務(wù)端操作的過期時(shí)間

intent_classifier_tensorflow_embedding_bert

bert_vectors_featurizer說的是將bert應(yīng)用在詞嵌入方面,然后在意圖分類這塊可以接rasa-nlu官網(wǎng)的intent_classifier_tensorflow_embedding組件。當(dāng)然這里的intent_classifier_tensorflow_embedding_bert組件是同組的飛龍同學(xué)加的梦鉴。該組件是將bert_vectors_featurizer之后的輸出向量做了全連接+softmax李茫。具體的配置可以參考如下:

language: "zh"

pipeline:
- name: "tokenizer_jieba"
- name: "bert_vectors_featurizer"
  ip: '172.16.10.46'
  port: 6555
  port_out: 6556
  show_server_config: True
  timeout: 10000
- name: "intent_classifier_tensorflow_embedding_bert"

- name: "ner_crf"
- name: "jieba_pseg_extractor"

除了這兩個(gè)模型外,還可以自定義其他的復(fù)雜點(diǎn)的分類模型肥橙,也歡迎大家fork該項(xiàng)目魄宏,并給我們提pull request,一起完善該模型存筏。當(dāng)然也歡迎大家star該項(xiàng)目宠互。

大概就這么多,其實(shí)用法很簡單椭坚。原創(chuàng)文章予跌,轉(zhuǎn)載請說明出處

Recommand

liveportrait
novelling

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市善茎,隨后出現(xiàn)的幾起案子匕得,更是在濱河造成了極大的恐慌,老刑警劉巖巾表,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汁掠,死亡現(xiàn)場離奇詭異,居然都是意外死亡集币,警方通過查閱死者的電腦和手機(jī)考阱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鞠苟,“玉大人乞榨,你說我怎么就攤上這事〉庇椋” “怎么了吃既?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長跨细。 經(jīng)常有香客問我鹦倚,道長,這世上最難降的妖魔是什么冀惭? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任震叙,我火速辦了婚禮,結(jié)果婚禮上散休,老公的妹妹穿的比我還像新娘媒楼。我一直安慰自己,他們只是感情好戚丸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布划址。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夺颤。 梳的紋絲不亂的頭發(fā)上对人,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音拂共,去河邊找鬼牺弄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宜狐,可吹牛的內(nèi)容都是我干的势告。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抚恒,長吁一口氣:“原來是場噩夢啊……” “哼咱台!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俭驮,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤回溺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后混萝,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體遗遵,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年逸嘀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了车要。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崭倘,死狀恐怖翼岁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情司光,我是刑警寧澤琅坡,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站残家,受9級特大地震影響榆俺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜跪削,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一谴仙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碾盐,春花似錦、人聲如沸揩局。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至付枫,卻和暖如春烹玉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阐滩。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工二打, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掂榔。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓继效,卻偏偏與公主長得像,于是被迫代替她去往敵國和親装获。 傳聞我的和親對象是個(gè)殘疾皇子瑞信,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355