Analisis sentimen pada model topik berdasarkan ulasan produk dengan ChatGPT [Bagian 1]
Ulasan produk memberikan wawasan berharga mengenai tantangan yang dihadapi pelanggan dan membantu bisnis mengidentifikasi area yang perlu diperbaiki.
Dengan menganalisis topik dan sentimen dalam ulasan, ilmuwan data dapat mengidentifikasi fitur kunci produk yang disukai atau tidak disukai oleh pelanggan.
Namun, salah satu tantangan saat bekerja dengan ulasan adalah kualitas data. Ulasan produk memiliki struktur yang tidak terstruktur sehingga beberapa topik dapat disebutkan dalam satu paragraf berdampingan. Campuran antara pro dan kontra membuat penilaian keseluruhan dan sentimen menjadi tidak relevan. Yang berharga untuk diketahui adalah sentimen per topik yang disebutkan dalam ulasan.
Mari kita lihat contoh yang dipilih secara selektif dari kumpulan data Ulasan Disneyland:
Syukurlah tidak terlalu panas atau lembap saat saya mengunjungi taman ini, jika tidak itu akan menjadi masalah besar (tidak banyak tempat teduh). Saya tiba sekitar pukul 10:30 pagi dan pergi jam 6 sore. Sayangnya, saya tidak bertahan hingga parade malam, tetapi 8,5 jam terlalu lama bagi saya. Ada banyak hal yang bisa dilakukan dan semua orang akan menemukan sesuatu yang menarik untuk dinikmati. Tidak terlalu ramai dan waktu antrian terpanjang untuk beberapa atraksi adalah 45 menit (yang sebenarnya tidak begitu buruk). Meskipun saya memiliki waktu yang luar biasa, saya merasa sedikit kurang terkesan dengan pilihan wahana dan atraksi. Taman itu sendiri cukup kecil (saya benar-benar berharap ada sesuatu yang megah, bahkan istana utama yang ternyata ditutup juga cukup kecil). Pilihan makanan bagus, beberapa kedai kopi (termasuk Starbucks) dan banyak toko suvenir. Tidak ada masalah dengan toilet karena mereka ada di mana-mana. Secara keseluruhan, itu adalah hari yang menyenangkan dan saya benar-benar menikmatinya.
Dengan peringkat keseluruhan 4/5, ulasan ini menyebutkan kekurangan tempat teduh dan pilihan wahana yang terbatas sebagai kontra, serta makanan dan toko suvenir sebagai pro, di antara hal lainnya.
Dalam artikel ini, kami akan mencoba memberikan instruksi kepada ChatGPT untuk dua tugas pra-pemrosesan:
- Pemodelan topik atau klasifikasi teks untuk mengidentifikasi topik utama yang disebutkan dalam ulasan.
- Analisis sentimen: menganalisis bahasa dalam ulasan untuk menentukan sentimen (positif, negatif, atau netral) berdasarkan topik yang menarik.
Tujuan kami adalah mengubah teks ulasan yang tidak terstruktur menjadi daftar pro dan kontra yang memungkinkan analisis otomatis dan skalabel di masa mendatang. Kami akan membaginya menjadi dua langkah: pertama memberi instruksi kepada ChatGPT untuk mengidentifikasi daftar topik dari subset data, dan kemudian memberi instruksi lagi untuk menciptakan sentimen per topik pada data baru. Instruksi kedua akan kita tautkan dengan daftar topik dari langkah pertama untuk meminimalkan ketidaksesuaian. Di sini, kami dengan sengaja memecah masalah menjadi tugas terpisah untuk meniru skenario dunia nyata, di mana seorang ilmuwan data pertama-tama menganalisis sekumpulan contoh yang lebih kecil untuk mengidentifikasi topik dan, begitu topik tersebut diekstraksi, ditinjau dan diselesaikan, mereka diterapkan pada bagian kedua dari skenario, yang bisa melibatkan berbagai contoh.
Secara khusus, kami ingin mengubah teks ulasan menjadi format output berikut:
Pro: topik1, topik2, …
Kontra: topik3, …
Pertama-tama, mari terhubung ke API ChatGPT. Kode diambil dari kursus ChatGPT Prompt Engineering for Developers!import openai
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv('OPENAI_API_KEY')
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=0, # this is the degree of randomness of the model's output
)
return response.choices[0].message["content"]
Temperature (Suhu) = 0 di sini berarti kami mengabaikan kreativitas dan keragaman.
Sekarang, mari bertanya kepada ChatGPT untuk membuat daftar topik.
text = f"""
Thanks God it wasn t too hot or too humid when I was visiting the park otherwise it would be a big issue (there is not a lot of shade).I have arrived around 10:30am and left at 6pm. Unfortunately I didn t last until evening parade, but 8.5 hours was too much for me.There is plenty to do and everyone will find something interesting for themselves to enjoy.It wasn t extremely busy and the longest time I had to queue for certain attractions was 45 minutes (which is really not that bad).Although I had an amazing time, I felt a bit underwhelmed with choice of rides and attractions. The park itself is quite small (I was really expecting something grand even the main castle which was closed by the way was quite small).The food options are good, few coffee shops (including Starbucks) and plenty of gift shops. There was no issue with toilets as they are everywhere.All together it was a great day out and I really enjoyed it.
"""
prompt = f"""
List topics covered in the text delimited by triple backticks \
into a list of topics
```{text}```
"""
response = get_completion(prompt)
print(response)
Output: Cuaca di taman, Durasi kunjungan, Ragam aktivitas yang tersedia, Waktu tunggu untuk atraksi, Kesimpulan tentang wahana dan atraksi, Ukuran taman, Pilihan makanan dan minuman, Toko suvenir, Ketersediaan toilet.
Ini sangat membantu. Kami akan menggunakan versi yang lebih singkat dari daftar ini ke depan. Kami menggunakan beberapa teknik pemancingan di sini yang layak disebutkan: Memulai dengan instruksi yang jelas dan Menentukan struktur keluaran.
Akhirnya, mari bertanya kepada ChatGPT untuk mengklasifikasikan entri ulasan yang berbeda menggunakan topik-topik ini.
Kali ini, mari bertanya pada Chat untuk mengembalikan keluaran terstruktur yang mencantumkan pro dan kontra:
text = f"""
HK Disneyland is a great compact park. Unfortunately there is quite a bit of maintenance work going on at present so a number of areas are closed off (including the famous castle) If you go midweek, it is not too crowded and certainly no where near as bus as LA Disneyland. We did notice on this visit that prices for food, drinks etc have really gone through the roof so be prepared to pay top dollar for snacks (and avoid the souvenir shops if you can) Regardless, kids will love it.
"""
list_of_topics = ['weather conditions', 'duration of visit', 'available activities', 'crowd levels', 'ride and attraction choices', 'park size', 'food options', 'gift shops', 'restroom availability']
prompt = f"""
You will be provided with text delimited by triple backticks \
and a list of topics in square brackets separated by commas.
Find if any of these topics are mentioned as pros and cons \
List of topics [{','.join(list_of_topics)}]. \
Using listed topics only, if mentioned, reply in the following format:
Pros - list of topics
Cons - list of topics
```{text}```
"""
response = get_completion(prompt)
print(response)
Output:
Pro — ukuran taman, tingkat keramaian
Kontra — pilihan wahana dan atraksi, pilihan makanan, toko suvenir
Tidak buruk. ChatGPT dengan benar mengidentifikasi sentimen seputar ukuran dan kerumunan, serta mengabaikan pemeliharaan dan penutupan yang disebutkan tetapi tidak terdaftar sebagai topik yang menarik. Salah satu teknik yang digunakan di sini untuk mendapatkan jawaban yang dapat diandalkan adalah grounding. Teknik lainnya adalah menentukan struktur keluaran.
Keluaran terstruktur memungkinkan pengolahan otomatis dalam skala besar. Kita dapat menggabungkan daftar pro dan kontra untuk menilai topik berdasarkan frekuensi ulasan negatif untuk membantu bisnis memprioritaskan area perbaikan, misalnya.
Sumber : https://syahroniwahyu.medium.com/