최적의 텍스트 유사도 분석 알고리즘은?

WonChul Shin (Eddy)
CDRI
Published in
7 min readJan 9, 2023

인간은 단어의 뜻을 쉽게 이해하고 문장의 의미를 도출할 수 있지만 컴퓨터에는 이러한 자연스러운 언어 능력이 없습니다. 문장을 기계가 이해할 수 있도록 하려면 문장을 숫자 형식으로 인코딩해야 합니다. 그래야 컴퓨터가 수학 공식과 연산을 적용하여 문장을 이해할 수 있습니다. 이러한 텍스트 유사성 작업이나 문장을 벡터 형태로 표현하는 것은 매우 활발한 연구 분야입니다.

이번 글에서는 기계학습 모델을 활용하여 CDRI에서 다루는 국가별 성분 규제 데이터 간 유사도를 분석하고, 이를 의미 있게 활용하는 방법에 대한 소개와 유사도 분석 알고리즘 선정에 있어 고려했던 것들을 공유해 볼까 합니다.

  1. 어떤 메트릭을 사용할 것인가?

유사도는 벡터 차원이 데이터 객체의 특징을 나타내는 두 벡터 사이의 거리입니다. 간단히 말해서 유사도는 두 데이터 객체가 얼마나 비슷하거나 다른지를 측정한 것입니다. 일반적으로 0~1의 범위를 측정하며, 두 벡터 간의 거리가 작다면 객체 간 유사도가 높다고 하고 반대의 경우 유사도가 낮다고 합니다.

두 벡터의 유사도를 측정하는 방법은 여러 가지가 있습니다. 그중 국가별 성분 규제의 유사도를 계산하기 위해 코사인 유사도를 사용하였습니다. 왜 코사인 유사도 인지 아래 잘 알려진 2가지 유사도 측정 방법과 코사인 유사도를 비교해 보겠습니다.

Jaccard Index
자카드 유사성 계수라고도 하는 자카드 지수는 데이터 객체를 집합처럼 취급합니다. 그리고 두 집합의 교집합 크기를 합집합의 크기로 나눈 값으로 정의됩니다. 아래 예시로 간단히 살펴보겠습니다. 두 문장이 완전히 다른 형식으로 쓰여졌음에도 불구하고 의미는 완전히 같습니다.

Sentence 1: The bottle is empty.

Sentence 2: There is nothing in the bottle.

두 집합의 교집합 크기: 3
두 집합의 합집합 크기: 1+3+3 = 7
자카드 지수를 사용하여 3/7 = 0.42 의 유사도를 얻을 수 있습니다.

Euclidean Distance
일반적으로 사람들이 거리를 말할 때 유클리드 거리를 말합니다. 아래 그림과 같이 피타고라스 정리를 사용하여 두 점 사이의 거리를 계산합니다. 거리가 멀다면 두 벡터의 유사도가 낮다고 이해할 수 있습니다.

하지만 거리는 0에서 무한대까지 다양할 수 있으므로 비교할 대상이 없으면 이해하기 어렵다는 단점이 있습니다.평균과 표준 편차를 사용하여 0~1 사잇값으로 정규화할 수 있지만 매우 큰 거리가 몇 개 있으면 정규화 작업의 결과로 다른 모든 거리가 더 작아지므로 이상치에 민감합니다. 따라서 아래와 같이 오일러 상수를 활용해 0~1 사잇값으로 정규화해야 합니다.

Cosine Similarity
코사인 유사도는 두 벡터 사이 각도의 코사인으로 두 벡터의 유사성을 계산합니다. 두 벡터가 같은 방향을 가리키는지 여부에 따라 유사도를 결정합니다. 따라서 벡터 사이의 각도가 0도이면 코사인 유사도는 1입니다.

v, w 벡터값이 주어졌을 때 코사인 유사도는 벡터의 스칼라 곱(내적)에 두 벡터의 크기를 곱한 값을 나눠줌으로써 아래와 같이 계산할 수 있습니다.

이렇게 계산된 유사도는 −1에서 1까지의 값을 가지며, −1은 서로 완전히 반대되는 경우, 0은 서로 독립적인 경우, 1은 서로 완전히 같은 경우를 의미합니다.

정리하자면, 앞서 확인했듯 자카드 지수는 문서가 단어 수준에서 얼마나 유사한지를 평가하는 것으로 텍스트의 어휘 유사성을 거의 고려하지 못합니다. 유클리드 거리와 코사인 유사도를 구하기 위해서는 텍스트 임베딩이라고 하는 벡터가 필요한데 유클리드 거리는 희소 벡터와 잘 작동하지 않고, 코사인 유사도에 비해 문장의 크기/길이의 차이에 매우 민감합니다. 따라서 텍스트 데이터로 유사성 작업을 할 때 일반적으로 코사인 유사도가 선호됩니다.

2. 어떤 임베딩을 사용할 것인가?

