Artificial Intelligence/NLP

[NLP 심화] encode() / encode_plus()

geum 2022. 9. 28. 18:49

사싀 μ—„μ²­λ‚œ μ‹¬ν™”λŠ” μ•„λ‹˜

 

ν—ˆκΉ…νŽ˜μ΄μŠ€μ—μ„œ μ‚¬μ „ν•™μŠ΅λͺ¨λΈμ„ λΆˆλŸ¬μ™€ μ‚¬μš©ν•  λ•Œ encode()λ₯Ό μ΄μš©ν•΄ ν† ν°ν™”λœ 데이터λ₯Ό 얻을 수 μžˆλŠ”λ°, 이것저것 예제λ₯Ό λ³΄λ‹€λ³΄λ‹ˆ encode()κ°€ λ‚˜μ˜¬ λ•Œκ°€ 있고 encode_plus()κ°€ λ‚˜μ˜¬ λ•Œκ°€ μžˆμ—ˆλ‹€.

 

ν•œ μ€„μ§œλ¦¬ μ½”λ“œλ‘œ 차이점을 ν™•μΈν•΄λ³΄κΈ°λ‘œ ν•œλ‹€.

 

tokenizer.encode()

# 데이콘 'μ²­μ™€λŒ€ 청원 λΆ„λ₯˜ λŒ€νšŒ' λ°μ΄ν„°μ…‹μ—μ„œ μΆ”μΆœν•œ λ¬Έμž₯
tokenizer.encode('μ‹ ν˜ΌλΆ€λΆ€μœ„ν•œ 주택정책 보닀 λ³΄μœ‘μ‹œμ„€ λŠ˜λ €μ£Όμ„Έμš”')

 

κ²°κ³Ό

 

β—½ tokenizer.tokenize(SENTENCE), tokenizer.convert_tokens_to_ids(TOKENIZED_SENTENCE)λ₯Ό ν•œ λ²ˆμ— μˆ˜ν–‰ν•˜λŠ” κΈ°λŠ₯

β—½ Vocab에 μžˆλŠ” 값을 μ΄μš©ν•΄ 토큰 ν•˜λ‚˜ν•˜λ‚˜λ₯Ό vocab index둜 λ°”κΎΌ κ°’λ§Œ 좜λ ₯

 

tokenizer.encode_plus()

tokenizer.encode_plus('μ‹ ν˜ΌλΆ€λΆ€μœ„ν•œ 주택정책 보닀 λ³΄μœ‘μ‹œμ„€ λŠ˜λ €μ£Όμ„Έμš”')

 

κ²°κ³Ό

 

β—½ input_ids, token_type_ids, attention_maskλ₯Ό key둜 κ°€μ§€λŠ” λ”•μ…”λ„ˆλ¦¬ 좜λ ₯

β—½ input_ids: tokenizer.encode(~)와 동일

β—½ token_type_ids: 두 개의 λ¬Έμž₯이 μž…λ ₯으둜 듀어왔을 λ•Œ 첫 번째 λ¬Έμž₯(0), 두 번째 λ¬Έμž₯(1)을 κ΅¬λ³„ν•˜λŠ” 역할을 μˆ˜ν–‰ν•˜λ©° μ§€κΈˆμ€ λ¬Έμž₯이 ν•˜λ‚˜ 밖에 μ—†κΈ° λ•Œλ¬Έμ— λͺ¨λ“  값이 0으둜 좜λ ₯

β—½ attention_mask: padding이 좔가됐을 λ•Œ padding 토큰은 0, λ‚˜λ¨Έμ§€ 토큰은 λͺ¨λ‘ 1. μ§€κΈˆμ€ padding이 μΆ”κ°€λ˜μ§€ μ•Šμ€ μƒνƒœλΌμ„œ λͺ¨λ“  값이 1둜 좜λ ₯

 

정리

1️⃣ encode_plus()κ°€ 더 μžμ„Έν•œ 정보 제곡

2️⃣ 개인적인 κ²½ν—˜μ— μ˜ν•˜λ©΄ encode()λŠ” 토큰화 ν™•μΈμš©μœΌλ‘œλ§Œ μ“°λŠ” λŠλ‚Œμ΄μ—ˆκ³  λͺ¨λΈ ν•™μŠ΅μš© 데이터λ₯Ό μƒμ„±ν•˜λŠ” κ³Όμ •μ—μ„œλŠ” encode_plus()λ₯Ό μ‚¬μš©ν•˜λŠ” λŠλ‚Œ πŸ™ƒ