๐Ÿ“– BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

oceannยท2024๋…„ 9์›” 5์ผ

๐Ÿ—ž๏ธ ๋…ผ๋ฌธ ๋ฆฌ๋ทฐ

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

์‚ฌ์‹ค Attention is all you need๋ถ€ํ„ฐ ์–ผ๋ฅธ ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋˜ ๋ฏธ๋ฃจ๋‹ค๊ฐ€ ๊ฒฐ๊ตญ BERT๋ถ€ํ„ฐ ๋ฆฌ๋ทฐํ•œ๋‹ค. BERT๋Š” Transformer์˜ encoder๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ž…๋ ฅ sequence์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” deep bidirectionalํ•œ ๋ชจ๋ธ์ด๋‹ค. encoder๊ณผ decoder ๊ตฌ์กฐ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋Š” ์ด์œ ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ task ์ˆ˜ํ–‰์˜ ๋ชฉ์ ์„ฑ์— ์žˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, decoder ๋ชจ๋ธ ๋˜ํ•œ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.

๐Ÿ”— https://www.waqasrana.me/assets/papers/N19-1423.pdf

citation
Kenton, Jacob Devlin Ming-Wei Chang, and Lee Kristina Toutanova. "Bert: Pre-training of deep bidirectional transformers for language understanding." Proceedings of naacL-HLT. Vol. 1. 2019.

Abstract

BERT๋ž€ Bidirectional Encoder Representations from Transformers์˜ ์ดˆ์„ฑ์„ ๋”ฐ์˜จ ๊ฒƒ์ด๋‹ค. Transformer์˜ encoder ๊ตฌ์กฐ๋ฅผ ๋”ฐ์™€ self-attention์„ ์—ฐ์‚ฐํ•  ๋•Œ ์ž…๋ ฅ sequence์˜ ๋ฌธ๋งฅ์„ ์ „๋ถ€ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— deep bidirectional representation์„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

1. Introduction

NLP task
sentence-level task: ์ž…๋ ฅ sequence์˜ ๋ฌธ๋งฅ ํŒŒ์•…์ด ์ค‘์š”ํ•˜๋ฉฐ, inference์™€ paraphrasing ๋“ฑ์ด ์žˆ๋‹ค.
token-level task: ์ถœ๋ ฅ์ด token ๋‹จ์œ„๋กœ ์ž˜ ์ •์ œ๋œ ํ˜•ํƒœ์—ฌ์•ผ ํ•˜๋ฉฐ, named entity recognition, QA ๋“ฑ์ด ์žˆ๋‹ค.

down stream task ์ ์šฉ๋ฒ•
feature-based approach: task-specificํ•œ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ ELMo๊ฐ€ ์žˆ๋‹ค.
fine-tuning approach: ๋‹จ์ˆœํžˆ fine-tuning๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ƒ์„ฑํ˜• ๋ชจ๋ธ์ธ OpenAI์˜ GPT๊ฐ€ ์žˆ๋‹ค.

๋‘ ๋ชจ๋ธ ๊ฐ๊ฐ shallow bidirectionalํ•˜๊ฑฐ๋‚˜ unidirectionalํ•ด์„œ ์ „์ฒด์ ์ธ ๋ฌธ๋งฅ ํŒŒ์•…์ด ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
BERT๋Š” fine-tuning ๊ธฐ๋ฐ˜์˜ ์ ‘๊ทผ๋ฒ•์„ ๊ฐœ์„ ํ•œ ๋ชจ๋ธ์ด๋‹ค. deep bidirectional representation์„ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด MLM๊ณผ NSP ํ•™์Šต๋ฒ•์„ ์ ์šฉํ–ˆ๋‹ค.

2.1 Unsupervised Feature-based Approaches

์ถœ์ฒ˜: wikidocs

๋Œ€ํ‘œ์ ์œผ๋กœ ELMo๋ผ๋Š” ๋ชจ๋ธ์ด ์žˆ๋‹ค. ํŠน์ • task๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด biLM์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ญ๋ฐฉํ–ฅ๊ณผ ์ˆœ๋ฐฉํ–ฅ์œผ๋กœ sequence๋ฅผ ํ•™์Šตํ•œ๋‹ค. ์–‘๋ฐฉํ–ฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ๊ฐ์˜ ๋ฐฉํ–ฅ์— ๋Œ€ํ•ด์„œ ๋…๋ฆฝ์ ์œผ๋กœ ํ•™์Šตํ•œ ํ›„ concatenateํ•˜๊ธฐ ๋•Œ๋ฌธ์— shallow bidirectionalํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ task๋ฅผ ํ•™์Šตํ•œ ๋ชจ๋ธ์€ ์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ๊ณผ ๊ฒฐํ•ฉ๋˜์–ด ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•œ๋‹ค.

2.2 Unsupervised Fine-tuning Approaches

๋Œ€ํ‘œ์ ์œผ๋กœ ์ƒ์„ฑํ˜• ๋ชจ๋ธ์ธ OpenAI์˜ GPT๊ฐ€ ์žˆ์œผ๋ฉฐ, ๋‹จ์ˆœํžˆ ๋น„์ง€๋„ ํ•™์Šต ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์ „ ํ•™์Šต๋œ word embedding์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ•ด๋‹น ๊ฐ€์ค‘์น˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ชจ๋ธ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์ง€๋„ ํ•™์Šต ๋ฐฉ์‹์œผ๋กœ ํŠน์ • task์— ๋งž๋Š” ์ž‘์—…๋“ค์„ ํ•™์Šตํ•˜๋ฉฐ fine-tuning๋œ๋‹ค.
์ด ๋ฐฉ์‹์€ ์ผ๋ถ€ ๊ฐ€์ค‘์น˜๋“ค๋งŒ ํ•™์Šตํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค์™€ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

2.3 Transfer Learning from Supervised Data

์•ž์„œ fine-tuningํ•  ๋•Œ๋Š” ์ง€๋„ ํ•™์Šต ๋ฐฉ์‹์„ ์ ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ „์ด ํ•™์Šต ๋˜ํ•œ ๊ณ ๋ คํ•˜๋ฉด ์ข‹์€ ๋ฐฉ์‹์ด๋‹ค. vision task์—์„œ๋„ ์ž…์ฆ๋œ ๋ฐ”๊ฐ€ ์žˆ๋“ฏ์ด, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹์—์„œ ํ•™์Šตํ•œ ๋ชจ๋ธ์„ freezeํ•˜์—ฌ ์ถ”๊ฐ€๋กœ ํ•™์Šตํ•  layer๋งŒ tuningํ•œ๋‹ค. ์–ด์จŒ๋“  ์ด ๋…ผ๋ฌธ์—์„œ๋Š” Fine-tuning ๋ฐฉ์‹์— ์ง‘์ค‘ํ•œ๋‹ค.

3. BERT

์•ž์„œ ์„ค๋ช…ํ–ˆ์ง€๋งŒ, ์ด ๋‘ ๋‹จ๊ณ„์˜ ํ•™์Šต ๋ฐฉ์‹์„ ๊ฑฐ์นœ๋‹ค. ๋น„์ง€๋„ ํ•™์Šต ๋ฐฉ์‹์œผ๋กœ pre-trainingํ•˜๋Š” ๋‹จ๊ณ„์™€ ์ง€๋„ ํ•™์Šต ๋ฐฉ์‹์œผ๋กœ fine-tuningํ•˜๋Š” ๋‹จ๊ณ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ๋‹ค์–‘ํ•œ task์—๋„ ๋‘ ๋‹จ๊ณ„ ๋ชจ๋‘ ๊ฑฐ์˜ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, fine-tuning ์‹œ์—๋งŒ ์ถ”๊ฐ€์ ์ธ layer๊ฐ€ ์‚ฌ์šฉ๋˜์–ด unified architecture across different tasks๋ผ๊ณ  ํ•œ๋‹ค.

Model Architecture
multi-layer bidirectional Transformer encoder based ๋ชจ๋ธ์ด๋‹ค. ๋ง์ด ์–ด๋ ค์šด๋ฐ ๋‹จ์ˆœํžˆ Transformer์˜ encoder ๊ตฌ์กฐ๋ฅผ ๋”ฐ์˜จ ๊ฒƒ์ด๊ณ , ๋‚ด๋ถ€๋Š” multi-layer๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
OpenAI์˜ GPT์™€ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด BERTBASE\text{BERT}_{BASE}๋Š” LL=12, HH=768, AA=12, Totalย Parameters\text{Total Parameters} = 110M์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ์ž์ฒด์ ์œผ๋กœ๋Š” BERTLARGE\text{BERT}_{LARGE} LL=24, HH=1024, AA=16, Totalย Parameters\text{Total Parameters} = 340M์œผ๋กœ ๊ตฌ์„ฑํ•˜์˜€๋‹ค.
L: Transformer block์˜ layer ์ˆ˜
H: ์€๋‹‰์ธต์˜ dimension
A: self-attention์„ ์ˆ˜ํ–‰ํ•˜๋Š” head ์ˆ˜

