Home

Awesome

Korpora: Korean Corpora Archives

최근 자연어 처리에 관심이 높아지면서 정부와 기업은 물론 뜻있는 개인에 이르기까지 데이터를 무료로 공개하는 추세입니다. 하지만 데이터가 곳곳에 산재해 있다보니 품질 좋은 말뭉치임에도 그 존재조차 잘 알려지지 않은 경우가 많습니다. 파일 포맷과 저장 형식 등이 각기 달라 사용이 쉽지 않습니다. 개별 사용자들은 다운로드나 전처리 코드를 그때그때 개발해서 써야 하는 수고로움이 있습니다.

Korpora는 이 같은 불편함을 조금이나마 덜어드리기 위해 개발한 오픈소스 파이썬 패키지입니다. Korpora는 말뭉치라는 뜻의 영어 단어 corpus의 복수형인 corpora에서 착안해 이름 지었습니다. KorporaKorean Corpora의 준말입니다. Korpora가 마중물이 되어 한국어 데이터셋이 더 많이 공개되고 이를 통해 한국어 자연어 처리 수준이 한 단계 업그레이드되기를 희망합니다.

말뭉치 목록

Korpora가 제공하는 말뭉치 목록은 다음과 같습니다.

corpus_namedescriptionlink
korean_chatbot_data챗봇 트레이닝용 문답 페어https://github.com/songys/Chatbot_data
kcbertKcBERT 모델 학습용 댓글 데이터https://github.com/Beomi/KcBERT
korean_hate_speech한국어 혐오 데이터셋https://github.com/kocohub/korean-hate-speech
korean_petitions청와대 국민 청원https://github.com/lovit/petitions_archive
kornliKorean NLIhttps://github.com/kakaobrain/KorNLUDatasets
korstsKorean STShttps://github.com/kakaobrain/KorNLUDatasets
kowikitext한국어 위키 텍스트https://github.com/lovit/kowikitext/
namuwikitext나무위키 텍스트https://github.com/lovit/namuwikitext
naver_changwon_ner네이버 x 창원대 개체명 인식 데이터셋https://github.com/naver/nlp-challenge/tree/master/missions/ner
nsmcNAVER Sentiment Movie Corpushttps://github.com/e9t/nsmc
question_pair한국어 질문쌍 데이터셋https://github.com/songys/Question_pair
modu_news모두의 말뭉치: 신문https://corpus.korean.go.kr
modu_messenger모두의 말뭉치: 메신저https://corpus.korean.go.kr
modu_mp모두의 말뭉치: 형태 분석https://corpus.korean.go.kr
modu_ne모두의 말뭉치: 개체명 분석https://corpus.korean.go.kr
modu_spoken모두의 말뭉치: 구어https://corpus.korean.go.kr
modu_web모두의 말뭉치: 웹https://corpus.korean.go.kr
modu_written모두의 말뭉치: 문어https://corpus.korean.go.kr
aihub_translation한국어-영어 번역 말뭉치https://aihub.or.kr/aidata/87
open_subtitles영화 자막 한영 병렬 말뭉치http://opus.nlpl.eu/OpenSubtitles-v2018.php
korean_parallel_koen_news한국어-영어 병렬 말뭉치https://github.com/jungyeul/korean-parallel-corpora

안내 페이지

Korpora 사용법을 자세히 안내하는 페이지는 다음과 같습니다. 아래의 페이지는 한글과 영어로 기술되어 있습니다. 영어 번역에 힘써주신 Han Kyul Kim (@hank110) Won Ik Cho (@warnikchow) (Alphabet order) 님에게 감사드립니다.

핵심 기능 위주로 빠르게 살펴보고 싶은 분들은 아래 빠른 사용법 파트를 참고하세요. 실행시 주의점, 옵션 추가 및 변경 등은 위 페이지를 보시면 됩니다.

빠른 사용법

설치

From source

git clone https://github.com/ko-nlp/Korpora
python setup.py install

Using pip

pip install Korpora

파이썬에서 사용하기

Korpora는 오픈소스 파이썬 패키지입니다. 기본적으로 파이썬 콘솔(console)에서 동작합니다. 말뭉치 목록을 확인하는 파이썬 예제는 다음과 같습니다.

