WRD(Word Rotator's Distance)에서 문서 간의 거리(유사도)를 계산합니다.

배경



문서(텍스트)간의 유사도를 계산하는 처리는, 검색이나 추천 등 다양한 분야에서 사용되고 있다고 생각합니다.
현재(2020년 9월 시점), 문서간의 유사도를 계산하는 방법은, 다음과 같이 코사인 유사도로부터 계산하는 방법과, 거리로부터 계산하는 방법의 크게 2종류로 분류할 수 있습니다. 양자 모두 단어의 분산 표현을 이용한다는 것이 전제에 있습니다.
  • 단어의 분산 표현을 사용하여 문서를 벡터화하고 벡터 공간에서 문서 간의 코사인 유사성을 계산합니다
  • 문서에 포함 된 단어의 분산 표현을 벡터 공간에 매핑하고 벡터 공간에서 문서 간의 거리를 계산합니다.

  • 1의 기법에 대해서는, 문서에 포함되는 단어의 분산 표현의 (가중) 평균을 취해, 각 문서를 벡터화합니다. 그리고 그 벡터 공간에서 코사인 유사도를 계산하는 방법입니다. 쿡 패드마이크로 애드을 비롯하여 실제 비즈니스 현장에서도 널리 사용되고 있습니다.
    2의 수법에 대해서는, WMD(Word Mover's Distance) 라고 하는 수법이 제일 유명이라고 생각합니다. 먼저 문서에 포함된 단어의 분산 표현을 벡터 공간에 매핑합니다. 그리고 한 문서에 포함된 단어군과 다른 문서에 포함된 단어군의 거리를 계산하고 거리의 길이에 따라 유사도를 측정한다는 것입니다. gensim은 WMD를 계산하는 함수를 제공하므로 비교적 쉽게 구현할 수 있습니다.

    WRD란?



    WRD 는 WMD를 개량한 알고리즘으로, 토호쿠 대학의 건 연구실이 발표한 것입니다. WRD의 특징은 단어의 분산 표현의 규범과 편각을 나누어 생각한다는 점에 있습니다. 구체적으로, 노름은 단어의 중요도를 나타내고, 편각은 단어의 의미를 나타내는 것으로 생각하고, 이들을 개별적으로 취급한다. 따로따로 취급하는 방법에 대해서는, 논문에 게재되고 있는 아래의 그림을 보실 수 있으면 이미지가 붙기 쉽다고 생각합니다.



    위의 그림과 같이 문서에 포함된 단어의 분산 표현을 초급 평면에 투영합니다. 그 때, 점의 크기를 놈에 비례한 것으로 합니다. 이렇게 하면 중요도가 높은 단어는 점이 커지고 중요도가 낮은 단어는 점이 작아집니다. 그런 다음 한 문서에 포함 된 단어 그룹과 다른 문서에 포함 된 단어 그룹의 정렬 1을 취하는 데 필요한 힘을 거리와 WRD에서 정의합니다. 즉, 의미가 다른 단어끼리의 경우라도, 중요도가 높은 경우는 거리가 길어지지만 중요도가 낮은 경우는 거리는 그다지 길지 않습니다. 결과적으로 의미가 유사한 문서 간에는 WRD가 작아지고 의미가 비슷하지 않은 문서 간에는 WRD가 커집니다.

    자세한 내용은 논문을 참조하십시오. 반복하지만, 단어의 분산 표현의 규범과 편각을 나누어 생각한다는 것은 획기적인 사고 방식이라고 생각합니다. 배경에서 소개한 문서의 벡터화에서도, 결국은 놈과 편각을 섞어 생각하고 있기 때문에.

    WRD 구현



    구현이 공개되지 않았기 때문에 구현을 GitHub에 공개했습니다. 꼭 시험해 보세요. 계산 비용이 높다는 단점은 있지만 문서를 벡터화하여 코사인 유사도를 계산하는 방법보다 정확도가 높다고 생각합니다.




    단어와 단어의 대응을 취하는 것

    좋은 웹페이지 즐겨찾기