整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          400個(gè)最常見的 JavaScript 面試問答(1)

          家好,我是海擁,專注于前端知識(shí)的分享。今天將給大家?guī)淼氖?400 個(gè)最常見的 JavaScript 面試問答第一部分。接下來我會(huì)持續(xù)更新(爭(zhēng)取日更,也可能每周3-5篇),每小節(jié)大概 10 道題左右,總共會(huì)有 400 多道。


          大家一定要記得點(diǎn)贊收藏呀!!!


          1.在 JavaScript 中創(chuàng)建對(duì)象的可行方法有哪些?

          有很多方法可以在 javascript 中創(chuàng)建對(duì)象,如下所示

          (1).對(duì)象構(gòu)造函數(shù):

          創(chuàng)建空對(duì)象的最簡(jiǎn)單方法是使用 Object 構(gòu)造函數(shù)。目前不推薦這種方法。

          var object = new Object();


          (2).對(duì)象的創(chuàng)建方法:

          Object 的 create 方法通過將原型對(duì)象作為參數(shù)傳遞來創(chuàng)建一個(gè)新對(duì)象

          var object = Object.create(null);


          (3).對(duì)象字面量語法:

          當(dāng)傳遞 null 作為參數(shù)時(shí),對(duì)象字面量語法等效于 create 方法

          var object = {};


          (4).函數(shù)構(gòu)造器:

          創(chuàng)建任何函數(shù)并應(yīng)用 new 運(yùn)算符來創(chuàng)建對(duì)象實(shí)例,

          function Person(name){
          var object = {};
          object.name=name;
          object.age=21;
          return object;
          }
          var object = new Person("Sudheer");


          (5).帶有原型的函數(shù)構(gòu)造函數(shù):

          這類似于函數(shù)構(gòu)造函數(shù),但它使用原型作為其屬性和方法,

          function Person(){}
          Person.prototype.name = "Sudheer";
          var object = new Person();


          這等效于使用具有函數(shù)原型的對(duì)象創(chuàng)建方法創(chuàng)建的實(shí)例,然后使用實(shí)例和參數(shù)作為參數(shù)調(diào)用該函數(shù)。

          function func {};
          new func(x, y, z);

          (或者)

          // 使用函數(shù)原型創(chuàng)建一個(gè)新實(shí)例。
          var newInstance = Object.create(func.prototype)
          // 調(diào)用函數(shù)
          var result = func.call(newInstance, x, y, z),
          // 如果結(jié)果是非空對(duì)象,則使用它,否則只使用新實(shí)例。
          console.log(result && typeof result === 'object' ? result : newInstance);

          (6).ES6 類語法:

          ES6 引入類特性來創(chuàng)建對(duì)象

          class Person {
          constructor(name) {
          this.name = name;
          }
          }
          var object = new Person("Sudheer");

          (7).單例模式:

          Singleton 是一個(gè)只能實(shí)例化一次的對(duì)象。對(duì)其構(gòu)造函數(shù)的重復(fù)調(diào)用返回相同的實(shí)例,這樣可以確保它們不會(huì)意外創(chuàng)建多個(gè)實(shí)例。

          var object = new function(){
          this.name = "Sudheer";
          }

          2.什么是原型鏈?

          原型鏈用于基于現(xiàn)有對(duì)象構(gòu)建新類型的對(duì)象。它類似于基于類的語言中的繼承。

          對(duì)象實(shí)例上的原型可通過Object.getPrototypeOf(object)或proto屬性獲得,而構(gòu)造函數(shù)上的原型可通過Object.prototype 獲得。


          3.call、apply、bind有什么區(qū)別?

          Call、Apply 和 Bind 之間的區(qū)別可以用下面的例子來解釋,

          call: call() 方法調(diào)用一個(gè)函數(shù),給定的this值和參數(shù)一一提供

          var employee1 = {firstName: 'Haiyong', lastName: 'Rodson'};
          var employee2 = {firstName: 'Jimmy', lastName: 'Baily'};
          function invite(greeting1, greeting2) {
          console.log(greeting1 + ' ' + this.firstName + ' ' + this.lastName+ ', '+ greeting2);
          }
          invite.call(employee1, 'Hello', 'How are you?'); // Hello Haiyong Rodson, How are you?
          invite.call(employee2, 'Hello', 'How are you?'); // Hello Jimmy Baily, How are you?

          apply:調(diào)用具有給定this值的函數(shù),并允許你將參數(shù)作為數(shù)組傳入

          var employee1 = {firstName: 'Haiyong', lastName: 'Rodson'};
          var employee2 = {firstName: 'Jimmy', lastName: 'Baily'};
          function invite(greeting1, greeting2) {
          console.log(greeting1 + ' ' + this.firstName + ' ' + this.lastName+ ', '+ greeting2);
          }
          invite.apply(employee1, ['Hello', 'How are you?']); // Hello Haiyong Rodson, How are you?
          invite.apply(employee2, ['Hello', 'How are you?']); // Hello Jimmy Baily, How are you?

          bind:返回一個(gè)新函數(shù),允許你傳遞任意數(shù)量的參數(shù)

          var employee1 = {firstName: 'Haiyong', lastName: 'Rodson'};
          var employee2 = {firstName: 'Jimmy', lastName: 'Baily'};
          function invite(greeting1, greeting2) {
          console.log(greeting1 + ' ' + this.firstName + ' ' + this.lastName+ ', '+ greeting2);
          }
          var inviteEmployee1 = invite.bind(employee1);
          var inviteEmployee2 = invite.bind(employee2);
          inviteEmployee1('Hello', 'How are you?'); // Hello Haiyong Rodson, How are you?
          inviteEmployee2('Hello', 'How are you?'); // Hello Jimmy Baily, How are you?

          Call 和 apply 可以互換。兩者都立即執(zhí)行當(dāng)前函數(shù)。你需要決定是發(fā)送數(shù)組還是逗號(hào)分隔的參數(shù)列表更容易。你可以通過處理 Call 用于逗號(hào)(分隔列表)和 Apply 用于Array來記住。

          而 Bind 創(chuàng)建一個(gè)新函數(shù),該函數(shù)將this設(shè)置為傳遞給 bind() 的第一個(gè)參數(shù)。


          4.什么是 JSON 及其常見操作?

          JSON是一種基于文本的數(shù)據(jù)格式,遵循 JavaScript 對(duì)象語法,由道格拉斯·克羅克福德 (Douglas Crockford) 推行。 當(dāng)你想通過網(wǎng)絡(luò)傳輸數(shù)據(jù)時(shí)它很有用,它基本上只是一個(gè)擴(kuò)展名為 .json 的文本文件,以及一個(gè) MIME 類型的 application/json

          解析:將字符串轉(zhuǎn)換為原生對(duì)象

          JSON.parse(text)

          字符串化:將本機(jī)對(duì)象轉(zhuǎn)換為字符串,以便可以通過網(wǎng)絡(luò)傳輸

          JSON.stringify(object)

          5. 數(shù)組slice()方法的目的是什么?

          所述slice()方法返回在數(shù)組作為新的數(shù)組對(duì)象中選定的元件。它選擇從給定開始參數(shù)開始的元素,并在給定的可選結(jié)束參數(shù)處結(jié)束,不包括最后一個(gè)元素。如果省略第二個(gè)參數(shù),則它會(huì)一直選擇到最后。

          這種方法的一些例子是,

          let arrayIntegers = [1, 2, 3, 4, 5];
          let arrayIntegers1 = arrayIntegers.slice(0,2); // returns [1,2]
          let arrayIntegers2 = arrayIntegers.slice(2,3); // returns [3]
          let arrayIntegers3 = arrayIntegers.slice(4); //returns [5]

          ==注意==: Slice 方法不會(huì)改變?cè)紨?shù)組,而是將子集作為新數(shù)組返回。



          6.數(shù)組splice()方法的目的是什么?

          splice() 方法用于向/從數(shù)組添加/刪除項(xiàng)目,然后返回被刪除的項(xiàng)目。第一個(gè)參數(shù)指定插入或刪除的數(shù)組位置,而選項(xiàng)第二個(gè)參數(shù)指示要?jiǎng)h除的元素?cái)?shù)。每個(gè)附加參數(shù)都添加到數(shù)組中。

          這種方法的一些例子是,

          let arrayIntegersOriginal1 = [1, 2, 3, 4, 5];
          let arrayIntegersOriginal2 = [1, 2, 3, 4, 5];
          let arrayIntegersOriginal3 = [1, 2, 3, 4, 5];
          let arrayIntegers1 = arrayIntegersOriginal1.splice(0,2); // returns [1, 2]; original array: [3, 4, 5]
          let arrayIntegers2 = arrayIntegersOriginal2.splice(3); // returns [4, 5]; original array: [1, 2, 3]
          let arrayIntegers3 = arrayIntegersOriginal3.splice(3, 1, "a", "b", "c"); //returns [4]; original array: [1, 2, 3, "a", "b", "c", 5]

          ==注意==: Splice 方法修改原始數(shù)組并返回刪除的數(shù)組。



          7.slice()和splice()有什么區(qū)別?

          表格形式的一些主要區(qū)別

          slice()

          splice()

          不修改原始數(shù)組(不可變)

          修改原始數(shù)組(可變)

          返回原始數(shù)組的子集

          將刪除的元素作為數(shù)組返回

          用于從數(shù)組中選取元素

          用于在數(shù)組中插入或刪除元素



          8.你如何比較 Object 和 Map

          Object 與Maps 的相似之處在于,它們都允許您將鍵設(shè)置為值、檢索這些值、刪除鍵以及檢測(cè)某個(gè)鍵是否存儲(chǔ)了某些內(nèi)容。由于這個(gè)原因,對(duì)象在歷史上被用作地圖。但是在某些情況下,使用 Map 有一些重要的區(qū)別。

          • Object 的鍵是字符串和符號(hào),而它們可以是 Map 的任何值,包括functions、Object 和任何primitive。
          • Map 中的鍵是有序的,而添加到 Object 的鍵不是。因此,當(dāng)?shù)鼤r(shí),一個(gè) Map 對(duì)象按插入的順序返回鍵。
          • 您可以使用 size 屬性輕松獲取 Map 的大小,而 Object 中的屬性數(shù)量必須手動(dòng)確定。
          • Map 是可迭代的,因此可以直接迭代,而迭代 Object 需要以某種方式獲取其鍵并對(duì)其進(jìn)行迭代。
          • 一個(gè)對(duì)象有一個(gè)原型,所以如果你不小心,地圖中有一些默認(rèn)的鍵可能會(huì)與你的鍵發(fā)生沖突。從 ES5 開始,這可以通過使用 map =Object.create(null) 繞過,但很少這樣做。
          • Map在涉及頻繁添加和刪除密鑰對(duì)的場(chǎng)景中可能表現(xiàn)得更好。

          9.== 和 === 運(yùn)算符有什么區(qū)別?

          JavaScript 提供了嚴(yán)格(===, !==) 和類型轉(zhuǎn)換(==, !=) 相等比較。嚴(yán)格運(yùn)算符考慮變量的類型,而非嚴(yán)格運(yùn)算符根據(jù)變量的值進(jìn)行類型校正/轉(zhuǎn)換。嚴(yán)格的運(yùn)算符遵循以下不同類型的條件,

          1. 當(dāng)兩個(gè)字符串具有相同的字符序列、相同的長(zhǎng)度以及相應(yīng)位置的相同字符時(shí),它們是嚴(yán)格相等的。
          2. 當(dāng)兩個(gè)數(shù)字在數(shù)值上相等時(shí),它們嚴(yán)格相等。即,具有相同的數(shù)值。這里有兩種特殊情況,

          NaN 不等于任何東西,包括 NaN。
          正零和負(fù)零彼此相等。

          1. 如果兩個(gè)布爾操作數(shù)都為真或都為假,則兩個(gè)布爾操作數(shù)嚴(yán)格相等。
          2. 如果兩個(gè)對(duì)象引用同一個(gè)對(duì)象,則它們嚴(yán)格相等。
          3. Null 和 Undefined 類型與 === 不相等,但與 == 相等。即, null===undefined --> false 但 null==undefined --> true
            一些涵蓋上述情況的例子,
          0 == false // true
          0 === false // false
          1 == "1" // true
          1 === "1" // false
          null == undefined // true
          null === undefined // false
          '0' == false // true
          '0' === false // false
          []==[] or []===[] //false, 引用內(nèi)存中的不同對(duì)象
          {}=={} or {}==={} //false, 引用內(nèi)存中的不同對(duì)象

          10.什么是 lambda 或 箭頭函數(shù)?

          箭頭函數(shù)是函數(shù)表達(dá)式的較短語法,沒有自己的this、arguments、super 或 new.target。這些函數(shù)最適合非方法函數(shù),它們不能用作構(gòu)造函數(shù)。


          希望大家能夠給海海 點(diǎn)贊+收藏+關(guān)注 ,你的支持是海海更新的動(dòng)力!后面我會(huì)持續(xù)分享面試經(jīng)驗(yàn) & 前端相關(guān)的專業(yè)知識(shí)。

          最后祝大家都能找到滿意的實(shí)習(xí)和 offer!

          位小伙伴們,繼續(xù)。接下來講解html基礎(chǔ)里面的簡(jiǎn)答題的內(nèi)容。

          ·什么是未否標(biāo)準(zhǔn)以及未否標(biāo)準(zhǔn)的構(gòu)成?在這里面未否標(biāo)準(zhǔn)也稱之為王爺標(biāo)準(zhǔn),它是有一系列的標(biāo)準(zhǔn)構(gòu)成。這個(gè)地方有沒有問題?沒有。

          ·接下來主要講當(dāng)前對(duì)應(yīng)的內(nèi)容,就是結(jié)構(gòu)表現(xiàn)跟行為結(jié)構(gòu)。在這里面是干什么的?比如主要分為hxml和hxmtml兩部分。表現(xiàn)用來是做裝飾,裝飾哪些?板式顏色大小及外觀樣式。則css行為。

          ·網(wǎng)頁模型里面定義和交互編寫,通常包括動(dòng)模和ecmsk部分。在這里面可以演什么?叫做gs。

          ·在html中type標(biāo)記常用的屬性有哪些?這個(gè)東西就是屬于日常里面一定要會(huì)的alone水平對(duì)齊方式,寬度、高度、背景顏色、邊框。sailor spacex指的是單元格跟單元格之間的間距。sailor pending叫做表格內(nèi)部之間的邊距。在這里面之間解析過九十五的邊緣。

          ·這一部分內(nèi)容指的是什么?就是pending。sailor pendingfund在這里面可以理解什么?表格外部的框架。

          ·在這里面有對(duì)應(yīng)的內(nèi)容,基本上都有下列選項(xiàng)中填上正確代碼。我是et標(biāo)題,是不是只要寫個(gè)h1開頭,h1結(jié)尾,文字是不是寫p標(biāo)簽?這個(gè)應(yīng)該沒問題。

          ·減速html在vip標(biāo)準(zhǔn)中屬于哪個(gè)分層其作用?在這里面html是超文本標(biāo)記語言的簡(jiǎn)寫,是網(wǎng)頁三層中屬于當(dāng)前對(duì)應(yīng)的結(jié)構(gòu)層負(fù)責(zé)。在這里面定義當(dāng)前的內(nèi)容和羽翼不負(fù)責(zé)樣式跟行為樣式對(duì)應(yīng)的是css,行為對(duì)應(yīng)的是js。

          ·減速網(wǎng)頁中常用的三種圖像格式:gp、png跟jpg、png和gp的公優(yōu)點(diǎn)。在這里面gp優(yōu)點(diǎn)是什么?常用的圖片格式,而且質(zhì)量小便于傳輸,而且顏色會(huì)更加的逼真。

          ·缺點(diǎn)什么?不只是透明透明度,png是什么?就是支持透明透明度,有png-8跟png-24。

          ·缺點(diǎn)是什么?對(duì)瀏覽器的低端瀏覽器適應(yīng)不好。gp圖片支持透明且是動(dòng)效圖片,但缺點(diǎn)是什么?只能存不超過二五六顏色的內(nèi)容。

          ·在這里面對(duì)應(yīng)的信息可以暫停一下再讀一遍。如果想耍賴,其實(shí)在這里面把對(duì)方的優(yōu)點(diǎn)寫成對(duì)應(yīng)的缺點(diǎn)其實(shí)好像也是可以的,但是盡可能描述正確。

          接下來請(qǐng)舉例常用的單標(biāo)跟雙標(biāo)。在這里面常用的雙標(biāo)就是所見到的這一系列常用的單標(biāo)是當(dāng)前的BR跟HE。

          ·在這里面也可以去補(bǔ)充一些,但是算不算常用其實(shí)應(yīng)該是主要一應(yīng)該叫什么,主要在寫的時(shí)候過程當(dāng)中知道的。

          ·在這里面請(qǐng)描述動(dòng)態(tài)資源跟靜態(tài)資源。首先要知道什么叫動(dòng)態(tài),什么叫靜態(tài)。

          →第一個(gè)要理解一個(gè)誤區(qū),動(dòng)態(tài)不是指指的會(huì)動(dòng)就叫動(dòng)態(tài)。動(dòng)態(tài)一般指的是有數(shù)據(jù)的交互,數(shù)據(jù)的交互通常是網(wǎng)頁跟服務(wù)器之間的數(shù)據(jù)的發(fā)送信息,在這里面會(huì)導(dǎo)致頁面數(shù)據(jù)的更改。

          →靜態(tài)資源是什么?就是直接加載會(huì)有一個(gè)具體的產(chǎn)線的內(nèi)容,所以在這里面可以看到天臺(tái)資源有未可服務(wù)器讀取后直接返回,只要服務(wù)器沒有修改這些文件,用戶每次訪問都是一模一樣的。

          →而動(dòng)態(tài)資源是什么?隨著每次請(qǐng)求都需要計(jì)算,所以服務(wù)器里面如果在這里面當(dāng)前的人員對(duì)當(dāng)前的頁面已經(jīng)改變,就會(huì)在服務(wù)器上面對(duì)應(yīng)改,而下次傳回來的時(shí)候就有對(duì)應(yīng)的改變的內(nèi)容。

          ·接下來在這里面讀取當(dāng)前對(duì)應(yīng)的代碼。在這里面可以看到imagehrc這一整個(gè),其實(shí)這里應(yīng)該是多了一個(gè)符號(hào),這個(gè)符號(hào)應(yīng)該刪掉,所以它有點(diǎn)問題。這個(gè)表示加載不出來的時(shí)候顯示對(duì)應(yīng)內(nèi)容,這個(gè)是高度、寬度,這個(gè)是高度。

          ·這個(gè)波的是不是寫一個(gè)三對(duì)不對(duì)?完了之后在這里面懸停狀態(tài)時(shí)顯示logo的一個(gè)文本,這里面就推頭,在這里面就有對(duì)應(yīng)的效果。記住這里面一般不要加服,不要加單位,hcss的時(shí)候是一定要加單位的,h t m 5的時(shí)候是可以不加。

          解釋一下什么是h5,在這里面h5不僅練習(xí)到新標(biāo)準(zhǔn)而且是h t m l和x h t m l的繼承跟發(fā)展。h5是一個(gè)向下兼容的版本,本質(zhì)上并不是什么新技術(shù),而是在這個(gè)功能上做了一個(gè)極大的豐富,相當(dāng)于一個(gè)方案的整合。

          分析下列代碼并回答問題,僅減速代碼的作用,并且描述每個(gè)標(biāo)記及其屬性的意義跟作用。

          ·首先p就是文本文檔里面展示了正在學(xué)習(xí)嵌套標(biāo)記,同時(shí)這里面的文本的對(duì)齊屬性按照居中文字傾斜且文字加粗的效果,就這樣子。

          ·在這里面什么什么描述等于什么什么什么什么什么描述等于什么,給它講清楚。

          ·請(qǐng)簡(jiǎn)要的描述htm語言中table常用的屬性有哪些?這個(gè)在題目里面其實(shí)已經(jīng)講了很多次了。對(duì)應(yīng)的邊框?qū)?yīng)的單元格跟單元格之間的距離,單元格內(nèi)部跟單元格邊框的距離,寬度、高度以及水平對(duì)齊方式。

          ·背景顏色和當(dāng)前的單音表格的背景。

          ·請(qǐng)簡(jiǎn)要描述定義列表的簽到形式。在這里面定義列表就是d l d t跟d d 其中d l,只能有一個(gè)d,d可以有多個(gè),在這里面就有對(duì)應(yīng)的內(nèi)容不做描述,各位可以暫停簡(jiǎn)單的看一下。

          ·接下來是常用的圖像格式,分別減速它們的作用。其實(shí)這道題目講過了,常用的圖像有三種:png、png。png就是動(dòng)畫最多就二五六顏色,png常用于logo小圖標(biāo)和單一的顏色。其實(shí)游戲網(wǎng)頁里面gif用的會(huì)比較多,因?yàn)榭梢陨蓜?dòng)效的效果又是小動(dòng)效,而且加載的時(shí)候資源也不會(huì)占用很大。

          如果放視頻,視頻再小也是很大的。png在這里面有png-8和png-24,當(dāng)然還有個(gè)png-32,一般用的比較少,默認(rèn)png-24。png的優(yōu)勢(shì)就是體積更小而且支持半透明,全透明和不透明都支持。

          ·接下來jpg,jpg的顏色會(huì)比gif和png來的更多,而且本身超過二五六顏色,所以基本上網(wǎng)頁里面的banana和商品圖片還有較大的圖片都常用jpg來進(jìn)行保存。

          描述gif、mr與h5的區(qū)別,h5文檔格式與gif、mr文檔格式基本沒有太大差異,僅僅只是gif、mr5的文檔更加的簡(jiǎn)明扼要,以及文檔類型的聲明和編碼格式略有區(qū)別,其實(shí)gif、mr5的羽翼化更加明顯。

          ·接下來是什么叫相對(duì)路徑?什么叫絕對(duì)路徑?簡(jiǎn)單的說相對(duì)路徑就是通過當(dāng)前的文件去找對(duì)應(yīng)的內(nèi)容,上級(jí)點(diǎn)點(diǎn)斜杠,下級(jí)斜杠,等級(jí)直接找文件以及后綴名。而絕對(duì)路徑是通過盤符進(jìn)行指定查找,但是一般在做絕對(duì)路徑的時(shí)候不太建議,理由很簡(jiǎn)單,上傳到服務(wù)器的時(shí)候有些盤在服務(wù)器上面不一定有,就像前面講過的,常用的就在常用的瀏覽器有哪些,并不表示。

          現(xiàn)實(shí)中常用的瀏覽器就是這些,我喜歡用qq瀏覽器,我喜歡用搜狐瀏覽器,這是常用的瀏覽器,但是它屬于五大瀏覽器嗎?它不屬于,就這么理解。怎樣的描述相對(duì)路徑?其實(shí)已經(jīng)描述過了,在這里看到的是一模一樣的。各位可以暫停稍微看一遍。

          請(qǐng)描述htm文檔中注視標(biāo)記的作用,在這里面注視標(biāo)記是方便去理解當(dāng)前文檔里面的基本的代碼內(nèi)容,就是方便查找和理解,就這么簡(jiǎn)單。

          接下來內(nèi)容也就講完了,希望各希望當(dāng)前的視頻對(duì)在座各位有一點(diǎn)點(diǎn)的幫助,謝謝。

          讀:智能問答是人工智能領(lǐng)域中一個(gè)比較受關(guān)注的方向,目前廣泛應(yīng)用于各種垂直或綜合的搜索引擎、智能客服、智能助手以及智能手機(jī)、車載音箱等。本次分享的主題是QQ瀏覽器搜索中的智能問答技術(shù),主要分為以下幾個(gè)部分:

          1.背景介紹

          • 智能問答在搜索中的應(yīng)用
          • 搜索中的Top1問答

          2.關(guān)鍵技術(shù)

          • 搜索問答的技術(shù)框架
          • KBQA:基于知識(shí)圖譜的問答
          • DeepQA:基于搜索+機(jī)器閱讀理解的問答

          3.前沿研究

          • 端到端問答
          • 知識(shí)指導(dǎo)的問答
          • 多模態(tài)問答

          01

          背景介紹

          1. 問答在搜索中的應(yīng)用

          問答的核心是通過理解語言和運(yùn)用知識(shí)來進(jìn)行提問和回答。從應(yīng)用角度看,由于人類有獲取信息的需求和旺盛的好奇心,問答的場(chǎng)景無處不在;從研究角度看,問答是認(rèn)知智能的前沿之一。


          問答在搜索場(chǎng)景的應(yīng)用可以分為兩類。一類是滿足用戶的直接搜索需求,即在搜索結(jié)果頁給用戶提供精準(zhǔn)的答案,例如Top1問答卡片。另一類是通過問答的方式與用戶交互,來幫助用戶澄清、細(xì)化和延伸需求,例如推薦和對(duì)話形式的問答。

          2. 搜索中的Top1問答

          下圖展示了QQ瀏覽器搜索中Top1問答的一些產(chǎn)品形態(tài),包括短答案、長(zhǎng)答案、列表答案、視頻答案、集合和圖片答案。

          --

          02

          關(guān)鍵技術(shù)

          1. 搜索問答技術(shù)與系統(tǒng)

          搜索中問答的明確需求占比接近1/4。這些問題不限領(lǐng)域,不限類型,一般可分成事實(shí)類和非事實(shí)類。搜索中問答的數(shù)據(jù)源是多種多樣的。從資源類型上看,包括網(wǎng)頁、UGC(用戶生產(chǎn)內(nèi)容,如社區(qū)問答)和PGC(專業(yè)生產(chǎn)內(nèi)容,例如自媒體號(hào))。從文本的組織形態(tài)上來講,數(shù)據(jù)可以分成結(jié)構(gòu)化、半結(jié)構(gòu)化和無結(jié)構(gòu)化三種。結(jié)構(gòu)化的數(shù)據(jù)具有一定約束,以知識(shí)圖譜為代表;半結(jié)構(gòu)化數(shù)據(jù)的典型代表是開放生態(tài)構(gòu)建或者從社區(qū)問答抽取的具有一定格式的問答對(duì)數(shù)據(jù);無結(jié)構(gòu)化數(shù)據(jù)廣泛存在,例如普通的網(wǎng)頁文本。


          搜索中的問答技術(shù)主要分為KBQA和DeepQA。

          KBQA指基于知識(shí)圖譜的問答,面向的是結(jié)構(gòu)化數(shù)據(jù),底層是離線構(gòu)建的知識(shí)圖譜,在線通過問題解析、圖譜查詢和推理得到答案,主要適用于事實(shí)類問題。

          DeepQA是一系列基于搜索和機(jī)器閱讀理解(MRC)的問答技術(shù),可以處理更廣泛的非結(jié)構(gòu)化數(shù)據(jù),基于離線問答內(nèi)容構(gòu)建和理解,在線通過搜索獲得候選文檔、使用機(jī)器閱讀理解技術(shù)來抽取答案,能解決更多問題需求類型。在實(shí)際應(yīng)用中,針對(duì)不同類型的數(shù)據(jù),我們構(gòu)建了三套DeepQA系統(tǒng),分別是優(yōu)質(zhì)問答數(shù)據(jù)源上的獨(dú)立檢索系統(tǒng)、全網(wǎng)搜索結(jié)合在線MRC的通用問答系統(tǒng)、以及端到端問答系統(tǒng)。

          下圖右側(cè)展示的是搜索問答系統(tǒng)的整體架構(gòu)。離線部分是問答內(nèi)容的構(gòu)建和理解,比如對(duì)專業(yè)生產(chǎn)內(nèi)容做質(zhì)量和權(quán)威性分析、從全網(wǎng)數(shù)據(jù)中進(jìn)行問答對(duì)的挖掘和選取等;數(shù)據(jù)源包括網(wǎng)頁庫、優(yōu)質(zhì)問答庫和知識(shí)圖譜;在線部分包括搜索問答結(jié)果的召回和排序、段落匹配和答案抽取、知識(shí)圖譜檢索和推理計(jì)算等,以及問答融合決策從多源結(jié)果中決定最終展現(xiàn)給用戶的答案。


          2. KBQA:基于知識(shí)圖譜的問答系統(tǒng)

          圖譜問答系統(tǒng)的數(shù)據(jù)依據(jù)不同實(shí)體更新的要求分為三路,數(shù)據(jù)通過直接的三元組索引查詢或者圖數(shù)據(jù)庫存儲(chǔ)檢索系統(tǒng)應(yīng)用。

          在線圖譜問答的流水線之一是語義解析的方法,系統(tǒng)先對(duì)查詢進(jìn)行領(lǐng)域分類以裝配不同類型的處理流程(例如漢語詩詞類、單實(shí)體類、多實(shí)體關(guān)系類),然后對(duì)查詢進(jìn)行語法樹分析和形式邏輯規(guī)約,在三元組中遞歸查詢和拼裝得到最終答案。該方法的優(yōu)點(diǎn)是支持一些復(fù)雜的查詢推理,且在規(guī)則適用的范疇內(nèi)準(zhǔn)確率較高。另一種流水線是基于深度學(xué)習(xí)的方法,系統(tǒng)首先識(shí)別出具有問答意圖的查詢,然后通過深度模型識(shí)別查詢問題中的實(shí)體,對(duì)實(shí)體屬性和查詢表達(dá)進(jìn)行深度語義匹配映射,計(jì)算出候選結(jié)果并進(jìn)行清洗和排序得到答案。該方法的優(yōu)點(diǎn)是對(duì)查詢語義理解較好,泛化性強(qiáng),召回率較高。

          3. DeepQA:基于搜索+機(jī)器閱讀理解的問答系統(tǒng)

          下面主要圍繞DeepQA相關(guān)工作展開介紹。

          早期的DeepQA系統(tǒng)具有非常復(fù)雜的流水線,例如IBM的Waston,以及2017年第一版“立知“問答。系統(tǒng)包括多個(gè)數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)模塊,在問題分析、答案候選的特征抽取、評(píng)分排序等諸多環(huán)節(jié)都可能有錯(cuò)誤的傳播和積累,可擴(kuò)展性不強(qiáng)。2017年以后,斯坦福的陳丹琦等人提出了一個(gè)面向規(guī)模文檔集的開放域問答系統(tǒng)——DrQA,系統(tǒng)定義了一種新的開放域問答實(shí)現(xiàn)方式,即通過檢索和深度機(jī)器閱讀理解(MRC)產(chǎn)生答案。在SQuAD等公開數(shù)據(jù)集和評(píng)測(cè)的推動(dòng)下,深度機(jī)器閱讀理解發(fā)展迅速,在查詢和文檔語義建模、上下文信息交互建模、答案抽取和預(yù)測(cè)方式建模上都不斷涌現(xiàn)新的方法,2019年機(jī)器閱讀理解系統(tǒng)甚至在事實(shí)類問答上超過了人類水平。

          然而在真實(shí)的搜索場(chǎng)景中,DeepQA仍然面臨著很多挑戰(zhàn)。首先是用戶的需求紛繁復(fù)雜,表達(dá)方式也千差萬別,而互聯(lián)網(wǎng)數(shù)據(jù)規(guī)模巨大,需求檢索匹配的難度很大。其次是網(wǎng)頁數(shù)據(jù)多種多樣,頁面類型和格式繁多、質(zhì)量參差、答案的形式不一,機(jī)器閱讀理解面臨較大的挑戰(zhàn)。

          下面介紹一些應(yīng)對(duì)搜索場(chǎng)景的問題我們所做的工作。

          (1)短答案MRC

          短答案MRC任務(wù)的定義是從搜索結(jié)果的多個(gè)文檔中抽取唯一的答案片段,并提供支持答案的文本來源。這個(gè)任務(wù)會(huì)面臨以下一些挑戰(zhàn):

          ①搜索結(jié)果噪聲過多

          噪聲包括不相關(guān)結(jié)果、不一致答案等。短答案抽取模型是一個(gè)多文檔段落抽取的模型,我們將搜索排名topN(常用N=10)的文檔段落輸入到BERT中進(jìn)行表示建模,然后預(yù)測(cè)段落中答案的起始位置。為了解決輸入文檔不相關(guān)的問題,我們將“答案存在性判別”和“答案起止位置預(yù)測(cè)”兩個(gè)目標(biāo)進(jìn)行聯(lián)合訓(xùn)練;為了應(yīng)對(duì)各文檔的答案不一致問題,我們加入了多文檔交互,將多個(gè)文檔中包含答案概率最大的片段拼接起來進(jìn)行建模,信息融合之后再預(yù)測(cè)文檔包含答案的概率。

          ②答案出現(xiàn)常識(shí)性錯(cuò)誤

          常識(shí)性錯(cuò)誤即模型輸出無意義答案,例如邊界錯(cuò)誤、答案類型錯(cuò)誤。我們的做法是引入一些外部知識(shí),例如百科、知識(shí)圖譜等,給候選文檔中符合答案類型的實(shí)體打上特殊的標(biāo)記,在建模過程中加強(qiáng)對(duì)它們的關(guān)注。

          ③魯棒性問題

          這里魯棒性問題指的是由于過擬合導(dǎo)致模型輸出不穩(wěn)定。Dropout是一種有效的減少過擬合的方式,但它的缺點(diǎn)是不能保持輸出的一致性。我們應(yīng)用了R-Drop,通過將Dropout作用于輸出層,降低了訓(xùn)練和測(cè)試的不一致性,同時(shí)引入對(duì)稱KL散度作為正則項(xiàng),增強(qiáng)了輸出的穩(wěn)定性。在實(shí)驗(yàn)過程中,我們發(fā)現(xiàn)對(duì)輸出層使用兩次dropout效果較好。此外我們還對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行了同語義問題的數(shù)據(jù)增強(qiáng),加入相同語義query下的段落輸出部分的KL-Loss,增強(qiáng)了模型的穩(wěn)定性。

          ④答案歸一化和多span問題

          在抽取式閱讀理解中,由于多文檔表述的不一致,往往會(huì)遇到答案歸一化的問題,比如“安全帶使用期限是幾年”的問題答案可能有“3到5年”、“3年至5年等”;而且還有答案并不是連續(xù)判斷,比如“沉魚落雁指的是誰”這個(gè)問題中,答案可能對(duì)應(yīng)文檔中兩個(gè)片段(span)。為了解決上述問題,我們嘗試用生成式閱讀理解方法,以Fusion-in-Decoder(FiD)為例,將檢索得到的多文檔分別進(jìn)行編碼表示,拼接起來輸入到decoder生成統(tǒng)一的答案。

          實(shí)踐中利用大規(guī)模點(diǎn)擊日志文檔生成查詢進(jìn)行預(yù)訓(xùn)練,利用短答案日志構(gòu)建大量弱監(jiān)督數(shù)據(jù)進(jìn)行自訓(xùn)練,有效提升了生成式閱讀理解的效果。由于生成模型輸出的答案得分其實(shí)是語言模型的困惑度,不能很好地刻畫答案本身的置信度,我們訓(xùn)練了一個(gè)生成答案的置信度預(yù)測(cè)模型,對(duì)答案輸出進(jìn)行決策。

          (2)長(zhǎng)答案MRC

          相比短答案,長(zhǎng)答案MRC受到的研究關(guān)注相對(duì)較少,一方面因?yàn)閱栴}更加復(fù)雜,數(shù)據(jù)集稀缺,另一方面因?yàn)殚L(zhǎng)答案在內(nèi)容和表達(dá)方式上有不確定性,評(píng)價(jià)起來也相對(duì)較難。

          搜索場(chǎng)景中長(zhǎng)答案和短答案主要有以下幾個(gè)方面的差異:

          ①長(zhǎng)答案MRC-組合式問答

          針對(duì)長(zhǎng)答案包含信息量大、不連續(xù)的特點(diǎn),我們提出了一種“組合式問答”的任務(wù)形式:從搜索結(jié)果的單個(gè)文檔中抽取出一組片段來合成精選摘要答案。任務(wù)輸入為給定問題和文檔的完整片段組合,輸出為答案片段組合。評(píng)價(jià)方式為片段預(yù)測(cè)的F1和人工評(píng)價(jià)相結(jié)合。

          組合式問答模型的整體框架基于BERT,輸入是問題和進(jìn)行了啟發(fā)式分句的文檔句子序列,輸出是每個(gè)句子是否是答案的概率。我們引入了兩個(gè)非常有用的設(shè)計(jì)。

          第一個(gè)是引入頁面的結(jié)構(gòu)信息。由于網(wǎng)頁的HTML能夠一定程度上反映頁面結(jié)構(gòu)、文本關(guān)聯(lián)以及展示內(nèi)容的重要度等特征,我們選擇了部分網(wǎng)頁標(biāo)簽作為符號(hào)輸入到模型中。

          第二個(gè)是引入針對(duì)性的預(yù)訓(xùn)練任務(wù)。—般預(yù)訓(xùn)練都是建模句子級(jí)別的關(guān)系,沒有有效挖掘文檔結(jié)構(gòu)的信息;我們引入了兩類相關(guān)的預(yù)訓(xùn)練任務(wù),一類是問題選擇(QS),即隨機(jī)替換一個(gè)問題并預(yù)測(cè);另一類是節(jié)點(diǎn)選擇(NS),可以對(duì)句子和符號(hào)進(jìn)行隨機(jī)替換或打亂順序。這樣的預(yù)訓(xùn)練任務(wù)可以讓模型更深刻地理解問題和長(zhǎng)文本的內(nèi)容。

          由于文檔具有層級(jí)結(jié)構(gòu),一個(gè)自然的想法是利用圖網(wǎng)絡(luò)來建模。我們嘗試在模型輸出側(cè)增加圖網(wǎng)絡(luò),將句子中詞的連接、句子之間的連接以及問題和句子的連接用圖結(jié)構(gòu)表示并通過Attention Mask實(shí)現(xiàn),實(shí)驗(yàn)表明加入層次結(jié)構(gòu)信息的效果提升明顯。

          長(zhǎng)答案閱讀理解中同樣可以采用短答案閱讀理解類似的思路:(1)同時(shí)預(yù)測(cè)文檔可答概率和答案句子概率;(2)引入門機(jī)制學(xué)習(xí)文檔和句子的關(guān)系;(3)使用R-drop提升魯棒性。

          我們發(fā)現(xiàn)模型對(duì)問題的理解仍然不夠充分。舉一個(gè)極端的例子:當(dāng)不輸入問題,直接針對(duì)文檔預(yù)測(cè)長(zhǎng)答案,模型仍然能夠達(dá)到一定的抽取效果。說明閱讀理解模型輸出的答案受到文檔本身的影響較大,而對(duì)問題的關(guān)注不夠。為了解決這個(gè)問題,我們做了一些數(shù)據(jù)樣本增強(qiáng)和對(duì)抗的工作。一方面通過主動(dòng)學(xué)習(xí)不斷優(yōu)化訓(xùn)練數(shù)據(jù),讓模型學(xué)習(xí)到更多不會(huì)的能力,另一方面通過點(diǎn)擊日志挖掘同一個(gè)文檔下語義相同或不同的query。由于同一個(gè)文檔中的不同部分可以回答不同的問題,這樣可以讓模型更關(guān)注問題相關(guān)的信息,而不是文檔本身。

          (3)長(zhǎng)答案MRC-判斷類觀點(diǎn)問答

          對(duì)于判斷類觀點(diǎn)問答任務(wù),考慮到用戶不會(huì)僅僅滿足于論斷,而會(huì)更關(guān)心論據(jù),我們?cè)O(shè)計(jì)了一個(gè)模型,首先抽取能夠回答問題的長(zhǎng)答案,即論據(jù),然后根據(jù)該論據(jù)做論斷的分類,產(chǎn)生一個(gè)短答案。

          模型的整體結(jié)構(gòu)是基于長(zhǎng)答案模型結(jié)構(gòu)的改進(jìn),在抽取長(zhǎng)答案的同時(shí),將query、title和長(zhǎng)答案抽取過程中最高概率答案句拼接起來輸入判斷模塊。通過論據(jù)抽取和論點(diǎn)分類兩個(gè)目標(biāo)的聯(lián)合學(xué)習(xí),模型可以解決短答案抽取無法解決的問題。比如在下圖的例子中,對(duì)于“把兔子關(guān)在籠子里好嗎”這個(gè)問題,短答案抽取并不能直接抽取出“好”或者“不好”的答案片段,而通過分類可以知道它是一個(gè)否定的回答。

          (4)問答式搜索

          DeepQA的一個(gè)重要部分是從大規(guī)模數(shù)據(jù)檢索出相關(guān)候選文檔,才能通過閱讀理解模型抽取答案。傳統(tǒng)搜索更關(guān)注相關(guān)性,即文檔和問題相關(guān),而問答更關(guān)注檢索結(jié)果是否能回答問題,這是問答式搜索和傳統(tǒng)搜索的不同。

          問答式搜索系統(tǒng)需要一種更細(xì)粒度、更精準(zhǔn)的語義檢索匹配方式。稠密段落檢索,即通過深度語義表示學(xué)習(xí),從大規(guī)模文本中檢索出和查詢相關(guān)的段落,包括自然段、任意句子、詞片段。稠密段落檢索是稠密向量檢索的一種。傳統(tǒng)基于關(guān)鍵字詞構(gòu)建的倒排檢索(稀疏檢索),雖能精確地召回結(jié)果,但是會(huì)面臨比較嚴(yán)重的語義鴻溝問題;而稠密向量檢索是解決查詢和文檔之間語義鴻溝的有效手段,但是從符號(hào)到向量的表示過程損失了一定的語義。所以需要對(duì)稠密向量表示進(jìn)行優(yōu)化,并設(shè)計(jì)合適的向量檢索和語義匹配方法。

          問答式搜索也是一個(gè)從大規(guī)模數(shù)據(jù)到少量能抽取答案的文檔的金字塔式篩選過程。為了提高在線服務(wù)效率,在面向海量數(shù)據(jù)的召回和初排階段一般使用非交互式匹配模型,待檢索到一定規(guī)模的相關(guān)候選后再采用更精細(xì)化也更加耗時(shí)的交互式匹配模型。交互式和非交互式匹配模型各有其優(yōu)缺點(diǎn),如圖所示。

          • 稠密段落檢索模型

          我們選用非交互式異形雙塔模型進(jìn)行稠密段落檢索的Query-Passage語義表示學(xué)習(xí)。通過網(wǎng)頁搜索日志和問答對(duì)數(shù)據(jù)可以獲取大量的正負(fù)樣本,從而進(jìn)行大規(guī)模對(duì)比學(xué)習(xí)。

          這里介紹一種向量表示的優(yōu)化方法——Barlow-Twins。通過在訓(xùn)練目標(biāo)里加上一個(gè)相關(guān)性去除目標(biāo),降低向量表示的冗余性,使得訓(xùn)練出來的向量在空間的分布非常均勻。

          負(fù)采樣方法是對(duì)比學(xué)習(xí)中非常重要的一環(huán),對(duì)稠密向量表示效果有很大影響,我們對(duì)負(fù)采樣進(jìn)行了兩個(gè)方面的優(yōu)化:

          一個(gè)是很多相關(guān)工作都會(huì)采用的Cross-batch負(fù)采樣,在多 GPU 并行訓(xùn)練時(shí),將其它 GPU 批次內(nèi)的全部段落作為當(dāng)前問題的負(fù)樣本,極大地增加了負(fù)樣本數(shù),也使得訓(xùn)練效率得到很大提升。Cross-batch負(fù)采樣還能緩解訓(xùn)練和推理時(shí)負(fù)樣本分布的不一致性,因?yàn)樵趩柎鹗剿阉髦校P托枰獜拇笠?guī)模數(shù)據(jù)集中找到相關(guān)答案候選,但訓(xùn)練過程見到的查詢段落樣本通常遠(yuǎn)小于預(yù)測(cè)時(shí)的候選數(shù)據(jù)規(guī)模,這會(huì)導(dǎo)致模型在訓(xùn)練時(shí)表現(xiàn)良好而在應(yīng)用中不夠好。

          另一個(gè)是提升負(fù)樣本的質(zhì)量。一方面需要讓負(fù)樣本對(duì)模型來說更難,這樣能學(xué)習(xí)到更多的知識(shí)。另一方面要盡可能少地引入False Negative樣本。我們提出了混合降噪負(fù)采樣策略:先通過非降噪負(fù)采樣,例如已有的召回模型(BM25、初始訓(xùn)練的召回模型等)進(jìn)行Top-K采樣,這樣得到的樣本相對(duì)較難,當(dāng)然也會(huì)引入一些False Negative;然后進(jìn)行降噪負(fù)采樣,通過訓(xùn)練一個(gè)Re-ranker對(duì)樣本進(jìn)行篩選,去除實(shí)際可能是正例的噪聲;兩者結(jié)合訓(xùn)練,實(shí)驗(yàn)證明效果提升非常明顯。

          • Query-Passage交互匹配模型

          召回階段的核心任務(wù)是區(qū)分答案相關(guān)和不相關(guān)的候選,召回之后就需要通過匹配更進(jìn)一步排序這些候選文檔。這里簡(jiǎn)要介紹一下我們的Query-Passage交互匹配模型。

          模型訓(xùn)練主要分三個(gè)階段,首先利用大規(guī)模網(wǎng)頁數(shù)據(jù),包括百科、微信、知乎以及問答點(diǎn)擊頁面等多樣的數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練;接下來是對(duì)比式弱監(jiān)督訓(xùn)練,通過點(diǎn)擊和曝光未點(diǎn)擊數(shù)據(jù)、問答對(duì)結(jié)合負(fù)采樣構(gòu)造正負(fù)樣本;最后在人工標(biāo)注的問答匹配數(shù)據(jù)上進(jìn)行訓(xùn)練。人工標(biāo)注的樣本有四類標(biāo)簽,分別是完全不相關(guān)、相關(guān)、能部分回答問題、能完整地很好回答問題。為了進(jìn)一步提升模型效果,我們還使用了自訓(xùn)練技術(shù),利用人工標(biāo)注數(shù)據(jù)訓(xùn)練模型之后,通過該模型進(jìn)行大量的自動(dòng)化標(biāo)注并從中篩選一些高質(zhì)量標(biāo)注數(shù)據(jù),繼續(xù)訓(xùn)練原始模型。多次迭代之后,模型的泛化性能會(huì)有較大的提升。

          --

          03

          前沿研究

          下面介紹開放域智能問答的一些相關(guān)前沿研究和進(jìn)展。

          1. 端到端問答

          近年來關(guān)于開放域端到端問答的研究如火如荼,下圖摘自ACL 2020 Tutorial: Open domain question and answering,對(duì)端到端問答系統(tǒng)發(fā)展的總結(jié)。

          第一代端到端問答模型采取兩階段的方式,通過檢索器和閱讀器串聯(lián)來進(jìn)行答案提取,例如DrQA;前面我們所講的DeepQA系統(tǒng)也是遵循這種范式的設(shè)計(jì);第二代的模型為閱讀器和檢索器聯(lián)合優(yōu)化的模型,如R3、DenSPI;第三代的模型不需要檢索器,直接通過模型生成答案,如T5、GPT3。

          檢索器和閱讀器的聯(lián)合優(yōu)化是一個(gè)難點(diǎn)。一種方法是將檢索的文檔看做隱變量,依靠EM優(yōu)化語義表示模型和生成模型,即通過閱讀器的輸出概率作為檢索器優(yōu)化的目標(biāo),反過來再基于檢索器的輸出優(yōu)化閱讀器的輸出概率。這樣交替進(jìn)行同時(shí)提升閱讀器和檢索器的效果。我們嘗試了一種Hard-EM的方法,直接把預(yù)測(cè)答案是否包含于檢索文檔作為硬匹配信號(hào)來優(yōu)化文檔檢索的過程。如下圖所示,通過答案硬匹配文檔獲得訓(xùn)練三元組<q, d, a>,然后訓(xùn)練FiD答案抽取模型,再利用新的答案抽取模型預(yù)測(cè)出來的更優(yōu)質(zhì)的答案,繼續(xù)硬匹配和過濾候選文檔輸入。幾輪循環(huán)之后答案抽取的EM和F1指標(biāo)均得到提升。

          2. 知識(shí)指導(dǎo)的問答

          如何在深度模型中引入知識(shí)也是問答研究的熱點(diǎn)。真實(shí)場(chǎng)景中有很多問題需要知識(shí)推理,比如“小汽車科目二多少分及格”這個(gè)問題,示例的法規(guī)文本里沒有明確的描述,但是可以根據(jù)推理得到答案;“葡萄籽油的食用方法”這個(gè)問題,不同答案中包含的“知識(shí)點(diǎn)”相互存在沖突和分歧,需要進(jìn)行知識(shí)驗(yàn)證。

          知識(shí)指導(dǎo)的問答相關(guān)工作,有一種是把特定的知識(shí)輸入到答案抽取模型一起學(xué)習(xí),比如K-BERT,把原輸入中實(shí)體所涉及到的三元組通過軟位置編碼的方式融合到輸入中,從而引入了實(shí)體相關(guān)的知識(shí)。另一類方法是通過知識(shí)增強(qiáng)的預(yù)訓(xùn)練模型提升下游任務(wù)的效果。

          QQ瀏覽器搜索內(nèi)容技術(shù)團(tuán)隊(duì)還提出了一種知識(shí)增強(qiáng)預(yù)訓(xùn)練的方法,該模型引入了三類知識(shí)性任務(wù),包括遠(yuǎn)程關(guān)系監(jiān)督分類、三元組文本mask預(yù)測(cè)、以及同類實(shí)體替換預(yù)測(cè),訓(xùn)練過程中將這三類任務(wù)和語言模型任務(wù)結(jié)合在一起訓(xùn)練。為了保證原始模型的參數(shù)在訓(xùn)練過程中不會(huì)有災(zāi)難性遺忘,設(shè)計(jì)了一個(gè)新的知識(shí)記憶結(jié)構(gòu),將原有模型的所有參數(shù)固定住,只用這個(gè)新的知識(shí)記憶矩陣承載上面多任務(wù)引入的知識(shí)。實(shí)驗(yàn)證明知識(shí)增強(qiáng)的預(yù)訓(xùn)練在很多下游任務(wù)上都能夠獲得一定的提升,尤其是在上下文不充分的短文本任務(wù)上。

          3. 多模態(tài)問答

          當(dāng)前越來越多的優(yōu)質(zhì)內(nèi)容以視頻形式存在,從文本答案到視頻答案也是一個(gè)大的趨勢(shì)。基于視頻載體的問答需要對(duì)視頻內(nèi)容進(jìn)行感知分析+語義分析,進(jìn)而通過顯示/隱式的語義表示和計(jì)算(檢索、匹配、閱讀、生成)得到視頻化的答案。

          我們現(xiàn)在做的一個(gè)比較初步的工作是利用視頻的語音和字幕進(jìn)行視頻文本化,然后通過閱讀理解結(jié)合文本生成的技術(shù)進(jìn)行視頻答案摘要,通過文本生成和字幕時(shí)間匹配,還能得到視頻分段以及關(guān)鍵幀標(biāo)簽。右圖是我們?cè)谝曨l問答做出來的短答案摘要的效果,相對(duì)于文本答案可以給用戶提供更多便捷性的幫助。未來還有更多基于多模態(tài)內(nèi)容的問答研究值得探索。

          --

          04

          Q&A

          Q1:針對(duì)用戶的query,KBQA和DeepQA的執(zhí)行順序是什么?

          A1:兩者是同步進(jìn)行的,最后根據(jù)答案產(chǎn)生的情況做決策。DeepQA這邊還會(huì)有一個(gè)問題分類的模塊,判斷問題的答案是短答案還是長(zhǎng)答案。所以底層是多個(gè)系統(tǒng)的并行,包括KBQA系統(tǒng)、短答案系統(tǒng)和長(zhǎng)答案系統(tǒng)。

          Q2:自己嘗試后發(fā)現(xiàn)DeepQA的響應(yīng)非常慢,工業(yè)應(yīng)用中通過什么方式來提高問答響應(yīng)的速度?

          A2:響應(yīng)的速度分為兩個(gè)方面,檢索模塊和閱讀理解模塊的響應(yīng)。需要看這兩部分分別耗時(shí),也需要分別優(yōu)化。檢索模塊往往會(huì)通過分層篩選的方式來限制輸入文本的數(shù)量。計(jì)算越復(fù)雜的模塊,輸入文本數(shù)量越少。召回階段我們采用非交互式模型快速獲得相關(guān)文本,排序階段再使用更復(fù)雜的交互式模型進(jìn)行少量精細(xì)化計(jì)算。最后閱讀理解模塊的文本輸入相對(duì)更少了,目前只針對(duì)Top10結(jié)果去做計(jì)算。以上是系統(tǒng)層面的優(yōu)化。

          具體到模型優(yōu)化的話,可能就會(huì)需要具體看輸入的文本長(zhǎng)度、模型復(fù)雜度,模型所使用的推理系統(tǒng),推理器和硬件的匹配情況等。最主要的是需要去分析響應(yīng)時(shí)間慢的瓶頸的問題,然后再針對(duì)性解決。

          Q3:針對(duì)用戶的query也會(huì)有拼寫糾錯(cuò)的處理,什么時(shí)候會(huì)觸發(fā)這個(gè)處理?怎么處理?

          A3:糾錯(cuò)不是問答獨(dú)有的問題,是整個(gè)搜索系統(tǒng)面臨的問題。在搜索的最開始也就是查詢分析的模塊,不僅有糾錯(cuò),還有查詢的分詞,查詢重要度的分析,查詢?cè)~之間的關(guān)系分析等。糾錯(cuò)往往是搜索前置的模塊,糾錯(cuò)之后的處理也會(huì)有不同,比如對(duì)置信度非常高的糾錯(cuò),可以直接修改查詢。系統(tǒng)更保險(xiǎn)的做法是觸發(fā)二次查詢,也就是將原詞的搜索結(jié)果和糾錯(cuò)后的搜索結(jié)果同時(shí)拿到,然后再根據(jù)結(jié)果的反饋綜合決策。

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


          分享嘉賓:姚婷 騰訊 專家研究員

          編輯整理:王惠靈 合肥工業(yè)大學(xué)

          出品平臺(tái):DataFunTalk


          01/分享嘉賓

          姚婷|騰訊 專家研究員


          畢業(yè)于清華大學(xué)計(jì)算機(jī)系,從事自然語言處理、搜索排序、智能問答方向的研究工作,負(fù)責(zé)主導(dǎo)了搜狗搜索“立知”問答系統(tǒng)研發(fā)。目前擔(dān)任騰訊PCG搜索應(yīng)用部專家研究員,負(fù)責(zé)QQ瀏覽器搜索中智能問答技術(shù)的研究和落地應(yīng)用。



          02/關(guān)于我們

          DataFun:專注于大數(shù)據(jù)、人工智能技術(shù)應(yīng)用的分享與交流。發(fā)起于2017年,在北京、上海、深圳、杭州等城市舉辦超過100+線下和100+線上沙龍、論壇及峰會(huì),已邀請(qǐng)超過2000位專家和學(xué)者參與分享。其公眾號(hào) DataFunTalk 累計(jì)生產(chǎn)原創(chuàng)文章700+,百萬+閱讀,14萬+精準(zhǔn)粉絲。


          主站蜘蛛池模板: 久久se精品动漫一区二区三区| 免费一区二区三区| 中文字幕精品一区| 国产电影一区二区| 日韩精品无码一区二区三区四区| 无码国产精品一区二区免费虚拟VR | 在线观看免费视频一区| 精品免费国产一区二区三区| 国产AV午夜精品一区二区三区| 无码国产亚洲日韩国精品视频一区二区三区 | 国产精品资源一区二区| 波多野结衣一区二区三区| 无码人妻精品一区二区三18禁| 国产精品福利区一区二区三区四区| 亚洲AV无码国产一区二区三区| 国精无码欧精品亚洲一区| 国产人妖在线观看一区二区| 亚洲欧美日韩中文字幕一区二区三区 | 国产一区二区精品尤物| 无码少妇A片一区二区三区| 亚洲一区二区三区深夜天堂| 国产成人久久一区二区不卡三区 | 久久精品道一区二区三区| 天码av无码一区二区三区四区 | 国产精品久久无码一区二区三区网| 色窝窝无码一区二区三区| 久久精品国产一区二区电影| 无码日韩人妻AV一区二区三区| 日韩精品一区二三区中文 | 国产熟女一区二区三区四区五区 | 人妻精品无码一区二区三区| 国产乱人伦精品一区二区在线观看| 蜜芽亚洲av无码一区二区三区| 成人免费视频一区| 精品人妻少妇一区二区三区| 国产一区二区三区免费| 一区高清大胆人体| 中文字幕亚洲综合精品一区| 国产一区二区三区精品久久呦| 竹菊影视欧美日韩一区二区三区四区五区| 国产成人综合亚洲一区|