from Korpora import Korpora
Korpora.corpus_list()
{
   'kcbert': 'beomi@github 님이 만드신 KcBERT 학습데이터',
   'korean_chatbot_data': 'songys@github 님이 만드신 챗봇 문답 데이터',
   'korean_hate_speech': '{inmoonlight,warnikchow,beomi}@github 님이 만드신 혐오댓글데이터',
   'korean_petitions': 'lovit@github 님이 만드신 2017.08 ~ 2019.03 청와대 청원데이터',
   'kornli': 'KakaoBrain 에서 제공하는 Natural Language Inference (NLI) 데이터',
   'korsts': 'KakaoBrain 에서 제공하는 Semantic Textual Similarity (STS) 데이터',
   'kowikitext': "lovit@github 님이 만드신 wikitext 형식의 한국어 위키피디아 데이터",
   'namuwikitext': 'lovit@github 님이 만드신 wikitext 형식의 나무위키 데이터',
   'naver_changwon_ner': '네이버 + 창원대 NER shared task data',
   'nsmc': 'e9t@github 님이 만드신 Naver sentiment movie corpus v1.0',
   'question_pair': 'songys@github 님이 만드신 질문쌍(Paired Question v.2)',
   'modu_news': '국립국어원에서 만든 모두의 말뭉치: 뉴스 말뭉치',
   'modu_messenger': '국립국어원에서 만든 모두의 말뭉치: 메신저 말뭉치',
   'modu_mp': '국립국어원에서 만든 모두의 말뭉치: 형태 분석 말뭉치',
   'modu_ne': '국립국어원에서 만든 모두의 말뭉치: 개체명 분석 말뭉치',
   'modu_spoken': '국립국어원에서 만든 모두의 말뭉치: 구어 말뭉치',
   'modu_web': '국립국어원에서 만든 모두의 말뭉치: 웹 말뭉치',
   'modu_written': '국립국어원에서 만든 모두의 말뭉치: 문어 말뭉치',
   'aihub_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (구어 + 대화 + 뉴스 + 한국문화 + 조례 + 지자체웹사이트)",
   'aihub_spoken_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (구어)",
   'aihub_conversation_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (대화)",
   'aihub_news_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (뉴스)",
   'aihub_korean_culture_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (한국문화)",
   'aihub_decree_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (조례)",
   'aihub_government_website_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (지자체웹사이트)",
   'open_subtitles': 'Open parallel corpus (OPUS) 에서 제공하는 영화 자막 번역 병렬 말뭉치',
}

파이썬 콘솔에서 KcBERT 학습데이터를 내려 받는 파이썬 예제는 다음과 같습니다. 사용자의 로컬 컴퓨터 루트 하위의 Korpora라는 디렉토리(~/Korpora)에 말뭉치를 내려 받습니다. 다른 데이터를 받고 싶다면 위에서 확인한 말뭉치 이름을 인자로 주면 됩니다.

from Korpora import Korpora
Korpora.fetch("kcbert")

Korpora가 제공하는 모든 말뭉치를 내려받고 싶다면 다음과 같이 실행하세요. ~/Korpora에 말뭉치를 내려 받습니다.

from Korpora import Korpora
Korpora.fetch('all')

KcBERT 학습데이터를 파이썬 콘솔에서 읽어들이는 예제는 다음과 같습니다. 데이터가 로컬에 없다면 ~/Korpora에 말뭉치를 내려 받습니다. 이후 corpus라는 파이썬 변수에 말뭉치 데이터가 담기게 됩니다. 다른 데이터를 읽고 싶다면 위에서 확인한 말뭉치 이름을 인자로 주면 됩니다.

from Korpora import Korpora
corpus = Korpora.load("kcbert")

터미널에서 사용하기

Korpora는 터미널에서도 동작합니다(Command Line Interface, CLI). 파이썬 콘솔 실행 없이 Korpora를 사용할 수 있습니다. 터미널에서 KcBERT 학습데이터 하나를 다운받는 예제는 다음과 같습니다. ~/Korpora에 말뭉치를 내려 받습니다.

korpora fetch --corpus kcbert

터미널에서 KcBERT 학습데이터와 챗봇 문답 데이터 두 개를 동시에 다운로드 받는 예제는 다음과 같습니다. 이같은 방식으로 3개 이상의 데이터도 동시에 내려받을 수 있습니다. ~/Korpora에 말뭉치를 내려 받습니다.

korpora fetch --corpus kcbert korean_chatbot_data

터미널에서 Korpora가 제공하는 모든 말뭉치를 내려받는 예제는 다음과 같습니다. ~/Korpora에 말뭉치를 내려 받습니다.

