编码数据的文本分类标签
Encoding data's label for text classification
我正在做一个临床文本分类项目。在我的语料库中,数据已经用代码标记(例如:768.2、V13.02、V13.09、599.0 ...)。我已经将文本和标签分开,然后使用 word-embedded 作为文本。我将把它们输入卷积神经网络。然而,标签需要编码,我阅读了情感文本分类和 mnist 的示例,但他们都使用整数来分类他们的数据,我的标签是文本形式的,这就是为什么我不能像他们一样使用 one-hot 编码。谁能建议任何方法来做到这一点?
谢谢
通过创建枚举映射,离散文本标签可以轻松转换为离散数字数据。例如,假设标签 "Yes"、"No" 和 "Maybe":
No -> 0
Yes -> 1
Maybe -> 2
现在你有了数值数据,以后可以将其转换回来(只要算法将它们视为离散值,而不是 return 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_a
、label_b
和 label_c
的值,然后重建原始标签,例如 "ab"。只需确保输出在集合 [0, 1] 中(通过应用 softmax 层或类似的东西)。
观看这个 4 分钟的视频(Corsera:ML 分类(华盛顿大学)-> 第 1 周 -> 编码分类输入)
https://www.coursera.org/learn/ml-classification/lecture/kCY0D/encoding-categorical-inputs
有两种编码方式:
一次热编码
Bag of words(我认为在这种情况下这是更合适的方法)
下图描述了词袋方法的工作原理。文本可以说出 10,000 个不同的单词,或者更多,更多,数百万。所以 Bag of Words 所做的就是获取该文本,然后将其编码为计数。
编辑 1
Python实现:访问http://www.python-course.eu/text_classification_python.php
我正在做一个临床文本分类项目。在我的语料库中,数据已经用代码标记(例如:768.2、V13.02、V13.09、599.0 ...)。我已经将文本和标签分开,然后使用 word-embedded 作为文本。我将把它们输入卷积神经网络。然而,标签需要编码,我阅读了情感文本分类和 mnist 的示例,但他们都使用整数来分类他们的数据,我的标签是文本形式的,这就是为什么我不能像他们一样使用 one-hot 编码。谁能建议任何方法来做到这一点? 谢谢
通过创建枚举映射,离散文本标签可以轻松转换为离散数字数据。例如,假设标签 "Yes"、"No" 和 "Maybe":
No -> 0
Yes -> 1
Maybe -> 2
现在你有了数值数据,以后可以将其转换回来(只要算法将它们视为离散值,而不是 return 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_a
、label_b
和 label_c
的值,然后重建原始标签,例如 "ab"。只需确保输出在集合 [0, 1] 中(通过应用 softmax 层或类似的东西)。
观看这个 4 分钟的视频(Corsera:ML 分类(华盛顿大学)-> 第 1 周 -> 编码分类输入) https://www.coursera.org/learn/ml-classification/lecture/kCY0D/encoding-categorical-inputs
有两种编码方式:
一次热编码
Bag of words(我认为在这种情况下这是更合适的方法)
下图描述了词袋方法的工作原理。文本可以说出 10,000 个不同的单词,或者更多,更多,数百万。所以 Bag of Words 所做的就是获取该文本,然后将其编码为计数。
编辑 1
Python实现:访问http://www.python-course.eu/text_classification_python.php