精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
HuggingFace快速入門(重點講解模型(Transformers)和數據集部分(Datasets))

文章目錄

  • 本文內容

  • HuggingFace簡介

  • Hugging Face模型講解

    • Transforms簡介

    • Transformers安裝

    • 使用Transformers進行推理

    • 查找Hugging Face模型

    • 使用Hugging Face模型

    • 遷移學習

  • Hugging Face數據集講解

    • 安裝Datasets類庫

    • 查找數據集

    • 加載數據集

本文內容

本文主要包括如下內容:

  1. Hugging Face是什么,提供了哪些內容

  2. Hugging Face模型的使用(Transformer類庫)

  3. Hugging Face數據集的使用(Datasets類庫)

HuggingFace簡介

Hugging Face Hub和 Github 類似,都是Hub(社區)。Hugging Face可以說的上是機器學習界的Github。Hugging Face為用戶提供了以下主要功能:

  • 模型倉庫(Model Repository):Git倉庫可以讓你管理代碼版本、開源代碼。而模型倉庫可以讓你管理模型版本、開源模型等。使用方式與Github類似。

  • 模型(Models):Hugging Face為不同的機器學習任務提供了許多預訓練好的機器學習模型供大家使用,這些模型就存儲在模型倉庫中。

  • 數據集(Dataset):Hugging Face上有許多公開數據集。

hugging face在NLP領域最出名,其提供的模型大多都是基于Transformer的。為了易用性,Hugging Face還為用戶提供了以下幾個項目:

  • Transformers(github, 官方文檔): Transformers提供了上千個預訓練好的模型可以用于不同的任務,例如文本領域、音頻領域和CV領域。該項目是HuggingFace的核心,可以說學習HuggingFace就是在學習該項目如何使用。

  • Datasets(github, 官方文檔): 一個輕量級的數據集框架,主要有兩個功能:①一行代碼下載和預處理常用的公開數據集; ② 快速、易用的數據預處理類庫。

  • Accelerate(github, 官方文檔): 幫助Pytorch用戶很方便的實現 multi-GPU/TPU/fp16。

  • Space(鏈接):Space提供了許多好玩的深度學習應用,可以嘗試玩一下。

Hugging Face模型講解

Transforms簡介

Hugging Face Transformer是Hugging Face最核心的項目,你可以用它做以下事情:

  • 直接使用預訓練模型進行推理

  • 提供了大量預訓練模型可供使用

  • 使用預訓練模型進行遷移學習

Transformers安裝

安裝Transformers非常簡單,直接安裝即可。

pip install transformers

使用Transformers進行推理

如果你的任務是一個比較常見的,大概率可以直接使用Transformer提供的PipelineAPI解決,其使用方式非常簡單,可以說是直接用即可。

from transformers import pipeline

translator = pipeline("translation_en_to_fr")
print(translator("How old are you?"))
[{'translation_text': ' quel age êtes-vous?'}]

對于部分特定任務,官方并沒有提供相應的模型,但你也可以到官網搜索模型,然后顯示指定即可。在加載模型時,你有可能會因為缺少一些庫而報錯,這個時候,只需要安裝對應的庫,然后重啟即可。

!pip install sentencepiece
translator = pipeline("translation_en_to_zh", model='Helsinki-NLP/opus-mt-en-zh')
translator("I'm learning deep learning.")
[{'translation_text': '我在學習深思熟慮'}]

更多Pipeline請參考官方文檔:https://huggingface.co/docs/transformers/v4.21.0/en/main_classes/pipelines

查找Hugging Face模型

本節來介紹一下如何通過Hugging Face找到你需要的模型。

首先,我們需要到來到官網的模型模塊。之后我們會看到如下界面:

其主要包含三部分:

  1. Filter: 用于篩選你想要的模型

  2. 模型列表: 展示了可使用的模型。不帶前綴的是官方提供的模型,例如gpt2,而帶前綴的是第三方提供的模型。

  3. 搜索框:你可以通過搜索框按名字搜索模型。

當你點進去你的模型后,你會來到如下頁面:

該頁面主要的幾個部分:

  1. 模型介紹(Model Card): 我們可以通過該文檔查看該模型都提供了哪些功能,模型的表現等。

  2. 模型文件(Files and versions): 從該模塊可以下載模型文件,一般包含多種框架的(TF、Pytorch等)模型文件和配置文件等,可以用于離線加載。

  3. 測試模型(Hosted inference API): 可以直接通過該模塊測試自己的模型。同時Hugging Face也提供了Http API可以調用,這樣就不需要本地部署了。詳情請參考:https://huggingface.co/docs/api-inference/index

  4. 使用該模型的應用(Spaces using …):這里展示了使用該模型的應用,可以點進去玩一玩。

  5. 代碼樣例(Use in Transformers):你可以通過該模塊直接查看該模型的使用方式,直接拷貝代碼到項目里就可以用了。

使用Hugging Face模型

Transformers項目提供了幾個簡單的API幫助用戶使用Hugging Face模型,而這幾個簡單的API統稱為AutoClass(官方文檔鏈接),包括:

  1. AutoTokenizer: 用于文本分詞

  2. AutoFeatureExtractor: 用于特征提取

  3. AutoProcessor: 用于數據處理

  4. AutoModel: 用于加載模型

它們的使用方式均為: AutoClass.from_pretrain("模型名稱"),然后就可以用了。例如:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
tokenizer("I'm learning deep learning.")
{'input_ids': [101, 1045, 1005, 1049, 4083, 2784, 4083, 1012, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1]}

通常一個模型會包含上述4個中的部分功能,例如,對于bert-base-uncased模型,就包含“分詞”和“模型”兩項功能,我們可以通過代碼樣例(Use in Transformers)模塊查看:


也不是所有的模型都可以使用AutoModel,具體還要看模型的代碼示例。

遷移學習

很多情況下,Hugging Face提供的模型并不能滿足我們的需要,所以我們還是要自己訓練模型的。此時我們可以使用Hugging Face提供的預訓練模型來進行遷移學習,本節將會介紹如何使用Hugging Face進行遷移學習。

使用Hugging Face模型做遷移學習的思路和普通遷移學習幾乎一致:

  1. 首先選擇一個和你的任務類似的任務的預訓練模型,或者直接選擇一個任務無關的基礎模型。

  2. 從原有模型中拿出主干部分(backbone)

  3. 然后接上自己的下游任務,構建成新的模型

  4. 開始訓練

這里我以bert-base-uncased模型作為例子,進行一次模型參數更新操作,假設我的任務是一個二分類的情感分類問題。

首先,我們先嘗試一下運行該模型,我們將該模型的Use in Transformers中的樣例代碼拷貝過來:

from transformers import AutoTokenizer, AutoModelForMaskedLM

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModelForMaskedLM.from_pretrained("bert-base-uncased")
Some weights of the model checkpoint at bert-base-uncased were not used when initializing BertForMaskedLM: ['cls.seq_relationship.weight', 'cls.seq_relationship.bias']
- This IS expected if you are initializing BertForMaskedLM from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing BertForMaskedLM from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).

之后我們需要嘗試使用一下該模型:

inputs = tokenizer("Learning is a very happy [MASK].", return_tensors='pt')
print(inputs)
{'input_ids': tensor([[ 101, 4083, 2003, 1037, 2200, 3407,  103, 1012,  102]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 0, 0, 0]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1]])}
model(**inputs).logits.argmax(dim=-1)
tensor([[1012, 4083, 2003, 1037, 2200, 3407, 2832, 1012, 1012]])

通常HuggingFace模型的的使用都是分兩步,首先分詞(其他模型可能是特征提取AutoFeatureExtractor等),然后將第一步的結果作為模型的入參。注意第一步通常要指定return_tensors='pt'來讓其返回tensor類型的數據。我們也可以使用Jupyter中的tokenizer?方式來查看其使用方法。

