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)

训练及评估可视化结果

 模型预测

#载入最佳模型进行预测
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。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
NC语义模型数据加工指的是将NC(Natural Language Processing,自然语言处理)语义模型所需的数据进行处理和准备的过程。NC语义模型是一种智能化的语言处理模型,可以解析和理解自然语言,并生成相应的语义。 数据加工是指对原始数据进行清洗、筛选、整合和转换等操作,以使其适用于特定的应用和算法。在NC语义模型中,数据加工是非常重要的环节。下面将就NC语义模型数据加工的工作内容进行详细说明。 首先,需要收集大量的语料数据作为训练集。这些语料数据可以来源于各种途径,例如网络上的文章、问答社区的对话、电子邮件等。收集的数据应该具有一定的覆盖性和多样性,以保证模型的泛化能力。 接下来,对原始数据进行清洗和预处理。清洗数据主要是去除噪声和冗余信息,例如HTML标签、特殊字符和停用词等。预处理数据包括分词、词性标注和命名实体识别等,以便于后续的特征工程和模型训练。 然后,进行数据的标注和注释工作。标注和注释是指给数据添加人工标签和语义注释,以便于模型学习和理解。标注可以包括问题和答案的对应关系、实体的类别和属性等。 最后,对加工后的数据进行分割和划分。一般将数据划分为训练集、验证集和测试集,用于模型的训练、调优和评估。 总之,NC语义模型数据加工是一个复杂而关键的过程,它直接影响着模型的性能和效果。只有经过充分和有效的数据加工,才能得到高质量和可靠的NC语义模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值