korpora fetch --corpus all

터미널에서 언어모델(Language Model) 학습용 데이터를 만들 수 있습니다. 언어모델 학습용 데이터 구축이라고 함은, Korpora가 제공하는 코퍼스에서 문장만을 떼어서 텍스트 파일로 덤프하는 걸 가리킵니다. 기본 예제 코드는 다음과 같습니다. 다음 코드는 Korpora가 제공하는 모든 코퍼스(all)를 언어모델 학습용 말뭉치로 일괄 처리하는 역할을 합니다. 다운로드와 전처리를 동시에 수행합니다. 로컬에 데이터가 없다면 ~/Korpora에 말뭉치를 내려 받습니다. 결과물은 all.train이라는 파일 하나입니다. output_dir에 생성됩니다.

korpora lmdata \
  --corpus all \
  --output_dir ~/works/lmdata

License

Korpora: Korean Corpora Archives

Due to the growing interest in natural language processing, governments, businesses, and individuals are disclosing their data for free. However, even for a high-quality corpus, its existence is often unknown as datasets are scattered in different locations. Furthermore, each of their file or saved format is often different, making it even more difficult to use them. Therefore, individuals need to painstakingly create download or preprocessing codes for every instance.

Korpora is an open-source Python package that aims to minimize such inconvenience. The name Korpora comes from the word corpora, a plural form of the word corpus. Korpora is an acronym that stands for Korean Corpora. We hope that Korpora will serve as a starting point that encourages more Korean datasets to be released and improve the state of Korean natural language processing to the next level.

List of corpora

Korpora provides following corpora.

corpus_namedescriptionlink
korean_chatbot_dataQuestion and answer pairs for training a chatbothttps://github.com/songys/Chatbot_data
kcbertComment data used for training KcBERT modelhttps://github.com/Beomi/KcBERT
korean_hate_speechKorean hate speech datasethttps://github.com/kocohub/korean-hate-speech
korean_petitionsPetitions to Blue Househttps://github.com/lovit/petitions_archive
kornliKorean NLIhttps://github.com/kakaobrain/KorNLUDatasets
korstsKorean STShttps://github.com/kakaobrain/KorNLUDatasets
kowikitextKorean Wikipedia texthttps://github.com/lovit/kowikitext/
namuwikitextNamuwiki texthttps://github.com/lovit/namuwikitext
naver_changwon_nerNAVER x Changwon National University NER datasethttps://github.com/naver/nlp-challenge/tree/master/missions/ner
nsmcNAVER Sentiment Movie Corpushttps://github.com/e9t/nsmc
question_pairKorean question and answer pair datasethttps://github.com/songys/Question_pair
modu_newsModu Corpus: Newspaperhttps://corpus.korean.go.kr
modu_messengerModu Corpus: Messengerhttps://corpus.korean.go.kr
modu_mpModu Corpus: Morphemeshttps://corpus.korean.go.kr
modu_neModu Corpus: Named Entityhttps://corpus.korean.go.kr
modu_spokenModu Corpus: Spokenhttps://corpus.korean.go.kr
modu_webModu Corpus: Webhttps://corpus.korean.go.kr
modu_writtenModu Corpus: Writtenhttps://corpus.korean.go.kr
aihub_translationKorean-English translation corpushttps://aihub.or.kr/aidata/87
open_subtitlesKorean-English parallel corpus from movie subtitleshttp://opus.nlpl.eu/OpenSubtitles-v2018.php
korean_parallel_koen_newsKorean-English parallel corpushttps://github.com/jungyeul/korean-parallel-corpora

Information page

Detailed information on Korpora is available from the link below. The information page is written in both Korean and English. We like to thank Han Kyul Kim (@hank110) and Won Ik Cho (@warnikchow) (Alphabet order) for the English translation.

For those who would like to quickly go through the core functions, please refer to the Quick overview part below. For more information about notes on execution or option modifications, please refer to the information page linked above.

Quick overview

Installation

From source

git clone https://github.com/ko-nlp/Korpora
python setup.py install

Using pip

pip install Korpora

Using in Python

Korpora is an open-source Python package. By default, it can be executed in a Python console. You can check the list of the available corpus with the following Python codes.

