[MultiThreaded] Word Tensors 리뷰

Heejun Park
Almighty Data Science Bootcamp
4 min readJun 13, 2018

본 글은 Stitch Fix의 MultiThreaded 블로그 글을 리뷰한 글입니다.

Word Tensors

우리는 2차원 행렬을 인수 분해하여 단어 벡터를 얻을 수 있습니다. 다음은 skipgram 행렬 인수분해에서 SVD 인수 분해를 하는 식입니다.

행렬 M은 단어 x 근처에 y가 얼마나 자주 나타나는지 계산 후 정규화하여 확률을 구하고, 이를 각 단어의 확률로 나눠줍니다.. 이 비율이 1보다 훨씬 크거나 작으면 두 단어의 관계성은 높으며, 1에 가까워지면 보통 비율로 같이 발생합니다. 여기서 로그 비율은 pointwise mutual information라고 부르며 정보 이론과 깊은 관련이 있습니다.

하지만 tensor 인수 분해는 다음과 같습니다.

이는 이전 행렬식과 비슷하지만, z가 추가 되었습니다. 3D tensor가 형성되면, 이를 3개의 2D 모드로 분해할 수 있습니다. : 단어 인덱스 x의 모드, 단어 인덱스 y의 모드, 문서 인덱스 z의 모드.

이 행렬을 해석하는 방법의 예시로는 행 벡터에서 spandex ( 고무같이 신축성 있는 합성 섬유 ) 를 추출하고 난 후, 이와 유사한 벡터인 stretchy_fabric ( 신축성 있는 직물 ), jeggings ( 진 + 레깅스 ), sausage ( 소세지) 가 나타납니다.

하나의 문서는 하나의 스타일로 구성됩니다. 데님 자켓이 나오면 데님 자켓과 비슷한 스타일의 옷이 나옵니다.

또한, 워드 행렬의 벡터와 문서 행렬의 벡터를 비교할 수 있습니다. 가장 안락한 스타일의 스타일 중 가장 가까운 단어는 cocoon_cardigan이 나옵니다.

Tensor Decomposition

단어 tensor를 계산 할 때 3 단계가 있습니다. 단어-단어-문서 skipgram을 계산하고, 이를 정규화하여 PMI 형태로 만들고, 작은 행렬로 분해합니다.

그러나 실제로 인수 분해하기 위해서는 SVD를 더 높은 rank tensor로 일반화 해야 합니다. 불행히도 tensor algebra 라이브러리는 일반적이지 않습니다. 우리는 non-negative sparse tensor factorization 에 대해서 썼지만, PMI는 양수와 음수 둘다 될 수 있기 때문에 여기에 적용할 수 없었습니다. 대신에 scikit-tensor에 있는 HOSVD를 추천합니다.

Conclusion

Tensor 분해는 우아하고 직접적인 기법입니다. 그러나 이 방법은 비즈니스에서 덜 나타납니다. 그러므로 앞으로 데이터를 보고 블랙박스 모델에 던지기 전에 tensor 인수 분해를 시도해 보시길바랍니다.

--

--