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

如何基于词嵌入实现文档过滤:保留招聘启事,排除简历

解决方法:过滤简历,保留招聘启事

一、先修复现有相似度方法的问题并添加过滤逻辑

你的现有代码有个明显bug:排序时用的列名word_embedding_similarity不存在,实际生成的列是similarity,这会导致报错。另外,单纯排序没做过滤,所以才会同时返回两类文档。

修改后的相似度过滤代码

from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

def filter_jobs_by_similarity(dataframe, reference_text, column_name='processed_content', embedding_model=None, threshold=0.3):
    # 处理参考文本,生成向量
    text_tokens = reference_text.lower().split()
    text_vector = []
    for word in text_tokens:
        if word in embedding_model:
            text_vector.append(embedding_model[word])
    # 处理空向量情况(参考文本无匹配词)
    if not text_vector:
        text_vector = np.zeros(embedding_model.vector_size)
    else:
        text_vector = sum(text_vector) / len(text_vector)  # 用平均向量代替求和,避免长度影响相似度
    
    # 处理DataFrame里的文本向量
    def get_doc_vector(tokens):
        vecs = [embedding_model[word] for word in tokens if word in embedding_model]
        if not vecs:
            return np.zeros(embedding_model.vector_size)
        return sum(vecs) / len(vecs)
    
    dataframe['doc_vector'] = dataframe[column_name].str.lower().str.split().apply(get_doc_vector)
    
    # 计算余弦相似度
    dataframe['similarity'] = dataframe['doc_vector'].apply(lambda x: cosine_similarity([text_vector], [x])[0][0])
    
    # 核心过滤逻辑:
    # 如果参考文本是**典型简历**,则保留相似度低于阈值的文档(招聘启事和简历差异大)
    # 如果参考文本是**典型招聘启事**,则保留相似度高于阈值的文档
    filtered_df = dataframe[dataframe['similarity'] < threshold].drop(columns=['doc_vector'])
    
    return filtered_df.sort_values(by='similarity', ascending=True)

使用说明

  1. 选一段典型的简历文本作为reference_text(比如从你用的标注数据里挑一份简历内容),设置合适的阈值(比如0.3,可根据实际数据调整),这样相似度低的就是招聘启事。
  2. 改用平均向量代替求和,避免长文本的向量被过度放大,导致相似度计算失真。

二、更可靠的方案:用文本分类模型直接区分

单纯的相似度方法容易误判(比如招聘启事里提到“简历投递”这类词会和简历相似度变高),用标注好的数据训练分类模型是更稳妥的方式:

步骤:

  1. 用你手上的标注数据(区分简历/招聘),把processed_content作为特征,标签设为0=简历,1=招聘启事。
  2. 用TF-IDF或预训练语言模型提取文本特征,训练分类器(比如Logistic Regression、朴素贝叶斯,或者BERT)。
  3. 用训练好的模型预测你的目标DataFrame里的文档类型,过滤掉标签为0的简历。

示例代码(TF-IDF+Logistic Regression)

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

# 假设你有标注好的训练数据:train_df(含processed_content和label列)
train_df = ...  # 加载标注数据,label=1是招聘,0是简历

# 构建分类管道
clf_pipeline = Pipeline([
    ('tfidf', TfidfVectorizer(max_features=5000, stop_words='english')),
    ('lr', LogisticRegression())
])

# 训练模型
clf_pipeline.fit(train_df['processed_content'], train_df['label'])

# 预测并过滤目标DataFrame
target_df['predicted_label'] = clf_pipeline.predict(target_df['processed_content'])
filtered_jobs_df = target_df[target_df['predicted_label'] == 1].drop(columns=['predicted_label'])

这种方法的准确率远高于单纯的相似度匹配,因为模型会学习到两类文档的核心特征差异(比如简历会强调个人经历、技能,招聘启事会强调岗位要求、公司信息)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:25:26