Filter data sesuai kata kunci menggunakan similaritas semantik

Sani
2 min readJan 30, 2023

--

Semantic

Semantic similarity digunakan untuk mengukur seberapa mirip dua buah kalimat atau frasa dalam hal makna yang sesungguhnya. Ini dapat digunakan dalam berbagai aplikasi, seperti analisis teks, pemahaman mesin, atau mesin pencari dan lainnya. Semantic similarity juga dapat digunakan untuk mengukur kesamaan antara dokumen atau teks yang lebih besar. Ini dapat digunakan untuk menemukan duplikat atau dokumen yang sangat mirip, atau untuk mengelompokkan dokumen berdasarkan topik yang sama.

Sebagai contoh, perbandingan kemiripan semantik antara kalimat berikut:

Kalimat 1: “Dia makan di restoran”

Kalimat 2: “Dia makan bakso”

Meskipun kedua kalimat tersebut memiliki kata yang berbeda (“restoran” dan “bakso”), maknanya sama yaitu seseorang yang sedang makan. Oleh karena itu, kedua kalimat tersebut dapat dianggap memiliki tingkat kemiripan semantik yang tinggi.

Jika kita mengetikkan sesuatu di mesin pencari misalnya ‘makanan kucing’ tentu akan ditampilkan gambar dan informasi tentang makanan kucing. Proses filter yang ditampilkan tersebut merupakan contoh penerapan semantic similarity.

Studi Kasus

Jadi saya diberi tugas untuk melakukan filter data sesuai keyword. Ada 3000+ lebih judul jurnal dan beberapa kata kunci. Saya harus mengelompokkan judul-judul yang sesuai dengan kata kunci yang sudah ditentukan.

Untuk melakukan filter data berdasarkan kata kunci menggunakan similaritas semantik, langkah-langkahnya adalah sebagai berikut:

  1. Pra-proses data dengan mengubahnya menjadi representasi numerik, seperti embedding kata atau vektor.
  2. Hitung similaritas semantik antara kata kunci dan setiap bagian data menggunakan metrik similaritas semantik seperti Cosine similarity atau Jaccard similarity.
  3. Pilih bagian data dengan skor similaritas di atas ambang batas tertentu.
  4. Tampilkan data yang sudah difilter

Cosine Similarity

Saya menggunakan cosine similarity dari scikit-learn untuk menghitung similarity antara setiap teks dan setiap keyword. Fungsi ini menerima 2 array sebagai input dan menghasilkan skor kesamaan antara 0 dan 1, di mana 1 menunjukkan vektor yang identik dan 0 menunjukkan vektor yang tidak sama sama sekali. Skor cosine similarity dihitung dengan membagi dot product dari kedua vektor dengan produk dari norm kedua vektor.

Menggunakan CountVectorizer untuk mengubah teks menjadi vektor. Fungsi ini membuat vocabulary dari semua kata yang muncul dalam dokumen dan menghitung frekuensi kemunculan masing-masing kata. Hasil akhir adalah sebuah sparse matrix yang menunjukkan frekuensi kemunculan setiap kata dalam setiap dokumen. Hasilnya adalah jumlah data yang disaring untuk setiap keyword.

Sebelumnya saya menyimpan data judul jurnal dengan list yang bernama ‘data’ dan kata kunci ‘keywords’. Berikut adalah implementasi yang saya lakukan:

from sklearn.metrics.pairwise import cosine_similarity from sklearn.feature_extraction.text import CountVectorizer # Create a CountVectorizer to convert texts to vectors vectorizer = CountVectorizer().fit_transform(data) # Calculate similarity similarity = cosine_similarity(vectorizer) # Create a dictionary to store the count of filtered data for each keyword filtered_data_count = {keyword: 0 for keyword in keywords} #Define the threshold threshold = 0.5 # Iterate over texts and their similarities for i, text in enumerate(data): for j, keyword in enumerate(keywords): if keyword in text and similarity[i][j] >= threshold: filtered_data_count[keyword] += 1 print(filtered_data_count)

Penjelasan kode diatas:

Originally published at https://aszani.notion.site.

--

--