ML 是一个很好的解决方案,可以从一个句子中识别用户想要做什么吗?

数据挖掘 机器学习
2021-09-18 13:35:39

我正在学习机器学习,并且正在尝试为一个实际问题实现解决方案:从人类句子中预测他/她正在尝试执行的编程功能。

我有一系列与一系列描述相关的编程功能(每个独特功能可以有 n > 0 个描述)。

我创建了一个神经网络和一个词袋模型,试图将人类句子“我们从数据库中获取数据”转换为编程函数。到目前为止,它适用于非常简单的示例,但不适用于我的真实数据。

像这样的工作:

"description"     | programming function
lala lolo lulu ka | function1
lala lolo lulu ke | function1
lala lolo lulu ko | function1
lala lele lili ka | function2
lala lele lili ki | function2
lala lele lili ko | function2

描述中的每个单词都被转换为神经元输入(如果存在则值为 1,如果不存在则值为 0),并且每个可能的函数都被转换为神经元输出。

我正在使用具有反向传播和 0.005 错误阈值的 pyBrain。神经网络有三层,中间一层有长度:可能的单词数+可能的编程函数数(这是任意的)。

我知道全文搜索或自动完成可能是这项任务的更好选择,但我只是在尝试机器学习,如果可能的话,我希望它能够工作。在我的真实数据中,我有 1000 个与约 500 个函数相关的描述。

所以我的问题是:

  • 词袋+神经网络是解决这个问题的好方法吗?
  • 也许 Word2vec 是一个更好的选择?
  • 如果两者都不好,是否有任何已知的机器学习方法可以与类似的东西一起使用?
1个回答

是的,这个问题非常适合机器学习。但是,我认为你应该小心你倾向于使用哪些算法。

机器学习算法的结构应该如下:特征提取,然后是模型。这是应该分开做的两件事。

特征提取

这是词袋,n_grams 和 word2vec。这些都是文本示例的好选择。我认为就您而言,词袋是一个不错的选择。但是,如果这会生成一个稀疏矩阵,那么 n_grams 可能会更好。您可以测试所有 3 种方法。

该模型

从理论上讲,模型中的参数越多,您需要对其进行充分训练的数据就越多,否则您将保留大量偏差。这意味着错误率很高。神经网络往往具有非常多的参数。因此,他们需要大量数据来训练。

但是,你有 1000 个实例!!!是的。但是,您也有 500 个课程。所以假设你有一个很小的孩子,你希望他能够正确分类 500 种不同类型的图像。那么你不能只给孩子展示每个班级的 2 个不同的例子,让他真正理解每个班级的真正含义。

作为一个非常普遍的经验法则,训练模型所需的实例数量会随着类的数量呈指数增长。因此,您将需要大量数据来正确训练神经网络模型。

我会建议一个不太密集的模型。此外,看看你的例子,这些类似乎应该是线性可分的。所以你可以使用一些非常简单的东西,线性回归、逻辑回归、朴素贝叶斯或 knn。这些方法比神经网络做得好得多。

我的建议

我会从词袋开始,然后使用 knn。这应该是一个很好的起点。

对于您拥有的数据量,建议使用 0% 的神经网络。