
문장 문자열의 코사인 유사성 계산
코사인 유사성은 두 벡터 간의 상관 관계를 측정하는 것입니다. 텍스트 처리의 맥락에서 두 문장 간의 유사성을 결정하는 데 사용될 수 있습니다. 외부 라이브러리 없이 두 문자열에 대한 코사인 유사성을 계산하려면 다음 단계를 따르세요.
-
문자열 토큰화: 각 문자열을 토큰이라고 하는 개별 단어로 나눕니다.
-
단어 벡터 생성: 각 문자열에 대해 키가 고유한 단어이고 값이 해당 단어의 빈도인 사전(벡터)을 생성합니다.
-
내적 계산 : 해당 요소의 곱을 합하여 두 벡터의 내적을 계산합니다.
-
크기 계산: 모든 요소를 제곱하고 합하여 각 벡터의 크기를 찾은 다음 제곱근을 취합니다.
-
정규화: 내적을 크기의 곱으로 나누어 정규화된 코사인 유사성을 얻습니다.
간단한 Python 구현:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <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>
|
로그인 후 복사
사용 예:
1 2 3 4 5 6 7 8 9 | <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>
|
로그인 후 복사
출력:
이 구현에는 TF-IDF 가중치가 포함되지 않아 정확도를 향상시킬 수 있습니다. 더 큰 데이터 세트에 대한 코사인 유사성.
위 내용은 외부 라이브러리를 사용하지 않고 두 문장 간의 코사인 유사성을 어떻게 계산할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!