공부를 막 시작하는 단계라서 찾다 보니 끝도 없다. 처음 논문을 쓸 때 material 두 개에서 시작해서 스무 개 남짓으로 늘어났던 때가 생각나는 요즘.

뭔가를 정리해서 쓰기에는 아직 모르는 것이 너무 많아서 알게 된 것을 조금 쓰다 보면 앞으로 뭘 더 공부해야 할 지 알게 될 것 같아

일단 뭐가 될 지 모를 포스팅을 하나 해 보려 한다.


word2vec이나 doc2vec은 모두 이름에서부터 2vec을 목적으로 하는데, 이는 특정 단어나 문서를 벡터화하여 저장하고 싶은 것이다.

word2vec은 중심 단어를 기반으로 주변 단어를 예측하거나 주변 단어를 중심으로 중심 단어를 예측하는 데 쓰인다.

이렇게 벡터화할 때 단어들, 문장, 문단, 문서 간의 유사도를 inner product로 나타내고 싶어한다.

예를 들어 $doc_1$, $doc_2$, $\cdots$, $doc_n$의 $n$개의 문서를 벡터 $v_1$, $\cdots$, $v_n$ $\in \mathbb{R}^k$에 대응시키고 싶다고 할 때, 

$doc_i$와 $doc_j$의 유사도가 $\left< v_i | v_j \right>$가 되도록 $v_1$, $cdots$, $v_n$을 정하고 싶은 것이다.

유사도는 모든 pair에 대해 존재하기 때문에 $\mathscr{O}(n^2 )$개의 relation을 만족시켜야 하고, 

각 vector들의 undetermined components의 갯수는 $n \times k$이므로, vector space 의 dimension(=the length of vectors)은 optimal하게 잡으면 $\mathscr{O}(n )$, 특정 성질을 더 만족하게 하거나 직관적인 embedding을 사용하면 그보다 더 커야 해서 space 의 dimension은 매우 큰 편이다.

이렇게 embedding한 벡터들을 연산할 때는 inner product나 matrix operation을 활용해야 하므로 operation complexity가 대략$\mathscr{O}(n^2 )$인 연산을 활용하게 되는데, 계산량이 많아서 어떻게 계산하는 것이 효율적인지 공부하는 방향으로 찾아봐야 할 듯 하다.


또 doc2vec에서는 대표적으로 빈도수를 세어 각 단어가 얼마나 자주 나타나는지를 vector로 표현하는데, 

단순히 빈도수만 세는 것이기 때문에 단어들의 순서구조가 만드는 의미가 생략되는 단점이 있지만, embedding의 방법이 직관적이고, 생각보다 좋은 결과를 낸다고 한다.(더 찾아봐야 알 수 있는 내용이지만, 아마도 큰 수의 데이터를 활용했을 때의 이야기일 듯 하다.)

doc2vec의 범위는 document, paragraph, sentense등 여러 가지로 설정하여 활용하는 듯 하다.

'언어 공부 > ML(NLP)' 카테고리의 다른 글

preprocessing  (0) 2018.06.19
word2vec, doc2vec 읽기 시작.  (0) 2018.06.07

+ Recent posts