Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Ko chapter2 3~8.mdx & Modify Ko chapter2 2.mdx typo #446

Merged
merged 17 commits into from
Jan 5, 2023
Merged
13 changes: 13 additions & 0 deletions chapters/ko/_toctree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,19 @@
title: 단원 μ†Œκ°œ
- local: chapter2/2
title: νŒŒμ΄ν”„λΌμΈ λ‚΄λΆ€ λ™μž‘ κ³Όμ •
- local: chapter2/3
title: λͺ¨λΈ
- local: chapter2/4
title: ν† ν¬λ‚˜μ΄μ €
- local: chapter2/5
title: 닀쀑 μ‹œν€€μŠ€ 처리
- local: chapter2/6
title: ν•œ λ²ˆμ— μ‹€ν–‰ν•˜κΈ°
- local: chapter2/7
title: κΈ°λ³Έ μ‚¬μš© μ™„λ£Œ!
- local: chapter2/8
title: 단원 마무리 ν€΄μ¦ˆ
quiz: 2

- title: 8. 도움을 μš”μ²­ν•˜λŠ” 방법
sections:
Expand Down
2 changes: 1 addition & 1 deletion chapters/ko/chapter2/2.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ model.config.id2label
- 첫 번째 λ¬Έμž₯: NEGATIVE: 0.0402, POSITIVE: 0.9598
- 두 번째 λ¬Έμž₯: NEGATIVE: 0.9995, POSITIVE: 0.0005

νŒŒμ΄ν”„λΌμΈ μ„Έ λ‹¨κ²Œ-ν† ν¬λ‚˜μ΄μ €λ₯Ό μ΄μš©ν•œ μ „μ²˜λ¦¬, λͺ¨λΈμ— μž…λ ₯ λ„£μ–΄μ£ΌκΈ°, ν›„μ²˜λ¦¬-λ₯Ό μ„±κ³΅μ μœΌλ‘œ μž¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€! 이제 각 λ‹¨κ³„λ³„λ‘œ μ’€ 더 깊게 μ•Œμ•„λ³΄λŠ” μ‹œκ°„μ„ κ°€μ Έλ΄…μ‹œλ‹€.
νŒŒμ΄ν”„λΌμΈ μ„Έ 단계-ν† ν¬λ‚˜μ΄μ €λ₯Ό μ΄μš©ν•œ μ „μ²˜λ¦¬, λͺ¨λΈμ— μž…λ ₯ λ„£μ–΄μ£ΌκΈ°, ν›„μ²˜λ¦¬-λ₯Ό μ„±κ³΅μ μœΌλ‘œ μž¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€! 이제 각 λ‹¨κ³„λ³„λ‘œ μ’€ 더 깊게 μ•Œμ•„λ³΄λŠ” μ‹œκ°„μ„ κ°€μ Έλ΄…μ‹œλ‹€.

<Tip>

Expand Down
227 changes: 227 additions & 0 deletions chapters/ko/chapter2/3.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
<FrameworkSwitchCourse {fw} />

# λͺ¨λΈ[[models]]

