【导读】TinyBERT是谷歌开发的新模型,与传统BERT相比,它快10倍,小20倍,可在CPU上运行。
作者:Jack Pertschuk,Cole Thienes
最近,Google推出了一种新的搜索模型。该方法基于流行的开源Transformer BERT,它使用语言理解来解决传统关键字方法无法做到的搜索,提升搜索的体验。
特别是对于更长的,更多的对话查询,或诸如“ for”和“ to”之类的介词与含义有很大关系的搜索,改进后的搜索引擎将能够理解查询中单词的上下文。用户可以通过一种自然的方式进行搜索。
-Google搜索副总裁Pandu Nayak
本文构建了NBoost模型,并在此过程中使用了TinyBERT进行搜索,以使非专业人也可以轻松使用高级搜索排名模型。
更小,更快的BERT
BERT可以改善搜索结果,但有一个要点:要运行这些查询理解模型需要资源。尤其是当响应时间至关重要且必须处理数百万次搜索时。这项挑战是如此艰巨,以至于Google甚至构建了自己的硬件(云TPU)来运行模型。
为了在标准硬件上运行这些模型,我们使用知识蒸馏,该过程,用较大的教师网络训练较小的学生网络,学生网络保证了大多数准确性,但使用的层数较少(通常较小),从而使其变得更小且更快。
TinyBERT架构
参考华为的代码(https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/TinyBERT),并对其进行了修改,我们进行了知识蒸馏。并在MS Marco数据集进行训练和评估。我们先使用MS Marco训练三元组在PyTorch中训练了一个基于bert的教师网络。然后,我们用它作为教师来训练一个较小的学生BERT网络,该网络只有4个隐藏层(标准BERT是12)。此外,这些层中的每一个只有312维(标准BERT是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
}
评估
MS Marco是现实世界中搜索引擎使用情况数据的最大公共来源,使其非常适合评估搜索和问答模型。当BERT Base首次在MSMarco上使用时,它以0.05的MRR击败了最新技术。基于BERT的解决方案仍然位于排行榜的顶部。我们的目标是找到一种方法,以一种足以在现实世界中使用的模型来实现这一目标。
TinyBERT,虽然不如BERT Base有效,但我们的实验表明,它保留了BERT Base MRR分数的90%(0.26与BM25排名前50位的0.29对比0.29,而使模型快10倍,小20倍)。但是,基于学术基准(例如MS Marco)的结果通常缺乏现实世界的可概括性,因此应谨慎考虑。
原文链接:https://towardsdatascience.com/tinybert-for-search-10x-faster-and-20x-smaller-than-bert-74cd1b6b5aec