1) Symbolic approach
2) Statistical approach
분류를 위해서는 데이터를 수학적으로 표현해야 함
분류 대상의 특징!을 먼저 파악해야 함 (Feature extraction)
특징을 기준으로 분류 대상을 그래프 위에 표현할 수 있다
분류 대상의 경계를 수학적으로 나눌 수 있음 (Classification)
-> 새로운 데이터가 들어왔을 때 어느 쪽과 가까운지 판별 가능
(이전)
**가 멍멍 짖었다
$$가 멍멍 짖었다
--> **와 $$가 뭔지는 몰라, 근데 주변 단어가 비슷하네? 그럼 의미도 비슷하지 않을까?
Word2vec 알고리즘은 주변부의 단어를 예측하는 방식으로 학습됨 (Skip-gram)
간단한 신경망 구조로 이루어져 있음 (input, hidden layer, output)
input은 (문장을 원핫 벡터로 치환해서) 원핫 벡터가 들어감, 맞히고 싶은 건 주변 단어의 원핫 벡터
ex) "tape"의 원핫 벡터인 (0,1,0,0,0)이 들어가면 "duck"의 원핫 벡터인 (1,0,0,0,0)이 나왔으면 좋겠어
실제로 나왔다? 그러면 tape의 word vector를 hidden layer의 가중치로 얻을 수 있음
Word2vec 이용해서 단어를 벡터 공간에 나열하게 된다??(= 단어의 의미가 벡터로 표현) -> 벡터 연산이 가능해진다
ex) king에서 man을 뺀다 -> king에서 man으로 향하는 벡터 차원 공간 생긴다
이 벡터 차원 공간을 queen에 더한다 -> woman이 나온다
WordSim353 (similarit 비교)
analogy 테스트
단어가 가지는 의미 자체를 다차원 공간에 '벡터화'한다
중심 단어의 주변 단어들을 이용해 중심 단어를 추론하는 방식!
장점
한국-서울+도쿄 = 일본
단점
한국어는 다양한 용언 형태를 가진다 (모르다, 모르고, 모르네, 몰라서, ...)
Word2Vec은 다양한 용언 표형을 다 서로 독립된 vocab으로 관리함 --> 모르고와 몰라서가 다른 애로 취급됨
subword를 활용해서 임베딩을 하면 더 좋은 임베딩이 이뤄지지 않을까?!?
-> Fasttext라는 라이브러리 탄생
학습은 주변 단어를 활용
word2vec과 달리, 단어를 n-gram으로 나누어 학습 수행
ex) n-gram 범위가 2-5라면,
assummption = (as, ss, su, ..., ass, ssu, ..., ption, assumption)
라는 n-gram set을 만듦
input에 assumption n-gram을 넣어서 학습/추론하게 됨
최종적 assumption 벡터는 n-gram 벡터를 모두 합쳐서 만들어짐
subword들이 n-gram 안에 포함되게 된다!
'assum'이 input으로 들어오면, assumption n-gram에 존재하기 때문에 추론이 가능하다 (만들어진 벡터들을 합산함으로써 얻을 수 있음)
결과적으로 OOV가 들어오더라도, 걔의 n-gram으로 벡터 만들 수 있다
FastText는 단어를 n-gram으로 분리한 후, 모든 n-gram vector를 합산해 평균을 내고, 그걸로 단어 벡터를 획득한다
'Orange' 입력 예
따라서 'Oranges'라는 OOV가 들어왔음 -> 'Orange'로 학습한 n-gram과 매우 유사함 -> 따라서 'Orange'와 유사한 워드벡터 생성 가능
오탈자도 OOV로 많이 발생 -> 이것도 워드벡터 얻어 낼 수 있다! 오탈자여도 n-gram은 유사하게 나오기 때문
오탈자, OOV, 등장 회수가 적은 학습 단어에 대해서도 강세를 보임
word2vec은 DF가 낮을 경우 유의미한 단어를 찾지 못함
fasttext는 subword information이 유사한 단어를 찾음
한국어는 외래어 표기 시에 오탈자 발생률 높음
FastText를 활용하면 이러한 경우에도 유의미한 결과 도출 가능
워드 임베딩은 다른 자연어 처리의 가장 밑단에서 사용됨
어떤 feature를 input으로 넣어야 분류가 되는데, 그 feature를 word embedding을 이용해 word to vector, 즉 벡터 공간을 feature로 사용
학습 데이터가 매우 적은데 걔로 분류를 해야 한다? 그럼 데이터 양이 너무 부족하고, 학습 데이터만으로 특성을 추출할 수 없다...
BERT로 관련 토픽 키워드 추출 가능~