【问题标题】:How can one train a neural network to classify text into preexisting classifications?如何训练神经网络将文本分类为预先存在的分类?
【发布时间】:2019-10-05 21:14:24
【问题描述】:

我有一个看起来有点像以下的数据集,想想像沃尔玛这样的商店。

+-----------------------------------------------------+------------------+------------------+------------------+-----+
|                     Description                     | Classification 1 | Classification 2 | Classification 3 | ... |
+-----------------------------------------------------+------------------+------------------+------------------+-----+
| iphone 7 order# :123595                             | Electronic       | Cell Phone       | Apple            |     |
| purchase of samsung galaxy s10 reference 32-2345    | Electronic       | Cell Phone       | Samsung          |     |
| dell 13" 500gb ssd intel i7                         | Electronic       | Laptop           | Dell             |     |
| tablet 15cm for chris t price $199.76               | Electronic       | Tablet           | NULL             |     |
| ...                                                 | ...              | ...              | ...              |     |
| 50x rolley chairs for office supplied by home depot | Supplies         | Furniture        | Chairs           |     |
| electrician cost for new building                   | Supplies         | Electrical       | Work             |     |
+-----------------------------------------------------+------------------+------------------+------------------+-----+

这种数据集的形状非常大,有几千(可能 >100,000)行,可能有 50 多列。

我想要一种方法,以便根据其描述正确分类该行。

因此,基于上述数据集的模型应该采用以前从未见过的描述并正确分类该项目,例如: iphone 11 $999.99 => Electronic, Cell Phone, Apple.

我目前只计划使用描述进行分类作为第一步以保持简单,但是还有其他列,例如谁提供了可以帮助分类的项目,例如,如果项目是由 Apple 提供的例如,AT&TAT&T 更有可能被归类为 Cell Phone

我正在考虑实现一个神经网络来做到这一点。我以前实现过神经网络,但只在典型示例上实现(例如,识别数字 0-9 [MINST 数据集] 或识别衣服的系统),所以我了解神经网络如何工作的理论(权重、偏差、梯度下降) ,反向传播等)但是我正在努力实现我现在的这个想法。

到目前为止,这是我的想法:

  1. 我想用 Python,配合 tensorflow2.0 + keras。

  2. 我需要一种将文本转换为数字格式的方法。似乎有 有几个选项,比如 word2vec,但我不确定是什么 最好的选择。

  3. 我的基础层应该有多少个神经元? (带号码识别 每个图像都是 28*28,所以 28*28 的基础层很有意义,这里我 不确定)

  4. 有多少隐藏层?

  5. 有多少个输出层? (我应该为每个不同的 分类的组合,因此一种用于
    Electronic, Cell Phone, Samsung,一种用于Electronic, Cell Phone, Apple 等。这将导致 到数千个神经元的输出层,我不确定这是否是 可能/建议?

我不是在寻找完整的答案,事实上我知道,鉴于所提供的信息,这实际上是不可能的。相反,我正在从更有经验的人那里寻找有关如何解决此问题的指导/建议,事实上,很可能有些事情我还没有考虑。

【问题讨论】:

    标签: python tensorflow machine-learning keras neural-network


    【解决方案1】:

    我已经解决 NLP 问题近 5 年了,这里是我的建议。

    我想用 Python,用 tensorflow2.0 + keras。

    是的,Keras 将是您实施解决方案的好选择。使用 Keras 应该相当简单。

    我需要一种将文本转换为数字格式的方法。似乎有一些选项,例如 word2vec,但我不确定什么是最佳选项。

    是的,词向量肯定会提高模型的性能。但如果你想要更天真的解决方案,你可以试试onehot vectors。我建议从 onehot 向量开始,然后一旦你有了一个可行的解决方案,就可以使用词向量来改进它。这样一来,您就可以确定在开始时不会引入太多复杂性,从而在实现中出现问题时更容易调试)。

    PS:word2vec 现在已经很老了,还有更好的选择,比如GloVeFastText

    我的基础层应该有多少个神经元? (通过数字识别,每张图像都是 28*28,所以 28*28 的基础层很有意义,这里我不确定)

    这取决于您的词汇量。正如我之前所说,无论您是否使用词向量,都必须将词转换为 onehot 向量。而onehot向量的长度是由词汇表的大小决定的。

    有多少隐藏层?

    这是一个很难回答的问题。如果您正在寻找最佳结构(即通过超参数优化),您将需要尝试不同的架构并找到最佳架构。

    有多少个输出层?

    认为这是一个棘手的问题(主要是因为标签预测不在我的专业领域内)。但我可以告诉你两件事可以尝试。

    1. 有一个包含所有可能类别的输出层。但正如您可以想象的那样,需要有人提出类别。然后,如果你有大量的标签,你最终会得到一个很大的 softmax 预测层。但是您可以使用负采样之类的方法来缓解这种情况。

    2. 您可以只使用一个具有固定词汇表的输出层(例如电子产品、电话、笔记本电脑等)来做到这一点。但是,您需要有一组固定的标签(即词汇)来进行预测。然后,您可以使用LSTM 模型来预测给定描述的任意数量的标签。您可以生成任意数量的标签作为输出,因为您可以使用 LSTM 模型一次预测一个时间步长。

    但现在您假设标签之间存在时间依赖性(按它们出现的顺序),这可能会导致有趣的结果。例如,如果您有相同的描述但有两个不同系列的标签(即电子产品、电话、三星和电子产品、三星、电话),这可能会混淆模型。

    【讨论】:

    • +1 这个答案似乎很有帮助,但我确实想知道最后一点,你说“例如,如果你有两个模型有 10 个和 1000 个类......”我怎么能有 10 个类或 1000 个类,我的意思是我肯定需要与分类数相同的数字,对吗?所以electronic, cell phone, apple 将是一个electronic, cell phone, samsung 将是另一个,如果我有超过 10 个这些分类(我这样做)我怎么可能希望将它们减少到只有 10 个分类?我希望网络成为映射text description => classification 1,2,3? 的函数
    • 好吧,我又看了一遍,发现我理解错了你的最后一个问题。我将编辑我的答案,以便新的答案到位
    猜你喜欢
    • 2016-04-03
    • 2015-06-02
    • 2017-10-07
    • 2019-06-23
    • 2020-04-22
    • 2013-08-24
    • 2017-05-23
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多