用于网站分类的简单机器学习
Posted
技术标签:
【中文标题】用于网站分类的简单机器学习【英文标题】:Simple machine learning for website classification 【发布时间】:2017-12-16 14:19:03 【问题描述】:我正在尝试生成一个 Python 程序来确定网站是否有害(色情等)。
首先,我制作了一个 Python 网页抓取程序,用于计算每个单词的出现次数。
result for harmful websites
这是一个键值字典,比如
word : [ # 出现在有害网站中,# 包含这些词的网站数] .
现在我希望我的程序分析来自任何网站的文字,以检查该网站是否安全。但我不知道哪种方法适合我的数据。
【问题讨论】:
我的想法是,如果一个网站包含某些仅在有害网站上频繁出现的词(一定次数)-> 该网站是有害的。任何 cmet 表示赞赏! 如果您要求处理数据的方法和工具:学习和分类。您可以查看TensorFlow library 并检查moocs Scikit-learn 可能更容易上手。完成教程。 @SeanHwang ,让我们在这里认真一点。我会要求您稍微修改一下您的问题并将其发布在这两个社区Artificial Intelligence 和Cross Validated 【参考方案1】:这里的关键是您的训练数据。您需要某种supervised learning 技术,其中您的训练数据由网站数据本身(文本文档)及其标签(harmful
或safe
)组成。
您当然可以使用RNN,但还有其他natural language processing 技术和更快的技术。
通常,您应该在训练数据上使用适当的矢量化器(将每个站点页面视为文本文档),例如 tf-idf(还有其他可能性;如果您使用 Python,我强烈建议 scikit提供了许多有用的机器学习技术,并提到sklearn.TfidfVectorizer 已经在其中)。关键是以增强的方式矢量化您的文本文档。例如,想象一下英文单词the
它通常在文本中出现多少次?您需要考虑诸如此类的偏见。
一旦您的训练数据被矢量化,您就可以使用例如stochastic gradient descent 分类器并查看它在您的测试数据上的表现(在机器学习术语中,测试数据意味着简单地采用一些新数据示例并测试您的机器学习程序输出的内容)。
在任何一种情况下,您都需要尝试上述选项。有许多细微差别,您需要测试您的数据并查看您在哪里获得最佳结果(取决于 ML 算法设置、矢量化器的类型、使用的 ML 技术本身等等)。例如,Support Vector Machines 也是二元分类器的绝佳选择。你可能也想试试它,看看它是否比 SGD 表现更好。
无论如何,请记住,您需要获得带有标签的高质量训练数据(harmful
与 safe
)并找到最合适的分类器。在您寻找最佳分类器的过程中,您可能还想使用cross validation 来确定您的分类器的表现如何。同样,已经包含在scikit-learn 中。
注意不要忘记有效案例。例如,可能有一个完全安全的在线杂志,它只在某些文章中提及有害话题;但这并不意味着网站本身是有害的。
编辑:在我看来,如果您根本没有任何机器学习经验,那么使用online course 可能会很有用,因为尽管您了解 API 和库,但您仍然需要知道它的作用以及幕后的数学(至少大致如此)。
【讨论】:
【参考方案2】:您尝试执行的操作称为情绪分类,通常使用循环神经网络 (RNN) 或长短期记忆网络 (LSTM) 来完成。从机器学习开始,这不是一个容易的话题。如果您是新手,您应该首先了解线性/逻辑回归、SVM 和基本神经网络 (MLP)。否则很难理解发生了什么。
也就是说:有许多用于构建神经网络的库。可能最容易使用的是keras
。虽然这个库极大地简化了很多事情,但它不仅仅是一个从垃圾中获取黄金的魔法盒子。您需要了解幕后发生的事情才能获得良好的结果。 Here 是一个示例,说明如何使用 keras
在 IMDB 数据集上执行情感分类(基本上确定电影评论是否正面)。
【讨论】:
你确定吗? 确定什么?【参考方案3】:对于没有 NLP 或 ML 经验的人,我建议使用 TFIDF vectorizer 而不是使用深度学习库。简而言之,它将句子转换为向量,将词汇表中的每个单词都带到一个维度(度数是出现)。
然后,您可以将cosine similarity 计算为结果向量。
要提高性能,请使用 NLTK 图书馆支持的 stemming / lemmatizing / stopwords。
【讨论】:
以上是关于用于网站分类的简单机器学习的主要内容,如果未能解决你的问题,请参考以下文章