Quick tour
ð€ Transformersã䜿ãå§ããŸãããïŒ éçºè ã§ããããšãæ¥åžžçãªãŠãŒã¶ãŒã§ããããšããã®ã¯ã€ãã¯ãã¢ãŒã¯ åããŠå§ããã®ãæ¯æŽããpipeline()ã䜿ã£ãæšè«æ¹æ³ãAutoClassã§äºååŠç¿æžã¿ã¢ãã«ãšããªããã»ããµãããŒãããæ¹æ³ã ãããŠPyTorchãŸãã¯TensorFlowã§çŽ æ©ãã¢ãã«ããã¬ãŒãã³ã°ããæ¹æ³ã瀺ããŸãã åå¿è ã®å Žåãããã§ç޹ä»ãããã³ã³ã»ããã®è©³çްãªèª¬æãæäŸãã ãã¥ãŒããªã¢ã«ãŸãã¯ã³ãŒã¹ã次ã«åç §ããããšããå§ãããŸãã
å§ããåã«ãå¿ èŠãªã©ã€ãã©ãªããã¹ãŠã€ã³ã¹ããŒã«ãããŠããããšã確èªããŠãã ããïŒ
!pip install transformers datasets evaluate accelerate
ããªãã¯ãŸãã奜ããªæ©æ¢°åŠç¿ãã¬ãŒã ã¯ãŒã¯ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸã:
pip install torch
Pipeline
pipeline() ã¯ãäºååŠç¿æžã¿ã¢ãã«ãæšè«ã«æãç°¡åã§é«éãªæ¹æ³ã§ãã pipeline() ã䜿çšããããšã§ãããŸããŸãªã¢ããªãã£ã«ãããå€ãã®ã¿ã¹ã¯ã«å¯ŸããŠå³åº§ã«äœ¿çšã§ããŸãã ããã€ãã®ã¿ã¹ã¯ã¯ä»¥äžã®è¡šã«ç€ºãããŠããŸãïŒ
䜿çšå¯èœãªã¿ã¹ã¯ã®å®å šãªäžèЧã«ã€ããŠã¯ãpipeline API ãªãã¡ã¬ã³ã¹ã確èªããŠãã ããã
| ã¿ã¹ã¯ | 説æ | ã¢ããªã㣠| ãã€ãã©ã€ã³èå¥å |
|---|---|---|---|
| ããã¹ãåé¡ | ããã¹ãã®ã·ãŒã±ã³ã¹ã«ã©ãã«ãå²ãåœãŠã | NLP | pipeline(task="sentiment-analysis") |
| ããã¹ãçæ | ããã³ãããæå®ããŠããã¹ããçæãã | NLP | pipeline(task="text-generation") |
| èŠçŽ | ããã¹ããŸãã¯ããã¥ã¡ã³ãã®èŠçŽãçæãã | NLP | pipeline(task="summarization") |
| ç»ååé¡ | ç»åã«ã©ãã«ãå²ãåœãŠã | ã³ã³ãã¥ãŒã¿ããžã§ã³ | pipeline(task="image-classification") |
| ç»åã»ã°ã¡ã³ããŒã·ã§ã³ | ç»åã®ååå¥ã®ãã¯ã»ã«ã«ã©ãã«ãå²ãåœãŠãïŒã»ãã³ãã£ãã¯ãããããã£ãã¯ãããã³ã€ã³ã¹ã¿ã³ã¹ã»ã°ã¡ã³ããŒã·ã§ã³ããµããŒãïŒ | ã³ã³ãã¥ãŒã¿ããžã§ã³ | pipeline(task="image-segmentation") |
| ãªããžã§ã¯ãæ€åº | ç»åå ã®ãªããžã§ã¯ãã®å¢çããã¯ã¹ãšã¯ã©ã¹ãäºæž¬ãã | ã³ã³ãã¥ãŒã¿ããžã§ã³ | pipeline(task="object-detection") |
| ãªãŒãã£ãªåé¡ | ãªãŒãã£ãªããŒã¿ã«ã©ãã«ãå²ãåœãŠã | ãªãŒãã£ãª | pipeline(task="audio-classification") |
| èªåé³å£°èªè | é³å£°ãããã¹ãã«å€æãã | ãªãŒãã£ãª | pipeline(task="automatic-speech-recognition") |
| ããžã¥ã¢ã«ã¯ãšã¹ãã§ã³å¿ç | ç»åãšè³ªåãäžããããå Žåã«ãç»åã«é¢ãã質åã«åçãã | ãã«ãã¢ãŒãã« | pipeline(task="vqa") |
| ããã¥ã¡ã³ãã¯ãšã¹ãã§ã³å¿ç | ããã¥ã¡ã³ããšè³ªåãäžããããå Žåã«ãããã¥ã¡ã³ãã«é¢ãã質åã«åçãã | ãã«ãã¢ãŒãã« | pipeline(task="document-question-answering") |
| ç»åãã£ãã·ã§ãã³ã° | äžããããç»åã«ãã£ãã·ã§ã³ãçæãã | ãã«ãã¢ãŒãã« | pipeline(task="image-to-text") |
ãŸããpipeline() ã®ã€ã³ã¹ã¿ã³ã¹ãäœæãã䜿çšãããã¿ã¹ã¯ãæå®ããŸãã ãã®ã¬ã€ãã§ã¯ãã»ã³ãã¡ã³ãåæã®ããã« pipeline() ã䜿çšããäŸã瀺ããŸãïŒ
pipeline()ã¯ãææ
åæã®ããã®ããã©ã«ãã®äºååŠç¿æžã¿ã¢ãã«ãšããŒã¯ãã€ã¶ãããŠã³ããŒãããŠãã£ãã·ã¥ãã䜿çšã§ããããã«ãªããŸãã
ããã§ãclassifierã察象ã®ããã¹ãã«äœ¿çšã§ããŸãïŒ
[{'label': 'POSITIVE', 'score': 0.9998}] è€æ°ã®å ¥åãããå Žåã¯ãpipeline()ã«å ¥åããªã¹ããšããŠæž¡ããŠãèŸæžã®ãªã¹ããè¿ããŸãïŒ
label: POSITIVE, ã¹ã³ã¢: 0.9998 ,label: NEGATIVE, ã¹ã³ã¢: 0.5309
pipeline()ã¯ãä»»æã®ã¿ã¹ã¯ã«å¯ŸããŠããŒã¿ã»ããå šäœãç¹°ãè¿ãåŠçããããšãã§ããŸãããã®äŸã§ã¯ãèªåé³å£°èªèãã¿ã¹ã¯ãšããŠéžã³ãŸãããïŒ
ãªãŒãã£ãªããŒã¿ã»ãããããŒãããŸãïŒè©³çްã«ã€ããŠã¯ð€ Datasets ã¯ã€ãã¯ã¹ã¿ãŒããåç §ããŠãã ããïŒã ããšãã°ãMInDS-14ããŒã¿ã»ãããããŒãããŸãïŒ
ããŒã¿ã»ããã®ãµã³ããªã³ã°ã¬ãŒããfacebook/wav2vec2-base-960hããã¬ãŒãã³ã°ããããµã³ããªã³ã°ã¬ãŒããšäžèŽããããšã確èªããŠãã ããïŒ
"audio"åãåŒã³åºããšããªãŒãã£ãªãã¡ã€ã«ã¯èªåçã«ããŒãããããªãµã³ããªã³ã°ãããŸããæåã®4ã€ã®ãµã³ãã«ããçã®æ³¢åœ¢é åãæœåºããããããã€ãã©ã€ã³ã«ãªã¹ããšããŠæž¡ããŸãã
['I WOULD LIKE TO SET UP A JOINT ACCOUNT WITH MY PARTNER HOW DO I PROCEED WITH DOING THAT', "FONDERING HOW I'D SET UP A JOIN TO HELL T WITH MY WIFE AND WHERE THE AP MIGHT BE", "I I'D LIKE TOY SET UP A JOINT ACCOUNT WITH MY PARTNER I'M NOT SEEING THE OPTION TO DO IT ON THE APSO I CALLED IN TO GET SOME HELP CAN I JUST DO IT OVER THE PHONE WITH YOU AND GIVE YOU THE INFORMATION OR SHOULD I DO IT IN THE AP AN I'M MISSING SOMETHING UQUETTE HAD PREFERRED TO JUST DO IT OVER THE PHONE OF POSSIBLE THINGS", 'HOW DO I FURN A JOINA COUT']
å€§èŠæš¡ãªããŒã¿ã»ããã§ãå ¥åã倧ããå ŽåïŒé³å£°ãç»åãªã©ïŒããã¹ãŠã®å ¥åãã¡ã¢ãªã«èªã¿èŸŒã代ããã«ããªã¹ãã§ã¯ãªããžã§ãã¬ãŒã¿ãæž¡ãããšããå§ãã§ãã詳现ã«ã€ããŠã¯ãã€ãã©ã€ã³APIãªãã¡ã¬ã³ã¹ãåç §ããŠãã ããã
Use another model and tokenizer in the pipeline
pipeline()ã¯Hubããã®ä»»æã®ã¢ãã«ãå容ã§ããä»ã®ãŠãŒã¹ã±ãŒã¹ã«pipeline()ãé©å¿ãããããšã容æã§ããããšãã°ããã©ã³ã¹èªã®ããã¹ããåŠçã§ããã¢ãã«ãå¿ èŠãªå ŽåãHubã®ã¿ã°ã䜿çšããŠé©åãªã¢ãã«ããã£ã«ã¿ãªã³ã°ã§ããŸãããããã®ãã£ã«ã¿ãªã³ã°ãããçµæã¯ããã©ã³ã¹èªã®ããã¹ãã«äœ¿çšã§ããææ åæçšã«èª¿æŽãããå€èšèªã®BERTã¢ãã«ãè¿ããŸãïŒ
AutoModelForSequenceClassificationãšAutoTokenizerã䜿çšããŠäºååŠç¿æžã¿ã¢ãã«ãšããã«é¢é£ããããŒã¯ãã€ã¶ãããŒãããŸãïŒæ¬¡ã®ã»ã¯ã·ã§ã³ã§AutoClassã«ã€ããŠè©³ãã説æããŸãïŒïŒ
æå®ããã¢ãã«ãšããŒã¯ãã€ã¶ãpipeline()ã«èšå®ããä»åºŠã¯ãã©ã³ã¹èªã®ããã¹ãã«classifierãé©çšã§ããŸãïŒ
[{'label': '5 stars', 'score': 0.7273}] ãããããªãã®ãŠãŒã¹ã±ãŒã¹ã«é©ããã¢ãã«ãèŠã€ãããªãå ŽåãäºååŠç¿æžã¿ã¢ãã«ãããªãã®ããŒã¿ã§ãã¡ã€ã³ãã¥ãŒãã³ã°ããå¿ èŠããããŸãã ãã¡ã€ã³ãã¥ãŒãã³ã°ã®æ¹æ³ã«ã€ããŠã¯ããã¡ã€ã³ãã¥ãŒãã³ã°ã®ãã¥ãŒããªã¢ã«ãã芧ãã ããã æåŸã«ããã¡ã€ã³ãã¥ãŒãã³ã°ããäºååŠç¿æžã¿ã¢ãã«ãå ±æããã³ãã¥ããã£ãšå ±æããã§å ±æããããšãæ€èšããŠãã ãããããã«ãããæ©æ¢°åŠç¿ãæ°äž»åããæå©ããã§ããŸãïŒ ð€
AutoClass
AutoModelForSequenceClassification ããã³ AutoTokenizer ã¯ã©ã¹ã¯ãäžèšã§äœ¿çšãã pipeline() ãé§åããããã«ååããŠåäœããŸãã
AutoClass ã¯ãäºååŠç¿æžã¿ã¢ãã«ã®ã¢ãŒããã¯ãã£ããã®ååãŸãã¯ãã¹ããèªåçã«ååŸããã·ã§ãŒãã«ããã§ãã
é©å㪠AutoClass ãéžæããããã«é¢é£ããååŠçã¯ã©ã¹ãéžæããã ãã§æžã¿ãŸãã
åã®ã»ã¯ã·ã§ã³ããã®äŸã«æ»ããAutoClass ã䜿çšã㊠pipeline() ã®çµæãåçŸããæ¹æ³ãèŠãŠã¿ãŸãããã
AutoTokenizer
ããŒã¯ãã€ã¶ã¯ããã¹ããã¢ãã«ã®å ¥åãšããŠäœ¿çšã§ããæ°å€ã®é åã«ååŠçãã圹å²ãæãããŸãã ããŒã¯ãã€ãŒãŒã·ã§ã³ããã»ã¹ã«ã¯ãåèªãã©ã®ããã«åå²ãããããåèªãã©ã®ã¬ãã«ã§åå²ããããšãã£ãå€ãã®ã«ãŒã«ããããŸã ïŒããŒã¯ãã€ãŒãŒã·ã§ã³ã«ã€ããŠã®è©³çŽ°ã¯ ããŒã¯ãã€ã¶ãµããªãŒ ãã芧ãã ããïŒã æãéèŠãªããšã¯ãã¢ãã«ãäºååŠç¿æžã¿ã«ãªã£ããšããšåãããŒã¯ãã€ãŒãŒã·ã§ã³ã«ãŒã«ã䜿çšããããã«ãåãã¢ãã«åã§ããŒã¯ãã€ã¶ãã€ã³ã¹ã¿ã³ã¹åããå¿ èŠãããããšã§ãã
AutoTokenizer ã䜿çšããŠããŒã¯ãã€ã¶ãããŒãããŸãïŒ
Pass your text to the tokenizer:
{'input_ids': [101, 11312, 10320, 12495, 19308, 10114, 11391, 10855, 10103, 100, 58263, 13299, 119, 102],
, 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
, 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} ããŒã¯ãã€ã¶ã¯ãæ¬¡ã®æ å ±ãå«ãèŸæžãè¿ããŸãïŒ
- input_ids: ããŒã¯ã³ã®æ°å€è¡šçŸã
- attention_mask: ã©ã®ããŒã¯ã³ã«ã¢ãã³ã·ã§ã³ãåãããã瀺ããŸãã
ããŒã¯ãã€ã¶ã¯ãŸããå ¥åã®ãªã¹ããåãå ¥ããäžæ§ãªé·ãã®ããããè¿ãããã«ããã¹ããããã£ã³ã°ããã³åãè©°ããããšãã§ããŸãã
ååŠçãã¥ãŒããªã¢ã«ãã芧ããã ããããŒã¯ãã€ãŒãŒã·ã§ã³ã®è©³çްããAutoImageProcessorãAutoFeatureExtractorãAutoProcessorã䜿çšããŠç»åããªãŒãã£ãªãããã³ãã«ãã¢ãŒãã«å ¥åãååŠçããæ¹æ³ã«ã€ããŠè©³ãã説æãããŠããããŒãžãã芧ãã ããã
AutoModel
ð€ Transformersã¯äºååŠç¿æžã¿ã€ã³ã¹ã¿ã³ã¹ãç°¡åã«çµ±äžçã«ããŒãããæ¹æ³ãæäŸããŸãã ããã¯ãAutoTokenizerãããŒãããã®ãšåãããã«AutoModelãããŒãã§ããããšãæå³ããŸãã ã¿ã¹ã¯ã«é©ããAutoModelãéžæãã以å€ã®éãã¯ãããŸããã ããã¹ãïŒãŸãã¯ã·ãŒã±ã³ã¹ïŒåé¡ã®å ŽåãAutoModelForSequenceClassificationãããŒãããå¿ èŠããããŸãïŒ
AutoModelã¯ã©ã¹ã§ãµããŒããããŠããã¿ã¹ã¯ã«é¢ãã詳现ã«ã€ããŠã¯ãã¿ã¹ã¯ã®æŠèŠãåç §ããŠãã ããã
ä»ãååŠçæžã¿ã®ããããçŽæ¥ã¢ãã«ã«æž¡ããŸããèŸæžãå±éããã ãã§ã**ã远å ããå¿
èŠããããŸãïŒ
ã¢ãã«ã¯ãlogits屿§ã«æçµçãªã¢ã¯ãã£ããŒã·ã§ã³ãåºåããŸãã logitsã«softmax颿°ãé©çšããŠç¢ºçãååŸããŸãïŒ
tensor([[0.0021, 0.0018, 0.0115, 0.2121, 0.7725], , [0.2084, 0.1826, 0.1969, 0.1755, 0.2365]], grad_fn=<SoftmaxBackward0>)
ð€ Transformersã®ãã¹ãŠã®ã¢ãã«ïŒPyTorchãŸãã¯TensorFlowïŒã¯ãæçµçãªæŽ»æ§å颿°ïŒsoftmaxãªã©ïŒåã®ãã³ãœã«ãåºåããŸãã æçµçãªæŽ»æ§å颿°ã¯ããã°ãã°æå€±ãšçµåãããŠããããã§ããã¢ãã«ã®åºåã¯ç¹å¥ãªããŒã¿ã¯ã©ã¹ã§ããããã®å±æ§ã¯IDEã§èªåè£å®ãããŸãã ã¢ãã«ã®åºåã¯ãã¿ãã«ãŸãã¯èŸæžã®ããã«åäœããŸãïŒæŽæ°ãã¹ã©ã€ã¹ããŸãã¯æååã§ã€ã³ããã¯ã¹ãä»ããããšãã§ããŸãïŒã ãã®å ŽåãNoneã§ãã屿§ã¯ç¡èŠãããŸãã
Save a Model
ã¢ãã«ããã¡ã€ã³ãã¥ãŒãã³ã°ããããPreTrainedModel.save_pretrained()ã䜿çšããŠããŒã¯ãã€ã¶ãšå ±ã«ä¿åã§ããŸãïŒ
åã³ã¢ãã«ã䜿çšããæºåãã§ããããPreTrainedModel.from_pretrained()ã䜿çšããŠå床ããŒãããŸãïŒ
ð€ Transformersã®ç¹ã«çŽ æŽãããæ©èœã®äžã€ã¯ãã¢ãã«ãä¿åãããããPyTorchã¢ãã«ãŸãã¯TensorFlowã¢ãã«ãšããŠåããŒãã§ããããšã§ãã from_ptãŸãã¯from_tfãã©ã¡ãŒã¿ã䜿çšããŠã¢ãã«ããã¬ãŒã ã¯ãŒã¯éã§å€æã§ããŸãïŒ
Custom model builds
ã¢ãã«ãæ§ç¯æ¹æ³ã倿Žããã«ã¯ãã¢ãã«ã®èšå®ã¯ã©ã¹ã倿Žã§ããŸããèšå®ã¯ã¢ãã«ã®å±æ§ãæå®ããŸããäŸãã°ãé ãå±€ã®æ°ãã¢ãã³ã·ã§ã³ãããã®æ°ãªã©ãããã«å«ãŸããŸããã«ã¹ã¿ã èšå®ã¯ã©ã¹ããã¢ãã«ãåæåããéã«ã¯ããŒãããå§ããŸããã¢ãã«ã®å±æ§ã¯ã©ã³ãã ã«åæåãããææçŸ©ãªçµæãåŸãããã«ã¢ãã«ããã¬ãŒãã³ã°ããå¿ èŠããããŸãã
æåã«AutoConfigãã€ã³ããŒããã倿ŽãããäºååŠç¿æžã¿ã¢ãã«ãããŒãããŸããAutoConfig.from_pretrained()å ã§ã倿Žããã屿§ïŒäŸïŒã¢ãã³ã·ã§ã³ãããã®æ°ïŒãæå®ã§ããŸãïŒ
AutoModel.from_config()ã䜿çšããŠã«ã¹ã¿ã èšå®ããã¢ãã«ãäœæããŸãïŒ
ã«ã¹ã¿ã ã¢ãŒããã¯ãã£ãäœæã¬ã€ããåç §ããŠãã«ã¹ã¿ã æ§æã®è©³çްæ å ±ã確èªããŠãã ããã
Trainer - PyTorchåãã®æé©åããããã¬ãŒãã³ã°ã«ãŒã
ãã¹ãŠã®ã¢ãã«ã¯æšæºã®torch.nn.Moduleã§ãããããéåžžã®ãã¬ãŒãã³ã°ã«ãŒãã§äœ¿çšã§ããŸãã
ç¬èªã®ãã¬ãŒãã³ã°ã«ãŒããäœæã§ããŸãããð€ Transformersã¯PyTorchåãã«Trainerã¯ã©ã¹ãæäŸããŠãããåºæ¬çãªãã¬ãŒãã³ã°ã«ãŒãã«å ããŠã
忣ãã¬ãŒãã³ã°ãæ··å粟床ãªã©ã®æ©èœã®è¿œå ãè¡ã£ãŠããŸãã
ã¿ã¹ã¯ã«å¿ããŠãéåžžã¯Trainerã«ä»¥äžã®ãã©ã¡ãŒã¿ãæž¡ããŸãïŒ
-
PreTrainedModelãŸãã¯
torch.nn.Moduleããå§ããŸãïŒ>>> from transformers import AutoModelForSequenceClassification >>> model = AutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased") -
TrainingArgumentsã«ã¯ã倿Žã§ããã¢ãã«ã®ãã€ããŒãã©ã¡ãŒã¿ãå«ãŸããŠãããåŠç¿çãããããµã€ãºããã¬ãŒãã³ã°ãšããã¯æ°ãªã©ã倿Žã§ããŸããæå®ããªãå Žåãããã©ã«ãå€ã䜿çšãããŸãïŒ
>>> from transformers import TrainingArguments >>> training_args = TrainingArguments( ... output_dir="path/to/save/folder/", ... learning_rate=2e-5, ... per_device_train_batch_size=8, ... per_device_eval_batch_size=8, ... num_train_epochs=2, ... ) -
ããŒã¯ãã€ã¶ãç»åããã»ããµãç¹åŸŽéæœåºåšããŸãã¯ããã»ããµã®ãããªååŠçã¯ã©ã¹ãããŒãããŸãïŒ
>>> from transformers import AutoTokenizer >>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased") -
ããŒã¿ã»ãããããŒããã:
>>> from datasets import load_dataset >>> dataset = load_dataset("rotten_tomatoes") # doctest: +IGNORE_RESULT -
ããŒã¿ã»ãããããŒã¯ã³åããããã®é¢æ°ãäœæããŸãïŒ
>>> def tokenize_dataset(dataset): ... return tokenizer(dataset["text"])ãã®åŸã
mapã䜿çšããŠããŒã¿ã»ããå šäœã«é©çšããŸãïŒ>>> dataset = dataset.map(tokenize_dataset, batched=True) -
ããŒã¿ã»ããããã®äŸã®ããããäœæããããã® DataCollatorWithPaddingïŒ
>>> from transformers import DataCollatorWithPadding >>> data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
次ã«ããããã®ã¯ã©ã¹ãTrainerã«ãŸãšããŸãïŒ
èšç·Žãéå§ããæºåãã§ããããtrain()ãåŒã³åºããŠãã¬ãŒãã³ã°ãéå§ããŸãïŒ
翻蚳ãèŠçŽãªã©ãã·ãŒã±ã³ã¹éã¢ãã«ã䜿çšããã¿ã¹ã¯ã«ã¯ã代ããã«Seq2SeqTrainerãšSeq2SeqTrainingArgumentsã¯ã©ã¹ã䜿çšããŠãã ããã
Trainerå ã®ã¡ãœããããµãã¯ã©ã¹åããããšã§ããã¬ãŒãã³ã°ã«ãŒãã®åäœãã«ã¹ã¿ãã€ãºã§ããŸããããã«ãããæå€±é¢æ°ããªããã£ãã€ã¶ãã¹ã±ãžã¥ãŒã©ãªã©ã®æ©èœãã«ã¹ã¿ãã€ãºã§ããŸãããµãã¯ã©ã¹åã§ããã¡ãœããã®äžèЧã«ã€ããŠã¯ãTrainerãªãã¡ã¬ã³ã¹ãã芧ãã ããã
ãã¬ãŒãã³ã°ã«ãŒããã«ã¹ã¿ãã€ãºããå¥ã®æ¹æ³ã¯ãCallbacksã䜿çšããããšã§ããã³ãŒã«ããã¯ã䜿çšããŠä»ã®ã©ã€ãã©ãªãšçµ±åãããã¬ãŒãã³ã°ã«ãŒããç£èŠããŠé²æç¶æ³ãå ±åãããããã¬ãŒãã³ã°ãæ©æã«åæ¢ãããã§ããŸããã³ãŒã«ããã¯ã¯ãã¬ãŒãã³ã°ã«ãŒãèªäœã«ã¯äœã倿Žãå ããŸãããæå€±é¢æ°ãªã©ã®ã«ã¹ã¿ãã€ãºãè¡ãå Žåã¯ãTrainerããµãã¯ã©ã¹åããå¿ èŠããããŸãã
Train with TensorFlow
ãã¹ãŠã®ã¢ãã«ã¯æšæºã®tf.keras.Modelã§ãããããKeras APIã䜿çšããŠTensorFlowã§ãã¬ãŒãã³ã°ã§ããŸãã
ð€ Transformersã¯ãããŒã¿ã»ãããtf.data.DatasetãšããŠç°¡åã«ããŒãã§ããããã«ãã~TFPreTrainedModel.prepare_tf_datasetã¡ãœãããæäŸããŠãããKerasã®compileããã³fitã¡ãœããã䜿çšããŠãã¬ãŒãã³ã°ãããã«éå§ã§ããŸãã
-
TFPreTrainedModelãŸãã¯tf.keras.Modelããå§ããŸãïŒ>>> from transformers import TFAutoModelForSequenceClassification >>> model = TFAutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased") -
ããŒã¯ãã€ã¶ãç»åããã»ããµãç¹åŸŽéæœåºåšããŸãã¯ããã»ããµã®ãããªååŠçã¯ã©ã¹ãããŒãããŸãïŒ
>>> from transformers import AutoTokenizer >>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased") -
ããŒã¿ã»ãããããŒã¯ãã€ãºããããã®é¢æ°ãäœæããŸãïŒ
>>> def tokenize_dataset(dataset): ... return tokenizer(dataset["text"]) # doctest: +SKIP -
mapã䜿çšããŠããŒã¿ã»ããå šäœã«ããŒã¯ãã€ã¶ãé©çšããããŒã¿ã»ãããšããŒã¯ãã€ã¶ã~TFPreTrainedModel.prepare_tf_datasetã«æž¡ããŸããããããµã€ãºã倿ŽããããŒã¿ã»ãããã·ã£ããã«ããããšãã§ããŸãã>>> dataset = dataset.map(tokenize_dataset) # doctest: +SKIP >>> tf_dataset = model.prepare_tf_dataset( ... dataset["train"], batch_size=16, shuffle=True, tokenizer=tokenizer ... ) # doctest: +SKIP -
æºåãã§ãããã
compileãšfitãåŒã³åºããŠãã¬ãŒãã³ã°ãéå§ã§ããŸãã Transformersã¢ãã«ã¯ãã¹ãŠããã©ã«ãã®ã¿ã¹ã¯ã«é¢é£ããæå€±é¢æ°ãæã£ãŠãããããæå®ããªãéããæå€±é¢æ°ãæå®ããå¿ èŠã¯ãããŸããã>>> from tensorflow.keras.optimizers import Adam >>> model.compile(optimizer=Adam(3e-5)) # æå€±é¢æ°ã®åŒæ°ã¯äžèŠã§ãïŒ >>> model.fit(tf
What's next?
ð€ Transformersã®ã¯ã€ãã¯ãã¢ãŒãå®äºããããã¬ã€ãããã§ãã¯ããŠãã«ã¹ã¿ã ã¢ãã«ã®äœæãã¿ã¹ã¯ã®ããã®ãã¡ã€ã³ãã¥ãŒãã³ã°ãã¹ã¯ãªããã䜿çšããã¢ãã«ã®ãã¬ãŒãã³ã°ãªã©ãããå ·äœçãªããšãåŠã¶ããšãã§ããŸããð€ Transformersã®ã³ã¢ã³ã³ã»ããã«ã€ããŠãã£ãšè©³ããç¥ãããå Žåã¯ãã³ã³ã»ããã¥ã¢ã«ã¬ã€ããèªãã§ã¿ãŠãã ããïŒ