多语言数据的特征选择和无监督学习+机器学习算法选择
Posted
技术标签:
【中文标题】多语言数据的特征选择和无监督学习+机器学习算法选择【英文标题】:Feature selection and unsupervised learning for multilingual data + machine learning algorithm selection 【发布时间】:2011-07-21 14:19:43 【问题描述】:问题
我想对数千个网站进行分类/分类/聚类/分组。有我们可以训练的数据,所以我们可以进行监督学习,但这不是我们收集的数据,我们也不坚持使用它——所以我们也在考虑无监督学习。
我可以在机器学习算法中使用哪些功能来处理多语言数据?请注意,其中一些语言可能尚未在自然语言处理字段中处理。
如果我要使用无监督学习算法,我是否应该只按语言划分数据并以不同方式处理每种语言?不同的语言可能有不同的相关类别(或没有,取决于你的心理语言学理论倾向),这可能会影响划分的决定。
我正在考虑使用决策树,或者支持向量机 (SVM) 来支持更多功能(根据我对它们的理解)。 This post 建议使用随机森林而不是 SVM。有什么想法吗?
欢迎务实的方法! (理论上也是,但这些可能会留到以后用。)
一些背景
我们正在尝试用 3 到 5 种语言(可能多达 10 种,但我们不确定)对包含数千个网站的语料库进行分类。
我们拥有数百个已分类网站形式的训练数据。但是,我们可以选择使用或不使用该数据集——如果其他类别更有意义,我们可以不使用我们拥有的训练数据,因为这不是我们一开始就收集的。我们正处于从网站上抓取数据/文本的最后阶段。
现在我们必须就上述问题做出决定。我已经使用 Brown Corpus 和 Brill 标注器完成了一些工作,但由于多语言问题,这将无法正常工作。
我们打算使用Orange 机器学习包。
【问题讨论】:
那么,这是有监督的还是无监督的? 我明白你的意思是 语义 分类/聚类,即按意义分组,而不是链接编号、情绪、提及公司名称等其他信息? @rmalouf:问题已经澄清了! @ffriend:我不确定我是否一定会将其描述为 semantic ,因为这可能会让我们进入切线的理论和技术领域……但可以肯定! (再次,在这个词的非常松散的意义上。)我们绝对不会试图查看原始链接计数或特定名称计数之类的东西。 【参考方案1】:根据您提供的上下文,这是一个监督学习问题。 因此,您正在进行分类,而不是聚类。如果我误解了,请更新您的问题以这样说。
我会从最简单的功能开始,即标记页面的 unicode 文本,并使用字典将每个新标记转换为数字,并简单地将标记的存在视为一个特征。
接下来,我将使用最简单的算法 - 我倾向于使用朴素贝叶斯,但如果您有一种简单的方法来运行 SVM,这也很好。
将您的结果与一些基线进行比较 - 比如说将最常见的类分配给所有页面。
最简单的方法是否足够好?如果没有,请开始迭代算法和特征。
【讨论】:
感谢您的回答!我已经更新了我的问题,以澄清我们没有准备使用我们拥有的训练数据,因为我们不能 100% 确定它是最合适的分类(出于健康的怀疑原因,因为它不是直接来自我们)。还要感谢数字翻译和基线提示。我们会牢记这些!【参考方案2】:如果您采用受监督的方式,那么网页采用多种语言这一事实应该不会产生影响。如果你说词汇特征(bag-o'-words style),那么每种语言最终都会产生不相交的特征集,但这没关系。所有标准算法都可能给出可比较的结果,所以只需选择一个并使用它。我同意 Yuval 的观点,即朴素贝叶斯是一个很好的起点,而且前提是它不能满足您尝试 SVM 或随机森林之类的需求。
但是,如果您采用无人监督的方式,那么文本并非全部使用同一种语言这一事实可能会成为一个大问题。任何合理的聚类算法都会首先按语言对文本进行分组,然后在每种语言中按主题之类的内容进行聚类(如果您使用实词作为特征)。这是错误还是功能将完全取决于您为什么要对这些文本进行分类。如果重点是按主题对文档进行分组,而不考虑语言,那就不好了。但是,如果您可以接受为每种语言设置不同的类别,那么是的,您遇到的单独分类问题与拥有的语言一样多。
如果您确实想要一组统一的类,那么您将需要某种方法来跨语言链接相似的文档。有超过一种语言的文件吗?如果是这样,您可以将它们用作一种统计罗塞塔石碑,将不同语言的单词联系起来。然后,使用潜在语义分析之类的东西,您可以将其扩展到二阶关系:不同语言中的单词从未出现在同一文档中,但往往与出现的单词同时出现。或者,也许您可以使用诸如锚文本或 URL 属性之类的东西以独立于语言的方式为文档分配粗略分类,并将其用作开始的一种方式。
但是,老实说,在没有清楚知道类是什么(或者至少什么是好的分类)的情况下进入分类问题似乎很奇怪。提出课程是困难的部分,它将决定项目是成功还是失败。实际的算法部分相当死记硬背。
【讨论】:
【参考方案3】:主要答案是:尝试不同的方法。如果没有实际测试,很难预测哪种方法会产生最佳结果。因此,我将建议一些我会首先尝试的方法并描述它们的优缺点。
首先,我推荐监督学习。即使数据分类不是很准确,它仍然可能比无监督聚类给出更好的结果。其原因之一是在聚类过程中使用了许多随机因素。例如,k-means 算法在启动过程时依赖于随机选择的点,这可能导致不同程序运行的结果非常不同(尽管 x-means 修改似乎使这种行为正常化)。只有当底层元素在特征空间中产生良好分离的区域时,聚类才会产生良好的结果。
处理多语言数据的方法之一是使用多语言资源作为支持点。例如,您可以索引一些***的文章,并在不同语言的相同主题之间建立“桥梁”。或者,您可以创建多语言关联字典,如 this paper 描述。
至于方法,首先想到的是基于实例的语义方法,例如LSI。它使用vector space model 来计算单词和/或文档之间的距离。与其他方法相比,它可以有效地处理同义词和多义词。这种方法的缺点是计算效率低下和实现泄漏。 LSI 的其中一个阶段使用了一个非常大的同现矩阵,对于大型文档语料库,这将需要分布式计算和其他特殊处理。对 LSA 进行了修改,称为 Random Indexing,它不构造完整的共现矩阵,但您几乎找不到合适的实现。前段时间我在 Clojure 中为这个方法创建了库,但它现在是 pre-alpha,所以我不推荐使用它。不过,如果你决定试一试,你可以在 github 上找到用户 'faithlessfriend' 的项目 'Clinch'(我不会发布直接链接以避免不必要的广告)。
除了特殊的语义方法之外,还必须使用规则“简单至上”。从这一点来看,朴素贝叶斯是一个正确的起点。这里唯一需要注意的是朴素贝叶斯的多项式版本更可取:我的经验表明,字数确实很重要。
SVM是一种对线性可分数据进行分类的技术,而文本数据几乎总是不是线性可分的(任何一对文档中至少出现几个常见词)。这并不意味着 SVM 不能用于文本分类——你仍然应该尝试一下,但结果可能比其他机器学习任务要低得多。
我没有足够的经验决策树,但是用它来进行有效的文本分类对我来说似乎很奇怪。我见过一些例子,它们给出了很好的结果,但是当我尝试使用 C4.5 算法来完成这项任务时,结果很糟糕。我相信你应该得到一些实现决策树的软件并自己测试它们。知道然后提出建议总是更好。
关于每个主题还有很多话要说,所以请随时就特定主题提出更多问题。
【讨论】:
以上是关于多语言数据的特征选择和无监督学习+机器学习算法选择的主要内容,如果未能解决你的问题,请参考以下文章