簡體   English   中英

使用朴素貝葉斯分類的Twitter情感分析僅返回“中性”標簽

[英]Twitter Sentiment analysis with Naive Bayes Classify only returning 'neutral' label

我按照這里的教程: https//towardsdatascience.com/creating-the-twitter-sentiment-analysis-program-in-python-with-naive-bayes-classification-672e5589a7ed創建了一個Twitter情緒分析器,它使用朴素的貝葉斯來自nltk庫的分類器作為將推文分類為正面,負面或中性的方式,但它給出的標簽只是中性或不相關的。 我已將我的代碼包含在下面,因為我對任何機器學習都不是很有經驗,所以我很感激任何幫助。

我嘗試使用不同的推文進行分類,即使在指定像'happy'這樣的搜索關鍵字時,它仍然會返回'中性'。 我不喜歡

import nltk

def buildvocab(processedtrainingdata):
    all_words = []

    for (words, sentiment) in processedtrainingdata:
        all_words.extend(words)

    wordlist = nltk.FreqDist(all_words)
    word_features = wordlist.keys()

    return word_features

def extract_features(tweet):
    tweet_words = set(tweet)
    features = {}
    for word in word_features:
        features['contains(%s)' % word] = (word in tweet_words) #creates json key containing word x, its loc.
        # Every key has a T/F according - true for present , false for not
    return features 

# Building the feature vector

word_features = buildvocab(processedtrainingdata)
training_features = nltk.classify.apply_features(extract_features, processedtrainingdata)
# apply features does the actual extraction

Nbayes_result_labels = [Nbayes.classify(extract_features(tweet[0])) for tweet in processedtestset]

# get the majority vote [?]
if Nbayes_result_labels.count('positive') > Nbayes_result_labels.count('negative'):
    print('Positive')
    print(str(100*Nbayes_result_labels.count('positive')/len(Nbayes_result_labels)))
elif Nbayes_result_labels.count('negative') > Nbayes_result_labels.count('positive'):
    print(str(100*Nbayes_result_labels.count('negative')/len(Nbayes_result_labels)))
    print('Negative sentiment')
else:
    print('Neutral')


#the output is always something like this: 
print(Nbayes_result_labels)
['neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'irrelevant', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral', 'neutral']

您的數據集非常不平衡。 你自己在其中一條評論中提到過,你有550條正面和550條負面標記的推文,但4000條中性,這就是為什么它總是偏向大多數人。 如果可能,您應該為所有課程提供相同數量的話語。 您還需要了解評估指標,然后您會發現您的召回很可能並不好。 理想的模型應該在所有評估指標上都很好。 為了避免過度擬合,有些人也會添加第四個“其他”類,但現在你可以跳過它。

您可以采取以下措施來提高模型的性能(添加更多數據),通過添加可能的類似話語或對大多數類進行欠采樣或使用兩者的組合來對少數類進行過采樣。 您可以在線閱讀有關過采樣,欠采樣的信息。

在這個新的數據集中,盡可能以1:1:1的比例嘗試所有類別的話語。 最后嘗試其他算法以及通過網格搜索,隨機搜索或tpot調整的超參數。

編輯:在你的情況下,不相關的是'其他'類,所以你現在有4個類試着讓每個類的比例為1:1:1:1。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM