特征选择和无监督学习在多语言数据中的应用 + 机器学习算法选择

5

问题

我想将几千个网站分类/归类/聚类/分组。我们有可供培训的数据,因此可以进行监督学习,但这不是我们收集到的数据,而且我们并不坚决使用它——因此我们也考虑无监督学习。

  • 我可以在机器学习算法中使用哪些特征来处理多语言数据?请注意,其中一些语言可能尚未在自然语言处理领域得到处理。

  • 如果我要使用无监督学习算法,是否应该按语言对数据进行划分,并分别处理每种语言?不同的语言可能具有不同的相关类别(或者不具备,这取决于您的心理语言学理论倾向),这可能会影响划分的决策。

  • 我正在考虑使用决策树,或者可能是支持向量机(SVM)来允许更多功能(从我的理解)。该帖子建议使用随机森林而不是SVM。您有什么想法?

欢迎采取实用方法! (理论方法也可以,但那些可能留给以后的乐趣。)

背景

我们正在尝试将数千个网站分类为3至5种语言(可能多达10种,但我们不确定)。

我们有已经分类了数百个网站的训练数据。但是,如果其他类别更有意义,我们可以选择使用该数据集或不使用该数据集,因为它不是我们首先收集到的东西。 我们现在处于从网站中爬取数据/文本的最后阶段。

现在我们必须决定上述问题。我已经对Brown Corpus和Brill标记器进行了一些工作,但由于存在多种语言问题,这不起作用。

我们打算使用Orange机器学习软件包。


1
那么,这是有监督的还是无监督的? - rmalouf
我了解您的意思是 语义 分类/聚类,即按照意义进行分组,而不是其他信息,如链接数量、情感、提到公司名称等? - ffriend
@rmalouf:问题已经澄清了!@ffriend:我不确定我是否必须将其描述为“语义”,因为这可能会让我们进入切题理论和技术领域……但当然!(再次,以非常宽松的意义。)我们绝对不试图查看诸如原始链接计数或特定名称计数之类的东西。 - arturomp
3个回答

3
根据您提供的上下文,这是一个监督学习问题。因此,您正在进行分类,而不是聚类。如果我误解了,请更新您的问题以说明。
我会从最简单的特征开始,即对页面的Unicode文本进行标记化,并使用字典将每个新标记转换为数字,并将标记的存在仅视为特征。
接下来,我会使用最简单的算法-我倾向于使用朴素贝叶斯,但如果您有一种简单的运行SVM的方法,那也很好。
将结果与某些基线进行比较-例如将最频繁的类分配给所有页面。
最简单的方法是否足够好?如果不是,请开始迭代算法和特征。

谢谢您的回答!我已经更新了我的问题,以澄清我们并没有固定使用我们拥有的训练数据,因为我们并不确定它是否是最合适的分类(出于健康怀疑的原因,因为它并不是直接来自我们)。同时感谢您提供的数字转换和基线提示。我们会记住这些的! - arturomp

3
如果你选择监督学习的方法,那么网页使用多种语言不应该有影响。如果你选择使用基于词袋模型的词汇特征,那么每种语言都将产生不同的特征集合,但这没关系。所有标准算法都可能会给出类似的结果,所以只需选择一个并使用它即可。我同意Yuval的看法,朴素贝叶斯是一个不错的起点,只有当它不能满足你的需求时,才尝试像SVM或随机森林这样的算法。
然而,如果你选择无监督学习的方法,那么文本不全是同一种语言可能会成为一个大问题。任何合理的聚类算法都会首先按语言对文本进行分组,然后在每种语言的聚类中按主题(如果你使用内容单词作为特征)进行分组。这是一个缺陷还是一个特点,完全取决于你想要对这些文本进行分类的原因。如果目的是按主题对文档进行分组,而不考虑语言,则不好。但是,如果你可以接受每种语言具有不同的类别,则你就有了与语言数量相同的独立分类问题。
如果你确实想要一个统一的类别集合,那么你需要找到一种方法来跨语言链接相似的文档。是否有任何一份文件使用了多种语言?如果是这样,你可以将它们用作一种统计上的罗塞塔石头,来链接不同语言中的单词。然后,使用类似于潜在语义分析的方法,你可以将其扩展到二阶关系:不在同一文档中出现但倾向于与出现在同一文档中的单词共同出现的不同语言中的单词。或者你可以使用锚文本或URL属性之类的东西,在语言无关的情况下为文档分配一个粗略的分类,并将其用作入门的方式。
但是,老实说,如果没有明确的类别概念(或者至少不知道什么是好的分类),那么进入分类问题似乎有些奇怪。想出类别是困难的部分,它将决定项目是成功还是失败。实际算法部分相当程式化。

1

主要答案是:尝试不同的方法。如果没有实际测试,很难预测哪种方法会产生最佳结果。因此,我将建议一些我首先尝试的方法,并描述它们的优缺点。

首先,我建议使用监督学习。即使数据分类不是非常准确,它仍可能比无监督聚类产生更好的结果。其中一个原因是在聚类期间使用的多个随机因素。例如,k-means算法依赖于启动过程时随机选择的点,这可能导致不同程序运行的结果非常不同(尽管x-means修改似乎规范了这种行为)。仅当底层元素在特征空间中产生良好分离区域时,聚类才会产生良好结果。

处理多语言数据的方法之一是使用多语言资源作为支持点。例如,您可以索引某些维基百科文章并创建不同语言中同一主题之间的“桥梁”。或者,您可以像this paper所描述的那样创建多语言关联词典。

关于方法,首先想到的是基于实例的语义方法,如LSI。它使用向量空间模型计算单词和/或文档之间的距离。与其他方法相比,它可以有效地处理同义词和多义词。该方法的缺点是计算效率低下和实现不足。 LSI的其中一个阶段利用了非常大的共现矩阵,对于大规模文档语料库将需要分布式计算和其他特殊处理。还有一种称为随机索引的LSA修改,它不构建完整的共现矩阵,但几乎找不到适当的实现。一段时间以前,我在Clojure中创建了这种方法的库,但现在它仍处于预-alpha状态,因此我不能建议使用它。尽管如此,如果您决定尝试一下,您可以在GitHub上找到用户“faithlessfriend”的项目“Clinch”(我不会发布直接链接以避免不必要的广告)。
除特殊的语义方法外,应遵循“简单为先”的原则。从这个角度来看,“朴素贝叶斯”是一个很好的起点。这里唯一需要注意的是,多项式版本的朴素贝叶斯更可取:我的经验告诉我,单词的数量确实很重要。
“支持向量机”是一种用于分类“线性可分数据”的技术,而文本数据几乎总是不可线性分离的(至少在任意一对文档中,都会出现几个常见词)。这并不意味着SVM不能用于文本分类-你仍然应该尝试使用它,但结果可能远低于其他机器学习任务。
我对“决策树”的经验不足,但我认为将其用于高效的文本分类似乎有些奇怪。我见过一些例子,结果非常好,但当我尝试使用C4.5算法进行此任务时,结果糟糕透了。我相信你应该找到一些已经实现了决策树的软件,并自己测试它们。知道比建议更好,毕竟。
每个主题还有很多值得讨论的地方,所以请随时提出更多关于具体主题的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接