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

时间:2017-09-24 15:12:50

标签: machine-learning nltk svm naivebayes nltk-trainer

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

让我更具体一点,在输入一些词语时,我需要检查这些词是否属于“马拉雅拉姆语”。

示例:enthayi ninakk sugamanno?

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

我试图做的事情......

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

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

但是print语句给出了输出'Malayalam'

1 个答案:

答案 0 :(得分:2)

您需要正面和负面数据来训练分类器。添加一堆英文文本,或者你域中可能存在的替代方案都不会很难。但是你需要阅读nltk分类器的实际工作方式,或者你只能处理你在训练数据中看到的单词:你需要选择并提取"功能和# 34;分类器将用它来完成它的工作。

所以(从评论中)你想要将个别单词归类为马拉雅拉姆语。如果你的功能"完整的话,你是在用分类器浪费你的时间;只需制作Malayalam字样的Python contacts=# select * from "SequelizeMeta"; name ------ (0 rows) ,并检查您的输入是否在其中。要走分类器路线,你必须弄清楚是什么使一个词"看起来" Malayalam给你(结尾?长度?音节结构?)并手动将这些属性转换为特征,以便分类器可以决定它们的重要性。

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

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