>  기사  >  백엔드 개발  >  외부 라이브러리를 사용하지 않고 두 문장 간의 코사인 유사성을 어떻게 계산할 수 있나요?

외부 라이브러리를 사용하지 않고 두 문장 간의 코사인 유사성을 어떻게 계산할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 08:20:30839검색

How can I calculate cosine similarity between two sentences without using external libraries?

문장 문자열의 코사인 유사성 계산

코사인 유사성은 두 벡터 간의 상관 관계를 측정하는 것입니다. 텍스트 처리의 맥락에서 두 문장 간의 유사성을 결정하는 데 사용될 수 있습니다. 외부 라이브러리 없이 두 문자열에 대한 코사인 유사성을 계산하려면 다음 단계를 따르세요.

  1. 문자열 토큰화: 각 문자열을 토큰이라고 하는 개별 단어로 나눕니다.
  2. 단어 벡터 생성: 각 문자열에 대해 키가 고유한 단어이고 값이 해당 단어의 빈도인 사전(벡터)을 생성합니다.
  3. 내적 계산 : 해당 요소의 곱을 합하여 두 벡터의 내적을 계산합니다.
  4. 크기 계산: 모든 요소를 ​​제곱하고 합하여 각 벡터의 크기를 찾은 다음 제곱근을 취합니다.
  5. 정규화: 내적을 크기의 곱으로 나누어 정규화된 코사인 유사성을 얻습니다.

간단한 Python 구현:

<code class="python">import math
import re
from collections import Counter

WORD = re.compile(r"\w+")

def get_cosine(vec1, vec2):
    intersection = set(vec1.keys()) & set(vec2.keys())
    numerator = sum([vec1[x] * vec2[x] for x in intersection])

    sum1 = sum([vec1[x] ** 2 for x in list(vec1.keys())])
    sum2 = sum([vec2[x] ** 2 for x in list(vec2.keys())])
    denominator = math.sqrt(sum1) * math.sqrt(sum2)

    if not denominator:
        return 0.0
    else:
        return float(numerator) / denominator

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)</code>

사용 예:

<code class="python">text1 = "This is a foo bar sentence ."
text2 = "This sentence is similar to a foo bar sentence ."

vector1 = text_to_vector(text1)
vector2 = text_to_vector(text2)

cosine = get_cosine(vector1, vector2)

print("Cosine:", cosine)</code>

출력:

Cosine: 0.861640436855

이 구현에는 TF-IDF 가중치가 포함되지 않아 정확도를 향상시킬 수 있습니다. 더 큰 데이터 세트에 대한 코사인 유사성.

위 내용은 외부 라이브러리를 사용하지 않고 두 문장 간의 코사인 유사성을 어떻게 계산할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.