เป็นที่ทราบกันโดยทั่วไปว่าความสำเร็จของบริษัท/ธุรกิจ/ผลิตภัณฑ์ขึ้นอยู่กับลูกค้าโดยตรง ดังนั้นหากลูกค้าของคุณชอบผลิตภัณฑ์ของคุณ นั่นก็คือความสำเร็จของคุณ ถ้าไม่เช่นนั้นคุณจะต้องด้นสดโดยทำการเปลี่ยนแปลงบางอย่าง
คำถาม: คุณจะรู้ได้อย่างไรว่าผลิตภัณฑ์ของคุณประสบความสำเร็จหรือไม่
เพื่อที่คุณจะต้องวิเคราะห์ลูกค้าของคุณและหนึ่งในคุณลักษณะของการวิเคราะห์ลูกค้าของคุณคือการวิเคราะห์ความรู้สึกของพวกเขาที่มีต่อผลิตภัณฑ์เฉพาะ และนี่คือที่มาของการวิเคราะห์ความรู้สึก
เรามาเริ่มกันที่การวิเคราะห์ความเชื่อมั่นคืออะไร?
การวิเคราะห์ความรู้สึกที่เราสามารถพูดได้คือกระบวนการของการคำนวณโดยใช้คอมพิวเตอร์ระบุและจัดหมวดหมู่ความคิดเห็นจากข้อความ และกำหนดว่าทัศนคติของผู้เขียนต่อหัวข้อหรือผลิตภัณฑ์เฉพาะนั้นเป็นเชิงบวก ลบ หรือเป็นกลาง
อาจเป็นไปไม่ได้ในฐานะปัจเจกบุคคลทุกครั้งที่คุณไม่ทำการวิเคราะห์ความรู้สึก แต่คุณมองหาคำติชมเหมือนก่อนซื้อผลิตภัณฑ์หรือดาวน์โหลดแอปบนอุปกรณ์ (โทรศัพท์) ของคุณจาก App Store หรือ Play Store สามารถค้นหาคำติชมว่าลูกค้าหรือผู้ใช้รายอื่นพูดถึงผลิตภัณฑ์นั้นว่าดีหรือไม่ดีและคุณวิเคราะห์ด้วยตนเอง ลองพิจารณาในระดับบริษัทว่าพวกเขาวิเคราะห์สิ่งที่ลูกค้าพูดถึงเกี่ยวกับผลิตภัณฑ์นั้นๆ ได้อย่างไร พวกเขามีลูกค้ามากกว่าล้านคน นั่นคือจุดที่บริษัทต่างๆ ต้องทำการวิเคราะห์ความรู้สึกเพื่อดูว่าผลิตภัณฑ์ของตนขายดีในตลาดหรือไม่
NLTK คืออะไร?
NLTK ย่อมาจาก Natural Language Toolkit ซึ่งให้ไลบรารีการประมวลผลข้อความที่หลากหลายพร้อมชุดข้อมูลทดสอบจำนวนมาก วันนี้คุณจะได้เรียนรู้วิธีการประมวลผลข้อความสำหรับการวิเคราะห์ความรู้สึกโดยใช้ NLTK มีไลบรารีอื่น ๆ เช่น CoreNLP, spaCy, PyNLPI และ Polyglot NLTK และ spaCy ถูกใช้กันอย่างแพร่หลาย Spacy ทำงานได้ดีกับข้อมูลขนาดใหญ่และสำหรับ NLP ขั้นสูง
เราจะใช้ NLTK เพื่อทำการวิเคราะห์ความรู้สึกเพื่อประเมินว่าโพสต์ Twitter เกี่ยวข้องกับ Covid-19 หรือไม่ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับชุดข้อมูลที่เราจะใช้ได้ ที่นี่
ขั้นตอนแรกคือการติดตั้ง NLTK ในสภาพแวดล้อมการทำงานของคุณ
pip install nltk
กำลังโหลดข้อมูล
ชุดข้อมูลของเรามี ID คุณสมบัติ ข้อความ และเป้าหมายสามประการ โดยที่ ID เพียงจัดทำดัชนีแต่ละทวีต ข้อความคือทวีตที่จำเป็นในการจัดประเภท และเป้าหมายคือป้ายกำกับของทวีต โดย 1 หมายถึงทวีตที่มีเนื้อหาเกี่ยวกับ Covid และ 0 ทวีตที่ไม่มี Covid เนื้อหา
import pandas as pd
tweets = pd.read_csv("../data/tweets.csv")
tweets.head()
เอาต์พุตแสดงตัวอย่างข้อมูล
ภาพรวมของทวีต
มาลองกรองทวีตที่มีเนื้อหาเกี่ยวกับ Covid และอีกรายการที่มีเนื้อหาที่ไม่ใช่ Covid
# %tweet with covid contents
tweets[tweets['target'] == 1 ].loc[8,'text']
# %tweet with non covid contents
tweets[tweets['target'] == 1].loc[1,'text']
การทำความสะอาดข้อมูล
โดยทั่วไปกระบวนการนี้จะเป็นขั้นตอนที่ชาญฉลาด ไม่ว่าความรู้สึกเหล่านั้นจะมาจากภาษาใดก็ตาม มีเพียงการเปลี่ยนแปลงบางอย่างเท่านั้นที่สามารถทำได้เพื่อให้เหมาะสมกับข้อกำหนดของการวิเคราะห์ความรู้สึก แต่แนวคิดในการล้างข้อมูลข้อความก็เหมือนกัน เราได้โหลดชุดข้อมูลแล้ว ถึงเวลาล้างข้อความเหล่านั้นแล้ว
การลบเครื่องหมายวรรคตอน
เครื่องหมายวรรคตอนไม่มีความหมายเมื่อเราวิเคราะห์ความรู้สึก เราควรลบมันออกจากสตริงเพื่อให้คงไว้ซึ่งความรู้สึกที่สะอาด เราสามารถทำได้โดยใช้ฟังก์ชัน remove_punctuation
ในตัวอย่างด้านล่าง
# %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)
การแปลงข้อความเป็นตัวพิมพ์เล็ก
ในการวิเคราะห์ความรู้สึก เราควรพิจารณาการแปลงข้อความเป็นตัวพิมพ์เล็ก เนื่องจากอาจเป็นปัญหาได้ด้วยเหตุผลสองประการ ลองนึกภาพโลก “พวกเรา” อาจเป็นสรรพนามที่แสดงถึง “เรา” ในประโยคหรือประเทศ “สหรัฐอเมริกา” เราสามารถทำได้โดยใช้โค้ดด้านล่างนี้
tweets['text'] = tweets['text'].apply(lambda x: " ".join(x.lower() for x in x.split()))
การลบคำหยุด
ข้อความอาจมีคำเช่น 'is', 'was', 'when' เป็นต้น เราสามารถลบคำหยุดออกจากข้อความได้ ไม่มีรายการคำหยุดแบบสากลใน NLP อย่างไรก็ตาม ไลบรารี NLTK จัดเตรียมรายการคำหยุด ดังนั้นเราจะใช้ตัวอย่างด้านล่างเพื่อลบคำหยุดทั้งหมดออกจากข้อความ
# 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))
การลบหมายเลข
ตัวเลขหรือคำที่รวมกับตัวเลขนั้นประมวลผลได้ยาก คุณสามารถค้นหาประโยคที่มีคำเช่น covid-19
, software2020
หรือ plan7
ได้ สำหรับสิ่งนี้ เราควรลบคำประเภทนี้ออกไป เป็นปัญหาให้เครื่องเข้าใจ สำหรับกรณีของเรา นี่คือโค้ดส่วนหนึ่งสำหรับดำเนินการดังกล่าว
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)
การแปลงโทเค็น
กระบวนการแบ่งข้อความออกเป็นหน่วยเล็กๆ เรียกว่าโทเค็น หากเรามีประโยค แนวคิดก็คือการแยกแต่ละคำและสร้างคำศัพท์เพื่อให้เราสามารถแทนคำทั้งหมดในรายการได้โดยไม่ซ้ำกัน ตัวเลข คำ ฯลฯ ล้วนอยู่ภายใต้โทเค็น NLTK มีวิธีการที่แตกต่างกันในการดำเนินงานดังกล่าว ในกรณีของเรา เราจะใช้ sent_tokenize
เพื่อดำเนินการโทเค็น
nltk.download('punkt')
from nltk.tokenize import sent_tokenize
tweets['text'] = sent_tokenize(tweets['text'])
การสร้างเรื่องราวและการแสดงภาพจากทวีต
ดูการแสดงภาพเพื่อตอบคำถามหรือบอกเล่าเรื่องราวต่างๆ เช่น
- คำใดที่พบบ่อยที่สุดในชุดข้อมูลทั้งหมด?
- คำใดที่พบบ่อยที่สุดในชุดข้อมูลสำหรับแต่ละคลาสตามลำดับคืออะไร?
- แนวโน้มใดที่เกี่ยวข้องกับความรู้สึกอย่างใดอย่างหนึ่ง? สอดคล้องกับความรู้สึกหรือไม่?
เราจะใช้เวิร์ดคลาวด์เพื่อแสดงภาพทวีตของเรา
# 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()
การสร้างภาพ Word cloud สำหรับทวีต
จากด้านซ้าย การแสดงภาพทวีตทั้งหมดบนคลาวด์ ตรงกลางการแสดงภาพทวีตเกี่ยวกับโควิด และสุดท้าย (ด้านขวา) การแสดงภาพทวีตที่มีเนื้อหาที่ไม่ใช่โควิด
การแยกคุณลักษณะและการจำแนกประเภท
ที่นี่เราจะแยกทวีตและแบ่งออกเป็นสองกลุ่ม ได้แก่ กลุ่มฝึกอบรมและกลุ่มทดสอบที่จะใช้กลุ่มฝึกอบรมเพื่อฝึกอบรมแบบจำลองความรู้สึกของเรา และกลุ่มทดสอบเพื่อตรวจสอบประสิทธิภาพของแบบจำลองของเรา งานแยกจะ ทำได้โดยใช้ไลบรารี sklearn
python
เราจะใช้วิธีการ NLTK เพื่อทำการแยกคุณสมบัติ
# 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)
จากนั้น ลองใช้ NLTK Naive Bayes Classifier เพื่อจัดประเภทคุณลักษณะคำทวีตที่แยกออกมา
from nltk.classify import SklearnClassifier
training_set = nltk.classify.apply_features(extract_features,tweets) classifier = nltk.NaiveBayesClassifier.train(training_set)
ขั้นตอนสุดท้ายคือการประเมินว่าโมเดลที่ได้รับการฝึกของเราสามารถจัดประเภทความคิดเห็นกับทวีตที่มองไม่เห็นได้ไกลแค่ไหน
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))
โมเดลสุดท้ายที่มี NLTK สามารถทำนายการรวบรวมทวีต 530 รายการที่มีเนื้อหาที่ไม่ใช่โควิดจาก 581 รายการ คิดเป็น 91% และทวีต 410 รายการที่มีเนื้อหาเกี่ยวกับโควิดจาก 477 คิดเป็น 85%
ทำได้ดีมาก ตอนนี้คุณคุ้นเคยกับ NLTK ซึ่งช่วยให้คุณประมวลผลข้อความและวิเคราะห์ข้อความเพื่อให้ได้ข้อมูลเฉพาะแล้ว คุณสามารถตรวจสอบเพิ่มเติมเกี่ยวกับวิธีปรับปรุงแบบจำลองของคุณ และคุณสามารถเลือกเลือกตัวแยกประเภทอื่นเพื่อเปรียบเทียบกับ Naive Bayes ได้
ขอบคุณ คุณสามารถเข้าถึงรหัสเต็มได้ ที่นี่
ความสัมพันธ์ระหว่างเทคโนโลยีประสาทและการประมวลผลภาษาธรรมชาติ (NLP)
การประมวลผลภาษาธรรมชาติเป็นเครื่องมืออันทรงพลังเมื่อคุณแก้ปัญหาความท้าทายทางธุรกิจ โดยเชื่อมโยงกับการเปลี่ยนแปลงทางดิจิทัลของบริษัทและสตาร์ทอัพ Sarufi และ Neurotech นำเสนอโซลูชั่นมาตรฐานสูงเกี่ยวกับการสนทนา AI (แชทบอท) ปรับปรุงประสบการณ์ทางธุรกิจของคุณวันนี้ด้วย NLP โซลูชั่น จากผู้เชี่ยวชาญทางเทคนิคที่มีประสบการณ์
หวังว่าบทความนี้จะเป็นประโยชน์ การแบ่งปันคือการเอาใจใส่