目前,自然语言处理(NLP)模型已成为人工智能的重要领域,它们是许多AI系统与用户交互的关键接口。然而,NLP发展的主要障碍在于对高质量标注数据的高度依赖。由于语言的通用性,很难找到特定领域的注释数据来训练模型。针对这一问题,NLP模型开始采用大量未标注数据进行语言规则的预训练。知名的预训练模型包括Word2Vec、GloVe和FastText。尽管如此,这些模型仍面临上下文关联表达的挑战。
最近,Google AI语言团队发布了BERT项目的源代码,这是一个用于预训练语言表达的库,训练效果显著。
你可能会好奇BERT与其它预训练模型有何不同。理论上,NLP预训练技术可以是上下文无关的,也可以是上下文检索的。上下文无关的模型如Word2Vec或GloVe,它们通过单个词汇生成词嵌入表示。例如,“足球”这个词在句子“我去了足球比赛”和“我遇到了一些来自皇家马德里的足球球员”中具有相同的含义。
相比之下,上下文检索模型则根据句子中其他单词的不同方向生成表达。在我们的例子中,上下文检索模型会根据短语“我去…”或“我遇到了…”来定义“足球”的含义,而不是根据“比赛”或“皇家马德里的球员”。因此,预训练模型可以是上下文无关的,也可以是上下文检索的,甚至可以是单向的或双向的。
BERT通过根据前后单词的意义创建上下文检索表达,扩展了之前的预训练模型方法。实现双向、上下文检索的语义表达并不容易。最大的挑战在于,在训练模型时,不能简单地将一个单词的前后单词作为上下文,这可能导致单词在多层模型中寻找自身。Google BERT通过巧妙的架构设计解决了这一难题。
BERT的模型架构基于多层双向变换编码器,与Tensor2Tensor库中的架构相似。与OpenAI GPT或ELMo等其他预训练模型相比,BERT在转换器之间采用了双向连接。
BERT的最大贡献在于使用了两个独特的无监督预测任务来解决上述挑战,使单词能够在上下文中“认出自己”。这两个任务分别是:
这两个任务的结合使得BERT在几乎所有NLP任务中都能提供更丰富、更双向的语义表达。
使用BERT分为两个阶段:预训练和微调。
Google使用BERT作为其他优秀NLP系统的基准,取得了显著的成果。例如,在SQuAD v1.1中,BERT取得了93.2%的F1分数,超过了之前的模型91.6%和人工翻译的91.2%。此外,BERT还提升了GLUE基准测试7.6%,这是一个包含9种自然语言理解任务的集合。
语言模型的迁移学习近期带来了大量经验上的提升,表明大规模无监督预训练模型在众多语言理解系统中扮演着重要角色。BERT展示了在NLP预训练模型中获取双向上下文语言表达的可能性。目前,TensorFlow实现了BERT,使得开发者能够将其前沿技术应用于NLP场景,同时控制计算成本。