You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CountVectorizer使用自定义词汇表时无法识别对应词汇输出全零是什么原因?

问题根因

  • CountVectorizer默认采用按空格切分的单字分词逻辑,其默认token_pattern参数仅匹配长度≥2的独立单词,不会将空格连接的多词组合识别为一个完整token。你传入的自定义词汇表中Big Bazaar、Brand Factory等条目均为带空格的双词短语,和分词后输出的单个token完全无法匹配,因此统计得到的所有特征值均为0。

解决方案

方案1:调整ngram_range适配多词短语

设置ngram_range参数为(1,2),让模型同时提取1元独立词和2元组合短语,即可正确匹配双词实体:

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

final_vocab = {'Amazon',
'Big Bazaar',
'Brand Factory',
'Central',
'Cleartrip',
'Dominos',
'Flipkart',
'IRCTC',
'Lenskart',
'Lifestyle',
'MAX',
'MMT',
'More',
'Myntra'}
 
vect = CountVectorizer(vocabulary=final_vocab, ngram_range=(1,2))
token_df = pd.DataFrame(vect.fit_transform(['Big Bazaar','Brand Factory']).todense(), columns=vect.get_feature_names())

运行后Big Bazaar、Brand Factory对应的特征值会正确显示为1。如果词汇表中存在3词及更长的短语,对应调大ngram_range的上限即可,比如3词短语设置为ngram_range=(1,3)。

方案2:自定义分词器跳过空格切分

如果词汇表中所有条目都是固定的完整实体,可以自定义分词函数直接将整段输入作为单个token返回,完全规避默认分词的切分逻辑:

def custom_tokenizer(text):
    return [text]

vect = CountVectorizer(vocabulary=final_vocab, tokenizer=custom_tokenizer)

内容的提问来源于stack exchange,提问作者qaiser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:11