SKTBrain / KoBERT

Korean BERT pre-trained cased (KoBERT)
Apache License 2.0
1.28k stars 372 forks source link

get_pytorch_kobert_model 불러오기 오류 #67

Closed GohunPark closed 2 years ago

GohunPark commented 2 years ago

BERT 모델, Vocabulary 불러오기

bertmodel, vocab = get_pytorch_kobert_model() 이거 실행시킬 때 자꾸 아래와 같은 오류가 뜹니다. 어떻게 해결하며 좋을까요? ConnectionError: HTTPSConnectionPool(host='kobert.blob.core.windows.net', port=443): Max retries exceeded with url: /models/kobert/pytorch/kobert_v1.zip (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7f2a668bf850>: Failed to establish a new connection: [Errno -2] Name or service not known'))

haven-jeon commented 2 years ago

Azure에서 서빙하던 모델 다운로드 서비스가 동작하지 않아서 발생한 문제로 보입니다. blob 저장소가 제 관리를 떠난 곳이라서.. 조치하기 어려울거 같습니다.

https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf

위 주소는 hugingface hub를 사용하고 있어 같은 모델은 받는데 문제 없어 보입니다. 불편하시겠지만 위 링크의 모델을 사용하시면 어떨까 합니다.

jiwon199 commented 2 years ago

Azure의 모델 다운로드 서비스가 동작하지 않는 것이 일시적인 현상인지 아니면 아예 서비스를 중단한건지 알려주실 수 있나요....?

SoohyeonB commented 2 years ago

BERT 모델, Vocabulary 불러오기

bertmodel, vocab = get_pytorch_kobert_model()

해당 코드에서 bert 모델을 불러오는 것까지는 완성했는데 혹시 vocab은 어떤 형식으로 불러와서 사용하는지 여쭤볼 수 있을까요? 올려주신 코드에서 어떻게 vocab 형식으로 사용하는지 감이 안와서 여쭤봅니다.

haven-jeon commented 2 years ago

BERT 모델, Vocabulary 불러오기 bertmodel, vocab = get_pytorch_kobert_model()

해당 코드에서 bert 모델을 불러오는 것까지는 완성했는데 혹시 vocab은 어떤 형식으로 불러와서 사용하는지 여쭤볼 수 있을까요? 올려주신 코드에서 어떻게 vocab 형식으로 사용하는지 감이 안와서 여쭤봅니다.

https://github.com/SKTBrain/KoBERT/blob/8df69ec6b588ae661bef98d28ec29448482bbe6e/kobert/pytorch_kobert.py#L55 참고 부탁드립니다.

haven-jeon commented 2 years ago

Azure의 모델 다운로드 서비스가 동작하지 않는 것이 일시적인 현상인지 아니면 아예 서비스를 중단한건지 알려주실 수 있나요....?

저도 확답을 드리기 어렵습니다. 해당 다운로드가 SKT에서 제공하던 리소스여서요. 다만 좀더 확실한 말씀을 드리자면, https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf 를 통한 활용은 다운로드 이슈가 없을 것으로 보이구요, 추후 huggingface transformers가 업데이트 되더라도 코드를 고치거나 하는 고생을 하니 않아도 되서 전환을 추천드립니다.

tacowasabii commented 2 years ago

tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1') KoBERTTokenizer 클래스 안에 위같은 함수는 없던데 이 부분은 어떻게 해결해야 하나요? 참조하셨던 huggingface transformers의 AutoTokenizer 클래스엔 from_pretrained 함수가 있던데 KoBERTTokenizer 클래스에도 추가해야 되는거 아닌가요? 잘 몰라서 질문드립니다.

myejin commented 2 years ago

알려주신 링크(https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf) 의 모델을 사용해봤는데, tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1') 토크나이저 불러오는 코드에서 아래 에러가 발생합니다. 해결방법이 있을까요?

OSError: Model name 'skt/kobert-base-v1' was not found in tokenizers model name list (xlnet-base-cased, xlnet-large-cased). We assumed 'skt/kobert-base-v1' was a path, a model identifier, or url to a directory containing vocabulary files named ['spiece.model'] but couldn't find such vocabulary files at this path or url.
Lee-jaehyun commented 2 years ago

저도 같은 문제로 에러가 나서요... 그럼 Kobert 모델은 사용할 수 없는건가요???

haven-jeon commented 2 years ago

@Lee-jaehyun , @myejin 님 아래와 같이 이상없이 동작하는걸 확인 했습니다.

다시한번 확인 부탁드릴께요.

(kor_gec) gogamza@GOGAMZA-T14s:~/KoBART$ pip install 'git+https://github.com/SKTBrain/KoBERT.git#egg=kobert_tokenizer&subdirectory=kobert_hf'
Collecting kobert_tokenizer
  Cloning https://github.com/SKTBrain/KoBERT.git to /tmp/pip-install-1w60v5ii/kobert-tokenizer_e8a3dc5714a0488b882610e1da04b63e
  Running command git clone -q https://github.com/SKTBrain/KoBERT.git /tmp/pip-install-1w60v5ii/kobert-tokenizer_e8a3dc5714a0488b882610e1da04b63e
(kor_gec) gogamza@GOGAMZA-T14s:~/KoBART$ pip list | grep  'transformers'
transformers       4.12.3
(kor_gec) gogamza@GOGAMZA-T14s:~/KoBART$ python
Python 3.8.11 (default, Aug  3 2021, 15:09:35) 
[GCC 7.5.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from kobert_tokenizer import KoBERTTokenizer
>>> tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1')
The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. 
The tokenizer class you load from this checkpoint is 'XLNetTokenizer'. 
The class this function is called from is 'KoBERTTokenizer'.
>>> 
haven-jeon commented 2 years ago

tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1') KoBERTTokenizer 클래스 안에 위같은 함수는 없던데 이 부분은 어떻게 해결해야 하나요? 참조하셨던 huggingface transformers의 AutoTokenizer 클래스엔 from_pretrained 함수가 있던데 KoBERTTokenizer 클래스에도 추가해야 되는거 아닌가요? 잘 몰라서 질문드립니다.

https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf 에 사용법이 있습니다.

wooni97 commented 2 years ago

주신 코드로 bertmodel 불러오기는 되는데 참고자료를 봐도 사전은 어떻게 불러오는지 잘 모르겠습니다 이 부분 알려주실 수 있으신가요?

haven-jeon commented 2 years ago

주신 코드로 bertmodel 불러오기는 되는데 참고자료를 봐도 사전은 어떻게 불러오는지 잘 모르겠습니다 이 부분 알려주실 수 있으신가요?

새로운 KoBERTTokenizerhttps://huggingface.co/transformers/model_doc/xlnet.html#transformers.XLNetTokenizer 의 함수를 공유하고 있어서 API 참고하시면 되구요, 기존 vocab에서 제공되는 대부분의 함수들이 API에 포함되어 있어서 vocab을 별도 access할 필요는 없습니다.

haven-jeon commented 2 years ago

tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1') KoBERTTokenizer 클래스 안에 위같은 함수는 없던데 이 부분은 어떻게 해결해야 하나요? 참조하셨던 huggingface transformers의 AutoTokenizer 클래스엔 from_pretrained 함수가 있던데 KoBERTTokenizer 클래스에도 추가해야 되는거 아닌가요? 잘 몰라서 질문드립니다.

https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf 에 사용법이 있습니다.

@tacowasabii https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf 참고하세요.

tacowasabii commented 2 years ago

주신 코드로 bertmodel 불러오기는 되는데 참고자료를 봐도 사전은 어떻게 불러오는지 잘 모르겠습니다 이 부분 알려주실 수 있으신가요?

새로운 KoBERTTokenizerhttps://huggingface.co/transformers/model_doc/xlnet.html#transformers.XLNetTokenizer 의 함수를 공유하고 있어서 API 참고하시면 되구요, 기존 vocab에서 제공되는 대부분의 함수들이 API에 포함되어 있어서 vocab을 별도 access할 필요는 없습니다.

BERT 모델, Vocabulary 불러오기 bertmodel, vocab = get_pytorch_kobert_model()

해당 코드에서 bert 모델을 불러오는 것까지는 완성했는데 혹시 vocab은 어떤 형식으로 불러와서 사용하는지 여쭤볼 수 있을까요? 올려주신 코드에서 어떻게 vocab 형식으로 사용하는지 감이 안와서 여쭤봅니다.

https://github.com/SKTBrain/KoBERT/blob/8df69ec6b588ae661bef98d28ec29448482bbe6e/kobert/pytorch_kobert.py#L55

참고 부탁드립니다.

vocab을 불러오는 과정에서 문제가 생깁니다. 위에서 말씀해주신대로 api도 참고해보았고 알려주신 클래스에 들어가 기존에 vocab을 가져왔던 함수들을 모두 그대로 사용하고 import도 다했을때 원래 발생했던 근본적인 문제에 다시 부딪치게 됩니다. vocab을 가져오는 기존의 코드를 사용하는건 Azure의 모델 다운로드 서비스가 동작하지 않는 것으로 인해 사용하기 힘들어 보입니다. 해결방법이 없을까요? 중요한 프로젝트를 진행중이라 도움을 주시면 정말 감사할것 같습니다.

haven-jeon commented 2 years ago

@tacowasabii https://github.com/SKTBrain/KoBERT/issues/67#issuecomment-968548000 참고하세요.

happyme2 commented 2 years ago

안녕하세요 저도 동일한 vocab 사전 불러오는 문제가 있었는데, 아래와 같이 sentencepiece==0.1.91, transformers==4.8.2 버전을 맞추어주니 작동하였습니다. 혹시 참고가 되실까 하여 공유드립니다.

!pip install mxnet
!pip install gluonnlp pandas tqdm
!pip install sentencepiece==0.1.91
!pip install transformers==4.8.2
!pip install torch
DagunOh commented 2 years ago

안녕하세요 저도 동일한 vocab 사전 불러오는 문제가 있었는데, 아래와 같이 sentencepiece==0.1.91, transformers==4.8.2 버전을 맞추어주니 작동하였습니다. 혹시 참고가 되실까 하여 공유드립니다.

!pip install mxnet
!pip install gluonnlp pandas tqdm
!pip install sentencepiece==0.1.91
!pip install transformers==4.8.2
!pip install torch

안녕하세요, 혹시 코드 내용을 공유해주실 수 있으실까요..? 버전을 맞추어주어도 vocab을 불러오는데 에러가 뜹니다 ㅠ

v1ktwiz commented 2 years ago

전의 코드를 사용할 때 비해서 train 데이터셋이 거의 학습이 안되는 상태입니다. 가령 트레인 데이터셋은 20 에포크 동안 accuracy가 .4에서 .5 언저리였는데 기존에는 1에 가깝게 됐거든요 물론 그건 과적합인데...5 에포크만에도 .9는 넘겼고 테스트 데이터에서도 .7~ .75 정도는 됐는데 이것도 .4 정도네요. Huggingface에서 사용하는 tokenizer가 sentencepiece에서 새로운 토크나이져로 달라져서 성능하락이 발생한거 같습니다. 확인해주실 수 있을까요?

haven-jeon commented 2 years ago

전의 코드를 사용할 때 비해서 train 데이터셋이 거의 학습이 안되는 상태입니다. 가령 트레인 데이터셋은 20 에포크 동안 accuracy가 .4에서 .5 언저리였는데 기존에는 1에 가깝게 됐거든요 물론 그건 과적합인데...5 에포크만에도 .9는 넘겼고 테스트 데이터에서도 .7~ .75 정도는 됐는데 이것도 .4 정도네요. Huggingface에서 사용하는 tokenizer가 sentencepiece에서 새로운 토크나이져로 달라져서 성능하락이 발생한거 같습니다. 확인해주실 수 있을까요?

@v1ktwiz 인코딩 결과가 두 토크나이저가 어떠한 상황에서 어떻게 다른지 확인을 해보면 어떨까 합니다. 두 토크나이저 모두 sentencepiece를 사용하고있고 동일한 토크나이저 모델을 사용하고 있어서 결과가 다르게 나오면 문제가 있는겁니다.

JungJunHa commented 2 years ago

안녕하세요 저도 동일한 vocab 사전 불러오는 문제가 있었는데, 아래와 같이 sentencepiece==0.1.91, transformers==4.8.2 버전을 맞추어주니 작동하였습니다. 혹시 참고가 되실까 하여 공유드립니다.

!pip install mxnet
!pip install gluonnlp pandas tqdm
!pip install sentencepiece==0.1.91
!pip install transformers==4.8.2
!pip install torch

저도 지금 vocab 불러오는데에 자꾸 에러가 생겨서ㅠㅠ 혹시 코드 공유 가능하실까요?? get_vocab으로 가져와도 안되네요ㅠㅠ

happyme2 commented 2 years ago

@JungJunHa @DagunOh 안녕하세요. 저는 올려드린 버전으로 환경 설치 후, https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf에서 tokenizer와 model 불러오는 코드 그대로 사용하였으며

def get_kobert_model(model_path, vocab_file, ctx="cpu"):
    bertmodel = BertModel.from_pretrained(model_path)
    device = torch.device(ctx)
    bertmodel.to(device)
    bertmodel.eval()
    vocab_b_obj = nlp.vocab.BERTVocab.from_sentencepiece(vocab_file,
                                                         padding_token='[PAD]')
    return bertmodel, vocab_b_obj
import gluonnlp as nlp
bertmodel, vocab = get_kobert_model('skt/kobert-base-v1',tokenizer.vocab_file)

이렇게 불러왔습니다. 추가적으로 https://github.com/SKTBrain/KoBERT/issues/53 참고하였습니다.

hyejinhahihong commented 2 years ago

@JungJunHa @DagunOh 안녕하세요. 저는 올려드린 버전으로 환경 설치 후, https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf에서 tokenizer와 model 불러오는 코드 그대로 사용하였으며

def get_kobert_model(model_path, vocab_file, ctx="cpu"):
    bertmodel = BertModel.from_pretrained(model_path)
    device = torch.device(ctx)
    bertmodel.to(device)
    bertmodel.eval()
    vocab_b_obj = nlp.vocab.BERTVocab.from_sentencepiece(vocab_file,
                                                         padding_token='[PAD]')
    return bertmodel, vocab_b_obj
import gluonnlp as nlp
bertmodel, vocab = get_kobert_model('skt/kobert-base-v1',tokenizer.vocab_file)

이렇게 불러왔습니다. 추가적으로 #53 참고하였습니다.

안녕하세요. 답변주신대로 model, tokenizer 까지는 잘 불러왔는데 저는 data_train = BERTDataset(dataset_train, [sent_idx], [label_idx], tok, max_len, True, False) 부분에서 예전에는 나지 않던 에러인

/usr/local/lib/python3.7/dist-packages/sentencepiece.py in LoadFromFile(self, arg)
    175 
    176     def LoadFromFile(self, arg):
--> 177         return _sentencepiece.SentencePieceProcessor_LoadFromFile(self, arg)
    178 
    179     def Init(self,

TypeError: not a string

이런식으로 에러가 뜨는 것 같습니다. 혹시 동일한 에러가 뜨시는 분들 있으신가요? 해결하셨다면 어떤 식으로 해결하셨는지 공유주신다면 정말 감사하겠습니다.

=> https://githubmemory.com/@tacowasabii 참고하여 해결했습니다. @tacowasabii 님 감사합니다.

bage79 commented 2 years ago

현재 모든 model, tokenzier, datasets 파일의 다운로드 및 코드의 실행이 정상으로 확인되었습니다. 이 이슈를 클로즈합니다.

혹시 다시 이슈가 발견되시면, 새로운 이슈로 재등록 부탁드립니다.