bert获得词向量_BERT中的词向量指南

本文深入探讨谷歌BERT模型生成的词向量,介绍如何利用BERT获取word embeddings,以及它们在NLP任务中的应用。BERT的词向量能够捕捉上下文信息,提供更精确的特征表示,用于关键字搜索、语义搜索和下游任务的预训练模型微调。此外,文章还介绍了如何安装和使用BERT的PyTorch接口,以及词向量的构建和句向量的池化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:Chris McCormick

编译:ronghuaiyang

导读

在本文中,我将深入研究谷歌的BERT生成的word embeddings,并向你展示如何通过BERT生成自己的word embeddings。

在本文中,我将深入研究谷歌的BERT生成的word embeddings,并向你展示如何通过BERT生成自己的word embeddings。

介绍

历史

2018年是NLP的突破之年。迁移学习,特别是像ELMO,Open-GPT,BERT之类的模型,允许研究人员针对特定的任务小小的微调一下(使用少量的数据和少量的计算),就可以得到一个很好的结果。不幸的是,对于许多刚开始学习NLP的人,甚至对于一些有经验的实践者,这些强大模型的理论和实际应用仍然没有得到很好的理解。

BERT是什么?

BERT(Bidirectional Encoder Representations from Transformers)于2018年末发布,是我们将在本教程中使用的模型,为读者更好地理解和指导在NLP中使用迁移学习模型提供了实用的指导。BERT是一种预训练语言表示的方法,用于创建NLP从业人员可以免费下载和使用的模型。你可以使用这些模型从文本数据中提取高质量的语言特征,也可以使用你自己的数据对这些模型进行微调,以完成特定的任务(分类、实体识别、问题回答等),从而生成最先进的预测。

为什么要使用BERT的嵌入?

在本教程中,我们将使用BERT从文本数据中提取特征,即单词和句子的嵌入向量。我们可以用这些词和句子的嵌入向量做什么?首先,这些嵌入对于关键字/搜索扩展、语义搜索和信息检索非常有用。例如,如果你希望将客户的问题或搜索与已经回答的问题或文档化的搜索相匹配,这些表示将帮助准确的检索匹配客户意图和上下文含义的结果,即使没有关键字或短语重叠。

其次,或许更重要的是,这些向量被用作下游模型的高质量特征输入。NLP模型(如LSTMs或CNNs)需要以数字向量的形式输入,这通常意味着需要将词汇表和部分语音等特征转换为数字表示。在过去,单词被表示为惟一索引值(one-hot编码),或者更有用的是作为神经单词嵌入,其中词汇与固定长度的特征嵌入进行匹配,这些特征嵌入是由Word2Vec或Fasttext等模型产生的。与Word2Vec之类的模型相比,BERT提供了一个优势,因为尽管Word2Vec下的每个单词都有一个固定的表示,而与单词出现的上下文无关,BERT生成的单词表示是由单词周围的单词动态通知的。例如,给定两句话:

“The man was accused of robbing a bank.” “The man went fishing by the bank of the river.”

Word2Vec将在两个句子中为单词“bank”生成相同的单词嵌入,而在BERT中为“bank”生成不同的单词嵌入。除了捕获一词多义之类的明显差异外,上下文相关的单词embeddings还捕获其他形式的信息,这些信息可以产生更精确的特征表示,从而提高模型性能。

从教育的角度看,仔细查看BERT的词嵌入的是一个深入学习BERT及其迁移学习模型的很好的方法,我们设置了一些实用知识和上下文,以便在后面的内容中更好地理解模型的内部细节。

安装和导入

使用Hugging Face的github仓库来安装pytorch接口。(这个库包含其他预训练语言模型的接口,比如OpenAI的GPT和GPT-2)我们之所以选择pytorch接口,是因为它在高级api(易于使用,但不能深入了解工作原理)和tensorflow代码(其中包含了很多细节,但通常会让我们忽略关于tensorflow的内容,此处的目的是BERT!)之间取得了很好的平衡。

!pip install pytorch-pretrained-bert

现在我们导入pytorch、预训练的BERT模型和BERT tokenizer。我们将在后面的教程中详细解释BERT模型,但这是谷歌发布的预训练模型,它在Wikipedia和Book Corpus上运行了很多很多小时,Book Corpus是一个包含+10,000本不同类型书籍的数据集。这个模型(稍加修改)在一系列任务中击败了NLP基准测试。谷歌发布了一些BERT模型的变体,但是我们在这里使用的是两个可用尺寸(“base”和“large”)中较小的一个。

import torchfrom pytorch_pretrained_bert import BertTokenizer, BertModel, BertForMaskedLM# OPTIONAL: if you want to have more information on what's happening, activate the logger as followsimport logging#logging.basicConfig(level=logging.INFO)import matplotlib.pyplot as plt% matplotlib inline# Load pre-trained model tokenizer (vocabulary)tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')100%|██████████| 231508/231508 [00:00<00:00, 2386266.84B/s]

输入格式

因为BERT是一个预训练的模型,它期望以特定的格式输入数据,所以我们需要:

  • 句子的开始([CLS])和分隔/结尾([SEP])的特别标记
  • 符合BERT中使用的固定词汇表的标记
  • BERT‘s tokenizer中的token id
  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值