日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中篇 | 多轮对话机器之话题意图识别

發(fā)布時間:2024/2/28 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中篇 | 多轮对话机器之话题意图识别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.




引言

回顧一下自己參與的智能客服系統(tǒng)項目,從技術(shù)調(diào)研到游戲領(lǐng)域的對話文本數(shù)據(jù)分析和任務(wù)細分定義,再到建模調(diào)優(yōu)以及最后的運營優(yōu)化等整體流程的學(xué)習(xí),收獲良多。一般的智能客服系統(tǒng)包括三大模塊,具體系統(tǒng)結(jié)構(gòu)圖如下:

對話系統(tǒng)整體結(jié)構(gòu)圖


對于多輪任務(wù)型對話,首先需要理解用戶主要說了啥,怎么說的以及對話的邏輯流程,并借助于對業(yè)務(wù)的理解以及對話文本的數(shù)據(jù)分析,抽象出對用戶發(fā)言的語義理解定義,也即是語義理解模塊。本篇主要是講述意圖識別的技術(shù)知識。在我們的業(yè)務(wù)場景中,意圖細分成了2層的層級意圖結(jié)構(gòu),也即話題意圖以及在每個話題下的用戶行為意圖,也可以理解為每種話題意圖相當(dāng)于一個Chatbot。所以,話題意圖的識別效果對后續(xù)流程影響較大。? ? ? ?

? ? ? ?

話題意圖識別屬于文本分類任務(wù),在我們的游戲安全場景中,定義了7種話題類別,包括安全模式、被盜、失誤、封號、信用、舉報,以及常用性發(fā)言。對于常用的文本分類任務(wù),我們抽象出了一個通用的處理流程,從文本預(yù)處理,到尋找經(jīng)典話術(shù),也即是能覆蓋到大部分用戶發(fā)言的話術(shù);然后基于經(jīng)典話術(shù)人工打標,并根據(jù)文本相似性的方法來自動化擴展標簽數(shù)據(jù)集,構(gòu)成訓(xùn)練集合。這一構(gòu)建監(jiān)督訓(xùn)練數(shù)據(jù)集的方法,較適用于缺乏人力,又想更好地覆蓋原始數(shù)據(jù)的分布的情況。最后,基于各種特征抽取器構(gòu)建模型并調(diào)優(yōu)。其具體流程結(jié)構(gòu)如下圖,其中虛線部分是從數(shù)據(jù)和模型兩個層面不斷優(yōu)化分類效果,其中圖中紅色的2、3點是從數(shù)據(jù)層面來修正部分樣本的標簽以及獲取更多的標簽樣本,紅色的 1點是從模型結(jié)構(gòu)來優(yōu)化性能。

常見文本處理任務(wù)通用流程圖


上圖中的抽取經(jīng)典句子模塊的目的是使得經(jīng)典發(fā)言集合能夠覆蓋更多的用戶發(fā)言集合,做到以經(jīng)典話術(shù)代表絕大部分的語義。主要做法是基于主題模型、基于句子向量的無監(jiān)督聚類、基于文本向量相似性構(gòu)建的圖數(shù)據(jù)并結(jié)合PageRank和圖連通分量等方法的集成,能夠從上百萬的用戶發(fā)言中共同找出少量的代表性發(fā)言,其數(shù)量在幾千到1萬多。

上圖中的標簽樣本的自動化擴展模塊主要是通過文本向量的相似性技術(shù)來做擴展,主要是基于編輯距離、基于關(guān)鍵詞權(quán)重的加權(quán)詞向量、Seq2Seq-AutoEncoder和BERT的句子向量相似性并結(jié)合閾值的方式來擴展標簽樣本。然后通過過濾操作棄掉一些badcase,主要是基于否定詞和關(guān)鍵詞(主要是針對短句,相似對中差集中含有一些表達話題語義的關(guān)鍵詞)做過濾,最后按照每條種子樣本自動化標記的情況分層抽樣一部分自動標記的數(shù)據(jù),通過人工簡單審核,視情況修正。對于沒有標記上的發(fā)言樣本,可以重復(fù)抽取經(jīng)典發(fā)言然后再自動化標簽擴展的步驟來不斷迭代得到更加大量和多樣化表達的標簽語料集合。? ? ?

? ?

