【问题标题】:How to improve my multiclass text-classification on German text?如何改进我对德语文本的多类文本分类?
【发布时间】:2021-03-16 12:45:01
【问题描述】:

我是 NLP 的新手,这让我有点困惑。 我正在尝试在我的数据集上使用 SVC 进行文本分类。 我有 6 个类的不平衡数据集。 文本是健康、体育、文化、经济、科学和网络类别的新闻。 我正在使用 TF-IDF 进行矢量化。

预处理步骤:lower-case所有文本并删除stop-words。因为我的文字是德语,所以我没有使用lemmatization

我的第一次尝试:

from sklearn.model_selection import train_test_split

train, test = train_test_split(df, test_size=0.2, random_state=42)
X_train = train['text']
y_train = train['category']
X_test = test['text']
y_test = test['category']

# Linear SVC:
text_clf_lsvc = Pipeline([('tfidf', TfidfVectorizer()), ('clf', LinearSVC()),])
predictions = text_clf_lsvc.predict(X_test)

我的 metrci 准确度分数是:93%

然后我决定减少维度:所以在我第二次尝试时,我添加了截断SVD

# Linear SVC:
text_clf_lsvc = Pipeline([('tfidf', TfidfVectorizer()),('svd', TruncatedSVD()),
                     ('clf', LinearSVC()),])
predictions = text_clf_lsvc.predict(X_test)

我的 metrci 准确度分数下降到 34%。

我的问题:

1- 如果我想坚持使用 TF-IDF 和 SVC 进行分类,我该如何改进我的模型
2- 如果我想有一个好的分类,我还能做什么

【问题讨论】:

    标签: python nlp svm text-classification tf-idf


    【解决方案1】:

    如果您想坚持使用此配置,提高准确性的最佳方法是通过超参数调整,或通过引入其他组件,例如特征选择

    超参数调优

    大多数机器学习算法和机器学习管道的一部分都有几个可以更改的参数。例如,TfidfVectorizer 具有不同的 ngram 范围、不同的分析级别、不同的分词器以及更多参数可以改变。其中大部分会影响你的表现。因此,您可以系统地改变这些参数(以及您的 SVC 的参数),同时监控您在开发集上的准确性(即不是测试数据!)。在这些类型的设置中,通常使用交叉验证而不是固定的开发集。

    sklearn 中执行此操作的最佳方法是通过RandomizedSearchCV(有关详细信息,请参阅here)。此类通过从选项集中随机抽样固定迭代次数来自动交叉验证和搜索您预先指定的可能选项。通过将此技术应用于您的训练数据,您将自动找到对您的给定训练数据和您的选项表现更好的模型。理想情况下,这些模型也会在您的测试数据上表现得更好。公平警告:交叉验证的搜索技术可能需要一段时间才能运行。

    特征选择

    除了网格搜索,另一种提高性能的方法是通过特征选择。特征选择通常由统计测试组成,该测试确定哪些特征解释了您尝试解决的典型任务中的差异。 sklearn中的特征选择方法详解here

    到目前为止,这里最重要的一点是,您添加到模型中的任何内容的性能都应在独立开发集或交叉验证中进行验证。不用管你的测试数据。

    【讨论】:

    • 非常感谢您提供清晰的解释和有用的链接
    猜你喜欢
    • 1970-01-01
    • 2016-04-03
    • 2019-07-06
    • 2016-06-14
    • 1970-01-01
    • 2021-12-28
    • 2019-08-25
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多