标签: tfidfvectorizer

使用sklearn TfidfVectorizer和已经标记化的输入?

我有一个标记化的句子列表,并希望适合一个tfidf矢量化器.我尝试了以下方法:

tokenized_list_of_sentences = [['this', 'is', 'one'], ['this', 'is', 'another']]

def identity_tokenizer(text):
  return text

tfidf = TfidfVectorizer(tokenizer=identity_tokenizer, stop_words='english')    
tfidf.fit_transform(tokenized_list_of_sentences)
Run Code Online (Sandbox Code Playgroud)

出错的地方

AttributeError: 'list' object has no attribute 'lower'
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?我有十亿句话,不想再次对它们进行标记.在此之前的另一个阶段,它们被标记化.

scikit-learn tfidfvectorizer

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

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

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

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

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

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

nlp tf-idf scikit-learn tfidfvectorizer

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

将 linear_kernel 或 cosine_similarity 用于 TfIdfVectorizer 时,出现错误“内核已死,正在重新启动”

使用 linear_kernel 或cosine_similarityfor 时TfIdfVectorizer,出现错误“内核已死亡,正在重新启动”

我正在为 TfID 方法 Vectorizer 和fit_transform一些文本数据运行 scikit 学习函数,如下例所示,但是当我想计算距离矩阵时,我收到错误"Kernel dead, restarting "

无论我使用的是cosine_similarity还是linear_kernel函数:

tf = TfidfVectorizer(analyzer='word' stop_words='english')
tfidf_matrix = tf.fit_transform(products['ProductDescription'])

 --cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)
 --cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
Run Code Online (Sandbox Code Playgroud)

也许问题是我的数据的大小?

我的 tiidf 矩阵是 (178350,143529),它应该生成一个 (178350,178350) cosine_sim 矩阵。

kernel cosine-similarity tfidfvectorizer

6
推荐指数
1
解决办法
2530
查看次数

为什么 sklearn tf-idf 矢量器给停用词最高分?

我使用 sklearn 为 nltk 库中 Brown 语料库的每个类别实现了 Tf-idf。有 15 个类别,每个类别的最高分都分配给一个停用词。

默认参数是use_idf=True,所以我使用 idf 。语料库足够大,可以计算出正确的分数。所以,我不明白 - 为什么停用词被赋予高值?

import nltk, sklearn, numpy
import pandas as pd
from nltk.corpus import brown, stopwords
from sklearn.feature_extraction.text import TfidfVectorizer

nltk.download('brown')
nltk.download('stopwords')

corpus = []
for c in brown.categories():
  doc = ' '.join(brown.words(categories=c))
  corpus.append(doc)

thisvectorizer = TfidfVectorizer()
X = thisvectorizer.fit_transform(corpus)
tfidf_matrix = X.toarray()
features = thisvectorizer.get_feature_names_out()

for array in tfidf_matrix:
  tfidf_per_doc = list(zip(features, array))
  tfidf_per_doc.sort(key=lambda x: x[1], reverse=True)
  print(tfidf_per_doc[:3])
Run Code Online (Sandbox Code Playgroud)

结果是:

[('the', 0.6893251240111703), ('and', 0.31175508121108203), ('he', 0.24393467757919754)] …
Run Code Online (Sandbox Code Playgroud)

python nltk tf-idf scikit-learn tfidfvectorizer

6
推荐指数
1
解决办法
1064
查看次数

sklearn TfidfVectorizer 中何时执行停用词去除过程?

如果我将自定义停用词列表传递给TfidfVectorizer,那么停用词到底什么时候会被删除?根据文档

\n\n
\n

stop_words : string{\xe2\x80\x98english\xe2\x80\x99}, list, 或None(默认)

\n\n

...

\n\n

如果是一个列表,则假定该列表包含停用词,所有这些停用词都将从结果标记中删除。仅适用于analyzer == \'word\'

\n
\n\n

所以这个过程似乎是在标记化之后发生的,对吗?之所以产生疑问,是因为如果标记化还涉及词干提取,我认为存在错误地跳过(而不是删除)停用词的风险,因为在词干提取之后,它不再被识别。

\n

python nlp stop-words scikit-learn tfidfvectorizer

5
推荐指数
1
解决办法
2729
查看次数

大型文档语料库上的 Sklearn TFIDF

在实习项目中,我必须对大量文件(~18000)执行 tfidf 分析。我正在尝试使用 sklearn 中的 TFIDF 矢量器,但我面临以下问题:如何避免一次将所有文件加载到内存中?根据我在其他帖子上读到的内容,使用可迭代似乎是可行的,但是如果我使用 [open(file) for file in os.listdir(path)] 作为fit_transform() 函数的raw_documents输入,我收到“打开文件太多”错误。预先感谢您的建议!干杯!保罗

