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

如何将DataFrame中列表格式的词列表转换为数值向量?

分词列表转模型可用数值格式方案

你已经提前完成分词步骤,不需要再重复做分词处理,根据后续选用的分类器类型,选对应的转换方法即可:

  • 如果用传统机器学习分类器(逻辑回归、随机森林、SVM、XGBoost这类):优先选TF-IDF向量化
    注意sklearn内置的TfidfVectorizer/CountVectorizer默认会对输入字符串做分词,你已经拿到分词列表了,只要自定义一个直通分析器跳过内置分词步骤,就能避免重复处理出错:

    from sklearn.feature_extraction.text import TfidfVectorizer
    
    # 自定义分析器,直接返回传入的分词列表
    def pass_through(tokens):
        return tokens
    
    tfidf = TfidfVectorizer(
        analyzer=pass_through,
        min_df=2, # 过滤只在不到2条短信里出现的极稀有词
        max_df=0.9, # 过滤在90%以上短信里都出现的无意义停用词
        ngram_range=(1,2) # 加入二元词组,捕捉短信里的固定搭配,比如“验证码”“快递取件”这类
    )
    
    # 输出为稀疏矩阵格式,可以直接喂给所有兼容sklearn接口的传统分类器
    X = tfidf.fit_transform(df['分词列名'])
    

    这个方案速度最快、可解释性强,对SMS这种短文本场景效果足够用,是做短信分类的首选基线方案。缺点是不保留词序、没有语义信息,无法适配深度模型。

  • 如果用深度学习模型(TextCNN、BiLSTM这类):用词表映射+序列填充
    这类模型需要输入固定长度的数字id序列,先基于全量分词构建词表,把每个词映射成唯一数字id,再把所有短信序列补到统一长度即可:

    from tensorflow.keras.preprocessing.text import Tokenizer
    from tensorflow.keras.preprocessing.sequence import pad_sequences
    
    # 设定词表最大容量,未登录词统一标记为<OOV>
    tokenizer = Tokenizer(num_words=10000, oov_token="<OOV>")
    tokenizer.fit_on_texts(df['分词列名'])
    
    # 分词列表转id序列
    seq = tokenizer.texts_to_sequences(df['分词列名'])
    # 统一序列长度,短信普遍偏短,max_len设为30-60就够用,长序列截断、短序列补0
    X = pad_sequences(seq, maxlen=50, padding='post', truncating='post')
    

    后续可以在模型开头加Embedding层训练词向量,也可以直接加载预训练的Word2Vec、GloVe词向量初始化,进一步提升效果。

  • 如果打算用预训练语言模型(BERT、ERNIE、DistilBERT这类):提前分好的词列表用不上
    预训练模型有自己的子词分词逻辑,直接把原始未分词的短信文本传入对应模型的官方Tokenizer,输出的input_ids、attention_mask就可以直接喂给模型训练,不需要额外做格式转换。

额外注意:你要同时预测主类型和子类型属于多任务分类场景,标签列也需要分别用LabelEncoder转成从0开始的数字格式再输入模型。

SMS数据集示例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:21:34