【问题标题】:What are the best Pre-Processing techniques for Sentiment Analysis.?情感分析的最佳预处理技术是什么?
【发布时间】:2018-04-12 22:09:43
【问题描述】:

我正在尝试将评论数据集分为两类,即 A 类和 B 类。我正在使用 LightGBM 进行分类。

我已经多次更改分类器的参数,但我无法获得巨大的结果差异。

我认为问题在于预处理步骤。我定义了一个如下所示的函数来处理预处理。我使用了Stemming 并删除了stopwords。我不知道我错过了什么。我试过LancasterStemmerPorterStemmer

stops = set(stopwords.words("english"))
def cleanData(text, lowercase = False, remove_stops = False, stemming = False, lemm = False):
    txt = str(text)
    txt = re.sub(r'[^A-Za-z0-9\s]',r'',txt)
    txt = re.sub(r'\n',r' ',txt)

    if lowercase:
        txt = " ".join([w.lower() for w in txt.split()])

    if remove_stops:
        txt = " ".join([w for w in txt.split() if w not in stops])

    if stemming:
        st = PorterStemmer()
        txt = " ".join([st.stem(w) for w in txt.split()])

    if lemm:
        wordnet_lemmatizer = WordNetLemmatizer()
        txt = " ".join([wordnet_lemmatizer.lemmatize(w) for w in txt.split()])
    return txt

是否需要进行更多的预处理步骤才能获得更高的准确性?

数据集的网址:Dataset

编辑:

我使用的参数如下所述。

params = {'task': 'train',
    'boosting_type': 'gbdt',
    'objective': 'binary',
    'metric': 'binary_logloss',
    'learning_rate': 0.01, 
    'max_depth': 22, 
    'num_leaves': 78,
    'feature_fraction': 0.1, 
    'bagging_fraction': 0.4, 
    'bagging_freq': 1}

我已经更改了depthnum_leaves 参数以及其他参数。但是准确率有点卡在某个水平..

【问题讨论】:

  • 您的停用词列表中是否有任何带有负面含义的术语(例如“not”)?
  • 你确定这是关于预处理的,我觉得没问题吗?你用多少个词来构建你的输入向量,1 个词向量,2 个词向量,3...,?什么是数据集和标签?如果数据集是公开的,您是否将您的结果与其他尝试进行了比较?
  • 参加比赛。数据集是公开的。我将使用数据集的 URL 编辑问题。就目前最好结果的准确性而言,我的结果大约低了 2%。
  • 我认为它与预处理有关。我已经运行了几乎所有的参数组合。!!
  • 现在我尝试了WordNetLemmatizer,准确率提高了1%。!!我会再次尝试调参,让你知道结果!!

标签: machine-learning nlp sentiment-analysis lightgbm


【解决方案1】:

有几点需要考虑。首先,您的训练集不平衡 - 类分布约为 70%/30%。你需要在训练中考虑这个事实。您正在使用哪些类型的功能?使用正确的功能集可以提高您的性能。

【讨论】:

  • 是的,训练数据不平衡。我使用LightGBM 进行分类。我将发布编辑中使用的参数。!!
  • 关于如何处理不平衡的任何建议?
  • 您可以尝试 SMOTE 或单面采样。
猜你喜欢
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2013-03-02
相关资源
最近更新 更多