NLP:在sklearn管道中使用工程特性的合适方法是什么?

2024-04-27 02:58:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我第一次执行文本分类任务(twitter情绪分析),但我不确定如何将工程特性整合到sklearn管道中。你知道吗

到目前为止,我已经在输出分类器之前尝试了转换。例如:

model = Pipeline([('t', 'mean_vectorizer'), ('logreg', LogisticRegression())])

但所有这些基本管道的得分都很低。所以我想开始进行网格搜索并结合我自己的特点。你知道吗

到目前为止,我的数据集(X\u train)是这样的:行是tweets(单个字符串)。这是mean\u矢量器(如果我使用tfidf\u矢量器)处理的格式。你知道吗

融入新功能

以1个新特性为例,一个布尔值表示是否存在一个肯定词(只是一个基本示例)。我将创建一个(len(X_train),1维的布尔值数组,对应于每个tweet。你知道吗

我的想法:

  1. 在预处理tweets之后,标记它们并用word2index dict中的值替换单词。将tweets填充为相等的长度,然后将这个数组与我的特征连接起来。然后像平常一样把这个通到管道里。

  2. 也许有一种方法可以将这些特性单独传递到管道中?

  3. 也许转换使用整数数组而不是字符串会有问题?

问题

有没有人能告诉我用sklearn进行这项工作的最佳方法。你知道吗

假设数据是一个句子列表(训练与测试分开),每个句子都是一个字符串。你知道吗

我认为这将是一个真正有助于其他人开始与NLP,所以请尽可能一般。你知道吗


Tags: 数据方法字符串文本管道矢量分类train
1条回答
网友
1楼 · 发布于 2024-04-27 02:58:18

可以使用sklearn的FeatureUnion将特性合并到管道中,正如vivekkumar所建议的那样,详细信息可以在sciketlearn网站上找到:http://scikit-learn.org/stable/auto_examples/hetero_feature_union.html。你知道吗

在使用管道时,应该将它分成若干部分,其中包括3个重要部分:数据的提取,然后是FeatureUnion,然后是分类器。在FeatureUnion中,可能会有多个管道对应于不同的特性,例如一个单词包模型、Tfidf、特殊特性等

从上面提供的链接中可以详细看到,伪结构如下所示:

pipeline = Pipeline([

    # Get array of text
    ('text', TextExtractor()),

    # Use FeatureUnion to combine the features used in classification
    ('union', FeatureUnion(
        transformer_list=[

            ('text2', Pipeline([('f', feature1)])),

            ('body_bow', Pipeline([('tfidf', some_vectorizer)])),

            # Pipeline for pulling ad hoc features from text
            ('body_stats', Pipeline([('f2', feature_dictionary)]))])),

    # Use a SVC classifier on the combined features
    ('clf', classifier()),
])

相关问题 更多 >