【问题标题】:Encoding data's label for text classification为文本分类编码数据标签
【发布时间】:2016-08-02 19:15:56
【问题描述】:

我正在做一个临床文本分类项目。在我的语料库中,数据已经用代码标记(例如:768.2、V13.02、V13.09、599.0 ...)。我已经将文本和标签分开,然后使用嵌入文字的文本。我将把它们输入卷积神经网络。但是,标签需要编码,我阅读了情感文本分类和 mnist 的示例,但它们都使用整数来对数据进行分类,我的标签为文本形式,这说明为什么我不能像它们一样使用 one-hot 编码。任何人都可以建议任何方法吗? 谢谢

【问题讨论】:

  • 您可以对离散标签使用 one-hot 编码。例如,对于标签“Yes”、“No”和“Maybe”,您可以分配“No=0”、“Yes=1”、“Maybe=2”,然后将其编码为多个二进制/连续标签。
  • 感谢 Mephy,我的文本数据按 45 个标签分类。有些文本可能同时有两个标签。

标签: python encoding tensorflow text-classification


【解决方案1】:

离散文本标签可通过创建枚举映射轻松转换为离散数值数据。例如,假设标签“是”、“否”和“也许”:

No    -> 0
Yes   -> 1
Maybe -> 2

现在您有了数字数据,以后可以将其转换回来(只要算法将这些数据视为离散值并且不返回 0.5 或类似的值)。

如果每个实例都可以有多个标签,正如您在评论中所说,您可以通过将每个标签放在一列中来创建编码(“one-hot encoding”)。即使某些软件没有实现该现成的,手动完成也不难。

这是一个使用 Panda 的 get_dummies 函数的非常简单的示例(说实话写得不好):

import numpy as np
import pandas as pd
labels = np.array(['a', 'b', 'a', 'c', 'ab', 'a', 'ac'])
df = pd.DataFrame(labels, columns=['label'])
ndf = pd.get_dummies(df)
ndf.label_a = ndf.label_a + ndf.label_ab + ndf.label_ac
ndf.label_b = ndf.label_b + ndf.label_ab
ndf.label_c = ndf.label_c + ndf.label_ac
ndf = ndf.drop(['label_ab', 'label_ac'], axis=1)
ndf

    label_a label_b label_c
0   1.0     0.0     0.0
1   0.0     1.0     0.0
2   1.0     0.0     0.0
3   0.0     0.0     1.0
4   1.0     1.0     0.0
5   1.0     0.0     0.0
6   1.0     0.0     1.0

您现在可以训练多变量模型以输出 label_alabel_blabel_c 的值,然后重建原始标签,如“ab”。只需确保输出在集合 [0, 1] 中(通过应用 softmax-layer 或类似的东西)。

【讨论】:

  • 谢谢 Merphy,我让你很理想。我可以使用 get_dummies 将分类标签转换为整数,然后用它来输入 one_hot 编码吗?
  • 嘿 Merphy,我得到了你的理想,但我的项目在 Tensorflow 中实现。神经网络只需要张量而不是数组,你知道我怎样才能将这些分类数据实现成与你在 Tensorflow 中的结果相似的数值数据吗?
【解决方案2】:

观看这个 4 分钟的视频(Corsera:ML 分类(华盛顿大学)-> 第 1 周 -> 编码分类输入) https://www.coursera.org/learn/ml-classification/lecture/kCY0D/encoding-categorical-inputs

有两种编码方式:

  1. 一次热编码

  2. 词袋(我认为在这种情况下这是更合适的方法)

下图描述了词袋法的工作原理。文本可以说来自它的 10,000 个不同的单词,或者更多,更多,数百万。因此,Bag of Words 所做的就是获取该文本,然后将其编码为计数。

编辑 1

Python实现:访问http://www.python-course.eu/text_classification_python.php

【讨论】:

  • 谢谢 Sayali,我得到了你的理想,所以我有 46 个标签,我创建了一个 46 的数组,当文本标签时,我将它设置为 1,例如 (00100000..0)。我真的不知道怎么写这个代码,你知道python中有什么函数可以做到吗?
  • @ngoduyvu python-course.eu/text_classification_python.php 访问此页面了解python实现部分
  • 嗨 Sayali,您的网站帮了大忙。但是,我已经理解了预训练单词的步骤。现在我在编码标签时遇到了麻烦。在您的 kaggle 示例中,他们可以用“01”或“10”编码正面或负面的情绪评论。但是在我的数据中,我有不同的代码对应于不同种类的疾病(以字符串形式),为了输入机器学习算法,我必须将它们编码成数字。
猜你喜欢
  • 1970-01-01
  • 2021-11-05
  • 2017-11-21
  • 1970-01-01
  • 2016-06-14
  • 2020-04-09
  • 2020-05-01
  • 2018-09-03
  • 2020-10-31
相关资源
最近更新 更多