Каталонский Альберт (Lite Bert), Google, используя самоотверженное изучение языковых представлений.
Он обучен корпусу из 19,557.475 пар предложений (содержащих 729 миллионов уникальных слов), извлеченных из каталонского подмножества набора данных Оскара INRIA. Мы используем набор валидации из 833.259 пар предложений для оценки модели.
Вы можете прочитать оригинальную Albert Paper здесь.
Они доступны на странице модели Huggingface Hub
| Модель | Архи | Данные обучения | Играйте с этим | Визуализируйте это |
|---|---|---|---|---|
codegram / calbert-tiny-uncased | Крошечный (неработающий) | Оскар (4,3 ГБ текста) | Карта на модели | Визуализируйте в Экберте |
codegram / calbert-base-uncased | База (неработающая) | Оскар (4,3 ГБ текста) | Карта на модели | Визуализируйте в Экберте |
Вам просто нужна библиотека 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 (который должен поблагодарить за время и вычисление!).
Это было бы куча боли, чтобы построить без мощных библиотек Trangerers и Tokenizers от Huggingface. Спасибо, что сделали НЛП действительно приятно работать!
Кроме того, благодаря Google Research для создания и открытого источника Альберта в первую очередь.
Альберт - это языковая модель, то есть нейронная сеть, которая может изучать последовательности с определенной структурой, такими как предложения на естественном языке (но не только естественный язык!).
Но как они изучают язык? Различные языковые модели обучаются с различными задачами по предложению , а именно с проблемами, которые вы им задаете, чтобы они могли узнать, как работает язык. Идея состоит в том, что для того, чтобы стать хорошим в этом одной задаче, они должны косвенно изучать грамматику языка, а также его семантику и стиль.
Традиционные (также известные как причинно -следственные ) языковые модели обычно обучаются с задачей прогнозирования следующего слова в последовательности, например:
Тем не менее, Альберт имеет другую семью, называемую маскарными языковыми моделями . В этой семье задача, которую они должны выучить, схожа, но вместо того, чтобы всегда предсказывать последнее слово в последовательности, некоторые слова в предложении случайно превращаются в пробелы (или замаскированы ), как это:
Эта задача немного сложнее, и, что более важно, требует понимания контекста, окружающего гораздо лучше.
Оказывается, как только языковая модель становится действительно, действительно хорошей в этой довольно бессмысленной задаче предлога, ее можно легко перепрофилировать для гораздо более интересных задач.
Как только язык изучает грамматику и семантику, он может стать очень хорошим классификатором предложений и даже целых документов, например.
Если вы затем научите его классифицировать твиты или документы по категориям (или идентифицировать чувства или, например, токсичность), это больше не видит просто кучу запутанных персонажей, а скорее «чтение» документа на гораздо более абстрактном уровне, поэтому он может «иметь смысл» гораздо более легко. (Обратите внимание на воздушные цитаты, это не волшебство, но это, вероятно, самое близкое.)
Потому что в каталонском языке нет языковых моделей! И есть много каталонского текста для обработки. (В Каталонии).
Для управления зависимостями мы используем поэзию (и Docker, конечно).
pip install -U poetry
poetry install
poetry shell Производственное изображение для обучения модели находится под docker/ , и это называется codegram/calbert . Он содержит все новейшие зависимости, но ни один код - DeepKit будет отправлять код в каждом эксперименте (прочитайте, чтобы узнать больше о DeepKit).
Все конфигурации живет под config . Там вы можете управлять параметрами, связанными с обучением, токенизацией и всем, и даже выбрать, какую версию модели для обучения.
Вся конфигурация отменяется, поскольку это конфигурация Hydra. Проверьте их документы.
Крошечное подмножество набора данных живет в рамках dist/data так что вы можете обучить небольшую модель и проводить быстрые эксперименты на местном уровне.
Чтобы загрузить полный набор данных и автоматически разделить его в обучении / проверке, просто запустите эту команду:
python -m calbert download_data --out-dir dataset Предварительные токенизаторы находятся в dist/tokenizer-{cased,uncased} . Они обучены только на полном обучении.
Если вы хотите переучить токенизатор (по умолчанию UNCASE):
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizerЧтобы тренировать обсадный, просто переопределите соответствующую конфигурацию Hydra:
python -m calbert train_tokenizer --input-file dataset/train.txt --out-dir tokenizer vocab.lowercase=FalseМы используем DeepKit для работы и отслеживания экспериментов. Загрузите его бесплатно для вашей платформы, если вы хотите запустить локально, или проверьте их документы, чтобы работать против их бесплатного сервера сообщества.
Чтобы все работает, давайте тренируем тестовую модель с фактическим изображением Docker в DeepKit:
deepkit run test.deepkit.ymlПо умолчанию он будет обучать его в вашем местном экземпляре Deepkit, используя ваш процессор. Прочитайте их документы, чтобы узнать, как настроить свои забеги.
Настройте кластер в локальном Deepkit, по крайней мере, одной машиной с графическим процессором.
deepkit run --clusterПосле того, как у вас есть обученная модель, вы можете экспортировать ее для использования в качестве стандартной модели трансформаторов HuggingFace.
Например, давайте представим, что вы обучили модель base-uncased , и хотите ее экспортировать.
Загрузите папку export с выходов в вашем Deepkit Run и запустите:
mv export calbert-base-uncased
transformers-cli login
transformers-cli upload exportmake test