Input/Output Representations
๋‹ค์–‘ํ•œ down-stream task๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์˜ ํ‘œํ˜„์— ํŠน์ˆ˜ํ•œ ๊ทœ์น™์„ ์ง€์ •ํ•˜์˜€๋‹ค.

ํŠนํžˆ ์ž…๋ ฅ ๋ฌธ์žฅ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์ผ ๋•Œ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก [SEP] token์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค. [SEP] token ์•ž์˜ sequence๋“ค์€ Sentence A๊ฐ€ ๋˜์–ด A๋กœ embedding๋˜๊ณ , ๋’ค์˜ sequence๋“ค์€ B๊ฐ€ ๋œ๋‹ค.
๋˜ํ•œ ์ž์—ฐ์–ด๋ฅผ WordPiece embedding ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์˜€์œผ๋ฉฐ, ๋ชจ๋“  sequence์˜ ๋งจ ์ฒ˜์Œ์—๋Š” [CLS] token์ด ๋ถ™๋Š”๋‹ค. ์ด token์„ ํ†ตํ•ด ๊ฐ์ • ๋ถ„์„, ๋ฌธ์žฅ์˜ ํฌํ•จ ๊ด€๊ณ„ ์ถ”๋ก  ๋“ฑ classification์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ž…๋ ฅ ๋‹จ์–ด(sub-word, token)์— ๋Œ€ํ•ด์„œ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด WordPiece embedding, segment embedding, position embedding ์ด ์„ธ ๊ฐœ์˜ ํ•ฉ์œผ๋กœ embedding๋œ๋‹ค.

3.1 Pre-training BERT

Unsupervised!!!!!!!

Task #1: Masked LM
๋ฌธ๋งฅ์„ ํ†ตํ•ด ๋‹จ์–ด๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋จผ์ € ๋Œ€๊ทœ๋ชจ corpus ์ „์ฒด์˜ 15%๋ฅผ ์„ ์ •ํ•œ๋‹ค. ํ•™์Šต ์ดํ›„ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋กœ ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š” [Mask] token์€ ์—†์„ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  token์„ [Mask] token์œผ๋กœ ๋Œ€์ฒด๋Š” ๋Œ€์‹  ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
1 15%์˜ 80%๋Š” [MASK] token์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
2 15%์˜ 10%๋Š” ๋žœ๋คํ•œ ๋‹ค๋ฅธ token์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
3 ๋งˆ์ง€๋ง‰ 10%๋Š” ์›๋ž˜์˜ token์„ ๊ทธ๋Œ€๋กœ ๋‘์–ด ๋ชจ๋ธ์ด token์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค€๋‹ค.

Task #2: Next Sentence Prediction(NSP)
์•ž์„œ ์„ค๋ช…ํ–ˆ๋˜ [SEP] token๊ณผ [CLS] token์ด ์‚ฌ์šฉ๋œ๋‹ค. ์ž„์˜๋กœ ๋‘ ๋ฌธ์žฅ์„ ์„ ํƒํ•˜์—ฌ Sentence B๊ฐ€ Sentence A์˜ ๋’ค์— ์ด์–ด์ง€๋Š” ๋ฌธ์žฅ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•˜๊ฒŒ ํ•œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ชจ๋ธ์ด ๋ฌธ๋งฅ ๋ฐ ์ธ๊ณผ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
1 ํ•™์Šต ๋ฐ์ดํ„ฐ์…‹์˜ 50%๋Š” Sentence A์™€ Sentence B๊ฐ€ ์ด์–ด์ง„๋‹ค. ์ด ๊ฒฝ์šฐ, [CLS] token์€ IsNext์— ํ•ด๋‹นํ•˜๋Š” ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
2 ๋‚˜๋จธ์ง€ 50%๋Š” ๋‘ ๋ฌธ์žฅ์— ์—ฐ์†์„ฑ์ด ์—†๋‹ค. ๋”ฐ๋ผ์„œ [CLS] token์€ NotNext์— ํ•ด๋‹นํ•˜๋Š” ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Pre-training Data
์ด ๊ณผ์ •์—์„œ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ์…‹์€ 8์–ต ๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ๊ฐ€์ง„ BooksCorpus์™€ 25์–ต ๊ฐœ์˜ ๋‹จ์–ด๋ฅผ ๊ฐ€์ง„ English Wikipedia์ด๋‹ค. English Wikipedia์˜ ๊ฒฝ์šฐ, ๋ชฉ์ฐจ, ํ‘œ, ์ œ๋ชฉ ๋“ฑ์€ ๋ฌด์‹œํ•˜๊ณ  ์˜ค์ง ํ…์ŠคํŠธ๋งŒ์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

