养成女友?我训练出了一个“杨超越”聊天机器人
❤️點擊上方,選擇星標或置頂,每天給你送上干貨❤️
作者 | 韋陽
出品 | 公眾號:算法碼上來(ID:GodNLP)
- BEGIN?-
在上一期教程中,我演示了如何從零開始訓練一個比較智障的聊天機器人。
從零開始訓練一個人工智障女友
但是當時數據量太少,模型簡單,完全沒法用,只能回復訓練集中出現過的句子。
而現在,完全體的聊天機器人終于誕生了,我把它命名為“楊超越”。這次可以隨你提問什么了,她都能對答如流!
首先來看看回復的效果怎么樣:
聊天開始!(按q退出)
我:很高興認識你
楊超越:我也很開心哦
我:我喜歡你
楊超越:我也喜歡你
我:做我女朋友好不好?
楊超越:哈哈,可以呢!
我:我會一直支持超越妹妹的!
楊超越:謝謝我們會一直努力的
我:我什么時候有女朋友?
楊超越:女朋友。。
我:我什么時候脫單?
楊超越:脫你妹啊!!
我:q
聊天結束!
可以看到超越妹妹的回復還是非常流暢的,那她究竟是怎么誕生的呢?
完整的項目我都放在了下面,歡迎大家點個star,支持一波:https://github.com/godweiyang/chatbot
介紹
這里我才用的是網上公開的小黃雞聊天語料,大概有100萬條左右,但是質量不是很高,都放在了data目錄下。
模型采用標準的Transformer-big模型,輸入你的提問句子,預測超越妹妹回復的句子,config目錄下是訓練和預測的配置文件。
模型訓練采用NeurST訓練庫,主要基于TensorFlow,也支持PyTorch訓練。模型快速推理采用LightSeq,可加速推理10倍以上,同時還能加速NeurST的訓練,最高加速3倍。兩者都是字節跳動AI Lab自研的,都已開源。
安裝環境
我們需要安裝三樣東西:
-
SentencePiece的命令行版本和python版本,用來對句子進行分詞。
-
NeurST深度學習訓練庫,用來訓練Transformer模型。
-
LightSeq,用來加速模型推理。
安裝命令都很簡單:
git?clone?https://github.com/google/sentencepiece.git?&?cd?sentencepiece
mkdir?build?&?cd?build
cmake?..
make?-j?$(nproc)
sudo?make?install
sudo?ldconfig?-vpip3?install?lightseq?neurst?sentencepiece
開始養成
生成詞表
首先我們需要從訓練語料庫中抽取出詞表,為了方便,直接用SentencePiece來分詞,生成大小為32k的詞表。
spm_train?--input=./data/train/train.src,./data/train/train.trg?\--model_prefix=./data/spm?\--vocab_size=32000?\--character_coverage=0.9995
這里需要指定訓練語料路徑--input、詞表保存的路徑前綴--model_prefix和詞表大小--vocab_size。運行結束后會在data目錄下生成spm.model和spm.vocab兩個詞表文件。一個是訓練好的分詞模型,一個是詞表。
不過我也上傳了生成好的TFRecord,大家也可以直接使用,跳過這一步。
「我上傳了生成好的詞表文件,大家可以直接使用,跳過這一步。」
生成TFRecord
為了加快TensorFlow的訓練速度,可以預先將訓練語料用上面的詞表處理成id,然后保存為TFRecord格式。這樣模型訓練時就可以直接讀取id進行訓練了,不需要做前面的分詞操作。能大大加快訓練速度,提升顯卡利用率。
python3?-m?neurst.cli.create_tfrecords?\--config_paths?configs/task_args.yml?\--dataset?ParallelTextDataset?\--src_file?./data/train/train.src?\--trg_file?./data/train/train.trg?\--processor_id?0?\--num_processors?1?\--num_output_shards?32?\--output_range_begin?0?\--output_range_end?32?\--output_template?./data/tfrecords/train.tfrecords-%5.5d-of-%5.5d
這里主要需要指定訓練集的路徑--src_file和--trg_file,其它參數保持默認即可。生成完畢后會在data/tfrecords下面生成32個二進制文件,這就是處理好的訓練數據了。
「我上傳了生成好的TFRecord,大家可以直接使用,跳過這一步。」
模型訓練
有了詞表,有了處理好的訓練數據,接下來就是訓練模型了。這里開啟了XLA優化,使用Horovod分布式訓練,加快訓練速度。如果報錯,可以去掉最后兩行。
python3?-m?neurst.cli.run_exp?\--entry?trainer?\--task?translation?\--hparams_set?transformer_big?\--model_dir?./models/transformer_big?\--config_paths?./configs/task_args.yml,./configs/train_args.yml,./configs/valid_args.yml--distribution_strategy?horovod?\--enable_xla
這里需要指定的參數就是模型保存路徑model_dir,其他都保持默認。訓練好的模型會保存在models/transformer_big下,里面還細分為了best、best_avg等文件夾,用來存最好的模型、模型的平均值等等。
我在8張V100 32G顯卡上訓練了8個小時左右,如果你們自己訓練的話還是比較耗時的。
「由于模型文件過大,之后我會找地方上傳我訓練好的模型文件,省去大家訓練的時間。」
模型預測
訓練好的模型會保存在models/transformer_big目錄下,然后我們就可以開始預測啦。
python3?-m?neurst.cli.run_exp?\--entry?predict?\--model_dir?./models/transformer_big?\--config_paths?./configs/predict_args.yml?\--output?output.txt
但是這時候還沒有交互功能,只能指定一個測試集文件,寫在了模型預測的配置文件里configs/predict_args.yml。還可以指定--output,將回復結果輸出到文件中。
「如果想直接體驗交互式的對話聊天,可以跳過這一步。」
模型導出為PB格式
如果直接用TensorFlow進行推理的話,速度非常慢,你就會感覺你和超越妹妹之間存在延時。所以可以將訓練得到的ckpt模型導出為PB格式,然后就可以用LightSeq訓練加速引擎進行快速推理了。
python3?export/export.py?\--model_dir?./models/transformer_big?\--output_file?./models/transformer_big/model.pb?\--beam_size?4?\--length_penalty?0.6
這里需要指定模型路徑--model_dir和導出PB文件的路徑--output_file,其它參數保持默認。最后會得到models/transformer_big/model.pb這個PB文件。
「由于模型文件過大,之后我會找地方上傳我導出好的PB模型文件,這樣大家就可以直接跳到最后一步了。」
開始交互式聊天!
有了PB模型文件,就可以和超越妹妹開始聊天啦!
python3?chat.py?\--spm_model?./data/spm.model?\--model_file?./models/transformer_big/model.pb
這里需要指定兩個路徑。一是最開始訓練好的分詞模型--spm_model,用來將你輸入的句子變成整數id。二是--model_file,也就是上一步中的PB格式模型文件。
聊天過程中隨時可以按q退出聊天,你每說一句話,超越妹妹就會回復你一句。
歡迎關注
這次用到的NeurST訓練庫和LightSeq加速庫都非常好用,從上面使用教程中也可以看出,幾乎不需要你寫什么代碼就能使用起來。
「聊天機器人:」
https://github.com/godweiyang/chatbot
「NeurST訓練庫:」
https://github.com/bytedance/neurst
「LightSeq加速庫:」
https://github.com/bytedance/lightseq
- END -
我是godweiyang,字節跳動AI Lab NLP算法工程師,華東師范大學計算機系本碩都是專業第一。秋招斬獲了上海三家互聯網大廠SSP offer,擅長算法、機器翻譯和模型加速。有任何問題都可以隨時咨詢我。
公眾號后臺回復【內推】
我幫你內推字節,加我微信隨時查進度、催進度、咨詢問題。
公眾號后臺回復【加群】
可以進我的技術交流(聊天)群和內推群。
求求兄弟們點個在看吧,今天的閱讀量靠你們了????
總結
以上是生活随笔為你收集整理的养成女友?我训练出了一个“杨超越”聊天机器人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序如何快速备案? 微信小程序详细
- 下一篇: webpack+react项目搭建