标签: bert-language-model

BERT 的表现比 word2vec 差

我正在尝试使用 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

5
推荐指数
1
解决办法
665
查看次数

pip install bert后为什么不能在bert中导入函数

我是 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)

然后我尝试: …

python nlp bert-language-model

5
推荐指数
1
解决办法
1万
查看次数

为什么 BERT 中的矩阵称为 Query、Key 和 Value?

在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)

python nlp deep-learning tensorflow bert-language-model

5
推荐指数
1
解决办法
3398
查看次数

如何使用经过训练的 BERT 模型检查点进行预测?

我使用 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

5
推荐指数
1
解决办法
3812
查看次数

在 Google Colab 中运行 python 参数

我正在 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)

但我如何像脚本中那样设置其他参数。它会经历错误。感谢您的帮助。

python python-3.x google-colaboratory bert-language-model

5
推荐指数
1
解决办法
7394
查看次数

Huggingface Bert TPU 微调适用于 Colab,但不适用于 GCP

我正在尝试在 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

5
推荐指数
0
解决办法
1454
查看次数

句子编码和上下文词嵌入有什么区别?

我在阅读有关 BERT 和 ELMo 的论文时看到了这两个术语,所以我想知道它们之间是否有区别。

nlp word-embedding elmo bert-language-model

5
推荐指数
1
解决办法
1254
查看次数

在小型自定义语料库上预训练语言模型

我很好奇是否可以在文本生成中使用迁移学习,并在特定类型的文本上重新训练/预训练。

例如,拥有一个预训练的 BERT 模型和一个小的医学(或任何“类型”)文本语料库,创建一个能够生成医学文本的语言模型。假设您没有大量的“医学文本”,这就是您必须使用迁移学习的原因。

把它作为一个管道,我会把它描述为:

  1. 使用预训练的 BERT 分词器。
  2. 从我的新文本中获取新标记并将它们添加到现有的预训练语言模型(即 vanilla BERT)中。
  3. 使用组合标记器在自定义语料库上重新训练预训练的 BERT 模型。
  4. 生成与小型自定义语料库中的文本相似的文本。

这听起来很熟悉吗?抱脸可以吗?

deep-learning language-model transfer-learning bert-language-model huggingface-transformers

5
推荐指数
1
解决办法
1672
查看次数

使用 Bert 预测多个 token

我正在寻找有关使用 Bert 和 Bert 的屏蔽语言模型来预测多个标记的建议。

我的数据看起来像:

语境: some very long context paragraph

问题:rainy days lead to @placeholder这个问题的答案@placeholderwet weather。在模型中,wet environment是要预测的答案。

那么在预处理阶段,我应该将文本更改为rainy days lead to [MASK]或类似的内容rainy days lead to [MASK] [MASK]吗?我知道 masked LM 在单个 token 预测上效果很好,你认为 masked LM 可以在多个 token 预测上很好地工作吗?如果没有,您对如何预处理和训练此类数据有什么建议吗?

非常感谢!

python bert-language-model

5
推荐指数
1
解决办法
1594
查看次数

如何在 HuggingFace Transformers 库中获得预训练 BERT 模型的中间层输出?

(我正在关注这个关于 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

5
推荐指数
1
解决办法
6183
查看次数