본문 바로가기

BLOG/오픈소스 리뷰기

[오픈소스 리뷰기] Pororo 자연어처리 라이브러리(2)Sequence Tagging

오픈소스 리뷰 : 슬기로운 오픈소스 사용법 리뷰해드립니다!
#16 Pororo 자연어처리 라이브러리(2)Sequence Tagging

 

안녕하세요. 디노랩스입니다!

지난포스팅에 이어 Pororo 라이브러리를 활용하여 자연어처리와 관련된 다양한 task에 적용하는 방법을 알아보고 있는데요.

오늘은 두번째 'Sequence Tagging' task에 적용하는 방법을 알려드리려고 합니다!

 

 

Sequence Tagging

 

Sequence Tagging 은 연속된 단어로 이루어진 텍스트를 입력으로 받아 각각의 단어가 문장에서 지니는 역할을 분석하는 task를 말하는데요, 단어가 지니는 역할은 '명사', '동사'와 같은 품사(Part of Speech)가 될 수도 있고 인물, 장소, 시간과 같은 개체명(Named Entity)이 될 수도 있습니다.
이러한 task 들은 최종적인 목표라기보다는 다른 task를 수행하기 위한 보조적인 도구로 사용되는 경우가 많으며, 실제로 이를 활용하여 정보 검색과 요약, 질문 답변, 지식 베이스 구축, 기계 번역 등의 다양한 분야의 task의 성능을 높일 수 있었습니다.


그럼  Pororo 에서 지원하는 Sequence Tagging task의 대표적인 예시들을 살펴볼까요? :)

 

 

 

(1) 개체명 인식(Named Entity Recognition)

 

문장을 입력으로 받아 문장에 존재하는 단어의 개체명(Named Entity)를 인식하는 task입니다.
개체명은 사람, 회사, 장소, 시간, 단위 등이 될 수 있으며 Pororo에서 지원하는 개체명 인식에 사용된 한국어 개체명은 아래 링크에서 확인할 수 있습니다.
https://rlkujwkk7.toastcdn.net/23/NIKL_NE_2020_v1.0.pdf

입력 Parameters

  • text(str): 인식하고자 하는 문장
  • apply_wsd(bool): 더욱 자세한 개체명 return 여부

Returns

  • 인식한 단어와 개체명 쌍 데이터

https://kakaobrain.github.io/pororo/tagging/ner.html

 

Named Entity Recognition — PORORO: Platform Of neuRal mOdels for natuRal language prOcessing 0.3.1 documentation

© Copyright 2021, Kakao Brain Corp.

kakaobrain.github.io

 

 

# 'ner'을 parameter로 입력하여 클래스를 불러옵니다.
from pororo import Pororo
ner = Pororo(task="ner", lang="ko")
ner

 

ner("철수는 서울역에서 영희와 10시에 만나기로 약속하였다.")

 

# apply_wsd 미적용
ner("손흥민은 28세의 183 센티미터, 77 킬로그램이며, 현재 주급은 약 3억 원이다.")

 

# apply_wsd 적용
ner("손흥민은 28세의 183 센티미터, 77 킬로그램이며, 현재 주급은 약 3억 원이다.", apply_wsd=True)

 

NER 역시 한국어뿐만 아니라 영어, 일본어, 중국어를 지원합니다.

 

 

# 영어
ner_en = Pororo(task="ner", lang="en")
ner_en("It was in midfield where Arsenal took control of the game, and that was mainly down to Thomas Partey and Mohamed Elneny.")

 

ner_ja = Pororo(task="ner", lang="ja")
ner_ja("豊臣 秀吉、または羽柴 秀吉は、戦国時代から安土桃山時代にかけての武将、大名。天下人、武家関白、太閤。三英傑の一人。")

 

 

 

(2) 품사 태깅(Part-of-Speech Tagging)

 

문장을 입력으로 받아 문장 내 단어들의 품사를 식별하여 태그를 붙여주는 task입니다.
Pororo에서 지원하는 개체명 인식에 사용된 품사는 아래 링크에서 확인할 수 있습니다.
https://docs.google.com/spreadsheets/d/1-9blXKjtjeKZqsf4NzHeYJCrr49-nXeRF6D80udfcwY/edit#gid=589544265

 

mecab-ko-dic 품사 태그 설명

태그 v2.0 실질의미유무,대분류(5언 + 기타),세종 품사 태그,mecab-ko-dic 품사 태그 태그,설명,태그,설명 실질형태소,체언,NNG,일반 명사,NNG,일반 명사 NNP,고유 명사,NNP,고유 명사 NNB,의존 명사,NNB,의존

docs.google.com

입력 Parameters

  • text(str): 인식하고자 하는 문장

Returns

  • 인식한 단어와 품사 쌍 데이터

https://kakaobrain.github.io/pororo/tagging/pos.html

 

Part-of-Speech Tagging — PORORO: Platform Of neuRal mOdels for natuRal language prOcessing 0.3.1 documentation

© Copyright 2021, Kakao Brain Corp.

kakaobrain.github.io

 

 

# pos 를 사용하기 위해선 python에서 지원하는 한국어 mecab을 설치해야 합니다.
!pip install python-mecab-ko

 

# 'pos'을 parameter로 입력하여 클래스를 불러옵니다.
from pororo import Pororo
pos = Pororo(task="pos", lang="ko")
pos

 

pos("안녕하세요. 제 이름은 카터입니다.")

 

pos("아버지가 방에 들어가신다.")

 

POS 또한 영어, 일본어, 중국어를 지원합니다.

 

 

# 영어
pos_en = Pororo("pos", lang="en")
pos_en("The striped bats are hanging, on their feet for best.")

 

# 중국어
pos_zh = Pororo("pos", lang="zh")
pos_zh("乒乓球拍卖完了")

 

 

 

(3)빈칸채우기(Fill-in-the-blank)

 

빈칸이 포함된 문장을 입력으로 받아 빈칸에 들어갈만한 단어들을 찾아내는 task 입니다.
사실이 아닌 정답이 나올 수도 있지만 빈칸에 들어가더라도 어색하지 않은 단어들을 뽑아내므로 데이터 불균형과 같은 상황에서 데이터 증강의 기법으로 사용될 수 있습니다.

 

입력 Parameters

  • sent(str): '__'(빈칸)을 포함한 문장

Returns

  • 빈칸에 들어갈만한 단어들

https://kakaobrain.github.io/pororo/tagging/fill.html

 

Fill-in-the-blank — PORORO: Platform Of neuRal mOdels for natuRal language prOcessing 0.3.1 documentation

© Copyright 2021, Kakao Brain Corp.

kakaobrain.github.io

 

 

# 'fib'을 parameter로 입력하여 클래스를 불러옵니다.
fib = Pororo(task="fib", lang="ko")
fib

 

fib("손흥민은 __의 축구선수이다.")

 

fib("__은 한글을 창제한 조선의 제4대 국왕이다.")

 

# 영어
fib_en = Pororo(task="fib", lang="en")
fib_en("David Beckham is a famous __ player.")

 

# 일본어
fib_ja = Pororo(task="fib", lang="ja")
fib_ja("日本の首都は__である。")

 

# 중국어
fib_zh = Pororo(task="fib", lang="zh")
fib_zh("三__男子在街上做同样的舞蹈。")

 

 

 

(4) 기계독해(Machine Reading Comprehension)

 

질문과 질문에 대한 정답을 포함하는 문서를 입력으로 받아 질문에 대한 정답을 찾아내는 task 입니다.
사람이 텍스트를 읽고 질문 답변을 추론하듯이 AI가 문장 속에서 의미를 찾고 답변할 수 있으며, 구글 검색엔진에서도 활발히 사용되고 있습니다.

 

입력 Parameters

  • query(str): 질문
  • context(str): 정답을 포함하는 문서

Returns

  • 예측된 정답과 정답의 인덱스(위치)

https://kakaobrain.github.io/pororo/tagging/mrc.html

 

Machine Reading Comprehension — PORORO: Platform Of neuRal mOdels for natuRal language prOcessing 0.3.1 documentation

© Copyright 2021, Kakao Brain Corp.

kakaobrain.github.io

 

 

# 'mrc'를 parameter로 입력하여 클래스를 불러옵니다.
mrc = Pororo(task="mrc", lang="ko")
mrc

 

mrc(
   "카카오브레인이 공개한 것은?",
   "카카오 인공지능(AI) 연구개발 자회사 카카오브레인이 AI 솔루션을 첫 상품화했다. 카카오는 카카오브레인 '포즈(pose·자세분석) API'를 유료 공개한다고 24일 밝혔다. 카카오브레인이 AI 기술을 유료 API를 공개하는 것은 처음이다. 공개하자마자 외부 문의가 쇄도한다. 포즈는 AI 비전(VISION, 영상·화면분석) 분야 중 하나다. 카카오브레인 포즈 API는 이미지나 영상을 분석해 사람 자세를 추출하는 기능을 제공한다."
)

 

mrc(
    "대한민국 대통령의 임기는 얼마야?",
    "대통령은 대한민국 헌법 제66조에서 정의하는 헌법기관으로, 국가원수로서 외국에 대하여 국가를 대표하며(제1항), 국가의 독립·영토의 보전·국가의 계속성과 헌법을 수호할 책무를 지며(제2항), 조국의 평화적 통일을 위한 성실한 의무를 진다(제3항). 또 삼권(三權) 가운데 행정부의 수장을 맡는 정부수반으로서 모든 행정권은 대통령에 속해 있다(제4항). 대한민국 헌법 제73조가 정하는 바에 따라 조약의 체결·비준권, 외교사절의 신임·접수·파견권, 선전포고권과 강화권은 대통령에게 있으며, 대한민국 헌법 제74조에 따라 대한민국 국군의 통수권을 가진다. 대통령은 모든 군인의 최고 직속상관으로, 이는 대한민국 대통령의 핵심적인 권한이다. 대통령은 행정상 대통령령을 발령할 수 있으며, 유사시 긴급명령과 계엄령을 선포할 수 있다. 대한민국 헌법 제67조 제1항에 따라 대통령은 국민의 보통·평등·직접·비밀선거에 의하여 선출된다. 임기는 제70조에 따라 대통령의 임기는 5년으로 중임(重任; 현직자의 차기 재임)할 수 없다. 따라서 연임(連任) 또한 할 수도 없으며 단임(單任; 한 사람이 한 번만 역임)만이 가능하다. 또한 제128조 2항에 따라 개헌을 통해 임기를 늘리거나 중임여부를 변경해도 개헌안을 제안할 당시 기준 차기 대통령부터 적용되도록 하고있다."
    )

 

mrc(
    "서울을 가로지르는 강 이름은?",
    "서울특별시는 대한민국의 수도이자 최대 도시이다. 백제의 첫 수도인 위례성이었고, 고려의 남경이었으며, 조선의 수도가 된 이후로 현재까지 대한민국 정치·경제·사회·문화의 중심지이다. 중앙으로 한강이 흐르고, 북한산, 관악산, 도봉산, 불암산, 인릉산, 청계산, 아차산 등의 산들로 둘러싸인 분지 지형의 도시이다. 서울의 면적은 605.2 km2로 대한민국 면적의 0.6%이고, 인구는 약 950만 명으로 대한민국 인구의 17%를 차지한다. 시청 소재지는 중구이며, 25개의 자치구가 있다. 1986년 아시안 게임, 1988년 하계 올림픽, 2010년 서울 G20 정상회의 등을 개최하였다. 2018년 서울의 지역내총생산은 422조원이었다."
)