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

fine-tuning details? #1

Closed
bwoomin opened this issue Oct 10, 2019 · 4 comments
Closed

fine-tuning details? #1

bwoomin opened this issue Oct 10, 2019 · 4 comments

Comments

@bwoomin
Copy link

bwoomin commented Oct 10, 2019

우선, 좋은 모델 공개해주셔서 감사합니다.

KoBERT모델을 KorQuAD 1.0 에 대해서 fine-tuning 하고 성능을 측정하였는데,

제 예상보다 성능이 안나오는 것 같아 저자분께 두가지 질문을 드리고자 합니다. ( F1 이 70정도 나옵니다)

  1. 혹시 KorQuAD 1.0 에 대해 성능 측정하신 결과가 있으신지 궁금합니다.

  2. 저는 Hugging face 에서 공개한 pytorch_pretrained_bert repo에 있던 run_squad 코드에서 모델과 tokenizer를 KoBERT에서 제공하는 pretrained model과 tokenizer로 바꾸어서 사용하고 있고 아래와 같이 수정하였습니다.

    bert, vocab = get_pytorch_kobert_model()
    config = bert.config
    model = BertForQuestionAnswering(config)
    model.bert = bert
    tok = get_tokenizer()
    tokenizer = nlp.data.BERTSPTokenizer(tok, vocab)

혹시 이렇게 implement 하는 것 외에 다른 detail이 있을지와 성능 관련한 의견을 듣고 싶습니다.

@jinyeo
Copy link

jinyeo commented Oct 10, 2019

SQuAD문제는 logit값 계산 이후로 단어 토큰으로 환원하는 부분이 성능에 중요한 영향을 미칩니다. 여기엔 MRC논문 안에는 언급되지않은 휴리스틱한 부분이 있습니다. 이부분이 허깅페이스 코드에서는 영어에 최적화되어 있으므로 한국어에 맞게 수정을 해야 합니다.

@bwoomin
Copy link
Author

bwoomin commented Oct 10, 2019

SQuAD문제는 logit값 계산 이후로 단어 토큰으로 환원하는 부분이 성능에 중요한 영향을 미칩니다. 여기엔 MRC논문 안에는 언급되지않은 휴리스틱한 부분이 있습니다. 이부분이 허깅페이스 코드에서는 영어에 최적화되어 있으므로 한국어에 맞게 수정을 해야 합니다.

답변 주셔서 감사합니다. 저는 korquad 팀에서 공식 제공하는 evaluate-v1.0.py 파일을 이용하여 성능 측정을 했습니다. 해당 파일에서는 한국어 특성상 어절단위 F1이 매우 떨어지게 나온다는 점 때문에 음절단위 F1 점수를 측정합니다.

Word piece token을 원래 text로 되돌린 후 음절 단위로 F1 score를 측정한다면 말씀하신 부분이 끼치는 영향이 bert-base-multilingual 모델(original) 과 F1이 20이상 차이나는 결과를 가져올 지는 의문이 드는데 어떻게 생각하시는지요?

@haven-jeon
Copy link
Collaborator

haven-jeon commented Oct 10, 2019

안녕하세요.

참고로 모델은 Korean BERT pre-trained cased (KoBERT) 입니다. 따라서 tokenizer = nlp.data.BERTSPTokenizer(tok, vocab, lower=False) 와 같은 형태로 쓰셔야 됩니다. 토크나이저의 자세한 사용 예시는 README.md에 링크된 ipython 노트북을 확인해보세요.

감사합니다.

@haven-jeon
Copy link
Collaborator

해당 이슈는 클로즈 합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants