最近一年来一直在从事语言助手的开发,和自然语言处理方面的工作
最近刚出来效果最好的模型是bert的动态词向量,刷新了各个自然语言处理Task的成绩如QA,NER,CLASSIFICATION等
接下来就让我们实际来构建一个以bert为后端词向量的文本分类模型
1、首先安装腾讯开源的Bert-as-service模块
pip install bert-serving-server
pip install bert-serving-client
2、下载腾讯训练好的bert中文词向量模型
https://storage.googleapis.com/bert_models/2018_11_03/chinese_L-12_H-768_A-12.zip
3、将上面下载好的模型解压到D盘,然后通过bert-as-service模块加载该模型,并且对外提供restful接口形式
来进行词向量的动态嵌入结果的返回,由下图可见。模型已经成功加载,并且在5555端口提供服务
bert-serving-start -model_dir D:\chinese_L-12_H-768_A-12 -num_worker=1
4、在rasa_nlu中配置bert词向量的pipeline,还有bert分类模型的pipeline(一个两层网络,第一层102个全连接神经元,第二层256个神经元)。如果您不太清楚什么是Rasa_nlu建议参考次链接https://github.com/RasaHQ/rasa_nlu
language: "zh"
pipeline:
- name: "JiebaTokenizer"
- name: "BertVectorsFeaturizer"
ip: '127.0.0.1'
port: 5555
port_out: 5556
show_server_config: True
timeout: 10000
- name: "EmbeddingBertIntentClassifier"
- name: "SpacyNLP"
- name: "CRFEntityExtractor"
- name: "JiebaPsegExtractor"
5、构造训练数据,由于Rasa-nlu自动集成微软Luis平台,所以同样的词向量在微软Luis还是rasa_nlu上面都是通用的
{
"rasa_nlu_data": {
"regex_features": [],
"lookup_tables": [],
"common_examples": [
{
"entities": [],
"text": "2018年办理居住证的条件有哪些",
"intent": "居住证_办理_查询办理条件"
},
{
"entities": [],
"text": "2018年挂失社保卡的条件有哪些",
"intent": "社保卡_挂失_查询办理条件"
},
{
"entities": [],
"text": "30元够报失居住证嘛",
"intent": "居住证_挂失_查询收费标准"
},
{
"entities": [],
"text": "95后务工人员需要符合哪些要求才能退临时居住证",
"intent": "临时居住证_退回_查询办理条件"
},
{
"entities": [],
"text": "一共要花销多少可以成功开通新的社保卡",
"intent": "社保卡_开通_查询收费标准"
},
{
"entities": [],
"text": "一张居住证的发放需要哪些材料",
"intent": "居住证_领取_查询所需材料"
},
{
"entities": [],
"text": "一张居住证的续期需要哪些材料",
"intent": "居住证_签注_查询所需材料"
},
{
"entities": [],
"text": "一张居住证续期下来一共需要多少步",
"intent": "居住证_签注_查询办理流程"
},
{
"entities": [],
"text": "依据什么能补居住证",
"intent": "居住证_补卡_查询办理条件"
},
{
"entities": [],
"text": "依照哪些步骤可以办理居住证报失",
"intent": "居住证_挂失_查询办理流程"
},
{
"entities": [],
"text": "修改之前的社保卡身份证号时需要带着什么东西",
"intent": "社保卡事务_修改_查询所需材料"
}
],
"entity_synonyms": []
}
}
5、进行训练,整个训练过程大概需要3分钟
Python D:\GitHub\rasa_nlu\train.py -c sample_configs/config_embedding_bert_intent_classifier.yml --data data/examples/luis/SanofiBot-LuisApp-Chinese.json --path projects/bert_sanofi
7、加载训练好的模型进行文本分类
python D:\GitHub\rasa_nlu\server.py -c sample_configs/config_embedding_bert_intent_classifier.yml --path projects/bert_sanofi
8、通过Restful进口返回文本分类模型的结果
7、项目的链接如下:
https://github.com/weizhenzhao/rasa_nlu