ko-nlp / Korpora

Korean corpus repository
Creative Commons Attribution 4.0 International
692 stars 80 forks source link

데이터 관리 방법에 대한 질문 #82

Closed shuuki4 closed 4 years ago

shuuki4 commented 4 years ago

KoreanPetitions 데이터를 예시로 들어보면,

현재 코퍼스의 instance하나를 KoreanPetition, 데이터를 KoreanPetitionsData 클래스로 구현하고 있고 KoreanPetitionsData__getitem__에서 on-the-fly로 KoreanPetition dataclass를 만드는 식으로 관리되고 있는 것 같습니다.

KorpusData가 데이터를 List[KoreanPetition] (or List[CorpusSpecificSingleData]) 형태로 들고 있으면 굳이 코퍼스마다 *Data 클래스를 새로 정의해줄 필요가 없어 관리 차원에서 조금 더 유용할것 같은데요! 혹시 현재 구현처럼 관리되고 있는 특별한 이유가 있을까요?

lovit commented 4 years ago

아래처럼 KorpusData 를 상속하는 class A 의 class name 을 확인했을 때 해당 데이터가 어떤 코퍼스의 데이터인지 확인할 수 있도록 만들고 싶었습니다.

class A(KorpusData):
    # ...

https://github.com/ko-nlp/Korpora/blob/master/Korpora/korpora.py#L34 이 기능에서 해당 정보가 표현되게 하려고 *Data 로 클래스를 정의하고 있습니다.

lovit commented 4 years ago

아직도 어떻게 해야 이후 코퍼스를 편리하게 확장하면서도 정보를 최대한 잘 표현할 수 있을지 고민이에요. 다양한 아이디어 혹은 질문들 남겨주세요~ 고마워요 !! @shuuki4

lovit commented 4 years ago

다시 생각해보니 KorpusData 클래스의 init 에 name 을 받도록 만들고, __str__ 에서 name 을 출력하는 형식으로 바꾸면 @shuuki4 님의 커멘트처럼 class 를 재활용 할 수 있겠네요. 이 점 고려하여 패키지의 클래스 구조 다시 고민해보겠습니다. 감사해요~!

lovit commented 4 years ago

이 이슈를 해결중입니다. 이 이슈와 함께 Korpus.__str__KorpusData.__str__ 도 수정하였습니다. 현재 출력 결과는 다음과 같습니다.

Korpora==0.1.0 에서 제공되는 10 개의 말뭉치에 대하여 테스트를 완료하였습니다.

corpus check?
KoreanChatbot v
KcBERT v
KoreanHateSpeech v
Korean Petitions v
KorNLI v
KorSTS v
NamuwikiTextKorpus v
NaverChangwonNERKorpus v
NSMCKorpus v
QuestionPairKorpus v

KoreanChatbot

str(korpus)

KoreanChatbotKorpus
    Author : songys@github
    Repository : https://github.com/songys/Chatbot_data
    References :

    Chatbot_data_for_Korean v1.0
      1. 챗봇 트레이닝용 문답 페어 11,876개
      2. 일상다반사 0, 이별(부정) 1, 사랑(긍정) 2로 레이블링
    자세한 내용은 위의 repository를 참고하세요.

Attributes
----------
KoreanChatbot.train: size=11823
  - KoreanChatbot.train.texts : list[str]
  - KoreanChatbot.train.pairs : list[str]
  - KoreanChatbot.train.labels : list[int]

str(korpus.train)

KoreanChatbot.train: size=11823
  - KoreanChatbot.train.texts : list[str]
  - KoreanChatbot.train.pairs : list[str]
  - KoreanChatbot.train.labels : list[int]

KcBERT

str(korpus)

KcBERTKorpus
    Author : beomi@github
    Repository : https://github.com/Beomi/KcBERT/
    References :

    공개된 한국어 BERT는 대부분 한국어 위키, 뉴스 기사, 책 등 잘 정제된 데이터를 기반으로 학습한 모델입니다.

    한편, 실제로 NSMC와 같은 댓글형 데이터셋은 정제되지 않았고 구어체 특징에 신조어가 많으며,
    오탈자 등 공식적인 글쓰기에서 나타나지 않는 표현들이 빈번하게 등장합니다.

    KcBERT는 위와 같은 특성의 데이터셋에 적용하기 위해, 네이버 뉴스에서 댓글과 대댓글을 수집해,
    토크나이저와 BERT모델을 처음부터 학습한 Pretrained BERT 모델입니다.

    KcBERT는 Huggingface의 Transformers 라이브러리를 통해 간편히 불러와 사용할 수 있습니다.
    (별도의 파일 다운로드가 필요하지 않습니다.)

Attributes
----------
KcBERT.train: size=100
  - KcBERT.train.texts : list[str]

KoreanHateSpeech

str(korpus)

Attributes
----------
KoreanHateSpeech.train: size=7896
  - KoreanHateSpeech.train.texts : list[str]
  - KoreanHateSpeech.train.titles : list[str]
  - KoreanHateSpeech.train.gender_biases : list[str]
  - KoreanHateSpeech.train.biases : list[str]
  - KoreanHateSpeech.train.hates : list[str]
KoreanHateSpeech.dev: size=471
  - KoreanHateSpeech.dev.texts : list[str]
  - KoreanHateSpeech.dev.titles : list[str]
  - KoreanHateSpeech.dev.gender_biases : list[str]
  - KoreanHateSpeech.dev.biases : list[str]
  - KoreanHateSpeech.dev.hates : list[str]
KoreanHateSpeech.unlabeled: size=2033893
  - KoreanHateSpeech.unlabeled.texts : list[str]
  - KoreanHateSpeech.unlabeled.pairs : list[str]
KoreanHateSpeech.test: size=974
  - KoreanHateSpeech.test.texts : list[str]
  - KoreanHateSpeech.test.pairs : list[str]

str(korpus.train)

KoreanHateSpeech.train: size=7896
  - KoreanHateSpeech.train.texts : list[str]
  - KoreanHateSpeech.train.titles : list[str]
  - KoreanHateSpeech.train.gender_biases : list[str]
  - KoreanHateSpeech.train.biases : list[str]
  - KoreanHateSpeech.train.hates : list[str]

Korean Petitions

str(korpus)

KoreanPetitionsKorpus
    Author : Hyunjoong Kim lovit@github
    Repository : https://github.com/lovit/petitions_archive
    References :

    청와대 국민청원 게시판의 데이터를 월별로 수집한 것입니다.
    청원은 게시판에 글을 올린 뒤, 한달 간 청원이 진행됩니다.
    수집되는 데이터는 청원종료가 된 이후의 데이터이며, 청원 내 댓글은 수집되지 않습니다.
    단 청원의 동의 개수는 수집됩니다.
    자세한 내용은 위의 repository를 참고하세요.

Attributes
----------
KoreanPetitions.train: size=433631
  - KoreanPetitions.train.texts : list[str]
  - KoreanPetitions.train.categories : list[str]
  - KoreanPetitions.train.num_agrees : list[int]
  - KoreanPetitions.train.begins : list[str]
  - KoreanPetitions.train.ends : list[str]
  - KoreanPetitions.train.titles : list[str]

str(korpus.train)

KoreanPetitions.train: size=433631
  - KoreanPetitions.train.texts : list[str]
  - KoreanPetitions.train.categories : list[str]
  - KoreanPetitions.train.num_agrees : list[int]
  - KoreanPetitions.train.begins : list[str]
  - KoreanPetitions.train.ends : list[str]
  - KoreanPetitions.train.titles : list[str]

KorNLI

str(korpus)

