AI实时质检-基于语义分类模型的实现

         AI实时质检一直是个比较热门的话题,主要的实现方式有两种:一种是基于规则的模型;一种是基于深度学习的模型。基于规则的模型有通用的缺陷:规则冲突和维护困难。基于深度学习的模型,则可以很好的规避这个缺陷,且全召回、高精度。下面介绍基于深度语义模型实现的过程。语料数据由于涉及信息安全,不能提供,仅提供具体的技术实现过程。

        首先是模型的选择,我们选择百度语义模型ernie_tiny,选择tiny只是为了训练的效率,有资源的朋友的可以选择标准模型ernie,效果会更好。

        语义数据格式说明:语义包含两列分布是违规分类和违规话术。数据集10270条,其中训练集7000条,验证集1000条,测试集1000条,预测集1270条。

labels=['误导混淆产品概念',
 '冒充其它岗位人员',
 '销售误导',
 '引导客户退保',
 '恶意销售误导',
 '保障升级',
 '出现不礼貌词语',
 '出现极致词语',
 '夸大产品稀缺性',
 '理赔时效介绍不规范',
 '开场白不规范',
 '消极挽单',
 '禁止不客观对比',
 '夸大条款引用错误话术',
 '误导钱存到虚构账户',
 '利用法律法规虚假宣传']
#id标签转换
id2label= {i:str(label) for i,label in enumerate(labels)}
label2id= {str(label):i for i,label in enumerate(labels)}
id_list =[i for i,_ in enumerate(label2id)]

import paddlehub as hub
#选择模型
model = hub.Module(name='ernie_tiny', version='2.0.1', task='seq-cls', num_classes=16, label_map=id2label)

自定义数据集实现类

from typing import Dict, List, Optional, Union, Tuple
from paddlehub.datasets.base_nlp_dataset import TextClassificationDataset
from paddlehub.text.bert_tokenizer import BertTokenizer
from paddlehub.text.tokenizer import CustomTokenizer
#参考百度源代码,继承文本分类数据集
class QualityInspectCorp(TextClassificationDataset):

    def __init__(self, tokenizer: Union[BertTokenizer, CustomTokenizer], max_seq_len: int = 128, mode: str = 'train'):
        base_path = os.path.join(".", "QualityInspect")
        if mode == 'train':
            data_file = 'train.tsv'
        elif mode == 'test':
            data_file = 'test.tsv'
        else:
            data_file = 'dev.tsv'
        super().__init__(
            base_path=base_path,
            tokenizer=tokenizer,
            max_seq_len=max_seq_len,
            mode=mode,
            data_file=data_file,
            label_list=id_list,
            is_file_with_header=True)

生成数据集

train_dataset = QualityInspectCorp(tokenizer=model.get_tokenizer(), max_seq_len=120, mode='train')
dev_dataset = QualityInspectCorp(tokenizer=model.get_tokenizer(), max_seq_len=120, mode='dev')
test_dataset = QualityInspectCorp(tokenizer=model.get_tokenizer(), max_seq_len=120, mode='test')

模型训练及评估

import paddle
optimizer = paddle.optimizer.Adam(learning_rate=5e-5, parameters=model.parameters())
trainer = hub.Trainer(model, optimizer, checkpoint_dir='test_ernie_text_cls')
#每个epoch保存一次训练好的模型,最佳模型保存在best_model下。
trainer.train(train_dataset, epochs=3, batch_size=32, eval_dataset=dev_dataset, save_interval=1)

# 在测试集上评估当前训练模型
trainer.evaluate(test_dataset, batch_size=32)

训练及评估可视化结果

AI实时质检-基于语义分类模型的实现_第1张图片

AI实时质检-基于语义分类模型的实现_第2张图片

 模型预测

#载入最佳模型进行预测
import paddlehub as hub
best_model = hub.Module(
    name='ernie_tiny',
    version='2.0.1',
    task='seq-cls',
    load_checkpoint='./test_ernie_text_cls/best_model/model.pdparams',
    label_map=id2label
    )

#预测数据集转换
data=[[pre_dataset.examples[i].text_a] for i in range(0,len(pre_dataset.examples))]
data

results = best_model.predict(data, max_seq_len=128, batch_size=1, use_gpu=False)
for idx, text in enumerate(data):
    print('Data: {} \t Label: {}'.format(text[0], results[idx]))

预测结果:正确率0.994,召回率:1,精确率:0.99。

你可能感兴趣的:(文本分类,人工智能,分类,深度学习)