加泰罗尼亚(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