tokenizer.convert_ids_to_tokens(2832)
'process'

這里我們得到了和頁面同樣的數據,

模型測試完畢,接下來開始正式進入遷移學習。

bert-base-uncased的任務是Fill-Mask,也就是填空任務,而我們的任務是情感分類,所以我們要把原本的分類器給去掉。我們先打印一下當前模型:

print(model)
BertForMaskedLM(
  (bert): BertModel(
 	。。。略
  )
  (cls): BertOnlyMLMHead(
    	。。。略
      (decoder): Linear(in_features=768, out_features=30522, bias=True)
    )
  )
)

我們可以從輸出中看到,bert-base-uncased模型由兩大部分構成,bert和最后的分類層cls,我們做遷移學習,肯定是要前面的bert層,所以我們可以這么提取其bert層:

print(model.bert)
BertModel(
	。。。略
)

我們來嘗試一下使用model.bert:

outputs = model.bert(**inputs)
print(outputs)
print(outputs.last_hidden_state.size())
BaseModelOutputWithPoolingAndCrossAttentions(last_hidden_state=tensor([[[ 0.0568,  0.1662,  0.0943,  ..., -0.0346, -0.0636,  0.1689],
         [-0.0402,  0.0757,  0.1923,  ..., -0.0217, -0.0459,  0.0711],
         [-0.1038, -0.0372,  0.5063,  ..., -0.1587,  0.0475,  0.5513],
         ...,
         [ 0.1763, -0.0111,  0.1922,  ...,  0.1891, -0.1079, -0.2163],
         [ 0.8013,  0.4953, -0.2258,  ...,  0.1501, -0.7685, -0.3709],
         [ 0.0572,  0.3405,  0.6527,  ...,  0.4695, -0.0455,  0.3055]]],
       grad_fn=<NativeLayerNormBackward0>), pooler_output=None, hidden_states=None, past_key_values=None, attentions=None, cross_attentions=None)
torch.Size([1, 9, 768])

可以看到,我們得到的是bert輸出的隱層信息,我們可以將該隱層信息輸入到一個線性層進行情感分類,然后進行損失函數計算,進而反向傳播更新參數即可。有一點需要注意,上面返回的隱層Shape為(1, 9, 768),其中1為batch_size,9是因為tokens有9個,768是每個token對應的向量的維度。我們在使用bert進行情感分類時,通常是使用第一個token(<bos>)的結果。

import torch
from torch import nn

# 定義最后的二分類線性層
cls = nn.Sequential(
    nn.Linear(768, 1),
    nn.Sigmoid()
)
# 使用二分類常用的Binary Cross Entropy Loss
criteria = nn.BCELoss()
# 這里只對最后的線性層做參數更新
optimizer = torch.optim.SGD(cls.parameters(), lr=0.1)
# 取隱層的第一個token(<bos>)的輸出作為cls層的輸入,然后與label進行損失計算
loss = criteria(cls(outputs.last_hidden_state[:, 0, :]), torch.FloatTensor([[1]]))
loss.backward()
optimizer.step()
optimizer.zero_grad()

這樣,一次參數更新就完成了,嘗試把他應用到真實的項目中去吧。

Hugging Face數據集講解

Datasets類庫(github, 官方文檔)可以讓你非常方便的訪問和分享數據集,也可以用來對NLP、CV、語音等任務進行評價(Evaluation metrics).

本節將會講解Hugging Face數據集的使用。

安裝Datasets類庫

直接使用pip安裝即可:

pip install datasets

如果要使用語音(Audio)數據集,則需要執行如下命令:

pip install datasets[audio]

同理,圖片(Image)數據為:

pip install datasets[vision]

查找數據集

