为什么LinkedIn简历匹配很糟糕
我最近从零开始构建了一个职位-候选人匹配系统,终于明白了为什么Linkedin的职位推荐如此糟糕,以及修复它们需要心理学,而不仅仅是更好的嵌入。
AI编程/Vibe Coding 遇到问题需要帮助的,联系微信 ezpoda,免费咨询。
我最近从零开始构建了一个职位-候选人匹配系统。这不是玩具。这是一个生产系统,接收真实的简历,并将它们与数万个真实的职位发布进行匹配。这种系统必须运作良好,才能影响人们的职业发展。
在我构建它之前,我和其他人一样。我会打开LinkedIn,看到与我背景毫无关系的职位推荐,然后想:这能有多难?我有个人资料。你有职位描述。只是……匹配它们。
现在我明白了。这确实是、几乎荒谬地困难。我的沮丧已经转变为更接近于同理心的东西。
以下是让我最惊讶的五个问题。
1、语言问题
当你尝试将简历与职位匹配时,首先学到的是职位广告是混乱的。
我不是说它们写得很差(虽然确实很多是这样)。我的意思是,公司描述同一角色的方式完全没有标准化。两份"营销经理"的发布可能几乎没有共同词汇。一份读起来像公司政策文件。另一份读起来像随意的Slack消息。一份用项目符号列出15个要求。另一份将所有内容埋在一面没有任何结构的文字墙中。
现在将其乘以数万个职位发布。每家公司都有自己的语气、自己的格式、自己的内部术语。有些明确列出所需技能。其他则描述职责并期望你推断技能。有些包括薪资信息、资历级别和团队规模。其他的只给你一个标题和两句话。
挑战不在于阅读一份职位广告。而在于将成千上万份标准化为可比较的东西。你需要从 wildly 不同的输入中提取相同的结构化信息,然后以一种让"50人创业公司的营销经理"和"财富500强公司的营销经理"都有意义且独特的方式来表示它。
我用NLP技术解决了这个问题。命名实体识别来提取技能、头衔和资格。LLM智能体将非结构化文本解析为结构化模板。它大部分时间都有效。但是人们如何描述同一工作的纯粹多样性让我感到谦卑。每次我以为我处理了所有边缘情况,新的一批职位广告就证明我错了。
这是整个问题的不性感基础。在你可以匹配任何东西之前,你必须理解你在匹配什么。而理解成千上万份非结构化、不一致、有时自相矛盾的职位发布本身就是一项工作。
2、分类法问题
一旦你解析了职位广告,就会遇到下一个障碍:这些角色实际上意味着什么?
"数据科学家"与"AI工程师"相同吗?有时是的。个人司机有资格驾驶卡车吗?取决于执照和上下文,但基本技能重叠比你想象的要多。"法律顾问"与"律师"相同吗?在某些司法管辖区,是的。在其他司法管辖区,它们是具有不同资格的完全不同的角色。
职位头衔本身几乎毫无意义。它们是公司根据内部惯例分配的标签,而不是基于任何共享标准。五人创业公司的"工程副总裁"和Google的"工程副总裁"除了名片上的文字外几乎没有共同之处。
这就是我的工业组织心理学背景派上用场的地方,比我学过的任何ML技术都有用。I/O心理学几十年来一直为这个问题构建框架。霍兰德职业代码根据工作类型和在该角色中蓬勃发展的人员类型对工作进行分类。O*NET为数千种职业提供详细的技能、能力和活动分类法。能力框架绘制了人们实际需要知道和做的事情,无论他们的头衔怎么说。
这些框架给了我纯NLP无法提供的东西:一种有原则的方式来说"这两个角色相关"或"这两个角色听起来相似但实际上不"。没有这种心理学支架,你只是在做带有额外步骤的字符串匹配。分类法问题不是数据问题。它是领域知识问题。领域是人类工作,这意味着专家是心理学家,而不是工程师。
3、相似性问题
假设你已经解析了所有职位广告并将所有内容分类到适当的分类法中。现在你需要衡量匹配度。这个候选人与这个角色有多相似?
标准方法是基于嵌入的相似度。你将候选人和职位编码为向量,计算余弦相似度,并按分数排名。听起来很优雅。在实践中,这是我在项目中最令人沮丧的几周里花时间的地方。
首先,是嵌入什么的问题。完整的简历?结构化摘要?单个技能?每个选择都会极大地改变你的结果。嵌入太多,你会得到噪音。嵌入太少,你会失去上下文。
然后是模型问题。我测试了多个嵌入模型,包括OpenAI、Google Gemini和多语言BERT变体的选项。它们的性能差异显著,哪个模型效果最好的排名与我从基准测试中预期的不同。基准测试主要在英语数据上进行训练和测试。我的数据是希伯来语。
这是没人警告你的另一件事。如果你在非英语语言工作,尤其是具有较少NLP工具、较少训练数据和不同形态结构的语言,你的里程将与排行榜所建议的截然不同。希伯来语形态丰富,从右到左书写,并且针对它调整的预训练模型要少得多。我从英语NLP研究中导入的每种技术都需要适应,有时是轻微的,有时是重大的。
即使你选择了一个模型,你也需要在数千个职业类别中计算相似度。在这个规模上,你需要仔细考虑效率。暴力成对比较无法扩展。你最终构建检索管道、基于RAG的分类系统和分层过滤方法,只是为了使计算可处理。数学很简单。工程不是。
4、资格问题
这个问题最让我惊讶,它也让我相信这个问题需要心理学,而不仅仅是工程。
大多数匹配系统将匹配度视为一个谱系:候选人与职位之间的重叠越多,分数越高。但这是错误的。匹配度不是线性的。它是曲线的。
一位销售副总裁申请初级销售开发职位并不是"95%匹配",因为他们拥有所有必需的技能和更多。他们是一个糟糕的匹配。他们会在一周内感到无聊,一个月内感到沮丧,三个月内离开。过度资格是一种真实现象,在I/O心理学中得到了充分研究,它预测人员流动、不满意和适得其反的工作行为,就像资格不足一样可靠。
同样,拥有五年后端工程经验的人并不是CTO角色的好匹配,仅仅因为技能关键词重叠。资历差距很重要。责任范围很重要。轨迹很重要。
一个好的匹配系统必须对此进行建模。它不能只是问"这个人有这些技能吗?"它必须问"考虑到他们在职业发展中的位置,这个角色对这个人的合理下一步是什么?"这是一个基本的心理学问题。它需要理解动机、发展轨迹和人与环境的匹配水平,这是关键词重叠永远不会捕捉到的。
我最终将明确的过度资格和资格不足信号构建到算法中,利用数十年的I/O心理学关于工作满意度和人-工作匹配的研究。这使得匹配度显著提高。但如果你纯粹将此视为信息检索问题,你永远不会发现这种改进。
5、大规模分类问题
最后一个主要挑战是任何大规模使用LLM的人都会识别出的:分类漂移。
LLM在分类非结构化文本方面非常出色。给一个提示良好的模型一个职位描述并要求它对角色进行分类,它会做得很好。问题是在规模上的一致性。
当你分类成数千个类别,跨越数万个文档时,小的不一致会复合。模型可能在一个语境中将"数据分析师"角色分类为"商业智能",在另一个语境中分类为"数据科学",具体取决于周围文本。它可能漂向流行类别而远离罕见但有效的类别。它可能基于微妙的上下文变化以不同方式解释相同的希伯来语术语。
更深层次的问题是,这种规模的分类需要反馈循环。你需要监控漂移,捕获错误分类,并不断改进你的提示词和参考集。这更像是训练模型,更像是管理一组初级分析师,他们大多很棒,但偶尔自信但错误。
6、我学到了什么
构建这个系统改变了我对职位匹配问题的思考方式。这不是搜索问题。它甚至不是真正的NLP问题。这是一个伪装成工程问题的心理学问题。
技术工具很重要。嵌入、NER、LLM、RAG,所有这些都很必要。但没有一个是足够的。困难的部分不是计算相似度。而是在人类工作、人类动机和人类职业的背景下定义相似度意味着什么。这需要大多数工程团队不具备的领域专业知识,也是大多数产品路线图没有考虑到的。
我开始这个项目时对LinkedIn的糟糕推荐感到轻微的恼火。我结束这个项目时带有真正的同理心。每个试图将人与职位匹配的平台都在努力解决这些相同的问题,通常是在比我处理的规模大得多、跨越更多语言的情况下。他们的推荐平庸不是懒惰或无能的迹象。这是这个问题确实是迄今为止最难的应用AI挑战之一的迹象。
好消息是它是可解决的。但解决它需要将工程人才与工作心理学的深层领域知识相结合的团队。它需要将I/O心理学视为一种核心能力,而不是锦上添花。它需要接受,如果你不了解你试图衡量什么,世界上最好的嵌入模型也无法拯救你。
我将在未来的文章中深入探讨技术实现。目前,我只想分享概念格局,因为我认为太多团队在理解心理学之前就跳到了工程。而这恰恰是相反的。
原文链接: I Built a Job-Matching Algorithm. Now I Understand Why LinkedIn Struggles.
汇智网翻译整理,转载请标明出处