Project/한국어 대화 분류 및 요약

[Project] 한국어 대화 분류 및 요약 - 데이터 전처리 2

gangee 2024. 6. 9. 19:22
728x90
반응형
  • 이전 전처리에서 추가 전처리 진행

AI Hub 데이터

  • 너무 짧은 문장은 주제 파악 및 요약이 불가능하거나 의미가 없다고 판단하여 10글자 이하의 문장 삭제
  • 박스플롯을 기준으로 Q1 이하, Q3 이상 문장 삭제
    • 데이터 노이즈를 줄여 분석 및 모델링의 정확성을 높임
    • 이상치를 제거하여 극단적인 값이 분석 결과에 미치는 영향을 최소화
# 1. 길이가 10인 텍스트 데이터 제거
filtered_texts = [text for text in texts if len(text) > 10]
lengths = [len(text) for text in filtered_texts]

# 2. Q1 이하 및 Q3 이상의 길이를 가진 문장 제거
Q1 = np.percentile(lengths, 25)
Q3 = np.percentile(lengths, 75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR

print(f"Q1: {Q1}")
print(f"Q3: {Q3}")
print(f"IQR: {IQR}")
print(f"Lower Bound: {lower_bound}")

filtered_data = {key: value for key, value in data.items() if Q1 < len(value) < Q3}

삭제 전 박스플롯, 히스토그램 삭제 후 박스플롯, 히스토그램

지식인 데이터 전처리

def split_and_save_csv(df, category, save_directory):

    # 필요한 열이 존재하는지 확인
    if all(column in df.columns for column in ['카테고리', '키워드', '질문', '답변']):
        # 질문과 답변 분리
        df_q = df[['카테고리', '키워드', '질문']]
        df_r = df[['카테고리', '키워드', '답변']]

        # 저장할 파일 경로 생성
        q_file_path = os.path.join(save_directory, f"{category}_Q.csv")
        r_file_path = os.path.join(save_directory, f"{category}_R.csv")

        # 분리된 DataFrame 저장
        df_q.to_csv(q_file_path, index=False, encoding='utf-8')
        df_r.to_csv(r_file_path, index=False, encoding='utf-8')

        print(f"Saved {q_file_path} and {r_file_path}")
    else:
        print(f"Skipping {category}: Required columns are not present")

def process_all_csv_files(directory):
    data_frames = read_csv_files(directory)
    for df, file in data_frames:
        category = os.path.splitext(file)[0]
        split_and_save_csv(df, category, directory)

directory = '카테고리별'  # 카테고리별 파일들이 저장된 디렉토리
process_all_csv_files(directory)
  • AI Hub 데이터와 동일한 방식으로 불필요한 문자 제거, 띄어쓰기 교정, 맞춤법 교정 진행
  • 지식인 데이터의 경우 내용이 문어체로 작성되어 있어 별도로 변환 작업 진행

문어체 변환 작업

  • Hugging face의 kobart-text-style-transfer 모델을 사용하여 변환
728x90
반응형