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

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

gangee 2024. 5. 5. 21:17

목차

    728x90
    반응형

    데이터 구조 탐색

    • 음성 데이터를 텍스트로 옮겨서 전처리 진행
      • 변환 과정에서 발생한 문제
        1. 문장 구분을 위한 '/', 'n/'과 같은 특수 문자 포함
        2. 내용을 설명해주는 부가적인 텍스트 삽입
        3. 표준어가 아닌 구어체

    변환된 텍스트 파일

    1. 텍스트 정규화

    1-1. 정규 표현식

    • 정규 표현식을 사용하여 불필요한 문자 제거
      1. '/', 'n/'과 같이 특수하게 문장을 구분하는 형식을 공백으로 대체
      2. 영문자, 한글, 숫자, 공백, 일부 문자부호만 남기고 나머지 형식을 공백으로 대체
    # 정규표현식을 이용해 불필요한 문자 제거
    def remove_text(texts_dict):
        processed_texts = {}
        for file_path, text in texts_dict.items():
            # 소문자 알파벳 뒤에 /와 공백이 오는 형식 제거
            text = re.sub(r'[a-z]/\s', ' ', text)
    
            # 불필요한 문자 제거: 영문자, 숫자, 공백, 한글, 일부 문장부호만 남김
            text = re.sub(r'[^\w\s?.!가-힣]', ' ', text)
    
            processed_texts[file_path] = text
        return processed_texts

    1-2. PyKoSpacing

    • PyKoSpacing을 사용하여 띄어쓰기 교정
      • 불필요한 문제 삭제로 생긴 비정상적인 공백 형식 교정
    # PyKoSpacing을 사용하여 띄어쓰기 교정
    from pykospacing import Spacing
    
    def correct_spacing(texts_dict):
        spacing = Spacing()
        corrected_texts = {}
        for file_path, text in texts_dict.items():
            # 띄어쓰기 교정 적용
            corrected_text = spacing(text)
            corrected_texts[file_path] = corrected_text
        return corrected_texts

    1-3. ET5 Text2Text

    • ET5 Text2Text Generation Transformer model을 사용하여 맞춤법 교정
      • 한국어 구어체(대화체) 전용 맞춤법 교정 모델
    # ET5 Text2Text Generation Transformer model을 사용하여 맞춤법 교정
    # 모델과 토크나이저 로드
    model = T5ForConditionalGeneration.from_pretrained("j5ng/et5-typos-corrector")
    tokenizer = T5Tokenizer.from_pretrained("j5ng/et5-typos-corrector")
    device = "cuda:0" if torch.cuda.is_available() else "cpu"
    model = model.to(device)
    
    # 각 텍스트 항목에 대한 맞춤법 검사 및 교정
    for key, text in data.items():
        input_text = "맞춤법을 고쳐주세요: " + text
        input_encoding = tokenizer(input_text, return_tensors="pt")
        input_ids = input_encoding.input_ids.to(device)
        attention_mask = input_encoding.attention_mask.to(device)
    
        output_encoding = model.generate(
            input_ids=input_ids,
            attention_mask=attention_mask,
            max_length=128,
            num_beams=5,
            early_stopping=True
        )
        output_text = tokenizer.decode(output_encoding[0], skip_special_tokens=True)
        correctedspell_texts[key] = output_text
        print(f'Corrected: {output_text}\n')
    728x90
    반응형