将 NLTK 文本特征与 sklearn 向量化特征相结合

Posted

技术标签:

【中文标题】将 NLTK 文本特征与 sklearn 向量化特征相结合【英文标题】:Combing the NLTK text features with sklearn Vectorized features 【发布时间】:2016-06-07 12:45:29 【问题描述】:

我正在尝试将 NLTK 中使用的 dict 类型功能与每个实例的 SKLEARN tfidf 功能结合起来。

示例输入: instance=[["我正在处理文本数据"],["这是我的第二句话"]] instance = "我正在处理文本数据"

    def generate_features(instance):
        featureset["suffix"]=tokenize(instance)[-1]
        featureset["tfidf"]=self.tfidf.transform(instance)
        return features

    from sklearn.linear_model import LogisticRegressionCV
    from nltk.classify.scikitlearn import SklearnClasskifier
    self.classifier = SklearnClassifier(LogisticRegressionCV())
    self.classifier.train(feature_sets)

这个 tfidf 在所有实例上都经过训练。但是,当我使用此功能集训练 nltk 分类器时,它会引发以下错误。

self.classifier.train(feature_sets)
File "/Library/Python/2.7/site-packages/nltk/classify/scikitlearn.py", line 115, in train
X = self._vectorizer.fit_transform(X)
File "/Library/Python/2.7/site
packages/sklearn/feature_extraction/dict_vectorizer.py", line 226, in fit_transform
return self._transform(X, fitting=True)
File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/dict_vectorizer.py", line 174, in _transform
values.append(dtype(v))
TypeError: float() argument must be a string or a number

我理解这里的问题,它无法对已经矢量化的特征进行矢量化。但是有没有办法解决这个问题?

【问题讨论】:

请提供样本数据以重现您的问题 【参考方案1】:

对于那些将来可能会访问这个问题的人,我做了以下事情来解决这个问题。

from sklearn.linear_model import LogisticRegressionCV
from scipy.sparse import hstack

def generate_features(instance):
    featureset["suffix"]=tokenize(instance)[-1]
    return features

feature_sets=[(generate_features(instance),label) for instance in instances]
X = self.vec.fit_transform([item[0] for item in feature_sets]).toarray()
Y = [item[1] for item in feature_sets]
tfidf=TfidfVectorizer.fit_transform(instances)

X=hstack((X,tfidf))
classifier=LogisticRegressionCV()
classifier.fit(X,Y)

【讨论】:

【参考方案2】:

我不知道它是否有帮助。在我的例子中,featureset["suffix"] 的值必须是字符串或数字。例如:

featureset["suffix"] = "一些值"

【讨论】:

以上是关于将 NLTK 文本特征与 sklearn 向量化特征相结合的主要内容,如果未能解决你的问题,请参考以下文章

SKLearn 朴素贝叶斯:在 tfidf 向量化后添加特征

如何向矢量化数据集添加特征?

使用gensim和sklearn搭建一个文本分类器:文档向量化

文本挖掘预处理之TF-IDF

向量化与HashTrick在文本挖掘中预处理中的体现

TF-IDF