我正在尝试对我们的公司简历(集群)进行分类(简历)。共有大约100个简历。我们的想法是根据他们的简历内容找到类似的人。我已经将文档文件转换为文本文件,并将所有候选项读入python字典,格式为:
cvdict = { 'name1' : "cv text", 'name2', : 'cv text', ... }
我还删除了大多数标点符号,降低了标点符号,删除了数字等,并删除了长度小于x(4)的单词
我的问题:
聚类是否正确?如果没有,那么机器学习算法将成为此任务的合适初始焦点。
关于某些python代码的任何指针,我都可以使用这个代码来横切这个字典和#cluster;'内容。根据内容的聚类,它应该输出'keys'=候选名称作为聚类组。
答案 0 :(得分:2)
因此,据我所知,您希望在CV集中看到潜在的群组/群集。 cvdict的想法很棒,但你还需要将所有文本转换为数字!你走了一半。所以想想矩阵/ excel表/表。您拥有每行中每位员工的个人资料。 NAME1,cv_text1 NAME2,cv_text2 name3,cv_text3 ...
是的,正如您所猜测的那样,cv_text的长度可能会有所不同。有些人有一个冗长的简历,其他一些没有!哪些词可以对公司员工进行分类。一些我们需要如何使它们大小相同;此外,并非所有单词都是提供信息的,您需要考虑哪些单词可以捕捉您的想法;在机器学习中,他们称之为"功能"矢量或矩阵。因此,如果这个人在他的技能中提到了这个词,那么我的建议就是推动一系列文字和标记。
managment marketing customers statistics programming
name1 1 1 0 0 0
name2 0 0 0 1 1
name3 0 0 1 1 0
或者代替0/1矩阵,您可以将简历中提到的单词的次数。 再次,您可以从所有简历中提取所有可能的单词。 NLTK是一个用于进行文本分析的强大模块,它有一些内置函数可以帮助您完善文本。看看this slide的上半部分。
然后您可以使用任何类型的聚类方法,例如分层https://code.activestate.com/recipes/578834-hierarchical-clustering-heatmap-python/ 已有包进行此类分析;无论是scipy还是scikit,我相信每一个你都可以找到大量的例子。关键步骤是你正在研究的那个;将您的数据表示为矩阵。
答案 1 :(得分:2)
为早先的评论提供更多提示:
我不会扔掉少于4个字符的单词。相反,我会使用常用单词的停止列表。你不想丢弃像C ++或C#
上面构建矩阵的一个好方法是使用TF-IDF度量。它本质上是衡量一个单词在特定文档中出现的频率与它在整个集合中出现的频率的度量。所以像'the'这样的东西很常见,所以它们会很快被降级。如果贵公司现在只有5个人使用C ++,这将大大提高这个词的指标。
您可能需要考虑使用类似“移植算法”的词干分析器。该算法将结合“统计”和“统计”等词。
大多数机器学习算法都有很宽的矩阵问题。不幸的是,你的简历基础只有100个文件,被认为是相当低的,你会有多少潜在的术语。这些技术适用于谷歌和国家安全局的原因是因为人类语言在活跃使用中往往有成千上万的单词与他们必须索引的数十亿个文档相比。对于您的任务,我会尝试将您的数据集缩小到不超过30-40列。扔掉常用词是非常积极的。
不幸的是,大多数群集技术的最大弱点是您必须提前设置多个群集。人们使用的一种常见方法是设置某种类型的衡量群集有多好的方法,并首先使用非常少的群集开始运行群集算法,并持续增加,直到您的指标开始下降。查看Andrew Ng关于interwebs的机器学习课程。他很好地解释了这些技术。
当然,层次聚类不受第5点的影响。
您可以尝试构建决策树,而不是群集。虽然不是非常准确,但决策树对于构建模型的可视化具有很大的优势。通过查看三者,您可以很容易地看到构建方式的原因。
除了scipy和scikit,这是非常好的。看看Orange Toolbox。它有很多优秀的算法和良好的可视化工具。他们通过连接箭头框来编程它。在对模型满意后,您可以轻松地将其作为脚本转储到运行中。
希望这会有所帮助。