首先,我們需要打開Hugging Face Datasets頁面,與Models頁面類似,這里展示了Hugging Face的數據集,可以使用標簽或名稱進行篩選:

我們可以點進我們感興趣的數據集,查看詳情:

Hugging Face的數據集通常包括多個子集(subset),并且分成了train、validation和test三份。你可以通過預覽區域查看你需要的子集。

加載數據集

加載Hugging Face只需要用到datasets.load_dataset一個方法就夠了。使用方法也很簡單,直接填入要加載的數據集就可以了:

from datasets import load_dataset

dataset = load_dataset("glue")

ConnectionError: Couldn't reach https://raw.githubusercontent.com/huggingface/datasets/2.4.0/datasets/glue/glue.py (ConnectionError(MaxRetryError("HTTPSConnectionPool(host='raw.githubusercontent.com', port=443): Max retries exceeded with url: /huggingface/datasets/2.4.0/datasets/glue/glue.py (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000001D31F86E310>: Failed to establish a new connection: [Errno 11004] getaddrinfo failed'))")))

Hugging Face的數據集都是放在github上的,所以國內估計很難下載成功。這就要用到load_dataset的加載本地數據集。關于如何離線下載Hugging Face數據集,可參考該篇文章

我們這里離線下載好數據集后,將其拷貝到當前目錄下,目錄結構為:

-- glue
    -- dummy    # glue的數據子集就放在這個目錄下
        -- ax
        -- cola
        ...
    -- dataset_infos.json
    -- glue.py
    -- README.md

我們現在開始來加載本地數據集:

dataset = load_dataset(path="./glue", name="cola")
print(dataset)
DatasetDict({
    train: Dataset({
        features: ['sentence', 'label', 'idx'],
        num_rows: 8551
    })
    validation: Dataset({
        features: ['sentence', 'label', 'idx'],
        num_rows: 1043
    })
    test: Dataset({
        features: ['sentence', 'label', 'idx'],
        num_rows: 1063
    })
})

對于這種有子集的數據集,必須要指定你要加載的子集名稱

可以看到,dataset是一個Dict類型的,那么就可以按照dict的方式訪問數據集:

dataset['train']
Dataset({
    features: ['sentence', 'label', 'idx'],
    num_rows: 8551
})
dataset['train']['sentence'][:5]
["Our friends won't buy this analysis, let alone the next one we propose.",
 "One more pseudo generalization and I'm giving up.",
 "One more pseudo generalization or I'm giving up.",
 'The more we study verbs, the crazier they get.',
 'Day by day the facts are getting murkier.']
dataset['train']['label'][:5]
[1, 1, 1, 1, 1]

到這里,數據集入門就講完了,更多的內容就需要在你有需要的時候自己探索了。

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
hugging face官網,huggingface是一個專注于聊天機器人服務的“GitHub”
BERT、GPT-2這些頂尖工具到底該怎么用到我的模型里?
擁抱臉部 LLM 工具的完整初學者指南
Hugging Chat:開源GPT的Android時刻
Hugging Face 每周速遞: 擴散模型課程完成中文翻譯,有個據說可以教 ChatGPT 看圖...
AI之JARVIS:JARVIS(連接眾多 AI 模型以解決復雜 AI 任務的接口/可理解為一種超智能AI模型管家,正開發中)的簡介、安裝、使用方法之詳細攻略
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 大港区| 临漳县| 文山县| 昭通市| 中卫市| 连云港市| 长垣县| 乐山市| 阳春市| 兴义市| 深泽县| 安徽省| 晴隆县| 稻城县| 星座| 大石桥市| 肇庆市| 德江县| 姚安县| 米林县| 黄大仙区| 林西县| 凉城县| 绥滨县| 徐水县| 宁安市| 永安市| 淅川县| 长泰县| 淳安县| 汽车| 麻江县| 大姚县| 凌云县| 花垣县| 平顶山市| 咸宁市| 通州市| 常州市| 葵青区| 定陶县|