Disusun Oleh:
Kelompok 3
Ni Made Ardhiya Shita Pramesti Dewi (2005551007) (Kelas A)
Luh Intan Ratna Sari Dewi (2005551057) (Kelas A)
Nyoman Meira Dewantari Armi (2005551120) (Kelas A)
Puji syukur kami panjatkan kehadirat Tuhan Yang Maha Esa karena berkat
rahmat-Nya lah laporan berjudul Implementasi Algoritma Okapi Bm25 Pada
Sistem Temu Kembali Informasi ini dapat terselesaikan dengan sebaik-baiknya.
Laporan ini bertujuan untuk menganalisis dan membandingkan kinerja
implementasi algoritma Okapi BM25 pada TF-IDF, VSM, dan Inverted Index
dalam sistem temu kembali informasi. Dalam penyusunan projek dan laporan ini
tentunya kami hendak berterima kasih kepada pihak-pihak yang terlibat dalam
kesuksesan laporan ini. Ucapan terima kasih kami tujukan kepada pihak-pihak di
antaranya sebagai berikut.
1. Bapak Dr. Eng. I Putu Agung Bayupati, S.T., M.T selaku dosen
pengampu mata kuliah Sistem Temu Kembali Informasi.
2. Rekan kelompok 3 atas kerjasamanya selama pengembangan projek
dan penyusunan laporan projek.
3. Keluarga dan teman-teman penulis yang memberikan dukungan moral,
dorongan, dan pengertian selama proses penelitian.
Kami menyadari laporan ini masih jauh dari kata sempurna, oleh karena
itu kami terbuka akan kritik dan saran dari pembaca sekalian guna meningkatkan
kualitas penelitian di masa mendatang. Kami berharap bahwa laporan ini akan
memberikan kontribusi yang berarti bagi perusahaan dan pembaca sekalian.
Penulis
ii
DAFTAR ISI
HALAMAN JUDUL................................................................................................i
KATA PENGANTAR..............................................................................................ii
DAFTAR ISI...........................................................................................................iii
BAB I PENDAHULUAN........................................................................................5
1.1 Latar Belakang..........................................................................................5
1.2 Rumusan Masalah.....................................................................................6
1.3 Tujuan Penelitian.......................................................................................6
1.4 Manfaat Penelitian.....................................................................................7
1.5 Batasan Masalah........................................................................................8
1.6 Sistematika Penulisan................................................................................8
BAB II KAJIAN PUSTAKA.................................................................................10
2.1 Data Retrival............................................................................................10
2.2 Python......................................................................................................10
2.3 Pembobotan Kata (Term Weighting).......................................................10
2.4 Algoritma SVM.......................................................................................10
2.5 Boolean Retrieval Model.........................................................................11
2.6 Algoritma Okapi BM25...........................................................................11
BAB III METODOLOGI PENELITIAN..............................................................12
3.1 Tempat dan Waktu Penelitian..................................................................12
3.2 Alat Penelitian.........................................................................................12
3.3 Alur Penelitian.........................................................................................12
BAB IV HASIL DAN PEMBAHASAN...............................................................14
4.1 Gambaran Penelitian...............................................................................14
4.2 Implementasi (Kode Program + Mockup)..............................................14
4.2.1 Input Data.........................................................................................14
4.2.2 Input Filter........................................................................................16
4.2.3 Preprocessing...................................................................................18
4.2.4 TF-IDF.............................................................................................20
4.2.5 SVM.................................................................................................24
4.2.6 Boolean Retrieval Model.................................................................28
4.2.7 Okapi BM25.....................................................................................40
BAB V PENUTUP.................................................................................................45
5.1 Kesimpulan..............................................................................................45
5.2 Saran........................................................................................................45
DAFTAR PUSTAKA.............................................................................................47
iii
DAFTAR GAMBAR
iv
BAB I
PENDAHULUAN
5
6
efektif dalam meningkatkan kinerja sistem temu kembali informasi, belum banyak
penelitian yang mengimplementasikan algoritma ini pada metode yang sudah
mapan seperti TF-IDF, VSM, dan Boolean Retrieval Model. Oleh karena itu,
terdapat kebutuhan akan penelitian yang mendalam tentang implementasi
algoritma Okapi BM25 pada sistem temu kembali informasi yang menggunakan
metode-metode tersebut.
Penelitian ini bertujuan untuk menganalisis dan membandingkan kinerja
implementasi algoritma Okapi BM25 pada TF-IDF, VSM, dalam sistem temu
kembali informasi. Dengan mengintegrasikan algoritma Okapi BM25 ke dalam
metode-metode tersebut, diharapkan dapat meningkatkan ketepatan dalam
menemukan dokumen yang relevan dengan permintaan pengguna. Hasil dari
penelitian ini diharapkan dapat memberikan kontribusi dalam pengembangan
sistem temu kembali informasi yang lebih efektif dan efisien.
10
11
mana tujuan utamanya adalah untuk menemukan hiperplane terbaik yang dapat
memisahkan dua kelas data dengan jarak maksimum antara sampel terdekat dari
setiap kelas (Octaviani, dkk, 2014).
II.5 Boolean Retrieval Model
Boolean Retrieval Model adalah salah satu metode dasar dalam sistem
pengambilan informasi (Risparyanto, 2012). Model ini digunakan untuk
mencocokkan dan mengambil dokumen yang sesuai dengan kueri pengguna
berdasarkan logika boolean, yaitu menggunakan operator boolean seperti "AND",
"OR", dan "NOT" untuk membangun ekspresi kueri.
II.6 Algoritma Okapi BM25
Okapi BM25 didasarkan pada model ruang vektor, yang menganggap kueri
dan dokumen sebagai vektor dalam ruang berdimensi tinggi (Abdurrahman,
2019). Algoritma ini mengukur relevansi antara kueri dan dokumen berdasarkan
perhitungan bobot istilah (term weighting) yang memperhitungkan frekuensi
kemunculan istilah dalam dokumen dan kueri, serta statistik koleksi yang
mencerminkan distribusi global istilah dalam koleksi dokumen.
BAB III
METODOLOGI PENELITIAN
12
13
14
15
<div class="row">
<div class="col">
<div class="card-body">
<blockquote
class="blockquote">
<label
for="input_text">Enter text 1:</label>
<input class="form-
control" placeholder="Input Yout Text Here" type="text"
id="input_text"
name="input_text1">
</blockquote>
</div>
</div>
<div class="col">
<div class="card-body">
<blockquote
class="blockquote">
<label
for="input_text">Enter text 2:</label>
<input class="form-
control" placeholder="Input Yout Text Here" type="text"
id="input_text"
name="input_text2">
</blockquote>
</div>
</div>
<div class="col">
<div class="card-body">
<blockquote
class="blockquote">
<label
for="input_text">Enter text 3:</label>
<input class="form-
control" placeholder="Input Yout Text Here" type="text"
id="input_text"
name="input_text3">
</blockquote>
</div>
</div>
</div>
<div class="row">
<div class="card-body">
<blockquote class="blockquote">
<label
for="input_text">Search word:</label>
<input class="form-control"
placeholder="Input Word to Search in Document"
type="text"
id="search_word" name="search_word">
</blockquote>
</div>
</div>
<div class="d-grid gap-2">
<input class="btn btn-warning"
type="submit" value="Submit">
</div>
Kode Program 1. Input Data
16
<label class="form-check-
label" for="flexCheckChecked">
Wnl
</label>
</div>
<div class="col">
<input class="form-check-
input" type="checkbox" name="checkbox3" value="1"
onchange="updateValue(this)" checked>
<label class="form-check-
label" for="flexCheckChecked">
Porter
</label>
</div>
</div>
Kode Program 2. Input Filter
# tokens_without_punct
without_punctuation = [token for token in new_sentence if
token not in string.punctuation]
final_sentence = ' '.join(without_punctuation)
# print(tokens_without_punct)
# print(final_sentence)
# , 'porter_sentence': porter_sentence, 'wnl_sentence':
wnl_sentence
# return {'final_sentence': final_sentence, "input_text":
20
input_text}
return without_punctuation
Kode Program 3. Preprocessing
q = []
d1_count = []
d2_count = []
d3_count = []
if word in arr_doc1:
count_token_doc1 = arr_doc1.count(word)
d1_count.append(count_token_doc1)
else:
d1_count.append(0)
if word in arr_doc2:
count_token_doc2 = arr_doc2.count(word)
d2_count.append(count_token_doc2)
else:
d2_count.append(0)
if word in arr_doc3:
count_token_doc3 = arr_doc3.count(word)
d3_count.append(count_token_doc3)
else:
d3_count.append(0)
# match_word.append(word)
df = []
D = []
log = []
log_1 = []
w_q = []
w_d1 = []
w_d2 = []
w_d3 = []
v_q = []
v_d1 = []
v_d2 = []
v_d3 = []
vsm_d1 = []
vsm_d2 = []
vsm_d3 = []
cos_document = []
23
data_vector_Wq = 0
i = 0
while i < len(token_array):
sum_d = int(d1[i]) + int(d2[i]) + int(d3[i])
D_df = 3/sum_d
idf_log = float(math.log10(D_df))
idf_log_abs = abs(idf_log)
idf_log_formatted = format(idf_log_abs, ".3f")
idf_1 = idf_log_abs+1
idf_log_1_formatted = format(idf_1, ".3f")
if q[i] == 0:
Wq = "0"
vector_Wq = "0"
else:
Wq = format(idf_1*q[i], ".3f")
vector_Wq = format(pow(float(Wq), 2), ".3f")
# data_vector_Wq = vector_Wq
if d1[i] == 0:
W1 = "0"
vector_W1 = "0"
vsm_W1 = "0"
else:
W1 = format(idf_1*d1[i], ".3f")
vector_W1 = format(pow(float(W1), 2), ".3f")
vsm_W1 =
format(float(vector_Wq)*float(vector_W1), ".3f")
if d2[i] == 0:
W2 = "0"
vector_W2 = "0"
vsm_W2 = "0"
else:
W2 = format(idf_1*d2[i], ".3f")
vector_W2 = format(pow(float(W2), 2), ".3f")
vsm_W2 =
format(float(vector_Wq)*float(vector_W2), ".3f")
if d3[i] == 0:
W3 = "0"
vector_W3 = "0"
vsm_W3 = "0"
else:
W3 = format(idf_1*d3[i], ".3f")
vector_W3 = format(pow(float(W3), 2), ".3f")
vsm_W3 =
format(float(vector_Wq)*float(vector_W3), ".3f")
# time.sleep(1)
df.append(sum_d)
D.append(D_df)
log.append(idf_log_formatted)
log_1.append(idf_log_1_formatted)
w_q.append(Wq)
w_d1.append(W1)
w_d2.append(W2)
w_d3.append(W3)
24
v_q.append(vector_Wq)
v_d1.append(vector_W1)
v_d2.append(vector_W2)
v_d3.append(vector_W3)
vsm_d1.append(vsm_W1)
vsm_d2.append(vsm_W2)
vsm_d3.append(vsm_W3)
i += 1
cos_document.append(cos_d1)
cos_document.append(cos_d2)
cos_document.append(cos_d3)
result_rank = []
rank_tf_idf_d1 = format(sum(float(x) for x in w_d1),
".3f")
result_rank.append(rank_tf_idf_d1)
rank_tf_idf_d2 = format(sum(float(x) for x in w_d2),
".3f")
result_rank.append(rank_tf_idf_d2)
rank_tf_idf_d3 = format(sum(float(x) for x in w_d3),
".3f")
result_rank.append(rank_tf_idf_d3)
if 1 in q:
df = []
D = []
log = []
log_1 = []
w_q = []
w_d1 = []
w_d2 = []
w_d3 = []
v_q = []
v_d1 = []
v_d2 = []
v_d3 = []
vsm_d1 = []
vsm_d2 = []
vsm_d3 = []
cos_document = []
data_vector_Wq = 0
i = 0
while i < len(token_array):
sum_d = int(d1[i]) + int(d2[i]) + int(d3[i])
D_df = 3/sum_d
idf_log = float(math.log10(D_df))
idf_log_abs = abs(idf_log)
idf_log_formatted = format(idf_log_abs, ".3f")
idf_1 = idf_log_abs+1
idf_log_1_formatted = format(idf_1, ".3f")
if q[i] == 0:
Wq = "0"
vector_Wq = "0"
else:
Wq = format(idf_1*q[i], ".3f")
vector_Wq = format(pow(float(Wq), 2), ".3f")
# data_vector_Wq = vector_Wq
if d1[i] == 0:
W1 = "0"
vector_W1 = "0"
vsm_W1 = "0"
else:
W1 = format(idf_1*d1[i], ".3f")
vector_W1 = format(pow(float(W1), 2), ".3f")
vsm_W1 =
format(float(vector_Wq)*float(vector_W1), ".3f")
if d2[i] == 0:
W2 = "0"
vector_W2 = "0"
vsm_W2 = "0"
else:
W2 = format(idf_1*d2[i], ".3f")
vector_W2 = format(pow(float(W2), 2), ".3f")
27
vsm_W2 =
format(float(vector_Wq)*float(vector_W2), ".3f")
if d3[i] == 0:
W3 = "0"
vector_W3 = "0"
vsm_W3 = "0"
else:
W3 = format(idf_1*d3[i], ".3f")
vector_W3 = format(pow(float(W3), 2), ".3f")
vsm_W3 =
format(float(vector_Wq)*float(vector_W3), ".3f")
# time.sleep(1)
df.append(sum_d)
D.append(D_df)
log.append(idf_log_formatted)
log_1.append(idf_log_1_formatted)
w_q.append(Wq)
w_d1.append(W1)
w_d2.append(W2)
w_d3.append(W3)
v_q.append(vector_Wq)
v_d1.append(vector_W1)
v_d2.append(vector_W2)
v_d3.append(vector_W3)
vsm_d1.append(vsm_W1)
vsm_d2.append(vsm_W2)
vsm_d3.append(vsm_W3)
i += 1
cos_document.append(cos_d1)
cos_document.append(cos_d2)
cos_document.append(cos_d3)
28
ada. Setelah itu dicari perhitungan dot produk tiap dokumen. Terakhir, akan dicari
perankingannya dengan menggunakan rumus cosine. Rank dari dokumen tersebut
dimulai dari dokumen 2 dengan cosine 1.034, dokumen 3 dengan cosine 0.447,
dan dokumen 1 dengan cosine 0.390.
IV.2.6 Boolean Retrieval Model
Boolean Retrieval Model memiliki dua cara untuk melakukan retrieval
data atau menemukan kembali informasi dalam sebuah dokumen. Untuk model ini
terdapat penggunaan incidence matrix dan inverted index. Berikut akan dijabarkan
kedua metode tersebut.
IV.2.6.1 Incidence Matrix
Implementasi kode program dalam melakukan proses filtering yaitu
sebagai berikut.
30
import nltk
from nltk.tokenize import word_tokenize
from nltk.probability import FreqDist
from nltk.stem import PorterStemmer
import pandas as pd
from nltk.corpus import stopwords
import re
# from data_retrieval import preprocessing as pre
# Data contoh
# documents = {
# 1: "Blue is my favorite color",
# 2: "Sky is blue and sea is blue",
# 3: "sky is blue and sky is beautiful",
# 4: "color of sky and sea is blue",
# 5: "I saw a blue car yesterday"
# }
# # documents = pre(documents)
# tokenized_docs = documents
# fd = FreqDist(documents)
# tf_table[doc_id] = fd
tabel_tf = []
for term in all_terms:
tf_values = []
for doc_id, tokens in tokenized_docs.items():
tf_values.append(int(term in tokens)) # Jika term
ada dalam tokens, nilai biner = 1, jika tidak = 0
tf_df.loc[len(tf_df)] = [term] + tf_values
tabel_tf.append(tf_values)
tf_df['Binary_Total'] = tf_df.iloc[:, 1:].apply(lambda x:
''.join(map(str, x)), axis=1)
def boolean_retrieval(documents):
tabel_stack = []
stack = []
output_queue = []
precedence = {'AND': 2, 'OR': 1, 'NOT': 3}
operators = set(['AND', 'OR', 'NOT'])
32
while stack:
output_queue.append(stack.pop())
# print("output_queue 2: ", output_queue)
# Contoh penggunaan
def main_co(query, documents):
tf_df = calculate_tf(documents)
query = query
query_terms = re.findall(r'\(|\)|\w+|\S+\s*', query)
binary_values = [documents_containing_term(term, tf_df) or
term for term in query_terms]
results = boolean_retrieval(binary_values)
matching_documents = [doc_id for doc_id, result in
enumerate(results['result'], start=1) if result == '1']
documents_list = list(documents)
matching_documents_list = list(map(str, matching_documents))
boolean = [documents.get(id) for id in
matching_documents_list if id in documents_list]
# boolean = ''
# for item in boolean_result:
# boolean += item + '\n'
result = {
'doc': matching_documents,
'text': boolean,
'hasil_boolean': results,
'binary_values': binary_values
# 'text': [documents[id] for id in matching_documents if
id in documents]
}
return result
# return result
import numpy as np
import pandas as pd
import nltk
import re
import glob
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
# Preprosessing
def preprosess(text, stoptog):
# Tokenisasi
words = word_tokenize(text)
print("Tokenisasi :")
print(words, "\n")
print("Cleaning :")
print(words_clean, "\n")
if stoptog == 'y':
words_tokens = [stemmer.stem(word) for word in words if
word not in stop_words]
else:
words_tokens = [stemmer.stem(word) for word in words]
return words_tokens
# Incidence Matrix
def build_incidence_matrix():
# Preprocessing masing-masing doc
docs_pros = []
n = 1
for doc in docs :
print("prosessing doc #",n)
print("---------------------------------")
36
docs_pros.append(preprosess(doc, stoppick))
n += 1
print("---------------------------------")
print("Preprosesing :")
print(docs_pros, "\n")
sorted_documents = sorted(document_scores.items(),
key=lambda x: x[1], reverse=True)
ranking_table = pd.DataFrame(columns=['Document',
'Score'])
for doc, score in sorted_documents:
ranking_table.loc[len(ranking_table)] = ['Doc_' +
str(doc), score]
return ranking_table
stoppick = 'y'
# Inverted Inddex
37
def build_inverted_index(result_list):
# Preprocessing masing-masing doc
docs_pros = []
docrefs = []
stoppick = 'y'
n = 1
for doc in result_list :
# print("prosessing doc #",n)
# print("---------------------------------")
doc_text = ' '.join(doc)
docs_pros.append(preprosess(doc_text, stoppick))
if stoppick == 'y':
docrefs.append(preprosess(doc_text, 'n'))
else:
docrefs.append(docs_pros[-1])
n += 1
# print("---------------------------------")
# print("Preprosesing :")
# print(docs_pros, "\n")
inverted_list = []
print("Inverted List:")
for item in doc_inverse_index:
38
inverted_list.append({
'kata': item,
'dokumen': doc_inverse_index[item],
})
print(item + ":", doc_inverse_index[item])
result = {
'inverted_list': inverted_list,
'doc_inverse_index': doc_inverse_index,
# 'text': [documents[id] for id in matching_documents if
id in documents]
}
print('inverted_list', inverted_list)
# print('doc_inverse_index', doc_inverse_index)
return result
# return doc_inverse_index
sorted_documents = sorted(document_scores.items(),
key=lambda x: x[1], reverse=True)
ranking_table = pd.DataFrame(columns=['Document', 'Score'])
for doc, score in sorted_documents:
ranking_table.loc[len(ranking_table)] = ['Doc_' +
str(doc), score]
# print('inverted_index', inverted_index)
# print('query', query)
# print(ranking_table)
return ranking_table
# # Pilihan menu
# print("Please choose between 2 menu below:")
# print("1. Incidence matrix")
# print("2. Inverted index")
# mode = input("Enter your choice: ")
# print('')
# while True:
# # Lakukan peringkat dokumen berdasarkan query
menggunakan incident matrix
# query = input("Masukkan query: ")
# ranking_table = document_ranking(query,
doc_term_matrix)
# while True:
# # Lakukan peringkat dokumen berdasarkan query
menggunakan inverted index
# query = input("Masukkan query: ")
# ranking_table = document_ranking_inverted(query,
inverted_index)
# else:
# print("Invalid input!")
Kode Program 9 Algoritma Inverted Index9
3. Letak kata pada dokumen: Ini adalah daftar yang berisi penunjuk ke posisi
atau lokasi kata kunci dalam dokumen. Dalam contoh ini, dokumen
pertama memiliki letak kata dengan nomor 1, yang menunjukkan bahwa
kata kunci tersebut muncul di posisi 1 dalam dokumen. Dokumen kedua
bernomor 1, yang menunjukkan kemunculan kata kunci dalam posisi 1
dalam dokumen.
import math
import string
import nltk
nltk.download('omw-1.4')
from nltk.tokenize import word_tokenize
def preprocess(input_text):
# Create a stop word list for English
stop_words = ["n't", 'was', "couldn't", "hadn't", "aren't",
"shouldn't", "couldn't", "hasn't", "that'll", "you've",
"mightn't", "wouldn't", "doesn't", "wasn't", "haven't",
"mustn'", 'mightn', 'shan', "needn't", 'that', "she's",
"shouldn't", 'now', "weren't", "don't", "mustn't", "hadn't",
"weren't", "won't", "you'd", "needn't", "aren't", "wasn'",
"didn't", 'didn', "it's", "isn't", "hasn'", 'wouldn', "doesn'",
'to', 'how', 'we', 'not', 'where', 'he', 'itself', 'can', 'nor',
'few', 'had', 'here', 'them', 'hers', 'this', 'under', 'all',
'same', 'by', 'yourself', 'other', 'out', 'my', 'about', 'will',
'some', 'herself', 'as', 'these', 'do', 'very', 'from', 'then',
'yourselves', 'above', 'most', 'it', 'any', 'only', 'ma', 'for',
'no', 'you', 'between', 'such', 'your', 'ain', 'in', 'being',
'up', 'because', 'him', 'more', 'while', 'were', 'into',
'haven', 'his', 'both', 'having', 'myself', 'is', 'than',
'ourselves', 'but', "should've", 'when', 'hadn', 'himself',
"you'll", 'its', 'until', 'are', 'and', 'further', 'if', 'off',
'won', 'who', 'i', 'has', 'during', 'so', 'isn', "you're",
'have', 'again', 'does', 'below', 'theirs', 'ours', 'the',
'through', 'own', 'those', 'too', 'be', 'on', 'doing', 'don',
'me', 'should', 'down', 'which', 'after', 're', 'once', 'their',
'against', 'whom', 'they', 'what', 'an', 'each', 'at',
'themselves', 'been', "shan't", 'she', 'did', 'with', 'our',
'there', 'just', 'over', 'why', 'll', 'before', 'of', 'her',
'or', 'yours', 've', 'am', 'y', "'s", 'o', 'm', 'd', "a"]
lemmatized_word_ed =
wnl.lemmatize(str(tokenizing_sentence[i]), pos='v')
new_sentence.append(lemmatized_word_ed)
# print(lemmatized_word_ed)
else:
stemmed_words =
porter.stem(str(tokenizing_sentence[i]))
new_sentence.append(stemmed_words)
# print(stemmed_words)
i+=1
# tokens_without_punct
without_punctuation = [token for token in new_sentence if
token not in string.punctuation]
final_sentence = ' '.join(without_punctuation)
return final_sentence
return score
def calculate_avgdl(corpus):
total_length = sum(len(doc) for doc in corpus)
return total_length / len(corpus)
if doc_id in relevant_docs:
44
# Contoh penggunaan
# Dokumen yang relevan untuk query tertentu
relevant_docs = {0} # Misalnya, dokumen 0 dan 2 dianggap
relevan
# Parameter BM25
k1 = 1.2
b = 0.75
k3=1.2
threshold = 0.0 # Nilai ambang batas
# Contoh query
query1 = "blue favorite color use everytime see blue"
# query2 = "blue beautiful sky"
# query3 = "blue sky everywhere"
Dalam model Okapi BM25, semakin tinggi skor, semakin tinggi tingkat
relevansi antara dokumen dan query. Namun, dalam contoh kode yang diberikan,
perangkingan dilakukan secara terbalik, yaitu dari skor terendah ke skor tertinggi.
Oleh karena itu, skor yang ditampilkan adalah negatif.
Skor negatif pada contoh yang diberikan tidak menunjukkan bahwa
dokumen memiliki tingkat relevansi yang jelek. Skor negatif terjadi karena dalam
perhitungan BM25, terdapat penurunan skor yang ditambahkan pada term "b"
yang berkaitan dengan panjang dokumen. Nilai "b" dalam contoh tersebut adalah
0.75, yang mengakibatkan penurunan skor.
Dalam perangkingan, dokumen dengan skor yang lebih tinggi (bahkan jika
negatif) masih memiliki tingkat relevansi yang lebih tinggi daripada dokumen
dengan skor yang lebih rendah. Jadi, urutan peringkat tetap relevan, meskipun
skornya negatif.
BAB V
PENUTUP
V.1 Kesimpulan
Dalam penelitian ini, kami menganalisis dan membandingkan kinerja
implementasi algoritma Okapi BM25 pada metode Term Frequency-Inverse
Document Frequency (TF-IDF) dan Vector Space Model (VSM) dalam sistem
temu kembali informasi. Tujuan kami adalah meningkatkan ketepatan dalam
menemukan dokumen yang relevan dengan permintaan pengguna. Dari hasil
penelitian dan analisis yang dilakukan, kami dapat menyimpulkan hal-hal berikut:
1. Implementasi algoritma Okapi BM25 pada metode TF-IDF dan VSM
memberikan peningkatan signifikan dalam kinerja sistem temu kembali
informasi.
2. Okapi BM25 mengatasi beberapa keterbatasan yang dapat ditemui dalam
metode tradisional seperti TF-IDF dan VSM, terutama dalam menemukan
dokumen yang paling relevan dengan permintaan pengguna.
3. Penggunaan algoritma Okapi BM25 dalam sistem temu kembali informasi
dapat meningkatkan akurasi dan kepuasan pengguna dengan menampilkan
dokumen yang lebih relevan.
V.2 Saran
Berdasarkan hasil penelitian ini, terdapat beberapa saran untuk
pengembangan sistem temu kembali informasi yang lebih lanjut:
1. Mengintegrasikan algoritma Okapi BM25 dalam metode Boolean
Retrieval Model: Selain implementasi pada metode TF-IDF dan VSM,
penelitian selanjutnya dapat mempertimbangkan penerapan algoritma
Okapi BM25 pada metode Boolean Retrieval Model. Hal ini dapat
memperluas penggunaan algoritma ini dan memberikan peningkatan
kinerja pada metode yang berbeda.
2. Melakukan evaluasi lebih lanjut: Meskipun penelitian ini telah
memberikan hasil positif, evaluasi lebih lanjut dapat dilakukan untuk
menguji kinerja algoritma Okapi BM25 pada berbagai jenis koleksi
47
48
dokumen dan permintaan pengguna yang berbeda. Hal ini akan membantu
dalam memahami kemampuan algoritma ini secara menyeluruh.
3. Mempertimbangkan faktor lain: Selain faktor-faktor yang digunakan
dalam algoritma Okapi BM25, penelitian selanjutnya dapat
mempertimbangkan penggunaan faktor-faktor tambahan seperti metadata
dokumen, struktur dokumen, atau informasi kontekstual lainnya untuk
meningkatkan relevansi temuan.
DAFTAR PUSTAKA
49