* Weekly nlp의 Week 1, 2에 해당하는 내용

 

본문 링크: https://jiho-ml.com/weekly-nlp-1/

 

Week 1 - 컴퓨터에게 언어는 어떤 의미일까?

우리는 언어라는 것을 어떻게 인식하고 있을까요? 여러분에게 언어는 무엇인가요?

jiho-ml.com

 

Vocabulary 만들기

Vocabulary: 단어 명단 (unique words)

Vocabulary

 

one-hot vector: 모든 단어가 vector로 표시 된 것 (모든 열 중에 단 하나만 1이고 나머지는 0)

위 vocabulary의 원 핫 벡터 (one-hot vector)

  • index 0의 unk = unknown이라는 뜻 --> 새로운 단어를 봤을 때 모른다고 표시 하기 위해 존재

 

 

word frequency를 이용한 vocabulary 구성

  • 대부분의 NLP task는 아는 단어를 보아 vocabulary를 구성하는 것부터 시작
    • 가지고 있는 데이터를 전부 모으는 작업이 우선 --> 여기서의 데이터 = corpus
  • 주로 vocabulary를 구성할 때는 word frequency (단어 빈도수)를 살펴봄 (한두 번 나오는 무의미할 것이라는 가정 -> 이 가정이 틀리는 경우도 있음을 유의)

그래서

  1. corpus의 사이즈에 따라 minimum frequency (최소 빈도수)를 정하고 그 이상의 단어들만 사용하거나; or
  2. 총 vocabulary size를 정하고 frequency가 큰 단어부터 포함시키는 방법으로 vocabulary 구성

 


 

본문 링크: https://jiho-ml.com/weekly-nlp-2/

 

Week 2 - 단어를 가방에 때려 넣으면 문장이 된다

단어가 모여 문장을 이루고, 문장이 모여 문서를 이룹니다. 문장을 이해하는데 단어의 순서가 중요할까요?

jiho-ml.com

 

  • 단어가 모이면 문장, 문장이 모이면 문서
  • 문장을 이해하는데에 단어의 순서는 중요함 (문장의 내용을 정확하게 알고싶을 때)
  • 하지만 그 문장의 단순 주제만 알고싶다면 순서는 크게 상관이 없음

--> NLP에서는 해결하고자 하는 문제에 따라 문장을 표현하는 방법이 달라질 수 있음

 

이번에는 순서가 상관 없는 문장 표현 방법에 대해 얘기

 

 

Bag-of-words (BoW)

One-hot vector: 단어를 한 개의 column vector로 표현
Bag-of-words (BoW) vector: 여러 개의 단어의 vector를 단순히 합해서 문장을 표현

3개의 one-hot vector 더해진 결과 = BoW vector

  • 여러개의 one-hot vector를 더해서 하나의 column vector로 표현
  • BoW vector는 Nx1 매트릭스 문장 안에 포함된 단어의 frequency를 표시

 

***하나의 vector로 뭉개서 표현하기 때문에 BoW vector는 단어의 순서를 고려하지 않음***

 

 

N-gram: 순서 고려

n-gram: 연속된 n개의 단어 뭉치

e.g.

"I love studying machine learning", bi-gram (n=2)

--> [I love, love studying, studying machine, machine learning]

  • 조금 더 단어 사이의 순서 고려 가능
  • machine learning같은 phrase도 고려 가능
  • 보통은 n = 2~3

bi-gram까지 고려한 vocabulary

***중요한 컨셉; 위키피디아 설명 확인하기***

 

 

Tf-idf vector: 단어 중요도

tf-idf (term frequency - inverse document frequency): 단어 간 빈도 수에 따라 중요도를 계산해 고려하는 방법
  • 학습 데이터 크기 ↑ = 자주 쓰이는 단어의 frequency ↑

 

term frequency (tf): 현재 문서(문장)에서의 단어의 빈도수
document frequency (df): 이 단어가 나오는 문서(문장) 총 개수

 

 

article (관사)나 pronoun (대명사)는 자주 나오지만 중요도는   
"the, he, she, it, a" 인공지능 (AI), 자연어 처리 (NLP)
  • 문장의 주제를 파악하는 중요하지 않을 수도 있음 = stopwords (불용어)
  • 자주 등장하는 단어는 아님; 하지만 문서의 주제를 유추하는데 아주 중요한 역할
tf, df 둘 다 아주 높음 tf는 높을 수 있음
df는 상대적으로 낮음

 

tf-idf score

N = total number of document

  • 기존 BoW에서 문서 내 단어 빈도수를 고려하되, 다른 문서에도 너무 자주 나오는 건 중요도를 낮추게 함
    • because if a term occurs in a large number of docs, it won't play important role in finding out documents relevant to the term
  • df는 분모에 등장 --> inverse document frequency (idf)라고 함

tf-idf vector = Nx1 vector 모양의 BoW vector에서 tf점수를 idf로 normalize한 것으로 이해하면 됨 (idf로 나눴으니까)

(tf-idf value는 stopwords에 낮은 weight을 부여함; 반대로 tf가 높거나 df가 낮은 단어들한테 높은 weight을 부여함)

 

 

BoW, Tf-idf vector의 단점 (중요)

  1. 순서가 중요한 문제에는 쓰기 힘들다
    • BoW와 tf-idf는 간단하지만 topic classification이나 document retrieval같은 task에는 좋은 성능을 보임
    • 순서가 중요하지 않은 문제에서 강함
    • 그래서 순서가 중요한 문제에서는 정보생략으로 인해 성능이 좋지않음 e.g. machine translation
  2. vocabulary가 커질수록 쓰기 힘들다
    • vocabulary size ↑ = vector size ↑ --> one-hot vector의 고질적인 문제
    • Nx1 column vector로 단어/문장을 표현
      • N(=vocabulary size)가 커지면 전체 vector가 엄청나게 커짐(대부분 0) = sparse matrix
  3. 단어간의 관계를 표현하지 못한다
    • one-hot vector는 각 단어를 각각의 index로 구별하기 때문에 서로의 연관성을 표현 할 수 없음
      • = one-hot vector는 서로 orthogonal 함