1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        微信搜一搜中的智能問答技術

        共 8470字,需瀏覽 17分鐘

         ·

        2022-07-08 06:58


        本文約7600字,建議閱讀15分鐘

        本文給大家介紹微信搜一搜中的智能問答技術。



        圍繞下面四點展開:

        • 背景介紹
        • 基于圖譜的問答
        • 基于文檔的問答
        • 未來展望

        01 背景介紹

         1. 從搜索到問答


        搜索引擎是人們獲取信息的重要途徑,其中包含了很多問答型的query。但傳統(tǒng)的搜索只能返回TopK的網(wǎng)頁,需要用戶自己從網(wǎng)頁中分析甄別答案,體驗較差。原因是傳統(tǒng)搜索引擎只是對query和doc做“匹配”,并不是真正細粒度地理解query。智能問答正好可以彌補這個局限,它的優(yōu)勢在于能夠更好地分析query,直接返回精準、可靠的答案。

        2. 搜索場景下的常見用戶問答需求


        • 基于圖譜的問答事實型query,答案形式是實體短語類的短答案。例如“劉德華的妻子”,或者實體集合“中國四大名著”,還有時間/數(shù)字等。
        • 第二類是觀點型query,答案形式是“是或否”,例如像“高鐵可以逃票嗎”等。
        • 第三類是摘要型query,不同于前兩類短答案,答案可能需要用長句的摘要來回答,通常是“為什么”、“怎么辦”、“怎么做”等問題。
        • 最后一類是列表型query,通常是流程、步驟相關的問題,答案需要用列表做精確的回答。

        3. 答案知識來源


        • 結(jié)構(gòu)化數(shù)據(jù),來源于百科、豆瓣等垂類網(wǎng)站的infobox。優(yōu)點是質(zhì)量高,便于獲取和加工;缺點是只覆蓋頭部知識,覆蓋率不夠。例如“易建聯(lián)的身高”、“無間道1的導演是誰”。
        • 非結(jié)構(gòu)化的通用文本,來源于百科、公眾號等互聯(lián)網(wǎng)網(wǎng)頁文本庫。優(yōu)點是覆蓋面廣,但缺點在于文本質(zhì)量參差不齊,對醫(yī)療、法律等專業(yè)領域知識的覆蓋度和權威度不夠。
        • 非結(jié)構(gòu)化的專業(yè)垂類網(wǎng)站問答庫,來源于專業(yè)領域垂類站點的問答數(shù)據(jù),通常以問答對的形式存在。優(yōu)點是在專業(yè)領域知識覆蓋廣、權威度高。

        4. 智能問答的技術路線


        支持智能問答的技術路線主要分兩種:KBQA(基于圖譜的問答)和DocQA(基于文檔的問答)。

        • KBQA的優(yōu)點是擴展性強,能查詢實體的各種屬性,同時支持推理,可以解析復雜查詢。例如圖中右邊的一個例子,“姚明的老婆有多高”可以解析得到中間的語義表達式,從而轉(zhuǎn)換成知識圖譜的查詢,得到問題的答案。涉及的關鍵技術是圖譜構(gòu)建(包括schema構(gòu)建、實體挖掘、關系抽取、開放信息抽取技術)和問題解析(包括實體鏈接、基于semantic parsing的問題解析方法、基于檢索的問題解析方法等技術)。
        • DocQA相較于KBQA的優(yōu)點是覆蓋面更廣,能覆蓋更多中長尾的問題,同時能解決一些KBQA難以解析的問題。例如,“中國歷史上第一個不平等條約”這個query,很難解析成結(jié)構(gòu)化的表達,涉及到的技術主要包括閱讀理解(MRC)、開放域問答(OpenQA)。

        02 基于圖譜的問答


        KBQA的定義:給定自然語言問題,通過對問題進行語義理解和解析,進而利用知識庫進行查詢、推理得出答案。面臨的難點主要有以下幾點:

        • 開放領域知識庫中存在大量的歧義實體,例如“長城”、“蘋果”,可能在知識庫中存在多種類型的同名實體。從query中識別出正確的實體是整個KBQA中一個比較關鍵的模塊。
        • 開放域的知識圖譜屬性眾多,需要從4000+屬性中識別出正確的屬性。
        • 自然語言的問法多樣,同一個屬性有不同問法,例如詢問李白的出生地,可以有“李白是哪里人”、“李白老家是哪里的”等多種不同的表達。同一個問法也可能針對不同的屬性,例如“姚明有多高”、“珠穆朗瑪峰有多高”,同樣是“有多高”,但詢問屬性分別是身高和海拔。

        1. KBQA技術方案


        • 方案一:檢索式的方法。把query和候選答案(知識圖譜中的候選節(jié)點)表征為向量計算相似度。優(yōu)點是可以進行端到端的訓練,但可解釋性和可擴展性差,難以處理限定、聚合等復雜類型的query。
        • 方案二:基于解析的方法。把query解析成可查詢的結(jié)構(gòu)化表示,然后去知識圖譜中查詢。這種方法的優(yōu)點是可解釋性強,符合人能理解的圖譜顯示推理過程,但依賴高質(zhì)量的解析算法。綜合考慮優(yōu)缺點,我們在實際工作中主要采用的是這種方法。

        2. KBQA整體流程


        首先以一個例子介紹KBQA的整體流程:

        • 實體鏈接,識別出query中的實體,并關聯(lián)到圖譜中的節(jié)點;
        • 關系識別,query詢問的具體屬性;
        • Topic實體識別,當query涉及到多個實體時,判斷哪個實體是問題的主實體;
        • 條件/約束識別,解析query中涉及到的一些約束條件;
        • 查詢推理,將前幾步的結(jié)果組合成查詢推理的語句,通過知識圖譜獲得答案。

        在整個流程中,比較關鍵的是實體鏈接和關系識別這兩個模塊,下面對這兩個模塊做重點介紹。

        3. KBQA-實體鏈接


        實體鏈接,從文本中識別出所有的實體mention,然后再把他們鏈接到對應的知識圖譜上。這里展示了一個實體鏈接的例子。

        首先通過NER、SpanNER等方法,對query進行mention識別;根據(jù)識別出的mention,在知識圖譜中召回候選多個實體,并進行實體消歧,本質(zhì)上也就是對召回實體的排序打分。有時由于知識圖譜數(shù)據(jù)不全,庫中根本不存在對應的實體,因此通常會有一步“Top1驗證”,即對排序后的top1結(jié)果再進行一次打分,確定top1結(jié)果是否是最終的實體。


        這里簡單介紹一下我們在工作中用到的一個知識圖譜——TopBase。它是由TEG-AI平臺部構(gòu)建并維護的一個專注于通用領域的知識圖譜。在數(shù)據(jù)層面有五十多個領域,三百多個實體類型,億級實體和十億級三元組。對這個圖譜我們做了一個比較完善的自動化的構(gòu)建流程,包括下載、抽取、去噪、融合、計算和索引步驟。由于結(jié)構(gòu)化的InfoBox數(shù)據(jù)可能是不全的,我們也構(gòu)建了一個非結(jié)構(gòu)化數(shù)據(jù)的抽取平臺。


        接下來介紹候選實體召回模塊。傳統(tǒng)的做法一般是用實體詞表,把知識圖譜中所有實體的原名和別名做成一個詞表,在召回時用mention做詞表召回。一般會有兩個問題:

        ①詞表不完整導致召回率較低,比如圖中的寶龍和索八,如果沒有挖掘出別名就無法召回。

        ②有些實體mention召回的實體較多,會導致后面消歧模塊的耗時比較長,比如圖中的張偉,在知識庫中可能有幾十上百個不同類型的人物。

        針對這兩個問題,主要采用的是基于向量召回的解決方案:將Query和實體分別表征成向量,然后計算相似度。匹配模型是一個雙塔模型,訓練數(shù)據(jù)是Query和它對應的實體mention。對于候選實體會用到名字、描述信息和簡介做為模型輸入,通過這個模型進行匹配做召回。

        在訓練過程中存在一個問題,這個任務中負例很多,如果直接采用隨機采樣的方式,會導致大部分負例比較簡單,使得困難負例學得不好。采用的解決方案是:用上一輪的模型獲得query的候選實體當做負例,和當前的訓練集融合到一起訓練模型,不斷迭代這個流程。這樣做的好處是,在迭代訓練的過程中,每一輪都會加入困難的負例,讓困難負例學得更好。從表格里可以看到這樣的訓練效果更好。


        在召回實體后,下一個流程是實體消歧,采用的模型是交互式BERT匹配模型,將Query和實體的簡介、描述信息拼接在一起打分。但是對實體的描述只有簡介信息是不夠的,例如在《唐人街探案》中,“長澤雅美”沒有出現(xiàn)在簡介里,只在演員屬性里。因此,更重要的是將實體的屬性值也加入到消歧的模型里。但實體的屬性值量非常大,不可能全部加入,采用的方案是對屬性進行粗召回,用query與實體的屬性值做輕量級的相似度計算,例如詞袋、word2vec的向量選出TopK等方法,拼接到這里做消歧。

        4. KBQA-關系識別


        關系識別是識別出這個問題問的是實體的哪一個關系或?qū)傩?,要完成這個任務,不管是基于規(guī)則策略的方法還是基于模型的方法,首先要做的是挖關系的模板庫,常用的方法:

        ① 基于種子三元組的回標,這是一個比較經(jīng)典的方法。從知識圖譜中找到屬性和關系的一些常見的三元組,去回標這種問答對,像問題匹配到主語,段落答案匹配到賓語,就有理由認為這個問題是在問這個屬性。在匹配一些數(shù)據(jù)之后,可以通過策略或者人工的方式,為每種關系或?qū)傩酝诰虺瞿0濉?/span>

        ② 對于有種子問法的屬性,可以采用基于問法pattern擴展的方式:利用同義匹配模型從query log中檢索出同義的擴展問法,可以利用query點擊日志或者開源數(shù)據(jù)集訓練模型,當有一個屬性的種子問法后,用這個模型去匹配query log得到數(shù)據(jù),結(jié)合人工或機器的驗證來獲得擴展問法。


        剛才介紹了模板庫的構(gòu)建,我們的模型也是基于匹配的模型。如圖左邊把識別出的mention用它的type去替代,通過Encoder得到向量;如圖右邊,是對關系的encode。關系的表示有兩部分,第一部分是對每個關系獨立one-hot表示,第二部分是將每個關系的字符串拆分成文本token。這個模型還有一個好處是可以增加一些新的特征,用于豐富關系的表示,如圖右邊這一部分。比如關系的賓語類型,還有預訓練表示向量,可以進一步提升模型的訓練效果。


        在做關系模型的過程中經(jīng)常會遇到魯棒性較差的問題,原因如下:

        ① 用戶Query經(jīng)常很短,而且表達多樣。

        ② Query表達的細小改變很容易導致模型預測錯誤。

        對于這個問題可以采用的解決方案是引入對抗學習,主要用在樣本側(cè)和訓練側(cè)。
        在樣本側(cè)可以通過多種方式生成更多的“對抗樣本”,通過樣本增強來提升模型魯棒性和泛化能力。如圖對于原始樣本,可以通過seq2seq、回譯或者同義詞替換的方式去生成擴展的對抗樣本,但生成的樣本中可能有一些并不是同義的,而是噪聲,這可以用一個同義的模型或策略來判別。最后將生成的樣本和原始樣本合并在一起訓練,提升模型的魯棒性。

        在訓練側(cè),可以在訓練過程中加入擾動,采用對抗學習的方式,隱式構(gòu)造“對抗樣本”。對抗訓練一般就是兩個步驟,第一是生成擾動:選擇梯度方向(使loss最大的方向);第二是Embedding層加上擾動后重新正常訓練模型(使loss最小)。

        5. KBQA-復雜查詢解析


        大家通常搜的都是一些簡單Query,但也有一部分復雜Query,剛才介紹的關系識別模型是比較難處理復雜Query的。圖中列舉了一些復雜Query的例子,多跳、多限定、序數(shù)、是否和計數(shù)問題都是用戶常搜的復雜Query類型。

        這些Query涉及到的關系可能是多個,而且涉及到的實體也是多個。所以用剛才的關系識別模型是難以處理這種情況的。由于是多關系、多實體,可以將其表示為一個圖,這里介紹幾個查詢圖,通過這種方式,將剛才的簡單單實體、單跳的問答擴展成Query Graph的結(jié)構(gòu),我們希望用這樣一個更復雜的圖結(jié)構(gòu)來解析更復雜的Query。


        對復雜查詢有兩個關鍵的模塊,一個是候選路徑生成,依據(jù)query graph模板生成各種候選路徑,但生成的路徑數(shù)量非常大,幾種常見的剪枝方案:

        • 二分類判別:簡單問題還是復雜問題
        • 一跳關系剪枝:減少中間節(jié)點數(shù)量
        • 基于啟發(fā)式規(guī)則剪枝

        通過這些方法,在保證一定召回率的基礎上,候選可以減少百分之八九十。

        對于候選路徑排序一般有兩種方案:

        ① 基于BERT語義匹配的排序模型。BERT需要輸入一個句子,因此首先將查詢圖序列化成一段文本,再和問題拼接一起去搜,得到匹配分,再基于pair-wise的方法訓練。這種方法的不足是,將查詢圖進行了序列化,沒有更好地利用圖的結(jié)構(gòu)化信息。

        ② 基于圖表示的模型。Query Graph是一些三元組組成的,分別去encode這些三元組,得到encode向量,通過Transformer層去做他們之間的交互,最后將它們aggregation起來得到候選查詢圖的表征。這種方法要比之間序列化的方法要好。

        除了這些深度語義的話,也可以融入一些相關的人工特征來進一步提升效果。


        除了剛才介紹的方法,還有一類Query解析方法是基于文法的解析。支持快速配置,支持復雜的和新的查詢。

        采用的文法表示是上下文無關文法(CFG),語義表示用的是抽象語義表示(AMR)。

        如圖列舉了一個簡單的流程。對于一個Query,首先會去做實體和屬性的識別,然后進行標簽化,再通過標簽依據(jù)配置的語法規(guī)則進行語法解析,例如CYK等經(jīng)典算法,得到形式化表示。接下來還要推理相關謂語,就是一些屬性關系,最終生成一個實際的查詢。

        03 基于文檔的問答


        DocQA是指利用檢索+機器閱讀理解等技術,從開放文本庫中抽取出用戶問題的答案。主要面臨了幾個難點:

        ① 抽取的答案片段的準確性。

        ② 對無答案段落的據(jù)識能力。很多時候段落中并不包含答案,所以要盡量避免從段落中抽取出一些錯誤的答案。

        ③ 召回段落與問題的相關性。只有保證了相關性,后面的模型才能抽取出正確的答案。

        1. DocQA總體流程


        ① 針對Query Log進行問答意圖的過濾。

        ② 通過檢索模塊去段落庫中檢索相應的一些段落。

        ③ 對檢索到的TopK段落,做一個Reader模型(多段落-MRC)。

        ④ 對答案進行重排序和拒識判定。

        ⑤ 輸出最終答案。

        可以看到全流程中比較重要的是檢索模塊和多段落的MRC模塊。

        2. DocQA-語義檢索


        對于檢索模塊,常遇到的問題如下:

        ① 特定領域相關性標注樣本有限,如何利用有限的標注進一步提升模型泛化能力。

        ② 訓練和預測的不一致問題:匹配模型在訓練過程中,一般采用的都是In Batch Negative的方式,從Batch內(nèi)的其他的Query對應的段落作為這個Query的負例,由于我們在預測過程中采用的是全庫檢索,可能整個庫達到數(shù)百萬或者數(shù)千萬規(guī)模,會導致檢索預測時的過召回問題,召回了很多錯誤的段落,這種方式會造成訓練和預測的不一致問題。

        針對這個問題有幾種優(yōu)化方案:

        ① 利用大量(問題、段落)問答對通過策略和人工篩選出一些質(zhì)量比較高的來構(gòu)造預訓練任務,相當于在BERT訓練模型基礎之上,通過二次預訓練來提升模型的效果。從Batch內(nèi)部選Negative換成從Batch外部去選Negative,一般在訓練匹配模型時,如果采用多機多卡的方式時,可以把別的卡的Query段落作為當前卡的Query的負例,每個Query的負例規(guī)模,就會從batch_size提升到gpu_num * batch_size,這樣見到的負例就會更多,模型就會訓練得更充分一些,可以較大地緩解訓練和預測不一致的問題。

        ② 可以利用大量<問題,答案>pair對產(chǎn)生遠監(jiān)督訓練樣本來增強模型訓練樣本。<問題,答案>對的來源有很多方式,可以搜集一些開源數(shù)據(jù)集的問答對,或者KBQA這種去回答的問答對,有了問答對之后就可以引入他們進行遠監(jiān)督的樣本生成。

        如圖就是整個流程:首先會用當前模型對收集到的QA對的Q去召回TopK的段落,如果是第一次,可以采用bm25這種無監(jiān)督的方式去召回段落。召回段落后就可以用QA對的A去回標這些段落?;貥说降漠斪稣?,沒回標到的當做負例。這樣可以將生成的遠監(jiān)督樣本和標注樣本結(jié)合到一起去訓練匹配模型,然后繼續(xù)迭代。這種迭代方式可以引入更多困難負例,讓模型學得更好。

        3. DocQA-答案抽取


        接下來介紹答案抽取(MRC)。

        一般對于實體短語類(短答案)抽取,會將問題和段落拼接到一起,用一個BERT去預測片段的開始和結(jié)束。但這種方式不能很好地應用在長答案和是否類答案的抽取上,此時需要對模型進行一些改造。例如增加分類圖,針對是否類答案去判斷是“是”還是“否”;對長答案類,對句子進行聚合,從token級聚合成句子表征,得到了句子級的表征之后,就可以預測句子級的開始和結(jié)束。


        對于答案抽取這個模塊,第一個問題是MRC樣本標注成本高,難以獲取大規(guī)模領域內(nèi)標注樣本。一般采用預訓練語言模型(BERT)+Finetune方式,借鑒了預訓練模型BERT已經(jīng)學好的一些知識,可以較大地提升模型效果。但MLM和MRC任務差異較大,MLM任務主要是mask一些token,利用句子上下文去預測這些token,主要學習詞之間的詞法、語法等語言模型特征。MRC則是給定一個問題和相關段落,去段落里尋找問題的答案,主要學習對問題和段落的理解。

        因此對于這個問題,更好的一個解決方案是能否構(gòu)建一個與MRC任務接近的預訓練任務。去年論文里的一種方式是利用片段選擇 Mask+ 檢索來構(gòu)造類似MRC的預訓練樣本。

        具體流程如圖:首先需要具備一個文本庫,從中選擇一些句子去做實體識別,隨后隨機地mask掉其中的實體,用通配符來替代。這時可以將這個句子當做一個Query,去段落庫中檢索出TopK的段落,通過策略篩選之后,這些段落可以當做SSPT的一個樣本,這個樣本的形態(tài)和MRC樣本的形態(tài)是比較接近的。


        第二個問題是:SSPT構(gòu)造的樣本包含的噪聲如何處理?其中采用的一個解決方案是新增一個問答上下文預測任務。通過建模答案周圍的詞和問題的語義相關性來判定是否噪聲樣本。對于一個噪聲樣本,答案項周圍的詞和問題無關,我們希望問答上下文預測任務的損失大,而對于正常樣本,答案項周圍的詞和問題相關,問答上下文預測任務的損失小。

        具體的做法有三個步驟:

        ① 定義上下文中每個詞的label,將段落里的一些上下文中的一些詞作為它的相關詞,我們假設距離答案越近的詞,越可能成為相關詞。因此,啟發(fā)式定義了段落中每個詞屬于上下文的概率label,相當于越靠近答案概率越高,越遠概率越低,呈指數(shù)級衰減。

        ② 估計每個詞屬于上下文的概率。用BERT的向量和一個額外的矩陣去算開始和結(jié)束,會對每一個詞累計其區(qū)間,去算出這個詞屬于上下文的概率。

        ③ 最后得到每個詞的label和概率,就可以通過交叉熵的算法來計算預測任務上下文的損失,最后我們的損失函數(shù)就是answer抽取的損失加上這個任務的損失。

        希望針對這種噪聲樣本損失偏大一些,對正常樣本損失偏小一些。最后定義了整體的損失之后,就可以采用co-teaching去噪算法去訓練模型,樣本損失越大,權重越低,來達到樣本去噪的目的。


        第三個問題是段落獨立訓練導致多段落抽取效果不好。圖中展示的是多段落抽取流程,抽取時每個段落都會抽取出一個答案,會依據(jù)分數(shù)選擇最后的答案。

        但由于訓練時每個段落是獨立訓練的,分數(shù)在不同段落之間是不可比的。針對這個問題可以采用的方案是段落共同歸一,即針對每個段落,通過encoder得到向量后,將向量進行拼接,做一個全局的softmax去做全局的損失。這樣做的好處是,最后得到的分數(shù)即使是跨段落也是可比的。


        還有一個常見的問題:預測開始和結(jié)束一般會采用0/1標簽,無法區(qū)分錯誤候選答案的優(yōu)劣。相應的解決方案是將標簽soft化,通過計算候選答案和標準答案的詞重合率來計算得到不同候選答案的優(yōu)劣程度的分布。將整個答案span的優(yōu)劣程度轉(zhuǎn)化為開始和結(jié)束標簽的概率分布。首先計算所有候選答案的優(yōu)劣矩陣,將其轉(zhuǎn)化成概率分布,接下來得到每個答案開始/結(jié)束位置的概率分布。就將原來0/1的hard表示,轉(zhuǎn)化成了一種soft表示。

        04 未來展望


        ① 復雜問題的解析。除了剛才列舉的一些,其實還有很多用戶常問的復雜問題,比如多意圖、多條件問題。對這些Query進行很好地解析和解答比較困難,需要更強大的query graph表示和更高校的解析算法。

        ② 提高MRC模型的穩(wěn)定性。當問題換一種問法,或者段落中存在和答案類型相同的實體且上下文和問題比較相似,容易造成模型抽取錯誤。這也是學術界研究的熱點,也有很多成果,例如加入一些對抗樣本或者對抗句子。這也是未來一個比較重要的工作。

        ③ 帶條件且跨片段的實體類短答案抽取。很多時候一個問題雖然是實體短語類的一個短答案問題,但可能在段落里面是帶條件的,不同條件下,短實體的答案可能是不一樣的。所以,不僅要抽出長句子,更精準的是要抽出這些條件以及條件對應的答案。

        05 Q&A

        Q1:KBQA中基于基于種子的三元組的回標部分,是不是需要維護一個標準問和相似問的表?

        A1:不需要,我們對屬性會選出一些三元組,去回標一些問答對,對于回標上的那些問題,就是疑似問這個屬性的。對這些問題再做一些去噪,加上人工策略或人工審核,最終拿到每個屬性比較干凈的訓練數(shù)據(jù),沒有涉及到維護相似問的表。剛才介紹了一種方法,得到一些pattern之后,通過同義模型去Query log中匹配出一些擴展的問法,這些問法再通過策略處理,最后得到這個關系的更多的一些問法。

        Q2:KBQA的關系識別里識別除了關系后,怎么去區(qū)分識別出的實體是主語還是賓語?

        A2:一般會在識別過程中單獨通過一個模型去判別,問的是已知SP得O還是根據(jù)PO得S。

        Q3:在關系識別中,負樣本該如何選擇?怎么處理字面相似但含義不同的屬性?

        A3:如果隨機抽取負例的話會比較簡單,一般采用的方法是引入人工的方法標注,例如擴展問,同義匹配這種方式去獲取樣本。標注的時候就會自然把那些看著很相似,但其實是錯誤的問法給標注出來,通過類似主動學習的方式,不斷加入一些困難負樣本,來提升困難負例樣本識別的準確率。

        今天的分享就到這里,謝謝大家。

        編輯:王菁

        校對:





        瀏覽 64
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            国产黄色片网站 | 日韩欧美影院 | 91三级大片视频 | 日韩成人久久 | 久久精品视频播放 | 欧美操逼视频大全 | AAA女郎写真视频在线 | 奇米7777影视精品人人爽 | 寡妇高潮一级毛片免费看老牛影视 | 91午夜激情 |