沉慮 阿里機(jī)器智能
小嘰導(dǎo)讀:作為國內(nèi)領(lǐng)先的出行大數(shù)據(jù)公司,高德地圖擁有眾多的用戶和合作廠商,這為高德帶來了海量的出行數(shù)據(jù),同時(shí)通過各個(gè)渠道,這些用戶也在主動(dòng)地為我們提供大量的反饋信息,這些信息是需要我們深入挖掘并作用于產(chǎn)品的,是高德地圖不斷進(jìn)步和持續(xù)提升服務(wù)質(zhì)量的重要手段。
本文將主要介紹針對(duì)用戶反饋的文本情報(bào),如何利用機(jī)器學(xué)習(xí)的方法來提高大量用戶數(shù)據(jù)的處理效率、盡可能實(shí)現(xiàn)自動(dòng)化的解題思路。
1.背景
先來解釋一下本文中出現(xiàn)的專有名詞。
情報(bào):是一種文本、圖片或視頻等信息,用來解決高德地圖生產(chǎn)或者導(dǎo)航中的具體問題,本質(zhì)上是指與道路或交通相關(guān)的知識(shí)或事實(shí),通過一定空間和時(shí)間通知給特定用戶。
用戶反饋:是指用戶借助一定的媒介,對(duì)所使用的軟件等提供一些反饋信息,包括情報(bào)、建議和投訴等。
典型的用戶反饋類型和選項(xiàng)如下圖所示:
2.問題及解法
用戶反饋的方式可以通過手機(jī)的 Amap 端、PC 端等進(jìn)行上報(bào),上報(bào)時(shí)選擇一些選擇項(xiàng)以及文本描述來報(bào)告問題,以下是一個(gè)用戶反饋的示例,其中問題來源、大類型、子類型和道路名稱是選擇項(xiàng),用戶描述是填寫項(xiàng),一般為比較短的文本。這些也是我們可以使用的主要特征。
每個(gè)用戶在上報(bào)了問題之后,均希望在第一時(shí)間內(nèi)問題能夠得到解決并及時(shí)收到反饋。但是高德每天的用戶反饋量級(jí)在幾十萬,要想達(dá)到及時(shí)反饋這個(gè)目標(biāo)非常的不容易。
針對(duì)這些用戶反饋信息,當(dāng)前的整體流程是先采用規(guī)則進(jìn)行分類,其中與道路相關(guān)的每條反饋都要經(jīng)過人工核實(shí),找到用戶上報(bào)的問題類型和問題發(fā)生的地點(diǎn),及時(shí)更新道路數(shù)據(jù),作用于導(dǎo)航。
具體一條反饋的操作需要經(jīng)過情報(bào)識(shí)別、情報(bào)定位、情報(bào)驗(yàn)證等環(huán)節(jié):
1) 情報(bào)識(shí)別主要是判斷問題類型即給情報(bào)打標(biāo)簽
分析用戶上報(bào)的信息包括問題來源、大類型、子類型和用戶描述等
查看上傳的圖片資料,包括手機(jī)自動(dòng)截圖和用戶拍照
2) 情報(bào)定位主要是找到問題發(fā)生的位置信息即定位坐標(biāo)
分析用戶反饋問題時(shí)戳的位置點(diǎn)即戳點(diǎn)的有效性
查看用戶上報(bào)問題時(shí)車輛行駛的位置即自車位置
分析用戶使用高德軟件過程中的規(guī)劃和實(shí)走軌跡等日志信息
3) 情報(bào)驗(yàn)證:通過以上兩步確定了情報(bào)標(biāo)簽和位置坐標(biāo),此環(huán)節(jié)需要驗(yàn)證情報(bào)標(biāo)簽(含道路名稱)
分析影像和大數(shù)據(jù)熱力圖或路網(wǎng)基礎(chǔ)數(shù)據(jù)
查看用戶上傳的資料和采集的多媒體圖片資料
整個(gè)業(yè)務(wù)處理流程如下圖所示:
在處理用戶反饋問題整個(gè)過程秉持的原則是完全相信用戶的問題存在。若用戶上報(bào)的信息不足以判斷問題類型和問題發(fā)生地點(diǎn),則會(huì)盡量通過用戶規(guī)劃和實(shí)走軌跡等日志信息進(jìn)行推理得出偏向用戶的結(jié)論。
目前整個(gè)用戶反饋問題處理流程存在的主要問題有:規(guī)則分發(fā)準(zhǔn)確率低,人工核實(shí)流程復(fù)雜、技能要求高且效率低,去無效誤殺嚴(yán)重等。
為了解決以上問題,我們希望引入機(jī)器學(xué)習(xí)的方法,以數(shù)據(jù)驅(qū)動(dòng)的方式提高作業(yè)能力。在目標(biāo)具體實(shí)現(xiàn)的探索過程中,我們首先對(duì)業(yè)務(wù)進(jìn)行拆解及層級(jí)化分類,其次使用算法來替代規(guī)則進(jìn)行情報(bào)分類,再次工程化拆解人工核實(shí)作業(yè)流程為情報(bào)識(shí)別、情報(bào)定位和情報(bào)驗(yàn)證等步驟,實(shí)現(xiàn)單人單技能快速作業(yè),最后將工程化拆解后的情報(bào)識(shí)別步驟使用算法實(shí)現(xiàn)其自動(dòng)化。
3.機(jī)器學(xué)習(xí)解題
3.1 業(yè)務(wù)梳理與流程層級(jí)化拆解
原始的用戶反饋問題經(jīng)由規(guī)則分類后,再進(jìn)行人工情報(bào)識(shí)別、定位和驗(yàn)證,最終確認(rèn)問題及其所在是屬于近百種小分類項(xiàng)中的哪一個(gè),進(jìn)而確定上一級(jí)分類以及整個(gè)層級(jí)的對(duì)應(yīng)關(guān)系。
由此可以看出,整個(gè)問題處理流程只有一個(gè)步驟,處理過程相當(dāng)復(fù)雜,對(duì)人工的技能要求很高,且效率低下。而且一千個(gè)人眼中就有一千個(gè)哈姆雷特,個(gè)人的主觀性也會(huì)影響對(duì)問題的判斷。
針對(duì)這種情況,我們對(duì)原有業(yè)務(wù)流程進(jìn)行梳理和拆解,希望能夠利用機(jī)器學(xué)習(xí)和流程自動(dòng)化等方式解決其中某些環(huán)節(jié),提升整體問題處理的效率。
首先進(jìn)行有效情報(bào)和無效情報(bào)的分類即去無效,接著將整個(gè)流程拆解為六個(gè)層級(jí),包括業(yè)務(wù)一級(jí)、業(yè)務(wù)二級(jí)、業(yè)務(wù)三級(jí)、情報(bào)識(shí)別、情報(bào)定位和情報(bào)驗(yàn)證。
如上圖所示,拆解后的前三個(gè)級(jí)別為情報(bào)分類環(huán)節(jié),只有后三個(gè)級(jí)別需要部分人工干預(yù),其他級(jí)別均直接自動(dòng)化處理。這樣通過層級(jí)化、自動(dòng)化和專人專職等方法極大地簡(jiǎn)化了問題同時(shí)提高了效率。
3.2 業(yè)務(wù)與模型適配
我們可以看到用戶反饋中既有選擇項(xiàng)又有輸入項(xiàng),其中選擇項(xiàng)如問題來源等都是有默認(rèn)值的,需要點(diǎn)擊后選擇相應(yīng)細(xì)分項(xiàng),用戶不一定有耐心仔細(xì)選擇,有耐心的用戶可能會(huì)由于不知道具體分類標(biāo)準(zhǔn)而無法選擇正確的分類。而用戶描述,是需要用戶手動(dòng)輸入的內(nèi)容,是用戶表達(dá)真實(shí)意圖的主要途徑,是一條用戶反饋當(dāng)中最有價(jià)值的內(nèi)容。
用戶描述一般分為三種情況:無描述、有描述但無意義的、有描述且有意義的。前兩種稱之為無效描述,后一種稱之為有效描述。
根據(jù)業(yè)務(wù)拆解結(jié)果,業(yè)務(wù)流程第一步即為去無效,在這之后,我們將有效、無效描述的用戶反饋進(jìn)行區(qū)分,分別建立相應(yīng)的流程進(jìn)行處理。
1) 有效描述的用戶反饋,逐級(jí)分類,第一級(jí)分為數(shù)據(jù)、產(chǎn)品、轉(zhuǎn)發(fā)三類,其中產(chǎn)品和轉(zhuǎn)發(fā)兩類直接進(jìn)行自動(dòng)化處理,數(shù)據(jù)類別會(huì)在第二級(jí)中分為道路和專題,專題是指非道路類的限行、步導(dǎo)、騎行等。
2) 無效描述的用戶反饋,進(jìn)行同樣的分類,并走一樣的流程,但是樣本集和模型是不同的,并且最后沒有算法處理的步驟,直接走人工或者規(guī)則處理。
3) 最終根據(jù)實(shí)際業(yè)務(wù)需要進(jìn)行層層拆解后形成了下圖所示的業(yè)務(wù)與模型適配的結(jié)構(gòu)。
由以上分析可見,情報(bào)分類和情報(bào)識(shí)別均為多分類的文本分類問題,我們針對(duì)各自不同的數(shù)據(jù)特點(diǎn),進(jìn)行相應(yīng)的操作:
情報(bào)分類,每一級(jí)類別雖不同,但是模型架構(gòu)卻是可以復(fù)用的,只需要有針對(duì)性的做微小改動(dòng)即可。且有以前人工核實(shí)過(包含情報(bào)識(shí)別、情報(bào)定位、情報(bào)驗(yàn)證等過程)具有最終結(jié)果作為分類標(biāo)簽的歷史數(shù)據(jù)集作為真值,樣本集獲得相對(duì)容易。
情報(bào)識(shí)別,其分類標(biāo)簽是在情報(bào)驗(yàn)證之前的中間結(jié)果,只能進(jìn)行人工標(biāo)注,并且需要在保證線上正常生產(chǎn)的前提下,盡量分配人力進(jìn)行標(biāo)注,資源非常有限。所以我們先在情報(bào)分類數(shù)據(jù)集上做 Finetuning 來訓(xùn)練模型。然后等人工標(biāo)注樣本量積累到一定量級(jí)后再進(jìn)行情報(bào)識(shí)別上的應(yīng)用。
3.3 模型選擇
首先,將非結(jié)構(gòu)化的文本用戶描述表示成向量形式即向量空間模型,傳統(tǒng)的做法是直接使用離散特征 one-hot 表示,即用 tf-idf 值表示詞,維度為詞典大小。但是這種表示方式當(dāng)統(tǒng)計(jì)樣本數(shù)量比較大時(shí)就會(huì)出現(xiàn)數(shù)據(jù)稀疏和維度爆炸的問題。
為了避免類似問題,以及更好的體現(xiàn)詞語之間的關(guān)系如語義相近、語序相鄰等,我們使用 word embedding 的方式表示,即 Mikolov 提出的 word2vec 模型,此模型可以通過詞的上下文結(jié)構(gòu)信息,將詞的語義映射到一個(gè)固定的向量空間中,其在向量空間上的相似度可以表示出文本語義上的相似度,本質(zhì)上可以看作是語境特征的一種抽象表示。
其次,也是最重要的就是模型選擇,相對(duì)于傳統(tǒng)的統(tǒng)計(jì)學(xué)習(xí)方法復(fù)雜的特征工程步驟,深度學(xué)習(xí)方法更受青睞,NLP 中最常用的是循環(huán)神經(jīng)網(wǎng)絡(luò) RNN,RNN 將狀態(tài)在自身網(wǎng)絡(luò)中循環(huán)傳遞,相對(duì)于前饋神經(jīng)網(wǎng)絡(luò)可以接受更廣泛的時(shí)間序列結(jié)構(gòu)輸入,更好的表達(dá)上下文信息,但是其在訓(xùn)練過程中會(huì)出現(xiàn)梯度消失或梯度爆炸等問題,而長短時(shí)記憶網(wǎng)絡(luò) LSTM 可以很好的解決這個(gè)問題。
3.4 模型架構(gòu)
將每個(gè)用戶反饋情報(bào)的詞向量結(jié)果作為 LSTM 的輸入,接著將 LSTM 的最后一個(gè)單元的結(jié)果作為文本特征,與其他用戶選擇項(xiàng)問題一起 merge 后作為模型輸入,然后經(jīng)過全連接層后使用 softmax 作為輸出層進(jìn)行分類,得到的 0~1 之間的實(shí)數(shù)即為分類的依據(jù)。多分類的網(wǎng)絡(luò)架構(gòu)如下圖所示:
4.實(shí)戰(zhàn)經(jīng)驗(yàn)總結(jié)
理清業(yè)務(wù)邏輯、確定解題步驟、確認(rèn)樣本標(biāo)注排期并跑通了初版的模型后,我們覺得終于可以松一口氣,問題應(yīng)該已經(jīng)解決過半了,剩下的就是做做模型調(diào)參和優(yōu)化、坐等樣本積累,訓(xùn)練完模型就可以輕松上線了。
但實(shí)際情況卻是面臨著比預(yù)想更多的問題和困難,訓(xùn)練數(shù)據(jù)量不夠、單個(gè)模型效果不好、超參設(shè)置不理想等問題接踵而至,漫長而艱難的優(yōu)化和迭代過程才剛剛開始。
4.1 Fine-tuning
選定了模型之后,情報(bào)識(shí)別首先面臨的問題是樣本量嚴(yán)重不足,我們采用 Fine-tuning 的辦法將網(wǎng)絡(luò)上已經(jīng)訓(xùn)練過的模型略加修改后再進(jìn)行訓(xùn)練,用以提升模型的效果,隨著人工標(biāo)注樣本逐漸增加,在不同大小的數(shù)據(jù)集上都可以取得大約 3 個(gè)百分點(diǎn)的提升。
4.2 調(diào)參
模型的調(diào)參是個(gè)修煉內(nèi)功煉制金丹的過程,實(shí)際上取得的效果卻不一定好。我們一共進(jìn)行了近 30 組的調(diào)參實(shí)驗(yàn),得出了以下飽含血淚的寶貴經(jīng)驗(yàn):
1) 初始化,一定要做的,我們選擇 SVD 初始化
2) dropout 也是一定要用的,有效防止過擬合,還有 Ensemble的作用。對(duì)于 LSTM,dropout 的位置要放到 LSTM 之前,尤其是 bidirectional LSTM 是一定要這么做的,否則直接過擬合。
3) 關(guān)于優(yōu)化算法的選擇,我們嘗試了 Adam、RMSprop、SGD、AdaDelta 等,實(shí)際上RMSprop和Adam效果相差不多,但基于Adam可以認(rèn)為是RMSprop 和 Momentum 的結(jié)合,最終選擇了Adam。
4) batch size 一般從 128 左右開始調(diào)整,但并不是越大越好。對(duì)于不同的數(shù)據(jù)集一定也要試試 batch size為 64 的情況,沒準(zhǔn)兒會(huì)有驚喜。
5) 最后一條,一定要記住的一條,盡量對(duì)數(shù)據(jù)做 shuffle。
4.3 Ensemble
針對(duì)單個(gè)模型精度不夠的問題,我們采用 Ensemble 方式解決,進(jìn)行了多組試驗(yàn)后,最終選定了不同參數(shù)設(shè)定時(shí)訓(xùn)練得到的最好模型中的5個(gè)通過投票的方式做 Ensemble,整體準(zhǔn)確率比單個(gè)最優(yōu)模型提高 1.5 個(gè)百分點(diǎn)。
另外為了優(yōu)化模型效果,后續(xù)還嘗試了模型方面的調(diào)整比如雙向 LSTM 和不同的 Padding 方式,經(jīng)過對(duì)比發(fā)現(xiàn)在情報(bào)識(shí)別中差異不大,經(jīng)分析是每個(gè)用戶描述問題的方式不同且分布差異不明顯所致。
4.4 置信度區(qū)分
當(dāng)情報(bào)識(shí)別多分類模型本身的結(jié)構(gòu)優(yōu)化和調(diào)參都達(dá)到一定瓶頸后,發(fā)現(xiàn)模型最終的效果離自動(dòng)化有一定的差距,原因是特征不全且某些特征工程化提取的準(zhǔn)確率有限、類別不均衡、單個(gè)類別的樣本數(shù)量不多等。
為了更好的實(shí)現(xiàn)算法落地,我們嘗試進(jìn)行類別內(nèi)的置信度區(qū)分,主要使用了置信度模型和按類別設(shè)定閾值兩種辦法,最終選擇了簡(jiǎn)單高效的按類別設(shè)定閾值的方法。
置信度模型是利用分類模型的標(biāo)簽輸出結(jié)果作為輸入,每個(gè)標(biāo)簽的樣本集重新分為訓(xùn)練集和驗(yàn)證集做二分類,訓(xùn)練后得到置信度模型,應(yīng)用高置信的結(jié)果。
在置信度模型實(shí)驗(yàn)中,嘗試了 Binary 和 Weighted Crossentropy、Ensemble 的方式進(jìn)行置信度模型實(shí)驗(yàn),Weighted Crossentropy 的公式為:
為了避免溢出,將公式改為:
其中,表示:
實(shí)驗(yàn)的結(jié)果是 Binary 方式?jīng)]有明顯效果提升,Ensemble 在 95% 置信度上取得了較高的召回率,但是沒有達(dá)到 98% 置信度的模型。
借鑒了情報(bào)分類算法模型落地時(shí)按照各個(gè)類別設(shè)定不同 softmax 閾值的方式做高置信判斷即按類別設(shè)定閾值的方式,在情報(bào)識(shí)別中也使用類似的方法,取得的效果超過了之前做的高置信模型效果,所以最終選擇了此種方式,這部分可以很大地提高作業(yè)員的作業(yè)效率。同時(shí)為了減少作業(yè)員的操作復(fù)雜性,我們還提供了低置信部分的 top N 推薦,最大程度節(jié)省作業(yè)時(shí)間。
5. 算法效果及應(yīng)用成果
5.1 情報(bào)分類
算法效果:根據(jù)實(shí)際的應(yīng)用需求,情報(bào)分類算法的最終效果產(chǎn)品類準(zhǔn)確率 96% 以上、數(shù)據(jù)類召回率可達(dá) 99%。
應(yīng)用成果:與其他策略共同作用,整體自動(dòng)化率大幅提升。在通過規(guī)則優(yōu)化后實(shí)際應(yīng)用中取得的效果,作業(yè)人員大幅度減少,單位作業(yè)成本降低 4/5,解決了用戶反饋后端處理的瓶頸。
5.2 情報(bào)識(shí)別
算法效果:根據(jù)使用時(shí)高置信部分走自動(dòng)化,低置信走人工進(jìn)行標(biāo)注的策略,情報(bào)識(shí)別算法的最終效果是有效描述準(zhǔn)確率 96% 以上。
應(yīng)用成果:完成情報(bào)標(biāo)簽分類模型接入平臺(tái)后通過對(duì)高低置信標(biāo)簽的不同處理,最終提升作業(yè)人員效率 30% 以上。
6. 總結(jié)與展望
通過此項(xiàng)目我們形成了一套有效解決復(fù)雜業(yè)務(wù)問題的方法論,同時(shí)積累了關(guān)于 NLP 算法與業(yè)務(wù)緊密結(jié)合解題的實(shí)戰(zhàn)經(jīng)驗(yàn)。目前這些方法與經(jīng)驗(yàn)已在其他項(xiàng)目中很好的付諸實(shí)施,并且在持續(xù)的積累和完善中。在不斷提升用戶滿意度的前提下,盡可能的高效自動(dòng)化的處理問題,將產(chǎn)品的每一個(gè)細(xì)節(jié)爭(zhēng)取做到極致, 是我們前進(jìn)的原動(dòng)力和堅(jiān)持不懈的目標(biāo)。
阿里云千萬級(jí)架構(gòu)的構(gòu)建
資深架構(gòu)師在線分享
在阿里云如何構(gòu)建千萬級(jí)架構(gòu)?如何從單機(jī)原始階段,演變發(fā)展到分布式+大數(shù)據(jù)階段?再如何演變發(fā)展到微服務(wù) +Fast Data 階段?今天 16:00 - 17:00,阿里云資深架構(gòu)師“喬幫主”將通過直播解答,教你避坑!