[๐ค ๊ฐ์ข 2.2] Pipeline ๋ด๋ถ ์คํ ๊ณผ์
๋ณธ ํ๊ธ ๊ฐ์ข๋ ๊ธฐ๋ณธ์ ์ผ๋ก PyTorch๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
์ด์ ์์ ํ ์์ ๋ก ์์ํฉ๋๋ค. ์ฐ์ , 1์ฅ์์ ๋ค์ ์ฝ๋๋ฅผ ์คํํ์ ๋ ๋ด๋ถ์ ์ผ๋ก ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
classifier(
[
"I've been waiting for a HuggingFace course my whole life.",
"I hate this so much!",
]
)
1์ฅ์์ ๋ณด์๋ฏ์ด ์ด ํ์ดํ๋ผ์ธ์ ์ ์ฒ๋ฆฌ(preprocessing), ๋ชจ๋ธ๋ก ์ ๋ ฅ ์ ๋ฌ ๋ฐ ํ์ฒ๋ฆฌ(postprocessing)์ 3๋จ๊ณ๋ฅผ ํ๋ฒ์ ์คํํฉ๋๋ค.
์ด๋ค ๊ฐ๊ฐ์ ๋ํด ๋น ๋ฅด๊ฒ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Preprocessing with a tokenizer
๋ค๋ฅธ ์ ๊ฒฝ๋ง(neural networks)๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Transformer ๋ชจ๋ธ์ ์์ ํ ์คํธ๋ฅผ ์ง์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ํ์ดํ๋ผ์ธ์ ์ฒซ๋ฒ์งธ ๋จ๊ณ๋ ํ ์คํธ ์ ๋ ฅ์ ๋ชจ๋ธ์ด ์ดํดํ ์ ์๋ ์ซ์๋ก ๋ณํํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ํด, ๋ค์ ๊ธฐ๋ฅ๋ค์ ์ํํ๋ ํ ํฌ๋์ด์ (tokenizer)๋ฅผ ์ฌ์ฉํฉ๋๋ค:
-
์ ๋ ฅ์ ํ ํฐ(token) ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๋จ์ด(word), ํ์ ๋จ์ด(subword) ๋๋ ๊ธฐํธ(symbol)(์: ๊ตฌ๋์ )๋ก ๋ถํ
-
๊ฐ ํ ํฐ(token)์ ์ ์(integer)๋ก ๋งคํ(mapping)
-
๋ชจ๋ธ์ ์ ์ฉํ ์ ์๋ ๋ถ๊ฐ์ ์ธ ์ ๋ ฅ(additional inputs)์ ์ถ๊ฐ
์ด ๋ชจ๋ ์ ์ฒ๋ฆฌ(preprocessing)๋ ๋ชจ๋ธ์ด ์ฌ์ ํ์ต(pretraining)๋ ๋์ ์ ํํ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ํ๋์ด์ผ ํ๋ฏ๋ก ๋จผ์ Model Hub์์ ํด๋น ์ ๋ณด๋ฅผ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด AutoTokenizer
ํด๋์ค์ from_pretrained()
๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ชจ๋ธ์ ์ฒดํฌํฌ์ธํธ(checkpoint) ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ํ ํฌ๋์ด์ (tokenizer)์ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๊ฐ์ ธ์ ์บ์ํฉ๋๋ค. ๋ฐ๋ผ์, ์๋ ์ฝ๋๋ฅผ ์ฒ์ ์คํํ ๋๋ง ํด๋น ์ ๋ณด๊ฐ ๋ค์ด๋ก๋๋ฉ๋๋ค.
sentiment-analysis
ํ์ดํ๋ผ์ธ์ ๋ํดํธ ์ฒดํฌํฌ์ธํธ(default checkpoint)๋ distilbert-base-uncased-finetuned-sst-2-english
(์ด ๋ชจ๋ธ์ ๋ํ model card๋ ์ฌ๊ธฐ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค)์ด๋ฏ๋ก ๋ค์์ ์คํํฉ๋๋ค.
from transformers import AutoTokenizer
checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
์ผ๋จ ์์ ๊ฐ์ด ํ ํฌ๋์ด์ (tokenizer)๋ฅผ ์์ฑํ๋ฉด, ์๋์ ์ฝ๋์์ ๋ณด๋ ๊ฒ์ฒ๋ผ, ์ด ํ ํฌ๋์ด์ ์ ๋ฌธ์ฅ์ ์ ๋ ฅํ์ฌ ๋ชจ๋ธ์ ๋ฐ๋ก ์ ๋ฌํ ์ ์๋ ํ์ด์ฌ ๋์ ๋๋ฆฌ(dictionary) ์ ๋ณด๋ฅผ ๊ตฌํ ์ ์์ต๋๋ค! ์ดํ ํด์ผํ ์ผ์ input IDs ๋ฆฌ์คํธ๋ฅผ ํ ์(tensors)๋ก ๋ณํํ๋ ๊ฒ๋ฟ์ ๋๋ค.
์ฌ๋ฌ๋ถ๋ค์ PyTorch, TensorFlow ๋๋ Flax ๋ฑ, ์ด๋ค ์ค ์ด๋ค ML ํ๋ ์์ํฌ๊ฐ ๋ฐฑ์๋(backend)๋ก ์ฌ์ฉ๋๋์ง ๊ฑฑ์ ํ ํ์๊ฐ ์์ด ๐คTransformers๋ฅผ ๋ง์๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Transformer ๋ชจ๋ธ์ ํ ์(tensor) ์ ๋ ฅ๋ง ๋ฐ์ต๋๋ค. ๋ง์ผ ์ฌ๋ฌ๋ถ์ด ํ ์(tensor)์ ๋ํด ์ฒ์ ์ ํ๋ค๋ฉด, NumPy ๋ฐฐ์ด(array)์ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. NumPy ๋ฐฐ์ด์ ์ค์นผ๋ผ(0D), ๋ฒกํฐ(1D), ํ๋ ฌ(2D) ํน์ ๋ ๋ง์ ์ฐจ์์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฌ์ค์ ํ ์์ ๋๋ค. ๋ค๋ฅธ ๊ธฐ๊ณํ์ต ํ๋ ์์ํฌ์ ํ ์๋ ๋น์ทํ๊ฒ ๋์ํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก NumPy ๋ฐฐ์ด๋งํผ ๊ฐ๋จํ๊ฒ ์์ฑ(instantiate)ํ ์ ์์ต๋๋ค.
ํ ํฌ๋์ด์ ๊ฐ ๋ฐํํ๋ ํ
์์ ์ ํ(PyTorch, TensorFlow ๋๋ ์ผ๋ฐ NumPy)์ ์ง์ ํ๋ ค๋ฉด return_tensors
์ธ์(argument)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
raw_inputs = [
"I've been waiting for a HuggingFace course my whole life.",
"I hate this so much!",
]
inputs = tokenizer(raw_inputs, padding=True, truncation=True, return_tensors="pt")
print(inputs)
์์ง ํจ๋ฉ(padding
)๊ณผ truncation
์ ๋ํด ์ ๊ฒฝ์ฐ์ง ๋ง์ธ์. ๋์ค์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ์ตํด์ผ ํ ์ฃผ์ ์ฌํญ์ ๋จ์ผ ๋ฌธ์ฅ ๋๋ ๋ค์ค ๋ฌธ์ฅ ๋ฆฌ์คํธ๋ฅผ ํ ํฌ๋์ด์ ํจ์๋ก ์ ๋ฌํ ์ ์์ ๋ฟ๋ง ์๋๋ผ ์ถ๋ ฅ ํ
์ ์ ํ์ ์ง์ ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ํ
์ ์ ํ์ด ์ง์ ๋์ง ์์ผ๋ฉด ๊ฒฐ๊ณผ๋ก ์ด์ค ๋ฆฌ์คํธ(list of list)๊ฐ ํ์๋ฉ๋๋ค.
PyTorch ํ
์ ์ ํ์ ๊ฒฐ๊ณผ๋ ์์ ๊ฐ์ต๋๋ค. ์ ๊ฒฐ๊ณผ์์ ๋ณด๋ฏ์ด, ์ถ๋ ฅ์ ๋ ๊ฐ์ ํค(key) ์ฆ, input_ids
๋ฐ attention_mask
๋ฅผ ๊ฐ์ง๋ ํ์ด์ฌ ๋์
๋๋ฆฌ์
๋๋ค. input_ids
์๋ ๊ฐ ๋ฌธ์ฅ์ ์๋ ํ ํฐ์ ๊ณ ์ ์๋ณ์๋ก ๊ตฌ์ฑ๋ ๋ ํ์ ์ ์(๊ฐ ๋ฌธ์ฅ์ ํ๋์ฉ)๊ฐ ๊ฐ(value)์ผ๋ก ๋ค์ด๊ฐ ์์ต๋๋ค. ์ด ์ฅ์ ๋ท๋ถ๋ถ์์ attention_mask
๊ฐ ๋ฌด์์ธ์ง ์ค๋ช
ํฉ๋๋ค.
Going through the model
ํ ํฌ๋์ด์ ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฌ์ ํ์ต๋ ๋ชจ๋ธ(pretrained model)์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค. ๐คTransformers๋ ์์ AutoTokenizer
ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก, from_pretrained()
๋ฉ์๋๊ฐ ํฌํจ๋ AutoModel
ํด๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
from transformers import AutoModel
checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModel.from_pretrained(checkpoint)
์ ์ฝ๋ ์ค๋ํซ(code snippet)์์๋ ์ด์ ์ ํ์ดํ๋ผ์ธ์์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ค์ด๋ก๋ํ๊ณ (์ค์ ๋ก ์ด๋ฏธ ์บ์๋์ด ์์ด์ผ ํจ) ๋ชจ๋ธ์ ์ธ์คํด์คํ(instantiate)ํ์ต๋๋ค.
ํด๋น ์ํคํ ์ฒ์๋ ๊ธฐ๋ณธ Transformer ๋ชจ๋๋ง ํฌํจ๋์ด ์์ต๋๋ค. ๋ฐ๋ผ์, ์ ๋ ฅ์ด ์ฃผ์ด์ง๋ฉด ์์ง(feature) ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ hidden states ๋ฅผ ์ถ๋ ฅํฉ๋๋ค. ๊ฐ ๋ชจ๋ธ ์ ๋ ฅ์ ๋ํด Transformer ๋ชจ๋ธ์ ์ํด์ ์ํ๋ ํด๋น ์ ๋ ฅ์ ๋ฌธ๋งฅ์ ์ดํด(contextual understanding) ๊ฒฐ๊ณผ ๋ฅผ ๋ํ๋ด๋ ๊ณ ์ฐจ์ ๋ฒกํฐ(high-dimensional vector)๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
์ด ๋ถ๋ถ์ด ์ดํด๊ฐ ๊ฐ์ง ์๋๋ผ๋ ๊ฑฑ์ ํ์ง ๋ง์ธ์. ๋์ค์ ๋ชจ๋ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
์ด๋ฌํ hidden states๋ ๊ทธ ์์ฒด๋ก๋ ์ ์ฉํ ์ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก head ๋ผ๊ณ ์๋ ค์ง ๋ชจ๋ธ์ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ํ ์ ๋ ฅ์ผ๋ก ๋ค์ด๊ฐ๋๋ค. 1์ฅ์์, ๋์ผํ ์ํคํ ์ฒ๋ก ์๋ก ๋ค๋ฅธ ํ์คํฌ(task)๋ฅผ ์ํํ ์ ์์์ง๋ง ์ด๋ฌํ ๊ฐ ํ์คํฌ(task)์๋ ์๋ก ๋ค๋ฅธ ํค๋(head)๊ฐ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
A high-dimensional vector?
Transformer ๋ชจ๋์ ๋ฒกํฐ ์ถ๋ ฅ์ ์ผ๋ฐ์ ์ผ๋ก ๊ท๋ชจ๊ฐ ํฝ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธ ๊ฐ์ง ์ฐจ์์ด ์์ต๋๋ค:
-
๋ฐฐ์น ํฌ๊ธฐ(Batch size): ํ ๋ฒ์ ์ฒ๋ฆฌ๋๋ ์ํ์ค(sequence)์ ๊ฐ์(์์ ์์ ์์๋ 2๊ฐ).
-
์ํ์ค ๊ธธ์ด(Sequence length): ์ํ์ค ์ซ์ ํํ์ ๊ธธ์ด(์ด ์์์๋ 16).
-
์๋ ํฌ๊ธฐ(Hidden size): ๊ฐ ๋ชจ๋ธ ์ ๋ ฅ์ ๋ฒกํฐ ์ฐจ์.
์์์ ๋ง์ง๋ง ๊ฐ ๋๋ฌธ์ "๊ณ ์ฐจ์(high-dimensional)" ๋ฒกํฐ๋ผ๊ณ ๋ํ๋ ๋๋ค. Hidden size๋ ๋งค์ฐ ํด ์ ์์ต๋๋ค(768์ ์์ ๋ชจ๋ธ์ ์ผ๋ฐ์ ์ด๊ณ ํฐ ๋ชจ๋ธ์์๋ 3072 ์ด์์ผ ์๋ ์์).
์ฌ์ ์ฒ๋ฆฌํ ์ ๋ ฅ์ ๋ชจ๋ธ์ ๋๊ธฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค.
outputs = model(**inputs)
print(outputs.last_hidden_state.shape)
๐คTransformers ๋ชจ๋ธ์ ์ถ๋ ฅ์ namedtuple
๋๋ ๋์
๋๋ฆฌ(dictionary)์ฒ๋ผ ๋์ํฉ๋๋ค. ์์์ ์ ๊ทผํ๊ธฐ ์ํด์ ์์ฑ ๋๋ ํค(outputs["last_hidden_state"]
)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ, ์ฐพ๊ณ ์๋ ํญ๋ชฉ์ด ์ด๋์ ์๋์ง ์ ํํ ์๊ณ ์๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค(outputs[0]
)๋ก๋ ์ก์ธ์คํ ์ ์์ต๋๋ค.
Model heads: Making sense out of numbers
๋ชจ๋ธ ํค๋(model head)๋ hidden states์ ๊ณ ์ฐจ์ ๋ฒกํฐ(high-dimensional vector)๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ๋ค๋ฅธ ์ฐจ์์ ํฌ์(project)ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํค๋(head)๋ ํ๋ ๋๋ ๋ช ๊ฐ์ ์ ํ ๋ ์ด์ด(linear layers)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Transformer ๋ชจ๋ธ์ ์ถ๋ ฅ์ ์ฒ๋ฆฌํ ๋ชจ๋ธ ํค๋(model head)๋ก ์ง์ ์ ๋ฌ๋ฉ๋๋ค.
์ ๊ทธ๋ฆผ์์ ๋ชจ๋ธ์ ์๋ฒ ๋ฉ ๋ ์ด์ด(embeddings layer)์ ํ์ ๋ ์ด์ด(subsequent layers)๋ก ํํ๋ฉ๋๋ค. ์๋ฒ ๋ฉ ๋ ์ด์ด(embeddings layer)๋ ํ ํฐํ๋ ์ ๋ ฅ(tokenized input)์ ๊ฐ ์ ๋ ฅ ID๋ฅผ ํด๋น ํ ํฐ์ ๋ํ๋ด๋ ๋ฒกํฐ(embeddings vector)๋ก ๋ณํํฉ๋๋ค. ๊ทธ ์ดํ์ ํ์ ๋ ์ด์ด๋ ์ฃผ์ ๋ฉ์ปค๋์ฆ(attention mechanism)์ ์ฌ์ฉํ์ฌ ์ด๋ค ์๋ฒ ๋ฉ ๋ฒกํฐ(embeddings vector)๋ฅผ ์กฐ์ํ์ฌ ๋ฌธ์ฅ์ ์ต์ข ํํ(final representation)์ ์์ฑํฉ๋๋ค.
๐คTransformers์๋ ๋ค์ํ ์ํคํ ์ฒ๊ฐ ์์ผ๋ฉฐ ๊ฐ ์ํคํ ์ฒ๋ ํนํ๋ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ๋ค์์ ์ผ๋ถ ์ํคํ ์ฒ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค:
-
*Model (hidden states๋ฅผ ๋ฆฌํด)
-
*ForCausalLM
-
*ForMaskedLM
-
*ForMultipleChoice
-
*ForQuestionAnswering
-
*ForSequenceClassification
-
*ForTokenClassification
-
and others๐ค
์ด ์น์
์์์ ์์์์๋ ์ํ์ค ๋ถ๋ฅ ํค๋(sequence classification head)๊ฐ ํฌํจ๋์ด ์๋ ๋ชจ๋ธ์ด ํ์ํฉ๋๋ค(๋ฌธ์ฅ์ ๊ธ์ ๋๋ ๋ถ์ ์ผ๋ก ๋ถ๋ฅํ๊ธฐ ์ํด์). ๋ฐ๋ผ์ ์ค์ ๋ก AutoModel
ํด๋์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋์ AutoModelForSequenceClassification
๋ฅผ ์ฌ์ฉํฉ๋๋ค:
from transformers import AutoModelForSequenceClassification
checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
outputs = model(**inputs)
์ด์ ์ถ๋ ฅ์ ๋ชจ์(shape)์ ๋ณด๋ฉด ์ฐจ์์ด ํจ์ฌ ๋ฎ์์ง๋๋ค. ๋ชจ๋ธ ํค๋(model head)๋ ๊ณ ์ฐจ์ ๋ฒกํฐ๋ฅผ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ณ ๋ ๊ฐ์ ๊ฐ(๋ ์ด๋ธ๋น ํ๋์ฉ)์ ํฌํจํ๋ ๋ฒกํฐ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print(outputs.logits.shape)
๋ ๊ฐ์ ๋ฌธ์ฅ๊ณผ ๋ ๊ฐ์ ๋ ์ด๋ธ๋ง ์๊ธฐ ๋๋ฌธ์, ๋ชจ๋ธ์์ ์ป์ ๊ฒฐ๊ณผ์ ๋ชจ์(shape)์ 2 x 2์ ๋๋ค.
Postprocessing the output
๋ชจ๋ธ์์ ์ถ๋ ฅ์ผ๋ก ์ป์ ๊ฐ์ ๋ฐ๋์ ๊ทธ ์์ฒด๋ก ์๋ฏธ๊ฐ ์๋ ๊ฒ์ ์๋๋๋ค. ๋ค์์ ํ๋ฒ ๋ณด์์ง์.
print(outputs.logits)
์ฐ๋ฆฌ ๋ชจ๋ธ์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ฅ์ ๋ํด [-1.5607, 1.6123]
, ๋ ๋ฒ์งธ ๋ฌธ์ฅ์ ๋ํด [4.1692, -3.3464]
๋ฅผ ์์ธกํ์ต๋๋ค. ์ด๋ ํ๋ฅ ์ด ์๋๋ผ ๋ชจ๋ธ์ ๋ง์ง๋ง ๊ณ์ธต์์ ์ถ๋ ฅ๋ ์ ๊ทํ๋์ง ์์ ์์ ์ ์์ธ logits ์
๋๋ค. ์ด๋ค ๊ฐ์ ํ๋ฅ ๋ก ๋ณํํ๋ ค๋ฉด SoftMax ๊ณ์ธต์ ํต๊ณผํด์ผ ํฉ๋๋ค. ๋ชจ๋ ๐คTransformers ๋ชจ๋ธ์ ์ด logits ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค. ๊ทธ ์ด์ ๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ต์ ์ํ ์์ค ํจ์(loss function)๋ ์ต์ข
ํ์ฑํ ํจ์(activation function, e.g., SoftMax)์ ์ค์ ์์ค ํจ์(actual loss function, e.g., cross entropy)๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๊ธฐ ๋๋ฌธ์
๋๋ค.
import torch
predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
print(predictions)
์ด์ ๋ชจ๋ธ์ด ์ฒซ ๋ฒ์งธ ๋ฌธ์ฅ์ ๋ํด [0.0402, 0.9598]
, ๋ ๋ฒ์งธ ๋ฌธ์ฅ์ ๋ํด [0.9995, 0.0005]
๋ฅผ ์์ธกํ์์ ์ ์ ์์ต๋๋ค. ์ด๋ค์ ์ฐ๋ฆฌ๊ฐ ์ดํดํ ์ ์๋ ํ๋ฅ ์ ์์
๋๋ค.
๊ฐ ์์น์ ํด๋นํ๋ ๋ ์ด๋ธ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด, model.config์ id2label
์์ฑ๊ฐ์ ํ์ธํฉ๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ ๋ค์ ์น์
์์ ๋ค๋ฃน๋๋ค.
model.config.id2label
์ด์ ๋ชจ๋ธ์ด ์๋ ๋ด์ฉ์ ์์ธกํ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์์ต๋๋ค:
-
์ฒซ๋ฒ์งธ ๋ฌธ์ฅ : NEGATIVE: 0.0402, POSITIVE: 0.9598
-
๋๋ฒ์งธ ๋ฌธ์ฅ : NEGATIVE: 0.9995, POSITIVE: 0.0005
์ง๊ธ๊น์ง ํ์ดํ๋ผ์ธ(pipeline)์ ๋ด๋ถ์์ ์คํ๋๋ 3๋จ๊ณ์ธ ํ ํฌ๋์ด์ ๋ฅผ ์ฌ์ฉํ ์ ์ฒ๋ฆฌ(preprocessing), ๋ชจ๋ธ์ ํตํ ์ ๋ ฅ ์ ๋ฌ(passing the inputs through the model) ๋ฐ ํ์ฒ๋ฆฌ(postprocessing)๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์คํํด๋ดค์ต๋๋ค.
โ๏ธ Try it out! ๋ณธ์ธ์ด ๊ฐ์ง๊ณ ์๋ ํ ์คํธ๋ฅผ ๋ ๊ฐ(๋๋ ๊ทธ ์ด์) ์ ํํ๊ณ
sentiment analysis
ํ์ดํ๋ผ์ธ์ ํตํด ์คํํด ๋ด ์๋ค. ๊ทธ๋ฐ ๋ค์ ์ฌ๊ธฐ์์ ์ค๋ช ํ ๋๋ก ์ง์ ์คํํด๋ณด๊ณ , ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป๋์ง ํ์ธํด๋ณด์ธ์!
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ([๐ค ๊ฐ์ข 2.2] Pipeline ๋ด๋ถ ์คํ ๊ณผ์ ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@spasis/๊ฐ์ข-2.2-Pipeline-๋ด๋ถ-์คํ-๊ณผ์ ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค