Chapter 1. 텍스트 데이터에서

Jens Albrecht, Sidart Ramachandran, Christian Winkler, Blueprints for Text Analytics Using Python, 심상진, Hanbit Media-OREILLY (2022), p29-68.

EDA

  • 탐색적 데이터 분석
  • 설문조사 수준의 데이터(요약, 통계, 결측값 등)를 체계적으로 검토하는 과정
  • NLP에서 통계 검색은 말뭉치에서 수행됩니다.
    • 메타데이터: 범주, 작성자, 날짜/시간
    • 내용: 단어, 구, 사물 -> 상대 빈도 사용
      • 단어: 문장의 공백 단위
        • 전. 나는 / 만났다 / 친구를 / 도서관에서
      • 구: 술어 없이 하나의 단어로 사용되는 두 개 이상의 단어 덩어리.
        • 전. 귀여운 강아지(명사구), 많이 먹는다(동사구)
      • 문장: 주어+술어 덩어리, 종결어미가 없어 문장으로 완전하지 않음
  • 점수: 인기도, 정서, 가독성 -> 역시 모델에서 도출

데이터 샘플링

  • 샘플링: df.sample(frac=0.1)
    • 무작위 추출 10% -> 메인 메모리에 로드

개요를 확인하세요

  • 메모리, 데이터 유형: df.info()
  • 요약 통계:
    • 숫자: df.describe()
    • 범주형: df.describe(include=”O”)
  • 누락된 값의 수: df.isna().sum()

데이터 배포

범주형 변수(빈도)

  • 빈도: df(열 이름).value_counts()


Chapter 1. 텍스트 데이터에서 1
주파수 결과

  • 빈도 비율: df(열 이름).value_counts(normalize=True)


Chapter 1. 텍스트 데이터에서 2
주파수 비율 결과

  • 상자 그림: df(열 이름).plot(종류=’상자’, vert=False, figsize=(8, 1))
    • vert: vertical -> 틀리면 가로로 그립니다.


Chapter 1. 텍스트 데이터에서 3
박스 플롯

  • 히스토그램: df(열 이름).hist(bins=30, figsize=(8,2))


Chapter 1. 텍스트 데이터에서 4
히스토그램

  • seaborn distplot: sns.distplot(df(열 이름), bins=30, kde=True)


Chapter 1. 텍스트 데이터에서 5
거리 플롯

  • seaborn violinplot: sns.catplot(data=df, x=열 이름, y=열 이름, 종류=’바이올린’)


Chapter 1. 텍스트 데이터에서 6
바이올린 플롯

시간 리샘플링

  • pandas 시리즈 개체의 ‘dt’ 접근자 사용
  • 유형
    • dt.date: 날짜 추출
    • dt.year: 연도 추출
    • dt.Quarter: 분기 추출
    • dt.hour: 시간 추출
    • dt.month: 월 추출
    • dt.week: 주 추출
    • dt.strftime(형식): 원하는 날짜 형식을 지정합니다.
  • Panda의 내장 함수 “Resample”을 사용합니다.
    • 일간/주간/월간 단위로 집계 및 처리 가능

전처리 파이프라인

  • 1단계: 변환(대문자 -> 소문자)
  • 2단계: 토큰화: 예: 공백 또는 정규식 사용
    • 지도 적용 기능 사용
      • 맵: 단일 열 변환
      • 적용: 1단, 다단 변환 가능
      • applymap: 모든 데이터 셀 적용
  • 3단계: 불용어 제거
    • 중지 단어: 자주 발생하지만 많은 정보를 전달하지 않는 단어(예: 부사, 대명사 등)
    • nltk 중지 단어가 자주 사용됨 nltk.corpus.stopwords.words(‘english’)
    • 반드시 제거해서는 안 됨 -> 불용어는 긍정적/부정적 의미를 가지며 전체의 중요한 부분 중 중요한 부분이 될 수 있음
      • 전. I don’t like cheese에서 don’t는 중지 단어이지만 부정은 not에서 파생될 수 있습니다.
      • 불용어 목록을 사용하는 대신 문서(사용 중인 데이터) 내에서 빈도가 80% 이상인 단어를 처리하는 것이 유용할 수 있습니다.

토큰화

  • 주어진 코퍼스를 토큰이라는 단위로 나누는 작업입니다.
  • 토큰 표준은 여러 가지 방법으로 설정할 수 있습니다. B. 단어, 구, 문장 및 문자열.
  • 단어 기호
    • 영어는 장소별로 쉽게 구분할 수 있습니다.
    • 한글은 교착어이기 때문에 공백으로 구분할 수 없습니다.
      • 교착어(agglutinative language): 조사, 어미 등을 더해 단어를 형성하는 언어.
        전. 영어: 그/그, 한국어: 그, 그, 그, 그, 그
      • 한국어에는 조사와 같이 접미사가 붙는 것이 많기 때문에 모두 분리해야 합니다.
      • 형태소로 구분해야 함

단어 빈도 분석

  • 반대 클래스
    • 물건의 수를 세다
    • 토큰 목록은 계속 업데이트될 수 있습니다.

      Chapter 1. 텍스트 데이터에서 7

    • most_common을 사용하여 가장 일반적인 단어를 찾을 수 있습니다.

      Chapter 1. 텍스트 데이터에서 8

  • 주파수 차트


Chapter 1. 텍스트 데이터에서 9

  • 단어 구름
    • 다양한 글꼴 크기로 빈도 시각화
    • 콘텐츠가 이해하기 쉽고 비교 가능하지만 정확하지 않음


Chapter 1. 텍스트 데이터에서 10

  • 히트맵


Chapter 1. 텍스트 데이터에서 11

TF-IDF

  • 전반적으로 가장 일반적인 단어보다. “개별 날짜에만” 흔한 말이 더 중요하다
  • TF: 용어 빈도
    • tf(d,t): 특정 문서(d)에서 특정 단어
  • IDF: 역 문서 빈도
    • df
    • 일반적인 용어의 영향을 줄이기 위해 사용
    • 대수 스케일링 처리 -> 희귀 단어가 매우 높은 점수를 받는 것을 방지합니다.
      • 예: 문서 수(n) = 1,000,000인 경우


Chapter 1. 텍스트 데이터에서 12

  • 일반적으로 분모가 0이 되는 것을 방지하기 위해 1을 더합니다.
    $$idf
  • TF * IDF: 특정 문서에만 자주 등장하는 단어가 높은 값을 가짐

컨텍스트에서 키워드 검사

  • 문맥의 키워드(KWIC)
  • nltk 또는 textacy 사용
    • textacy.extract.kwic.keyword_in_context
  • 시각화 결과(워드 클라우드, 빈도 차트 등)를 보고 알 수 없는 토큰에 대한 세부 정보를 살펴봐야 합니다.
    • 약어? 전처리의 결과? 등.
  • 키워드의 왼쪽과 오른쪽에 특정 수의 단어 나열
    • SDGs가 “지속 가능한 개발 목표”임을 알 수 있습니다.

      Chapter 1. 텍스트 데이터에서 13

n-그램

  • 문서/문장 내에서 정확한 의미를 찾기 위해 두 개 이상의 단어 조합을 살펴봐야 할 수도 있습니다.
  • 전. 연결, 배열
    • 자기 확신
    • 기후 변화
  • 단어 수에 따른 이름 분류
    • 1단어의 조합: unigram
    • 두 단어의 조합: Bigram
    • 세 단어의 조합: trigram
  • 3개 이하의 ngram 권장(n이 증가함에 따라 조합 수가 기하급수적으로 증가하기 때문)
  • 전치사 및 수식어와 같은 불용어를 제거하고 조합을 찾는 것이 좋습니다.
    • 중지 단어를 제거하고 n-gram을 실행하면 먼저 원본 텍스트에 없는 n-gram이 생성됩니다.
      먼저 n-gram을 실행한 다음 중지 단어를 제거하는 것이 좋습니다.

참조