가중 임베딩(Weighted Embedding)은 단어 임베딩을 문장 수준 임베딩으로 확장하는 방법이다. 제안한 논문에서는 문서 내 단어의 등장은 저자가 생각한 주제에 의존한다고 가정한 후 분석을 수행한다. 즉, 주제에 따라 단어의 사용 양상이 달라진다는 것이다. 이를 위해 주제 벡터(Discourse vector) $\text{c}_s$라는 개념을 도입했다. 본 논문에서는 $\text{c}_s$가 주어졌을 때 어떤 단어 $w$가 등장할 확률을 다음과 같이 정의했다.
\[ \text{P}(w|\text{c}_s) = \alpha \text{P}(w) + (1-\alpha) \frac{\exp(\tilde{c}_s \cdot \text{v}_w)}{\text{Z}}\]
\[ \text{where} \ \tilde{\text{c}}_s = \beta c_0 + (1-\beta)c_s, c_o \perp c_s \]
이때 $c_0 \in \mathbb{R}^d$는 common discourse vector를 의미하며, 가장 많은 빈도를 가진 주제 벡터다. $\alpha$와 $\beta$는 scalar hyperparameters 이며, $Z_{\tilde{c}_s} = \sum_{w \in \mathcal{V}} \exp( \left \langle \tilde{c}_s, v_w \right \rangle) $ 은 우변 두번째 항이 확률 값으로 되도록 해주는normalizing constant이다.
한국어를 예로 들자면 '은, 는, 이, 가'와 같은 조사의 경우 우변의 첫 번째 항인 $\alpha \text{P}(w)$가 높은 쪽으로 나가아겠지만 두 번째 항의 경우에는 주제 벡터 $\tilde{c}_s$와의 내적은 그다지 좋은 값을 가지지 않을 것이다. 다른 예로는 주제가 '학교'인 경우 '학생', '학식' 등의 단어는 우변의 첫 번째 항의 경우 상대적으로 낮은 $\text{P}(x)$를 가지지만, 두 번째 항의 경우 주제와 밀접한 관련이 있기에 높은 값을 지닐 것이다. 우변의 값들을 weighted sum 하여 결과를 산출한다. $ \left \langle \tilde{c}_s, v_w \right \rangle $과 $\tilde{c}_s \cdot v_w$와 $\tilde{c}_s^T v_w$는 모두 내적을 의미하기에 혼용해도 상관없다.
그렇다면 문장 임베딩은 어떻게 할까? 문장은 단어들로 이루어진 시퀀스라고 볼 수 있다. 그렇기에 문장에 속한 모든 단어들이 등장할 확률의 누적 곱으로 표현할 수 있다. 그러나 문장의 길이가 길어질수록 확률값은 작아지기에 0에 가깝게 간다. 이러한 문제를 해결하기 위해 누적곱에 $\log$를 적용하여 계산하며, 수식은 다음과 같다.
\[ p[s | c_s ] = \prod_{w \in s} p(w | c_s) = \prod_{w \in s} \left[ \alpha p(w) + (1+a) \frac{\exp(\left \langle v_w, \tilde{c}_s \right \rangle ) }{\text{Z}} \right] \]
\[ f_w(\tilde{c}_s) = \log \left[ \alpha p(w) + (1-\alpha) \frac{ \exp( \left \langle v_w, \tilde{c}_s \right \rangle )}{Z} \right] \]
우리는 확률 값을 최대화하는 지점을 찾을 때 목적 함수는 $\text{MLE}$를 사용하는 것을 알고 있다. 위 수식을 미분함으로써 변곡점을 찾아 확률이 최대가 되는 지점을 찾을 수 있을 것이다.
\[ \nabla f_w (\tilde{c}_s) = \frac{1}{\alpha P(w) + (1-\alpha) \exp(\left \langle v_w, \tilde{c}_s \right \rangle ) / \text{Z}} \frac{1-\alpha}{\text{Z}} \exp(\left \langle v_w, \tilde{c}_s \right \rangle ) v_w \]
수식으로는 복잡해 보이지만 매우 간단한 미분 방식이다. $ \alpha p(w) + (1-\alpha) \frac{ \exp( \left \langle v_w, \tilde{c}_s \right \rangle )}{Z} $를 $t$로 치환하면 $\log(t)$를 미분하는 것에 불과하다. $\log(t)$의 미분은 $\frac{1}{t}$이고, $t$에 대해서 속미분을 진행하면 위와 같은 수식으로 쉽게 도출된다. 이때 주의할 점은 $\tilde{c}_s$를 제외한 나머지 변수들은 전부 상수로 취급한다. 우리는 이때 테일러 전개를 사용할 수 있다. 테일러 전개에 대한 자세한 내용은 여기를 참고하면 된다.
\[ \begin{equation} \begin{split} f_w(\tilde{c}_s) & \approx f_w(0) + \nabla f_w(0)^T \tilde{c}_s \\ \\ & = \text{constant} + \frac{(1-\alpha) / (\alpha \text{Z})}{p(w) + (1-\alpha)/(\alpha Z)} \left \langle v_w, \tilde{c}_s \right \rangle \end{split} \end{equation} \]
테일러 급수는 n번째 항 까지만 써서 원래 함수를 근사하는 방식이며, $\tilde{c}_s$에 대한 MLE의 수식은 아래와 같다.
\[ \text{argmax} \sum_{w \in s} f_w(\tilde{c}_s) \propto \sum_{w \in s} \frac{a}{p(w) + a} v_w, \ \text{where} a = \frac{1-\alpha}{\alpha \text{Z}} \]
자주 사용되는 단어($w$)의 경우 $\frac{a}{p(w)+a}$이기에 가중치가 적게 부여되는 방식으로 학습된다. 이는 정보성이 높은 단어의 경우 가중치를 높게 주는 TF-IDF의 아이디어와 비슷하다.
가중 임베딩을 구현한 코드는 여기를 참고하면 된다.
'Books > 한국어 임베딩' 카테고리의 다른 글
[Books] 행렬 분해 기반 언어 모델 (LSA, GloVe, Swivel) (0) | 2022.03.24 |
---|---|
[Books] 확률 기반 언어모델 (NPLM, Word2Vec, FastText) (0) | 2022.03.24 |
[Books] 한국어 전처리 (0) | 2022.03.07 |
[Books] 임베딩(embedding)의 종류 (5) | 2022.03.05 |
[Books] 한국어 임베딩 시작하기 (0) | 2022.03.05 |