我正在尝试使用 BERT 解决文档排名问题。我的任务很简单。我必须对输入文档进行相似度排名。这里唯一的问题是我没有标签 - 所以它更像是一个定性分析。
我正在尝试一系列文档表示技术——主要是 word2vec、para2vec 和 BERT。
对于 BERT,我遇到了Hugging face - Pytorch库。我微调了 bert-base-uncased 模型,大约有 150,000 个文档。我运行了 5 个 epoch,批量大小为 16,最大序列长度为 128。但是,如果我比较 Bert 表示与 word2vec 表示的性能,出于某种原因,word2vec 现在对我来说表现更好。对于 BERT,我使用最后四层来获取表示。
我不太确定为什么微调模型不起作用。我读了这个文件,而这个其他链接也是说,BERT执行以及何时微调的分类任务。但是,由于我没有标签,因此我按照论文中的方法对其进行了微调 - 以无监督的方式。
此外,我的文件长度差异很大。所以我现在正在向他们发送明智的句子。最后,无论如何我必须对词嵌入进行平均以获得句子嵌入。关于更好方法的任何想法?我还在这里读到- 有不同的方法可以对词嵌入进行池化以获得固定的嵌入。想知道是否有比较哪种池化技术效果更好?
对更好地训练 BERT 或更好的池化方法的任何帮助将不胜感激!
machine-learning unsupervised-learning word2vec deep-learning bert-language-model
我是 bert 的初学者,我正在尝试使用 GitHub 上提供的 bert 文件:https : //github.com/google-research/bert
但是pip install bert在终端中安装bert后,我无法从bert导入文件(如run_classifier、优化等)。我尝试在 jupiter notebook 中运行以下代码:
import bert
from bert import run_classifier
Run Code Online (Sandbox Code Playgroud)
错误是:
ImportError: cannot import name 'run_classifier'
Run Code Online (Sandbox Code Playgroud)
然后我在中找到了名为“bert”的文件\anaconda3\lib\python3.6\site-packages,里面没有名为“run_classifier”、“optimization”等的python文件。所以我从 GitHub 下载了这些文件,并自己将它们放入文件 'bert' 中。完成此操作后,我可以导入 run_classifier。
然而,另一个问题出现了。尽管我可以导入它们,但我无法使用文件中的函数。例如,convert_to_unicodetokenization.py 中有一个函数:
Help on module bert.tokenization in bert:
NAME
bert.tokenization - Tokenization classes.
FUNCTIONS
convert_to_unicode(text)
Converts `text` to Unicode (if it's not already), assuming utf-8 input.
Run Code Online (Sandbox Code Playgroud)
然后我尝试了这个:
import tokenization from bert
convert_to_unicode('input.txt')
Run Code Online (Sandbox Code Playgroud)
错误是:
NameError: name 'convert_to_unicode' is not defined
Run Code Online (Sandbox Code Playgroud)
然后我尝试: …
在BERT的转换器单元中,有称为 Query、Key 和 Value 的模块,或者简称为 Q、K、V。
基于 BERT论文和代码(特别是在modeling.py中),我对具有单个注意力头的注意力模块(使用 Q、K、V)的前向传递的伪代码理解如下:
q_param = a matrix of learned parameters
k_param = a matrix of learned parameters
v_param = a matrix of learned parameters
d = one of the matrix dimensions (scalar value)
def attention(to_tensor, from_tensor, attention_mask):
q = from_tensor * q_param
k = to_tensor * k_param
v = to_tensor * v_param
attention_scores = q * transpose(k) / sqrt(d)
attention_scores += some_function(attention_mask) #attention_mask is usually just ones …Run Code Online (Sandbox Code Playgroud) 我使用 SQUAD 2.0 训练了 BERT,并使用BERT-master在输出目录中获得了model.ckpt.data, model.ckpt.meta, model.ckpt.index(F1 score : 81) 以及predictions.json, 等等/run_squad.py
python run_squad.py \
--vocab_file=$BERT_LARGE_DIR/vocab.txt \
--bert_config_file=$BERT_LARGE_DIR/bert_config.json \
--init_checkpoint=$BERT_LARGE_DIR/bert_model.ckpt \
--do_train=True \
--train_file=$SQUAD_DIR/train-v2.0.json \
--do_predict=True \
--predict_file=$SQUAD_DIR/dev-v2.0.json \
--train_batch_size=24 \
--learning_rate=3e-5 \
--num_train_epochs=2.0 \
--max_seq_length=384 \
--doc_stride=128 \
--output_dir=gs://some_bucket/squad_large/ \
--use_tpu=True \
--tpu_name=$TPU_NAME \
--version_2_with_negative=True
Run Code Online (Sandbox Code Playgroud)
我尝试将model.ckpt.meta, model.ckpt.index,复制model.ckpt.data到$BERT_LARGE_DIR目录并按run_squad.py如下方式更改标志以仅预测答案而不使用数据集进行训练:
python run_squad.py \
--vocab_file=$BERT_LARGE_DIR/vocab.txt \
--bert_config_file=$BERT_LARGE_DIR/bert_config.json \
--init_checkpoint=$BERT_LARGE_DIR/model.ckpt \
--do_train=False \
--train_file=$SQUAD_DIR/train-v2.0.json \
--do_predict=True …Run Code Online (Sandbox Code Playgroud) python neural-network tensorflow google-cloud-tpu bert-language-model
我正在 Google Colab 中运行 python 文件并收到错误。我正在关注此链接中的 bert 文本分类示例;
https://appliedmachinelearning.blog/2019/03/04/state-of-the-art-text-classification-using-bert-model-predict-the-happiness-hackerearth-challenge/
Run Code Online (Sandbox Code Playgroud)
我按照描述的教程进行操作,现在是在 colab 中运行下面的代码片段的最后一步,
python run_classifier.py
--task_name=cola
--do_train=true
--do_eval=true
--do_predict=true
--data_dir=./data/
--vocab_file=./cased_L-12_H-768_A-12/vocab.txt
--bert_config_file=./cased_L-12_H-768_A-12/bert_config.json
--init_checkpoint=./cased_L-12_H-768_A-12/bert_model.ckpt
--max_seq_length=400
--train_batch_size=8
--learning_rate=2e-5
--num_train_epochs=3.0
--output_dir=./bert_output/
--do_lower_case=False
Run Code Online (Sandbox Code Playgroud)
我知道在 Colab 中我必须像这样运行 python 文件;
!python run_classifier.py
Run Code Online (Sandbox Code Playgroud)
但我如何像脚本中那样设置其他参数。它会经历错误。感谢您的帮助。
我正在尝试在 TPU 上微调 Huggingface Transformers BERT 模型。它在 Colab 中工作,但当我切换到 GCP 上的付费 TPU 时失败。Jupyter笔记本代码如下:
[1] model = transformers.TFBertModel.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
# works
[2] cluster_resolver = tf.distribute.cluster_resolver.TPUClusterResolver(
tpu='[My TPU]',
zone='us-central1-a',
project='[My Project]'
)
tf.config.experimental_connect_to_cluster(cluster_resolver)
tf.tpu.experimental.initialize_tpu_system(cluster_resolver)
tpu_strategy = tf.distribute.experimental.TPUStrategy(cluster_resolver)
#Also works. Got a bunch of startup messages from the TPU - all good.
[3] with tpu_strategy.scope():
model = TFBertModel.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
#Generates the error below (long). Same line works in Colab.
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
NotFoundError Traceback (most recent call last)
<ipython-input-14-2cfc1a238903> in <module>
1 with tpu_strategy.scope():
----> 2 model …Run Code Online (Sandbox Code Playgroud) google-cloud-platform google-colaboratory google-cloud-tpu bert-language-model huggingface-transformers
我在阅读有关 BERT 和 ELMo 的论文时看到了这两个术语,所以我想知道它们之间是否有区别。
我很好奇是否可以在文本生成中使用迁移学习,并在特定类型的文本上重新训练/预训练。
例如,拥有一个预训练的 BERT 模型和一个小的医学(或任何“类型”)文本语料库,创建一个能够生成医学文本的语言模型。假设您没有大量的“医学文本”,这就是您必须使用迁移学习的原因。
把它作为一个管道,我会把它描述为:
这听起来很熟悉吗?抱脸可以吗?
deep-learning language-model transfer-learning bert-language-model huggingface-transformers
我正在寻找有关使用 Bert 和 Bert 的屏蔽语言模型来预测多个标记的建议。
我的数据看起来像:
语境: some very long context paragraph
问题:rainy days lead to @placeholder这个问题的答案@placeholder是wet weather。在模型中,wet environment是要预测的答案。
那么在预处理阶段,我应该将文本更改为rainy days lead to [MASK]或类似的内容rainy days lead to [MASK] [MASK]吗?我知道 masked LM 在单个 token 预测上效果很好,你认为 masked LM 可以在多个 token 预测上很好地工作吗?如果没有,您对如何预处理和训练此类数据有什么建议吗?
非常感谢!
(我正在关注这个关于 BERT 词嵌入的 pytorch 教程,在教程中,作者访问了 BERT 模型的中间层。)
我想要的是使用 HuggingFace 的 Transformers 库访问 TensorFlow2 中 BERT 模型的单个输入令牌的最后 4 层。因为每一层输出一个长度为 768 的向量,所以最后 4 层的形状为4*768=3072(对于每个标记)。
如何在 TF/keras/TF2 中实现这一点,以获得输入令牌的预训练模型的中间层?(稍后我将尝试获取句子中每个标记的标记,但现在一个标记就足够了)。
我正在使用 HuggingFace 的 BERT 模型:
!pip install transformers
from transformers import (TFBertModel, BertTokenizer)
bert_model = TFBertModel.from_pretrained("bert-base-uncased") # Automatically loads the config
bert_tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
sentence_marked = "hello"
tokenized_text = bert_tokenizer.tokenize(sentence_marked)
indexed_tokens = bert_tokenizer.convert_tokens_to_ids(tokenized_text)
print (indexed_tokens)
>> prints [7592]
Run Code Online (Sandbox Code Playgroud)
输出是一个令牌 ( [7592]),它应该是 BERT 模型的输入。
keras tensorflow tensorflow2.0 bert-language-model huggingface-transformers