加泰羅尼亞(Catalan Albert)(一位精簡版的伯特(Bert)),他對語言表示的自我監督學習。
它經過19.557.475句子對的訓練(包含7.29億個獨特單詞),該句子從奧斯卡(Inria)的奧斯卡(Oscar)數據集的加泰羅尼亞(Catalan)子集中提取。我們使用833.259句子對的驗證集評估模型。
您可以在這裡閱讀原始的Albert論文。
它們可在Huggingface的模型中心頁面上找到
| 模型 | 拱。 | 培訓數據 | 玩它 | 可視化它 |
|---|---|---|---|---|
codegram / calbert-tiny-uncased | 微小(未露面) | 奧斯卡(文本4.3 GB) | 模型中心的卡 | 在Exbert中可視化 |
codegram / calbert-base-uncased | 基礎(未紮實) | 奧斯卡(文本4.3 GB) | 模型中心的卡 | 在Exbert中可視化 |
您只需要transformers庫即可。無需克隆或安裝。
要選擇要使用的模型版本( tiny或base ),請考慮較小的型號功能較小,但要運行較少且渴望資源的較少。
pip install transformers from transformers import AutoModel , AutoTokenizer
tokenizer = AutoTokenizer . from_pretrained ( "codegram/calbert-base-uncased" )
model = AutoModel . from_pretrained ( "codegram/calbert-base-uncased" )
model . eval () # disable dropout現在可以進入您可以做的兩個主要用例。
這是最簡單的用例,但不是最有用的。不過,在這裡!無論您想掩蓋什麼單詞,都可以使用特殊的令牌[MASK]表示。該模型將輸出蒙版單詞最可能的候選人。
from transformers import pipeline
calbert_fill_mask = pipeline ( "fill-mask" , model = "codegram/calbert-base-uncased" , tokenizer = "codegram/calbert-base-uncased" )
results = calbert_fill_mask ( "M'agrada [MASK] això" )
# results
# [{'sequence': "[CLS] m'agrada molt aixo[SEP]", 'score': 0.614592969417572, 'token': 61},
# {'sequence': "[CLS] m'agrada moltíssim aixo[SEP]", 'score': 0.06058056280016899, 'token': 4867},
# {'sequence': "[CLS] m'agrada més aixo[SEP]", 'score': 0.017195818945765495, 'token': 43},
# {'sequence': "[CLS] m'agrada llegir aixo[SEP]", 'score': 0.016321714967489243, 'token': 684},
# {'sequence': "[CLS] m'agrada escriure aixo[SEP]", 'score': 0.012185849249362946, 'token': 1306}]例如,提取的特徵向量可將文檔索引為Elasticsearch中的密集向量,並執行相似性搜索。
另一個用例是自然語言理解- 將這些向量作為文檔/句子的抽象表示,可以用作其他下游模型(例如分類器)的輸入。
這是從句子或文檔中提取向量的方法:
import torch
# Tokenize in sub-words with SentencePiece
tokenized_sentence = tokenizer . tokenize ( "M'és una mica igual" )
# ['▁m', "'", 'es', '▁una', '▁mica', '▁igual']
# 1-hot encode and add special starting and end tokens
encoded_sentence = tokenizer . encode ( tokenized_sentence )
# [2, 109, 7, 71, 36, 371, 1103, 3]
# NB: Can be done in one step : tokenize.encode("M'és una mica igual")
# Feed tokens to Calbert as a torch tensor (batch dim 1)
encoded_sentence = torch . tensor ( encoded_sentence ). unsqueeze ( 0 )
embeddings , _ = model ( encoded_sentence )
embeddings . size ()
# torch.Size([1, 8, 768])
embeddings . detach ()
# tensor([[[-0.0261, 0.1166, -0.1075, ..., -0.0368, 0.0193, 0.0017],
# [ 0.1289, -0.2252, 0.9881, ..., -0.1353, 0.3534, 0.0734],
# [-0.0328, -1.2364, 0.9466, ..., 0.3455, 0.7010, -0.2085],
# ...,
# [ 0.0397, -1.0228, -0.2239, ..., 0.2932, 0.1248, 0.0813],
# [-0.0261, 0.1165, -0.1074, ..., -0.0368, 0.0193, 0.0017],
# [-0.1934, -0.2357, -0.2554, ..., 0.1831, 0.6085, 0.1421]]]) 這是我們在Codegram上進行的應用研究的一部分(他要感謝當時和計算!)。
沒有擁抱面的強大變壓器和象徵庫,這將是一大堆痛苦。感謝您使NLP實際上很高興與您合作!
另外,借助Google Research首先創建和開源的Albert。
阿爾伯特(Albert)是一種語言模型,即可以學習具有某些結構的序列的神經網絡,例如自然語言的句子(而不僅僅是自然語言!)。
但是他們如何學習語言?不同的語言模型接受了不同的藉口任務培訓,即您給他們帶來的挑戰,以便他們可以學習語言的運作方式。這個想法是,為了使這項任務重複出現,他們必須間接學習語言的語法,甚至是其語義和風格。
傳統(也稱為因果)語言模型通常接受以這樣的序列預測下一個單詞的任務:
但是,阿爾伯特(Albert)是另一個稱為蒙版語言模型的家庭。在這個家庭中,他們必須學習的藉口任務是相似的,但是句子中的某些單詞並不總是預測最後一個單詞,而是隨機地變成了空白(或掩蓋),例如:
這項任務要困難一些,更重要的是,需要更好地了解空白的上下文。
事實證明,一旦語言模型真正非常出色地掌握了這項毫無意義的藉口任務,就可以很容易地將其重新用於更有趣的任務。
一旦語言學習語法和語義,例如,它可能會成為句子的非常好的分類器,甚至可以成為整個文檔。
如果您隨後教它以將推文或文檔分類為類別(例如,識別情感或毒性),它不再僅僅看到一堆令人困惑的字符,而是在更抽象的層面上“讀取”文檔,因此它可以更加容易地“理解”它。 (請注意空氣報價,這不是魔術,而是最接近的事情。)
因為加泰羅尼亞州沒有語言模型!而且有很多加泰羅尼亞文字要處理。 (在加泰羅尼亞)。
對於依賴性管理,我們使用詩歌(當然還有Docker)。
pip install -U poetry
poetry install
poetry shell訓練該模型的生產圖像在docker/下,稱為codegram/calbert 。它包含所有最新的依賴性,但沒有代碼 - DeepKit將在每個實驗中運送代碼(請繼續閱讀以了解有關DeepKit的更多信息)。
所有配置都生活在config下。在那裡,您可以控制與培訓,令牌化和所有內容有關的參數,甚至選擇要訓練的模型的版本。
所有配置都是九頭蛇配置,因此所有配置都是不足的。檢查他們的文檔。
數據集的一小部分生活在dist/data下,因此您可以訓練一個小型模型並在本地進行快速實驗。
要下載完整的數據集並在培訓 /驗證中自動將其拆分,只需運行以下命令:
python -m calbert download_data --out-dir dataset預處理的令牌在dist/tokenizer-{cased,uncased} 。他們僅在完整的培訓套裝上接受培訓。
如果您想重新培訓令牌儀(默認情況下,未置換):
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizer要訓練Cased One,只需覆蓋適當的Hydra配置:
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizer vocab.lowercase=False我們使用DeepKit運行並跟踪實驗。如果您想在本地運行,請免費下載它以供您選擇的平台,或檢查其文檔以與免費的社區服務器運行。
為了確保一切都起作用,讓我們在DeepKit中使用實際Docker映像進行訓練:
deepkit run test.deepkit.yml默認情況下,它將在您的本地DeepKit實例中使用您的CPU訓練它。閱讀他們的文檔以學習如何自定義您的運行。
使用GPU至少一台機器在本地DeepKit中配置群集。
deepkit run --cluster一旦擁有訓練有素的模型,就可以將其導出為Huggingface Transfereers標準模型。
例如,讓我們想像您訓練了一個base-uncased模型,並且想導出它。
從DeepKit Run中的輸出下載export文件夾,然後運行:
mv export calbert-base-uncased
transformers-cli login
transformers-cli upload exportmake test