Evaluasi pemanfaatan ChatGPT dengan Image Scraping Python |
Akhir-akhir ini, dunia dibuat gempar dengan pesatnya perkembangan kecerdasan buatan atau Artificial Intelligence (AI). Salah satu produk dari perkembangan AI yang kini viral dikenal adalah ChatGPT. Ketika saya menggunakan ChatGPT, iseng-iseng saya bertanya mengenai siapa dia sebenarnya. ChatGPT kemudian menjawab pertanyaan saya itu dengan pengertian sederhana, kurang lebih separagraf.
Keluaran dari ChatGPT mendefinisikan dirinya sendiri sebagai sebuah model Natural Language Processing (NLP) yang dikembangkan oleh OpenAI dengan menggunakan arsitektur GPT versi 35. Apliaksi ini mempunyai kemampuan berinteraksi dengan pengguna melalui percakapan atau diskusi berbahasa apa saja, termasuk bahasa Indonesia dan merespon sejumlah pertanyaan atau soal yang diajukan kepadanya. ChatGPT dilatih menggunakan sekumpulan data teks berdimensi besar (Big Data) sehingga dapat memahami bahasa manusia dengan sangat baik.
Sebelum ChatGPT ini lahir, beberapa aplikasi yang menjadi produk NLP mungkin telah kita kenal. Hanya saja tidak seperti ChatGPT yang menggunakan data masukan dan latih yang sangat besar. Mungkin dulu kita pernah menggunakan aplikasi Simsimi, chatbox, koreksi teks, teks translator, similarity text, atau sejenisnya. ChatGPT pada dasarnya merupakan produk integrasi dari produk NLP itu semua.
Kalau dirunut, ChatGPT ini embrionya ada sejak 2015. Embrio ini diinisiasi oleh sekelompok tokoh ternama di dunia teknologi, seperti Elon Musk, Sam Altman, Greg Brockman, Ilya Sutskever, John Schulman, dan beberapa tokoh lainnya. Tim inilah yang mencetus lahirnya perusahaan OpenAI, sebuah perusahaan nirlaba yang berdedikasi dalam mengembangkan teknologi kecerdasan buatan dengan tujuan meningkatkan kesejahteraan manusia.
Kendati demikian, penggunaan ChatGPT ini masih menuai pro dan kontra, terlebih saat ini yang parameternya telah menyamai parameter otak manusia. Diketahui, karena data yang menjadi data latih ChatGPT ini bersifat open source layaknya Wikipedia, sangat memungkinkan sebuah informasi mengalami bias akibat secara mudah dan bebas diubah-ubah oleh manusia. Kedua, hasil keluaran respon ChatGPT ternyata tidak konsisten untuk perintah atau penugasan yang bercampur antara teks dan angka sehingga informasi angka yang menjadi responnya sering tidak sesuai.
Algoritma Artificial Neural Network (ANN) yang menjadi algoritma dasar dari ChatGPT tetap memiliki kelemahan. Akibat data latih yang digunakan berjumlah besar disertai algoritma yang sangat kompleks, membuat keluaran (output) ChatGPT seringkali terlalu bertele-tele, bahkan salah data. Algoritma yang kompleks sangat mungkin terjadi overfitting, sehingga salah satu cara mengantisipasinya adalah menuliskan perintah atau tugas kepada aplikasi tersebut secara detil dan selengkap mungkin. Seperti contoh kasus yang akan kita ulas dan praktikkan kali ini.
Tujuan dari praktik kali ini adalah evaluasi kemampuan ChatGPT dalam memberikan data-data numerik untuk kemudian dicocokkan dengan data aktual hasil image scraping menggunakan Python.
Mulanya saya mencari data tentang kasus kekerasan terhadap perempuan tahun 2001 sampai 2005 di ChatGPT dengan hasil sebagai berikut:
Input dan Output ChatGPT tentang data kekerasan terhadap perempuan di Indonesia |
Kemudian saya cocokkan dengan data aktual dari situs PPPA berikut. Kemudian saya unduh dan saya screenshoot sehingga menjadi gambar png lalu saya bandingkan data aktual tersebut melalui langkah-langkah evaluasi berikut:
#Aktivasi package image scraping
from PIL import Image
from pytesseract import pytesseract
#Aktivasi aplikasi image scraping dan import image
path = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
g_path = r"C:\Users\Joko Ade\Documents\ktp.png"
g = Image.open(g_path)
g
#Konversi path
pytesseract.tesseract_cmd = path
#Ekstraksi teks dari image
text = pytesseract.image_to_string(g)
text
'14.020\n\n7787\n\n5.163\n\n3.169\n\n20391\n'
#Mengubah data
import re
text2 = re.findall('(.+)', text)
text2
['14.020', '7787', '5.163', '3.169', '20391']
#Mengubah menjadi dataframe
import pandas as pd
df = pd.DataFrame({'KTP':text2})
df
KTP | |
---|---|
0 | 14.020 |
1 | 7787 |
2 | 5.163 |
3 | 3.169 |
4 | 20391 |
#Menambahkan variabel tahun
df = pd.DataFrame({'Tahun':[2004,2003,2002,2001,2005],
'KTP':text2}).replace('[.]', '', regex=True)
df
Tahun | KTP | |
---|---|---|
0 | 2004 | 14020 |
1 | 2003 | 7787 |
2 | 2002 | 5163 |
3 | 2001 | 3169 |
4 | 2005 | 20391 |
#Mengurutkan data berdasarkan tahun
df2 = df.sort_values("Tahun")
df2
Tahun | KTP | |
---|---|---|
3 | 2001 | 3169 |
2 | 2002 | 5163 |
1 | 2003 | 7787 |
0 | 2004 | 14020 |
4 | 2005 | 20391 |
#Import image dari ChatGPT
path = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
c_path = r"C:\Users\Joko Ade\Documents\chattkp.png"
c = Image.open(c_path)
c
#Import hasil crop image ChatGPT
crop_path = r"C:\Users\Joko Ade\Documents\chatdataktp.png"
crop = Image.open(crop_path)
crop
#Konversi path
chatgpt = pytesseract.image_to_string(crop)
chatgpt
'Tahun 2001: 5.754 kasus\nTahun 2002: 4.810 kasus\nTahun 2003: 6.368 kasus\nTahun 2004: 7.262 kasus\nTahun 2005: 6.315 kasus\n'
#Menyiapkan data
import re
chatgpt2 = re.findall('(.+)', chatgpt)
chatgpt2
['Tahun 2001: 5.754 kasus', 'Tahun 2002: 4.810 kasus', 'Tahun 2003: 6.368 kasus', 'Tahun 2004: 7.262 kasus', 'Tahun 2005: 6.315 kasus']
#Mengubah menjadi dataframe dan menghapus titik
dfgpt = pd.DataFrame({'teks':chatgpt2}).replace('[.]', '', regex=True)
dfgpt
teks | |
---|---|
0 | Tahun 2001: 5754 kasus |
1 | Tahun 2002: 4810 kasus |
2 | Tahun 2003: 6368 kasus |
3 | Tahun 2004: 7262 kasus |
4 | Tahun 2005: 6315 kasus |
#Memecah 1 data menjadi 2 data dengan karakter (:)
dfgpt[['Tahun', 'Kasus']] = dfgpt['teks'].str.split(':', expand=True)
dfgpt
teks | Tahun | Kasus | |
---|---|---|---|
0 | Tahun 2001: 5754 kasus | Tahun 2001 | 5754 kasus |
1 | Tahun 2002: 4810 kasus | Tahun 2002 | 4810 kasus |
2 | Tahun 2003: 6368 kasus | Tahun 2003 | 6368 kasus |
3 | Tahun 2004: 7262 kasus | Tahun 2004 | 7262 kasus |
4 | Tahun 2005: 6315 kasus | Tahun 2005 | 6315 kasus |
#Menghapus teks pada data hasil pemecahan
dfgpt['Tahun'] = dfgpt['Tahun'].replace("Tahun ", "", regex=True)
dfgpt['Kasus'] = dfgpt['Kasus'].replace(" kasus", "", regex=True)
dfgpt
teks | Tahun | Kasus | |
---|---|---|---|
0 | Tahun 2001: 5754 kasus | 2001 | 5754 |
1 | Tahun 2002: 4810 kasus | 2002 | 4810 |
2 | Tahun 2003: 6368 kasus | 2003 | 6368 |
3 | Tahun 2004: 7262 kasus | 2004 | 7262 |
4 | Tahun 2005: 6315 kasus | 2005 | 6315 |
#Import package metric RMSE
import numpy as np
from sklearn.metrics import mean_squared_error
#Menghitung nilai RMSE antara data prediksi teks ChatGPT dan data aktual dari Kemen PPPA
rmse = np.sqrt(mean_squared_error(np.array(df2['KTP']),
np.array(dfgpt['Kasus'])))
print("RMSE-nya adalah sebesar: ", rmse)
RMSE-nya adalah sebesar: 7108.090249849111
Dari hasil evaluasi menggunakan Root Mean Square Error (RMSE) di atas, terlihat bahwa ChatGPT kurang mampu menjawab pertanyaan terkait data-data aktual yang sama persis dengan data Kementerian Pemberdayaan Perempuan dan Perlindungan Anak Republik Indonesia (PPPA) dalam situs SIMFONI. Adapun RMSE yang dihasilkan cukup besar, yakni sebesar 7108,09. Hasil ini sekaligus menjadi rekomendasi penggunaan ChatGPT sebaiknya tidak untuk mencari data-data, terlebih data aktual atau realtime. Sebaliknya, ChatGPT sangat cocok digunakan untuk penugasan atau perintah menggunakan teks murni dan atau bertanya seputar coding baik Python, R, C, C++, HTML, Java, SQL, Rush, Julia, atau lainnya.
Demikian sedikit sharing kita kali ini, semoga sedikit hasil ini dapat memberi insight bagi semua pembaca setia blog ini. Selamat memahami dan mempraktikkan!