ratsgo / embedding

한국어 임베딩 (Sentence Embeddings Using Korean Corpora)
https://ratsgo.github.io/embedding
MIT License
452 stars 129 forks source link

ELMo, BERT 활용에 관한 질문 #59

Closed hccho2 closed 4 years ago

hccho2 commented 4 years ago

NLP에 관한 질문 몇 개 드립니다.

  1. SQUAD task는 입력으로 paragraph, question을 주면, Answer를 만들어 내야 하는 문제로 알고 있습니다. 이때 Answer를 만들어 내는 방식이 궁금합니다.

    • 문장을 생성하는 방식으로 모델이 설계되는지?
    • 아니면 paragraph속에 답변의 시작위치/끝위치를 찾아내는 방식으로 모델이 설계되는지? SQUAD task에서 모델을 어떻게 만들어야 하는지 궁금합니다.
  2. ELMo/BERT 모두 문장을 Encoding하는데는 우수한 성능을 가지고 있습니다.

기계번역 같은 (문장입력 --> 문장 생성) seq2seq 모델에서 encoder부분에서는 ELMo/BERT를 사용하여 encoding이 가능할 것 같습니다. 문장을 생성해야 하는 decoder부분에서도 ELMo/BERT를 활용하는 것이 가능할 까요?

ratsgo commented 4 years ago

@hccho2 님 질문 감사드립니다. 제가 아는 한 말씀드리겠습니다.

1. SQUAD task는 입력으로 paragraph, question을 주면, Answer를 만들어 내야 하는 문제로 알고 있습니다. 이때 Answer를 만들어 내는 방식이 궁금합니다. BERT가 SQUAD의 QUESTION-ANSWERING task를 수행할 때, 입력은 질의 문장(question)과 단락(paragraph), 출력은 단락 내 시작 위치(start index)와 끝 위치(end index)인 것으로 알고 있습니다. 출력 쪽을 구체적으로 말씀드리면 단락 각각의 토큰에 대해 시작 스코어(logit)와 끝 스코어(logit)가 나오고, 여기에 argmax를 취합니다. BERT 논문의 그림을 참고로 첨부합니다.

스크린샷 2019-12-21 오후 11 41 53

실제 작동이 궁금하실 것 같아 예시를 웹에서 찾아봤습니다. 출처는 이곳이고요. 이해를 돕기 위해 약간 변형해서 인용했습니다.

question = 'When did Victoria enact its constitution?'
paragraph = "Victoria has a written constitution enacted in 1975, but based on the 1855 colonial constitution, passed by the United Kingdom Parliament as the Victoria Constitution Act 1855, which establishes the Parliament as the state's law-making body for matters coming under state responsibility. The Victorian Constitution can be amended by the Parliament of Victoria, except for certain 'entrenched' provisions that require either an absolute majority in both houses, a three-fifths majority in both houses, or the approval of the Victorian people in a referendum, depending on the provision."
answer = model.predict(question, paragraph)
{
    "result": {
        "answer": "1975",
        "paragraph": [
            "Victoria",
            "has",
            "a",
            "written",
            "constitution",
            "enacted",
            "in",
            "1975,",
            (하략)
        ],
        "end": 7,
        "start": 7
    }
}

2. 문장을 생성해야 하는 decoder부분에서도 ELMo/BERT를 활용하는 것이 가능할까요? ELMo의 경우 언어모델로 프리트레인을 수행하기 때문에 문장 생성 태스크도 수행할 수 있을 거라 봅니다. 다만 BERT의 경우 좀 더 나은 representation을 얻기 위해 트랜스포머의 인코더만 사용(디코더는 제외)하고 있기 때문에, 원하는 디코딩 성능이 나오지 않을 수 있습니다. GPT의 경우 트랜스포머의 디코더만 사용하고 있기 때문에 문장 생성 태스크를 위해서라면 GPT 모델을 쓰는 것이 낫다는 게 제 의견입니다.

hccho2 commented 4 years ago

답변 감사합니다. 많이 배웠습니다.

black7375 commented 4 years ago

문장 생성 관련 내용 찾아보는 중인데 감사합니다.