Artikel Kesamaan Cosine di Wikipedia
Bisakah Anda menunjukkan vektor di sini (dalam daftar atau sesuatu) dan kemudian menghitungnya, dan biarkan kami melihat cara kerjanya?
Saya seorang pemula.
Artikel Kesamaan Cosine di Wikipedia
Bisakah Anda menunjukkan vektor di sini (dalam daftar atau sesuatu) dan kemudian menghitungnya, dan biarkan kami melihat cara kerjanya?
Saya seorang pemula.
Jawaban:
Berikut adalah dua teks yang sangat singkat untuk dibandingkan:
Julie loves me more than Linda loves me
Jane likes me more than Julie loves me
Kami ingin tahu betapa miripnya teks-teks ini, murni dalam hal jumlah kata (dan mengabaikan urutan kata). Kita mulai dengan membuat daftar kata-kata dari kedua teks:
Sekarang kami menghitung berapa kali setiap kata ini muncul di setiap teks:
Kami tidak tertarik dengan kata-kata itu sendiri. Kami hanya tertarik pada dua vektor vertikal penghitungan tersebut. Misalnya, ada dua contoh 'saya' di setiap teks. Kita akan memutuskan seberapa dekat kedua teks ini satu sama lain dengan menghitung satu fungsi dari dua vektor tersebut, yaitu kosinus sudut antara keduanya.
Kedua vektor tersebut adalah:
Cosinus dari sudut di antara mereka adalah sekitar 0,822.
Vektor ini 8-dimensi. Sebuah kebajikan menggunakan kesamaan cosinus jelas bahwa itu mengkonversi pertanyaan yang melampaui kemampuan manusia untuk memvisualisasikan ke yang bisa. Dalam hal ini Anda dapat menganggap ini sebagai sudut sekitar 35 derajat yang merupakan 'jarak' dari nol atau kesepakatan sempurna.
sumber
Saya kira Anda lebih tertarik untuk mendapatkan beberapa wawasan tentang " mengapa " persamaan cosinus bekerja (mengapa ini memberikan indikasi kesamaan yang baik), daripada " bagaimana " itu dihitung (operasi spesifik yang digunakan untuk perhitungan). Jika Anda tertarik pada yang terakhir, lihat referensi yang ditunjukkan oleh Daniel di pos ini, serta Pertanyaan SO terkait .
Untuk menjelaskan bagaimana dan terlebih lagi mengapa, ada baiknya, pada awalnya, untuk menyederhanakan masalah dan hanya bekerja dalam dua dimensi. Setelah Anda mendapatkan ini dalam 2D, lebih mudah untuk memikirkannya dalam tiga dimensi, dan tentu saja lebih sulit untuk membayangkan dalam banyak dimensi lagi, tetapi pada saat itu kita dapat menggunakan aljabar linier untuk melakukan perhitungan numerik dan juga untuk membantu kita berpikir dalam hal garis / vektor / "pesawat" / "bola" dalam dimensi n, meskipun kita tidak bisa menggambar ini.
Jadi, dalam dua dimensi : berkenaan dengan kesamaan teks, ini berarti bahwa kami akan fokus pada dua istilah yang berbeda, ucapkan kata "London" dan "Paris", dan kami akan menghitung berapa kali masing-masing kata ini ditemukan di masing-masing dua dokumen yang ingin kita bandingkan. Ini memberi kita, untuk setiap dokumen, titik di bidang xy. Sebagai contoh, jika Doc1 memiliki Paris sekali, dan London empat kali, suatu titik di (1,4) akan menyajikan dokumen ini (berkaitan dengan evaluasi dokumen yang sangat kecil ini). Atau, berbicara dalam hal vektor, dokumen Doc1 ini akan menjadi panah dari titik asal ke titik (1,4). Dengan mengingat gambar ini, mari kita pikirkan apa artinya dua dokumen menjadi serupa dan bagaimana hubungannya dengan vektor.
SANGAT dokumen yang serupa (sekali lagi berkaitan dengan set dimensi terbatas ini) akan memiliki jumlah referensi yang sama ke Paris, DAN jumlah referensi yang sama ke London, atau mungkin, mereka dapat memiliki rasio referensi yang sama. Dokumen, Doc2, dengan 2 rujukan ke Paris dan 8 rujukan ke London, juga akan sangat mirip, hanya dengan teks yang mungkin lebih panjang atau entah bagaimana lebih berulang dari nama kota, tetapi dalam proporsi yang sama. Mungkin kedua dokumen adalah panduan tentang London, hanya membuat referensi ke Paris (dan betapa tidak kerennya kota itu ;-) Hanya bercanda !!!.
Sekarang, dokumen yang kurang serupa mungkin juga menyertakan referensi ke kedua kota, tetapi dalam proporsi yang berbeda. Mungkin Doc2 hanya akan mengutip Paris sekali dan London tujuh kali.
Kembali ke bidang xy kita, jika kita menggambar dokumen hipotetis ini, kita melihat bahwa ketika mereka SANGAT mirip, vektor mereka tumpang tindih (meskipun beberapa vektor mungkin lebih panjang), dan ketika mereka mulai memiliki kurang kesamaan, vektor ini mulai menyimpang, untuk memiliki sudut yang lebih lebar di antara mereka.
Dengan mengukur sudut antara vektor, kita bisa mendapatkan ide yang bagus tentang kesamaan mereka , dan untuk membuat segalanya lebih mudah, dengan mengambil Cosine dari sudut ini, kita memiliki nilai 0 ke 1 atau -1 ke 1 yang bagus yang mengindikasikan kesamaan ini, tergantung pada apa dan bagaimana kita menjelaskannya. Semakin kecil sudutnya, semakin besar (lebih dekat ke 1) nilai kosinus, dan juga semakin tinggi kesamaannya.
Pada ekstremnya, jika Doc1 hanya mengutip Paris dan Doc2 hanya mengutip London, dokumen itu sama sekali tidak memiliki kesamaan. Doc1 akan memiliki vektor pada sumbu x, Doc2 pada sumbu y, sudut 90 derajat, Cosine 0. Dalam hal ini kita akan mengatakan bahwa dokumen-dokumen ini ortogonal satu sama lain.
Menambahkan dimensi :
Dengan rasa intuitif untuk kesamaan yang diekspresikan sebagai sudut kecil (atau kosinus besar), kita sekarang dapat membayangkan berbagai hal dalam 3 dimensi, katakan dengan membawa kata "Amsterdam" ke dalam campuran, dan memvisualisasikan dengan baik bagaimana dokumen dengan dua referensi untuk masing-masing akan memiliki vektor pergi ke arah tertentu, dan kita dapat melihat bagaimana arah ini akan dibandingkan dengan dokumen yang mengutip Paris dan London masing-masing tiga kali, tetapi tidak Amsterdam, dll. Seperti dikatakan, kita dapat mencoba dan membayangkan mewah ini ruang untuk 10 atau 100 kota. Sulit untuk menggambar, tetapi mudah dikonsep.
Saya akan menyelesaikan hanya dengan mengatakan beberapa kata tentang formula itu sendiri . Seperti yang telah saya katakan, referensi lain memberikan informasi yang baik tentang perhitungan.
Pertama dalam dua dimensi. Rumus untuk Cosinus sudut antara dua vektor berasal dari perbedaan trigonometri (antara sudut a dan sudut b):
Formula ini terlihat sangat mirip dengan formula produk titik:
di mana
cos(a)
sesuai denganx
nilai dansin(a)
yangy
nilai, untuk vektor pertama, dll Satu-satunya masalah adalah bahwax
,y
, dll tidak persiscos
dansin
nilai-nilai, nilai-nilai ini perlu dibaca pada lingkaran satuan. Di situlah penyebut rumus dimulai: dengan membaginya dengan produk dari panjang vektor-vektor ini, koordinatx
dany
menjadi dinormalisasi.sumber
Inilah implementasi saya di C #.
sumber
Untuk kesederhanaan, saya mengurangi vektor a dan b:
Kemudian cosine similarity (Theta):
maka kebalikan dari cos 0,5 adalah 60 derajat.
sumber
Kode Python ini adalah upaya cepat dan kotor saya untuk mengimplementasikan algoritma:
sumber
Menggunakan contoh @Bill Bell, dua cara untuk melakukan ini di [R]
atau mengambil keuntungan dari kinerja metode crossprod () ...
sumber
Ini adalah
Python
kode sederhana yang mengimplementasikan kesamaan cosinus.sumber
sumber
Kode JAVA sederhana untuk menghitung kesamaan cosinus
sumber
Dua Vektor A dan B ada dalam ruang 2D atau ruang 3D, sudut antara vektor tersebut adalah kesamaan.
Jika sudut lebih (bisa mencapai maks 180 derajat) yaitu Cos 180 = -1 dan sudut minimum adalah 0 derajat. cos 0 = 1 menyiratkan vektor selaras satu sama lain dan oleh karena itu vektornya sama.
cos 90 = 0 (yang cukup untuk menyimpulkan bahwa vektor A dan B tidak sama sekali dan karena jarak tidak boleh negatif, nilai-nilai kosinus akan terletak dari 0 hingga 1. Oleh karena itu, lebih banyak sudut menyiratkan menyiratkan mengurangi kesamaan (memvisualisasikan juga itu) masuk akal)
sumber