{#if fw === 'pt'}

<CourseFloatingBanner chapter={2}
classNames="absolute z-10 right-0 top-0"
notebooks={[
{label: "Google Colab", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_pt.ipynb"},
{label: "Aws Studio", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_pt.ipynb"},
]} />

{:else}

<CourseFloatingBanner chapter={2}
classNames="absolute z-10 right-0 top-0"
notebooks={[
{label: "Google Colab", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_tf.ipynb"},
{label: "Aws Studio", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_tf.ipynb"},
]} />

{/if}

{#if fw === 'pt'}
<Youtube id="AhChOFRegn4"/>
{:else}
<Youtube id="d3JVgghSOew"/>
{/if}

{#if fw === 'pt'}
이 μž₯μ—μ„œλŠ” λͺ¨λΈμ„ μƒμ„±ν•˜κ³  μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³Ό κ²ƒμž…λ‹ˆλ‹€. 체크포인트λ₯Ό μ΄μš©ν•΄ μ–΄λ–€ λͺ¨λΈμ΄λ“  νŽΈλ¦¬ν•˜κ²Œ μΈμŠ€ν„΄μŠ€ν™”ν•  수 μžˆλŠ” `AutoModel` 클래슀λ₯Ό μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€.

`AutoModel` ν΄λž˜μŠ€μ™€ 이와 κ΄€λ ¨λœ λͺ¨λ“  ν•­λͺ©λ“€μ€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ΄μš©ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ λͺ¨λΈμ— λŒ€ν•œ κ°„λ‹¨ν•œ λž˜νΌμž…λ‹ˆλ‹€. 당신이 μ„ νƒν•œ μ²΄ν¬ν¬μΈνŠΈλ‘œλΆ€ν„° μžλ™μœΌλ‘œ λͺ¨λΈ ꡬ쑰λ₯Ό μΆ”λ‘ ν•˜κ³  κ·Έ ꡬ쑰둜 λͺ¨λΈμ„ μΈμŠ€ν„΄μŠ€ν™”ν•˜κΈ° λ•Œλ¬Έμ— μ˜λ¦¬ν•œ 래퍼라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

{:else}
이 μž₯μ—μ„œλŠ” λͺ¨λΈμ„ μƒμ„±ν•˜κ³  μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³Ό κ²ƒμž…λ‹ˆλ‹€. 체크포인트λ₯Ό μ΄μš©ν•΄ μ–΄λ–€ λͺ¨λΈμ΄λ“  νŽΈλ¦¬ν•˜κ²Œ μΈμŠ€ν„΄μŠ€ν™”ν•  수 μžˆλŠ” `TFAutoModel` 클래슀λ₯Ό μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€.

`TFAutoModel` ν΄λž˜μŠ€μ™€ 이와 κ΄€λ ¨λœ λͺ¨λ“  ν•­λͺ©λ“€μ€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ΄μš©ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ λͺ¨λΈμ— λŒ€ν•œ κ°„λ‹¨ν•œ λž˜νΌμž…λ‹ˆλ‹€. 당신이 μ„ νƒν•œ μ²΄ν¬ν¬μΈνŠΈλ‘œλΆ€ν„° μžλ™μœΌλ‘œ λͺ¨λΈ ꡬ쑰λ₯Ό μΆ”λ‘ ν•˜κ³  κ·Έ ꡬ쑰둜 λͺ¨λΈμ„ μΈμŠ€ν„΄μŠ€ν™”ν•˜κΈ° λ•Œλ¬Έμ— μ˜λ¦¬ν•œ 래퍼라고 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

{/if}

ν•˜μ§€λ§Œ, μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” λͺ¨λΈμ˜ ꡬ쑰λ₯Ό μ•Œκ³  μžˆλ‹€λ©΄ ν•΄λ‹Ή ꡬ쑰λ₯Ό 직접 μ •μ˜ν•˜λŠ” 클래슀λ₯Ό μ‚¬μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. BERT λͺ¨λΈμ„ 톡해 λ™μž‘ 과정을 μ•Œμ•„λ΄…μ‹œλ‹€.

## Transformer λͺ¨λΈ 생성[[creating-a-transformer]]

BERT λͺ¨λΈμ„ μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•΄ κ°€μž₯ λ¨Όμ € ν•΄μ•Ό ν•  일은 ν™˜κ²½ μ„€μ • 객체λ₯Ό λΆˆλŸ¬μ˜€λŠ” κ²ƒμž…λ‹ˆλ‹€.

{#if fw === 'pt'}
```py
from transformers import BertConfig, BertModel

# ν™˜κ²½ μ„€μ • 생성
config = BertConfig()

# ν™˜κ²½ 섀정을 μ΄μš©ν•œ λͺ¨λΈ 생성
model = BertModel(config)
```
{:else}
```py
from transformers import BertConfig, TFBertModel

# ν™˜κ²½ μ„€μ • 생성
config = BertConfig()

# ν™˜κ²½ 섀정을 μ΄μš©ν•œ λͺ¨λΈ 생성
model = TFBertModel(config)
```
{/if}

ν™˜κ²½ 섀정은 λͺ¨λΈ 생성에 μ‚¬μš©λ˜λŠ” λ§Žμ€ 속성을 ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

```py
print(config)
```

```python out
BertConfig {
[...]
"hidden_size": 768,
"intermediate_size": 3072,
"max_position_embeddings": 512,
"num_attention_heads": 12,
"num_hidden_layers": 12,
[...]
}
```

이 속성듀이 뭘 ν•˜λŠ”μ§€λŠ” 보지 λͺ»ν–ˆμ§€λ§Œ λͺ‡ κ°€μ§€λŠ” 짚고 λ„˜μ–΄κ°€μ•Ό ν•©λ‹ˆλ‹€. `hidden_size` 속성은 `hidden_states` λ²‘ν„°μ˜ 크기λ₯Ό κ²°μ •ν•˜κ³ , `num_hidden_layers` 속성은 Transformer λͺ¨λΈμ΄ κ°€μ§€λŠ” λ ˆμ΄μ–΄ 수λ₯Ό κ²°μ •ν•©λ‹ˆλ‹€.

### λ‹€λ₯Έ λ‘œλ”© λ©”μ„œλ“œ[[different-loading-methods]]

κΈ°λ³Έ ν™˜κ²½ μ„€μ •μœΌλ‘œ λͺ¨λΈμ„ μƒμ„±ν•˜λ©΄ μž„μ˜μ˜ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.

{#if fw === 'pt'}
```py
from transformers import BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

# λͺ¨λΈμ€ μž„μ˜μ˜ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€!
```
{:else}
```py
from transformers import BertConfig, TFBertModel

config = BertConfig()
model = TFBertModel(config)

# λͺ¨λΈμ€ μž„μ˜μ˜ κ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ˜μ—ˆμŠ΅λ‹ˆλ‹€!
```
{/if}

λͺ¨λΈμ€ 이 μƒνƒœλ‘œ μ‚¬μš©λ  수 μžˆμ§€λ§Œ λͺ¨λΈμ˜ 좜λ ₯ κ²°κ³Όλ₯Ό 보면 νš‘μ„€μˆ˜μ„€ν•  κ²ƒμž…λ‹ˆλ‹€. λ¨Όμ € λͺ¨λΈμ€ ν•™μŠ΅λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. μš°λ¦¬λŠ” μ§λ©΄ν•œ κ³Όμ œμ— λŒ€ν•΄ μ²˜μŒλΆ€ν„° λͺ¨λΈμ„ ν•™μŠ΅μ‹œν‚¬ 수 μžˆμ§€λ§Œ, [제1단원](/course/chapter1)μ—μ„œ 봀듯이 이 과정은 κΈ΄ μ‹œκ°„κ³Ό λ§Žμ€ 데이터λ₯Ό ν•„μš”λ‘œ ν•˜λ©° ν™˜κ²½μ— λ¬΄μ‹œν•  수 μ—†λŠ” 영ν–₯을 λ―ΈμΉ  κ²ƒμž…λ‹ˆλ‹€. λΆˆν•„μš”ν•˜κ³  μ€‘λ³΅λ˜λŠ” λ…Έλ ₯을 ν”Όν•˜κΈ° μœ„ν•΄μ„œλŠ” 이미 ν•™μŠ΅λœ λͺ¨λΈμ„ μž¬μ‚¬μš©ν•˜κ³  κ³΅μœ ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

ν•™μŠ΅λœ Transformer λͺ¨λΈμ„ λΆˆλŸ¬μ˜€λŠ” 것은 κ°„λ‹¨ν•©λ‹ˆλ‹€ - `from_pretrained()` λ©”μ„œλ“œλ₯Ό μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

{#if fw === 'pt'}
```py
from transformers import BertModel

model = BertModel.from_pretrained("bert-base-cased")
```

μ•žμ„œ λ³Έ κ²ƒμ²˜λŸΌ `BertModel`을 λ™μΌν•œ `AutoModel` 클래슀둜 λŒ€μ²΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ²΄ν¬ν¬μΈνŠΈμ— ꡬ애받지 μ•ŠλŠ” μ½”λ“œλ₯Ό κ΅¬ν˜„ν•  수 있기 λ•Œλ¬Έμ— μ§€κΈˆλΆ€ν„° `AutoModel` 클래슀λ₯Ό μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€. λ§Œμ•½ νŠΉμ • μ²΄ν¬ν¬μΈνŠΈμ—μ„œ μ½”λ“œκ°€ μž‘λ™ν•œλ‹€λ©΄ λ‹€λ₯Έ μ²΄ν¬ν¬μΈνŠΈμ—μ„œλ„ μž‘λ™μ΄ μ›ν™œν•΄μ•Ό ν•©λ‹ˆλ‹€. μ²΄ν¬ν¬μΈνŠΈκ°€ μœ μ‚¬ν•œ νƒœμŠ€ν¬(예λ₯Ό λ“€λ©΄ 감성뢄석 νƒœμŠ€ν¬)에 λŒ€ν•΄ ν•™μŠ΅λ˜λŠ” ν•œ λͺ¨λΈ ꡬ쑰가 λ‹€λ₯΄λ”라도 μ μš©λ©λ‹ˆλ‹€.

{:else}
```py
from transformers import TFBertModel

model = TFBertModel.from_pretrained("bert-base-cased")
```

μ•žμ„œ λ³Έ κ²ƒμ²˜λŸΌ `BertModel`을 λ™μΌν•œ `AutoModel` 클래슀둜 λŒ€μ²΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μ²΄ν¬ν¬μΈνŠΈμ— ꡬ애받지 μ•ŠλŠ” μ½”λ“œλ₯Ό κ΅¬ν˜„ν•  수 있기 λ•Œλ¬Έμ— μ§€κΈˆλΆ€ν„° `AutoModel` 클래슀λ₯Ό μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€. λ§Œμ•½ νŠΉμ • μ²΄ν¬ν¬μΈνŠΈμ—μ„œ μ½”λ“œκ°€ μž‘λ™ν•œλ‹€λ©΄ λ‹€λ₯Έ μ²΄ν¬ν¬μΈνŠΈμ—μ„œλ„ μž‘λ™μ΄ μ›ν™œν•΄μ•Ό ν•©λ‹ˆλ‹€. μ²΄ν¬ν¬μΈνŠΈκ°€ μœ μ‚¬ν•œ νƒœμŠ€ν¬(예λ₯Ό λ“€λ©΄ 감성뢄석 νƒœμŠ€ν¬)에 λŒ€ν•΄ ν•™μŠ΅λ˜λŠ” ν•œ λͺ¨λΈ ꡬ쑰가 λ‹€λ₯΄λ”라도 μ μš©λ©λ‹ˆλ‹€.

{/if}

μœ„μ˜ μƒ˜ν”Œ μ½”λ“œμ—μ„œ `BertConfig`λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  `bert-base-cased` μ‹λ³„μžλ₯Ό 톡해 μ‚¬μ „ν•™μŠ΅ λͺ¨λΈμ„ λΆˆλŸ¬μ™”μŠ΅λ‹ˆλ‹€. 이 체크포인트의 BERT μ €μžλ“€μ΄ 직접 ν•™μŠ΅μ‹œν‚¨ λͺ¨λΈ μ²΄ν¬ν¬μΈνŠΈμž…λ‹ˆλ‹€. [λͺ¨λΈ μΉ΄λ“œ](https://huggingface.co/bert-base-cased)μ—μ„œ 더 μžμ„Έν•œ λ‚΄μš©μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

이제 이 λͺ¨λΈμ€ 체크포인트의 λͺ¨λ“  κ°€μ€‘μΉ˜λ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€. ν•™μŠ΅λœ νƒœμŠ€ν¬μ— λŒ€ν•œ μΆ”λ‘  μ‹œ λ°”λ‘œ μ‚¬μš©ν•  수 있으며 μƒˆλ‘œμš΄ νƒœμŠ€ν¬λ‘œ νŒŒμΈνŠœλ‹ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ²˜μŒλΆ€ν„° 직접 ν•™μŠ΅μ‹œν‚€κΈ°λ³΄λ‹€ μ‚¬μ „ν•™μŠ΅λœ κ°€μ€‘μΉ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ 쒋은 κ²°κ³Όλ₯Ό 빨리 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

κ°€μ€‘μΉ˜κ°€ λ‹€μš΄λ‘œλ“œλ˜κ³  κΈ°λ³Έ κ²½λ‘œκ°€ *~/.cache/huggingface/transformers*인 μΊμ‹œ 폴더에 μ €μž₯λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이후 `from_pretrained()` λ©”μ„œλ“œ 호좜 μ‹œ κ°€μ€‘μΉ˜λ₯Ό λ‹€μ‹œ λ‹€μš΄λ‘œλ“œ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μΊμ‹œ ν΄λ”λŠ” `HF_HOME` ν™˜κ²½ λ³€μˆ˜ 섀정을 톡해 λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

BERT ꡬ쑰와 ν˜Έν™˜λ˜λŠ” λͺ¨λΈμ΄λΌλ©΄, λͺ¨λΈ ν—ˆλΈŒμ— 올라온 μ–΄λ–€ λͺ¨λΈμ΄λΌλ„ μ‹λ³„μžλ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 이용 κ°€λŠ₯ν•œ BERT 체크포인트 전체 λ¦¬μŠ€νŠΈλŠ” [이 κ³³](https://huggingface.co/models?filter=bert)μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

### μ €μž₯ λ©”μ„œλ“œ[[saving-methods]]

λͺ¨λΈ μ €μž₯은 λͺ¨λΈμ„ λΆˆλŸ¬μ˜€λŠ” κ²ƒλ§ŒνΌ κ°„λ‹¨ν•©λ‹ˆλ‹€ - `from_pretrained()` λ©”μ„œλ“œμ™€ μœ μ‚¬ν•œ `save_pretrained()` λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

```py
model.save_pretrained("directory_on_my_computer")
```

이 λ©”μ„œλ“œλŠ” λ‹Ήμ‹ μ˜ λ””μŠ€ν¬μ— 두 가지 νŒŒμΌμ„ μ €μž₯ν•©λ‹ˆλ‹€.

{#if fw === 'pt'}
```
ls directory_on_my_computer

config.json pytorch_model.bin
```
{:else}
```
ls directory_on_my_computer

config.json tf_model.h5
```
{/if}

*config.json* νŒŒμΌμ„ μžμ„Ένžˆ 듀여닀보면, 속성듀이 λͺ¨λΈ ꡬ쑰 생성에 μ€‘μš”ν•˜λ‹€λŠ” 것을 μ•Œκ²Œ 될 κ²ƒμž…λ‹ˆλ‹€. λ˜ν•œ, 이 νŒŒμΌμ—λŠ” μ²΄ν¬ν¬μΈνŠΈκ°€ μ‹œμž‘λœ μœ„μΉ˜μ™€ 체크포인트λ₯Ό λ§ˆμ§€λ§‰μœΌλ‘œ μ €μž₯ν•  λ•Œ μ‚¬μš©ν•œ πŸ€— Transformers 버전과 같은 메타데이터가 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

{#if fw === 'pt'}
*pytorch_model.bin* νŒŒμΌμ€ *state dictionary*둜 μ•Œλ €μ Έ μžˆμŠ΅λ‹ˆλ‹€. 이 νŒŒμΌμ€ λͺ¨λΈμ˜ λͺ¨λ“  κ°€μ€‘μΉ˜λ₯Ό μ €μž₯ν•˜κ³  있으며 두 개의 파일이 μ„œλ‘œ μ—°κ²°λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λΈ κ°€μ€‘μΉ˜λŠ” λͺ¨λΈμ˜ νŒŒλΌλ―Έν„°μ΄κ³  ν™˜κ²½ 섀정은 λͺ¨λΈ ꡬ쑰 νŒŒμ•…μ— μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

{:else}
*tf_model.h5* νŒŒμΌμ€ *state dictionary*둜 μ•Œλ €μ Έ μžˆμŠ΅λ‹ˆλ‹€. 이 νŒŒμΌμ€ λͺ¨λΈμ˜ λͺ¨λ“  κ°€μ€‘μΉ˜λ₯Ό μ €μž₯ν•˜κ³  있으며 두 개의 νŒŒμΌμ€ μ„œλ‘œ 관련이 μžˆμŠ΅λ‹ˆλ‹€. λͺ¨λΈ κ°€μ€‘μΉ˜λŠ” λͺ¨λΈμ˜ νŒŒλΌλ―Έν„°μ΄κ³  ν™˜κ²½ 섀정은 λͺ¨λΈ ꡬ쑰 νŒŒμ•…μ— μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

{/if}

## Transformer λͺ¨λΈμ„ μ΄μš©ν•˜μ—¬ μΆ”λ‘ ν•˜κΈ°[[using-a-transformer-model-for-inference]]

λͺ¨λΈμ„ 뢈러였고 μ €μž₯ν•˜λŠ” 방법을 μ•Œμ•˜κΈ° λ•Œλ¬Έμ— 이제 λͺ¨λΈμ„ ν™œμš©ν•˜μ—¬ λͺ‡ 가지 μ˜ˆμΈ‘μ„ ν•΄λ΄…μ‹œλ‹€. Transformer λͺ¨λΈμ€ ν† ν¬λ‚˜μ΄μ €κ°€ μƒμ„±ν•œ 숫자만 μ²˜λ¦¬ν•  수 μžˆλŠ”λ° ν† ν¬λ‚˜μ΄μ €μ— λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜κΈ° μ „ λͺ¨λΈμ΄ ν—ˆλ½ν•˜λŠ” μž…λ ₯ ν˜•νƒœμ— λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.

ν† ν¬λ‚˜μ΄μ €λŠ” μ μ ˆν•œ ν”„λ ˆμž„μ›Œν¬μ˜ ν…μ„œλ‘œ μž…λ ₯을 보낼 수 μžˆμ§€λ§Œ λ™μž‘ 과정에 λŒ€ν•œ 이해λ₯Ό 돕기 μœ„ν•΄ μž…λ ₯을 λͺ¨λΈλ‘œ 보내기 μ „ μˆ˜ν–‰ν•΄μ•Ό ν•  μž‘μ—…μ„ κ°„λ‹¨νžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

λͺ‡ 개의 μ‹œν€€μŠ€κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€.

```py
sequences = ["Hello!", "Cool.", "Nice!"]
```

ν† ν¬λ‚˜μ΄μ €λŠ” 이 μ‹œν€€μŠ€λ“€μ„ *μž…λ ₯ ID*라고 ν•˜λŠ” 단어 인덱슀둜 λ³€ν™˜ν•©λ‹ˆλ‹€. 각 μ‹œν€€μŠ€λŠ” 이제 숫자 λ¦¬μŠ€νŠΈμž…λ‹ˆλ‹€! κ²°κ³ΌλŠ” λ‹€μŒκ³Ό 같이 좜λ ₯λ©λ‹ˆλ‹€.

```py no-format
encoded_sequences = [
[101, 7592, 999, 102],
[101, 4658, 1012, 102],
[101, 3835, 999, 102],
]
```

이 κ²°κ³ΌλŠ” μΈμ½”λ”©λœ μ‹œν€€μŠ€λ“€λ‘œ, 리슀트 μ•ˆμ˜ 리슀트 ν˜•νƒœμž…λ‹ˆλ‹€. ν…μ„œλŠ” μ§μ‚¬κ°ν˜• ν˜•νƒœ(행렬을 μƒκ°ν•΄λ³΄μ„Έμš”)만 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μΈμ½”λ”©λœ μ‹œν€€μŠ€ "λ°°μ—΄"은 이미 μ§μ‚¬κ°ν˜• ν˜•νƒœμ΄κΈ° λ•Œλ¬Έμ— 이 배열을 ν…μ„œλ‘œ λ³€ν™˜ν•˜λŠ” 것은 μ‰½μŠ΅λ‹ˆλ‹€.

{#if fw === 'pt'}
```py
import torch

model_inputs = torch.tensor(encoded_sequences)
```
{:else}
```py
import tensorflow as tf

model_inputs = tf.constant(encoded_sequences)
```
{/if}

### ν…μ„œλ₯Ό λͺ¨λΈ μž…λ ₯으둜 μ‚¬μš©ν•˜κΈ°[[using-the-tensors-as-inputs-to-the-model]]

ν…μ„œλ₯Ό λͺ¨λΈκ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” 것은 맀우 κ°„λ‹¨ν•©λ‹ˆλ‹€ - μž…λ ₯κ³Ό ν•¨κ»˜ λͺ¨λΈμ„ ν˜ΈμΆœν•©λ‹ˆλ‹€.

```py
output = model(model_inputs)
```

λͺ¨λΈμ€ λ‹€μ–‘ν•œ 인자λ₯Ό μž…λ ₯λ°›μ§€λ§Œ μ—¬κΈ°μ„œλŠ” μž…λ ₯ ID만 ν•„μš”ν•©λ‹ˆλ‹€. λ‹€λ₯Έ μΈμžλ“€μ˜ μ—­ν• μ΄λ‚˜ λ‹€λ₯Έ μΈμžλ“€μ΄ ν•„μš”ν•œ μ‹œμ μ— λŒ€ν•œ μ„€λͺ…을 λ“£κΈ° 전에, Transformer λͺ¨λΈμ΄ 이해할 수 μžˆλŠ” μž…λ ₯을 μƒμ„±ν•˜λŠ” ν† ν¬λ‚˜μ΄μ €λ₯Ό μžμ„Ένžˆ μ‚΄νŽ΄λ΄μ•Ό ν•©λ‹ˆλ‹€.
Loading