카탈로니아 앨버트 (Lite Bert), Google은 언어 표현에 대한 자체 감독 학습을 취합니다.
그것은 Inria의 Oscar 데이터 세트의 카탈로니아 서브 세트에서 추출한 19.557.475 문장 쌍 (729 백만 독특한 단어 포함)에 대해 훈련을 받았습니다. 모델을 평가하기 위해 833.259 문장 쌍의 유효성 검사 세트를 사용합니다.
여기에서 원래 Albert 논문을 읽을 수 있습니다.
Huggingface의 Model Hub 페이지에서 사용할 수 있습니다
| 모델 | 아치. | 교육 데이터 | 그것으로 놀아라 | 시각화하십시오 |
|---|---|---|---|---|
codegram / calbert-tiny-uncased | 작은 (기반) | 오스카 (4.3GB 텍스트) | 모델 허브에 카드 | exbert에서 시각화하십시오 |
codegram / calbert-base-uncased | 베이스 (기반) | 오스카 (4.3GB 텍스트) | 모델 허브에 카드 | 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를 실제로 함께 일하기에 좋게 해주셔서 감사합니다!
또한 Albert를 생성하고 오픈 소싱에 대한 Google Research에 감사드립니다.
Albert는 언어 모델, 즉 자연어 문장 (자연 언어뿐만 아니라)과 같은 특정 구조를 가진 시퀀스를 배울 수있는 신경망입니다.
그러나 그들은 어떻게 언어를 배우나요? 다른 언어 모델은 다른 구실 작업 , 즉 언어의 작동 방식을 배울 수 있도록 제공하는 도전 과제로 교육을받습니다. 아이디어는이 하나의 과제를 다시 실현하기 위해서는 언어의 문법과 심지어 의미와 스타일까지 간접적으로 배워야한다는 것입니다.
전통적인 ( 인과 관계 라고도하는) 언어 모델은 일반적으로 다음과 같은 다음 단어를 순서대로 예측하는 과제로 훈련됩니다.
그러나 Albert는 Masked Language 모델 이라는 다른 가족입니다. 이 가족에서, 그들이 배워야하는 구실 작업은 비슷하지만, 항상 마지막 단어를 순서로 예측하는 대신, 문장의 일부 단어는 다음과 같이 무작위로 공란 으로 바뀝니다.
이 과제는 조금 더 어렵고 더 중요한 것은 공백을 둘러싼 문맥을 훨씬 더 잘 이해해야합니다.
언어 모델이 실제로,이 무의미한 구실 작업을 실제로 잘 얻으면 훨씬 더 흥미로운 작업을 위해 쉽게 용도를 변경할 수 있습니다.
언어가 문법과 의미론을 배우면, 예를 들어 문장의 매우 좋은 분류 자, 예를 들어 전체 문서도 될 수 있습니다.
그런 다음 트윗이나 문서를 카테고리로 분류하도록 가르치거나 (예를 들어 감정 또는 독성을 식별) 더 이상 혼란스러운 캐릭터만을 보지 않고 훨씬 더 추상적 인 수준에서 문서를 "읽는"것이므로 훨씬 쉽게 "이해"할 수 있습니다. (공기 따옴표에 주목하십시오. 이것은 마술이 아니지만 아마도 가장 가까운 것일 것입니다.)
카탈로니아어에는 언어 모델이 없기 때문에! 그리고 처리 할 카탈로니아 텍스트가 많이 있습니다. (카탈로니아에서).
의존성 관리를 위해 우리는시 (물론 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} 에 있습니다. 그들은 전체 훈련 세트에서만 훈련됩니다.
Tokenizer를 다시 훈련하려면 (기본적으로 기본적으로) :
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을 사용하여 실험을 실행하고 추적합니다. 로컬로 실행하려면 선택 플랫폼을 위해 무료로 다운로드하거나 문서를 확인하여 무료 커뮤니티 서버에 대해 실행하십시오.
모든 것이 작동하는지 확인하려면 DeepKit의 실제 Docker 이미지로 테스트 모델을 훈련시킵니다.
deepkit run test.deepkit.yml기본적으로 CPU를 사용하여 로컬 DeepKit 인스턴스에서 교육합니다. 달리기를 사용자 정의하는 방법을 배우려면 문서를 읽으십시오.
GPU가있는 하나 이상의 기계로 로컬 DeepKit의 클러스터를 구성하십시오.
deepkit run --cluster훈련 된 모델이 있으면 Huggingface Transformers 표준 모델로 사용하도록 내보내십시오.
예를 들어, base-uncased 모델을 훈련시켜 내보내고 싶다고 상상해 봅시다.
DeepKit 실행의 출력에서 export 폴더를 다운로드하고 실행하십시오.
mv export calbert-base-uncased
transformers-cli login
transformers-cli upload exportmake test