ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (11) 자연어처리_BERT를 활용한 단어 추론 실습
    자연어처리 2023. 8. 2. 00:22
    728x90

    허깅페이스

    • 트랜스포머를 기반으로 다양한 모델과 학습 데이터, 학습 방법을 구현해 놓은 모듈
    • 질의응답, 텍스트 분류, 텍스트 요약, 개체명 인식, 텍스트 생성, 번역, 언어 모델
    !pip install transformers
    import torch
    from transformers import BertTokenizer, BertModel, BertForMaskedLM
     
    tokenizer = BertTokenizer.from_pretrained('klue/bert-base')
    text = '[CLS] 이순신은 누구입니까? [SEP] 16세기 말 조건의 명장이자 충무공이며 임진왜란 및 정유재란 당시 조선 수군을 지휘했던 제독이다. [SEP]'
    tokenized_text = tokenizer.tokenize(text)
    print(tokenized_text)

    masked_index = 16
    tokenized_text[masked_index] = '[MASK]'
    print(tokenized_text)

    indexed_tokens = tokenizer.convert_tokens_to_ids(tokenized_text)
    print(indexed_tokens)

    segments_ids = [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
     
    token_tensor = torch.LongTensor([indexed_tokens])
    segments_tensors = torch.LongTensor([segments_ids])
     
    model = BertModel.from_pretrained('klue/bert-base')
    model.eval()
     
    tokens_tensor = tokens_tensor.to('cuda')
    segments_tensors = segments_tensors.to('cuda')
    model.to('cuda')
    with torch.no_grad():
      outputs = model(tokens_tensor, token_type_ids = segments_tensors)
      encoded_layers = outputs[0]

    print(encoded_layers)
    print(encoded_layers.shape)

    predicted_index = torch.argmax(encoded_layers[0, masked_index]).item()
    print(predicted_index)
    predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0]
    print(predicted_token)

    model = BertForMaskedLM.from_pretrained('klue/bert-base')
    model.eval()
     
    tokens_tensor = tokens_tensor.to('cuda')
    segments_tensors = segments_tensors.to('cuda')
    model.to('cuda')
    with torch.no_grad():
        outputs = model(tokens_tensor, token_type_ids=segments_tensors)
        encoded_layers = outputs[0]
     
    predicted_index = torch.argmax(encoded_layers[0, masked_index]).item()
    print(predicted_index)
    predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0]
    print(predicted_token)

    댓글

Designed by Tistory.