
Huggingface Transformers å ¥é (8) - ããŒã¯ãã€ã¶ãŒ
以äžã®èšäºãåèã«æžããŠãŸãã
åå
1. ããŒã¯ãã€ã¶ãŒ
ãããŒã¯ãã€ã¶ãŒãã¯ããããã¹ããããããŒã¯ã³ãã«åå²ããããããIDãã«å€æããæ©èœãæäŸããŸãããããã¹ããã¯ãã®ãŸãŸã§ã¯ãã¥ãŒã©ã«ãããã¯ãŒã¯ã§åŠçã§ããªããããIDã«å€æããå¿ èŠããããŸãã
2. ããŒã¯ã³åã®æ¹æ³
ããã¹ãã®ããŒã¯ã³åã¯èŠãç®ä»¥äžã«å€§å€ãªäœæ¥ã§ãããŒã¯ã³åã®æ¹æ³ã¯è€æ°ãããŸãã
ã»åèª
ã»æå
ã»ãµãã¯ãŒã
2-1. åèªã«ããããŒã¯ã³å
â ã¹ããŒã¹ã«ããããŒã¯ã³å
äžçªç°¡åãªããŒã¯ã³åã®æ¹æ³ã¯ããã¹ããŒã¹ã«ããããŒã¯ã³åãã§ãã
"Donât you love ð€ Transformers? We sure do."Â
  â
["Don't", "you", "love", "ð€", "Transformers?", "We", "sure", "do."]
ããã¯è¯ã第1æ©ã§ããã"Transformers? " ã "do. " ãšããããŒã¯ã³ãèŠãŠã¿ããšããã£ãšè¯ãæ¹æ³ãããããšãããããŸãã
â ã¹ããŒã¹ / å¥èªç¹ã«ããããŒã¯ã³å
ã¹ããŒã¹ã ãã§ãªããå¥èªç¹ãèæ
®ã«å
¥ããŠããŒã¯ã³åããŠã¿ãŸãããã
"Donât you love ð€ Transformers? We sure do."Â
  â
["Don", "'", "t", "you", "love", "ð€", "Transformers", "?", "We", "sure", "do", "."]
è¯ããªããŸããããã äžã€æ°ã«ãªãã®ã¯ã"Don't"Â ã®æ±ãæ¹ã§ãã"Don't" 㯠do not ã®ç¥ãªã®ã§ã["Do", "n't"] ã®ããã«ããŒã¯ã³åããæ¹ãè¯ãã§ãããã
ããããåŠçãããè€éã«ãªã£ãŠããŸãããããã¢ãã«ã®çš®é¡ããšã«ç¬èªã®ããŒã¯ã³åã¯ã©ã¹ãæã€çç±ã«ãªããŸããããã¹ããããŒã¯ã³åããã«ãŒã«ã¯è€æ°ãããŸãããããŠãã¡ãããäºååŠç¿æžã¿ã¢ãã«ã䜿ãæã¯ãäºååŠç¿æãšåãã«ãŒã«ã®ããŒã¯ã³åãé©çšããªããã°ãæ£ããåäœããŸããã
ãããŒãããHuggingface Transformersãã®ã¢ãã«ç޹ä»ããŒãžã«ã¯ãäºååŠç¿ã¢ãã«ã§ã©ã®ããŒã¯ãã€ã¶ãŒã䜿çšããŠããããç¥ãããšãã§ããŸããäŸãã°ããBERTãã§ã¯ããWordPieceãããŒã¹ã®ãBertTokenizerãã䜿çšããŠããããšãããããŸãã
â ã«ãŒã«ããŒã¹ã«ããããŒã¯ã³å
ãspaCyããMosesããšããã«ãŒã«ããŒã¹ã®ããŒã¯ãã€ã¶ãŒã䜿ããšã次ã®ããã«ããŒã¯ã³åãããŸãã
"Donât you love ð€ Transformers? We sure do."Â
  â
