python - 如何训练神经网络将文本分类为预先存在的类别?

标签 python tensorflow machine-learning keras neural-network

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

+-----------------------------------------------------+------------------+------------------+------------------+-----+
|                     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 => 电子、手机、苹果

我目前只计划使用描述进行分类作为第一步,以保持简单,但是还有其他列(例如谁提供了该项目)可以帮助分类,例如该项目是否由 提供例如,AppleAT&T 它更有可能被归类为手机

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

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

  1. I want to use Python, with tensorflow2.0 + keras.

  2. I need a way to convert the text into a numerical format. There seems to be a few options out there like word2vec, but I am not sure what is the best option.

  3. How many neurons should my base layer have? (With number recognition each image is 28*28 so a 28*28 base layer makes a lot of sense, here I am not sure)

  4. How many hidden layers?

  5. How many output layers? (Should I have one for each distinct combination of classifications, so one for
    Electronic, Cell Phone, Samsung, one for Electronic, Cell Phone, Apple etc. This would lead to a output layer of thousands of neurons, I am not sure if this is possible/advised?

我并不是在寻找完整的答案,事实上,我知道根据所提供的信息,这实际上是不可能的。相反,我正在寻找更有经验的人关于如何处理这个问题的指导/建议,也许,事实上,很可能有些事情我还没有考虑。

最佳答案

我已经解决 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 模型一次持续预测一个时间步。

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

关于python - 如何训练神经网络将文本分类为预先存在的类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58247292/

相关文章:

Python PyQt QWebView 在单击的选项卡中加载站点

python - 类型错误 : Unhashable type UserType when creating a Cassandra Python driver model with a Set of a UDT

python递归 yield 以减少内存占用

python-3.x - 如何获得 Tensorflow 中线性回归的正确答案?

machine-learning - 机器学习中,开发后可以将开发集添加到训练集中吗?

machine-learning - 损失计算中的Keras组件选择

Python - 输入包含 NaN、无穷大或对于 dtype ('float64' 来说太大的值)

python - 我应该如何处理游戏开发中的延迟?

python - tensorflow 值错误: Batch length of predictions should be same

tensorflow - tensorflow 中的 tensorflowfrozen_inference_graph.pb 文件是什么?