저자
소속

1 BERT 모형 선정

다국어를 지원하는 BERT 모형을 활용하여 연관 자연어 처리 업무를 수행할 수 있다.

  • bert-base-multilingual-cased
  • distilbert-base-multilingual-cased

distilbert는 BERT 모형과 비교하여 다소 성능이 떨어지나 크기, 속도 등 다른 지표에서 BERT와 대등한 지표를 제시하고 있다.

노트
from transformers import pipeline

# Using default model and tokenizer for the task
pipeline("<task-name>")

# Using a user-specified model
pipeline("<task-name>", model="<model_name>")

# Using custom model/tokenizer as str
pipeline('<task-name>', model='<model name>', tokenizer='<tokenizer_name>')

2 개체명 인식

개체명(Named Entity)은 인명, 기관명, 지명 등과 같이 문장 또는 문서에서 특정한 의미를 가지고 있는 단어 또는 어구를 지칭함.

코드
library(tidyverse)

ner_tbl <- tibble::tribble(
            ~개체명.범주,   ~태그,                          ~정의,
           "PERSON", "PER",      "실존, 가상 등 인물명에 해당 하는 것",
            "FIELD", "FLD",       "학문 분야 및 이론, 법칙, 기술 등",
  "ARTIFACTS_WORKS", "AFW",        "인공물로 사람에 의해 창조된 대상물",
     "ORGANIZATION", "ORG",      "기관 및 단체와 회의/회담을 모두 포함",
         "LOCATION", "LOC",            "지역명칭과 행정구역 명칭 등",
     "CIVILIZATION", "CVL",            "문명 및 문화에 관련된 용어",
             "DATE", "DAT",                         "날짜",
             "TIME", "TIM",                         "시간",
           "NUMBER", "NUM",                         "숫자",
            "EVENT", "EVT",        "특정 사건 및 사고 명칭과 행사 등",
           "ANIMAL", "ANM",                         "동물",
            "PLANT", "PLT",                         "식물",
         "MATERIAL", "MAT",             "금속, 암석, 화학물질 등",
             "TERM", "TRM", "의학 용어, IT곤련 용어 등 일반 용어를 총칭"
  )

ner_tbl %>% 
  gt::gt()
개체명.범주 태그 정의
PERSON PER 실존, 가상 등 인물명에 해당 하는 것
FIELD FLD 학문 분야 및 이론, 법칙, 기술 등
ARTIFACTS_WORKS AFW 인공물로 사람에 의해 창조된 대상물
ORGANIZATION ORG 기관 및 단체와 회의/회담을 모두 포함
LOCATION LOC 지역명칭과 행정구역 명칭 등
CIVILIZATION CVL 문명 및 문화에 관련된 용어
DATE DAT 날짜
TIME TIM 시간
NUMBER NUM 숫자
EVENT EVT 특정 사건 및 사고 명칭과 행사 등
ANIMAL ANM 동물
PLANT PLT 식물
MATERIAL MAT 금속, 암석, 화학물질 등
TERM TRM 의학 용어, IT곤련 용어 등 일반 용어를 총칭

한국어에서 개체의 범주는 크게 개체이름, 시간표현, 수량표현으로 분류할 수 있다.

  • 개체이름: 인명(PER), 지명(LOC), 기관명(ORG), 기타(POH)
  • 시간표현: 날짜(DAT), 시간(TIM), 기간(DUR)
  • 수량표현: 통화(MNY), 비율(PNT), 기타 수량표현(NOH)

장소(LC), 날짜(DT), 기관(OG), 시간(TI), 인물(PS)

사람(PS), 지역(LC), 단체(OG), 인공물(AF), 날짜(DT), 시간(TI), 제도(CV), 동물(AM), 식물(PT), 단위(QT), 분야(FD), 이론(TR), 사건(EV), 물질(MT), 용어(TM)

3 NER

3.1 파이썬 코드

HF 파이프라인을 사용하여 영문 개체명인식 작업을 수행한다.

# 감성분석 - 파이썬 코드
# 출처: https://www.kaggle.com/code/funtowiczmo/hugging-face-transformers-how-to-use-pipelines

from transformers import pipeline

# NER 파이프라인 ---------------------------------
ner = pipeline(task = "ner", 
               model="dbmdz/bert-large-cased-finetuned-conll03-english",
               tokenizer="bert-large-cased")

text = "John Smith works at Google"
entities = ner(text)

# 결과 출력
for entity in entities:
    print(f"{entity['word']} -> {entity['entity']}")
    

3.2 개체명 인식결과

코드
library(reticulate)
reticulate::source_python("code/BERT/HF_pipeline_NER.py")

to_r <- function(idx){

  output_idx = py$entities %>% 
    pluck(idx)
  
  output_idx$score = paste(output_idx$score) %>% 
    as.double()
  
  return(output_idx)
}

map_dfr(1:length(py$entities), ~to_r(.x))
#> # A tibble: 3 × 6
#>   entity score index word   start   end
#>   <chr>  <dbl> <int> <chr>  <int> <int>
#> 1 I-PER  0.999     1 John       0     4
#> 2 I-PER  1.00      2 Smith      5    10
#> 3 I-ORG  0.998     5 Google    20    26