["Do", "n't", "you", "love", "ð€", "Transformers", "?", "We", "sure", "do", "."]
â åèªã«ããããŒã¯ã³å
äžèšã®ãã¹ããŒã¹/å¥èªç¹ã«ããããŒã¯ã³åãããã«ãŒã«ããŒã¹ã«ããããŒã¯ã³åãã¯ãããã¹ããåèªã«åå²ãããåèªã®ããŒã¯ã³åãã®äŸã«ãªããŸããããã¯æãçŽæçãªæ¹æ³ã§ãããèšå€§ãªã³ãŒãã¹ãããå Žåã«ã¯åé¡ããããŸããäŸãã°ããTransformer XLãã¯ãã¹ããŒã¹/å¥èªç¹ã«ããããŒã¯ã³åãã䜿çšããŠãããèªåœæ°ã¯267,735ã«ããªããŸãã
巚倧ãªèªåœæ°ã¯ã巚倧ãªåã蟌ã¿è¡åãå¿
èŠãªããšãæå³ããã¡ã¢ãªåé¡ãåŒãèµ·ãããŸãããTransformer XLãã¯ãAdaptive EmbeddingããšåŒã°ããç¹æ®ãªåã蟌ã¿ã䜿çšããŠããã«å¯ŸåŠããŸãããäžè¬çã«ã¯ãTransformerã¢ãã«ã50,000ãè¶
ããèªåœæ°ãæã€ããšã¯ã»ãšãã©ãããŸããã
2-2. æåã«ããããŒã¯ã³å
ãåèªã«ããããŒã¯ã³åãã«æºè¶³ã§ããªãå Žåã¯ããæåã«ããããŒã¯ã³åããè¡ãããšãã§ããŸããããã¯éåžžã«ã·ã³ãã«ã§ãå€ãã®ã¡ã¢ãªãç¯çŽã§ããŸããããåèªã«ããããŒã¯ã³åãã®ããã«ã¢ãã«ãæå³ã®ããããã¹ã衚çŸãåŠç¿ã§ãããããã©ãŒãã³ã¹ã®äœäžã«ã€ãªãããŸãã
2-3. ãµãã¯ãŒãã«ããããŒã¯ã³å
å
šãŠã®Transformerã¢ãã«ã¯ããåèªã«ããããŒã¯ã³åããšãæåã«ããããŒã¯ã³åãã®äž¡æ¹ã®å©ç¹ãåŸããããããµãã¯ãŒãã«ããããŒã¯ã³åããè¡ããŸããäžè¬çãªåèªã¯ãã®ãŸãŸå©çšããçšãªåèªã¯ãµãã¯ãŒãã§åè§£ããŸããäŸãã°ã"annoyingly" ã¯çšãªåèªãšã¿ãªããã"annoying" ãš "ly" ã«åè§£ããããããããŸããã
ããã«ãããã¢ãã«ã¯äžè¬çãªåèªãšãµãã¯ãŒããåŠç¿ããªãããåççãªèªåœæ°ãç¶æããããšãã§ããŸããããã«ãæªç¥èªããµãã¯ãŒãã«åè§£ããŠåŠçã§ããããã«ãªããŸãã
â BertTokenizerã«ããããŒã¯ã³å
以äžã¯ããBertTokenizerãã«ããããŒã¯ã³åã®äŸã§ãã
"I have a new GPU!"Â
  â
