Machine learning 基于机器学习算法的单词分类

Machine learning 基于机器学习算法的单词分类,machine-learning,nltk,svm,naivebayes,nltk-trainer,Machine Learning,Nltk,Svm,Naivebayes,Nltk Trainer,我是机器学习的新手。我现在想做的是对一些单词是否属于某一类别进行分类 让我更具体地说,在输入一些单词时,我需要检查这些单词是否属于一种称为“Malayalam”的语言 例子:enthayi ninakk sugamanno 这些是一些用英语表达的马来语单词。在进行类似的输入时,它需要检查经过训练的数据,如果任何输入的单词属于“Malayalam”类别,那么它需要显示它是Malayalam 我试着做的 我试图用NaiveBayesClassifier对其进行分类,但它总是对所有输入数据显示出积极的

我是机器学习的新手。我现在想做的是对一些单词是否属于某一类别进行分类

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

例子:enthayi ninakk sugamanno

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

我试着做的

我试图用NaiveBayesClassifier对其进行分类,但它总是对所有输入数据显示出积极的响应

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

但是print语句给出了一个输出“Malayalam”

您需要正反两方面的数据来训练分类器。添加一堆英文文本,或者在您的领域中添加任何可能的替代文本并不难。但您需要了解nltk分类器的实际工作原理,否则您将只能处理在培训数据中看到的单词:您需要选择并提取分类器将用于完成其工作的“特征”

所以(从评论中)你想把单个单词归类为马来语还是非马来语。如果你的“特征”是一个完整的词,你就是在浪费时间在分类器上;只需制作一个马来语单词的Python
set()
,并检查输入是否在其中。要使用分类器,您必须找出单词“看起来”马来语的原因(词尾?长度?音节结构?),并手动将这些属性转换为特征,以便分类器能够确定它们的重要性

一种更好的语言检测方法是使用字母三角图:每种语言都有不同的常见和不常见三角图的“轮廓”。你可以在谷歌上搜索,或者自己编写代码。我使用“余弦相似性”作为样本文本和参考数据之间距离的度量,得到了很好的结果。在中,您将看到如何计算余弦相似性,但对于单克计数;使用三叉图进行语言识别


三角图方法的两个好处是:你不依赖于熟悉的单词,也不依赖于巧妙的功能,你可以将它应用于比单个单词更长的文本(即使过滤掉英语),这将为你提供更可靠的结果。nltk的
langid
语料库提供了数百种常见语言的三元数,但也很容易编译自己的统计数据。(另请参见
nltk.util.trigrams()

您需要正反两种数据来训练分类器。添加一堆英文文本,或者在您的领域中添加任何可能的替代文本并不难。但您需要了解nltk分类器的实际工作原理,否则您将只能处理在培训数据中看到的单词:您需要选择并提取分类器将用于完成其工作的“特征”

所以(从评论中)你想把单个单词归类为马来语还是非马来语。如果你的“特征”是一个完整的词,你就是在浪费时间在分类器上;只需制作一个马来语单词的Python
set()
,并检查输入是否在其中。要使用分类器,您必须找出单词“看起来”马来语的原因(词尾?长度?音节结构?),并手动将这些属性转换为特征,以便分类器能够确定它们的重要性

一种更好的语言检测方法是使用字母三角图:每种语言都有不同的常见和不常见三角图的“轮廓”。你可以在谷歌上搜索,或者自己编写代码。我使用“余弦相似性”作为样本文本和参考数据之间距离的度量,得到了很好的结果。在中,您将看到如何计算余弦相似性,但对于单克计数;使用三叉图进行语言识别


三角图方法的两个好处是:你不依赖于熟悉的单词,也不依赖于巧妙的功能,你可以将它应用于比单个单词更长的文本(即使过滤掉英语),这将为你提供更可靠的结果。nltk的
langid
语料库提供了数百种常见语言的三元数,但也很容易编译自己的统计数据。(另请参见
nltk.util.trigrams()

我刚刚添加了一些备选方案,但事实上,即使输入数据不同,系统显示的输出与Malayalam相同。我建议您阅读文档。你没有正确初始化你的分类器,我很惊讶它居然会运行。您只需在不带参数的情况下创建它(
cl=NaiveBayesClassifier()
),然后使用适当格式的数据对其进行训练。您在哪里看到您正在使用的设置?从这里我得到了语法…哦,这就是
textblob
接口!我不知道textblob在输入时做了什么——这就是在问题的代码中保留
import
语句所得到的结果。但它对短语进行分类,而不是对单词进行分类,从这个链接上看,它似乎是在对单词进行直接分类,即查字典。如果它对您不起作用,请直接使用
nltk
并阅读文档。或者(我的建议)使用字母三角图。你能用火车和测试数据解释一个简单的朴素贝叶斯算法示例吗。我刚刚添加了一些替代方案,但事实是,即使输入数据不同,系统显示的输出与马来语相同。我建议你阅读文档。你没有正确初始化你的分类器,我很惊讶它居然会运行。您只需在不带参数的情况下创建它(
cl=NaiveBayesClassifier()
),然后使用适当格式的数据对其进行训练。你在哪里看到了你的设置