我们通常用余弦相似度来比较词嵌入之间的相似度,但这只考虑了向量之间的角度,而不考虑范数。使用 word2vec,随着单词在更多不同的上下文中使用,向量的范数会减小。因此,停用词接近于 0,并且非常独特、高含义的单词往往是大向量。BERT 是上下文敏感的,因此这个解释并不完全涵盖 BERT 嵌入。有谁知道矢量幅度对于 BERT 有何意义?
使用 HuggingFace 的 Transformers 时,我遇到了编码和解码方法的问题。
我有以下字符串:
test_string = 'text with percentage%'
Run Code Online (Sandbox Code Playgroud)
然后我运行以下代码:
import torch
from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-cased')
test_string = 'text with percentage%'
# encode Converts a string in a sequence of ids (integer), using the tokenizer and vocabulary.
input_ids = tokenizer.encode(test_string)
output = tokenizer.decode(input_ids)
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
'text with percentage %'
Run Code Online (Sandbox Code Playgroud)
在 % 前有一个额外的空格。我已经尝试了额外的参数,clean_up_tokenization_spaces 但这是不同的。
我应该如何在解码和编码中使用什么来获得前后完全相同的文本。这也发生在其他特殊标志上。
我尝试在Google Colab中使用bert-tensorflow,但出现以下错误:
-------------------------------------------------- ------------------------- AttributeError Traceback(最近一次调用最后一次) in () 1 import bert ----> 2 from bert import run_classifier_with_tfhub # run_classifier 3 来自 bert 导入优化 4 来自 bert 导入标记化
1 帧 /usr/local/lib/python3.6/dist-packages/bert/optimization.py in () 85 86 ---> 87 class AdamWeightDecayOptimizer(tf.train.Optimizer): 88 """一个基本的 Adam 优化器其中包括“正确的”L2 权重衰减。""" 89
AttributeError:模块“tensorflow._api.v2.train”没有属性“Optimizer”
这是我尝试过的代码:
!pip install --upgrade --force-reinstall tensorflow
!pip install --upgrade --force-reinstall tensorflow-gpu
!pip install tensorflow_hub
!pip install sentencepiece
!pip install bert-tensorflow
from sklearn.model_selection import train_test_split
import pandas as pd
from datetime import …
Devlin & Co. 的论文《BERT: Pre-training of Deep Bi Direction Transformers for Language Understanding》针对基础模型大小 110M 参数(即 L=12、H=768、A=12)进行了计算,其中 L = 层数, H = 隐藏大小,A = 自注意力操作的数量。据我所知,神经网络中的参数通常是层之间“权重和偏差”的计数。那么如何根据给定的信息计算出这个值呢?12 768 768*12?
我正在使用此处描述的情感分析管道。
from transformers import pipeline
classifier = pipeline('sentiment-analysis')
Run Code Online (Sandbox Code Playgroud)
失败并显示连接错误消息
ValueError:连接错误,我们在缓存路径中找不到请求的文件。请重试或确保您的互联网连接已打开。
有没有办法在管道方法中指定代理,以便它能够连接到互联网并下载所需的文件?
我正在尝试使用 BERT 来获取句子嵌入。我是这样做的:
import spacy
nlp = spacy.load("en_core_web_trf")
nlp("The quick brown fox jumps over the lazy dog").vector
Run Code Online (Sandbox Code Playgroud)
这输出一个空向量!
array([], dtype=float32)
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我尝试了以下标记化示例:
tokenizer = BertTokenizer.from_pretrained(MODEL_TYPE, do_lower_case=True)
sent = "I hate this. Not that.",
_tokenized = tokenizer(sent, padding=True, max_length=20, truncation=True)
print(_tknzr.decode(_tokenized['input_ids'][0]))
print(len(_tokenized['input_ids'][0]))
Run Code Online (Sandbox Code Playgroud)
输出是:
[CLS] i hate this. not that. [SEP]
9
Run Code Online (Sandbox Code Playgroud)
tokenizer注意:的参数max_length=20。如何让 Bert 分词器将 11 个[PAD]分词附加到这句话中以使其总计20?
nlp transformer-model bert-language-model huggingface-transformers huggingface-tokenizers
我最近正在阅读huggingface项目的bert源代码。我注意到所谓的“可学习位置编码”在实现时似乎指的是特定的 nn.Parameter 层。
\ndef __init__(self):\n super()\n positional_encoding = nn.Parameter()\ndef forward(self, x):\n x += positional_encoding\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x86\x91 可能是这种感觉,然后进行了可学习的位置编码。不管是不是这么简单,我不确定我理解是否正确,我想请教有经验的人。
\n此外,我注意到一个经典的 bert 结构,其位置实际上仅在初始输入时编码一次。这是否意味着后续的bert层,对于彼此来说,失去了捕获位置信息的能力?
\nBertModel(\n (embeddings): BertEmbeddings(\n (word_embeddings): Embedding(30522, 768, padding_idx=0)\n (position_embeddings): Embedding(512, 768)\n (token_type_embeddings): Embedding(2, 768)\n (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n (encoder): BertEncoder(\n (layer): ModuleList(\n (0): BertLayer(...)\n ...\n (pooler): BertPooler(...)\nRun Code Online (Sandbox Code Playgroud)\n如果在下一个 BERT 层之前对上一层的结果进行重新位置编码,我会得到更好的结果吗?
\n我想使用小队数据集微调 LabSE 以进行问答。我收到这个错误:
ValueError: The model did not return a loss from the inputs, only the following keys: last_hidden_state,pooler_output. For reference, the inputs it received are input_ids,token_type_ids,attention_mask.
我正在尝试使用 pytorch 微调模型。我尝试使用较小的批量大小,但只使用了 10% 的训练数据集,因为我遇到了内存分配问题。如果内存分配问题消失,则会发生此错误。老实说,我坚持了下来。你有什么提示吗?
我正在尝试使用 Huggingface 教程,但我想使用其他评估(我想自己做),所以我跳过了使用数据集的评估部分。
from datasets import load_dataset
raw_datasets = load_dataset("squad", split='train')
from transformers import BertTokenizerFast, BertModel
from transformers import AutoTokenizer
model_checkpoint = "setu4993/LaBSE"
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
model = BertModel.from_pretrained(model_checkpoint)
max_length = 384
stride = 128
def preprocess_training_examples(examples):
questions = [q.strip() for q in examples["question"]]
inputs = tokenizer(
questions, …Run Code Online (Sandbox Code Playgroud) 我已经安装了PyTorch 1.7.1,并且运行得很好。但是,当我尝试运行此代码时:
import transformers
from transformers import BertTokenizer
from transformers.models.bert.modeling_bert import BertModel,BertForMaskedLM
Run Code Online (Sandbox Code Playgroud)
我有:
ModuleNotFoundError: No module named 'torch.utils._pytree'
Run Code Online (Sandbox Code Playgroud)