当前位置: 首页 > news >正文

做系统和做网站哪个简单一些logo免费设计生成

做系统和做网站哪个简单一些,logo免费设计生成,企业网站建设机构,同一家公司可以做几个网站吗BERT ***** 2020年3月11日更新#xff1a;更小的BERT模型 ***** 这是在《深阅读的学生学得更好#xff1a;预训练紧凑模型的重要性》#xff08;arXiv:1908.08962#xff09;中提到的24种较小规模的英文未分词BERT模型的发布。 我们已经证明#xff0c;标准的BERT架构和…BERT ***** 2020年3月11日更新更小的BERT模型 ***** 这是在《深阅读的学生学得更好预训练紧凑模型的重要性》arXiv:1908.08962中提到的24种较小规模的英文未分词BERT模型的发布。 我们已经证明标准的BERT架构和训练目标在各种模型大小上都是有效的不仅仅是BERT-Base和BERT-Large。这些小型BERT模型旨在用于计算资源有限的环境。它们可以像原始BERT模型一样进行微调。然而在知识蒸馏的背景下它们最有效此时微调标签由更大、更准确的教师模型生成。 我们的目标是让资源较少的机构能够进行研究并鼓励社区寻求不同于增加模型容量的创新方向。 所有24个模型可以从这里下载或者从下面的表格中单独下载 H128H256H512H768L22/128BERT-Tiny2/2562/5122/768L44/1284/256BERT-Mini4/512BERT-Small4/768L66/1286/2566/5126/768L88/1288/2568/512BERT-Medium8/768L1010/12810/25610/51210/768L1212/12812/25612/51212/768BERT-Base 注意此次发布的BERT-Base模型只是为了完整性它是在与原始模型相同的条件下重新训练的。 以下是GLUE测试集上的相应分数 模型得分CoLASST-2MRPCSTS-BQQPMNLI-mMNLI-mmQNLI(v2)RTEWNLIAXBERT-Tiny64.20.083.281.1/71.174.3/73.662.2/83.470.270.381.557.262.321.0BERT-Mini65.80.085.981.1/71.875.4/73.366.4/86.274.874.384.157.962.326.1BERT-Small71.227.889.783.4/76.278.8/77.068.1/87.077.677.086.461.862.328.6BERT-Medium73.538.089.686.6/81.680.4/78.469.6/87.980.079.187.762.262.330.5 对于每个任务我们在以下列表中选择了最佳微调超参数并进行了4个周期的训练 批次大小8, 16, 32, 64, 128学习率3e-4, 1e-4, 5e-5, 3e-5 如果您使用这些模型请引用以下论文 article{turc2019,title{Well-Read Students Learn Better: On the Importance of Pre-training Compact Models},author{Turc, Iulia and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina},journal{arXiv preprint arXiv:1908.08962v2 },year{2019} }***** 2019年5月31日新更新整体单词掩码模型 ***** 这是对预处理代码改进后产生的多个新模型的发布。 在原来的预处理代码中我们随机选择WordPiece令牌进行掩码。例如 输入文本the man jumped up , put his basket on phil ##am ##mon s head 原掩码输入[MASK] man [MASK] up , put his [MASK] on phil [MASK] ##mon s head 新的技术称为整体单词掩码。在这种情况下我们总是同时掩码一个单词的所有对应令牌。整体掩码率保持不变。 整体单词掩码输入the man [MASK] up , put his basket on [MASK] [MASK] [MASK] s head 训练仍然是相同的 - 我们仍然独立预测每个被掩码的WordPiece令牌。改进来自于原来的预测任务对于被拆分为多个WordPiece的单词来说太“容易”。 这可以通过在create_pretraining_data.py中传递标志--do_whole_word_maskTrue来启用。 带有整体单词掩码的预训练模型链接如下。数据和训练否则完全相同模型具有与原始模型相同的结构和词汇。我们只包含BERT-Large模型。当使用这些模型时请在论文中明确说明您正在使用BERT-Large的整体单词掩码变体。 BERT-Large, 不区分大小写整体单词掩码 24层1024隐藏16头3.4亿参数 BERT-Large, 区分大小写整体单词掩码 24层1024隐藏16头3.4亿参数 模型名称SQUAD 1.1 F1/EM多任务NLI准确性BERT-Large, 不区分大小写原版91.0/84.386.05BERT-Large, 不区分大小写整体单词掩码92.8/86.787.07BERT-Large, 区分大小写原版91.5/84.886.09BERT-Large, 区分大小写整体单词掩码92.9/86.786.46 ***** 2019年2月7日新更新TensorFlow Hub模块 ***** BERT已上传至TensorFlow Hub。请参阅run_classifier_with_tfhub.py以了解如何使用TF Hub模块或在Colab中运行浏览器中的示例。 ***** 2018年11月23日新更新未规范化多语言模型 泰语 蒙古语 ***** 我们上传了一个新的多语言模型该模型在输入时不进行任何规范化不区分大小写、不移除音标、不进行Unicode标准化并额外包括泰语和蒙古语。 建议在开发多语言模型时使用此版本特别是对于使用非拉丁字母的语言。 这不需要任何代码更改可以在以下位置下载 BERT-Base, 多语言区分大小写: 104种语言12层768隐藏12头1.1亿参数 ***** 2018年11月15日新更新SOTA SQuAD 2.0系统 ***** 我们发布了代码更改以重现我们的83F1 SQuAD 2.0系统目前在排行榜上领先3。有关详细信息请参阅README的SQuAD 2.0部分。 ***** 2018年11月5日新更新第三方PyTorch和Chainer版本的BERT可用 ***** 来自HuggingFace的NLP研究人员提供了与我们的预训练检查点兼容的PyTorch版本的BERT并且能够复制我们的结果。Sosuke Kobayashi也提供了Chainer版本的BERT谢谢。我们没有参与PyTorch实现的创建和维护所以请直接向该存储库的作者提问。 ***** 2018年11月3日新更新多语言和中文模型可用 ***** 我们提供了两种新的BERT模型 BERT-Base, 多语言不推荐改用多语言区分大小写102种语言12层768隐藏12头1.1亿参数BERT-Base, 中文简体中文和繁体中文12层768隐藏12头1.1亿参数 我们为中文使用基于字符的分词而其他所有语言则使用WordPiece分词。两个模型都可以无缝使用无需任何代码更改。我们确实更新了tokenization.py中的BasicTokenizer的实现以支持中文字符分词因此如果分叉了它请进行更新。但是我们并未更改分词API。 更多信息请参阅多语言README。 ***** 结束新信息 ***** 引言 BERT即双向编码器表示Bidirectional Encoder Representations从转换器Transformers是一种新的语言表征预训练方法它在各种自然语言处理NLP任务中取得了最先进的结果。 详细描述BERT并提供多个任务完整结果的学术论文可在此找到[1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding。 举几个数字在SQuAD v1.1问答任务中的成绩如下 SQuAD v1.1 领先榜2018年10月8日测试EM测试F1第1名合集 - BERT87.493.2第2名合集 - nlnet86.091.7第1名单模型 - BERT85.191.8第2名单模型 - nlnet83.590.1 还有多项自然语言推理任务的成绩 系统MultiNLIQuestion NLISWAGBERT86.791.186.3OpenAI GPT先前最好82.288.175.0 此外还包括许多其他任务。 重要的是这些成果几乎无需针对特定任务设计神经网络架构。 如果你已经了解BERT并希望立即开始操作只需下载预先训练好的模型然后在几分钟内使用BERT进行先进的微调。 什么是BERT BERT是一种预训练语言表示的方法意味着我们在大型文本语料库如维基百科上训练一个通用的“语言理解”模型然后用该模型来执行我们关心的下游NLP任务例如问答。BERT超越了以前的方法因为它是首个无监督、深度双向的预训练NLP系统。 无监督意味着BERT仅使用纯文本语料库进行训练这一点很重要因为许多语言在网络上有大量公开可用的纯文本数据。 预训练表示可以是上下文无关的或是上下文相关的而上下文相关的表示则可以是单向的或双向的。例如像word2vec或GloVe这样的上下文无关模型为词汇表中的每个词生成一个单一的“词嵌入”表示所以“bank”在“bank deposit”和“river bank”中的表示相同。而上下文相关模型则根据句子中其他词生成每个词的表示。 BERT建立在最近关于预训练上下文表示的工作之上——包括Semi-supervised Sequence Learning、Generative Pre-Training、ELMo以及ULMFit——但关键在于这些模型都是单向的或浅度双向的。这意味着每个词仅根据其左侧或右侧的词进行上下文化。例如在句子“I made a bank deposit”中“bank”的单向表示仅基于“I made a”而不包括“deposit”。一些早期工作结合了分别来自左文境和右文境模型的表示但只是以“浅”的方式。BERT利用左右文境——“I made a ... deposit”——从深度神经网络的底层对“bank”进行表示因此是深度双向的。 BERT为此采用了一种简单的方法我们将输入中15%的单词遮盖整个序列通过深双向的Transformer编码器运行然后仅预测被遮盖的单词。例如 输入: the man went to the [MASK1] . he bought a [MASK2] of milk. 标签: [MASK1] store; [MASK2] gallon为了学习句子间的关系我们也对一项简单的任务进行训练这个任务可以从任何单语语料库生成给定两个句子A和B“B”是否实际上是紧跟在A后面的句子还是语料库中的随机句子 句子A: the man went to the store . 句子B: he bought a gallon of milk . 标签: IsNextSentence句子A: the man went to the store . 句子B: penguins are flightless . 标签: NotNextSentence然后我们在大型语料库维基百科BookCorpus上用一个大模型12层到24层Transformer进行长时间1M步更新训练这就是BERT。 使用BERT有两个阶段预训练和微调。 预训练相对昂贵在4到16个云TPU上花费四天时间但对于每种语言来说都是一次性的过程当前模型仅支持英文但多语言模型将在不久后发布。我们将发布论文中训练的多个预训练模型它们是在Google上预先训练的。大多数NLP研究者无需从头开始训练自己的模型。 微调成本较低。论文中所有的结果都可以在最多1小时的单个Cloud TPU上或几个小时的GPU上复现从同一个预训练模型开始。例如SQuAD可以在单个Cloud TPU上大约30分钟内完成训练达到Dev F1分数91.0%这是单系统的最新状态。 BERT的另一个重要方面是它可以非常容易地适应多种类型的NLP任务。在论文中我们展示了几乎没有任务特定修改的情况下在句子级如SST-2、句子对级如MultiNLI、词级如NER和跨度级如SQuAD任务上的最佳结果。 此存储库已发布什么 我们发布了以下内容 包含BERT模型架构主要是标准的Transformer架构的TensorFlow代码。论文中BERT-Base和BERT-Large的小写和全拼版本的预训练检查点。TensorFlow代码用于一键复制论文中最重要微调实验包括SQuAD、MultiNLI和MRPC。 此存储库中的所有代码均与CPU、GPU和Cloud TPU兼容并可直接使用。 预训练模型 我们发布了论文中的BERT-Base和BERT-Large模型。Uncased表示在WordPiece分词之前文本已经转换为小写例如John Smith变为john smith。Uncased模型还会移除所有重音标记。Cased意味着保留真实的大小写和重音标记。通常情况下除非您知道对于您的任务如命名实体识别或词性标注大小写信息是重要的否则Uncased模型表现会更好。 这些模型都根据源代码相同的许可证Apache 2.0发布。 如果使用带大小写的模型请确保在训练脚本中传递--do_lowerFalse参数。或者如果您使用自己的脚本直接向FullTokenizer传递do_lower_caseFalse。 模型链接如下右键点击选择“另存为...” BERT-Large, Uncased (Whole Word Masking) 24层1024个隐藏单元16个头340M参数BERT-Large, Cased (Whole Word Masking) 24层1024个隐藏单元16个头340M参数BERT-Base, Uncased 12层768个隐藏单元12个头110M参数BERT-Large, Uncased 24层1024个隐藏单元16个头340M参数BERT-Base, Cased 12层768个隐藏单元12个头110M参数BERT-Large, Cased 24层1024个隐藏单元16个头340M参数BERT-Base, Multilingual Cased (New, recommended) 支持104种语言12层768个隐藏单元12个头110M参数BERT-Base, Multilingual Uncased (Orig, not recommended) 不推荐建议使用Multilingual Cased替代支持102种语言 12层768个隐藏单元12个头110M参数BERT-Base, Chinese 中文简体与繁体12层768个隐藏单元12个头110M参数 每个.zip文件包含以下三个项目 一个TensorFlow检查点文件(bert_model.ckpt)其中包含预训练权重实际上是3个文件。词汇文件(vocab.txt)用于映射WordPiece到单词ID。配置文件(bert_config.json)指定模型的超参数。 使用BERT进行微调 重要提示论文中所有结果是在具有64GB内存的单个Cloud TPU上进行微调得到的。目前在只有12GB至16GB内存的GPU上无法重现大多数BERT-Large的结果因为可以容纳的最大批次大小太小。我们正在努力更新此存储库以允许在GPU上实现更大的有效批量大小。有关更多细节请参阅内存溢出问题部分。 此代码已测试过TensorFlow 1.11.0版本同时支持Python2和Python3尽管更全面地测试了Python2因为这是Google内部使用的版本。 使用BERT-Base的微调示例应该能够在至少具有12GB内存的GPU上按照给定的超参数运行。 在Cloud TPU上微调 以下大部分示例假设您将在本地机器上使用像Titan X或GTX 1080这样的GPU运行训练和评估。 但是如果您有要训练的Cloud TPU请在run_classifier.py或run_squad.py中添加以下标志 --use_tpuTrue \--tpu_name$TPU_NAME请参考Google Cloud TPU教程了解如何使用Cloud TPU。或者您可以使用Google Colab笔记本 BERT FineTuning with Cloud TPUs。 在Cloud TPU上预训练模型和输出目录需要在Google Cloud Storage上。例如如果您有一个名为some_bucket的存储桶您可能会使用以下标志 --output_dirgs://some_bucket/my_output_dir/预训练模型的未压缩文件也可以在Google Cloud Storage的gs://bert_models/2018_10_18文件夹中找到。例如 export BERT_BASE_DIRgs://bert_models/2018_10_18/uncased_L-12_H-768_A-12句子和句子对分类任务 在运行这个例子之前您需要通过运行这个脚本下载GLUE数据然后将其解压到目录$GLUE_DIR。接下来下载BERT-Base检查点并将其解压缩到目录$BERT_BASE_DIR。 这个示例代码会在微软研究的Paraphrase语料库(MRPC)上微调BERT-Base该语料库仅包含3,600个示例可以在大多数GPU上用几分钟的时间完成微调。 export BERT_BASE_DIR/path/to/bert/uncased_L-12_H-768_A-12 export GLUE_DIR/path/to/gluepython run_classifier.py \--task_nameMRPC \--do_traintrue \--do_evaltrue \--data_dir$GLUE_DIR/MRPC \--vocab_file$BERT_BASE_DIR/vocab.txt \--bert_config_file$BERT_BASE_DIR/bert_config.json \--init_checkpoint$BERT_BASE_DIR/bert_model.ckpt \--max_seq_length128 \--train_batch_size32 \--learning_rate2e-5 \--num_train_epochs3.0 \--output_dir/tmp/mrpc_output/您应看到如下输出 ***** Eval results *****eval_accuracy 0.845588eval_loss 0.505248global_step 343loss 0.505248这意味着开发集准确率为84.55%。像MRPC这样的小型数据集即使从同一个预训练检查点开始其开发集准确性也会有很大差异。如果多次重新运行确保指向不同的output_dir您应看到介于84%和88%之间的结果。 有几个预训练模型已在run_classifier.py中开箱即用因此使用BERT进行任何单句或多句分类任务应该很容易遵循这些示例。 注意您可能会看到一条消息Running train on CPU。这实际上只是指它不在Cloud TPU上运行包括GPU。 分类器预测 一旦训练了分类器您就可以在推理模式下使用它通过使用--do_predicttrue命令。需要在输入文件夹中有一个名为test.tsv的文件。输出将在名为test_results.tsv的输出文件夹中创建。每行将包含每个样本的输出列是类别概率。 export BERT_BASE_DIR/path/to/bert/uncased_L-12_H-768_A-12 export GLUE_DIR/path/to/glue export TRAINED_CLASSIFIER/path/to/fine/tuned/classifierpython run_classifier.py \--task_nameMRPC \--do_predicttrue \--data_dir$GLUE_DIR/MRPC \--vocab_file$BERT_BASE_DIR/vocab.txt \--bert_config_file$BERT_BASE_DIR/bert_config.json \--init_checkpoint$TRAINED_CLASSIFIER \--max_seq_length128 \--output_dir/tmp/mrpc_output/SQuAD 1.1 斯坦福问答数据集SQuAD是一个流行的问题回答基准数据集。BERT在发布时几乎无需针对任务特定的网络架构修改或数据增强就能在此数据集上取得最先进的结果。然而它确实需要半复杂的预处理和后处理来应对(a) 变长度的SQuAD上下文段落以及 (b) 用于SQuAD训练的字符级答案注释。这些处理在run_squad.py中实现并文档化。 首先你需要下载该数据集。SQuAD网站似乎不再链接到v1.1版本的数据集但所需的文件可以在这里找到 train-v1.1.jsondev-v1.1.jsonevaluate-v1.1.py 将这些文件下载到目录 $SQUAD_DIR。 由于内存限制在12GB-16GB GPU上无法重现论文中的最新SQuAD结果事实上即使批处理大小设为1也不适用于12GB GPU上的BERT-Large。然而一个相当强大的BERT-Base模型可以在GPU上使用以下超参数进行训练 python run_squad.py \--vocab_file$BERT_BASE_DIR/vocab.txt \--bert_config_file$BERT_BASE_DIR/bert_config.json \--init_checkpoint$BERT_BASE_DIR/bert_model.ckpt \--do_trainTrue \--train_file$SQUAD_DIR/train-v1.1.json \--do_predictTrue \--predict_file$SQUAD_DIR/dev-v1.1.json \--train_batch_size12 \--learning_rate3e-5 \--num_train_epochs2.0 \--max_seq_length384 \--doc_stride128 \--output_dir/tmp/squad_base/开发集的预测结果会被保存到output_dir中的名为predictions.json的文件里 python $SQUAD_DIR/evaluate-v1.1.py $SQUAD_DIR/dev-v1.1.json ./squad/predictions.json这应该会输出类似如下结果 {f1: 88.41249612335034, exact_match: 81.2488174077578}你应该能看到与BERT-Base报道的88.5%相似的结果。 如果你有访问Cloud TPU的权限你可以用BERT-Large进行训练。以下是获得大约90.5%-91.0% F1单系统评分的一组与论文略有不同一致的超参数仅基于SQuAD进行训练 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_trainTrue \--train_file$SQUAD_DIR/train-v1.1.json \--do_predictTrue \--predict_file$SQUAD_DIR/dev-v1.1.json \--train_batch_size24 \--learning_rate3e-5 \--num_train_epochs2.0 \--max_seq_length384 \--doc_stride128 \--output_dirgs://some_bucket/squad_large/ \--use_tpuTrue \--tpu_name$TPU_NAME例如用这些参数进行一次随机运行会产生如下开发集分数 {f1: 90.87081895814865, exact_match: 84.38978240302744}如果你在此次训练之前先在一个epoch上对TriviaQA进行微调结果会更好但你需要将TriviaQA转换为SQuAD JSON格式。 SQuAD 2.0 此模型也在run_squad.py中实现并记录。 要运行SQuAD 2.0首先需要下载数据集。所需文件如下所示 train-v2.0.jsondev-v2.0.jsonevaluate-v2.0.py 将这些文件下载到目录 $SQUAD_DIR。 在Cloud TPU上你可以用以下方式运行BERT-Large 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_trainTrue \--train_file$SQUAD_DIR/train-v2.0.json \--do_predictTrue \--predict_file$SQUAD_DIR/dev-v2.0.json \--train_batch_size24 \--learning_rate3e-5 \--num_train_epochs2.0 \--max_seq_length384 \--doc_stride128 \--output_dirgs://some_bucket/squad_large/ \--use_tpuTrue \--tpu_name$TPU_NAME \--version_2_with_negativeTrue假设你已将输出目录的所有内容复制到本地名为squad/的目录下。最初的开发集预测将在squad/predictions.json中每个问题的最佳非空答案与无答案( )之间的得分差异会在squad/null_odds.json文件中。 运行以下脚本来调整预测空值与非空值答案的阈值 python $SQUAD_DIR/evaluate-v2.0.py $SQUAD_DIR/dev-v2.0.json ./squad/predictions.json --na-prob-file ./squad/null_odds.json假设脚本输出了“best_f1_thresh”THRESH。典型值介于-1.0和-5.0之间。现在你可以重新运行模型以生成使用派生阈值的预测或者从squad/nbest_predictions.json中提取相应的答案。 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_trainFalse \--train_file$SQUAD_DIR/train-v2.0.json \--do_predictTrue \--predict_file$SQUAD_DIR/dev-v2.0.json \--train_batch_size24 \--learning_rate3e-5 \--num_train_epochs2.0 \--max_seq_length384 \--doc_stride128 \--output_dirgs://some_bucket/squad_large/ \--use_tpuTrue \--tpu_name$TPU_NAME \--version_2_with_negativeTrue \--null_score_diff_threshold$THRESH内存溢出问题 论文中所有的实验都是在拥有64GB设备RAM的Cloud TPU上进行微调的。因此如果你使用只有12GB-16GB RAM的GPU并且使用了论文中描述的相同超参数很可能会遇到内存不足的问题。 影响内存使用的因素包括 max_seq_length发布的模型是用序列长度高达512进行训练的但可以通过缩短最大序列长度来节省大量内存。这在示例代码中的max_seq_length标志处控制。 train_batch_size内存使用量也直接与批处理大小成比例。 模型类型BERT-Base与BERT-LargeBERT-Large模型比BERT-Base需要更多的内存。 优化器BERT的默认优化器是Adam它需要大量的额外内存来存储m和v向量。切换到更节省内存的优化器可以减少内存使用但也可能影响结果。我们尚未尝试过其他用于微调的优化器。 使用默认的训练脚本run_classifier.py和run_squad.py我们在配备了TensorFlow 1.11.0的单个Titan X GPU12GB RAM上进行了最大批处理大小的基准测试 系统序列长度最大批处理大小BERT-Base6464...12832...25616...32014...38412...5126BERT-Large6412...1286...2562...3201...3840...5120 不幸的是对于BERT-Large来说这些最大批处理大小如此之小以至于无论使用什么学习率都会损害模型的准确性。我们正在努力向这个仓库添加代码以便在GPU上使用更大的有效批处理大小。代码将以以下一种或两种技术为基础 梯度积累在微型批次中的样本通常独立于梯度计算不包括这里未使用的批量归一化。这意味着在执行权重更新之前可以累积多个较小微型批次的梯度这与单次较大的更新完全等价。 梯度检查点深度神经网络训练期间GPU/TPU内存的主要用途是在前向传递中缓存用于反向传递高效计算的中间激活。梯度检查点通过智能地重新计算激活来交换内存与计算时间。 但是这在当前版本中并未实现。 利用BERT提取固定特征向量类似ELMo 在某些情况下而不是对整个预训练模型进行端到端的微调获取“预训练上下文嵌入”是有益的。这些是通过预训练模型隐藏层生成的每个输入令牌的固定上下文表示可以缓解大部分内存不足的问题。 我们提供了脚本extract_features.py使用方法如下 # 句子A和句子B以|||分隔符隔开适用于像问答和蕴含这样的句子对任务。 # 对于单句输入每行放一个句子并不要使用分隔符。 echo Who was Jim Henson ? ||| Jim Henson was a puppeteer /tmp/input.txtpython extract_features.py \--input_file/tmp/input.txt \--output_file/tmp/output.jsonl \--vocab_file$BERT_BASE_DIR/vocab.txt \--bert_config_file$BERT_BASE_DIR/bert_config.json \--init_checkpoint$BERT_BASE_DIR/bert_model.ckpt \--layers-1,-2,-3,-4 \--max_seq_length128 \--batch_size8这将在一个JSON文件中创建一行对应一行输入的BERT激活值其中layers参数指定的(-1是Transformer的最后一层隐含层等)。 请注意此脚本会生成非常大的输出文件默认情况下每个输入令牌大约15kb。 如果需要在原始单词和分词化后的单词之间保持对齐用于投影训练标签请参阅下面的“分词”部分。 **注意**您可能会看到如Could not find trained model in model_dir: /tmp/tmpuB5g5c, running initialization to predict.的消息。这是预期中的它意味着我们使用了init_from_checkpoint() API而不是保存模型API。如果没有指定检查点或指定了无效的检查点这个脚本会报错。 分词 对于句子级别的任务或句子对任务分词很简单。只需遵循run_classifier.py和extract_features.py中的示例代码。基本步骤是 实例化一个tokenizer tokenization.FullTokenizer对象。 使用tokens tokenizer.tokenize(raw_text)对原始文本进行分词。 将长度截断至最大序列长度。您可以使用最多512个但为了内存和速度考虑尽可能短一些。 在正确位置添加[CLS]和[SEP]令牌。 词级和跨度级任务例如SQuAD和NER更复杂因为需要在输入文本和输出文本之间维护对齐以便将训练标签投影回去。SQuAD是一个特别复杂的例子因为其输入标签基于字符并且SQuAD段落常常超过我们的最大序列长度。请查看run_squad.py的代码了解我们如何处理这个问题。 在描述处理词级任务的一般方法之前理解我们的分词器到底在做什么是很重要的。它主要分为三个步骤 文本规范化将所有空白字符转换为空格对于“Uncased”模型将输入小写并去除重音标记。例如John Johansons, → john johansons,。 标点符号分割在标点符号两侧都进行切割即在所有标点符号周围添加空格。标点符号定义为a具有“P*”Unicode类的任何字符b非字母/数字/空间的ASCII字符例如实际上不是标点符号的字符如$ 。例如john johansons, → john johan ##son s , 词块分词将上述过程的输出应用空格分词并对每个单独的单词应用WordPiece分词。我们的实现直接基于tensor2tensor的版本见链接。例如john johan ##son s , → john johan ##son s , 这种方案的优点是与大多数现有的英语分词器“兼容”。例如假设你有一个部分-of-speech标注任务如下所示 输入: John Johanson s house 标签: NNP NNP POS NN分词后的输出将是这样 分词: john johan ##son s house关键的是这将与原始文本John Johansons house在s前没有空格的输出相同。 如果你有预分词的词级注释你可以独立地对每个输入词进行分词并确定性地维护从原始词到分词词的映射 ### 输入 orig_tokens [John, Johanson, s, house] labels [NNP, NNP, POS, NN]### 输出 bert_tokens []# 原始词到分词词的映射将会是一个int - int映射分别对应orig_tokens索引和bert_tokens索引。 orig_to_tok_map []tokenizer tokenization.FullTokenizer(vocab_filevocab_file, do_lower_caseTrue)bert_tokens.append([CLS]) for orig_token in orig_tokens:orig_to_tok_map.append(len(bert_tokens))bert_tokens.extend(tokenizer.tokenize(orig_token)) bert_tokens.append([SEP]]# bert_tokens [[CLS], john, johan, ##son, , s, house, [SEP]] # orig_to_tok_map [1, 2, 4, 6]现在orig_to_tok_map可用于将labels投影到分词表示中。 存在一些常见的英语分词策略会导致与BERT的预训练方式略有不匹配。例如如果输入分词将像do nt这样的缩写分开就会产生不匹配。如果可能你应该先处理数据将其恢复为原始样式的文本。如果不方便这种不匹配可能不会有太大影响。 使用BERT进行预训练 我们发布了针对任意文本语料库进行“掩码语言模型”和“下一句预测”的代码。请注意这不是论文中所使用的精确代码原文本用C编写有些额外的复杂性但此代码确实生成了论文中描述的预训练数据。 运行数据生成的方法如下。输入是一个纯文本文件每行一个句子。对于“下一句预测”任务确保这些都是实际的句子。文档由空行分隔。输出是一组序列化的tf.train.Example格式为TFRecord文件。 你可以使用现成的NLP工具包如spaCy来执行句子切分。create_pretraining_data.py脚本会将段落连接在一起直到达到最大序列长度以减少填充导致的计算浪费有关更多细节请参阅脚本。然而你可能想要有意在输入数据中添加少量噪音例如随机截断2%的输入段使模型在微调时对非句子输入更具鲁棒性。 该脚本将所有例子存储在内存中所以对于大型数据文件你应该将输入文件划分为多个部分并多次调用该脚本。可以在run_pretraining.py中传递文件通配符例如tf_examples.tf_record*。 max_predictions_per_seq是每个序列的最大掩码语言模型预测数。你应该设置为大约max_seq_length乘以masked_lm_prob脚本不会自动这样做因为这个值需要在两个脚本中传入。 python create_pretraining_data.py \--input_file./sample_text.txt \--output_file/tmp/tf_examples.tfrecord \--vocab_file$BERT_BASE_DIR/vocab.txt \--do_lower_caseTrue \--max_seq_length128 \--max_predictions_per_seq20 \--masked_lm_prob0.15 \--random_seed12345 \--dupe_factor5以下是进行预训练的步骤。如果从头开始预训练不要包含init_checkpoint。模型配置包括词汇表大小在bert_config_file中指定。此演示代码只预训练几个步骤20步但在实践中你可能希望将num_train_steps设为10000步以上。传递给run_pretraining.py的max_seq_length和max_predictions_per_seq参数必须与create_pretraining_data.py中相同。 python run_pretraining.py \--input_file/tmp/tf_examples.tfrecord \--output_dir/tmp/pretraining_output \--do_trainTrue \--do_evalTrue \--bert_config_file$BERT_BASE_DIR/bert_config.json \--init_checkpoint$BERT_BASE_DIR/bert_model.ckpt \--train_batch_size32 \--max_seq_length128 \--max_predictions_per_seq20 \--num_train_steps20 \--num_warmup_steps10 \--learning_rate2e-5这会产生如下的输出 ***** Eval results *****global_step 20loss 0.0979674masked_lm_accuracy 0.985479masked_lm_loss 0.0979328next_sentence_accuracy 1.0next_sentence_loss 3.45724e-05由于我们的sample_text.txt文件很小这个示例训练会在几步内过度拟合该数据产生不真实的高度准确度数字。 预训练提示和注意事项 如果使用自定义词汇表请确保在bert_config.json中更改vocab_size。如果不这样做当您在GPU或TPU上训练时可能会因为未检查的越界访问而出现NaN值。如果您的任务有一个大型特定领域的语料库如“电影评论”或“科学论文”那么从BERT检查点开始在您的语料库上额外进行几步预训练可能是有益的。我们在论文中使用的学习率是1e-4。但是如果您从现有BERT检查点开始进行附加预训练步骤应使用较小的学习率例如2e-5。目前的BERT模型仅支持英文但我们计划在未来不久希望是在2018年11月底之前发布一个预训练了多种语言的多语言模型。因为注意力计算与序列长度平方成正比因此较长的序列会不成比例地昂贵。换句话说64个序列长度为512的一批数据要比256个序列长度为128的一批数据成本高得多。全连接/卷积成本相同但512长度序列的注意力成本要高得多。因此一个好的策略是先用序列长度为128进行9万步预训练然后再用序列长度为512进行额外的1万步预训练。非常长的序列主要用来学习位置嵌入这些可以相对较快地学习到。请注意这确实需要使用不同的max_seq_length值生成两次数据。如果从零开始预训练要做好准备预训练在计算上是昂贵的特别是在GPU上。如果从头开始预训练我们推荐的方案是在单个可抢占Cloud TPU v2上预训练一个BERT-Base大约需要两周时间费用约为500美元基于2018年10月的价格。当只在一个Cloud TPU上训练时相比于论文中的设置您需要降低批次大小。 预训练数据 我们将无法发布论文中使用的预处理数据集。对于维基百科建议的预处理方法是下载最新版的dump使用WikiExtractor.py提取文本然后进行必要的清理以将其转换为纯文本。 不幸的是收集BookCorpus的研究人员不再提供公共下载。古腾堡项目数据集是一个稍小一些约2亿字的旧公共领域书籍集合。 Common Crawl是另一个非常大的文本集合但您可能需要进行大量的预处理和清理工作才能从中提取出用于预训练BERT的可用语料库。 学习新的WordPiece词汇表 此存储库不包含用于学习新WordPiece词汇表的代码。原因是论文中使用的代码是用C实现的并依赖于谷歌内部的库。对于英文通常最好直接使用我们的词汇表和预训练模型。对于学习其他语言的词汇表有很多开源选项可供选择。然而请注意它们与我们的tokenization.py库不兼容 Google的SentencePiece库 tensor2tensor的WordPiece生成脚本 Rico Sennrich的Byte Pair Encoding库 在Colab中使用BERT 如果您想在Colab中使用BERT可以从笔记本 BERT FineTuning with Cloud TPUs 开始。截至本文写作时间2018年10月31日Colab用户可以完全免费访问Cloud TPU。 注意每个用户限一个资源有限需要Google云端平台账户和存储空间尽管可以通过注册GCP免费获得存储信用并且这种功能将来可能不再可用。点击链接的BERT Colab获取更多信息。 常见问题解答FAQ 这个代码与Cloud TPUs兼容吗关于GPU呢 是的此仓库中的所有代码都可以直接与CPU、GPU和Cloud TPU一起使用。但GPU训练仅限单GPU。 我收到了内存不足错误是怎么回事 请参阅有关内存不足问题的部分以获取更多信息。 有PyTorch版本可用吗 没有官方的PyTorch实现。然而来自HuggingFace的NLP研究人员提供了一个与BERT相兼容的PyTorch版本可以匹配我们预训练的检查点并重现我们的结果。我们未参与PyTorch实现的创建或维护所以请将任何相关问题指向该存储库的作者。 有Chainer版本可用吗 没有官方的Chainer实现。但是Sosuke Kobayashi提供了一个与BERT兼容的Chainer版本可以匹配我们的预训练检查点并重现我们的结果。我们未参与Chainer实现的创建或维护所以请将任何问题直接发送给该存储库的作者。 是否会发布其他语言的模型 是的我们计划在未来不久发布一个多语言的BERT模型。我们不能保证具体会包括哪些语言但它很可能是包含大多数有显著规模维基百科的语言的单一模型。 是否会发布大于BERT-Large的模型 至今我们还没有尝试训练比BERT-Large更大的模型。如果我们能取得显著的改进可能会发布更大的模型。 此库的许可证是什么 所有的代码和模型都根据Apache 2.0许可发布。请参阅LICENSE文件以获取更多信息。 如何引用BERT 目前请参考以下Arxiv论文 article{devlin2018bert,title{BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding},author{Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina},journal{arXiv preprint arXiv:1810.04805},year{2018} }
http://www.pierceye.com/news/69808/