['i', 'have', 'a', 'new', 'gp', '##u', '!']
>>> from transformers import BertTokenizer
>>> tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
>>> tokenizer.tokenize("I have a new GPU!")
['i', 'have', 'a', 'new', 'gp', '##u', '!']ãBertTokenizerãã¯ã倧æåå°æåãåºå¥ããªãã®ã§ãããã¹ãã¯å°æåã«ãªããŸãããããŠãããŒã¯ãã€ã¶ãŒã®èªåœã«Â "gpu" ãååšããŠããªãã£ãã®ã§ã"gp" ãš "##u" ãšãããµãã¯ãŒãã«åå²ããŸãã"##" ã¯ãåã®åèªïŒãŸãã¯ãµãã¯ãŒãïŒã«ã¹ããŒã¹ãªãã§çµåãããšããæå³ã§ãã
â XLNetTokenizerã«ããããŒã¯ã³å
以äžã¯ããXLNetTokenizerãã«ããããŒã¯ã³åã®äŸã§ãã
"Donât you love ð€ Transformers? We sure do."
  â
['âDon', "'", 't', 'âyou', 'âlove', 'â', 'ð€', 'â', 'Transform', 'ers', '?', 'âWe', 'âsure', 'âdo', '.']
>>> from transformers import XLNetTokenizer
>>> tokenizer = XLNetTokenizer.from_pretrained('xlnet-base-cased')
>>> tokenizer.tokenize("Don't you love ð€ Transformers? We sure do.")
['âDon', "'", 't', 'âyou', 'âlove', 'â', 'ð€', 'â', 'Transform', 'ers', '?', 'âWe', 'âsure', 'âdo', '.']"Transformers" ã "Transform" ãš "ers" ã«åå²ãããŠããããšãããããŸãã"â"ã®æå³ã¯ãåŸã»ã©ãSentencePieceãã§èª¬æããŸãã
3. ãµãã¯ãŒãã«ããããŒã¯ã³åã®æ¹æ³
ãµãã¯ãŒãã«ããããŒã¯ã³åã«ããè€æ°ã®æ¹æ³ããããŸãã
ã»BPEïŒByte-Pair EncodingïŒ
ã»byte-level BPE
ã»WordPiece
ã»Unigram
ã»SentencePiece
3-1. BPEïŒByte-Pair EncodingïŒ
ãBPEãïŒByte-Pair EncodingïŒã¯ãã¯ããã«ãåèªã«ããããŒã¯ã³åããè¡ã£ãŠããããååèªã®é »åºŠã®ã«ãŠã³ãããè¡ããŸãã
ãã®çµæã次ã®ãã㪠(åèª , åèªã®é »åºŠ) ããããšããŸãã
('hug', 10), ('pug', 5), ('pun', 12), ('bun', 4), ('hugs', 5)
åºæ¬èªåœã¯ ['b', 'g', 'h', 'n', 'p', 's', 'u'] ã§ããããã¹ãŠã®åèªããŸãæåããšã«åå²ããŸãã
('h' 'u' 'g', 10), ('p' 'u' 'g', 5), ('p' 'u' 'n', 12), ('b' 'u' 'n', 4), ('h' 'u' 'g' 's', 5)
ãã®äžãããæãé »åºŠã®é«ããã¢ãéžã³ãŸããæãé »åºŠãé«ãã®ã¯Â 'ug'ïŒ10+5+5=20åïŒãªã®ã§ãããŒã¯ã³åæ©èœãæåã«åŠç¿ããããŒãžã«ãŒã«ã¯ã'ug' ãèªåœã«è¿œå ããããšã«ãªããŸãã
('h' 'ug', 10), ('p' 'ug', 5), ('p' 'u' 'n', 12), ('b' 'u' 'n', 4), ('h' 'ug' 's', 5)
次ã«é »åºŠã®é«ããã¢ã¯Â 'un'ïŒ16åïŒãªã®ã§ã'un' ãèªåœã«è¿œå ããŸããæ¬¡ã«é »åºŠã®é«ããã¢ã¯'hug'ïŒ'h' + 'ug' : 15åïŒãªã®ã§ã'hug' ãèªåœã«è¿œå ããŸãã
ãã®æ®µéã§ãèªåœã¯ ['b', 'g', 'h', 'n', 'p', 's', 'u', 'ug', 'un', 'hug'] ã«ãªããã³ãŒãã¹ã¯æ¬¡ã®ããã«è¡šçŸãããŸãã
('hug', 10), ('p' 'ug', 5), ('p' 'un', 12), ('b' 'un', 4), ('hug' 's', 5)
ããŒã¯ã³åæ©èœã¯ããã®ããã«åŠç¿ããã«ãŒã«ããæ°ããåèªã«é©çšããããšãã§ããŸããäŸãã°ã'bug' 㯠['b', 'ug'] ãšããŠããŒã¯ã³åãããŸãããmug 㯠['<unk>', 'ug'] ãšããŠããŒã¯ã³åãããŸããããã¯ãäžè¬çãªæåããããçµµæåã®ãããªç¹æ®æåã§çºçããŸãã
èªåœæ°ïŒåºæ¬èªåœæ°ïŒããŒãžæ°ïŒã¯ãã€ããŒãã©ã¡ãŒã¿ã§ããäŸãã°ããGPTãã¯478æåãããŒã¹ã«ããŠããã®ã§ãèªåœæ°ã¯40,478ãšãªãã40,000åã®ããŒãžã§ããŒã¯ãã€ã¶ãŒã®åŠç¿ãæ¢ããããšã«ãªããŸãã
3-2. Byte-level BPE
ãbyte-level BPEãã¯ããBPEãã®åºæ¬èªåœãå šãŠã®åºæ¬æåãååŸããªããã°ãªããªããšããåé¡ã«å¯ŸåŠããããã«ãåºæ¬èªåœãšããŠãã€ãã䜿ããšããå·§åŠãªããªãã¯ã䜿ã£ãŠããŸãã
å¥èªç¹ãæ±ãããã®ããã€ãã®è¿œå ã«ãŒã«ãå ããããšã§ãæªç¥ã®ããŒã¯ã³ãå¿
èŠãšããã«ãå
šãŠã®ããã¹ããããŒã¯ã³åããããšãã§ããŸããäŸãã°ããGPT-2ãã¯50,257ã®èªåœæ°ãæã£ãŠããŸãããåºæ¬èªåœæ°(256)+ç¹å¥ãªææ«ããŒã¯ã³(1)+ããŒãžæ°(50,000) ã§å¯ŸåŠããŠããŸãã
3-3. WordPiece
ãWordPieceã ã¯ããBERTãã§äœ¿çšãããŠããæ¹æ³ã§ãããBPEããšåãããåºæ¬èªåœã®ã°ã«ãŒãããåŠç¿ãéå§ããŸãããããŒãžã«ãŒã«ãç°ãªããŸãããBPEããæãé »åºŠã®é«ããã¢ãéžæããã®ã«å¯ŸãããWordPieceãã¯ããŒãžãããã³ãŒãã¹äžã®å°€åºŠãæå€§åãããã¢ãéžæããŸããã
å
ã»ã©ã®äŸã§ã¯ã'ug' ããã確çã 'u' ããã確çã§å²ã£ããã®ã 'g' ã§ããå Žåã«ã®ã¿ã'u' ãš 'g' ãããŒãžããããšãæå³ããŠããŸããããã¯ã2ã€ã®èšå·ãããŒãžããããšã§äœãã倱ããããè©äŸ¡ããããã䟡å€ã®ãããã®ã§ããããšã確èªãããšããæå³ã§ããBPEããè¡ãããšãšã¯åŸ®åŠã«ç°ãªããŸãã
3-4. Unigram
ãUnigramãã¯ããBPEãããWordPieceãã®ããã«ãåºæ¬èªåœã®ã°ã«ãŒãããåŠç¿ãéå§ããäœããã®ã«ãŒã«ã§ããŒãžããã®ã§ã¯ãªããå€§èŠæš¡ãªèªåœïŒäŸãã°ãäºåããŒã¯ã³åãããåèªãšäžè¬çãªéšåæååïŒããåŠç¿ãéå§ãããããæ®µéçã«ããªãã³ã°ããŠãããŸããã©ã€ãã©ãªå
ã®äºååŠç¿æžã¿ã¢ãã«ã§ã¯ããSentencePieceããšçµã¿åãããŠäœ¿ãããŠããŸãã
ãBPEããWordPieceãããæ°ããããã¹ããããŒã¯ã³åãããšãã«åãé çªã§é©çšã§ããã«ãŒã«ãç¹å®ã®é çªã§äœæããŠããã®ã«å¯ŸãããUnigramãã¯æ°ããããã¹ããããŒã¯ã³åããæ¹æ³ãããã€ãçšæããŠããŸãã
äŸãã°ã以äžã®ãããªèªåœããããšããŸãã
['b', 'g', 'h', 'n', 'p', 's', 'u', 'ug', 'un', 'hug']
以åã¯Â  'hugs' ã ['hug', 's']ã['h', 'ug', 's']ã['h', 'u', 'g', 's'] ã®ããã«ããŒã¯ã³åããŠããŸãããã§ã¯ãã©ããéžã¹ã°ããã®ã§ãããã?
èšç·ŽãããããŒã¯ãã€ã¶ãŒã¯ãèªåœãä¿åããã ãã§ãªããã³ãŒãã¹å ã®åããŒã¯ã³ã®ç¢ºçãä¿åããŸãããããŠãããããã®ããŒã¯ã³åã«ç¢ºçãäžããæãå¯èœæ§ã®é«ããã®ãéžã¶ããšãã§ããŸãã
ãããã®ç¢ºçã¯ããŒã¯ã³åãèšç·Žããããã®æå€±ãå®çŸ©ããŸããã³ãŒãã¹ãð¥_1,...,ð¥_ð ãšããåèªã§æ§æãããŠããŠãð¥_ð ãšããåèªã«ã€ããŠã ð(ð¥_ð) ãïŒçŸåšã®èªåœã§ïŒð¥_ð ã®ãã¹ãŠã®ããŒã¯ã³åã®å¯èœæ§ã®éåã§ãããšãããšãæå€±ã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
3-5. SentencePiece
ãããŸã§ã«èŠãŠããæ¹æ³ã¯ãã¹ãŠãäœããã®åœ¢ã§ã®ãäºåããŒã¯ã³åããå¿ èŠãšããŠããŸãããããã®éã«åé¡ãšãªãã®ããå šãŠã®èšèªãã¹ããŒã¹ã䜿ã£ãŠåèªãåºåã£ãŠããããã§ã¯ãªããšããããšã§ãã
ãXLMãã§ã¯èšèªïŒæ¥æ¬èªãäžåœèªãã¿ã€èªïŒæ¯ã«åºæã®ããã¬ããŒã¯ãã€ã¶ãŒãã䜿çšããããšã§è§£æ±ºããŠããŸãããã®åé¡ã解決ããããã«ããSentencePieceãã¯ãå ¥åãçã®ã¹ããªãŒã ãšããŠæ±ãã䜿çšããæåã®ã»ããã«ã¹ããŒã¹ãå«ãããBPEãããUnigramãã䜿ã£ãŠé©åãªèªåœãæ§ç¯ããŸãã
ãã®ããããXLNetTokenizerãïŒSentencePieceã䜿çšïŒã䜿çšããåã«èŠãäŸã§ã¯ãã¹ããŒã¹ã衚ã'â'ãšããæåããããŸãããããŒã¯ã³åãããããã¹ãããã³ãŒãããã®ã¯ãšãŠãç°¡åã§ãã
ã©ã€ãã©ãªå
ã®ãSentencePieceãã䜿çšãããã¹ãŠã®Transformerã¢ãã«ã¯ããUnigramãã䜿çšããŠããŸããããã䜿çšããã¢ãã«ã®äŸãšããŠã¯ããALBERTããXLNetããMarianãããããŸãã
