เป็นที่ทราบกันโดยทั่วไปว่าความสำเร็จของบริษัท/ธุรกิจ/ผลิตภัณฑ์ขึ้นอยู่กับลูกค้าโดยตรง ดังนั้นหากลูกค้าของคุณชอบผลิตภัณฑ์ของคุณ นั่นก็คือความสำเร็จของคุณ ถ้าไม่เช่นนั้นคุณจะต้องด้นสดโดยทำการเปลี่ยนแปลงบางอย่าง

คำถาม: คุณจะรู้ได้อย่างไรว่าผลิตภัณฑ์ของคุณประสบความสำเร็จหรือไม่

เพื่อที่คุณจะต้องวิเคราะห์ลูกค้าของคุณและหนึ่งในคุณลักษณะของการวิเคราะห์ลูกค้าของคุณคือการวิเคราะห์ความรู้สึกของพวกเขาที่มีต่อผลิตภัณฑ์เฉพาะ และนี่คือที่มาของการวิเคราะห์ความรู้สึก

เรามาเริ่มกันที่การวิเคราะห์ความเชื่อมั่นคืออะไร?

การวิเคราะห์ความรู้สึกที่เราสามารถพูดได้คือกระบวนการของการคำนวณโดยใช้คอมพิวเตอร์ระบุและจัดหมวดหมู่ความคิดเห็นจากข้อความ และกำหนดว่าทัศนคติของผู้เขียนต่อหัวข้อหรือผลิตภัณฑ์เฉพาะนั้นเป็นเชิงบวก ลบ หรือเป็นกลาง

อาจเป็นไปไม่ได้ในฐานะปัจเจกบุคคลทุกครั้งที่คุณไม่ทำการวิเคราะห์ความรู้สึก แต่คุณมองหาคำติชมเหมือนก่อนซื้อผลิตภัณฑ์หรือดาวน์โหลดแอปบนอุปกรณ์ (โทรศัพท์) ของคุณจาก 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 โซลูชั่น จากผู้เชี่ยวชาญทางเทคนิคที่มีประสบการณ์

หวังว่าบทความนี้จะเป็นประโยชน์ การแบ่งปันคือการเอาใจใส่