본문 바로가기

공부방/Upstage AI Lab 4기

[NLP] 화자가 몇 명인지 정보를 주면 좋을까?

데이터 전처리를 하기 위해 EDA를 계속 하던 중...

데이터 클리닝이 필요할까 싶어서 이상치들을 찾으려고 노력했는데, 딱히 특수문자나 약어가 들어간 것도 별로 없었다. 데이터 클리닝을 할 필요가 없는 것 같다. 

대신 보다 보니, 화자가 최대 몇 명일까가 궁금했다.

def analyze_speakers(dialogues):
    # 화자 패턴을 찾는 정규표현식
    speaker_pattern = re.compile(r'#Person\d+#')
    
    # 각 대화별 화자 수를 저장
    dialogue_speakers = []
    # 전체 데이터셋에서 발견된 모든 화자
    all_speakers = set()
    
    for dialogue in dialogues:
        # 현재 대화에서 발견된 화자들
        speakers = set(speaker_pattern.findall(dialogue))
        dialogue_speakers.append(len(speakers))
        all_speakers.update(speakers)

	print(f"전체 대화 수: {len(dialogues)}")
	print(f"\n발견된 모든 화자: {sorted(all_speakers)}")    
    print(f"최소 화자 수: {min(dialogue_speakers)}명")
    print(f"최대 화자 수: {max(dialogue_speakers)}명")
    
    # 화자 수 분포
    speaker_counts = Counter(dialogue_speakers)
    print("\n화자 수 분포:")
    for num_speakers, count in sorted(speaker_counts.items()):
        percentage = (count / len(dialogues)) * 100
        print(f"{num_speakers}명: {count}개 대화 ({percentage:.1f}%)")
        
   
analyze_speakers(dialogue_list)
 === 화자 분석 결과 ===
전체 대화 수: 12457
발견된 모든 화자: ['#Person1#', '#Person2#', '#Person3#', '#Person4#', '#Person5#', '#Person6#', '#Person7#']
최소 화자 수: 2명
최대 화자 수: 7명

화자 수 분포:
2명: 12332개 대화 (99.0%)
3명: 111개 대화 (0.9%)
4명: 9개 대화 (0.1%)
5명: 3개 대화 (0.0%)
6명: 1개 대화 (0.0%)
7명: 1개 대화 (0.0%)

2명이서 대화하는 경우가 99%라서 딱히 3명 이상인 경우를 학습을 시켜야하는건가 싶기도 하다. 차라리 3명 이상인 대화는 학습에서 빼버릴까..? 

아니면 3명 이상인 경우는 토큰으로 3명 이상이라고 표시를 해줄까? 화자가 많아지면 내용도 산만하고 복잡해지니까, "화자1, 화자2, 화자3이 뭘 주제로 얘기했다" 이런 표현을 넣는 데 도움이 될 수도 있고.

 

주의점!

대신 3명 이상 대화한 대화에 대해 학습이 부족해서(1% 미만의 데이터..) 학습이 충분하지 못하다면, 오히려 화자수 정보가 노이즈가 될 수도 있다고 한다. 또 과적합 위험이 있다. 

-> 우선 2명 / 3명 이상 이렇게 두 가지로만 구분하고 모델을 학습시켜서 성능을 비교해보자!

 

결과

노이즈로 작용했나보다; 오히려 0.6정도 떨어졌다. 폐기 ㄱㄱ

점수가 낮아진 이유는 몇 가지가 있을 수 있습니다:

  1. 데이터 불균형 문제
    • 2명 대화가 99%, 3명 이상이 1%로 극심한 불균형
    • "[다자간 대화]" 토큰이 너무 드물게 등장해서 모델이 이 토큰의 의미를 제대로 학습하지 못했을 수 있음
  2. 불필요한 노이즈 추가
    • 대화 내용 자체에 이미 화자 정보(#person1#, #person2# 등)가 포함되어 있어서
    • 추가적인 "[다자간 대화]" 토큰이 중복 정보가 되었을 수 있음
  3. 요약 특성
    • 요약할 때는 화자 수보다 대화 내용이 더 중요할 수 있음
    • 실제로 2명이 대화하든 3명이 대화하든 핵심 내용 요약에는 큰 차이가 없을 수 있음
    •  

 

뭘 해야 성능이 좋아질까. LLM을 활용할 방법은 없나..