上圖中的編碼器和特定任務(wù)部分,就是基于特定任務(wù)構(gòu)建學(xué)習(xí)模型,對于神經(jīng)網(wǎng)絡(luò)來講,是各種可以抽取文本語義表示的神經(jīng)網(wǎng)絡(luò)編碼器。下面將從樣本處理、模型構(gòu)建、模型效果優(yōu)化等方面詳細介紹下話題意圖分類模塊。首先,本話題意圖原始數(shù)據(jù)是基于游戲中一段對話的場景來打標簽的,訓(xùn)練集樣本的標簽準確度不高,因此需要對樣本做標簽修正的預(yù)處理來提純樣本標簽。


話題意圖分類模塊構(gòu)建

1. 分類模塊的具體構(gòu)建流程

  • 數(shù)據(jù)預(yù)處理:通過基于關(guān)鍵詞和短語結(jié)構(gòu)的正則表達式、自動化標簽擴展模塊這2種方法,清理不純樣本和修正錯誤樣本標簽最終得到7 種topic類別(一般、安全模式、被盜、失誤、封號、信用、舉報)的數(shù)據(jù), 約92w左右。


  • 通過新詞發(fā)現(xiàn)模塊把游戲名、裝備名、地區(qū)名等名詞加入到Jieba詞表中;然后做帶詞性的切詞,同時把句子切詞后含有的游戲?qū)S忻~和游戲地區(qū)名替換為GameName、AreaName等通配符。這個Trick是為了減弱無關(guān)詞對分類的影響,因為這些專有名詞會在被盜、封號等類別中經(jīng)常出現(xiàn),影響分類效果。


  • 基于全量數(shù)據(jù)使用Word2vec算法來預(yù)訓(xùn)練詞向量、詞性向量。


  • 輸入詞編號和詞性編號,加載預(yù)訓(xùn)練好的Embedding向量參數(shù),訓(xùn)練基于兩層CNN+Highway結(jié)構(gòu)的文本分類模型,保存驗證集合中準確率最好的模型。


  • 模型多標簽分類預(yù)測時,取預(yù)測概率值最高的類別,但當(dāng)所有類別的預(yù)測概率都小于0.3時,判定為common。經(jīng)測試,此策略比單獨取預(yù)測概率最高的類別返回,效果更好。因為話題模型是一個入口模型,決定著后續(xù)任務(wù)將交給哪一個類別的Chatbot處理,其中common類別是不觸發(fā)具體的任務(wù)型Chatbot;所以采用寧可放過也不愿意錯判的策略。


(注:各個topic單獨設(shè)計基于正則表達式的前置過濾規(guī)則,可配置過濾badcase,便于安全運營,待積累一段時間的錯判語料后,再更新線上的話題分類模型)


2. 模型結(jié)構(gòu)介紹

我們嘗試了4、5種不同RNN、CNN以及Attention等組合結(jié)構(gòu)的深度學(xué)習(xí)文本分類結(jié)構(gòu)。從我們的應(yīng)用場景出發(fā),用戶發(fā)言一般是短文本,長度大多在幾十個字內(nèi),關(guān)鍵詞和短語對分類顯著的作用,同時基于處理效率和性能的考慮,最終采用CNN的模型結(jié)構(gòu)。CNN結(jié)構(gòu)具有位置平移不變和局部特征組合的特性,多層CNN能夠擴大感受野,組合更長的局部短句,然后經(jīng)過池化層獲取需要的顯著特征。我們的模型是兩層CNN結(jié)合Highway網(wǎng)絡(luò)的結(jié)構(gòu)。在卷積層中,采用了1,2,3,4四種不同寬度的一維卷積核,同種卷積核操作會操作兩次,也即兩層CNN。池化層后再接一個Highway層。Highway層可以更大程度地池化后的重要特征。Highwigh網(wǎng)絡(luò)層的公式如下:


基于CNN分類模型的具體結(jié)構(gòu)圖如下:

基于CNN的Topic分類模型


效果評估:

我們對比了是否使用Highway層以及1,2,3不同層CNN結(jié)構(gòu)的效果差別,最終是上圖的結(jié)構(gòu)效果最好。由于是上年做的項目,不同模型的效果對比找不到了。下面只給最終的模型評估。從訓(xùn)練集合隨機抽取的測試集合(27521條數(shù)據(jù)),模型預(yù)測并結(jié)合線上規(guī)則的預(yù)測結(jié)果, 采用微平均(micro-average)的整體評估指標值如下:

Accuracy

Recall

F1_score

0.986

0.982

0.984

?

話題熱詞分析