코사인 유사도를 구하기 위해서는 텍스트 임베딩이라고 하는 벡터값이 필요하다고 앞서 언급하였습니다. 텍스트 임베딩은 단어 또는 문장에 해당하는 특징을 인코딩한 수십에서 수천 차원을 가지는 벡터입니다. 텍스트 임베딩을 수행할 방법은 여러 가지가 있습니다. 고려해볼 만한 후보는 아래와 같습니다.

  1. TF-IDF
  2. Word2vec
  3. Doc2vec
  4. ELMo
  5. BERT
  6. ETC…

이외에도 여러 알고리즘이 있지만 국가별 규제 유사도를 구하는데 TF-IDF가 가장 적합하다고 판단되었습니다. TF-IDF를 사용한 이유는 다음과 같습니다.

  • 무엇보다 많은 메모리가 필요하지 않고 매우 빠릅니다. (TF-IDF는 단일 CPU에서 Word2vec, Doc2vec보다 문장 벡터를 생성하는데 수십 배 빠르고, ELMo, BERT와 같은 신경망 모델에 비해 수백 배 빠릅니다.)
  • 구현이 쉽습니다.
  • GPU가 필요 없습니다.
  • 통계학에 기반한 전통적인 머신러닝 모델로 학습이 필요 없습니다.
  • TF-IDF 특성상 문장 벡터의 가중치가 음의 값이 되는 것이 불가능하므로 두 문서 사이의 코사인 유사도는 0(독립)에서 1(일치)까지의 값으로 표현됩니다. (성분 규제 유사도가 -1인 경우, 즉 완전히 반대인 경우까지 고려할 필요가 없습니다.)
  • 성분 규제라는 특정 도메인에 국한되어있고 말뭉치가 다른 도메인에 비해 정적입니다. 따라서 다양한 주제의 말뭉치로 사전 학습된 다른 모델 보다 적합하다 생각하였습니다.

그럼, TF-IDF 를 사용해서 규제 내용을 임베딩하고 국가별, 성분별 규제 내용의 텍스트 임베딩 벡터 간에 규제 유사도를 비교한 결과를 한번 보겠습니다.

위의 그림에서 행은 기준이 되는 국가이고 열은 비교 대상이 되는 국가를 의미합니다. 유럽을 기준으로 걸프 연합과의 규제 유사도는 0.52로 52% 일치합니다. 반면 걸프 연합을 기준으로 유럽 연합과의 규제 유사도는 0.98로 98% 일치합니다. 이는 걸프 연합 규제의 대부분이 유럽 연합으로부터 파생되었다고 해석할 수 있습니다. 동일한 원리로 러시아, 터키, 영국 또한 그렇습니다.

타이완의 경우 규제 내용이 다른 국가들에 비해서 특정 국가에 종속적이지 않고 독립적으로 보입니다.

이렇게 분석된 국가별 규제 데이터 유사성을 기반으로 유럽 연합의 규제에 변동이 있다면 유럽 연합으로부터 파생된 국가들의 규제가 유럽 연합을 따라 변동될 수 있다는 것을 어느 정도 예측할 수 있습니다.

사전 학습된 신경망 모델보다 수백 배는 빠르고 적은 리소스로 이와 같은 분석 가능한 규제 유사성을 산출한 것은 상당히 의미 있는 일입니다.

마치며

텍스트 임베딩 벡터를 구하기 위해 ELMo나 BERT와 같은 신경망 기반의 딥러닝 모델을 고려해 볼 수 있습니다. 하지만 다음 물음에 대해 생각해 볼 필요가 있습니다. 그 차이가 우리 눈에 확연히 드러날 만큼 충분할까요? 그 알고리즘을 구현하기가 얼마나 쉬울까요? 최소한의 전처리로 얼마나 빨리 실행될까요? 비교적 정적이고 특정 도메인에 치우친 수만 개의 규제 텍스트의 임베딩 벡터를 얻는데 십억에 달하는 텍스트 데이터로 학습되고, 수천만에서 수억에 달하는 파라미터를 가진 딥러닝 모델을 사용하는 것이 적절할까요?

BERT는 자연어 처리의 많은 부분에서 최고 성능을 달성하는 모델이고, Attention과 같은 그 알고리즘의 개념은 매우 혁신적이어서 다른 알고리즘을 능가하는 성능을 발휘합니다. 심지어 한 문장에 있는 동음이의어를 구별해내기까지 합니다. 하지만 딥러닝 방식으로 업그레이드하면 성능이 향상될 수도 있고 그렇지 않을 수도 있습니다. 트레이드 오프를 고려하려면 사전에 많은 생각을 해야 합니다.

머신러닝은 딥러닝과 인공신경망이 대세가 되는 알고리즘이 되면서 성능과 운영비용이 비례해 증가하고 있습니다. 풀고자 하는 문제가 그리 어렵지 않다면 통계학에 기반하는 전통적인 머신러닝 알고리즘을 먼저 적용해보고 결과가 만족스럽지 않다면 딥러닝 모델을 적용해보면서 고도화를 시도해보는 것이 어떨까요?

이상 마치도록 하겠습니다.

감사합니다!

--

--