0

最近,谷歌推出了一種新的方法來進行搜索并決定你看到的結果。這種方法基于流行的開源 transformer BERT,使用語言理解來獲取搜索背后的含義,而傳統的關鍵字方法無法做到這一點。
我們構建 NBoost 是為了讓非 Google 用戶也能方便地使用高級搜索排名模型,在這個過程中,我們開發了 TinyBERT,這就是我在本文中要介紹的內容。
尤其是對于更長的、更具會話性的查詢,或是在「for」和「to」等介詞對詞義非常重要的情況下進行的搜索,將能夠理解查詢中單詞的上下文。你可以用一種你覺得很自然的方式去查找。
——Pandu Nayak,谷歌搜索副總裁
使 BERT 更小但更快
BERT 已經被證明可以改進搜索結果,但有一個缺點:運行這些查詢理解模型需要大量的算力。當在面臨速度很重要并且需要處理數以百萬計的搜索時,這一點尤其關鍵。這一挑戰如此艱巨,以至于谷歌甚至建立了自己的硬件——云 TPU 來運行這些模型。他們用來在生產中運行這些 TPU 的代碼是私有的,所以任何想運行它的人就不那么走運了。
為了在標準硬件上運行這些模型,我們使用知識蒸餾,即使用一個較大的教師網絡來訓練一個較小的學生網絡的過程,該網絡保持了準確性,但使用的層數較少,因此通常較小,可以變得更小、更快。

圖片來源:https://nervanasystems.github.io/distiller/knowledge_distillation.html
TinyBERT 架構
我們使用此 repo 中的代碼進行知識蒸餾,并對其進行了修改,以便在 MS-Marco 數據集上進行訓練和評估。我們最初在 Pythorch 訓練了一個教師網絡,設置了 Marco 訓練數據集。然后我們用它作為老師來訓練一個只有 4 個隱藏層的更小的學生 BERT 網絡,這個學生網絡不是標準的 12 層。另外,這些層中的每一層的大小只有 312 而不是 768,這使得模型更加輕巧。我們在 BERT 的末尾使用一個前饋二值分類層來產生搜索排名的分數。

搜索分數對(問題,答案)或(搜索,搜索結果),然后根據這些分數對結果進行排序
下面是我們使用的 tinyBERT 架構的 bert_config.json 示例,與標準的 bert_config 有顯著的區別。
{
“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 是現實世界中最大的公開搜索引擎使用數據來源,是評估搜索和問答模型的理想選擇。它顯示了真實世界的 Bing 結果和用戶最終點擊的信息。當 BERT-Base 首次用于 MSMarco 時,它以 0.05mrr的速度大大超過了最先進的技術。基于 BERT 的解決方案仍然位居榜首。我們的目標是找到一種方法,從一個足夠快的模型來實現這一推動作用,以便在現實世界中使用。
開始使用 TinyBERT 吧!雖然沒有 BERT-Base 對重新評分有效,但我們的實驗表明,它保留了 BERT-Base 的 MRR 評分的 90%,同時使模型快了約 10 倍,小了約 20 倍。然而,基于像 MS Marco 這樣的學術基準的研究結果往往缺乏現實世界的概括性,因此應該謹慎對待。
via:https://towardsdatascience.com/tinybert-for-search-10x-faster-and-20x-smaller-than-bert-74cd1b6b5aec
雷鋒網雷鋒網雷鋒網
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。