對于抽取每個topic下的熱詞,可以使用傳統(tǒng)的TF-IDF、詞性、Text Rank、句子語法和語義結(jié)構(gòu)等方法做熱詞抽取、過濾和重排等操作。也可以使用基于注意力機制的神經(jīng)網(wǎng)絡(luò)模型,或者兩者做結(jié)合。我們是基于話題意圖語料,利用RNN Attention模型在做分類預(yù)測的時候,得到每個詞的注意力權(quán)重,然后根據(jù)權(quán)重值提取熱詞,具體做法如下:

  • ?訓(xùn)練基于RNN-Attention結(jié)構(gòu)的分類模型,流程同上。

  • ?基于小天部分線上經(jīng)典發(fā)言,利用注意力機制的分類模型做預(yù)測,然后取出網(wǎng)絡(luò)結(jié)構(gòu)中的權(quán)重層,最后累加各個詞語的權(quán)重,排序得到各個topic下有顯著特性的關(guān)鍵詞。

  • ?基于RNN-Attention模型結(jié)構(gòu)圖如下:

  • 基于Multi-head自注意力機制的意圖分類模型


    由于注意力機制層,采用了多重的Self-Attention,本模型中是設(shè)置了5個不同矩陣參數(shù),所以學(xué)習(xí)到5種不同的表達特征,然后對發(fā)言中同一個詞語的5種權(quán)重值做求和取平均操作,得到發(fā)言中各個詞語的最終權(quán)重,這樣既考慮了詞語的出現(xiàn)次數(shù)和在句子中的重要性。單頭Self-Attention是沿用早期翻譯中的注意力機制原理,單頭自注意力機制的公式如下, 其中H是輸入向量:


    ??? 4. 各個話題抽取的熱詞效果如下:

    ??? common(3777句):

    ????什么, 你們, 沒有, 為什么, 游戲, 人工, 承諾, 問題, 不是

    ??? aqmode(782句):? ?

    ????安全, 模式, 解除, 凍結(jié), 解凍, 微信, 失敗,異常, 綁定, 密碼

    ??? beidao(134句):? ??

    ????被盜, 找回, 異地, 裝備, 申訴, 登錄, 被盜號, ?賬號, 安全, 密碼, 角色, 盜號者,盜號

    ????shiwu(21句):

    ????錯誤,失誤, 賽利亞, 了解, 恢復(fù), 跨錯, 找回,回來, 誤操作, 裝備, 分解,看清楚,商店, 優(yōu)先,小心

    ??? fenghao(4062 句):

    ????制裁, ?解封, ?減刑, ?封號, ?開掛, ?申訴, 外掛, ?處罰, ?禁賽, ?賬號, 作弊

    ??? xinyong(152句):? ?

    ????信用分, 信用, 信譽, 星級, 制裁, 積分, 信用等級, 查下, 幫忙, 為什么, 一下, 賬號, 多少, 滿星, 四顆星

    ????jubao(134句):??

    ????舉報,?外掛,?舉報人,?有人,?惡意,?辱罵,?開掛,?炸團,?人頭,?封號,?掛機,?詐騙? ? ?

    ? ? ? ?

    可以看到,完全數(shù)據(jù)驅(qū)動的方法得到的效果還可以,但是也有一些badcase,例如xinyong話題中熱詞出現(xiàn)了“制裁”,主要是問“游戲信用分話題“的發(fā)言中,存在一些“多少信用分能夠解制裁”,“賬號被制裁,多少信用分能解”之類的問題。后續(xù)可以根據(jù)業(yè)務(wù)需求增加后過濾處理操作。


    話題意圖模型的運營優(yōu)化

    在運營優(yōu)化方面,主要基于badcase來作分析:


    Badcase的分類錯誤原因一般有:

    • 發(fā)言中含有部分常見詞,在其他Topic中出現(xiàn),本質(zhì)是句子中存在片段的 交集,而且交集片段在不同topic中的統(tǒng)計分布 差異大。

    • 訓(xùn)練集中的label標錯了。

    • 訓(xùn)練樣本中沒有出現(xiàn)過類似的樣本。

    Badcase的修正

    1. ??數(shù)據(jù)層(樣本的整理):


    2. ??模型層(時間性能和效果平衡):


    3. ??規(guī)則層(規(guī)則粒度的大小(靈活性+維護成本)):

    主要是解決模型很難識別的特殊樣本,為每個分類話題分別配置正則過濾規(guī)則


    構(gòu)建更大量樣本數(shù)據(jù)集方法介紹

    基于集成模型的方法更快地構(gòu)造更好、更多的標簽樣本集

    在樣本標簽數(shù)據(jù)的擴展部分,除了可以使用自動化模塊擴展外,還可以基于集成模型的方法來做而二次標簽樣本的擴展,下面是使用一份情感數(shù)據(jù)做的嘗試。


    1、對9千多樣本數(shù)據(jù)作為種子, 使用自動化標簽擴展模塊來進行樣本標簽的擴展并經(jīng)過后過濾處理,一共構(gòu)造訓(xùn)練數(shù)據(jù)7w多條,?分布如下:


    2、對訓(xùn)練數(shù)據(jù), 構(gòu)建并訓(xùn)練了4種不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)分類模型,每種模型的準確率如下:


    然后對未標記90萬左右數(shù)據(jù)做做二次樣本擴展。具體做法是:取出4個模型預(yù)測標簽相同并且概率大于0.9的樣本作為額外的新增標簽樣本和原訓(xùn)練樣本合并并去重(避免出現(xiàn)不一致的樣本標簽),同時由于DIRTY和WHITE樣本量過大,做了下采樣操作,?其余類別做了重復(fù)采樣操作。一共得到了24w左右的訓(xùn)練樣本, 分布如下:


    3、基于全量的訓(xùn)練數(shù)據(jù),最后使用效果最好的第四個分類模型, 也即完全基于注意力機制的網(wǎng)絡(luò)結(jié)構(gòu)(SelfAttention-multiAttention-Highway),訓(xùn)練最終的分類模型。整體準確率是98.7%(為了樣本平衡,部分類別的樣本復(fù)制了多遍,所以評測有所偏差)


    4、同時,對集成模型擴展后數(shù)據(jù)做進一步提純過濾,也可以采用K折交叉驗證的方法來找到并處理badcase。具體是利用模型的差異性,使用投票等策略規(guī)則來更快找出可疑標簽樣本,然后抽取不同的數(shù)據(jù)做訓(xùn)練和預(yù)測,從而達到找到整個樣本中的可疑標簽樣。對于可疑標簽樣本的處理可以人工或者規(guī)則自動處理,不斷迭代優(yōu)化模型的數(shù)據(jù)。其流程圖如下:


    經(jīng)驗總結(jié)和展望

    1. 訓(xùn)練集量少時,預(yù)訓(xùn)練全量數(shù)據(jù)word2vec或者使用字詞結(jié)合的方式,減少未登錄詞。訓(xùn)練模型時,微調(diào)Word2vec,效果一般會更好?


    2.??? CNN作為baseline會更快,多層使用batch-norm,以及結(jié)合highway層做嘗試。

    ?

    3.??? 考慮樣本分布,樣本不平衡處理方法:

    1)對于少數(shù)樣本重復(fù)采樣(基于batch數(shù)據(jù))、多數(shù)樣本負采樣?

    2)調(diào)整閾值(抽樣人工比較或者看PR曲線來設(shè)置)

    3)對于二分類修改Loss(代價敏感),例如同時考慮難分樣本和樣本類別平衡性的focalloss

    4)數(shù)據(jù)增強(隨機打亂語序、同義詞替換(同義詞表)、模板修改、數(shù)據(jù)生成的方法(GAN)??

    ? ? ? ? ?? ? ? ? ?

    4.??? 樣本是否絕對互斥,否則用基于sigmoid的多標簽損失函數(shù),一般會收斂更快。


    5.??? 模型的效果進行多次迭代修正后,會導(dǎo)致數(shù)據(jù)更符合當(dāng)前模型(即是使用復(fù)雜模型也不一定更好),所以要先選擇好模型,再做迭代優(yōu)化。


    6.??? 當(dāng)只有小量數(shù)據(jù)集時,可以使用基于BERT的分類模型。隨機取了訓(xùn)練集合中的2w數(shù)據(jù)作為訓(xùn)練和隨機抽取2000條樣本作為測試集。在同一CPU服務(wù)器上做測試,基于多層CNN分類模型,測試時間:18s,預(yù)測F1值:92.1%?。基于BERT的分類模型,測試時間:400s,差一個數(shù)量級,5個樣本1s,預(yù)測F1值:93.8%。對于BERT的性能優(yōu)化,可以只利用前幾層的結(jié)構(gòu)做Finetune,或者借鑒google出品的Learn2Compress中的方法進行模型壓縮優(yōu)化等。

    ?

    7.??? 對于一些話題類別數(shù)據(jù)量少的識別冷啟動問題,除了上面介紹擴展樣本量的方法,還可以從一些小樣本學(xué)習(xí)方法來考慮,例如Few-shot learning,具體有Induction Network等。

    總結(jié)

    以上是生活随笔為你收集整理的中篇 | 多轮对话机器之话题意图识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。