python:如何在scikit learn classifiers(SVM)中使用POS(部分语音)功能

2024-06-12 04:50:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将nltk.POS_标记返回的词性(POS)用于sklearn分类器,如何将它们转换为向量并使用它? e、 g

sent=“这是POS示例”

tok=nltk.tokenize.word_tokenize(已发送) pos=nltk.pos_标签(tok) 打印(pos)

这将返回以下结果 [('This','DT'),('is','VBZ'),('POS','NNP'),('example','NN')]

现在我无法将任何矢量器(scikitlearn中的DictVectorizer或FeatureHasher、CountVectorizer)应用到分类器中

请建议


Tags: 标记pos示例分类器标签sklearnthis向量
3条回答

合并单词和它的标签,比如“word/tag”,然后你可以把你的新语料库输入一个向量器,这个向量器计算单词(TF-IDF或wordofbags),然后为每个单词创建一个特征:

    wpt = nltk.WordPunctTokenizer()
    text = wpt.tokenize('Someone should have this ring to a volcano')
    text_tagged = nltk.pos_tag(text)
    new_text = []
    for word in text_tagged:
      new_text.append(word[0] + "/" + word[1])

    doc = ' '.join(new_text)

输出为

   Someone/NN should/MD have/VB this/DT piece/NN of/IN shit/NN to/TO a/DT volcano/NN

我知道这有点晚了,但我要在这里补充一个答案。

根据您需要的功能,您将需要以一种有意义的方式对文章进行编码。在使用ngrams进行支持向量机分类时,当我将原始句子粘贴到后置句子时,我得到了最好的结果,因此它看起来如下所示:

word1 word2 word3 ... wordn POST1 POST2 POST3... POSTn

完成后,我将其输入标准ngram或其他任何东西,并将其输入支持向量机。

这个方法保留了单个单词的信息,但也保留了POST模式的重要信息,当你给你的系统一个单词时,它以前从未见过,但tagger以前遇到过。

如果我对你的理解是对的,这有点棘手。一旦你标记了它,你的句子(或文档,或其他什么)就不再是由单词组成,而是由成对的单词(word+tag)组成,现在还不清楚如何从中提取最有用的标量向量。

大多数文本矢量器都会做一些事情,比如计算每个词汇表项出现的次数,然后为每个词汇表项创建一个功能:

 the: 4, player: 1, bats: 1, well: 2, today: 3,...

下一个文档可能有:

 the: 0, quick:5, flying:3, bats:1, caught:1, bugs:2

两者都可以存储为整数数组,只要您总是将同一个键放在同一个数组元素中(对于大多数文档,您将有很多零),或者作为一个dict。因此矢量器对许多“文档”执行此操作,然后再对其执行操作。

因此,您的问题归结为如何将成对列表转换为矢量器可以计数的项目的简单列表。

最简单的方法是将数据展平到

('This', 'POS_DT', 'is', 'POS_VBZ', 'POS', 'POS_NNP', 'example', 'POS_NN')

通常的计数会得到一个由8个词汇项组成的向量,每个词汇项出现一次。我重新命名了标签,以确保它们不会与单词混淆。

这会让你振作起来,但可能不会有太大的成就。这是因为仅仅知道一个样本中每个词性出现了多少次可能并不能告诉你你需要什么——注意,在向量器计算完之后,任何关于词性与哪个词一起消失的概念。

如果你想区分一些类似风格的东西,在上面运行一个分类器可能会有一些价值——小说可能有更多的形容词,实验室报告可能有更少的专有名称(也许),等等。

相反,您可以将数据更改为

('This_DT', 'is_VBZ', 'POS_NNP', 'example_NN')

这使得每个标记都与它所属的单词“绑定”,因此现在向量将能够区分“bat”用作动词的示例和仅用作名词的示例。这会告诉你一些稍有不同的东西——例如,在关于棒球的文本中,“bat”作为动词的可能性比在关于动物园的文本中更大。

你还可以做很多其他的安排。

为了在自然语言文本上使用向量方法获得好的结果,您可能需要花很多心思(和测试)在您希望向量器生成和使用的特性上。这在很大程度上取决于你最终要完成什么。

希望能有所帮助。

相关问题 更多 >