用于网站分类的简单机器学习

Simple machine learning for website classification

我正在尝试生成一个 Python 程序来确定网站是否有害(色情等)。

首先,我制作了一个 Python 网络抓取程序,用于计算每个单词的出现次数。

result for harmful websites

这样的键值字典

{ word : [ # 在有害网站中出现,# of websites that contain these words] }.

现在我想让我的程序分析来自任何网站的文字,以检查该网站是否安全。但是我不知道哪种方法适合我的数据。

您尝试做的事情称为情感分类,通常使用递归神经网络 (RNN) 或长短期记忆网络 (LSTM) 完成。从机器学习开始,这不是一个容易的话题。如果您是新手,您应该首先了解 linear/logistic 回归、SVM 和基本神经网络 (MLP)。否则很难理解是怎么回事。

就是说:有许多库可用于构建神经网络。可能最容易使用的是 keras。虽然这个库极大地简化了很多事情,但它不仅仅是一个从垃圾中制造黄金的魔盒。您需要了解引擎盖下发生的事情才能获得良好的结果。 Here 是一个示例,说明如何使用 keras.

对 IMDB 数据集执行情感分类(基本上确定电影评论是否正面)

这里的关键是你的训练数据。您需要某种 supervised learning 技术,其中您的训练数据由网站数据本身(文本文档)及其标签(harmfulsafe)组成。

您当然可以使用 RNN but there also other natural language processing 技术和更快的技术。

通常,您应该对训练数据使用适当的矢量化器(将每个站点页面视为文本文档),例如 tf-idf (but also other possibilities; if you use Python I would strongly suggest scikit that provides lots of useful machine learning techniques and mentioned sklearn.TfidfVectorizer 已经在其中)。关键是以增强的方式矢量化您的文本文档。例如,想象一下英语单词 the 它通常在文本中出现多少次?你需要考虑这些偏见。

一旦你的训练数据被向量化,你就可以使用例如 stochastic gradient descent 分类器,看看它如何对你的测试数据执行(在机器学习术语中,测试数据意味着简单地采用一些新的数据示例并测试什么你的 ML 程序输出)。

无论哪种情况,您都需要尝试使用上述选项。有许多细微差别,您需要测试您的数据并查看您在何处获得最佳结果(取决于 ML 算法设置、向量化器类型、使用的 ML 技术本身等)。例如 Support Vector Machines 也是二进制分类器的绝佳选择。您可能也想尝试一下,看看它的性能是否优于 SGD。

无论如何,请记住,您需要获得带有标签的高质量训练数据(harmful vs. safe)并找到最合适的分类器。在寻找最佳选择的过程中,您可能还想使用 cross validation to determine how well your classifier behaves. Again, already contained in scikit-learn

N.B。不要忘记有效案例。例如,可能有一本完全安全的在线杂志,它只在某些文章中提到有害话题;但这并不意味着网站本身有害。

编辑:正如我所想,如果您根本没有任何 ML 经验,那么学习 online course 可能会有用,因为尽管您了解 API 和库仍然需要知道它的作用以及幕后的数学原理(至少大致如此)。

对于没有 NLP 或 ML 经验的人,我建议使用 TFIDF vectorizer 而不是使用深度学习库。简而言之,它将句子转换为向量,将词汇表中的每个单词都带到一个维度(程度为出现)。

然后,您可以计算 cosine similarity 到结果向量。

要提高性能,请使用 NLTK 库中支持的 stemming / lemmatizing / stopwords