본문 바로가기
NLP

Chapter 5. 특성 엔지니어링 및 구문 유사성

by Night Fury 2023. 3. 26.
젠스 알브레히트, 시다르트 라마찬드란, 크리스티안 윙클러, 『파이썬 라이브러리를 활용한 텍스트 분석 Blueprints for Text Analytics Using Python』, 심상진, 한빛미디어-OREILLY(2022), p177-212.

Learned

MultiLabelBinarizer

  • One-hot Encoding을 할 경우 MultiLabelBinarizer를 쓰는 것을 권장

Bag Of Words (BOW)

  • BOW를 이용해 문서 간의 유사성을 구할 때, 문서 벡터 간의 각도를 유사성의 척도로 활용하는 방법을 추천
    • 스칼라곱은 벡터의 크기(문서의 단어 수)에 민감함
    • 유클리디안 거리는 고차원 벡터 공간에서 유용하지 않음
      $$cos(a, b) = {{a \cdot b} \over {||a|| \cdot ||b||} } = { {\sum{a_ib_i}} \over { {\sqrt{\sum{a_ia_i}}} {\sqrt{\sum{b_ib_i}}} } }$$

특성 차원 축소

  • 연산량은 특성의 개수에 따라 제곱으로 커짐 -> \(O(N^2)\)
  • 매개변수 or 벡터화 방법을 변경할 때는 항상 특성 차원의 수를 관찰하는 것이 좋음
  • TfidfVectorizer에서 불용어 제거(stop_words), 최소 빈도(min_df) 및 최대 빈도(max_df)를 제한할 수 있음
    • TF-IDF 방법으로 비정규 용어 빈도 or 결과 벡터를 정규화하여 성능을 개선할 수 있음
    • 최소 빈도로 제한하는 경우, 새 문서에 등장하면 빈도 수가 커질 수 있기 때문에 정보의 유실이 발생 가능
    • 문서가 추가되는 경우 기존에 산출한 특성 수가 너무 적을 수 있음
  • 언어 분석(linguistic analysis)으로 차원을 줄일 수 있음
    • 특정 품사로 제한(ex. 명사, 형용사 등)
    • 표제어 추출(lemmatization)
      • 소설의 경우 시제가 중요할 수 있음 -> 분석 및 데이터에 맞게 텍스트 변환을 선택
    • 일반적으로 자주 사용하는 단어 제거 
      • 중요한 의미를 전달하는 단어가 포함될 수 있음 -> 다른 방법을 사용한 후, 추가적으로 수행하는 것을 권장

대규모 말뭉치 문서 유사도 산출

  • 준대각 요소만 계산 (문서 유사성 관계가 대칭적이기 때문에 가능) -> 계산할 요소의 수가 절반으로 감소
  • 개별 요소를 계산하는 대신 작은 블록 단위로 계산
    • 10,000 X 10,000개의 유사도 부분 행렬을 한 번에 계산 -> RAM 크기에 적합한 차원을 선택
    • 데이터 지역성을 활용하여 필요한 행렬의 요소가 이미 CPU 캐시에 있을 가능성이 큰 장점이 있음
    • 대각선 블록은 흰색 요소와 대각선 요소를 중복 계산함 (검정색 부분과 겹칠 수 밖에 없기 때문)

ex. 3 X 3으로 블록을 나누어 계산

  • 전체 데이터셋에 계산을 하기 전에 단일 계산을 실행하고 전체 알고리즘의 런타임과 메모리양을 추정하면 좋음
    • 복잡성(선형, 다항식, 지수)이 증가함에 따라 런타임과 메모리가 어떻게 증가하는지 이해해야됨

Reference

반응형

댓글