【问题标题】:Sentiment Analysis with Imbalanced Dataset in LightGBMLightGBM中不平衡数据集的情感分析
【发布时间】:2017-11-08 19:09:00
【问题描述】:

我正在尝试对 2 个类别(二进制分类)的数据集执行情感分析。数据集关于70% - 30% 严重不平衡。我正在使用LightGBMPython 3.6 来制作模型并预测输出。

我认为我的模型的数据集效果性能不平衡。我得到了大约90% 的准确性,但即使我已经对参数进行了微调,它也不会进一步增加。我不认为这是最大可能的准确度,因为还有其他人的得分比这更好。

我已经用Textacynltk 清理了数据集。我正在使用CountVectorizer 对文本进行编码。

我已经尝试up-sampling 数据集,但它导致模型很差(我没有调整那个模型)

我曾尝试使用LightGBMis_unbalance 参数,但它并没有给我更好的模型。

有什么方法可以处理这种不平衡的数据集吗?我怎样才能进一步改进我的模型。?我应该尝试下采样吗?或者它是最大可能的精度。?我怎么能确定呢?

【问题讨论】:

    标签: python-3.x machine-learning nlp sentiment-analysis lightgbm


    【解决方案1】:

    是否有任何方法可以处理此类数据集 这么不平衡?

    您的数据集几乎是平衡的70/30 接近相等。使用 gratient boosted 树,可以在更多不平衡的数据上进行训练,例如信用评分、欺诈检测和医疗诊断,其中阳性百分比可能低于 1%。

    您的问题可能不在于类别不平衡,而在于您使用了错误的指标。当你计算准确率时,你隐含地对假阴性和假阳性的模型进行同样的惩罚。但真的是这样吗?当类不平衡,或者只是从业务或物理角度无法比较时,其他指标,如精度、召回或 ROC AUC 可能比准确性更有用。对于您的问题,我会推荐 ROC AUC。

    也许,您真正想要的是概率分类。如果你想保持二进制,可以使用用于分类的阈值。

    如何进一步改进我的模型?

    因为是文本分析,我建议更准确的数据清洗。一些开始的方向:

    • 您是否尝试过不同的词形还原/词干化机制?
    • 您如何预处理特殊实体,例如数字、笑脸、缩写、公司名称等?
    • 您是否通过在模型中与单词一起包含二元组甚至三元组来利用搭配?
    • 你是如何处理否定的?一个“不”可能会极大地改变意思,而CountVectorizer 抓住了这一点。
    • 您是否尝试从单词中提取语义,例如匹配同义词或使用 word2vec 或 fastText 等预训练模型中的词嵌入?

    也许基于树的模型不是最佳选择。以我自己的经验,最好的情感分析是通过逻辑回归或浅层神经网络等线性模型执行的。但是您应该对它们进行大量正则化,并且应该明智地扩展您的功能,例如使用 TF-IDF。

    如果您的数据集很大,您可以尝试深度学习并在您的数据上训练 RNN。 LSTM 通常是解决许多文本相关问题的最佳模型。

    我应该尝试下采样吗?

    不,您应该永远不要缩减样本,除非您的机器上有太多数据需要处理。下采样会在您的数据中产生偏差。

    如果您真的想提高分类器中少数类的相对重要性,您可以重新加权观察结果。据我所知,在LightGBM 中,您可以使用scale_pos_weight 参数更改类权重。

    或者它是最大可能的精度。?我怎么能确定呢?

    你永远不会知道。但是你可以做一个实验:让几个人给你的测试样本贴上标签,然后相互比较。如果只有 90% 的标签重合,那么即使是人类也无法可靠地对其余 10% 的样本进行分类,所以你已经达到了最大值。

    同样,不要过分关注准确性。也许,对于您的业务应用程序,如果您将一些正面评论错误地标记为负面,只要成功识别出所有负面评论即可。

    【讨论】:

    • 感谢您的信息。我已经用Textacy 清理了数字、笑脸等数据,我还尝试了不同的StemmersLemmatisations
    • 我已尝试将auc 作为指标,但没有任何改进。我没有使用 word2vec,因为我不能在我的机器中使用模型..
    • 我曾尝试用Keras 训练LSTM,但结果并不乐观。
    • 您能否解释或链接我如何使用bigrams 与数据。?
    • @SreeramTP,合并二元组最简单的方法是使用CountVectorizer.ngram_range
    【解决方案2】:

    当数据不平衡时不计算准确度,您应该计算召回率、精度和 F1 分数等指标。你可以使用 sklearn 库 用于计算此类指标,您可以尝试使用不同的“加权”或“微”值对数据进行平均。 请检查以下内容: http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_recall_fscore_support.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 2019-11-05
      • 2018-03-27
      • 1970-01-01
      • 2021-01-14
      • 2015-01-28
      相关资源
      最近更新 更多