我正在尝试编写一个Python程序,用于判断一个网站是否有害(如色情等)。
首先,我编写了一个Python网络爬虫程序,用于统计每个单词出现的次数。
这是一个键值字典,类似于
{ 单词 : [ 在有害网站中的出现次数, 包含这些单词的网站数量] }。
现在我想让我的程序分析任何网站的单词,以检查该网站是否安全。但我不知道哪种方法适合我的数据。
回答:
这里的关键是你的训练数据。你需要某种监督学习技术,其中你的训练数据包括网站本身的数据(文本文档)和其标签(harmful
或safe
)。
你当然可以使用RNN,但还有其他自然语言处理技术,而且速度更快。
通常,你应该在你的训练数据上使用适当的向量化器(将每个网站页面视为一个文本文档),例如tf-idf(但也有其他可能性;如果你使用Python,我强烈建议使用scikit,它提供了许多有用的机器学习技术,并且提到的sklearn.TfidfVectorizer已经包含在内)。重点是以增强的方式对你的文本文档进行向量化。例如,想象一下英语单词the
在文本中通常出现多少次?你需要考虑到这些偏见。
一旦你的训练数据被向量化,你可以使用例如随机梯度下降分类器,并查看它在你的测试数据上的表现(在机器学习术语中,测试数据意味着简单地取一些新数据示例并测试你的机器学习程序的输出)。
无论哪种情况,你都需要尝试上述选项。有许多细微之处,你需要测试你的数据,看看在哪里能获得最佳结果(取决于机器学习算法设置、向量化器类型、使用的机器学习技术本身等)。例如,支持向量机在二元分类器方面也是一个很好的选择。你可能也想尝试一下,看看它是否比SGD表现得更好。
无论如何,请记住,你需要获得带有标签(harmful
与safe
)的优质训练数据,并找到最适合的分类器。在寻找最佳分类器的过程中,你可能还想使用交叉验证来确定你的分类器的表现如何。同样,这已经包含在scikit-learn中。
注意:不要忘记有效的情况。例如,可能有一个完全安全的在线杂志,它在某篇文章中仅提到了有害话题;这并不意味着该网站本身是有害的。
编辑:当我想到这一点时,如果你完全没有机器学习经验,可能有用的是参加任何在线课程,因为尽管你了解API和库的知识,你仍然需要知道它做了什么以及幕后的数学(至少大致了解)。