是否有任何分类器最适合基于 NLP 的项目?

人工智能 机器学习 深度学习 自然语言处理 分类 文本分类
2021-11-09 12:07:27

我编写了一个程序来分析网站上的给定文本,并对其有效性进行结论性分类。该代码基本上对描述进行了矢量化(实时取自给定网页的 HTML),并从中获取一些输入作为特征来做出决策。还有更多功能,例如网站的域和我明确计算过的一些关键字。

我能够达到的最高精度是使用 RandomForestClassifier (>90%)。除了合并一个更复杂的模型外,我不确定我能做些什么来提高这种准确性。我尝试使用 MLP,但对于没有一组超参数,它似乎超过了以前的准确度。我有大约 2000 个数据点可用于训练。

有没有最适合此类项目的分类器?有人对我如何进行改进有任何建议吗?(如果有什么需要详细说明的,我会这样做。)

关于我如何总体上改进这个项目的任何建议?我也应该在网页上包含文本吗?我该怎么做?我尝试浏览了几个站点,但下一个似乎不包含在任何特定元素中,而描述很容易从 HTML 中获得。有什么帮助吗?

我还能把什么作为特征?如果有人可以提出任何创意,我将不胜感激。

2个回答

准确性取决于各种因素。可能并不总是算法。例如,具有较差算法的更干净的数据可能仍会产生更好的结果,反之亦然。

您正在使用哪些预处理技术?这篇预处理技术文章是 html 数据的一个很好的起点。通过矢量化,我假设您的意思是 word2vec,使用预先训练的 word2vec 模型。就像谷歌的word2vec模型一样,它在大量数据(大约 1000 亿字)上进行了训练。

只要句子的意图很重要,LSTM 就会表现良好。看看这个Ram 击中 Vijay 和 Vijay 击中 Ram,对大多数算法来说可能意味着相同。例如,朴素贝叶斯。

首先,模型的工作效果有多好有多种因素。数据量、数据来源、超参数、模型类型、训练时间等……所有这些都会影响准确性。但是,一般来说,没有分类器效果最好。这一切都取决于不同的因素,至少目前没有人能满足所有人的要求。

为了提高准确率,我们首先需要使这些因素理想化,这样分类才会有更高的准确率。

首先,你有多少数据?如果您使用的是 html 网页,您可能需要至少 10000 个数据样本。如果你至少有这么多的数据,你应该可以接受过度拟合。您还需要清理数据。一种方法是对其进行标记文本数据的标记化基本上意味着将文本拆分为单词并从中制作字典。然后将每个单词编码为特定数字,其中每个相同的单词具有相同的编码。您正在使用原始 HTML 作为输入,其中包含许多不必要的信息和标签等内容,您可以尝试删除这些或完全删除所有 html 标签(如果不需要的话)。清洗数据的关键是提取重要必要的信息让模型工作。

然后,您应该探索模型。对于 NLP(自然语言处理)任务,最好的选择是选择 RNN(循环神经网络)。这种类型的网络具有记忆单元,有助于处理文本类型数据,因为文本在段落中通常具有远距离链接,例如,一个句子可能使用“她”来指代前面两句话中提到的人,如果你只是喂每个MLP 中单词的单一编码,它不会有这种记忆供网络学习文本之间的长期连接。RNN 也是时间相关的,这意味着它会根据时间的方向一个一个地处理每个令牌。这使得文本对网络更直观,因为文本被设计为向前阅读,而不是一次全部阅读。

您当前的方法是首先对 HTML 代码进行矢量化处理,然后将其输入随机森林分类器。随机森林分类器效果很好,但是当有更多数据时它无法扩展。当数据增加时,随机森林分类器的准确性将基本保持不变,而在深度神经网络中,准确性将随着数据量的增加而增加。然而,深度神经网络需要大量数据才能开始。如果您的数据量不是太多(< 10000),则此方法应该是您选择的方法。但是,如果您计划添加更多数据或数据更多,则应尝试基于深度学习的方法。

对于基于深度学习的方法,ULMFit 是一个很好的尝试模型。它使用具有语言模型预训练和许多不同方法的 LSTM(长短期记忆)网络(这是 RNN 的一种)来提高准确性。你可以尝试使用 fast.ai 实现。https://nlp.fast.ai/

如果您想尝试一种您可以实际实现的方法,您可以尝试使用带有一个热编码的普通 LSTM 作为输入。但是,不要使用 word2vec 进行预处理,因为您的输入数据是 html 代码。word2vec 模型适用于普通英文文本,而不是 html 标记和内容。此外,自定义编码会更好,因为在训练过程中您也可以训练编码。

希望我能帮助你