3.2 Fine-tuning BERT

Supervised!!!!!!!

์ผ๋ฐ˜์ ์œผ๋กœ ์งˆ๋ฌธ-๋‹ต๊ณผ ๊ฐ™์€ text pair๋ฅผ encodingํ•  ๋•Œ ๊ฐ๊ฐ์„ ๋”ฐ๋กœ encodingํ•˜์—ฌ ๋ชจ๋ธ์— ์ž…๋ ฅํ•˜๊ณค ํ•˜๋Š”๋ฐ, BERT๋Š” ์—ฐ์†๋œ ๋ฌธ์žฅ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ self-attention ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ ์šฉํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ task-specificํ•œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์— ๋Œ€ํ•ด์„œ BERT์˜ ๋ชจ๋“  ๊ฐ€์ค‘์น˜๋“ค์„ fine-tuningํ•œ๋‹ค.

์‚ฌ์ „ ํ•™์Šต ์‹œ ์‚ฌ์šฉ๋œ ์ž…๋ ฅ sentence A์™€ sentence B๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋Œ€์ฒด๋œ๋‹ค.
1 parapharasing: ๋‘ ๋ฌธ์žฅ ์Œ
2 entailment: ๊ฐ€์„ค-์ „์ œ ์Œ
3 QA: ์งˆ๋ฌธ-์ง€๋ฌธ ์Œ
4 text classification, sequence tagging: text-ฯ•\phi ์Œ. sentence B๊ฐ€ ํ•„์š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๋ž€์œผ๋กœ ๋‘๋Š” ๊ฒƒ์ด๋‹ค.

์ถœ๋ ฅ๋‹จ์—์„œ๋Š”, token-level task๋“ค์— ๋Œ€ํ•ด์„œ๋Š” token ํ‘œํ˜„๋“ค์ด ์ถœ๋ ฅ layer์— ์œ„์น˜ํ•˜๊ณ , classification๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” [CLS] token์ด ์‚ฌ์šฉ๋˜๊ณ , ์ดํ›„์˜ ์ถœ๋ ฅ sequence๋Š” ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.

4. Experiments

NLP์˜ 11๊ฐœ์˜ task์— ๋Œ€ํ•ด์„œ SOTA๋ฅผ ๋‹ฌ์„ฑํ–ˆ๊ณ , ๋ฒค์น˜๋งˆํฌ ๋ฐ์ดํ„ฐ์…‹ GLUE, SQuAD v1.1, SQuAD v2.0, SWAG์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ•œ ๊ณผ์ •๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ ๋‚˜์ค‘์— ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ...

5. Ablation Studies

์‚ฌ์ „ ํ•™์Šต ์‹œ NSP๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ, ๋ชจ๋ธ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ์ฐจ์ด, Fine-tuning based approach ๋ฐฉ์‹์„ feature-based approach ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟจ์„ ๋•Œ๋ฅผ ๋น„๊ตํ•œ๋‹ค.
Ablation Study๋‹ต๊ฒŒ ๋ณธ๋ก ์—์„œ ์„ค๋ช…ํ•œ ๋‚ด์šฉ์ด BERT์˜ ์ตœ๊ณ ์ ์ด๋‹ค.

6. Conclusion

BERT๋Š” deep bidirectional ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ sequence์˜ ๋ฌธ๋งฅ ์ž์ฒด๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์ „ ํ•™์Šต๋œ ๋ชจ๋ธ๋งŒ์œผ๋กœ๋„ NLP ์ž‘์—…์˜ ๋‹ค์–‘ํ•œ task๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, fine-tuning์„ ์ˆ˜ํ–‰ํ•  ์‹œ์—๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹ ์—†์ด๋„ ๋†’์€ ์ •ํ™•๋„๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค.

profile
๐ŸŒˆ๐ŸŒผ๐ŸŒธโ˜€๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€