使用 sklearn 计数向量器获取 n gram 后缀

Posted

技术标签:

【中文标题】使用 sklearn 计数向量器获取 n gram 后缀【英文标题】:Getting n gram suffix using sklearn count vectorizer 【发布时间】:2021-01-30 18:42:21 【问题描述】:

我正在尝试为一个单词获取 1,2,3 克后缀并将它们用作我的模型中的特征。

例子,

word = "Apple"
 1 gram suffix = 'e'
 2 gram suffix = 'le'
 3 gram suffix = 'ple'

我在 sklearn 中使用了 CountVectorizerngram_range=(1,3),但这给出了所有 n 克。我只需要 n gram 后缀。

我该怎么做?

另外,我是 NLP 新手,不知道如何在我的 ML 模型中使用这些 n 克作为特征。如何将这些“字符串”n-gram 特征转换为某种数字表示,以便在我的模型中使用它们。

有人可以帮帮我吗?

【问题讨论】:

【参考方案1】:

你可以定义一个自定义的analyzer 来定义如何从输入中获取特征。对于您的情况,从单词中获取后缀的简单 lambda 函数就足够了:

from sklearn.feature_extraction.text import CountVectorizer

word = ["Orange","Apple", "I"]
n=3
vect = CountVectorizer(analyzer=lambda x: (x[-i-1:] for i in range(0,min(n,len(x)))))
mat = vect.fit_transform(word).todense()

现在,如果我们从生成的矢量化矩阵构造一个数据框:

pd.DataFrame(mat, columns=vect.get_feature_names())

   I  e  ge  le  nge  ple
0  0  1   1   0    1    0
1  0  1   0   1    0    1
2  1  0   0   0    0    0

【讨论】:

好点 @SergeyBushmanov 已更新,现在应该适用于少于 3 个字符的单词 @yatu 除了 1、2、3 克之外,我还有另外两个特征,即单词的长度以及单词的最后一个字母是否为元音。我有一个目标变量,它是一个二进制目标。我习惯了常规的 ML,但 NLP 对我来说还是很新的,我无法将这些功能映射到我的目标列并训练它们。你能把我引向正确的方向吗?非常感谢!

以上是关于使用 sklearn 计数向量器获取 n gram 后缀的主要内容,如果未能解决你的问题,请参考以下文章

LLVM ScalarEvolution Pass 无法计算循环向量器的退出计数

Sklearn:将 lemmatizer 添加到 CountVectorizer

在python中使用sklearn为n-gram计算TF-IDF

从大型语料库生成 n-gram

如何使用 sklearn CountVectorizer and() 来获取包含任何标点符号作为单独标记的 ngram?

训练具有多个特征的 sklearn 分类器