标签: tf-idf

NLTK是否实施了TF-IDF?

scikit-learn和中有TF-IDF实现gensim.

有简单的实现在Python中简单实现N-Gram,tf-idf和余弦相似性

为了避免重新发明轮子,

  • 在NLTK中真的没有TF-IDF吗?
  • 是否存在我们可以操作以在NLTK中实现TF-IDF的子包?如果有怎么样?

在这篇博文中,它说NLTK没有它.真的吗? http://www.bogotobogo.com/python/NLTK/tf_idf_with_scikit-learn_NLTK.php

python nlp nltk tf-idf

8
推荐指数
1
解决办法
2万
查看次数

pyspark:scarsey稀疏矩阵的稀疏向量

我有一个带有一列短句的火花数据框和一个带有分类变量的列.我想tf-idf对句子执行one-hot-encoding分类变量,然后将其输出到我的驱动程序上的稀疏矩阵,一旦它的尺寸小得多(对于scikit-learn模型).

以稀疏形式从火花中获取数据的最佳方法是什么?看起来toArray()稀疏矢量只有一种方法,它输出numpy数组.但是,文档确实说scipy稀疏数组可以用于代替spark sparse数组.

还要记住,tf_idf值实际上是一列稀疏数组.理想情况下,将所有这些功能集成到一个大型稀疏矩阵中会很不错.

scipy tf-idf apache-spark pyspark

8
推荐指数
1
解决办法
4099
查看次数

我是否在k-fold cross_validation中使用相同的Tfidf词汇表

我正在进行基于TF-IDF向量空间模型的文本分类.我只有不超过3000个样本.为了公平评估,我正在使用5倍交叉验证来评估分类器.但令我困惑的是,是否有必要TF-IDF在每个折叠交叉验证中重建向量空间模型.也就是说,我是否需要重建词汇表并重新计算IDF每个折叠交叉验证中的词汇量值?

目前我正在基于scikit-learn工具包进行TF-IDF转换,并使用SVM训练我的分类器.我的方法如下:首先,我将手中的样本除以3:1的比例,75%的样本用于拟合TF-IDF向量空间模型的参数.Herein,参数是大小词汇及其中包含的术语,也是IDF词汇中每个术语的价值.然后我在这里转换剩余部分TF-IDF SVM并使用这些向量进行5倍交叉验证(值得注意的是,我不使用之前的75%的样本用于转化).

我的代码如下:

# train, test split, the train data is just for TfidfVectorizer() fit
x_train, x_test, y_train, y_test = train_test_split(data_x, data_y, train_size=0.75, random_state=0)
tfidf = TfidfVectorizer()
tfidf.fit(x_train)

# vectorizer test data for 5-fold cross-validation
x_test = tfidf.transform(x_test)

 scoring = ['accuracy']
 clf = SVC(kernel='linear')
 scores = cross_validate(clf, x_test, y_test, scoring=scoring, cv=5, return_train_score=False)
 print(scores)
Run Code Online (Sandbox Code Playgroud)

我的困惑在于,我的方法是进行TF-IDF转换和进行5倍交叉验证是否正确,或者是否有必要TF-IDF使用列车数据重建矢量模型空间,然后转换为TF-IDF包含列车和测试数据的向量?如下:

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_index, test_index in …
Run Code Online (Sandbox Code Playgroud)

python tf-idf scikit-learn cross-validation

8
推荐指数
1
解决办法
1152
查看次数

TF-IDF 和非 TF-IDF 功能的准确性

我运行具有 TF-IDF 和非 TF-IDF 特征的随机森林算法。

总共特征数量约为 130k(在对 TF-IDF 特征进行特征选择之后),训练集的观察数量约为 120k。

其中大约 500 个是非 TF-IDF 功能。

问题是随机森林在同一测试集上的准确性等

- 只有非 TF-IDF 的特征是 87%

- TF-IDF 和非 TF-IDF 特征为 76%

准确性的显着恶化在我的脑海中引发了一些问题。

我与模型训练的相关代码如下:

drop_columns = ['labels', 'complete_text_1', 'complete_text_2']

# Split to predictors and targets
X_train = df.drop(columns=drop_columns).values
y_train = df['labels'].values


# Instantiate, train and transform with tf-idf models
vectorizer_1 = TfidfVectorizer(analyzer="word", ngram_range=(1,2), vocabulary=tf_idf_feature_names_selected)
X_train_tf_idf_1 = vectorizer_1.fit_transform(df['complete_text_1'])

vectorizer_2 = TfidfVectorizer(analyzer="word", ngram_range=(1,2), vocabulary=tf_idf_feature_names_selected)
X_train_tf_idf_2 = vectorizer_2.fit_transform(df['complete_text_2'])


# Covert the general features to sparse array
X_train = …
Run Code Online (Sandbox Code Playgroud)

python machine-learning tf-idf random-forest

8
推荐指数
1
解决办法
635
查看次数

结合TF-IDF(余弦相似度)和pagerank?

给定一个查询,我有一个文档的余弦分数.我也有文件pagerank.是否有标准的好方法将两者结合起来?

我在考虑增加它们

 Total_Score = cosine-score * pagerank
Run Code Online (Sandbox Code Playgroud)

