使用机器学习算法进行词分类

Posted

技术标签:

【中文标题】使用机器学习算法进行词分类【英文标题】:Word Classification using Machine Learning Algorithm 【发布时间】:2018-03-05 14:49:19 【问题描述】:

我是机器学习的新手。我目前想要的是对某些单词是否属于某个类别进行分类..

让我更具体地说,在输入一些单词时,我需要检查这些单词是否属于称为“马拉雅拉姆语”的语言。

例如:enthayi ninakk sugamanno?

这些是一些用英语表达的马拉雅拉姆语单词。在给出这样的输入时,它需要检查经过训练的数据,如果任何输入词属于“马拉雅拉姆语”类别,那么它需要显示它是马拉雅拉姆语。

我试图做的事情..

我尝试使用 NaiveBayesClassifier 对其进行分类,但它始终显示所有输入数据的积极响应。

train = [
('aliya','Malayalam')]
cl = NaiveBayesClassifier(train)
print cl.classify('enthayi ninakk sugamanno')

但是 print 语句给出的输出是 'Malayam'

【问题讨论】:

【参考方案1】:

您需要正数据和负数据来训练分类器。添加一堆英文文本或您的域中可能存在的任何替代文本并不难。但是您需要阅读 nltk 分类器的实际工作原理,否则您将只能处理您在训练数据中看到的单词:您需要选择并提取分类器将用来执行的“特征”它的工作。

因此(来自 cmets)您希望将单个单词归类为是否为马拉雅拉姆语。如果您的“特征”是完整的单词,那么您就是在用分类器浪费时间;只需制作一个 Python set() 马拉雅拉姆语单词,然后检查您的输入是否在其中。要走分类器路线,您必须弄清楚是什么让单词“看起来”马拉雅拉姆语(词尾?长度?音节结构?)并手动将这些属性转换为特征,以便分类器可以确定它们的重要性。

一种更好的语言检测方法是使用字母三元组:每种语言都有不同的常见和不常见三元组“配置文件”。您可以搜索它,或编写自己的代码。我用“余弦相似度”作为样本文本和参考数据之间距离的度量,得到了很好的结果。在this question 中,您将看到如何计算余弦相似度,但对于 unigram 计数;使用三元组进行语言识别。

trigram 方法的两个好处:你不依赖于熟悉的单词,或者想出聪明的特征,你可以将它应用于比单个单词更长的文本段(即使在过滤掉英语之后),这将给你更可靠的结果。 nltk 的langid 语料库提供了数百种常用语言的三元组计数,但编译您自己的统计数据也很容易。 (另见nltk.util.trigrams()。)

【讨论】:

我只是添加了一些替代方案,但事实仍然是系统显示与马拉雅拉姆语相同的输出,即使输入数据不同。 我建议你阅读文档。您没有正确初始化分类器,我很惊讶它甚至可以运行。您应该只创建它而不使用参数 (cl = NaiveBayesClassifier()),然后使用 cl.train(data) 使用 适当 格式的数据对其进行训练。您在哪里看到您使用的设置? stevenloria.com/… 从这里我得到了语法... 哦,那是textblob 接口!我不知道 textblob 对该输入有什么作用——这就是您将 import 语句从您的问题中的代码中删除的结果。但它对短语进行分类,而不是单词,从那个链接看,它看起来像是在做直接的词袋分类,即字典查找。如果它不适合您,请直接使用nltk 并阅读文档。或者(我的建议)使用字母三元组。 你能用训练和测试数据解释一个朴素贝叶斯算法的简单例子吗..

以上是关于使用机器学习算法进行词分类的主要内容,如果未能解决你的问题,请参考以下文章

机器学习算法原理与编程实践之朴素贝叶斯分类

Python机器学习:7.2 结合不同的分类算法进行投票

机器学习实践:基于支持向量机算法对鸢尾花进行分类

机器学习算法决策树-6 PRISM

学习机器学习:朴素贝叶斯和文本分类

机器学习:K-近邻分类