【机器学习】人工智能典型应用:班组工作日志转绩效类型
應用背景:
通信運檢一班績效的機制是利用每天的工作日志,將工作內容按照《一線班組工作積分制考核實施方案(20190108修訂)》中的工作基本額定標準庫進行對應,就可以知道每天的工分,每月工分相加就是每位員工的核心工作積分。部分工作日志如下圖所示。
其中最有價值的部分是工作內容這一列。平時班組的績效員根據自己的經驗將工作內容和《工作基本額定標準庫》進行人工一一對應,部分標準庫如下圖所示。
此人工過程相當費時費力,如果能用人工智能解決工作內容和工作基本額定標準庫的智能對應,將大大提升績效評定工作的效率。
數據集和標簽:
選取一班今年1月的數據進行實驗:
將數據人工打上標簽,標簽一定不能打錯,否則會影響模型最終的判斷。平時普通的人工方法其實就是人工打標簽的過程,此過程非常耗時,亟待優化。打好標簽的數據如下圖所示。
只需要建立深度學習模型將這個對應關系學習出來,就可以利用深度學習模型對沒有打標簽的日志表,自動打上標簽。以前1小時的工作量可以縮短為5分鐘(登陸人工智能平臺,上傳數據,運行,得到結果),大大提升績效評定工作的效率。
人工智能自然語言處理介紹:
自然語言處理的核心是通過編程設計讓系統模仿人的智能去處理各項工作,這是使得新時期的文本分類工作開始朝著自動化、智能化方向發展的關鍵。
從數學的角度來看,文本分類工作其實只不過是一個映射的過程。可以一對一的映射,把一些被表明類別的文本信息映射到現有的種類當中,完成分類工作。也可以一對多的映射,比如,有些文本當中既有這種類別的特征,也含有其他類別的分類特征,因此需要將同一個文本分別存放在不同的類別中。所以在文本分類中,可以看作是一個集合的值映射到一個矩陣上。將相同類別的文本劃入同一個矩陣當中,就完成了基礎的文本分類工作。
模型選擇:
本次項目選用的模型是百度PaddleHub中的ERNIE模型。
ERNIE通過建模海量數據中的詞、實體及實體關系,學習真實世界的語義知識。相較于BERT學習原始語言信號,ERNIE直接對先驗語義知識單元進行建模,增強了模型語義表示能力,以Transformer為網絡基本組件,以Masked Bi-Language Model和Next Sentence Prediction為訓練目標,通過預訓練得到通用語義表示,再結合簡單的輸出層,應用到下游的NLP任務,在多個任務上取得了SOTA的結果。其可用于文本分類、序列標注、閱讀理解等任務。預訓練數據集為百科類、資訊類、論壇對話類數據等中文語料。
啟動項目:
在ai studio中新建項目,上傳打好標簽的數據和沒打標簽需要預測的數據。
日志轉績效類型.xlsx中的數據如下圖所示。
預測.xlsx中的數據如下圖所示。
程序編寫:
導包:
import csv import paddle import pandas as pd import paddlehub as hub from 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['預測結果'] = result data.to_csv("a.csv",index = None,sep = ',')在生成的a.csv中即可得到利用模型去預測的結果。
本次實驗結果如下圖所示:
肉眼可見準確率近乎100%,想要達到完全100%的效果只需要找出預測錯誤的項,將正確的標簽加入日志轉績效類型.xlsx文件重新訓練模型,即可達到準確率100%效果。
項目總結:
在平時工作中,文本分類的場景非常普遍,只要大家善于發現場景,重視數據的收集和提煉,再結合人工智能技術,就可以達到事半功倍的效果,效率呈幾何級增長。
希望各位同事留意梳理應用場景,提升數據收集處理意識。
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載黃海廣老師《機器學習課程》視頻課黃海廣老師《機器學習課程》711頁完整版課件本站qq群554839127,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【机器学习】人工智能典型应用:班组工作日志转绩效类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10死机频繁怎么解决
- 下一篇: Vue里引入three.js