Sudah menjadi rahasia umum bahwa kesuksesan suatu perusahaan/bisnis/produk tergantung langsung pada pelanggannya, jadi jika pelanggan Anda menyukai produk Anda, itu adalah kesuksesan Anda. Jika tidak maka Anda perlu berimprovisasi dengan melakukan beberapa perubahan.

Pertanyaan: Bagaimana Anda mengetahui apakah produk Anda berhasil atau tidak?

Nah untuk itu Anda perlu menganalisis pelanggan Anda dan salah satu atribut menganalisis pelanggan Anda adalah menganalisis sentimen mereka terhadap produk tertentu dan di sinilah analisis sentimen berperan.

Jadi, mari kita mulai dengan apa itu analisis sentimen?

Analisis Sentimen dapat dikatakan sebagai proses mengidentifikasi dan mengkategorikan opini dari sebuah teks secara komputasi, dan menentukan apakah sikap penulis terhadap topik atau produk tertentu adalah positif, negatif, atau netral.

Mungkin saja bukan sebagai individu setiap kali Anda tidak melakukan analisis sentimen tetapi Anda mencari umpan balik seperti sebelum membeli produk atau mengunduh aplikasi di perangkat (ponsel) Anda baik dari App Store atau Play Store Anda. dapat mencari masukan tentang apa yang dikatakan pelanggan atau pengguna lain tentang produk tersebut apakah baik atau buruk dan Anda menganalisisnya secara manual. Pertimbangkan di tingkat perusahaan, bagaimana mereka menganalisis apa yang dikatakan pelanggan tentang produk tertentu, mereka memang memiliki lebih dari jutaan pelanggan. Di situlah perusahaan perlu melakukan analisis sentimen untuk mengetahui apakah produknya laris manis di pasaran atau tidak.

Apa itu NLTK?

NLTK adalah singkatan dari Natural Language Toolkit, Ini memberi kita berbagai perpustakaan pemrosesan teks dengan banyak kumpulan data pengujian. Hari ini Anda akan mempelajari cara memproses teks untuk analisis sentimen menggunakan NLTK. Ada juga perpustakaan lain seperti CoreNLP, spaCy, PyNLPI, dan Polyglot. NLTK dan spaCy paling banyak digunakan. Spacy bekerja dengan baik dengan informasi besar dan untuk NLP tingkat lanjut.

Kami akan menggunakan NLTK untuk melakukan analisis sentimen untuk menilai apakah postingan Twitter tentang Covid-19 atau tidak. Anda dapat membaca lebih lanjut tentang kumpulan data yang akan kami gunakan di sini

Langkah pertama adalah menginstal NLTK di lingkungan kerja Anda

pip install nltk

Memuat Data

Dataset kami memiliki tiga fitur ID, teks, dan target dimana ID hanya mengindeks setiap tweet, teks adalah tweet yang perlu diklasifikasikan dan target adalah label tweet dimana 1 berarti tweet dengan konten Covid dan 0 tweet tanpa Covid isi.

import pandas as pd
tweets =  pd.read_csv("../data/tweets.csv")
tweets.head()

keluaran pratinjau data

Ikhtisar tweet

Mari kita coba memfilter beberapa tweet yang satu berisi konten Covid dan satu lagi berisi konten non-Covid.

# %tweet with covid contents
tweets[tweets['target'] == 1 ].loc[8,'text']

# %tweet with non covid contents
tweets[tweets['target'] == 1].loc[1,'text']

Pembersihan Data

Prosesnya biasanya bertahap, terlepas dari bahasa apa sentimen tersebut berasal, hanya beberapa perubahan yang dapat dilakukan agar sesuai dengan persyaratan analisis sentimen, namun ide untuk membersihkan data teks tetap sama. Kami telah memuat kumpulan data, sekarang saatnya membersihkan teks-teks itu.

Menghapus Tanda Baca

Tanda baca tidak ada artinya Saat kita melakukan analisis sentimen, kita harus menghapusnya dari string agar sentimen tetap bersih. Kita dapat melakukannya dengan menggunakan fungsi remove_punctuation pada cuplikan di bawah.

# %function to remove punctuation using string library
def remove_punctuation(text):
    '''a function for removing punctuation'''
    translator = str.maketrans('', '', string.punctuation)
    return text.translate(translator)
tweets['text'] = tweets['text'].apply(remove_punctuation)

Mengonversi Teks menjadi Huruf Kecil

Dalam analisis sentimen, kita harus mempertimbangkan untuk mengubah teks menjadi huruf kecil karena ini dapat menjadi masalah karena beberapa alasan. Bayangkan dunia “kita”. Ini bisa berupa kata ganti yang mewakili “kita” dalam kalimat atau negara “USA”. Kita dapat melakukannya dengan menggunakan potongan kode di bawah ini.

tweets['text'] = tweets['text'].apply(lambda x: " ".join(x.lower()  for x in x.split()))

Menghapus kata-kata Berhenti

Sebuah Teks mungkin berisi kata-kata seperti 'adalah', 'dulu', 'kapan' dll. Kita dapat menghapus kata-kata penghenti dari teks. Tidak ada daftar universal kata-kata berhenti di NLP, namun perpustakaan NLTK menyediakan daftar kata-kata berhenti, jadi di sini kita akan menggunakan cuplikan di bawah ini untuk menghapus semua kata-kata berhenti dari teks.

# import nltk
import nltk
# download stopwords using nltk
nltk.download('stopwords')
# remove english stopwords
allstopwords = nltk.corpus.stopwords.words("english")
tweets['text'] = tweets['text'].apply(lambda x: " ".join(i for i in x.split() if i not in allstopwords))

