使用机器学习算法进行单词分类
Word Classification using Machine Learning Algorithm
我是机器学习的新手。我目前想要的是分类一些词是否属于一个类别..
让我更具体一点,在输入一些词时,我需要检查这些词是否属于一种称为 "Malayalam" 的语言。
示例:enthayi ninakk sugamanno?
这些是一些用英语表达的马拉雅拉姆语单词。在提供这样的输入时,它需要检查经过训练的数据,如果任何输入词属于 'Malayalam' 类别,那么它需要显示它是马拉雅拉姆语。
我尝试过的..
我尝试用 NaiveBayesClassifier 对其进行分类,但它始终对所有输入数据显示正响应。
train = [
('aliya','Malayalam')]
cl = NaiveBayesClassifier(train)
print cl.classify('enthayi ninakk sugamanno')
但是打印语句给出了输出'Malayalam'
您需要正数据和负数据来训练分类器。添加一堆英文文本或您域中任何可能的替代文本并不难。但是您需要阅读 nltk 分类器的实际工作原理,否则您将只能处理您在训练数据中看到的单词:您需要 select 并提取 "features"分类器将用来完成它的工作。
所以(根据评论)您想要将单个单词归类为马拉雅拉姆语或非马拉雅拉姆语。如果您的 "features" 是完整的单词,那么您就是在浪费时间使用分类器;只需制作一个 Python set()
的马拉雅拉姆语单词,然后检查您的输入是否在其中。要走分类器路线,你必须弄清楚是什么让一个词 "look" 马拉雅拉姆语对你来说(结尾?长度?音节结构?)并手动将这些属性转换为特征,以便分类器可以决定它们的重要性是。
一种更好的语言检测方法是使用字母三字母组:每种语言都有不同的 "profile" 常见和不常见三字母组。您可以 google 解决它,或者编写您自己的代码。我用 "cosine similarity" 作为样本文本和参考数据之间距离的度量,结果很好。在 this question 中,您将看到如何计算余弦相似度,但对于一元组计数;使用三元组进行语言识别。
trigram 方法的两个好处:您不依赖于熟悉的单词,也不依赖于想出聪明的特征,并且您可以将它应用于比单个单词更长的文本片段(即使在过滤掉英语之后),这会给你更可靠的结果。 nltk 的 langid
语料库提供数百种常用语言的三元组计数,但也很容易编译您自己的统计数据。 (另见 nltk.util.trigrams()
。)
我是机器学习的新手。我目前想要的是分类一些词是否属于一个类别..
让我更具体一点,在输入一些词时,我需要检查这些词是否属于一种称为 "Malayalam" 的语言。
示例:enthayi ninakk sugamanno?
这些是一些用英语表达的马拉雅拉姆语单词。在提供这样的输入时,它需要检查经过训练的数据,如果任何输入词属于 'Malayalam' 类别,那么它需要显示它是马拉雅拉姆语。
我尝试过的..
我尝试用 NaiveBayesClassifier 对其进行分类,但它始终对所有输入数据显示正响应。
train = [
('aliya','Malayalam')]
cl = NaiveBayesClassifier(train)
print cl.classify('enthayi ninakk sugamanno')
但是打印语句给出了输出'Malayalam'
您需要正数据和负数据来训练分类器。添加一堆英文文本或您域中任何可能的替代文本并不难。但是您需要阅读 nltk 分类器的实际工作原理,否则您将只能处理您在训练数据中看到的单词:您需要 select 并提取 "features"分类器将用来完成它的工作。
所以(根据评论)您想要将单个单词归类为马拉雅拉姆语或非马拉雅拉姆语。如果您的 "features" 是完整的单词,那么您就是在浪费时间使用分类器;只需制作一个 Python set()
的马拉雅拉姆语单词,然后检查您的输入是否在其中。要走分类器路线,你必须弄清楚是什么让一个词 "look" 马拉雅拉姆语对你来说(结尾?长度?音节结构?)并手动将这些属性转换为特征,以便分类器可以决定它们的重要性是。
一种更好的语言检测方法是使用字母三字母组:每种语言都有不同的 "profile" 常见和不常见三字母组。您可以 google 解决它,或者编写您自己的代码。我用 "cosine similarity" 作为样本文本和参考数据之间距离的度量,结果很好。在 this question 中,您将看到如何计算余弦相似度,但对于一元组计数;使用三元组进行语言识别。
trigram 方法的两个好处:您不依赖于熟悉的单词,也不依赖于想出聪明的特征,并且您可以将它应用于比单个单词更长的文本片段(即使在过滤掉英语之后),这会给你更可靠的结果。 nltk 的 langid
语料库提供数百种常用语言的三元组计数,但也很容易编译您自己的统计数据。 (另见 nltk.util.trigrams()
。)