ホームページ  >  記事  >  バックエンド開発  >  外部ライブラリを使用せずにPythonで文間のコサイン類似度を計算する方法は?

外部ライブラリを使用せずにPythonで文間のコサイン類似度を計算する方法は?

DDD
DDDオリジナル
2024-10-30 07:48:28512ブラウズ

How to Calculate Cosine Similarity Between Sentences in Python Without External Libraries?

文文字列間のコサイン類似度の計算

文を表す 2 つの文字列が与えられた場合、外部ライブラリを使用せずにそれらのコサイン類似度を計算する必要があります。これを実現するための Python 実装を検討してみましょう。

コサイン類似度は 2 つのベクトル間の角度を測定し、通常はベクトル空間内の文書または文章を表します。コサイン類似度の値が高い場合は文が似ていることを示し、値が低い場合はそれらが異なることを示します。

ステップ 1: トークン化とベクトル化

コサイン類似度を計算するには、次のようにします。文をベクトルに変換する必要があります。文章を単語に分割し、その出現回数をカウントする単純な単語ベースのトークナイザーを使用します。

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

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

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

ステップ 2: コサイン類似度の計算

コサイン類似度の式は:

cosine = (Numerator) / (Denominator)

ここで:

  • 分子は 2 つのベクトルの内積です。
  • 分母は 2 つのベクトルの大きさの積です。
<code class="python">import math

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</code>

ステップ 3: 使用例

上記の関数を使用して、2 つの文間のコサイン類似度を計算できます。

<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>

出力には高いコサイン類似度値が表示され、文が類似していることを示します。

以上が外部ライブラリを使用せずにPythonで文間のコサイン類似度を計算する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。