KorNLIKorpus
    Author : KakaoBrain
    Repository : https://github.com/kakaobrain/KorNLUDatasets
    References :
        - Ham, J., Choe, Y. J., Park, K., Choi, I., & Soh, H. (2020). KorNLI and KorSTS: New Benchmark
           Datasets for Korean Natural Language Understanding. arXiv preprint arXiv:2004.03289.
           (https://arxiv.org/abs/2004.03289)

    This is the dataset repository for our paper
    "KorNLI and KorSTS: New Benchmark Datasets for Korean Natural Language Understanding."
    (https://arxiv.org/abs/2004.03289)
    We introduce KorNLI and KorSTS, which are NLI and STS datasets in Korean.

Attributes
----------
KorNLI.multinli_train: size=392702
  - KorNLI.multinli_train.texts : list[str]
  - KorNLI.multinli_train.pairs : list[str]
  - KorNLI.multinli_train.labels : list[str]
KorNLI.snli_1.0_train: size=550152
  - KorNLI.snli_1.0_train.texts : list[str]
  - KorNLI.snli_1.0_train.pairs : list[str]
  - KorNLI.snli_1.0_train.labels : list[str]
KorNLI.xnli_dev: size=2490
  - KorNLI.xnli_dev.texts : list[str]
  - KorNLI.xnli_dev.pairs : list[str]
  - KorNLI.xnli_dev.labels : list[str]
KorNLI.xnli_test: size=5010
  - KorNLI.xnli_test.texts : list[str]
  - KorNLI.xnli_test.pairs : list[str]
  - KorNLI.xnli_test.labels : list[str]

str(korpus.multinli_train)

KorNLI.multinli_train: size=392702
  - KorNLI.multinli_train.texts : list[str]
  - KorNLI.multinli_train.pairs : list[str]
  - KorNLI.multinli_train.labels : list[str]

KorSTS

str(korpus)

KorSTSKorpus
    Author : KakaoBrain
    Repository : https://github.com/kakaobrain/KorNLUDatasets
    References :
        - Ham, J., Choe, Y. J., Park, K., Choi, I., & Soh, H. (2020). KorNLI and KorSTS: New Benchmark
           Datasets for Korean Natural Language Understanding. arXiv preprint arXiv:2004.03289.
           (https://arxiv.org/abs/2004.03289)

    This is the dataset repository for our paper
    "KorNLI and KorSTS: New Benchmark Datasets for Korean Natural Language Understanding."
    (https://arxiv.org/abs/2004.03289)
    We introduce KorNLI and KorSTS, which are NLI and STS datasets in Korean.

Attributes
----------
KorSTS.train: size=5749
  - KorSTS.train.texts : list[str]
  - KorSTS.train.pairs : list[str]
  - KorSTS.train.labels : list[str]
  - KorSTS.train.genres : list[str]
  - KorSTS.train.filenames : list[str]
  - KorSTS.train.years : list[str]
KorSTS.dev: size=1500
  - KorSTS.dev.texts : list[str]
  - KorSTS.dev.pairs : list[str]
  - KorSTS.dev.labels : list[str]
  - KorSTS.dev.genres : list[str]
  - KorSTS.dev.filenames : list[str]
  - KorSTS.dev.years : list[str]
KorSTS.test: size=1379
  - KorSTS.test.texts : list[str]
  - KorSTS.test.pairs : list[str]
  - KorSTS.test.labels : list[str]
  - KorSTS.test.genres : list[str]
  - KorSTS.test.filenames : list[str]
  - KorSTS.test.years : list[str]

str(korpus.train)

KorSTS.train: size=5749
  - KorSTS.train.texts : list[str]
  - KorSTS.train.pairs : list[str]
  - KorSTS.train.labels : list[str]
  - KorSTS.train.genres : list[str]
  - KorSTS.train.filenames : list[str]
  - KorSTS.train.years : list[str]

NamuwikiTextKorpus

NamuwikiTextKorpus
    Author : Hyunjoong Kim lovit@github
    Repository : https://github.com/lovit/namuwikitext
    References :

    나무위키의 덤프 데이터를 바탕을 제작한 wikitext 형식의 텍스트 파일입니다.
    학습 및 평가를 위하여 위키페이지 별로 train (99%), dev (0.5%), test (0.5%) 로 나뉘어져있습니다.

Attributes
----------
NamuwikiText.train: size=16
  - NamuwikiText.train.texts : list[str]
  - NamuwikiText.train.pairs : list[str]
NamuwikiText.test: size=22037
  - NamuwikiText.test.texts : list[str]
  - NamuwikiText.test.pairs : list[str]
NamuwikiText.dev: size=21726
  - NamuwikiText.dev.texts : list[str]
  - NamuwikiText.dev.pairs : list[str]

NaverChangwonNERKorpus

str(korpus)

NaverChangwonNERKorpus
    Author : 네이버 + 창원대
    Repository : https://github.com/naver/nlp-challenge/tree/master/missions/ner
    References : http://air.changwon.ac.kr/?page_id=10

    개체명(Named Entity)은 인명, 기관명, 지명 등과 같이 문장 또는 문서에서 특정한 의미를 가지고 있는 단어 또는 어구를 말합니다.
    이 때문에 개체명은 정보 검색 및 언어 이해를 위한 분석에서 주요한 대상으로 다루어지고 있습니다.
    Data.ly에서는 개체명 코퍼스를 제공하여 연구에 도움을 드리고자 하며, 공개적인 리더보드를 통해 많은 분들의 연구 동향을 논의/공유하고자 합니다.
    제공되는 코퍼스는 Data.ly에서 제작한 것으로, 연구 및 리더보드를 위한 학습으로 사용 가능하며 상업적인 목적으로 사용될 수 없습니다.

Attributes
----------
NaverChangwonNER.train: size=90000
  - NaverChangwonNER.train.texts : list[str]
  - NaverChangwonNER.train.words : list[list]
  - NaverChangwonNER.train.tags : list[list]

str(korpus.train)

NaverChangwonNER.train: size=90000
  - NaverChangwonNER.train.texts : list[str]
  - NaverChangwonNER.train.words : list[list]
  - NaverChangwonNER.train.tags : list[list]

NSMCKorpus

str(nsmc)

NSMCKorpus
    Author : e9t@github
    Repository : https://github.com/e9t/nsmc
    References : www.lucypark.kr/docs/2015-pyconkr/#39

    Naver sentiment movie corpus v1.0
    This is a movie review dataset in the Korean language.
    Reviews were scraped from Naver Movies.

    The dataset construction is based on the method noted in
    [Large movie review dataset][^1] from Maas et al., 2011.

    [^1]: http://ai.stanford.edu/~amaas/data/sentiment/

Attributes
----------
NSMC.train: size=150000
  - NSMC.train.texts : list[str]
  - NSMC.train.labels : list[int]
NSMC.test: size=50000
  - NSMC.test.texts : list[str]
  - NSMC.test.labels : list[int]

str(nsmc.train)

NSMC.train: size=150000
  - NSMC.train.texts : list[str]
  - NSMC.train.labels : list[int]

QuestionPairKorpus

str(korpus)

QuestionPairKorpus
    Author : songys@github
    Repository : https://github.com/songys/Question_pair
    References :

    질문쌍(Paired Question v.2)
    짝 지어진 두 개의 질문이 같은 질문인지 다른 질문인지 핸드 레이블을 달아둔 데이터
    사랑, 이별, 또는 일상과 같은 주제로 도메인 특정적이지 않음

Attributes
----------
QuestionPair.train: size=6888
  - QuestionPair.train.texts : list[str]
  - QuestionPair.train.pairs : list[str]
  - QuestionPair.train.labels : list[str]
QuestionPair.test: size=688
  - QuestionPair.test.texts : list[str]
  - QuestionPair.test.pairs : list[str]
  - QuestionPair.test.labels : list[str]

str(korpus.train)

QuestionPair.train: size=6888
  - QuestionPair.train.texts : list[str]
  - QuestionPair.train.pairs : list[str]
  - QuestionPair.train.labels : list[str]