【机器学习】人工智能典型应用:班组工作日志转绩效类型
应用背景:
通信运检一班绩效的机制是利用每天的工作日志,将工作内容按照《一线班组工作积分制考核实施方案(20190108修订)》中的工作基本额定标准库进行对应,就可以知道每天的工分,每月工分相加就是每位员工的核心工作积分。部分工作日志如下图所示。

其中最有价值的部分是工作内容这一列。平时班组的绩效员根据自己的经验将工作内容和《工作基本额定标准库》进行人工一一对应,部分标准库如下图所示。

此人工过程相当费时费力,如果能用人工智能解决工作内容和工作基本额定标准库的智能对应,将大大提升绩效评定工作的效率。
数据集和标签:
选取一班今年1月的数据进行实验:


只需要建立深度学习模型将这个对应关系学习出来,就可以利用深度学习模型对没有打标签的日志表,自动打上标签。以前1小时的工作量可以缩短为5分钟(登陆人工智能平台,上传数据,运行,得到结果),大大提升绩效评定工作的效率。
人工智能自然语言处理介绍:
自然语言处理的核心是通过编程设计让系统模仿人的智能去处理各项工作,这是使得新时期的文本分类工作开始朝着自动化、智能化方向发展的关键。
从数学的角度来看,文本分类工作其实只不过是一个映射的过程。可以一对一的映射,把一些被表明类别的文本信息映射到现有的种类当中,完成分类工作。也可以一对多的映射,比如,有些文本当中既有这种类别的特征,也含有其他类别的分类特征,因此需要将同一个文本分别存放在不同的类别中。所以在文本分类中,可以看作是一个集合的值映射到一个矩阵上。将相同类别的文本划入同一个矩阵当中,就完成了基础的文本分类工作。
模型选择:
本次项目选用的模型是百度PaddleHub中的ERNIE模型。
ERNIE通过建模海量数据中的词、实体及实体关系,学习真实世界的语义知识。相较于BERT学习原始语言信号,ERNIE直接对先验语义知识单元进行建模,增强了模型语义表示能力,以Transformer为网络基本组件,以Masked Bi-Language Model和Next Sentence Prediction为训练目标,通过预训练得到通用语义表示,再结合简单的输出层,应用到下游的NLP任务,在多个任务上取得了SOTA的结果。其可用于文本分类、序列标注、阅读理解等任务。预训练数据集为百科类、资讯类、论坛对话类数据等中文语料。


启动项目:
在ai studio中新建项目,上传打好标签的数据和没打标签需要预测的数据。

日志转绩效类型.xlsx中的数据如下图所示。

预测.xlsx中的数据如下图所示。

程序编写:
导包:
import csvimport paddleimport pandas as pdimport paddlehub as hubfrom paddlehub.datasets.base_nlp_dataset import InputExample,TextClassificationDataset
数据导入:
DATA_DIR = "./work"data = pd.read_excel("./work/日志转绩效类型.xlsx")data.to_csv("./work/train1.csv",index=None)test = pd.read_excel("./work/预测.xlsx")test.to_csv("./work/test1.csv",index=None)
模型建立:
classes = list(data.iloc[:,1].unique()) #把第二列的类型找出来,也就是最后要输出的类别model = hub.Module(name="ernie", task="seq-cls", num_classes = len(classes))#ERNIE通过建模海量数据中的词、实体及实体关系,学习真实世界的语义知识。#task任务名称,可为seq-cls文本分类任务#num_classes:分类任务的类别数
数据加载:
class classifi(TextClassificationDataset):label_list = classesdef __init__(self, tokenizer, max_seq_len: int = 128, mode: str = "train"):if mode == "train":data_file = "train1.csv"elif mode == "test":data_file = "test1.csv"else:data_file = "dev.csv"super().__init__(base_path=DATA_DIR,data_file=data_file,tokenizer=tokenizer, max_seq_len=max_seq_len, mode=mode,is_file_with_header=True,label_list=self.label_list)def _read_file(self, input_file, is_file_with_header: bool = False) :with open(input_file,'r',encoding='UTF-8') as f:examples = []seq_id =0reader = csv.reader(f,delimiter = ',')header = next(reader) if is_file_with_header else Nonefor line in reader:example = InputExample(guid=seq_id, text_a=line[0],label=line[1])seq_id += 1examples.append(example)return examplestrain_dataset = classifi(model.get_tokenizer(),mode = 'train',max_seq_len=128)
选择优化器和运行配置:
optimizer = paddle.optimizer.Adam(parameters=model.parameters(),learning_rate=1e-5)trainer = hub.Trainer(model,optimizer=optimizer,checkpoint_dir='./check_point',use_gpu=True)
模型训练:
trainer.train(train_dataset,epochs=20,batch_size=10,save_interval=4)
acc即是accuracy准确度,准确度高达96%,没到100%的原因是训练的数据集不够大,模型还没有看完所有的情况。也就是只要他见过的类似题他就一定解得出,没过类似题的,就有小概率会解错。
模型预测:
#预测label_map = {idx:label for idx,label in enumerate(classifi.label_list)}data = pd.read_csv("./work/test1.csv",delimiter=',',header=None)data.columns = ['预测输入']#得到预测数据中的字符串组成列表text = [[i[0]] for i in data.values ]#读取模型model_train = hub.Module(name="ernie", task="seq-cls",load_checkpoint = "./check_point/epoch_20/model.pdparams",label_map = label_map)result=model_train.predict(text,max_seq_len = 128, batch_size=1,use_gpu = True)#data:待预测数据#max_seq_len:模型处理文本的最大长度#batch_size:模型批处理大小#use_gpu:是否使用gpu,默认为False。对于GPU用户,建议开启use_gpudata['预测结果'] = resultdata.to_csv("a.csv",index = None,sep = ',')
在生成的a.csv中即可得到利用模型去预测的结果。

本次实验结果如下图所示:

在平时工作中,文本分类的场景非常普遍,只要大家善于发现场景,重视数据的收集和提炼,再结合人工智能技术,就可以达到事半功倍的效果,效率呈几何级增长。
希望各位同事留意梳理应用场景,提升数据收集处理意识。
往期精彩回顾 本站qq群554839127,加入微信群请扫码:
