我有一个包含 100 列(分类单热编码)和 1 列包含文本数据(简单句子)的数据集,我想构建一个神经网络来围绕 380.000 个输出标签。我不知道我能做什么。
我在考虑一个带有嵌入层和许多密集层的 CNN。
有什么建议么?
我有一个包含 100 列(分类单热编码)和 1 列包含文本数据(简单句子)的数据集,我想构建一个神经网络来围绕 380.000 个输出标签。我不知道我能做什么。
我在考虑一个带有嵌入层和许多密集层的 CNN。
有什么建议么?
您可能正在寻找的网络架构类型的外壳可以合理地是:
{Input} -> {representation layers} -> {output}
您的问题有一些隐含的层次,首先:
所以,让我们一次解决这些问题。
如何获取各种类型的输入(数字数据与文本数据)
具体细节将在很大程度上取决于您使用的框架,例如,在基本 PyTorch 中实现它与在 Keras 或 Tensorflow 中实现它是不同的。
在任何情况下,您都可能希望为要以不同方式处理的数据类型定义不同的输入:
{Numeric Input}->|-- {Numeric Representation} -|
|>{Dense Layer(s)} --> {Outputs}
{Text Input} --->|-- {Text Representation} ----|
如何处理文本数据的表示?
听起来您对此有意见,并且您想尝试:
{Numeric Input}->|-- {Numeric Representation} ->|
|>{DenseLayer(s)} -> {Outputs}
{Text Input} --->|-> {CNN} -> {Embedding Layer}>|
这是一个完全合理的方法。形成文本数据适当表示的其他方法是循环单元,其中一种非常常用的文本数据类型是LSTM。
如何处理 380,000 个输出类的输出?
有一种非常简单直接的方法可以处理 380,000 个类。您只需将输出层设为具有 380,000 个单元的 softmax(逻辑)层。简单的。
>|-- {Numeric Representation} ----->|
|---> >{DenseLayer(s)} -> {Softmax, 380000}
-->|-> {CNN} --> {Embedding Layer}->|
现在,支持该网络有效训练的训练数据集需要非常非常大。380000 个类中的每一个都需要得到训练样例的合理支持,以便训练好的网络能够区分这些类。
在不了解 380,000 个课程的详细信息的情况下,很难就处理这个困难提供建议(如果是一个,您可能需要处理数十亿个训练示例)。常见的方法是:
从概念上对类进行分组——例如,将“狗”、“猫”和“鸟”组合成“动物”
将类限制为感兴趣的类。如果您关心的类相对较少,您可以将类定义限制为每个类和“其他”。