【AI實戰(zhàn)最強NLP預(yù)訓(xùn)練模型庫PyTorch-Transformers正式開源!支持6個預(yù)訓(xùn)練框架,27個預(yù)訓(xùn)練模型

      網(wǎng)友投稿 2186 2025-04-01

      照例先上開源地址:

      https://github.com/huggingface/pytorch-transformers#quick-tour

      官網(wǎng):

      https://huggingface.co/pytorch-transformers/index.html

      PyTorch-Transformers(正式名稱為 pytorch-pretrained-bert)是一個用于自然語言處理(NLP)的最先進的預(yù)訓(xùn)練模型庫。

      該庫目前包含下列模型的 PyTorch 實現(xiàn)、預(yù)訓(xùn)練模型權(quán)重、使用腳本和下列模型的轉(zhuǎn)換工具:

      這些實現(xiàn)已在幾個數(shù)據(jù)集上進行測試(參見示例腳本),應(yīng)該與原始實現(xiàn)的性能相當(dāng)(例如,BERT 全詞覆蓋(Whole-Word-Masking)在 SQUAD 數(shù)據(jù)集上的 F1 分?jǐn)?shù)為 93,OpenAI GPT 在 RocStories 上的 F1 分?jǐn)?shù)為 88,Transformer-XL 在 WikiText 103 上的 困惑度為 18.3、XLNet 的 STS-B 上的皮爾遜積矩相關(guān)系數(shù)為 0.916)。用戶可以在官方網(wǎng)站的文檔示例部分中,找到有關(guān)性能的更多詳細信息。

      安? 裝

      此 repo 在 Python 2.7 和 3.5+(示例代碼僅在 Python 3.5+ 上通過測試)以及 PyTorch 0.4.1 到 1.1.0 上進行了測試。

      使用 pip 進行安裝

      pip install pytorch-transformers

      從源進行安裝

      克隆存儲庫并運行如下命令:

      pip install [--editable] .

      測試

      該庫和示例腳本包含了一系列測試。庫測試可在 “tests” 文件夾中找到,示例腳本的測試可以在 “examples”文件夾 中找到。

      這些測試可以使用 pytest 運行(如果需要,可以使用 pip install pytest 來安裝 pytest)。

      你可以使用以下命令從克隆存儲庫的根目錄進行測試:

      python -m pytest -sv ./pytorch_transformers/tests/

      python -m pytest -sv ./examples/

      快速指南

      讓我們快速導(dǎo)覽一下 PyTorch-Transformer。每個模型架構(gòu)(Bert、GPT、GPT-2、Transformer-XL、XLNet、XLM)的詳細示例均可在 完整的文檔 中找到。

      import torch

      from pytorch_transformers import *

      # PyTorch-Transformers has a unified API

      # for 6 transformer architectures and 27 pretrained weights.

      # ? ? ? ? ?Model ? ? ? ? ?| Tokenizer ? ? ? ? ?| Pretrained weights shortcut

      MODELS = [(BertModel, ? ? ? BertTokenizer, ? ? ?'bert-base-uncased'),

      (OpenAIGPTModel, ?OpenAIGPTTokenizer, 'openai-gpt'),

      (GPT2Model, ? ? ? GPT2Tokenizer, ? ? ?'gpt2'),

      (TransfoXLModel, ?TransfoXLTokenizer, 'transfo-xl-wt103'),

      (XLNetModel, ? ? ?XLNetTokenizer, ? ? 'xlnet-base-cased'),

      (XLMModel, ? ? ? ?XLMTokenizer, ? ? ? 'xlm-mlm-enfr-1024')]

      # Let's encode some text in a sequence of hidden-states using each model:

      for model_class, tokenizer_class, pretrained_weights in MODELS:

      # Load pretrained model/tokenizer

      tokenizer = tokenizer_class.from_pretrained(pretrained_weights)

      model = model_class.from_pretrained(pretrained_weights)

      # Encode text

      input_ids = torch.tensor([tokenizer.encode("Here is some text to encode")])

      last_hidden_states = model(input_ids)[0] ?# Models outputs are now tuples

      # Each architecture is provided with several class for fine-tuning on down-stream tasks, e.g.

      BERT_MODEL_CLASSES = [BertModel, BertForPreTraining, BertForMaskedLM, BertForNextSentencePrediction,

      BertForSequenceClassification, BertForMultipleChoice, BertForTokenClassification,

      BertForQuestionAnswering]

      # All the classes for an architecture can be initiated from pretrained weights for this architecture

      # Note that additional weights added for fine-tuning are only initialized

      # and need to be trained on the down-stream task

      tokenizer = BertTokenizer.from_pretrained(from_pretrained('bert-base-uncased')

      for model_class in BERT_MODEL_CLASSES:

      # Load pretrained model/tokenizer

      model = model_class.from_pretrained('bert-base-uncased')

      # Models can return full list of hidden-states & attentions weights at each layer

      【AI實戰(zhàn)】最強NLP預(yù)訓(xùn)練模型庫PyTorch-Transformers正式開源!支持6個預(yù)訓(xùn)練框架,27個預(yù)訓(xùn)練模型

      model = model_class.from_pretrained(pretrained_weights,

      output_hidden_states=True,

      output_attentions=True)

      input_ids = torch.tensor([tokenizer.encode("Let's see all hidden-states and attentions on this text")])

      all_hidden_states, all_attentions = model(input_ids)[-2:]

      # Models are compatible with Torchscript

      model = model_class.from_pretrained(pretrained_weights, torchscript=True)

      traced_model = torch.jit.trace(model, (input_ids,))

      # Simple serialization for models and tokenizers

      model.save_pretrained('./directory/to/save/') ?# save

      model = model_class.from_pretrained('./directory/to/save/') ?# re-load

      tokenizer.save_pretrained('./directory/to/save/') ?# save

      tokenizer = tokenizer_class.from_pretrained(pretrained_weights)

      # SOTA examples for GLUE, SQUAD, text generation...

      微調(diào) / 用法腳本的快速指南

      該庫包含幾個示例腳本,這些腳本具有用于 NLU 和 NLG 任務(wù)的 SOTA 性能:

      run_glue.py :一個針對九個不同的 GLUE 任務(wù)(序列級分類)對 BERT、XLNet 和 XLM 進行微調(diào)的示例

      run_squad.py :一個針對問答數(shù)據(jù)集 square 2.0(令牌級分類)對 BERT、XLNet 和 XLM 的示例

      run_generation.py :一個使用 GPT、GPT-2、Transformer-XL 和 XLNet 生成條件語言的示例

      其他特定于模型的示例(請參閱文檔)

      以下是這些腳本的三個快速使用示例:

      run_glue.py :對 GLUE 任務(wù)進行微調(diào)用于序列分類

      通用語言理解評估(General Language Understanding Evaluation benchmark,GLUE)基準(zhǔn)是由九條句子或句子對語言理解任務(wù)的集合,用于評估和分析自然語言理解系統(tǒng)。

      在運行這些 GLUE 任務(wù)之前,你應(yīng)該通過運行 此腳本 下載 GLUE 數(shù)據(jù),并將其解壓縮到某個目錄 $GLUE_DIR。

      你還應(yīng)該安裝示例所需的附加包:

      pip install -r ./examples/requirements.txt

      export GLUE_DIR=/path/to/glue

      export TASK_NAME=MRPC

      python ./examples/run_glue.py \

      --model_type bert \

      --model_name_or_path bert-base-uncased \

      --task_name $TASK_NAME \

      --do_train \

      --do_eval \

      --do_lower_case \

      --data_dir $GLUE_DIR/$TASK_NAME \

      --max_seq_length 128 \

      --per_gpu_eval_batch_size=8 ? \

      --per_gpu_train_batch_size=8 ? \

      --learning_rate 2e-5 \

      --num_train_epochs 3.0 \

      --output_dir /tmp/$TASK_NAME/

      其中任務(wù)名稱可以是 CoLA、SST-2、MRPC、STS-B、QQP、MNLI、QNLI、RTE、WNLI 中的一個。

      開發(fā)集的結(jié)果將出現(xiàn)在指定 output_dir 的文本文件“eval_results.txt”中。對于 MNLI,由于有兩個單獨的 dev 集,匹配的和不匹配的,除了“/tmp/MNLI/”之外,還有一個單獨的輸出文件夾,名為“/tmp/MNLI-MM/”。

      在 STS-B 回歸任務(wù)上對 XLNet 模型進行微調(diào)

      此示例代碼使用 4 塊 V100 GPU 的服務(wù)器上的并行訓(xùn)練,在 STS-B 語料庫上對 XLNet 進行微調(diào)。秉性訓(xùn)練是使用多個 GPU 的一種簡單方法(但比分布式訓(xùn)練速度更慢,靈活性也不如分布式訓(xùn)練,見下文)。

      export GLUE_DIR=/path/to/glue

      python ./examples/run_glue.py \

      --model_type xlnet \

      --model_name_or_path xlnet-large-cased \

      --do_train ?\

      --do_eval ? \

      --task_name=sts-b ? ? \

      --data_dir=${GLUE_DIR}/STS-B ?\

      --output_dir=./proc_data/sts-b-110 ? \

      --max_seq_length=128 ? \

      --per_gpu_eval_batch_size=8 ? \

      --per_gpu_train_batch_size=8 ? \

      --gradient_accumulation_steps=1 \

      --max_steps=1200 ?\

      --model_name=xlnet-large-cased ? \

      --overwrite_output_dir ? \

      --overwrite_cache \

      --warmup_steps=120

      在這臺機器上,我們的批大小為 32,如果你的機器配置較差,請增加 gradient_accumulation_steps 以達到相同的批大小。這些超參數(shù)應(yīng)該導(dǎo)致在開發(fā)集上的皮爾遜積矩相關(guān)系數(shù)(Pearson correlation coefficient )為 +0.917 。

      在 MRPC 分類任務(wù)上對 Bert 模型進行微調(diào)

      此示例代碼使用 8 塊 V100 GPU 上的分布式訓(xùn)練,對 Microsoft Research 語句改寫語料庫(Microsoft Research Paraphrase Corpus,MRPC)中的 Bert 全詞覆蓋模型進行微調(diào),使其達到 F1>92。

      使用這些超參數(shù)進行訓(xùn)練,我們得到了以下結(jié)果:

      python -m torch.distributed.launch --nproc_per_node 8 ./examples/run_glue.py ? \

      --model_type bert \

      --model_name_or_path bert-large-uncased-whole-word-masking \

      --task_name MRPC \

      --do_train ? \

      --do_eval ? \

      --do_lower_case ? \

      --data_dir $GLUE_DIR/MRPC/ ? \

      --max_seq_length 128 ? \

      --per_gpu_eval_batch_size=8 ? \

      --per_gpu_train_batch_size=8 ? \

      --learning_rate 2e-5 ? \

      --num_train_epochs 3.0 ?\

      --output_dir /tmp/mrpc_output/ \

      --overwrite_output_dir ? \

      --overwrite_cache \

      使用這些超參數(shù)進行訓(xùn)練,我們得到了以下結(jié)果:

      acc = 0.8823529411764706

      acc_and_f1 = 0.901702786377709

      eval_loss = 0.3418912578906332

      f1 = 0.9210526315789473

      global_step = 174

      loss = 0.07231863956341798

      run_squad.py :對 SQuAD 進行微調(diào)用于問答系統(tǒng)

      此示例代碼使用 8 塊 V100 GPU 上的分布式訓(xùn)練和 BERT 全詞覆蓋模型對 SQuAD 數(shù)據(jù)集上的 BERT 進行微調(diào),以在 SQuAD 上達到 F1 的分?jǐn)?shù)大于 93:

      python -m torch.distributed.launch --nproc_per_node=8 ./examples/run_squad.py \

      --model_type bert \

      --model_name_or_path bert-large-uncased-whole-word-masking \

      --do_train \

      --do_eval \

      --do_lower_case \

      --train_file $SQUAD_DIR/train-v1.1.json \

      --predict_file $SQUAD_DIR/dev-v1.1.json \

      --learning_rate 3e-5 \

      --num_train_epochs 2 \

      --max_seq_length 384 \

      --doc_stride 128 \

      --output_dir ../models/wwm_uncased_finetuned_squad/ \

      --per_gpu_eval_batch_size=3 ? \

      --per_gpu_train_batch_size=3 ? \

      使用這些超參數(shù)進行訓(xùn)練,我們得到了以下結(jié)果:

      python $SQUAD_DIR/evaluate-v1.1.py $SQUAD_DIR/dev-v1.1.json ../models/wwm_uncased_finetuned_squad/predictions.json

      {"exact_match": 86.91579943235573, "f1": 93.1532499015869}

      這是作為 bert-large-uncased-whole-word-masking-finetuned-squad 提供的模型。

      run_generation.py :使用 GPT、GPT-2、Transformer-XL 和 XLNet 生成文本

      還包括一個條件生成腳本,用于根據(jù)提示生成文本。生成腳本包括 Aman Rusia 提出的 技巧,利用 Transformer-XL 和 XLNet 等內(nèi)存模型獲得高質(zhì)量的生成(包括一個預(yù)定義的文本,使短輸入更長)。

      下面是演示如何使用 OpenAI GPT-2 模型的小版本來運行腳本:

      python ./examples/run_generation.py \

      --model_type=gpt2 \

      --length=20 \

      --model_name_or_path=gpt2 \

      從 pytorch-pretrained-bert 遷移到 pytorch-transformers

      下面是一個快速總結(jié),闡述了從 pytorch-pretrained-bert 遷移到 pytorch-transformers 時應(yīng)該注意的事項。

      模型總是輸出 tuples

      從 pytorch-pretrained-bert 遷移到 pytorch-transformers 時,主要的突破性變化是模型的正演方法始終根據(jù)模型和配置參數(shù)輸出包含各種元素的 tuple。

      每個模型的元組的確切內(nèi)容,在模型的文檔注釋和 文檔 中有詳細說明。

      在幾乎所有情況下,你都可以將輸出的第一個元素作為之前在 pytorch-pretrained-bert 中使用的輸出。

      下面是一個 pytorch-pretrained-bert 到 pytorch-transformers 轉(zhuǎn)換的示例,用于 BertForSequenceClassification 分類模型:

      # Let's load our model

      model = BertForSequenceClassification.from_pretrained('bert-base-uncased')

      # If you used to have this line in pytorch-pretrained-bert:

      loss = model(input_ids, labels=labels)

      # Now just use this line in pytorch-transformers to extract the loss from the output tuple:

      outputs = model(input_ids, labels=labels)

      loss = outputs[0]

      # In pytorch-transformers you can also have access to the logits:

      loss, logits = outputs[:2]

      # And even the attention weigths if you configure the model to output them (and other outputs too, see the docstrings and documentation)

      model = BertForSequenceClassification.from_pretrained('bert-base-uncased', output_attentions=True)

      outputs = model(input_ids, labels=labels)

      loss, logits, attentions = outputs

      序列化

      突破性更改:當(dāng)時用 from_pretrained() 方法實例化時,模型現(xiàn)在默認(rèn)設(shè)置為評估模式。要訓(xùn)練它們,不要忘記將它們設(shè)置回訓(xùn)練模式 ( model.train() ),以激活 dropout 模塊。

      此外,雖然不是突破性更改,但序列化方法已經(jīng)標(biāo)準(zhǔn)化,如果你以前使用過任何其他序列化方法,你可能應(yīng)該切換到新方法 save_pretrained(save_directory) 。

      下面是一個例子:

      ### Let's load a model and tokenizer

      model = BertForSequenceClassification.from_pretrained('bert-base-uncased')

      tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

      ### Do some stuff to our model and tokenizer

      # Ex: add new tokens to the vocabulary and embeddings of our model

      tokenizer.add_tokens(['[SPECIAL_TOKEN_1]', '[SPECIAL_TOKEN_2]'])

      model.resize_token_embeddings(len(tokenizer))

      # Train our model

      train(model)

      ### Now let's save our model and tokenizer to a directory

      model.save_pretrained('./my_saved_model_directory/')

      tokenizer.save_pretrained('./my_saved_model_directory/')

      ### Reload the model and the tokenizer

      model = BertForSequenceClassification.from_pretrained('./my_saved_model_directory/')

      tokenizer = BertTokenizer.from_pretrained('./my_saved_model_directory/')

      優(yōu)化器:BertAdam 和 OpenAIAdam 現(xiàn)在是 AdamW,定時任務(wù)是標(biāo)準(zhǔn)的 PyTorch schedules。

      之前包含的兩個優(yōu)化器 BertAdam 和 OpenAIAdam ,現(xiàn)在已被單個 AdamW 優(yōu)化器取代。新的優(yōu)化器 AdamW 與 PyTorch AdamW 優(yōu)化器 API 相匹配。

      任務(wù)調(diào)度現(xiàn)在是標(biāo)準(zhǔn)的 PyTorch learning rate schedulers 程序,而不再是優(yōu)化器的一部分。

      下面是 BertAdam 到 ?AdamW 的轉(zhuǎn)換示例,前者具有線性預(yù)熱(linear warmup)和衰減計劃,后者有相同的任務(wù)調(diào)度。

      # Parameters:

      lr = 1e-3

      num_total_steps = 1000

      num_warmup_steps = 100

      warmup_proportion = float(num_warmup_steps) / float(num_total_steps) ?# 0.1

      ### Previously BertAdam optimizer was instantiated like this:

      optimizer = BertAdam(model.parameters(), lr=lr, schedule='warmup_linear', warmup=warmup_proportion, t_total=num_total_steps)

      ### and used like this:

      for batch in train_data:

      loss = model(batch)

      loss.backward()

      optimizer.step()

      ### In PyTorch-Transformers, optimizer and schedules are splitted and instantiated like this:

      optimizer = AdamW(model.parameters(), lr=lr, correct_bias=False) ?# To reproduce BertAdam specific behavior set correct_bias=False

      scheduler = WarmupLinearSchedule(optimizer, warmup_steps=num_warmup_steps, t_total=num_total_steps) ?# PyTorch scheduler

      ### and used like this:

      for batch in train_data:

      loss = model(batch)

      loss.backward()

      scheduler.step()

      optimizer.step()

      引? 文

      目前尚無與 PyTorch-Transformers 相關(guān)的論文,但我們正在準(zhǔn)備一篇。如果你在已發(fā)布或開源項目中使用了我們的項目,請?zhí)峒皩υ搸斓恼f明以及附上當(dāng)前存儲庫的鏈接。

      https://github.com/huggingface/pytorch-transformers#quick-tour

      轉(zhuǎn)自:https://mp.weixin.qq.com/s?__biz=MzU1NDA4NjU2MA==&mid=2247497424&idx=2&sn=d6f51df929686d84559e062e4d0225f4&chksm=fbea4f1fcc9dc6093640ab4d47fe1b2ece30927d1be606d87ae44723e0e95bea3245c640c6a0&mpshare=1&scene=24&srcid=&sharer_sharetime=1564962910032&sharer_shareid=68ae697f6949e81a714c38230b3f0ddb#rd

      AI https 自然語言處理 機器學(xué)習(xí)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:自動換行后為什么不換行而是隱藏了后面的文字(文字為什么不能換行)
      下一篇:《HTML 5與CSS 3 權(quán)威指南(第4版·下冊)》 —16.3.2 選擇器root、not、empty和target
      相關(guān)文章
      亚洲中久无码不卡永久在线观看| 精品久久久久亚洲| 亚洲人成无码网WWW| 精品久久久久久亚洲综合网| 亚洲小说图区综合在线| 亚洲精品人成网在线播放影院| 亚洲专区一路线二| 亚洲午夜精品一区二区公牛电影院| 亚洲美女视频网址| 亚洲国产天堂久久综合网站| 亚洲成人精品久久| 亚洲专区先锋影音| 亚洲欧洲自拍拍偷综合| 亚洲成a人片在线观看播放| 亚洲国产视频一区| 亚洲一级毛片免费在线观看| 亚洲av日韩av无码av| 2020亚洲男人天堂精品| 精品国产日韩久久亚洲| 中文无码亚洲精品字幕| 亚洲成在人线在线播放无码| 国产成人亚洲综合在线| 亚洲片国产一区一级在线观看| 亚洲午夜激情视频| 亚洲乱码精品久久久久..| 亚洲国产精品SSS在线观看AV| 亚洲AV无码第一区二区三区 | 亚洲第一AV网站| 久久夜色精品国产亚洲AV动态图 | 久久久久亚洲精品无码系列| 久久亚洲精品成人777大小说| 亚洲午夜精品久久久久久人妖| 亚洲精品福利网站| 亚洲国产最大av| 亚洲丶国产丶欧美一区二区三区| 亚洲国产成人久久精品99| 亚洲无线码一区二区三区| 久久亚洲国产成人亚| 亚洲第一页在线播放| 亚洲欧美日韩中文无线码| 另类图片亚洲校园小说区|