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

构建RNN文本分类数据集:如何匹配语义最接近的类别词汇?

短文本Label与分类词汇的语义相似度匹配方案

针对你在文本分类数据集制作中,需要将DataFrame里1-3个单词的df['label']与分类词汇列表做语义匹配的需求,以下是两种高效的实现方案:

方法1:基于spaCy预训练词向量的相似度计算

spaCy的预训练模型内置词向量,可直接计算短文本语义相似度,适合快速实现。

步骤:

  1. 安装依赖与模型
    pip install spacy
    # 英文模型,中文场景替换为zh_core_web_md
    python -m spacy download en_core_web_md
    
  2. 编写匹配逻辑
    import spacy
    import pandas as pd
    
    # 加载预训练模型
    nlp = spacy.load("en_core_web_md")
    
    # 示例数据(替换为你的实际数据)
    df = pd.DataFrame({
        "label": ["customer support", "payment issue", "product return"]
    })
    category_list = ["customer service", "billing problem", "return request"]
    
    def get_closest_category(label, categories):
        label_doc = nlp(label.strip())
        # 计算当前label与所有分类的相似度
        similarity_pairs = [(cat, label_doc.similarity(nlp(cat))) for cat in categories]
        # 按相似度降序排序,取最高匹配项
        similarity_pairs.sort(key=lambda x: x[1], reverse=True)
        return similarity_pairs[0][0]
    
    # 应用到DataFrame
    df["matched_category"] = df["label"].apply(lambda x: get_closest_category(x, category_list))
    print(df)
    

注意事项:

  • 需使用md或lg级别的spaCy模型,sm模型无词向量,无法计算相似度
  • 中文场景请使用zh_core_web_md模型

方法2:基于Sentence-BERT的句向量相似度计算

Sentence-BERT专门优化了短文本向量生成,语义匹配精度更高,尤其适合表述不同但语义相近的场景。

步骤:

  1. 安装依赖
    pip install sentence-transformers
    
  2. 编写匹配逻辑
    from sentence_transformers import SentenceTransformer, util
    import pandas as pd
    
    # 加载轻量高效的预训练模型(多语言场景替换为paraphrase-multilingual-MiniLM-L12-v2)
    model = SentenceTransformer('all-MiniLM-L6-v2')
    
    # 示例数据(替换为你的实际数据)
    df = pd.DataFrame({
        "label": ["customer support", "payment issue", "product return"]
    })
    category_list = ["customer service", "billing problem", "return request"]
    
    # 预生成分类词汇的向量,避免重复计算
    category_embeddings = model.encode(category_list, convert_to_tensor=True)
    
    def get_closest_category(label):
        label_embedding = model.encode(label.strip(), convert_to_tensor=True)
        # 计算余弦相似度
        cos_scores = util.cos_sim(label_embedding, category_embeddings)[0]
        # 获取相似度最高的分类索引
        closest_idx = cos_scores.argmax().item()
        return category_list[closest_idx]
    
    # 应用到DataFrame
    df["matched_category"] = df["label"].apply(get_closest_category)
    print(df)
    

额外优化建议:

  • 若分类词汇列表规模较大,预生成所有分类的向量可大幅提升运行效率
  • 可设置相似度阈值(如0.5),当最高相似度低于阈值时标记为「未匹配」,交由人工处理
  • 多语言场景优先选择支持多语言的Sentence-BERT模型,适配不同语种的label匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:06:35