ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (14) DistilBERT를 활용한 MRC 실습
    자연어처리 2023. 8. 2. 00:40
    728x90

    1. MRC(Machine Reading Comprehension)

    • 주어진 질문에 정확한 답변을 추출하는 자연어처리 작업
    • 컴퓨터가 사람처럼 텍스트를 이해하고 추론하여 정보를 얻고 질문에 맞는 답변을 찾는 과정
    !pip install -U transformers datasets scipy scikit-learn evaluate
    import datasets
    from datasets import load_dataset, ClassLabel
    import random
    import pandas as pd
    from IPython.display import display, HTML
    from transformers import AutoTokenizer, pipeline
     
    raw_datasets = load_dataset('klue', 'mrc')

    def show_rand_elements(dataset, num_examples = 10):
      picks = []
      for _ in range(num_examples):
        pick = random.randint(0,len(dataset)-1)
        while pick in picks:
          pick = random.randint(0,len(dataset)-1)

        picks.append(pick)
      df = pd.DataFrame(dataset[picks])

      for column, typ in dataset.features.items():
        if isinstance(typ, ClassLabel):
          df[column] = df[column].transform(lambda i: typ.names[i])

      display(HTML(df.to_html()))
     
    show_rand_elements(raw_datasets['train'])

    raw_datasets['train'][0]

    print('context: ',raw_datasets['train'][0]['context'])
    print('question: ',raw_datasets['train'][0]['question'])
    print('answers: ',raw_datasets['train'][0]['answers'])

    print('context: ',raw_datasets['validation'][0]['context'])
    print('question: ',raw_datasets['validation'][0]['question'])
    print('answers: ',raw_datasets['validation'][0]['answers'])

    tokenizer = AutoTokenizer.from_pretrained('bespin-global/klue-bert-base-mrc')
     
    context = raw_datasets['train'][0]['context']
    question = raw_datasets['train'][0]['question']

    inputs = tokenizer(question, context)
    tokenizer.decode(inputs['input_ids'])

     

    inputs = tokenizer(
        question,
        context,
        max_length = 100,
        truncation = 'only_second',
        stride = 50,
        return_overflowing_tokens=True
    )
    for ids in inputs['input_ids']:
      print(tokenizer.decode(ids))

    inputs = tokenizer(
        question,
        context,
        max_length = 100,
        truncation = 'only_second',
        stride = 10,
        return_overflowing_tokens=True,
        return_offsets_mapping=True
    )
     
    for ids in inputs['input_ids']:
      print(tokenizer.decode(ids))

    inputs.keys()

    inputs['input_ids'][0][:10]

    inputs['overflow_to_sample_mapping']

    print(inputs['offset_mapping'])

    question_answerer = pipeline('question-answering',model = 'domyoung/squad-test')
    question_answerer(question = question, context = context)
     
    context = '''
    날카로운 포핸드와 자타공인 완벽한 백핸드를 가졌다. 예전에는 수준급 방어력을 앞세운 카운터펀처였으나 현재는 공수 밸런스를 갖춘 완벽한 올라운드 플레이어로 거듭났다.[30] 독보적인 리턴을 보유하고 있어 압도적이지 않은 서브로도 최고의 기량을 과시하는 중이다.[31] 플레이 스타일은 전형적인 어그레시브 베이스라이너로서 네트로 나오는 일은 드물며, 그래서 네트플레이에서 에러가 가끔 있는 편이다. 대신 수비력이 아주 좋아서 어지간한 볼은 전부 다 쳐낸다. 2014년 이후로는 더욱 더 강력해져서 전성기의 나달 수준, 혹은 그 이상의 방어력을 보여주고 있는 괴물 같은 선수.전성기 조코비치를 한마디로 요약하자면 코트를 가리지 않는 이상적인 베이스라이너(baseliner)라 할 수 있다. 민첩함과 유연함을 모두 갖춘만큼 엄청난 코트 커버리지를 자랑하며 통곡의 벽이 무엇인지 보여준다.[32] 나달이 클레이코트 수비의 정점이라면 하드코트 수비에선 조코비치가 그 위치에 있다. 랠리를 끝낼만한 상대의 훌륭한 샷을 기어코 쫓아가 받아내는 모습을 심심찮게 볼 수 있다. 왕년의 최고의 베이스라이너인 안드레 애거시의 완성형이라는 표현에 고개가 끄덕여진다.수비력이 뛰어난 선수지만 공격력이 약하다고 생각하면 큰 오산이다. 심리전이 엄청나게 좋아서 상대방의 빈 곳으로 공을 보내는 것에 능하며 기본적으로 뛰어난 포핸드를 가지고 있다. 그러나 조코비치 공격의 진면목은 완벽한 백핸드[33]에 있다. 상대방이 본인의 백핸드 쪽으로 리턴을 하면 백핸드를 상대의 빈 코스 또는 거의 한 손 백핸드에 가까운 각도로 보내는 장면이 나올 정도로 완벽한 백핸드를 가지고 있다. 역대급 코트 커버리지에 더해 이런 사기적인 스트로크를 가진 조코비치를 랠리 싸움에서 이기는 건 여간해선 힘들다.서비스 게임 당 에이스 개수 0.443개를 보면 알 수 있듯이, 조코비치의 서브는 위력만 놓고 보면 특별하다고 볼 수 없다. 실제로 남자 선수로서 평범하다면 평범할 수 있는 180km 후반에서 190km 중반 수준의 서브 속도를 가지고 있다. 하지만 에이스가 터지지 않아도 정확한 코스 선택으로 이후 이어지는 랠리에서 주도권을 가지고 가며, 뛰어난 세컨드 서브[34] 또한 가지고 있다.
    '''

    quetion = '서비스 게임 당 에이스 개수는?'
    question_answerer(question = question, context = context)

    댓글

Designed by Tistory.