* Weekly nlp의 Week 1, 2에 해당하는 내용
본문 링크: https://jiho-ml.com/weekly-nlp-1/
Week 1 - 컴퓨터에게 언어는 어떤 의미일까?
우리는 언어라는 것을 어떻게 인식하고 있을까요? 여러분에게 언어는 무엇인가요?
jiho-ml.com
Vocabulary 만들기
Vocabulary: 단어 명단 (unique words)
one-hot vector: 모든 단어가 vector로 표시 된 것 (모든 열 중에 단 하나만 1이고 나머지는 0)
- index 0의 unk = unknown이라는 뜻 --> 새로운 단어를 봤을 때 모른다고 표시 하기 위해 존재
word frequency를 이용한 vocabulary 구성
- 대부분의 NLP task는 아는 단어를 보아 vocabulary를 구성하는 것부터 시작
- 가지고 있는 데이터를 전부 모으는 작업이 우선 --> 여기서의 데이터 = corpus
- 주로 vocabulary를 구성할 때는 word frequency (단어 빈도수)를 살펴봄 (한두 번 나오는 무의미할 것이라는 가정 -> 이 가정이 틀리는 경우도 있음을 유의)
그래서
- corpus의 사이즈에 따라 minimum frequency (최소 빈도수)를 정하고 그 이상의 단어들만 사용하거나; or
- 총 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를 단순히 합해서 문장을 표현
- 여러개의 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
***중요한 컨셉; 위키피디아 설명 확인하기***
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) |
|
|
tf, df 둘 다 아주 높음 | tf는 높을 수 있음 df는 상대적으로 낮음 |
tf-idf score
- 기존 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의 단점 (중요)
- 순서가 중요한 문제에는 쓰기 힘들다
- BoW와 tf-idf는 간단하지만 topic classification이나 document retrieval같은 task에는 좋은 성능을 보임
- 순서가 중요하지 않은 문제에서 강함
- 그래서 순서가 중요한 문제에서는 정보생략으로 인해 성능이 좋지않음 e.g. machine translation
- vocabulary가 커질수록 쓰기 힘들다
- vocabulary size ↑ = vector size ↑ --> one-hot vector의 고질적인 문제
- Nx1 column vector로 단어/문장을 표현
- N(=vocabulary size)가 커지면 전체 vector가 엄청나게 커짐(대부분 0) = sparse matrix
- 단어간의 관계를 표현하지 못한다
- one-hot vector는 각 단어를 각각의 index로 구별하기 때문에 서로의 연관성을 표현 할 수 없음
- = one-hot vector는 서로 orthogonal 함
- one-hot vector는 각 단어를 각각의 index로 구별하기 때문에 서로의 연관성을 표현 할 수 없음