from Korpora import Korpora
Korpora.corpus_list()
{
   'kcbert': 'beomi@github 님이 만드신 KcBERT 학습데이터',
   'korean_chatbot_data': 'songys@github 님이 만드신 챗봇 문답 데이터',
   'korean_hate_speech': '{inmoonlight,warnikchow,beomi}@github 님이 만드신 혐오댓글데이터',
   'korean_petitions': 'lovit@github 님이 만드신 2017.08 ~ 2019.03 청와대 청원데이터',
   'kornli': 'KakaoBrain 에서 제공하는 Natural Language Inference (NLI) 데이터',
   'korsts': 'KakaoBrain 에서 제공하는 Semantic Textual Similarity (STS) 데이터',
   'kowikitext': "lovit@github 님이 만드신 wikitext 형식의 한국어 위키피디아 데이터",
   'namuwikitext': 'lovit@github 님이 만드신 wikitext 형식의 나무위키 데이터',
   'naver_changwon_ner': '네이버 + 창원대 NER shared task data',
   'nsmc': 'e9t@github 님이 만드신 Naver sentiment movie corpus v1.0',
   'question_pair': 'songys@github 님이 만드신 질문쌍(Paired Question v.2)',
   'modu_news': '국립국어원에서 만든 모두의 말뭉치: 뉴스 말뭉치',
   'modu_messenger': '국립국어원에서 만든 모두의 말뭉치: 메신저 말뭉치',
   'modu_mp': '국립국어원에서 만든 모두의 말뭉치: 형태 분석 말뭉치',
   'modu_ne': '국립국어원에서 만든 모두의 말뭉치: 개체명 분석 말뭉치',
   'modu_spoken': '국립국어원에서 만든 모두의 말뭉치: 구어 말뭉치',
   'modu_web': '국립국어원에서 만든 모두의 말뭉치: 웹 말뭉치',
   'modu_written': '국립국어원에서 만든 모두의 말뭉치: 문어 말뭉치',
   'aihub_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (구어 + 대화 + 뉴스 + 한국문화 + 조례 + 지자체웹사이트)",
   'aihub_spoken_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (구어)",
   'aihub_conversation_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (대화)",
   'aihub_news_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (뉴스)",
   'aihub_korean_culture_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (한국문화)",
   'aihub_decree_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (조례)",
   'aihub_government_website_translation': "AI Hub 에서 제공하는 번역용 병렬 말뭉치 (지자체웹사이트)",
   'open_subtitles': 'Open parallel corpus (OPUS) 에서 제공하는 영화 자막 번역 병렬 말뭉치',
}

From the Python console, you can download KcBERT training data with the following Python codes. The corpus is downloaded to the Korpora directory within the user's root directory (~/Korpora). If you want to download a different dataset, please change the name of the corpus in the argument by the name of the dataset as expressed in the list above.

from Korpora import Korpora
Korpora.fetch("kcbert")

If you want to download all corpora provided by Korpora, use the following Python codes. All datasets are downloaded to ~/Korpora.

from Korpora import Korpora
Korpora.fetch('all')

Using the following codes, you can load the KcBERT training dataset from your Python console. If the corpus does not exist in the local directory, it is downloaded to ~/Korpora as well. Then, the corpus data is stored in a Python variable corpus. To load a different dataset, please change the name of the corpus in the argument by the name of the dataset as expressed in the list above.

from Korpora import Korpora
corpus = Korpora.load("kcbert")

Using in a terminal

You can execute Korpora through your terminal as well (Command Line Interface, CLI). Korpora can be used without executing your Python console. You can download the KcBERT training dataset from your terminal with the following command. The dataset is downloaded to ~/Korpora.

korpora fetch --corpus kcbert

With the following command, you can simultaneously download the KcBERT training dataset and the chatbot Q&A pair dataset. With this command, you can also simultaneously download three or more datasets. Datasets are downloaded to ~/Korpora.

korpora fetch --corpus kcbert korean_chatbot_data

You can download all corpora provided by Korpora from your terminal with the following command. Datasets are downloaded to ~/Korpora.

korpora fetch --corpus all

From your terminal, you can also create a dataset for training a language model. Creating this training dataset for a language model refers to a process of extracting only the sentences from all corpora provided by Korpora and saving them in a text file. A sample command is as follows. It simultaneously processes all corpora provided by Korpora and creates a single training dataset for a language model. Downloading the corpus and preprocessing its text occur simultaneously as well. If the corpus does not exist in the local directory, it is downloaded to ~/Korpora. A single output file named all.train will be created. It is created within output_dir.

korpora lmdata \
  --corpus all \
  --output_dir ~/works/lmdata

License