因为如果你在pagerank或cosine-score上得到低分,那么文档就不那么有趣了.

或者最好是加权和?

Total_Score = weight1 * cosine-score + weight2 * pagerank
Run Code Online (Sandbox Code Playgroud)

这是否更好?然后你可能有零余弦分数,但是高分页,并且页面将显示在结果中.

search search-engine tf-idf cosine-similarity

7
推荐指数
1
解决办法
3411
查看次数

在sklearn中创建TfidfTransformer时,“ use_idf”到底做什么?

我正在使用Python 2.7中sklearn包中的TfidfTransformer。

当我对参数感到满意时,我对变得有些困惑use_idf,例如:

TfidfVectorizer(use_idf=False).fit_transform(<corpus goes here>)

究竟是什么use_idf做的时候或真或假?

由于我们正在生成一个稀疏的Tfidf矩阵,因此没有理由选择一个稀疏的Tfidif矩阵。这似乎是多余的。

这篇文章很有趣,但似乎没有提到。

文档仅说Enable inverse-document-frequency reweighting,这不是很有启发性。

任何意见表示赞赏。

编辑 我想我想通了。这非常简单:
文本-​​>计数
Counts-> TF,这意味着我们只有原始计数或Counts-> TFIDF,这意味着我们拥有加权计数。

令我感到困惑的是……因为他们叫它,TfidfVectorizer只有当您选择它作为TFIDF时,我才意识到这是真的。您也可以使用它来创建TF。

python tf-idf scikit-learn

7
推荐指数
2
解决办法
2385
查看次数

使用Gensim获得TF-IDF的单词分数

我试图根据他们的TF-IDF分数在语料库中找到最重要的单词.

按照https://radimrehurek.com/gensim/tut2.html上的示例进行操作.基于

>>> for doc in corpus_tfidf:
...     print(doc)
Run Code Online (Sandbox Code Playgroud)

TF-IDF得分在每次迭代中都会得到更新.例如,

所以这就是我目前如何获得每个单词的最终TF-IDF分数,

tfidf = gensim.models.tfidfmodel.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
d = {}
for doc in corpus_tfidf:
    for id, value in doc:
        word = dictionary.get(id)
        d[word] = value
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

提前致谢.

python tf-idf gensim

7
推荐指数
1
解决办法
6836
查看次数

按tf-idf对TfidfVectorizer输出进行排序(从最低到最高,反之亦然)

我在部分文本数据上使用了来自sklearn的TfidfVectorizer(),以了解每个功能(词)的术语频率感。我当前的代码如下

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf = TfidfVectorizer(analyzer='word', stop_words = 'english')

# fit_transform on training data
X_traintfidf = tfidf.fit_transform(X_train)
Run Code Online (Sandbox Code Playgroud)

如果我想将“ X_traintfidf”中每个术语的tf-idf值从最低到最高排序(反之亦然),例如top10,并将这些排序的tf-idf值排名分为两个Series对象,我应该如何进行从我的代码的最后一行开始?

谢谢。

我在读类似的主题,但不知道该怎么做。也许有人可以将该主题中显示的提示与此处的问题联系起来。

python ranking tf-idf scikit-learn

7
推荐指数
1
解决办法
3558
查看次数

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

我有一个包含n-gram的词汇表,如下所示.

myvocabulary = ['tim tam', 'jam', 'fresh milk', 'chocolates', 'biscuit pudding']
Run Code Online (Sandbox Code Playgroud)

我想用这些词来计算TF-IDF值.

我还有一个语料库字典如下(键=食谱号,值=食谱).

corpus = {1: "making chocolates biscuit pudding easy first get your favourite biscuit chocolates", 2: "tim tam drink new recipe that yummy and tasty more thicker than typical milkshake that uses normal chocolates", 3: "making chocolates drink different way using fresh milk egg"}
Run Code Online (Sandbox Code Playgroud)

我目前正在使用以下代码.

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf = TfidfVectorizer(vocabulary = myvocabulary, stop_words = 'english')
tfs = tfidf.fit_transform(corpus.values())
Run Code Online (Sandbox Code Playgroud)

现在我正在打印令牌或n-gram的配方1 corpus以及tF-IDF值,如下所示.

feature_names = tfidf.get_feature_names()
doc = …
Run Code Online (Sandbox Code Playgroud)

python nlp tf-idf scikit-learn

7
推荐指数
1
解决办法
7748
查看次数

TfidfVectorizer 如何计算测试数据的分数

在 scikit-learn 中TfidfVectorizer,我们可以拟合训练数据,然后使用相同的向量化器来转换我们的测试数据。对训练数据进行转换的输出是一个矩阵,表示给定文档中每个单词的 tf-idf 分数。

但是,拟合向量化器如何计算新输入的分数?我已经猜到了:

  1. 新文档中某个单词的分数通过将训练集中的文档中的相同单词的分数进行某种聚合来计算。
  2. 新文档被“添加”到现有语料库中并计算新分数。

我曾尝试从 scikit-learn 的源代码中推断出该操作,但无法完全弄清楚。它是我之前提到的选项之一还是完全其他选项?请协助。

nlp tf-idf scikit-learn tfidfvectorizer

7
推荐指数
1
解决办法
1767
查看次数