빈도 기반 벡터화 기법 - BoW, DTM, TF-IDF

» NLP

1. Bag of Words

  • 단어들의 가방이라는 의미로 각 단어들과 빈도들을 대응시킨 형태로 파이썬의 dictionary 타입으로 표현하기 편합니다.

  • 예시

    문서1 = “내가 그린 그림은 기린 그림이다. “

    {“내가” : 1, “그린”: 1, “그림”: 2, “은”: 1, “기린”: 1, “이다”: 1, “.”: 1}

  • BoW의 문제점

    • 어순에 따라서 달라지는 의미를 반영하지 못한 형태입니다.

2. DTM(Document Term Matrix)

  • 여러개 문서들을 BoW 형태로 만든뒤 하나의 행렬로 합친 형태입니다.

  • DTM의 행벡터는 문서들을 의미하고 열벡터는 단어들을 의미합니다.

  • 예시

    문서1 = [“기린”, “그림”, “이다”, “.”]

    문서2 = [“기린”, “그림”, “이냐”, “?”]

    문서3 = [“그림”, “이”, “아니”, “구나”, “.”]

    image

  • 각 문서의 벡터를 구하였기에 문서간의 벡터 유사도를 통하여 문서간의 유사성을 계산할 수 있습니다.
    • 벡터의 유사도를 계산하는 방법으로 일반적으로는 코사인 유사도를 사용합니다.
    • 코사인 유사도의 값은 -1과 1사이의 값을 가지며 1에 가까울수록 두 문서의 유사도가 높다고 판할 수 있습니다.
    • 코사인 유사도 = $similarity = cos\theta = \frac{A \cdot B}{\vert \vert A \vert \vert \vert \vert B \vert \vert}$​
  • DTM의 문제점

    • 단어의 갯수가 늘어나고 문서의 갯수가 늘어날수록 0을 가진 값들이 늘어나게 되며 이로하여 아무런 의미없는 값들이 저장공간에 포함되기 때문에 저장공간의 낭비가 심해집니다.
    • 빈도론적 관점에서 만들어진 행렬이기 때문에 단어 벡터들은 단어의 의미가 담겨있지 않습니다.

3. TF-IDF

  • TF-IDF는 Term Frequency - Inverse Document Frequency의 줄임말입니다.

  • 단어의 빈도인 TF와 문서 빈도의 역수인 IDF를 활용합니다.

    • TF : 특정 문서에만 자주 등장하는 단어의 중요도는 높다고 판단
    • IDF : 모든 문서에서 자주 등장하는 단어의 중요도는 낮다고 판단

    수식은 TF-IDF의 가중치를 구하기 위한 수식은 다음과 같습니다.

    $w_{x,y} = tf_{x,y} \times log \frac{N}{df_x}$​

    • $w_{x,y}$​​​​​​는 문서 $y$​​ ​​에 있는 단어 $x$ ​​​​에 대한 TF-IDF 가중치를 의미합니다.
    • $tf_{x,y}$는 문서 $y$ 에 있는 단어 $x$​ 의 개수를 의미합니다. (TF)
      • 특정 문서의 안에서만 자주 언급되는 단어는 중요한 가치가 있다고 봅니다.
      • 일부 전문 서적의 문서 같은 경우 자주 나오는 전문용어가 그 문서의 주제라고 볼 수 있으며 가치가 높다고 평가할 수 있습니다.
    • $df_x$는 단어 $x$​를 포함하고 있는 문서의 개수를의미합니다. (IDF)
      • 여러곳의 문서에서 자주 언급되는 단어의 가치는 낮다고 봅니다.
      • 영어의 경우 관사 a, an, the는 어느 문서에도 속할 수 있지만 해당 단어가 가진 가치는 낮습니다.
    • $N$은 총 문서의 개수를 의미합니다. (IDF)
  • TF-IDF를 사용하기 위해서 우선 DTM을 만든뒤 TF-IDF 가중치를 DTM에 적용시켜줍니다.

  • TF-IDF의 문제점

    • TF-IDF 벡터로 단어의 의미를 표현하지 못하였습니다.
    • 서로 다른 단어이인데 의미는 동의어 포착이 어렵습니다.