当前位置: 首页 > 面试题库 >

带有TfidfVectorizer的ColumnTransformer产生“空词汇”错误

岳池暝
2023-03-14
问题内容

我正在运行一个非常简单的实验,ColumnTransformer目的是转换列数组,在此示例中为[“ a”]:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.compose import ColumnTransformer
dataset = pd.DataFrame({"a":["word gone wild","gone with wind"],"c":[1,2]})
tfidf = TfidfVectorizer(min_df=0)
clmn = ColumnTransformer([("tfidf", tfidf, ["a"])],remainder="passthrough")
clmn.fit_transform(dataset)

这给了我:

ValueError: empty vocabulary; perhaps the documents only contain stop words

显然,TfidfVectorizer可以fit_transform()自己做:

tfidf.fit_transform(dataset.a)
<2x5 sparse matrix of type '<class 'numpy.float64'>'
    with 6 stored elements in Compressed Sparse Row format>

发生这种错误的原因可能是什么?如何纠正?


问题答案:

那是因为您提供的是["a"]而不是"a"in ColumnTransformer。根据文档:

标量字符串或整数应在转换器期望X像一维数组(矢量)的情况下使用,否则会将二维数组传递给转换器。

现在,TfidfVectorizer需要一个字符串迭代器作为输入(因此是一维字符串数组)。但是,由于您要以的形式发送列名列表ColumnTransformer(即使该列表仅包含一个列),因此它将是二维数组,并将传递给TfidfVectorizer。因此,错误。

更改为:

clmn = ColumnTransformer([("tfidf", tfidf, "a")],
                         remainder="passthrough")

为了获得更多理解,请尝试使用以上内容从pandas DataFrame中选择数据。在执行以下操作时,请检查返回数据的格式(dtype,形状):

dataset['a']

vs

dataset[['a']]

更新 :@SergeyBushmanov,关于您对其他答案的评论,我认为您在误解文档。如果要在两列上执行tfidf,则需要传递两个转换器。像这样:

tfidf_1 = TfidfVectorizer(min_df=0)
tfidf_2 = TfidfVectorizer(min_df=0)
clmn = ColumnTransformer([("tfidf_1", tfidf_1, "a"), 
                          ("tfidf_2", tfidf_2, "b")
                         ],
                         remainder="passthrough")


 类似资料:
  • 我希望将Spring Cloud Stream Kafka用于我的Java/Spring服务,并且我需要生成汇流序列化消息,因为我有使用汇流API来使用我的消息的.NET和NodeJS客户端。 就我们所见,使用汇流序列化器的Spring Kafka正在为我们工作,而使用汇流序列化器的Spring Cloud Stream Kafka正在给我们带来问题。 为了演示这两种情况下的区别,我在GitHub

  • 词汇表 本表列出的是一些单词在本书中使用的翻译。这些单词大部分是专业术语,一部分是字典上没有的。 英文 中文 adapter 适配器 algorithm 算法 allocate 分配 allocator 分配器 amortize 分摊 argument 实参 associative container 关联容器 cast 映射 category 种类 component 组件 context 场景

  • 这是 Redux 的核心概念词汇表以及这些核心概念的类型签名。这些类型使用了流标注法进行记录。 State type State = any State (也称为 state tree) 是一个宽泛的概念,但是在 Redux API 中,通常是指一个唯一的 state 值,由 store 管理且由 getState() 方法获得。它表示了 Redux 应用的全部状态,通常为一个多层嵌套的对象。 约

  • @Directive more more @Injectable more @Input more more @Pipe more @ViewChildren more

  • 此词汇表包含了与Apache相关的一些常用术语的详细定义,以及对网络服务的一般说明,并提供了相关的更详细资料的连接。 定义 访问控制(Access Control) 对网络领域访问的限制。对Apache来说,通常是指对某些URL访问的限制。参见:认证、授权、访问控制 算法(Algorithm) 通过有限步骤解决问题的一个明确的公式或者一套规则。用于加密的算法通常称为加密算法(Cipher)。 Ap

  • 这是 React Router 库以及文档中常用术语的词汇表,并附有 type signatures(类型签名),以首字母顺序列出。 Action(动作) Component(组件) EnterHook LeaveHook Location LocationKey LocationState Path(路径) Pathname(路径名) Params(参数) Query QueryString R