Menghapus Nomor

Angka atau kata yang digabungkan dengan angka sangat sulit untuk diproses, Anda bisa menemukan kalimat dengan kata seperti covid-19 , software2020 atau plan7. Agar hal ini dapat terjadi, kita harus menghilangkan kata-kata semacam ini yang menjadi masalah bagi mesin untuk memahaminya. Untuk kasus kami, berikut adalah sepotong kode untuk melakukan tugas seperti itu.

def remove_numbers(text):
    '''a function to remove numbers'''
    txt = re.sub(r'\b\d+(?:\.\d+)?\s+', '', text)
    return txt
tweets['text'] = tweets['text'].apply(remove_numbers)

Tokenisasi

Proses memecah teks menjadi unit-unit yang lebih kecil disebut token. Jika kita memiliki sebuah kalimat, idenya adalah untuk memisahkan setiap kata dan membangun kosa kata sedemikian rupa sehingga kita dapat merepresentasikan semua kata secara unik dalam sebuah daftar. Angka, kata, dll. semuanya termasuk dalam token. NLTK memiliki metode berbeda untuk melakukan tugas tersebut. Untuk kasus kami, kami akan menggunakan sent_tokenize untuk melakukan tokenisasi

nltk.download('punkt')
from nltk.tokenize import sent_tokenize
tweets['text'] = sent_tokenize(tweets['text'])

Pembuatan Cerita dan Visualisasi dari Tweet

Lihatlah visualisasi untuk menjawab beberapa pertanyaan atau menceritakan kisah seperti itu

  • Apa kata yang paling umum di seluruh kumpulan data?
  • Apa kata yang paling umum dalam kumpulan data untuk setiap kelas?
  • Tren manakah yang terkait dengan salah satu sentimen tersebut? Apakah hal tersebut sesuai dengan sentimen yang ada?

Kami akan menggunakan cloud kata untuk memvisualisasikan tweet kami

# create text from all tweets
all_words = ' '.join([text for text in tweets['text']])
wordcloud = WordCloud(width=900, height=500, random_state=21, max_font_size=110).generate(all_words)
plt.figure(figsize=(15, 7))
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis('off')
plt.show()

Visualisasi cloud kata untuk tweet

Dari kiri kata cloud visualisasi seluruh tweet, di tengah visualisasi tweet tentang Covid, dan terakhir (kanan) visualisasi tweet yang isinya non-Covid.

Ekstraksi Fitur dan Klasifikasi

Di sini kita akan mengekstrak tweet dan membaginya menjadi dua kelompok, kelompok pelatihan dan kelompok pengujian di mana kelompok pelatihan akan digunakan untuk melatih model sentimen kita, dan kelompok pengujian untuk memvalidasi kinerja model kita, tugas pemisahan akan dilakukan dengan menggunakan perpustakaan sklearn python

kita akan menggunakan metode NLTK untuk melakukan ekstraksi fitur

# Extracting word features
def get_words_in_tweets(tweets):
    all = []
    for (words, target) in tweets:
        all.extend(words)
    return all
def get_word_features(wordlist):
    wordlist = nltk.FreqDist(wordlist)
    features = wordlist.keys()
    return features
w_features = get_word_features(get_words_in_tweets(tweets))
def extract_features(document):
    document_words = set(document)
    features = {}
    for word in w_features:
        features['containts(%s)' % word] = (word in document_words)

Lalu, Mari gunakan NLTK Naive Bayes Classifier untuk mengklasifikasikan fitur kata tweet yang diekstraksi.

from nltk.classify import SklearnClassifier
training_set = nltk.classify.apply_features(extract_features,tweets)
classifier = nltk.NaiveBayesClassifier.train(training_set)

Langkah terakhir adalah mengevaluasi seberapa jauh model terlatih kami dapat melakukan klasifikasi sentimen dengan tweet yang tidak terlihat.

noncovid_cnt = 0
covid_cnt = 0
for obj in test_nocovid:
    res =  classifier.classify(extract_features(obj.split()))
    if(res == 0):
        noncovid_cnt = noncovid_cnt + 1
for obj in test_covid:
    res =  classifier.classify(extract_features(obj.split()))
    if(res == 1):
        covid_cnt = covid_cnt + 1
print('[Non Covid]: %s/%s '  % (len(test_nocovid),noncovid_cnt))
print('[Covid]: %s/%s '  % (len(test_covid),covid_cnt))

Model akhir dengan NLTK mampu memprediksi pengumpulan 530 tweet dengan konten Non-Covid dari 581 atau setara dengan 91%, dan 410 tweet dengan konten Covid dari 477 atau setara dengan 85%.

Bagus sekali, sekarang Anda sudah familiar dengan NLTK yang memungkinkan Anda memproses teks dan menganalisis teks untuk mendapatkan informasi tertentu, Anda dapat menyelidiki lebih lanjut tentang cara meningkatkan model Anda, dan Anda juga dapat memilih untuk memilih pengklasifikasi lain untuk dibandingkan dengan Naive Bayes.

Terima kasih, Anda dapat mengakses kode lengkap di sini

Hubungan Antara Neurotech dan Natural Language Processing (NLP)

Pemrosesan Bahasa Alami adalah alat yang ampuh ketika Anda memecahkan tantangan bisnis, terkait dengan transformasi digital perusahaan dan startup. Sarufi dan Neurotech menawarkan solusi berstandar tinggi terkait AI percakapan (chatbots). Tingkatkan pengalaman bisnis Anda hari ini dengan solusi NLP dari keahlian teknis berpengalaman.

Semoga artikel ini bermanfaat, berbagi itu peduli.