데이터 전처리를 하기 위해 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정도 떨어졌다. 폐기 ㄱㄱ
점수가 낮아진 이유는 몇 가지가 있을 수 있습니다:
- 데이터 불균형 문제
- 2명 대화가 99%, 3명 이상이 1%로 극심한 불균형
- "[다자간 대화]" 토큰이 너무 드물게 등장해서 모델이 이 토큰의 의미를 제대로 학습하지 못했을 수 있음
- 불필요한 노이즈 추가
- 대화 내용 자체에 이미 화자 정보(#person1#, #person2# 등)가 포함되어 있어서
- 추가적인 "[다자간 대화]" 토큰이 중복 정보가 되었을 수 있음
- 요약 특성
- 요약할 때는 화자 수보다 대화 내용이 더 중요할 수 있음
- 실제로 2명이 대화하든 3명이 대화하든 핵심 내용 요약에는 큰 차이가 없을 수 있음
뭘 해야 성능이 좋아질까. LLM을 활용할 방법은 없나..
'공부방 > Upstage AI Lab 4기' 카테고리의 다른 글
[NLP] 모델 한번 바꿀 때마다 난관... (1) | 2024.11.27 |
---|---|
GPU 상세 스펙 알아두고, 메모리 램 관리하기 (0) | 2024.11.26 |
[NLP] 대화의 턴수와 주요 발화자를 토큰으로 추가해보자 (1) | 2024.11.19 |
[NLP] EDA | max_length 확인 (0) | 2024.11.19 |
[NLP 경진대회] 대회에 들어가며, 베이스라인 이해하기 (0) | 2024.11.18 |