Closed robinsongh381 closed 4 years ago
SKTKoBERT의 Tokenizer에서도 동일한 현상을 보이는 것 같습니다.
from gluonnlp.data import SentencepieceTokenizer
from kobert.utils import get_tokenizer
tok_path = get_tokenizer()
sp = SentencepieceTokenizer(tok_path)
text = "한국어로는 안돼??ㅋ"
tokens = sp(text)
print("tokens:", tokens)
print("text[-1]:", text[-1])
print("tokens[-1]:",tokens[-1])
print("text[-1] == tokens[-1]:", text[-1] == tokens[-1])
# Output
tokens: ['▁한국', '어', '로', '는', '▁안', '돼', '??', 'ᄏ']
text[-1]: ㅋ
tokens[-1]: ᄏ
text[-1] == tokens[-1]: False
tokenization_kobert.py
도 sentencepiece 라이브러리를 가져오는 것 이외에는 추가적인 후처리를 하지 않습니다. 확실하진 않지만 sentencepiece 자체가 내부적으로 다른 형태의 ㅋ
으로 바꾸는 것일 수도 있습니다 (이는 저도 확인이 필요할 것 같습니다.)
아래는 Sentencepiece 라이브러리 자체의 normalization 관련 Documentation입니다.
from tokenization_kobert import KoBertTokenizer
tokenizer = KoBertTokenizer.from_pretrained("monologg/kobert")
text = "한국어로는 안돼??ㅋ"
tokens = tokenizer.tokenize(text)
print("tokens:", tokens)
print("text[-1]:", text[-1])
print("tokens[-1]:", tokens[-1])
print("text[-1] == tokens[-1]:", text[-1] == tokens[-1])
# Output
tokens: ['▁한국', '어', '로', '는', '▁안', '돼', '??', 'ᄏ']
text[-1]: ㅋ
tokens[-1]: ᄏ
text[-1] == tokens[-1]: False
이 부분은 아무래도 SKT 쪽에 직접 문의를 해보셔야 할 것 같습니다. 저도 그대로 가져와서 포팅을 한 것이어서 원인파악이 많이 어렵네요...
네 알겠습니다, 답변 감사합니다 !
안녕하세요
좋은 프로젝트 감사합니다
다음과 같은 상황에서 에러가 발생합니다
tokenizer = KoBertTokenizer.from_pretrained('monologg/kobert')
처럼 토크나이저를 가져와서"한국어로는 안돼??ㅋ' 의 문장을
tokenizer.tokenize( )
하게 되면 다음과 같은 아웃풋이 나옵니다하지만 마지막 값은 한글 자음 'ㅋ'과 다른 값입니다. (작은 'ㅋ')
실제로
tokenizer.convert_tokens_to_ids('ㅋ')
하게 되면 unknown 값인 0이 리턴되고, 작은 'ㅋ' 값을 넣으면 정상적으로 나옵니다.이 때문에 다음과 같은 상황에서 에러가 발생합니다