相关文章:

  • 在百度网站备案查询上显示未备案是什么意思网站建设与发布
  • 网站开发用什么浏览器合肥网站推广公司排名
  • 什么是网络营销产生的观念原因西安网站优化排名推广
  • 网站留白自己做网站需要买哪些
  • 辽宁品牌建设促进会 网站猎头公司怎么样
  • 二级域名 电子商务网站推广方案域名备案做电影网站
  • 成都网站建设科技公wordpress windows
  • 沈阳网站备案住房和城乡建设部网站防烟排烟
  • 杭州公司建网站网站设计公司深圳
  • 我有域名和服务器找人建设网站简单描述什么是网络营销
  • openshift 做网站手机登录百度pc端入口
  • 做暧暧免费网站阿里网站域名指向怎么做
  • 建设企业网站个人网银微型营销网站制作
  • 微信推送在哪个网站做设计人才网官网
  • 石柱土家族网站建设做网站优化有什么途径
  • 怎样做txt电子书下载网站营业推广方式
  • 找平面图的网站给网站如何做飘窗
  • 网站维护什么情况韩国设计交流网站
  • 不申请域名可以 做网站吗锦州网站制作公司
  • 毕业设计网站设计步骤网站前台代码
  • 免费网站空间可上传网站二次开发源代码
  • 深圳企业模板网站建设网站开发培训费用
  • 网站开发微信wordpress首页
  • 永嘉网站开发公司搭建本地网站环境
  • 烟台龙口网站建设评网网站建设
  • 太原最新情况怎样给自己的网站做优化
  • 厦门网站建设 首选猴子网络wordpress顶部栏如何修改
  • 设计之家网站怎么样什么是网站跳出率
  • 做房产的网站南阳做网站
  • 如何在vps上建设网站网站有了备案号之后能做什么