Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana Anda Boleh Mengira Kesamaan Kosinus Antara Dua Ayat Tanpa Perpustakaan Luaran?

Bagaimana Anda Boleh Mengira Kesamaan Kosinus Antara Dua Ayat Tanpa Perpustakaan Luaran?

DDD
DDDasal
2024-11-01 13:14:02860semak imbas

How Can You Calculate Cosine Similarity Between Two Sentences Without External Libraries?

Mengira Kesamaan Kosinus Antara Dua Rentetan Ayat Tanpa Perpustakaan Luar

Dalam konteks pemprosesan bahasa semula jadi, mengira kesamaan kosinus adalah penting untuk mengukur persamaan teks antara dokumen. Walaupun perpustakaan luaran seperti tf-idf-cosine boleh memudahkan tugas ini, anda juga boleh mengira kesamaan kosinus secara manual tanpa bergantung pada kebergantungan tersebut.

Gambaran Keseluruhan Kesamaan Kosinus

Kosinus persamaan mengukur sudut antara dua vektor yang mewakili teks. Persamaan kosinus yang lebih tinggi menunjukkan sudut yang lebih kecil, membayangkan persamaan yang lebih besar antara teks. Ia dikira menggunakan hasil darab titik bagi vektor ternormal dibahagikan dengan magnitudnya.

Melaksanakan Keserupaan Kosinus Secara Manual

Untuk mengira kesamaan kosinus secara manual, kami mentakrifkan langkah berikut:

  1. Tokenisasi: Pisahkan ayat kepada perkataan individu.
  2. Vektorisasi: Buat pembilang untuk setiap perkataan dalam setiap ayat, yang mewakili kekerapannya (kekerapan jangka).
  3. Penormalan: Normalkan vektor dengan membahagikan setiap elemen dengan punca kuasa dua hasil tambah kuasa dua unsurnya (norma L2).
  4. Pengiraan Kosinus: Kira hasil darab titik bagi vektor ternormal dan bahagikannya dengan magnitudnya.

Pelaksanaan Kod

Di bawah ialah pelaksanaan Python pengiraan persamaan kosinus manual:

<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 vec1])
    sum2 = sum([vec2[x] ** 2 for x in vec2])
    denominator = math.sqrt(sum1) * math.sqrt(sum2)
    
    if not denominator:
        return 0.0
    else:
        return numerator / denominator

def text_to_vector(text):
    words = WORD.findall(text)
    return Counter(words)

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>

Hasil

Kod ini dilaksanakan seperti berikut:

Cosine: 0.861640436855

Nilai ini menunjukkan persamaan kosinus yang tinggi antara kedua-dua ayat, mengesahkan bahawa ia adalah serupa dari segi teks.

Pertimbangan Lanjut

Walaupun pendekatan manual ini menyediakan pelaksanaan asas, ia boleh dipertingkatkan dengan :

  • Menggabungkan stemming atau lemmatization untuk normalisasi perkataan yang dipertingkatkan.
  • Melaksanakan skim tokenisasi yang lebih canggih.
  • Menambah pemberat seperti TF-IDF untuk pengiraan persamaan yang lebih tepat.

Atas ialah kandungan terperinci Bagaimana Anda Boleh Mengira Kesamaan Kosinus Antara Dua Ayat Tanpa Perpustakaan Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn