0
最近,谷歌推出了一種新的方法來進行搜索并決定你看到的結果。這種方法基于流行的開源 transformer BERT,使用語言理解來獲取搜索背后的含義,而傳統(tǒng)的關鍵字方法無法做到這一點。
我們構建 NBoost 是為了讓非 Google 用戶也能方便地使用高級搜索排名模型,在這個過程中,我們開發(fā)了 TinyBERT,這就是我在本文中要介紹的內(nèi)容。
尤其是對于更長的、更具會話性的查詢,或是在「for」和「to」等介詞對詞義非常重要的情況下進行的搜索,將能夠理解查詢中單詞的上下文。你可以用一種你覺得很自然的方式去查找。
——Pandu Nayak,谷歌搜索副總裁
使 BERT 更小但更快
BERT 已經(jīng)被證明可以改進搜索結果,但有一個缺點:運行這些查詢理解模型需要大量的算力。當在面臨速度很重要并且需要處理數(shù)以百萬計的搜索時,這一點尤其關鍵。這一挑戰(zhàn)如此艱巨,以至于谷歌甚至建立了自己的硬件——云 TPU 來運行這些模型。他們用來在生產(chǎn)中運行這些 TPU 的代碼是私有的,所以任何想運行它的人就不那么走運了。
為了在標準硬件上運行這些模型,我們使用知識蒸餾,即使用一個較大的教師網(wǎng)絡來訓練一個較小的學生網(wǎng)絡的過程,該網(wǎng)絡保持了準確性,但使用的層數(shù)較少,因此通常較小,可以變得更小、更快。
圖片來源:https://nervanasystems.github.io/distiller/knowledge_distillation.html
TinyBERT 架構
我們使用此 repo 中的代碼進行知識蒸餾,并對其進行了修改,以便在 MS-Marco 數(shù)據(jù)集上進行訓練和評估。我們最初在 Pythorch 訓練了一個教師網(wǎng)絡,設置了 Marco 訓練數(shù)據(jù)集。然后我們用它作為老師來訓練一個只有 4 個隱藏層的更小的學生 BERT 網(wǎng)絡,這個學生網(wǎng)絡不是標準的 12 層。另外,這些層中的每一層的大小只有 312 而不是 768,這使得模型更加輕巧。我們在 BERT 的末尾使用一個前饋二值分類層來產(chǎn)生搜索排名的分數(shù)。
搜索分數(shù)對(問題,答案)或(搜索,搜索結果),然后根據(jù)這些分數(shù)對結果進行排序
下面是我們使用的 tinyBERT 架構的 bert_config.json 示例,與標準的 bert_config 有顯著的區(qū)別。
{
“attention_probs_dropout_prob”: 0.1,
“cell”: {},
“emb_size”: 312,
“hidden_act”: “gelu”,
“hidden_dropout_prob”: 0.1,
“hidden_size”: 312,
“initializer_range”: 0.02,
“intermediate_size”: 1200,
“max_position_embeddings”: 512,
“num_attention_heads”: 12,
“num_hidden_layers”: 4,
“pre_trained”: “”,
“structure”: [],
“type_vocab_size”: 2,
“vocab_size”: 30522
}
模型評估
[1] MRR 重排前 50 名的結果來自 BM25
MS Marco 是現(xiàn)實世界中最大的公開搜索引擎使用數(shù)據(jù)來源,是評估搜索和問答模型的理想選擇。它顯示了真實世界的 Bing 結果和用戶最終點擊的信息。當 BERT-Base 首次用于 MSMarco 時,它以 0.05mrr的速度大大超過了最先進的技術?;?BERT 的解決方案仍然位居榜首。我們的目標是找到一種方法,從一個足夠快的模型來實現(xiàn)這一推動作用,以便在現(xiàn)實世界中使用。
開始使用 TinyBERT 吧!雖然沒有 BERT-Base 對重新評分有效,但我們的實驗表明,它保留了 BERT-Base 的 MRR 評分的 90%,同時使模型快了約 10 倍,小了約 20 倍。然而,基于像 MS Marco 這樣的學術基準的研究結果往往缺乏現(xiàn)實世界的概括性,因此應該謹慎對待。
via:https://towardsdatascience.com/tinybert-for-search-10x-faster-and-20x-smaller-than-bert-74cd1b6b5aec
雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)版權文章,未經(jīng)授權禁止轉載。詳情見轉載須知。