| <!--Copyright 2022 The HuggingFace Team. All rights reserved. | |
| Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on | |
| an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations under the License. | |
| โ ๏ธ Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be | |
| rendered properly in your Markdown viewer. | |
| --> | |
| # ๋ง์ถคํ ์ํคํ ์ฒ ๋ง๋ค๊ธฐ[[create-a-custom-architecture]] | |
| [`AutoClass`](model_doc/auto)๋ ๋ชจ๋ธ ์ํคํ ์ฒ๋ฅผ ์๋์ผ๋ก ์ถ๋ก ํ๊ณ ๋ฏธ๋ฆฌ ํ์ต๋ configuration๊ณผ ๊ฐ์ค์น๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฒดํฌํฌ์ธํธ์ ๊ตฌ์ ๋ฐ์ง ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ฉด `AutoClass`๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ์ง๋ง ํน์ ๋ชจ๋ธ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ณด๋ค ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ณ ์ ํ๋ ์ฌ์ฉ์๋ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ํด๋์ค๋ง์ผ๋ก ์ปค์คํ ๐ค Transformers ๋ชจ๋ธ์ ์์ฑํ ์ ์์ต๋๋ค. ์ด๋ ๐ค Transformers ๋ชจ๋ธ์ ์ฐ๊ตฌ, ๊ต์ก ๋๋ ์คํํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ํนํ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋์์๋ 'AutoClass'๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ปค์คํ ๋ชจ๋ธ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค: | |
| - ๋ชจ๋ธ configuration์ ๊ฐ์ ธ์ค๊ณ ์ฌ์ฉ์ ์ง์ ํฉ๋๋ค. | |
| - ๋ชจ๋ธ ์ํคํ ์ฒ๋ฅผ ์์ฑํฉ๋๋ค. | |
| - ํ ์คํธ์ ์ฌ์ฉํ ๋๋ฆฌ๊ฑฐ๋ ๋น ๋ฅธ ํ ํฐํ๊ธฐ๋ฅผ ๋ง๋ญ๋๋ค. | |
| - ๋น์ ์์ ์ ์ํ ์ด๋ฏธ์ง ํ๋ก์ธ์๋ฅผ ์์ฑํฉ๋๋ค. | |
| - ์ค๋์ค ์์ ์ ์ํ ํน์ฑ ์ถ์ถ๊ธฐ๋ฅผ ์์ฑํฉ๋๋ค. | |
| - ๋ฉํฐ๋ชจ๋ฌ ์์ ์ฉ ํ๋ก์ธ์๋ฅผ ์์ฑํฉ๋๋ค. | |
| ## Configuration[[configuration]] | |
| [configuration](main_classes/configuration)์ ๋ชจ๋ธ์ ํน์ ์์ฑ์ ๋ํ๋ ๋๋ค. ๊ฐ ๋ชจ๋ธ ๊ตฌ์ฑ์๋ ์๋ก ๋ค๋ฅธ ์์ฑ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ชจ๋ NLP ๋ชจ๋ธ์๋ `hidden_size`, `num_attention_heads`, `num_hidden_layers` ๋ฐ `vocab_size` ์์ฑ์ด ๊ณตํต์ผ๋ก ์์ต๋๋ค. ์ด๋ฌํ ์์ฑ์ ๋ชจ๋ธ์ ๊ตฌ์ฑํ attention heads ๋๋ hidden layers์ ์๋ฅผ ์ง์ ํฉ๋๋ค. | |
| [DistilBERT](model_doc/distilbert) ์์ฑ์ ๊ฒ์ฌํ๊ธฐ ์ํด [`DistilBertConfig`]์ ์ ๊ทผํ์ฌ ์์ธํ ์ดํด๋ด ๋๋ค: | |
| ```py | |
| >>> from transformers import DistilBertConfig | |
| >>> config = DistilBertConfig() | |
| >>> print(config) | |
| DistilBertConfig { | |
| "activation": "gelu", | |
| "attention_dropout": 0.1, | |
| "dim": 768, | |
| "dropout": 0.1, | |
| "hidden_dim": 3072, | |
| "initializer_range": 0.02, | |
| "max_position_embeddings": 512, | |
| "model_type": "distilbert", | |
| "n_heads": 12, | |
| "n_layers": 6, | |
| "pad_token_id": 0, | |
| "qa_dropout": 0.1, | |
| "seq_classif_dropout": 0.2, | |
| "sinusoidal_pos_embds": false, | |
| "transformers_version": "4.16.2", | |
| "vocab_size": 30522 | |
| } | |
| ``` | |
| [`DistilBertConfig`]๋ ๊ธฐ๋ณธ [`DistilBertModel`]์ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ชจ๋ ๊ธฐ๋ณธ ์์ฑ์ ํ์ํฉ๋๋ค. ๋ชจ๋ ์์ฑ์ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ๋ฏ๋ก ์คํ์ ์ํ ๊ณต๊ฐ์ ๋ง๋ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ๋ณธ ๋ชจ๋ธ์ ๋ค์๊ณผ ๊ฐ์ด ์ปค์คํฐ๋ง์ด์ฆํ ์ ์์ต๋๋ค: | |
| - `activation` ํ๋ผ๋ฏธํฐ๋ก ๋ค๋ฅธ ํ์ฑํ ํจ์๋ฅผ ์ฌ์ฉํด ๋ณด์ธ์. | |
| - `attention_dropout` ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ดํ ์ ํ๋ฅ ์ ๋ ๋์ ๋๋กญ์์ ๋น์จ์ ์ฌ์ฉํ์ธ์. | |
| ```py | |
| >>> my_config = DistilBertConfig(activation="relu", attention_dropout=0.4) | |
| >>> print(my_config) | |
| DistilBertConfig { | |
| "activation": "relu", | |
| "attention_dropout": 0.4, | |
| "dim": 768, | |
| "dropout": 0.1, | |
| "hidden_dim": 3072, | |
| "initializer_range": 0.02, | |
| "max_position_embeddings": 512, | |
| "model_type": "distilbert", | |
| "n_heads": 12, | |
| "n_layers": 6, | |
| "pad_token_id": 0, | |
| "qa_dropout": 0.1, | |
| "seq_classif_dropout": 0.2, | |
| "sinusoidal_pos_embds": false, | |
| "transformers_version": "4.16.2", | |
| "vocab_size": 30522 | |
| } | |
| ``` | |
| ์ฌ์ ํ์ต๋ ๋ชจ๋ธ ์์ฑ์ [`~PretrainedConfig.from_pretrained`] ํจ์์์ ์์ ํ ์ ์์ต๋๋ค: | |
| ```py | |
| >>> my_config = DistilBertConfig.from_pretrained("distilbert-base-uncased", activation="relu", attention_dropout=0.4) | |
| ``` | |
| ๋ชจ๋ธ ๊ตฌ์ฑ์ด ๋ง์กฑ์ค๋ฌ์ฐ๋ฉด [`~PretrainedConfig.save_pretrained`]๋ก ์ ์ฅํ ์ ์์ต๋๋ค. ์ค์ ํ์ผ์ ์ง์ ๋ ์์ ๊ฒฝ๋ก์ JSON ํ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค: | |
| ```py | |
| >>> my_config.save_pretrained(save_directory="./your_model_save_path") | |
| ``` | |
| configuration ํ์ผ์ ์ฌ์ฌ์ฉํ๋ ค๋ฉด [`~PretrainedConfig.from_pretrained`]๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ธ์ค์ธ์: | |
| ```py | |
| >>> my_config = DistilBertConfig.from_pretrained("./your_model_save_path/config.json") | |
| ``` | |
| <Tip> | |
| configuration ํ์ผ์ ๋์ ๋๋ฆฌ๋ก ์ ์ฅํ๊ฑฐ๋ ์ฌ์ฉ์ ์ ์ configuration ์์ฑ๊ณผ ๊ธฐ๋ณธ configuration ์์ฑ์ ์ฐจ์ด์ ๋ง ์ ์ฅํ ์๋ ์์ต๋๋ค! ์์ธํ ๋ด์ฉ์ [configuration](main_classes/configuration) ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์. | |
| </Tip> | |
| ## ๋ชจ๋ธ[[model]] | |
| ๋ค์ ๋จ๊ณ๋ [๋ชจ๋ธ(model)](main_classes/models)์ ๋ง๋๋ ๊ฒ์ ๋๋ค. ๋์จํ๊ฒ ์ํคํ ์ฒ๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ๋ชจ๋ธ์ ๊ฐ ๊ณ์ธต์ด ์ํํ๋ ๋์๊ณผ ๋ฐ์ํ๋ ์์ ์ ์ ์ํฉ๋๋ค. configuration์ `num_hidden_layers`์ ๊ฐ์ ์์ฑ์ ์ํคํ ์ฒ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ชจ๋ ๋ชจ๋ธ์ ๊ธฐ๋ณธ ํด๋์ค [`PreTrainedModel`]๊ณผ ์ ๋ ฅ ์๋ฒ ๋ฉ ํฌ๊ธฐ ์กฐ์ ๋ฐ ์ ํ ์ดํ ์ ํค๋ ๊ฐ์ง ์น๊ธฐ์ ๊ฐ์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฉ์๋๋ฅผ ๊ณต์ ํฉ๋๋ค. ๋ํ ๋ชจ๋ ๋ชจ๋ธ์ [`torch.nn.Module`](https://pytorch.org/docs/stable/generated/torch.nn.Module.html), [`tf.keras.Model`](https://www.tensorflow.org/api_docs/python/tf/keras/Model) ๋๋ [`flax.linen.Module`](https://flax.readthedocs.io/en/latest/flax.linen.html#module)์ ์๋ธํด๋์ค์ด๊ธฐ๋ ํฉ๋๋ค. ์ฆ, ๋ชจ๋ธ์ ๊ฐ ํ๋ ์์ํฌ์ ์ฌ์ฉ๋ฒ๊ณผ ํธํ๋ฉ๋๋ค. | |
| <frameworkcontent> | |
| <pt> | |
| ์ฌ์ฉ์ ์ง์ configuration ์์ฑ์ ๋ชจ๋ธ์ ๊ฐ์ ธ์ต๋๋ค: | |
| ```py | |
| >>> from transformers import DistilBertModel | |
| >>> my_config = DistilBertConfig.from_pretrained("./your_model_save_path/config.json") | |
| >>> model = DistilBertModel(my_config) | |
| ``` | |
| ์ด์ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น ๋์ ์์์ ๊ฐ์ ๊ฐ์ง ๋ชจ๋ธ์ด ์์ฑ๋ฉ๋๋ค. ์ด ๋ชจ๋ธ์ ํ๋ จํ๊ธฐ ์ ๊น์ง๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๋ จ์ ๋น์ฉ๊ณผ ์๊ฐ์ด ๋ง์ด ์์๋๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋ จ์ ํ์ํ ๋ฆฌ์์ค์ ์ผ๋ถ๋ง ์ฌ์ฉํ๋ฉด์ ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋นจ๋ฆฌ ์ป์ผ๋ ค๋ฉด ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. | |
| ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ [`~PreTrainedModel.from_pretrained`]๋ก ์์ฑํฉ๋๋ค: | |
| ```py | |
| >>> model = DistilBertModel.from_pretrained("distilbert-base-uncased") | |
| ``` | |
| ๐ค Transformers์์ ์ ๊ณตํ ๋ชจ๋ธ์ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ configuration์ ์๋์ผ๋ก ๋ถ๋ฌ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ configuration ์์ฑ์ ์ผ๋ถ ๋๋ ์ ๋ถ๋ฅผ ์ฌ์ฉ์ ์ง์ ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค: | |
| ```py | |
| >>> model = DistilBertModel.from_pretrained("distilbert-base-uncased", config=my_config) | |
| ``` | |
| </pt> | |
| <tf> | |
| ์ฌ์ฉ์ ์ง์ configuration ์์ฑ์ ๋ชจ๋ธ์ ๋ถ๋ฌ์ต๋๋ค: | |
| ```py | |
| >>> from transformers import TFDistilBertModel | |
| >>> my_config = DistilBertConfig.from_pretrained("./your_model_save_path/my_config.json") | |
| >>> tf_model = TFDistilBertModel(my_config) | |
| ``` | |
| ์ด์ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น ๋์ ์์์ ๊ฐ์ ๊ฐ์ง ๋ชจ๋ธ์ด ์์ฑ๋ฉ๋๋ค. ์ด ๋ชจ๋ธ์ ํ๋ จํ๊ธฐ ์ ๊น์ง๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ๋ จ์ ๋น์ฉ๊ณผ ์๊ฐ์ด ๋ง์ด ์์๋๋ ํ๋ก์ธ์ค์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋ จ์ ํ์ํ ๋ฆฌ์์ค์ ์ผ๋ถ๋ง ์ฌ์ฉํ๋ฉด์ ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ ๋นจ๋ฆฌ ์ป์ผ๋ ค๋ฉด ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. | |
| ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ [`~TFPreTrainedModel.from_pretrained`]๋ก ์์ฑํฉ๋๋ค: | |
| ```py | |
| >>> tf_model = TFDistilBertModel.from_pretrained("distilbert-base-uncased") | |
| ``` | |
| ๐ค Transformers์์ ์ ๊ณตํ ๋ชจ๋ธ์ ์ฌ์ ํ์ต๋ ๊ฐ์ค์น๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ configuration์ ์๋์ผ๋ก ๋ถ๋ฌ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ ๋ชจ๋ธ configuration ์์ฑ์ ์ผ๋ถ ๋๋ ์ ๋ถ๋ฅผ ์ฌ์ฉ์ ์ง์ ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค: | |
| ```py | |
| >>> tf_model = TFDistilBertModel.from_pretrained("distilbert-base-uncased", config=my_config) | |
| ``` | |
| </tf> | |
| </frameworkcontent> | |
| ### ๋ชจ๋ธ ํค๋[[model-heads]] | |
| ์ด ์์ ์์ *์๋ ์ํ(hidden state)*๋ฅผ ์ถ๋ ฅํ๋ ๊ธฐ๋ณธ DistilBERT ๋ชจ๋ธ์ ๊ฐ๊ฒ ๋ฉ๋๋ค. ์๋ ์ํ๋ ์ต์ข ์ถ๋ ฅ์ ์์ฑํ๊ธฐ ์ํด ๋ชจ๋ธ ํค๋์ ์ ๋ ฅ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. ๐ค Transformers๋ ๋ชจ๋ธ์ด ํด๋น ์์ ์ ์ง์ํ๋ ํ ๊ฐ ์์ ๋ง๋ค ๋ค๋ฅธ ๋ชจ๋ธ ํค๋๋ฅผ ์ ๊ณตํฉ๋๋ค(์ฆ, ๋ฒ์ญ๊ณผ ๊ฐ์ ์ํ์ค ๊ฐ ์์ ์๋ DistilBERT๋ฅผ ์ฌ์ฉํ ์ ์์). | |
| <frameworkcontent> | |
| <pt> | |
| ์๋ฅผ ๋ค์ด, [`DistilBertForSequenceClassification`]์ ์ํ์ค ๋ถ๋ฅ ํค๋๊ฐ ์๋ ๊ธฐ๋ณธ DistilBERT ๋ชจ๋ธ์ ๋๋ค. ์ํ์ค ๋ถ๋ฅ ํค๋๋ ํ๋ง๋ ์ถ๋ ฅ ์์ ์๋ ์ ํ ๋ ์ด์ด์ ๋๋ค. | |
| ```py | |
| >>> from transformers import DistilBertForSequenceClassification | |
| >>> model = DistilBertForSequenceClassification.from_pretrained("distilbert-base-uncased") | |
| ``` | |
| ๋ค๋ฅธ ๋ชจ๋ธ ํค๋๋ก ์ ํํ์ฌ ์ด ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ค๋ฅธ ์์ ์ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ง์์๋ต ์์ ์ ๊ฒฝ์ฐ, [`DistilBertForQuestionAnswering`] ๋ชจ๋ธ ํค๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ง์์๋ต ํค๋๋ ์จ๊ฒจ์ง ์ํ ์ถ๋ ฅ ์์ ์ ํ ๋ ์ด์ด๊ฐ ์๋ค๋ ์ ์ ์ ์ธํ๋ฉด ์ํ์ค ๋ถ๋ฅ ํค๋์ ์ ์ฌํฉ๋๋ค. | |
| ```py | |
| >>> from transformers import DistilBertForQuestionAnswering | |
| >>> model = DistilBertForQuestionAnswering.from_pretrained("distilbert-base-uncased") | |
| ``` | |
| </pt> | |
| <tf> | |
| ์๋ฅผ ๋ค์ด, [`TFDistilBertForSequenceClassification`]์ ์ํ์ค ๋ถ๋ฅ ํค๋๊ฐ ์๋ ๊ธฐ๋ณธ DistilBERT ๋ชจ๋ธ์ ๋๋ค. ์ํ์ค ๋ถ๋ฅ ํค๋๋ ํ๋ง๋ ์ถ๋ ฅ ์์ ์๋ ์ ํ ๋ ์ด์ด์ ๋๋ค. | |
| ```py | |
| >>> from transformers import TFDistilBertForSequenceClassification | |
| >>> tf_model = TFDistilBertForSequenceClassification.from_pretrained("distilbert-base-uncased") | |
| ``` | |
| ๋ค๋ฅธ ๋ชจ๋ธ ํค๋๋ก ์ ํํ์ฌ ์ด ์ฒดํฌํฌ์ธํธ๋ฅผ ๋ค๋ฅธ ์์ ์ ์ฝ๊ฒ ์ฌ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ง์์๋ต ์์ ์ ๊ฒฝ์ฐ, [`TFDistilBertForQuestionAnswering`] ๋ชจ๋ธ ํค๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ง์์๋ต ํค๋๋ ์จ๊ฒจ์ง ์ํ ์ถ๋ ฅ ์์ ์ ํ ๋ ์ด์ด๊ฐ ์๋ค๋ ์ ์ ์ ์ธํ๋ฉด ์ํ์ค ๋ถ๋ฅ ํค๋์ ์ ์ฌํฉ๋๋ค. | |
| ```py | |
| >>> from transformers import TFDistilBertForQuestionAnswering | |
| >>> tf_model = TFDistilBertForQuestionAnswering.from_pretrained("distilbert-base-uncased") | |
| ``` | |
| </tf> | |
| </frameworkcontent> | |
| ## ํ ํฌ๋์ด์ [[tokenizer]] | |
| ํ ์คํธ ๋ฐ์ดํฐ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ง์ง๋ง์ผ๋ก ํ์ํ ๊ธฐ๋ณธ ํด๋์ค๋ ์์ ํ ์คํธ๋ฅผ ํ ์๋ก ๋ณํํ๋ [ํ ํฌ๋์ด์ ](main_classes/tokenizer)์ ๋๋ค. ๐ค Transformers์ ์ฌ์ฉํ ์ ์๋ ํ ํฌ๋์ด์ ๋ ๋ ๊ฐ์ง ์ ํ์ด ์์ต๋๋ค: | |
| - [`PreTrainedTokenizer`]: ํ์ด์ฌ์ผ๋ก ๊ตฌํ๋ ํ ํฌ๋์ด์ ์ ๋๋ค. | |
| - [`PreTrainedTokenizerFast`]: Rust ๊ธฐ๋ฐ [๐ค Tokenizer](https://huggingface.co/docs/tokenizers/python/latest/) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์ด์ง ํ ํฌ๋์ด์ ์ ๋๋ค. ์ด ํ ํฌ๋์ด์ ๋ Rust๋ก ๊ตฌํ๋์ด ๋ฐฐ์น ํ ํฐํ์์ ํนํ ๋น ๋ฆ ๋๋ค. ๋น ๋ฅธ ํ ํฌ๋์ด์ ๋ ํ ํฐ์ ์๋ ๋จ์ด๋ ๋ฌธ์์ ๋งคํํ๋ *์คํ์ ๋งคํ*๊ณผ ๊ฐ์ ์ถ๊ฐ ๋ฉ์๋๋ ์ ๊ณตํฉ๋๋ค. | |
| ๋ ํ ํฌ๋์ด์ ๋ชจ๋ ์ธ์ฝ๋ฉ ๋ฐ ๋์ฝ๋ฉ, ์ ํ ํฐ ์ถ๊ฐ, ํน์ ํ ํฐ ๊ด๋ฆฌ์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ง์ํฉ๋๋ค. | |
| <Tip warning={true}> | |
| ๋ชจ๋ ๋ชจ๋ธ์ด ๋น ๋ฅธ ํ ํฌ๋์ด์ ๋ฅผ ์ง์ํ๋ ๊ฒ์ ์๋๋๋ค. ์ด [ํ](index#supported-frameworks)์์ ๋ชจ๋ธ์ ๋น ๋ฅธ ํ ํฌ๋์ด์ ์ง์ ์ฌ๋ถ๋ฅผ ํ์ธํ์ธ์. | |
| </Tip> | |
| ํ ํฌ๋์ด์ ๋ฅผ ์ง์ ํ์ตํ ๊ฒฝ์ฐ, *์ดํ(vocabulary)* ํ์ผ์์ ํ ํฌ๋์ด์ ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค: | |
| ```py | |
| >>> from transformers import DistilBertTokenizer | |
| >>> my_tokenizer = DistilBertTokenizer(vocab_file="my_vocab_file.txt", do_lower_case=False, padding_side="left") | |
| ``` | |
| ์ฌ์ฉ์ ์ง์ ํ ํฌ๋์ด์ ์ ์ดํ๋ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ํ ํฌ๋์ด์ ์์ ์์ฑ๋ ์ดํ์ ๋ค๋ฅผ ์ ์๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ์ดํ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ๋ ฅ์ด ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ชปํฉ๋๋ค. [`DistilBertTokenizer`] ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ์ดํ๋ก ํ ํฌ๋์ด์ ๋ฅผ ์์ฑํฉ๋๋ค: | |
| ```py | |
| >>> from transformers import DistilBertTokenizer | |
| >>> slow_tokenizer = DistilBertTokenizer.from_pretrained("distilbert-base-uncased") | |
| ``` | |
| [`DistilBertTokenizerFast`] ํด๋์ค๋ก ๋น ๋ฅธ ํ ํฌ๋์ด์ ๋ฅผ ์์ฑํฉ๋๋ค: | |
| ```py | |
| >>> from transformers import DistilBertTokenizerFast | |
| >>> fast_tokenizer = DistilBertTokenizerFast.from_pretrained("distilbert-base-uncased") | |
| ``` | |
| <Tip> | |
| [`AutoTokenizer`]๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น ๋ฅธ ํ ํฌ๋์ด์ ๋ฅผ ๊ฐ์ ธ์ค๋ ค๊ณ ํฉ๋๋ค. ์ด ๋์์ ๋นํ์ฑํํ๋ ค๋ฉด `from_pretrained`์์ `use_fast=False`๋ฅผ ์ค์ ํ๋ฉด ๋ฉ๋๋ค. | |
| </Tip> | |
| ## ์ด๋ฏธ์ง ํ๋ก์ธ์[[image-processor]] | |
| ์ด๋ฏธ์ง ํ๋ก์ธ์(image processor)๋ ๋น์ ์ ๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค. ๊ธฐ๋ณธ [`~image_processing_utils.ImageProcessingMixin`] ํด๋์ค์์ ์์ํฉ๋๋ค. | |
| ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ ์ค์ธ ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐ๋ ์ด๋ฏธ์ง ํ๋ก์ธ์๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ด๋ฏธ์ง ๋ถ๋ฅ์ [ViT](model_doc/vit)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ [`ViTImageProcessor`]๋ฅผ ์์ฑํฉ๋๋ค: | |
| ```py | |
| >>> from transformers import ViTImageProcessor | |
| >>> vit_extractor = ViTImageProcessor() | |
| >>> print(vit_extractor) | |
| ViTImageProcessor { | |
| "do_normalize": true, | |
| "do_resize": true, | |
| "feature_extractor_type": "ViTImageProcessor", | |
| "image_mean": [ | |
| 0.5, | |
| 0.5, | |
| 0.5 | |
| ], | |
| "image_std": [ | |
| 0.5, | |
| 0.5, | |
| 0.5 | |
| ], | |
| "resample": 2, | |
| "size": 224 | |
| } | |
| ``` | |
| <Tip> | |
| ์ฌ์ฉ์ ์ง์ ์ ์ํ์ง ์๋ ๊ฒฝ์ฐ `from_pretrained` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ๊ธฐ๋ณธ ์ด๋ฏธ์ง ํ๋ก์ธ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ถ๋ฌ์ค๋ฉด ๋ฉ๋๋ค. | |
| </Tip> | |
| ์ฌ์ฉ์ ์ง์ ์ด๋ฏธ์ง ํ๋ก์ธ์๋ฅผ ์์ฑํ๋ ค๋ฉด [`ViTImageProcessor`] ํ๋ผ๋ฏธํฐ๋ฅผ ์์ ํฉ๋๋ค: | |
| ```py | |
| >>> from transformers import ViTImageProcessor | |
| >>> my_vit_extractor = ViTImageProcessor(resample="PIL.Image.BOX", do_normalize=False, image_mean=[0.3, 0.3, 0.3]) | |
| >>> print(my_vit_extractor) | |
| ViTImageProcessor { | |
| "do_normalize": false, | |
| "do_resize": true, | |
| "feature_extractor_type": "ViTImageProcessor", | |
| "image_mean": [ | |
| 0.3, | |
| 0.3, | |
| 0.3 | |
| ], | |
| "image_std": [ | |
| 0.5, | |
| 0.5, | |
| 0.5 | |
| ], | |
| "resample": "PIL.Image.BOX", | |
| "size": 224 | |
| } | |
| ``` | |
| ## ํน์ฑ ์ถ์ถ๊ธฐ[[feature-extractor]] | |
| ํน์ฑ ์ถ์ถ๊ธฐ(feature extractor)๋ ์ค๋์ค ์ ๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค. ๊ธฐ๋ณธ [`~feature_extraction_utils.FeatureExtractionMixin`] ํด๋์ค์์ ์์๋๋ฉฐ, ์ค๋์ค ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด [`SequenceFeatureExtractor`] ํด๋์ค์์ ์์ํ ์๋ ์์ต๋๋ค. | |
| ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ ์ค์ธ ๋ชจ๋ธ๊ณผ ์ฐ๊ฒฐ๋ ํน์ฑ ์ถ์ถ๊ธฐ๋ฅผ ์์ฑํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ค๋์ค ๋ถ๋ฅ์ [Wav2Vec2](model_doc/wav2vec2)๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ [`Wav2Vec2FeatureExtractor`]๋ฅผ ์์ฑํฉ๋๋ค: | |
| ```py | |
| >>> from transformers import Wav2Vec2FeatureExtractor | |
| >>> w2v2_extractor = Wav2Vec2FeatureExtractor() | |
| >>> print(w2v2_extractor) | |
| Wav2Vec2FeatureExtractor { | |
| "do_normalize": true, | |
| "feature_extractor_type": "Wav2Vec2FeatureExtractor", | |
| "feature_size": 1, | |
| "padding_side": "right", | |
| "padding_value": 0.0, | |
| "return_attention_mask": false, | |
| "sampling_rate": 16000 | |
| } | |
| ``` | |
| <Tip> | |
| ์ฌ์ฉ์ ์ง์ ์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ `from_pretrained` ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ธ์ ๊ธฐ๋ณธ ํน์ฑ ์ถ์ถ๊ธฐ ใ ๊ฐ๋ณ์๋ฅผ ๋ถ๋ฌ ์ค๋ฉด ๋ฉ๋๋ค. | |
| </Tip> | |
| ์ฌ์ฉ์ ์ง์ ํน์ฑ ์ถ์ถ๊ธฐ๋ฅผ ๋ง๋ค๋ ค๋ฉด [`Wav2Vec2FeatureExtractor`] ๋งค๊ฐ๋ณ์๋ฅผ ์์ ํฉ๋๋ค: | |
| ```py | |
| >>> from transformers import Wav2Vec2FeatureExtractor | |
| >>> w2v2_extractor = Wav2Vec2FeatureExtractor(sampling_rate=8000, do_normalize=False) | |
| >>> print(w2v2_extractor) | |
| Wav2Vec2FeatureExtractor { | |
| "do_normalize": false, | |
| "feature_extractor_type": "Wav2Vec2FeatureExtractor", | |
| "feature_size": 1, | |
| "padding_side": "right", | |
| "padding_value": 0.0, | |
| "return_attention_mask": false, | |
| "sampling_rate": 8000 | |
| } | |
| ``` | |
| ## ํ๋ก์ธ์[[processor]] | |
| ๋ฉํฐ๋ชจ๋ฌ ์์ ์ ์ง์ํ๋ ๋ชจ๋ธ์ ๊ฒฝ์ฐ, ๐ค Transformers๋ ํน์ฑ ์ถ์ถ๊ธฐ ๋ฐ ํ ํฌ๋์ด์ ์ ๊ฐ์ ์ฒ๋ฆฌ ํด๋์ค๋ฅผ ๋จ์ผ ๊ฐ์ฒด๋ก ํธ๋ฆฌํ๊ฒ ๋ํํ๋ ํ๋ก์ธ์ ํด๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ ์์ฑ ์ธ์ ์์ (Automatic Speech Recognition task (ASR))์ [`Wav2Vec2Processor`]๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์๋ ์์ฑ ์ธ์ ์์ ์ ์ค๋์ค๋ฅผ ํ ์คํธ๋ก ๋ณํํ๋ฏ๋ก ํน์ฑ ์ถ์ถ๊ธฐ์ ํ ํฌ๋์ด์ ๊ฐ ํ์ํฉ๋๋ค. | |
| ์ค๋์ค ์ ๋ ฅ์ ์ฒ๋ฆฌํ ํน์ฑ ์ถ์ถ๊ธฐ๋ฅผ ๋ง๋ญ๋๋ค: | |
| ```py | |
| >>> from transformers import Wav2Vec2FeatureExtractor | |
| >>> feature_extractor = Wav2Vec2FeatureExtractor(padding_value=1.0, do_normalize=True) | |
| ``` | |
| ํ ์คํธ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ํ ํฌ๋์ด์ ๋ฅผ ๋ง๋ญ๋๋ค: | |
| ```py | |
| >>> from transformers import Wav2Vec2CTCTokenizer | |
| >>> tokenizer = Wav2Vec2CTCTokenizer(vocab_file="my_vocab_file.txt") | |
| ``` | |
| [`Wav2Vec2Processor`]์์ ํน์ฑ ์ถ์ถ๊ธฐ์ ํ ํฌ๋์ด์ ๋ฅผ ๊ฒฐํฉํฉ๋๋ค: | |
| ```py | |
| >>> from transformers import Wav2Vec2Processor | |
| >>> processor = Wav2Vec2Processor(feature_extractor=feature_extractor, tokenizer=tokenizer) | |
| ``` | |
| configuration๊ณผ ๋ชจ๋ธ์ด๋ผ๋ ๋ ๊ฐ์ง ๊ธฐ๋ณธ ํด๋์ค์ ์ถ๊ฐ ์ ์ฒ๋ฆฌ ํด๋์ค(ํ ํฌ๋์ด์ , ์ด๋ฏธ์ง ํ๋ก์ธ์, ํน์ฑ ์ถ์ถ๊ธฐ ๋๋ ํ๋ก์ธ์)๋ฅผ ์ฌ์ฉํ๋ฉด ๐ค Transformers์์ ์ง์ํ๋ ๋ชจ๋ ๋ชจ๋ธ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ ๊ธฐ๋ณธ ํด๋์ค๋ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ฏ๋ก ์ํ๋ ํน์ ์์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ต์ ์ํด ๋ชจ๋ธ์ ์ฝ๊ฒ ์ค์ ํ๊ฑฐ๋ ๊ธฐ์กด์ ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ์์ ํ์ฌ ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค. | |