[자연어 처리] 뽀로로(pororo) 라이브러리 사용법 및 리뷰
Pororo란
카카오브레인에서 출시한 자연어처리 라이브러리인 Pororo는 영어, 한국어, 중국어, 일본어 등 여러가지 언어로 30가지 이상의 자연어 처리 모델이 구현되어 있는 파이썬 라이브러리 입니다.
자세한 내용은 여기서 확인하시면 됩니다.
https://github.com/kakaobrain/pororo
!pip install pororo
!git clone https://github.com/kakaobrain/pororo.git
!cd pororo
!pip install -e .
from pororo import Pororo
사용가능한 일 확인
Pororo.available_tasks()
Pororo.available_models("collocation")
'Available models for collocation are ([lang]: ko, [model]: kollocate), ([lang]: en, [model]: collocate.en), ([lang]: ja, [model]: collocate.ja), ([lang]: zh, [model]: collocate.zh)'
데이터셋 준비
KorNLI - 두 문장의 관계를 entailment/neutral/contradiction 으로 분류
https://github.com/kakaobrain/KorNLUDatasets/tree/master/KorNLI 에서 받아옵니다.
import pandas as pd
import numpy as np
from tqdm import tqdm
path = '/content/drive/MyDrive/KorNLUDatasets-master/KorNLI/'
train_snli = pd.read_csv(path + "snli_1.0_train.ko.tsv", sep='\t', quoting=3)
train_xnli = pd.read_csv(path + "multinli.train.ko.tsv", sep='\t', quoting=3)
# 결합 후 섞기
train_data = train_snli.append(train_xnli)
train = train_data.sample(frac=1).reset_index(drop=True)
def drop_na_and_duplciates(df):
df = df.dropna()
df = df.drop_duplicates()
df = df.reset_index(drop=True)
return df
# 전제, 가설에 존재하는 한글 단어가 아닌 다른 단어들은 전부 제거해줍니다.
# train['sentence1'] = train['sentence1'].str.replace('[^ㄱ-ㅎㅏ-ㅣ가-힣 0-9]', '')
# train['sentence2'] = train['sentence2'].str.replace('[^ㄱ-ㅎㅏ-ㅣ가-힣 0-9]', '')
# 결측값 및 중복 샘플 제거
train = drop_na_and_duplciates(train)
train.head()
sentence1 sentence2 \ 0 열린 풀밭을 달리는 마라톤 선수들. 사람들이 달리고 있다. 1 주방장 유니폼을 입은 흑인이 밖을 내다보고 있다. 경찰복을 입은 백인 남자. 2 가수들이 관중들에게 공연한다. 음악가들이 음악을 연주하고 있다. 3 솔로 스노보더가 산을 내려와 가루 같은 눈 구름을 남긴다. 스노보더는 올림픽에 참가하고 있다. 4 두 사람이 크고 하얀색과 빨간색 보트의 옆에 서 있다. 두 명의 슬픈 사람들이 크고 하얀색과 빨간 보트의 옆에 서 있다. gold_label 0 entailment 1 contradiction 2 neutral 3 neutral 4 neutral
Pororo 분석
Pororo(task, lang)
-
task: 처리할 일의 종류
-
lang: 언어 (ko: 한국어, en: 영어)
task 종류에 대해서 자세히 알고 싶으시면 여기로
https://kakaobrain.github.io/pororo/
from pororo import Pororo
ner = Pororo(task="ner", lang="ko")
ner("마이클 제프리 조던(영어: Michael Jeffrey Jordan, 1963년 2월 17일 ~ )은 미국의 은퇴한 농구 선수이다.")
[('마이클 제프리 조던', 'PERSON'), ('(', 'O'), ('영어', 'CIVILIZATION'), (':', 'O'), (' ', 'O'), ('Michael Jeffrey Jordan', 'PERSON'), (',', 'O'), (' ', 'O'), ('1963년 2월 17일 ~', 'DATE'), (' ', 'O'), (')은', 'O'), (' ', 'O'), ('미국', 'COUNTRY'), ('의', 'O'), (' ', 'O'), ('은퇴한', 'O'), (' ', 'O'), ('농구 선수', 'OCCUPATION'), ('이다.', 'O')]
# Natural Language Inference
nli_module = Pororo(task="nli", lang="ko")
nli_module(train['sentence1'][0], train['sentence2'][0])
'Entailment'
# pororo를 활용한 유의어로 대체 (명사/동사등 모두 가능)
pg = Pororo(task="pg", lang="ko")
pg("당신은 나이가 어떻게 되나요?")
'나이가 몇 살이야?'
# 감정 분석
sa = Pororo(task="sentiment", model="brainbert.base.ko.nsmc", lang="ko")
sa("배송이 버트 학습시키는 것 만큼 느리네요")
'Negative'
# 문장 임베딩
se = Pororo(task="sentence_embedding", lang="ko")
se("나는 동물을 좋아하는 사람이야")[:5]
array([0.08361536, 0.1751299 , 0.23943911, 0.06486252, 0.12902866], dtype=float32)
# 주제 분류
zsl = Pororo(task="zero-topic", lang="ko")
zsl('''라리가 사무국, 메시 아닌 바르사 지지..."바이 아웃 유효" [공식발표]''', ["스포츠", "사회", "정치", "경제", "생활/문화", "IT/과학"])
{'IT/과학': 34.71, '경제': 39.18, '사회': 37.11, '생활/문화': 71.15, '스포츠': 94.15, '정치': 74.26}
# 문장 요약
summ = Pororo(task="summarization", model="bullet", lang="ko")
summ("20년 4월 8일 자로 아카이브에 올라온 뜨끈뜨끈한 논문을 찾았다. 카카오 브레인에서 한국어 자연어 처리를 위한 새로운 데이터셋을 공개했다는 내용이다. 자연어 추론(NLI)와 텍스트의 의미적 유사성(STS)는 자연어 이해(NLU)에서 핵심 과제. 영어나 다른 언어들은 데이터셋이 몇 개 있는데, 한국어로 된 NLI나 STS 공개 데이터셋이 없다. 이에 동기를 얻어 새로운 한국어 NLI와 STS 데이터 셋을 공개한다. 이전 의 접근 방식에 따라 기존의 영어 훈련 세트를 기계 번역(machine-translate)하고 develop set과 test set을 수동으로 한국어로 번역한다. 한국어 NLU에 대한 연구가 더 활성화되길 바라며, KorNLI와 KorSTS에 baseline을 설정하며, Github에 공개한다. NLI와 STS는 자연어 이해의 중심 과제들로 많이 이야기가 된다. 이에 따라 몇몇 벤치마크 데이터셋은 영어로 된 NLI와 STS를 공개했었다. 그러나 한국어 NLI와 STS 벤치마크 데이터셋은 존재하지 않았다. 대부분의 자연어 처리 연구가 사람들이 많이 쓰는 언어들을 바탕으로 연구 가 되기 때문. 유명한 한국어 NLU 데이터 셋이 전형적으로 QA나 감정 분석은 포함은 되어있는데 NLI나 STS는 아니다. 한국어로 된 공개 NLI나 STS 벤치마크 데이터셋이 없어서 이런 핵심과제에 적합한 한국어 NLU 모델 구축에 대한 관심이 부족했다고 생각한다. 이에 동기를 얻어 KorNLI와 KorSTS를 만들었다.")
['KorNLI와 KorSTS에 baseline 설정', ' 새로운 한국어 NLI와 STS 데이터 셋 공개']
# 문장 요약
summ = Pororo(task="summarization", model="abstractive", lang="ko")
summ("20년 4월 8일 자로 아카이브에 올라온 뜨끈뜨끈한 논문을 찾았다. 카카오 브레인에서 한국어 자연어 처리를 위한 새로운 데이터셋을 공개했다는 내용이다. 자연어 추론(NLI)와 텍스트의 의미적 유사성(STS)는 자연어 이해(NLU)에서 핵심 과제. 영어나 다른 언어들은 데이터셋이 몇 개 있는데, 한국어로 된 NLI나 STS 공개 데이터셋이 없다. 이에 동기를 얻어 새로운 한국어 NLI와 STS 데이터 셋을 공개한다. 이전 의 접근 방식에 따라 기존의 영어 훈련 세트를 기계 번역(machine-translate)하고 develop set과 test set을 수동으로 한국어로 번역한다. 한국어 NLU에 대한 연구가 더 활성화되길 바라며, KorNLI와 KorSTS에 baseline을 설정하며, Github에 공개한다. NLI와 STS는 자연어 이해의 중심 과제들로 많이 이야기가 된다. 이에 따라 몇몇 벤치마크 데이터셋은 영어로 된 NLI와 STS를 공개했었다. 그러나 한국어 NLI와 STS 벤치마크 데이터셋은 존재하지 않았다. 대부분의 자연어 처리 연구가 사람들이 많이 쓰는 언어들을 바탕으로 연구 가 되기 때문. 유명한 한국어 NLU 데이터 셋이 전형적으로 QA나 감정 분석은 포함은 되어있는데 NLI나 STS는 아니다. 한국어로 된 공개 NLI나 STS 벤치마크 데이터셋이 없어서 이런 핵심과제에 적합한 한국어 NLU 모델 구축에 대한 관심이 부족했다고 생각한다. 이에 동기를 얻어 KorNLI와 KorSTS를 만들었다.")
'카카오 브레인에서 한국어로 된 자연어 처리를 위한 새로운 데이터셋인 KorNLI와 KorSTS 데이터셋을 공개했다.'
댓글남기기