現有一個傳統的工單系統,該系統並不是自建。工單系統天天會產生大量工單,須要較多人力專門作派發的相關工做,以將工單派發給對應處理人員。爲提高工做效率節約人力成本,同時也解放員工重複勞動,考慮對其進行智能改造。mysql
因爲並不是自建系統,因此要作智能化改造就涉及兩個方面:系統自動化和系統智能化。算法
系統自動化,自動化能解放雙手,做爲智能化的輔助手段。由於原工單系統上人機交互是經過瀏覽器的,因此係統的自動化其實主要就是實現自動操做,模擬人工操做各項功能。sql
有兩個方案:瀏覽器插件和自動化測試工具。考慮到瀏覽器插件方式到後面智能化與模型調用時比較麻煩,可優先考慮使用自動化測試工具。好比selenium。瀏覽器
系統智能化,能賦予決策能力,至關於大腦,決策完後再由系統自動化實施操做。就單單工單系統智能分發功能來講,主要就是根據工單歷史派發記錄,多維度特徵統計,學習一個模型能決策工單派發給某個員工比較合理。bash
須要作的是收集歷史工單數據以及關聯的派發給哪位員工(包括員工的屬性),樣本數據量要有保證,並且抽樣時工單時間能包含一年的數據,這樣能更好保證樣本分佈與真實數據分佈一直。網絡
同時爲了更好建模,能夠收集一線工做人員派單的常見規則。數據結構
由於實際分配時跟員工的屬性並無很強的關係,主要是須要跟進工單標題及內容來分發的,因此若是隻是單純地使用員工屬性做爲特徵並使用神經網絡做爲模型的話效果不好。併發
而若是直接對工單標題內容分詞並作詞向量處理,而後再做爲神經網絡的特徵通用效果也不好,這個緣由很明顯,維度災難,常見單詞隨便達萬或十萬級別。機器學習
以上方案行不通,其實還有一個很經典的處理方式,那就是計算文本之間的類似性。經過類似性的值來作決策,標題類似性加內容類似性。工具
根據歷史工單,咱們要先統計詞頻。注意這裏不必用逆文檔頻率,並且每一個員工實際上是有本身的詞雲的,統計員工各自的詞頻才更符合實際狀況。對於一個詞,不一樣的員工的詞頻是不同的,詞頻很高的說明平時正好就是作這類單詞相關的工做。此外,標題和內容的詞頻也應該分開統計,因此詞頻實際上是有三個維度:員工、問題、內容。
有了詞頻接下來的工做就好作了,詞頻直接映射到向量。有了向量,那麼經過向量空間模型及餘弦類似性即可計算文本之間的類似性。也就是說,對於一個新工單,我計算標題和歷史工單標題的類似性,而且計算內容和歷史工單內容的類似性,將二者合併,類似性最大的即是要找的工單。固然,實際狀況能夠設置一個閾值,超過閾值才認爲匹配成功。
from numpy import dot
from numpy.linalg import norm
if norm(vec1) * norm(vec2) != 0:
sim = float(dot(vec1, vec2) / (norm(vec1) * norm(vec2)))
else:
sim = 0
複製代碼
若是想要上生產系統,如今還有個性能問題,直接計算全部歷史工單的類似性性能至關低下。爲了符合在生產環境響應要求,引入全文搜索引擎。經過搜索引擎能夠減小大量無關的計算,而且能很好控制整體響應。
主要思路是將工單標題和內容進行index,匹配時先經過搜索引擎將相關內容標題search出來,接着再計算類似性。注意通常不要直接使用全文搜索引擎計算類似性,太粗糙,沒有正對性。並且方便使用word2vec或bert等模型算法,固然若是能寫一個引擎的話則能夠把全部工做都下沉到搜索引擎來作。
-------------推薦閱讀------------
個人開源項目彙總(機器&深度學習、NLP、網絡IO、AIML、mysql協議、chatbot)
跟我交流,向我提問:
歡迎關注: