【问题标题】:Binary vs. multi-class text classification二进制与多类文本分类
【发布时间】:2021-12-28 08:30:23
【问题描述】:

我有一个包含如下社交媒体帖子的数据集,但它是波斯语的,我找不到现成的 R/Python 情绪分析包。

post/tweet
"we are tired of this regime and need to make a change happen now"

理想情况下,我想将每个陈述分类为具有负面、正面或中性情绪。因此,我创建了一个小字典,将单词分为否定词或肯定词。

library(tidyverse)
library(stringr)
library(readxl)
#install.packages("tidyverse")
#install.packages("stringr")
#install.packages("readxl")

分为三个类别:正面、负面和中性

Raw_data_on_posts %>% mutate(p_count = str_count(post, str_c(Dictionary$positive, collapse = '|')), 
                 n_count = str_count(post, str_c(Dictionary$negative, collapse = '|'))) %>% 
           mutate(label = case_when(p_count > n_count ~ 'positive',
                                    p_count < n_count ~ 'negative',
                                    TRUE ~ 'neutral')) %>% select(post, label)

尽管根据我对社交媒体帖子的阅读,我的大多数声明都是中立的,但要么支持伊朗政权,要么反对伊朗政权。具体来说,我认为这是因为它将我既不分类为负面也不分类为中性的词分类为中性词。但是是否可以只比较一个陈述是否有更多的否定词或肯定词?

post/tweet                                 sentiment 
"we are tired of this regime               neutral 
and need to make a change happen now"

我想知道上述问题是否是由于 R 无法识别/阅读波斯语单词和字母造成的?我之所以问是因为我在上面运行了相同的代码来用下面的英文单词对其进行测试,并且效果很好:

post
<chr>
label
<chr>
bad and good       neutral          
really good        positive         
in the middle      neutral          
bad                negative

【问题讨论】:

    标签: r nlp sentiment-analysis


    【解决方案1】:

    您的语法似乎没有任何点可以解释中性词,因此它们不太可能产生影响。标记没有任何单词注册为正面或负面的帖子可能会揭示您的数据或正面/负面类别的问题。查看对代码的此编辑是否会抛出任何无法识别的数据:

    mutate(label = case_when(p_count > n_count ~ 'positive',
                                        p_count < n_count ~ 'negative',
                                         n_count==0 & p_count== 0 ~ 'Not recognised'
                                        TRUE ~ 'neutral'))
    

    【讨论】:

    • 谢谢,代码运行良好,但没有什么不同,因为所有帖子仍然是中立的。只比较一个陈述是否有更多的否定词或肯定词,从而将其分类是否有意义?例如:5 个正面词和 8 个负面词的帖子将是负面的。
    • 那将是一个好主意,看看你的语法,理论上应该发生这种情况,只有当两者都不大于另一个时才应用中性。尝试添加:n_count== p_count== 0 ~ 'Tie' 以查看是否有很多数据点根据您识别的单词真正相等,因为这可能会导致您正在使用的单词列表出现问题.
    • 谢谢,运行了这个,所有帖子仍然被归类为中立=:{r} Raw_data_on_posts %&gt;% mutate(p_count = str_count(post, str_c(Dictionary$positive, collapse = '|')), n_count = str_count(post, str_c(Dictionary$negative, collapse = '|'))) %&gt;% mutate(label = case_when(p_count &gt; n_count ~ 'positive', p_count &lt; n_count ~ 'negative', n_count= p_count== 0 ~ 'Tie', TRUE ~ 'neutral')) %&gt;% select(post, label)
    • 如果一切仍然是中性的,我认为这是一个语法问题,因为应该为标签列分配了一个值。您的 p/n 列中的值是否与您认为的一致?
    • 这可能是 R 阅读波斯语帖子的方式,它也可能是您使用的数据或单词列表的问题,检查它们的格式是否相同。
    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 2017-04-08
    • 2018-05-30
    • 1970-01-01
    • 2018-09-29
    • 2019-10-19
    • 2020-09-09
    • 2018-07-28
    相关资源
    最近更新 更多