【问题标题】:Transforming a Dataset for Multi-Label Text Classification为多标签文本分类转换数据集
【发布时间】:2021-11-05 01:51:10
【问题描述】:

我正在通过深度学习模型进行一些关于多标签分类的实验。 但是我遇到了数据集的问题。

我使用 Keras、TensorFlow 2.0、numpy、pandas。

我有一个数据集,格式如下: Dataset in the form that I have it

要应用多标签分类(6 个标签),我需要我的数据集采用以下形式: Dataset in the form that I need it

如何实现这一目标?是否有任何函数可以让这种转换变得更容易?

试试:

comments_df[['abusive','hateful','offensive','disrespectful','fearful','normal']] = comments_df['sentiment'].str.split('_', -1, expand=True)

这给了我一个错误:

ValueError: Columns must be same length as key

关于我将使用的 DL 模型,它是 bi-LSTM,但它与问题本身没有任何关系。

【问题讨论】:

    标签: deep-learning dataset classification data-science data-transform


    【解决方案1】:

    试试这个:

    df = pd.get_dummies(data = df, columns = ['sentiment'])
    

    【讨论】:

    • 是的,这部分解决了问题。由于数据的性质,它创建的列多于所需的列,但是您的代码和之后的一些列“删除”。行得通。
    【解决方案2】:

    我发现这是可行的(不是最佳解决方案):

    """
    Creating a column for each of the target labels with sentiment's column data.
    """
    
    
    def split_sentiment_outputs(output_label, sentiment_col="sentiment"):
        comments_df[output_label] = comments_df[sentiment_col].str.split('_')
    
    
    """
    Transform column's data to categorical.
    """
    
    
    def transform_data_for_multilabel(output_label):
        row = comments_df[output_label]
        for index, row in row.items():
            # print("Index:", index)
            # print("length:", len(row))
            # print("content:", row)
            # print("--------------")
            z = 0
            while z < len(row):
                if row[z] == output_label:
                    comments_df.at[index, output_label] = 1
                    break
                else:
                    comments_df.at[index, output_label] = 0
                z = z + 1
    
    # Applying Data Transformation
    output_labels = ["abusive", "hateful", "offensive", "disrespectful", "fearful", "normal"]
    for i in range(MAX_OUT):
        split_sentiment_outputs(output_labels[i])
    
    for i in range(MAX_OUT):
        transform_data_for_multilabel(output_labels[i])
    

    【讨论】:

    • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
    • 我相信如果有人打开我链接的图片,那么代码就会变得非常简单。你认为我必须澄清什么?由于我是新成员,您的指导将非常有帮助!
    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 2017-11-21
    • 2022-01-21
    • 2017-11-08
    • 2018-12-26
    • 2016-08-26
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多