python scikit-learn tfidfvectorizer

5
推荐指数
1
解决办法
4344
查看次数

如何使用 TF-IDF Vector 选择前 1000 个单词?

我有一个有 5000 条评论的文档。我对该文档应用了 tf-idf 。这里的sample_data包含5000条评论。我正在对具有一克范围的sample_data应用tf-idf向量化器。现在我想从样本数据中获取具有最高 tf-idf 值的前 1000 个单词。谁能告诉我如何获得最热门的单词?

from sklearn.feature_extraction.text import TfidfVectorizer
tf_idf_vect = TfidfVectorizer(ngram_range=(1,1))
tf_idf_vect.fit(sample_data)
final_tf_idf = tf_idf_vect.transform(sample_data)
Run Code Online (Sandbox Code Playgroud)

tf-idf python-3.x scikit-learn sklearn-pandas tfidfvectorizer

5
推荐指数
1
解决办法
6877
查看次数

在巨大的熊猫数据框的文本列上创建一个 TfidfVectorizer

我需要从存储在巨大数据框列中的文本中获取 TF-IDF 特征矩阵,从 CSV 文件(无法放入内存)加载。我正在尝试使用块迭代数据帧,但它返回的生成器对象不是TfidfVectorizer方法的预期变量类型。我想我在编写ChunkIterator如下所示的生成器方法时做错了什么。

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer


#Will work only for small Dataset
csvfilename = 'data_elements.csv'
df = pd.read_csv(csvfilename)
vectorizer = TfidfVectorizer()
corpus  = df['text_column'].values
vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())



#Trying to use a generator to parse over a huge dataframe
def ChunkIterator(filename):
    for chunk in pd.read_csv(csvfilename, chunksize=1):
       yield chunk['text_column'].values

corpus  = ChunkIterator(csvfilename)
vectorizer.fit_transform(corpus)
print(vectorizer.get_feature_names())
Run Code Online (Sandbox Code Playgroud)

任何人都可以请教如何修改上述ChunkIterator方法,或使用dataframe 的任何其他方法。我想避免为数据框中的每一行创建单独的文本文件。以下是一些用于重新创建场景的虚拟 csv 文件数据。

id,text_column,tags
001, This is the first …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas scikit-learn tfidfvectorizer

5
推荐指数
1
解决办法
2025
查看次数

将 TF-IDF 与预训练的词嵌入相结合

我有一个网站元描述列表(128k 描述;每个描述平均有 20-30 个单词),并且正在尝试构建一个相似度排名器(如:向我显示与此网站元描述最相似的 5 个网站)

它与 TF-IDF uni- 和 bigram 配合得非常好,我认为我还可以通过添加预先训练的词嵌入(准确地说是 spacy“en_core_web_lg”)来改进它。情节扭曲:根本行不通。从字面上没有得到一个好的猜测,它突然吐出完全随机的建议。

下面是我的代码。有什么想法我可能哪里出了问题吗?我是否在监督一些高度直观的事情?

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
import sys
import pickle
import spacy
import scipy.sparse
from scipy.sparse import csr_matrix
import math
from sklearn.metrics.pairwise import linear_kernel
nlp=spacy.load('en_core_web_lg')


""" Tokenizing"""
def _keep_token(t):
    return (t.is_alpha and 
            not (t.is_space or t.is_punct or 
                 t.is_stop or t.like_num))
def _lemmatize_doc(doc):
    return [ t.lemma_ for t in doc if _keep_token(t)]

def _preprocess(doc_list):     
    return [_lemmatize_doc(nlp(doc)) for doc in doc_list]
def dummy_fun(doc): …
Run Code Online (Sandbox Code Playgroud)

nlp tf-idf spacy word-embedding tfidfvectorizer

5
推荐指数
1
解决办法
5335
查看次数

查找每类 TF-IDF 分数最高的前 n 个术语

假设我有一个包含两列的数据框,其中pandas类似于以下一列:

    text                                label
0   This restaurant was amazing         Positive
1   The food was served cold            Negative
2   The waiter was a bit rude           Negative
3   I love the view from its balcony    Positive
Run Code Online (Sandbox Code Playgroud)

然后我在这个数据集上使用TfidfVectorizerfrom sklearn

找到每类 TF-IDF 得分词汇量前 n 名的最有效方法是什么?

显然,我的实际数据框包含比上面 4 行更多的数据行。

我的帖子的重点是找到适用于任何类似于上面的数据框的代码;4 行数据帧或 1M 行数据帧。

我认为我的帖子与以下帖子有很多相关性:

python python-3.x scikit-learn tfidfvectorizer

5
推荐指数
2
解决办法
3648
查看次数