0

我有一个带有以下形式的注释的数据集:<Word/Phrase, Ontology Class>,其中 Ontology Class 可以是以下之一{Physical Object, Action, Quantity}。我已经从大量文本语料库中为我的特定本体模型手动创建了这个数据集。

因为这个过程是手动的,所以我确信我可能错过了我的语料库中的一些单词/短语。如果是这种情况,我正在寻找从同一语料库中自动提取其他单词的方法,这些单词具有与标记数据集中这些单词一样的“特征”。因此,第一个任务是在我进行提取其他单词的任务之前定义“特征”。

我可以使用任何标准技术来实现这一目标吗?

编辑:对不起。我应该提到这些是在 WordNet 中找不到的特定领域的词。

4

2 回答 2

1

看看NLTK 书的第 6 章。根据您的描述,这听起来像是基于特征(“特征”)提取的监督分类技术可能是一个不错的选择。从书中:

如果分类器是基于包含每个输入的正确标签的训练语料库构建的,则称为监督分类器。

您可以使用您手动编码的一些数据来训练您的分类器。它可能看起来像这样:

def word_features(name):
    features = {}
    features["firstletter"] = name[0].lower()
    features["lastletter"] = name[-1].lower()
    for letter in 'abcdefghijklmnopqrstuvwxyz':
        features["count(%s)" % letter] = name.lower().count(letter)
        features["has(%s)" % letter] = (letter in name.lower())
    return features

接下来,您可以根据已标记的一些数据训练分类器:

>> words = [('Rock', 'Physical Object'), ('Play', 'Action'), ... ]
>>> featuresets = [(word_features(n), g) for (n,g) in words]
>>> train_set, test_set = featuresets[500:], featuresets[:500]
>>> classifier = nltk.NaiveBayesClassifier.train(train_set)

您可能应该对已标记的一半数据进行训练。这样你就可以用另一半来测试分类器的准确性。继续处理这些特征,直到分类器的准确性达到您的要求。

nltk.classify.accuracy(classifier, test_set)

您可以按如下方式检查各个分类:

classifier.classify(word_features('Gold'))

如果您不熟悉 NLTK,那么您也可以阅读前面的章节。

于 2012-07-14T00:49:41.943 回答
1

正如 jfocht 所说,您需要一个分类器来执行此操作。要训​​练分类器,您需要一组具有特征及其分类的“事物”训练数据。然后,您可以输入具有特征的新“事物”并进行分类。

这里的关键是你没有功能,你只有文字。一个想法是使用 WordNet,这是一个花哨的字典,从单词的定义中生成特征。WordNet 的最佳功能之一是它具有一个单词的层次结构,例如,

cat -> animal -> living thing -> thing ....

可以简单地通过遵循层次结构来做到这一点,但如果不能,您可以从中添加特征并对其进行训练。这可能比使用单词本身作为特征要好得多。

不管你发现 Wordnet 是否有用,你都需要一个特征集来训练你的分类器,并且你还必须用这些特征标记所有未分类的数据,所以除非你有某种方法可以计算地完成特征部分,否则它将减少手工做的工作

于 2012-07-14T01:37:33.103 回答