SKT-AI/KoGPT2

현 버전 샘플코드 공백 발산

Closed this issue · 13 comments

최근 커밋 이후로 how to use 샘플 코드를 실행시켰을때 공백( ▁ )만 발산하고 루프가 끊어지지 않네요.

transfer learning을 해보아도 현 버전으로는 여전히 잘 동작하지 않네요.

혹시 해결할 방법이 있을까요?

어떤 커밋 이후인지 알수 있을까요?

그리고 발산되는 코드와 작동 환경을 함께 보여주시면 reproduce해볼 수 있을거 같습니다.

5월 22일 requirements.txt 를 transformers == 2.4.1 로 수정한 이후 부터

문장생성을 생성할때 공백을 만나면 항상 공백( ▁ )만 발산하고 나아가지가 않네요.

'2019년 한해를 보내며,로 문장을 생성해내는 간단한 예제'에서도 같은 문제가 발생합니다.

구글 코랩환경에서 동작합니다.
https://colab.research.google.com/github/newfull5/AI-Project/blob/master/KoGPT2_Sample.ipynb

감사합니다!!

아마 !pip install . 때문에 문제가 발생하는 것으로 보입니다.

코랩 환경에서,
!cd KoGPT2 && pip install . 이 줄 대신 %cd KoGPT2로 바꿔서 테스트해보세요.

아마 !pip install . 때문에 문제가 발생하는 것으로 보입니다.

코랩 환경에서,
!cd KoGPT2 && pip install . 이 줄 대신 %cd KoGPT2로 바꿔서 테스트해보세요.

!cd KoGPT2 && pip install -r requirements.txt
!cd KoGPT2 && pip install .

위 코드를

%cd KoGPT2
!pip install -r requirements.txt
!pip install .

위와 같이 바꾸어 진행해 보았지만 달라지지 않았습니다.

아마 setup시에 경로 설정탓은 아닌듯 합니다.

https://colab.research.google.com/drive/1k34tAA8KE2LFm7m-VW4Or3idGi2bBev9#scrollTo=dkIMMS_9ofvM

requirements.txt를 수정해보세요.

gluonnlp==0.9.1
mxnet==1.6.0
sentencepiece==0.1.85
transformers==2.6.0

requirements.txt를 수정해보세요.

gluonnlp==0.9.1
mxnet==1.6.0
sentencepiece==0.1.85
transformers==2.6.0

말씀하신 방법대로 requirements.txt 를 수정하여 문제를 해결할 수 있었습니다.

대단히 감사합니다!

저도 같은 문제가 있었는데 requrements.txt 수정하고 문제가 해결되었습니다. 이는 PR을 주셔야 할듯 합니다. @zetbouaka

저도 같은 문제가 있었는데 requirements.txt를 수정하니 해결되었습니다. 감사합니다!

MXNet 모델도 동일한 현상이 있어서 테스트 해보니..

sentencepiece==0.1.85

sentencepiece가 버전업 되면서 뭔가 바뀐거 같네요. 확인은 더 해보겠습니다.

sentencepiece에서 SampleEncodeAsPieces함수의 alpha값이 이전 버전에서는 동작하지 않았는데, 최근 버전에서 동작하게 되어서 최신 sentencepiece에서는 아래와 같이 alpha값을 0으로 줘야 됩니다.

대부분 모델을 인퍼런스로 사용하는거라 deterministic 하게 0 으로 주는게 맞습니다.

tok = SentencepieceTokenizer(tok_path, 0, 1)                                                                                                                                          
tok = SentencepieceTokenizer(tok_path)                                                                                                                                                
toked = tok(sent)                                                                                                                                                                     
print(toked)                                                                                                                                                                          
['▁', '2', '0', '1', '9', '년', '▁', '한', '해', '를', '▁', '보', '내', '며', ',', '▁', '새', '해', '에', '는', '▁', '더', '▁', '많', '은', '▁', '사', '람', '들', '이', '▁', '새', '해', '에', '▁', '이', '루', '고', '자', '▁', '하', '는', '▁', '소', '망', '과', '▁', '희', '망', '을', '▁', '되', '새', '겨', '보', '는', '▁', '시', '간', '이', '▁', '되', '었', '으', '면', '▁', '좋', '겠', '다', '.']

tok = SentencepieceTokenizer(tok_path, 0, 0)                                                                                                                                         
toked = tok(sent)                                                                                                                                                                    
print(toked)                                                                                                                                                                         
['▁2019', '년', '▁한', '해를', '▁보내', '며', ',', '▁새해', '에는', '▁더', '▁많은', '▁사람들이', '▁새해', '에', '▁이루고', '자', '▁하는', '▁소망', '과', '▁희망을', '▁되새', '겨', '보는', '▁시간이', '▁되었', '으면', '▁좋겠다', '.']

tok = SentencepieceTokenizer(tok_path)                                                                                                                                               
toked = tok(sent)                                                                                                                                                                    
print(toked)                                                                                                                                                                         
['▁', '2', '0', '1', '9', '년', '▁', '한', '해', '를', '▁', '보', '내', '며', ',', '▁', '새', '해', '에', '는', '▁', '더', '▁', '많', '은', '▁', '사', '람', '들', '이', '▁', '새', '해', '에', '▁', '이', '루', '고', '자', '▁', '하', '는', '▁', '소', '망', '과', '▁', '희', '망', '을', '▁', '되', '새', '겨', '보', '는', '▁', '시', '간', '이', '▁', '되', '었', '으', '면', '▁', '좋', '겠', '다', '.']

더 이상 문제 없음으로 판단하고 해당 이슈는 클로즈 하겠습니다.