ALBERT[[albert]]
ALBERT๋ BERT์ ํ์ฅ์ฑ๊ณผ ํ์ต ์ ๋ฉ๋ชจ๋ฆฌ ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค๊ณ๋ ๋ชจ๋ธ์ ๋๋ค. ์ด ๋ชจ๋ธ์ ๋ ๊ฐ์ง ํ๋ผ๋ฏธํฐ ๊ฐ์ ๊ธฐ๋ฒ์ ๋์ ํฉ๋๋ค. ์ฒซ ๋ฒ์งธ๋ ์๋ฒ ๋ฉ ํ๋ ฌ ๋ถํด(factorized embedding parametrization)๋ก, ํฐ ์ดํ ์๋ฒ ๋ฉ ํ๋ ฌ์ ๋ ๊ฐ์ ์์ ํ๋ ฌ๋ก ๋ถํดํ์ฌ ํ๋ ์ฌ์ด์ฆ๋ฅผ ๋๋ ค๋ ํ๋ผ๋ฏธํฐ ์๊ฐ ํฌ๊ฒ ์ฆ๊ฐํ์ง ์๋๋ก ํฉ๋๋ค. ๋ ๋ฒ์งธ๋ ๊ณ์ธต ๊ฐ ํ๋ผ๋ฏธํฐ ๊ณต์ (cross-layer parameter sharing)๋ก, ์ฌ๋ฌ ๊ณ์ธต์ด ํ๋ผ๋ฏธํฐ๋ฅผ ๊ณต์ ํ์ฌ ํ์ตํด์ผ ํ ํ๋ผ๋ฏธํฐ ์๋ฅผ ์ค์ ๋๋ค.
ALBERT๋ BERT์์ ๋ฐ์ํ๋ GPU/TPU ๋ฉ๋ชจ๋ฆฌ ํ๊ณ, ๊ธด ํ์ต ์๊ฐ, ๊ฐ์์ค๋ฐ ์ฑ๋ฅ ์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค. ALBERT๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ ๊ฐ์ง ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ BERT์ ํ์ต ์๋๋ฅผ ๋์ ๋๋ค:
- ์๋ฒ ๋ฉ ํ๋ ฌ ๋ถํด: ํฐ ์ดํ ์๋ฒ ๋ฉ ํ๋ ฌ์ ๋ ๊ฐ์ ๋ ์์ ํ๋ ฌ๋ก ๋ถํดํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ ๋๋ค.
- ๊ณ์ธต ๊ฐ ํ๋ผ๋ฏธํฐ ๊ณต์ : ๊ฐ ํธ๋์คํฌ๋จธ ๊ณ์ธต๋ง๋ค ๋ณ๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ตํ๋ ๋์ , ์ฌ๋ฌ ๊ณ์ธต์ด ํ๋ผ๋ฏธํฐ๋ฅผ ๊ณต์ ํ์ฌ ํ์ตํด์ผ ํ ๊ฐ์ค์น ์๋ฅผ ๋์ฑ ์ค์ ๋๋ค.
ALBERT๋ BERT์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ ์์น ์๋ฒ ๋ฉ(absolute position embeddings)์ ์ฌ์ฉํ๋ฏ๋ก, ์ ๋ ฅ ํจ๋ฉ์ ์ค๋ฅธ์ชฝ์ ์ ์ฉํด์ผ ํฉ๋๋ค. ์๋ฒ ๋ฉ ํฌ๊ธฐ๋ 128์ด๋ฉฐ, BERT์ 768๋ณด๋ค ์์ต๋๋ค. ALBERT๋ ํ ๋ฒ์ ์ต๋ 512๊ฐ์ ํ ํฐ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ชจ๋ ๊ณต์ ALBERT ์ฒดํฌํฌ์ธํธ๋ ALBERT ์ปค๋ฎค๋ํฐ ์กฐ์ง์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
์ค๋ฅธ์ชฝ ์ฌ์ด๋๋ฐ์ ALBERT ๋ชจ๋ธ์ ํด๋ฆญํ์๋ฉด ๋ค์ํ ์ธ์ด ์์ ์ ALBERT๋ฅผ ์ ์ฉํ๋ ์์๋ฅผ ๋ ํ์ธํ์ค ์ ์์ต๋๋ค.
์๋ ์์๋ [Pipeline], [AutoModel] ๊ทธ๋ฆฌ๊ณ ์ปค๋งจ๋๋ผ์ธ์์ [MASK] ํ ํฐ์ ์์ธกํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค.
import torch
from transformers import pipeline
pipeline = pipeline(
task="fill-mask",
model="albert-base-v2",
dtype=torch.float16,
device=0
)
pipeline("์๋ฌผ์ ๊ดํฉ์ฑ์ด๋ผ๊ณ ์๋ ค์ง ๊ณผ์ ์ ํตํด [MASK]๋ฅผ ์์ฑํฉ๋๋ค.", top_k=5)
import torch
from transformers import AutoModelForMaskedLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("albert/albert-base-v2")
model = AutoModelForMaskedLM.from_pretrained(
"albert/albert-base-v2",
dtype=torch.float16,
attn_implementation="sdpa",
device_map="auto"
)
prompt = "์๋ฌผ์ [MASK]์ด๋ผ๊ณ ์๋ ค์ง ๊ณผ์ ์ ํตํด ์๋์ง๋ฅผ ์์ฑํฉ๋๋ค."
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
mask_token_index = torch.where(inputs["input_ids"] == tokenizer.mask_token_id)[1]
predictions = outputs.logits[0, mask_token_index]
top_k = torch.topk(predictions, k=5).indices.tolist()
for token_id in top_k[0]:
print(f"์์ธก: {tokenizer.decode([token_id])}")
echo -e "Plants create [MASK] through a process known as photosynthesis." | transformers run --task fill-mask --model albert-base-v2 --device 0
์ฐธ๊ณ ์ฌํญ[[notes]]
- BERT๋ ์ ๋ ์์น ์๋ฒ ๋ฉ์ ์ฌ์ฉํ๋ฏ๋ก, ์ค๋ฅธ์ชฝ์ ์ ๋ ฅ์ด ํจ๋ฉ๋ผ์ผ ํฉ๋๋ค.
- ์๋ฒ ๋ฉ ํฌ๊ธฐ
E๋ ํ๋ ํฌ๊ธฐH์ ๋ค๋ฆ ๋๋ค. ์๋ฒ ๋ฉ์ ๋ฌธ๋งฅ์ ๋ ๋ฆฝ์ (๊ฐ ํ ํฐ๋ง๋ค ํ๋์ ์๋ฒ ๋ฉ ๋ฒกํฐ)์ด๊ณ , ์๋ ์ํ๋ ๋ฌธ๋งฅ์ ์์กด์ (ํ ํฐ ์ํ์ค๋ง๋ค ํ๋์ ์๋ ์ํ)์ ๋๋ค. ์๋ฒ ๋ฉ ํ๋ ฌ์V x E(V: ์ดํ ํฌ๊ธฐ)์ด๋ฏ๋ก, ์ผ๋ฐ์ ์ผ๋กH >> E๊ฐ ๋ ๋ ผ๋ฆฌ์ ์ ๋๋ค.E < H์ผ ๋ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ๊ฐ ๋ ์ ์ด์ง๋๋ค.
์ฐธ๊ณ ์๋ฃ[[resources]]
์๋ ์น์ ์ ์๋ฃ๋ค์ ๊ณต์ Hugging Face ๋ฐ ์ปค๋ฎค๋ํฐ(๐ ํ์) ์๋ฃ๋ก, AlBERT๋ฅผ ์์ํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ถ๊ฐํ ์๋ฃ๊ฐ ์๋ค๋ฉด Pull Request๋ฅผ ๋ณด๋ด์ฃผ์ธ์! ๊ธฐ์กด ์๋ฃ์ ์ค๋ณต๋์ง ์๊ณ ์๋ก์ด ๋ด์ฉ์ ๋ด๊ณ ์์ผ๋ฉด ์ข์ต๋๋ค.
[
AlbertForSequenceClassification]์ ์ด ์์ ์คํฌ๋ฆฝํธ์์ ์ง์๋ฉ๋๋ค.[
TFAlbertForSequenceClassification]์ ์ด ์์ ์คํฌ๋ฆฝํธ์์ ์ง์๋ฉ๋๋ค.[
FlaxAlbertForSequenceClassification]์ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค.ํ ์คํธ ๋ถ๋ฅ ์์ ๊ฐ์ด๋์์ ๋ชจ๋ธ ์ฌ์ฉ๋ฒ์ ํ์ธํ์ธ์.
[
AlbertForTokenClassification]์ ์ด ์์ ์คํฌ๋ฆฝํธ์์ ์ง์๋ฉ๋๋ค.[
TFAlbertForTokenClassification]์ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค.[
FlaxAlbertForTokenClassification]์ ์ด ์์ ์คํฌ๋ฆฝํธ์์ ์ง์๋ฉ๋๋ค.๐ค Hugging Face์ ํ ํฐ ๋ถ๋ฅ ๊ฐ์ข
ํ ํฐ ๋ถ๋ฅ ์์ ๊ฐ์ด๋์์ ๋ชจ๋ธ ์ฌ์ฉ๋ฒ์ ํ์ธํ์ธ์.
- [
AlbertForMaskedLM]์ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค. - [
TFAlbertForMaskedLM]์ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค. - [
FlaxAlbertForMaskedLM]์ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค. - ๐ค Hugging Face์ ๋ง์คํน ์ธ์ด ๋ชจ๋ธ๋ง ๊ฐ์ข
- ๋ง์คํน ์ธ์ด ๋ชจ๋ธ๋ง ์์ ๊ฐ์ด๋์์ ๋ชจ๋ธ ์ฌ์ฉ๋ฒ์ ํ์ธํ์ธ์.
- [
AlbertForQuestionAnswering]์ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค. - [
TFAlbertForQuestionAnswering]์ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค. - [
FlaxAlbertForQuestionAnswering]์ ์ด ์์ ์คํฌ๋ฆฝํธ์์ ์ง์๋ฉ๋๋ค. - ์ง์์๋ต ๐ค Hugging Face ๊ฐ์ข์ ์ฑํฐ.
- ์ง์์๋ต ์์ ๊ฐ์ด๋์์ ๋ชจ๋ธ ์ฌ์ฉ๋ฒ์ ํ์ธํ์ธ์.
๋ค์ค ์ ํ(Multiple choice)
[
AlbertForMultipleChoice]๋ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค.[
TFAlbertForMultipleChoice]๋ ์ด ์์ ์คํฌ๋ฆฝํธ์ ๋ ธํธ๋ถ์์ ์ง์๋ฉ๋๋ค.๋ค์ค ์ ํ ์์ ๊ฐ์ด๋์์ ๋ชจ๋ธ ์ฌ์ฉ๋ฒ์ ํ์ธํ์ธ์.
AlbertConfig[[albertconfig]]
[[autodoc]] AlbertConfig
AlbertTokenizer[[alberttokenizer]]
[[autodoc]] AlbertTokenizer - get_special_tokens_mask - save_vocabulary
AlbertTokenizerFast[[alberttokenizerfast]]
[[autodoc]] AlbertTokenizerFast
Albert ํนํ ์ถ๋ ฅ[[albert-specific-outputs]]
[[autodoc]] models.albert.modeling_albert.AlbertForPreTrainingOutput
AlbertModel[[albertmodel]]
[[autodoc]] AlbertModel - forward
AlbertForPreTraining[[albertforpretraining]]
[[autodoc]] AlbertForPreTraining - forward
AlbertForMaskedLM[[albertformaskedlm]]
[[autodoc]] AlbertForMaskedLM - forward
AlbertForSequenceClassification[[albertforsequenceclassification]]
[[autodoc]] AlbertForSequenceClassification - forward
AlbertForMultipleChoice[[albertformultiplechoice]]
[[autodoc]] AlbertForMultipleChoice
AlbertForTokenClassification[[albertfortokenclassification]]
[[autodoc]] AlbertForTokenClassification - forward
AlbertForQuestionAnswering[[albertforquestionanswering]]
[[autodoc]] AlbertForQuestionAnswering - forward