Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] kobert를 Colab에서 구현할 때, tokenizer 사용시, nbest_size 오류 등이 발생 #89

Closed
KKang29 opened this issue Aug 7, 2022 · 11 comments
Assignees
Labels
bug Something isn't working

Comments

@KKang29
Copy link

KKang29 commented Aug 7, 2022

🐛 Bug

kobert를 Colab에서 구현할 때, tokenizer 사용시, nbest_size 오류 등이 발생합니다.

To Reproduce

!pip install ipywidgets # for vscode
!pip install git+https://git@github.com/SKTBrain/KoBERT.git@master

import torch
from torch import nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import Dataset, DataLoader
import gluonnlp as nlp
import numpy as np
from tqdm.notebook import tqdm

from kobert import get_tokenizer
from kobert import get_pytorch_kobert_model

from transformers import AdamW
from transformers.optimization import get_cosine_schedule_with_warmup

CPU

device = torch.device("cpu")

GPU

device = torch.device("cuda:0")

bertmodel, vocab = get_pytorch_kobert_model(cachedir=".cache")

!wget -O .cache/ratings_train.txt http://skt-lsl-nlp-model.s3.amazonaws.com/KoBERT/datasets/nsmc/ratings_train.txt
!wget -O .cache/ratings_test.txt http://skt-lsl-nlp-model.s3.amazonaws.com/KoBERT/datasets/nsmc/ratings_test.txt

dataset_train = nlp.data.TSVDataset(".cache/ratings_train.txt", field_indices=[1,2], num_discard_samples=1)
dataset_test = nlp.data.TSVDataset(".cache/ratings_test.txt", field_indices=[1,2], num_discard_samples=1)

tokenizer = get_tokenizer()
tok = nlp.data.BERTSPTokenizer(tokenizer, vocab, lower=False)

class BERTDataset(Dataset):
def init(self, dataset, sent_idx, label_idx, bert_tokenizer, max_len,
pad, pair):
transform = nlp.data.BERTSentenceTransform(
bert_tokenizer, max_seq_length=max_len, pad=pad, pair=pair)

    self.sentences = [transform([i[sent_idx]]) for i in dataset]
    self.labels = [np.int32(i[label_idx]) for i in dataset]

def __getitem__(self, i):
    return (self.sentences[i] + (self.labels[i], ))

def __len__(self):
    return (len(self.labels))

Setting parameters

max_len = 64
batch_size = 64
warmup_ratio = 0.1
num_epochs = 5
max_grad_norm = 1
log_interval = 200
learning_rate = 5e-5

data_train = BERTDataset(dataset_train, 0, 1, tok, max_len, True, False)
data_test = BERTDataset(dataset_test, 0, 1, tok, max_len, True, False)

RuntimeError Traceback (most recent call last)
in ()
----> 1 data_train = BERTDataset(dataset_train, 0, 1, tok, max_len, True, False)
2 data_test = BERTDataset(dataset_test, 0, 1, tok, max_len, True, False)

8 frames
/usr/local/lib/python3.7/dist-packages/sentencepiece/init.py in Encode(self, input, out_type, add_bos, add_eos, reverse, emit_unk_piece, enable_sampling, nbest_size, alpha, num_threads)
502 nbest_size == 1 or alpha is None):
503 raise RuntimeError(
--> 504 'When enable_sampling is True, We must specify "nbest_size > 1" or "nbest_size = -1", '
505 'and "alpha". "nbest_size" is enabled only on unigram mode ignored in BPE-dropout. '
506 'when "nbest_size = -1" , this method samples from all candidates on the lattice '

RuntimeError: When enable_sampling is True, We must specify "nbest_size > 1" or "nbest_size = -1", and "alpha". "nbest_size" is enabled only on unigram mode ignored in BPE-dropout. when "nbest_size = -1" , this method samples from all candidates on the lattice instead of nbest segmentations.

버그를 재현하기 위한 재현절차를 작성해주세요.
(Kobert를 활용한 NSMC 분류 작업(튜토리얼) 에서 공개된 코드 동일하게 사용)

Environment

Colab

@KKang29 KKang29 added the bug Something isn't working label Aug 7, 2022
@Kisooofficial
Copy link

저도 같은 에러가 납니다. 어제까지 잘 돌아갔는데, dataset을 구축하는 과정에서 같은 에러가 났습니다.

@DongGeun123
Copy link

저도 몇일전까지 잘 돌아갔는데 같은 에러가 났습니다.

@bage79 bage79 self-assigned this Aug 10, 2022
@bage79
Copy link
Collaborator

bage79 commented Aug 10, 2022

제가 이 repo에 포함된 아래 두 개의 nsmc 예제를 돌려 보았는데, 모두 정상 실행이 되네요.

image
python 3.7.0 환경에서 실행하였습니다.

@KangYunPark @Kisooofficial @DongGeun123

  • 혹시 python 버전 몇에서 실행하셨나요?
  • 실행하셨던 py 또는 ipynb 파일 공유 부탁드립니다.

@testbeta12
Copy link

testbeta12 commented Aug 10, 2022

안녕하세요!
저 역시도 https://github.com/SKTBrain/KoBERT/blob/master/scripts/NSMC/naver_review_classifications_pytorch_kobert.ipynb 이 링크에 해당하는 코드를 돌려보았는데
image

같은 에러가 발생하였습니다. @bage79

@DongGeun123
Copy link

@bage79

https://github.com/SKTBrain/KoBERT/blob/master/scripts/NSMC/naver_review_classifications_gluon_kobert.ipynb

위에 올려주신 파일을 똑같이 colab에서 실행한결과 같은 오류가 났습니다 파이썬 버전은 3.7.13 입니다

image

@herokim97
Copy link

herokim97 commented Aug 10, 2022

@bage79 님께
https://github.com/SKTBrain/KoBERT/blob/master/scripts/NSMC/naver_review_classifications_gluon_kobert.ipynb
동일한 문제를 겪고 있습니다 현 python version은 3.7.0 입니다.
image
image

@bage79
Copy link
Collaborator

bage79 commented Aug 10, 2022

@KangYunPark @Kisooofficial @herokim97 @DongGeun123 @testbeta12 님,
저도 동일한 오류가 재현되는 것을 확인하였습니다.
아마도 며칠 전 sentencepiece 패키지가 업데이트 되면서, 다른 패키지들도 업데이트 되면서 오류가 발생한 것으로 보입니다.

각 패키지 버전의 최대치를 제한하여 커밋하였습니다. 47a69af
python 3.7.0 기준으로 두 노트북이 실행되는것을 확인하였습니다.

git pull 받으신 후에 다시한번 확인 부탁드립니다.

@timbergrizz
Copy link

동일한 오류 발생했는데, sentencepiece 버전을 requirements 버전에 맞춰서 설치했을 시 정상 작동하는 것 확인했습니다. 아마 sentencepiece 먼저 pip를 통해 기존 버전 설치한 이후 작동시키면 정상 작동할 것 같습니다.

@DongGeun123
Copy link

@bage79

다시 git pull 하고 실행해보니 정상적으로 작동하였습니다. 감사합니다.

@herokim97
Copy link

동일한 문제에 런타임 재시작과 sentencepiece 버전을 동일화 시키니 문제가 해결되었습니다 감사합니다.

@KKang29
Copy link
Author

KKang29 commented Aug 19, 2022

다들 좋은 답변 감사합니다. 문제 해결이 되었으니 클로즈 시키겠습니다.

@KKang29 KKang29 closed this as completed Aug 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

7 participants