본문 바로가기

NLP

3. 카운트 기반 단어 표현

자연어 처리에서 텍스트를 표현하는 여러 방법 중

 

텍스트를 카운트 기반으로 수치화하는 방식에 대해 얘기해보려 한다.

 

Bag of Words(BoW)

Bag of Words : 단어들의 순서는 전혀 고려하지 않고, 출현 빈도에만 집중하는 텍스트 수치화 방식.

 

단어들을 가방에 담아서 흔들어 섞는다면

 

순서는 상관없이 얼마나 많이 나왔는지가 주요 포인트 일 것이다.

 

Bow 만드는 과정

 

1. 각 단어에 고유한 정수 인덱스 부여

 

2. 각 인덱스의 위치에 단어 토큰의 등장 횟수를 기록한 벡터를 만듦.

 

ex) doc1 = "정부가 발표하는 물가상승률과 소비자가 느끼는 물가상승률은 다르다."

      vocabulary : {'정부': 0, '가': 1, '발표': 2, '하는': 3, '물가상승률': 4, '과': 5, '소비자': 6, '느끼는': 7, '은': 8, '다르다': 9}

      bag of words vector : [1, 2, 1, 1, 2, 1, 1, 1, 1, 1]

 

BoW 활용

 

  • 단어의 출현빈도를 기준으로 문서의 성격을 판단하는 작업에 사용
    • 분류 문제, 여러 문서간의 유사도
  • 불용어를 제거 -> 처리의 정확도를 높이기 위해 선택할 수 있는 기법

 

문서 단어 행렬(DTM)

 

DTM : 다수의 문서에서 등장하는 각 단어들의 빈도를 행렬로 표현한 것.

 

=> 각 문서에 대한 BoW를 하나의 행렬로 만든 것.

 

ex) 문서1 : 먹고 싶은 사과
      문서2 : 먹고 싶은 바나나
      문서3 : 길고 노란 바나나 바나나
      문서4 : 저는 과일이 좋아요

 

<예시 DTM>

  과일이 길고 노란 먹고 바나나 사과 싶은 저는 좋아요
문서1 0 0 0 1 0 1 1 0 0
문서2 0 0 0 1 1 0 1 0 0
문서3 0 1 1 0 2 0 0 0 0
문서4 1 0 0 0 0 0 0 1 1

 

DTM의 한계

  • 희소표현 : 원-핫 벡터와 같이 전체 단어집합의 크기를 가짐 => 많은 양의 저장공간, 높은 계산 복잡도 요구
    • 단어 집합의 크기를 줄이는 것이 중요
  • 단순 빈도수 기반 접근 : 불용어와 같은 단어들은 빈도수가 높을 확률 높아
    • 그렇게 불용어의 빈도수가 고루 많다고 해서 유사한 문서라고 판단하는 것은 오류

어떻게 해결해야 할까? 

 

DTM에서 불용어나 중요단어에 대해 가중치를 줄 수 있는 방법은 없을까?

 

TF-IDF

TF-IDF : 단어의 빈도(Term Frequency)와 역문서 빈도(Inverse Document Frequency)를 사용해

 

               DTM내의 각 단어들의 중요한 정도를 가중치로 주는 방법.

 

TF-IDF의 용어들을 하나씩 정리해보자

 

  • d : 문서(document), t : 단어(term), n : 문서의 총 개수
  • TF-IDF : TF와 IDF를 곱한 것
  • tf(d,t) : 특정 문서 d에서 특정 단어 t의 등장 횟수
  • df(t) : 특정단어 t가 등장하는 문서의 수
  • idf(d,t) : df(t)에 반비례하는 수
    • n이 커질수록 idf가 기하급수적으로 커지는 상황 log로 방지

<예시 IDF>

단어 IDF(역 문서 빈도)
과일이 ln(4/(1+1)) = 0.693147
길고 ln(4/(1+1)) = 0.693147
노란 ln(4/(1+1)) = 0.693147
먹고 ln(4/(2+1)) = 0.287682
바나나 ln(4/(2+1)) = 0.287682
사과 ln(4/(1+1)) = 0.693147
싶은 ln(4/(2+1)) = 0.287682
저는 ln(4/(1+1)) = 0.693147
좋아요 ln(4/(1+1)) = 0.693147

 

<예시 TF - IDF>

  과일이 길고 노란 먹고 바나나 사과 싶은 저는 좋아요
문서1 0 0 0 0.287682 0 0.693147 0.287682 0 0
문서2 0 0 0 0.287682 0.287682 0 0.287682 0 0
문서3 0 0.693147 0.693147 0 0.575364 0 0 0 0
문서4 0.693147 0 0 0 0 0 0 0.693147 0.693147

 

TF-IDF의 활용

  • 해석
    • 모든 문서에서 자주 등장하는 단어 -> 중요도가 낮음 / 특정 문서에서만 자주 등장하는 단어 -> 중요도가 높음
    • TF-IDF : 단어의 등장 빈도 * 특정 단어가 여러 문서에서 등장하는 것에 대한 패널티
    • TF-IDF값이 낮음 -> 중요도 낮음, 높음 -> 중요도 높음
  • 사용
    • 문서의 유사도를 구하는 작업
    • 검색 시스템에서 검색 결과의 중요도를 정하는 작업
    • 문서 내에서 특정 단어의 중요도를 구하는 작업

'NLP' 카테고리의 다른 글

2. 텍스트를 숫자로 - 인코딩  (0) 2023.03.03
1. NLP의 뿌리, 텍스트 전처리  (0) 2023.02.28
자연어 처리 워크플로우  (0) 2023.02.19