Skip to content

AI_hub_data_preprocessing

KwonTaeYang edited this page May 24, 2021 · 3 revisions

1️⃣ AI hub Data

1. Why

  • 대회에서 제공받은 train data로만 학습할 경우 데이터의 수가 약 4000개로 overfitting 될 가능성이 있다고 판단
  • Squad dataset으로 pretrain한 결과 대회에서 제공받은 문제보다 쉬워 모델이 대회에서 제공받은 어려운 문제에 대해서는 학습이 잘 되지 않음

2. Data description

  • 기계독해 개발에 활용될 수 있는 뉴스 본문 기반 학습 데이터셋 45만 건 중 질문과 답이 존재하는 25만 건의 데이터만 사용
  • 참고

3. Load data

import json

# json file load
# 경로 확인 필요
with open("ko_nia_normal_squad_all.json", encoding="utf-8") as json_file:
    json_data = json.load(json_file)

#########################################################################################

# json to datasets class
class ToDatasets:
    def __init__(self):
        self.data = {}
        
    def __call__(self, data, index_num):
        # title
        self.data["title"] = data["title"]
        # context
        self.data["context"] = data["paragraphs"][0]["context"]
        # MRC에서만 적용한다면 필요없는 data
        self.data["document_id"] = 70000 + index_num
        
        result = []
        
        # question 갯수 만큼 iteration
        for temp_question in data["paragraphs"][0]["qas"]:
            temp_data = self.data.copy() # dictionary(mutable)이므로 copy
            
            temp_data["id"] = temp_question["id"]
            temp_data["question"] = temp_question["question"]
            temp_answer = {}
            for k, v in temp_question["answers"][0].items():
                temp_answer[k] = [v]
            temp_data["answer"] = temp_answer
            
            result.append(temp_data)
                
        return result

#########################################################################################

# Dataset에 필요한 value를 list에 저장

title_list = []
context_list = []
id_list = []
question_list = []
answer_list = []
document_id_list = []

for i in range(len(json_data["data"])):
    temp_dataset = ToDatasets()
    for temp_data in temp_dataset(json_data["data"][i], i):
        id_list.append(temp_data["id"])
        title_list.append(temp_data["title"])
        context_list.append(temp_data["context"])
        question_list.append(temp_data["question"])
        answer_list.append(temp_data["answer"])
        document_id_list.append(temp_data["document_id"])

# 모두 동일한 크기인지 check
print(len(id_list), len(title_list), len(context_list), len(question_list), len(answer_list), len(document_id_list))

#########################################################################################

# 필요 library import
from datasets import Dataset

# dictionary to Dataset
team_ikyo_dataset = Dataset.from_dict({"id" : id_list,
                                       "title": title_list, 
                                       "context": context_list, 
                                       "question": question_list,
                                       "answer": answer_list,
                                       "document_id": document_id_list})

# check data load
team_ikyo_dataset
"""
Dataset({
    features: ['id', 'title', 'context', 'question', 'answer', 'document_id'],
    num_rows: 243425
})
"""