分享

用机器学习来计算工作技能的匹配度

 树悲风 2016-08-13

本文使用Word2vec结合K-Means聚类,Word2vec结合层次聚类,和隐含狄利克雷分布三种方法描述工作技能的相关性,在评估整体关联性方面它们都是有效的,最终结果在很大程度上取决于实际应用场景。


此项目的成员包括Brett AmdurChristopher RedinoAmy (Yujing) Ma。他们毕业与今年1月11日至4月1日举办的为期十二周的纽约数据科学全职训练营。这篇文章基于他们的终期项目 —— 顶点项目(Capstone Project)而完成。阅读原文查看详细内容。


I. 概述


此项目的主要内容是应用机器学习方法来判断简历中工作技能的匹配程度。一家机构向纽约数据科学研究院的学生陈述了此项目,他们希望找到合适的学生来完成项目。本文的三个作者接受了这个项目,他们当时都是研究院的全日制学生。作者们与该机构的几名代表合作完成了这篇文章中的分析内容。尽管该机构不愿意我们透露他们的姓名,但是作者仍然想表达对此机构的感谢。


这个项目的总体思路是揭示简历上展现的技能背后的语义相似性和关系。一种基于语义的评估工作技能相似性的方法有许多的潜在应用场景,它主要通过理解简历中的文本从而在简历中发现技能之间的关系。虽然有其他方法来判断工作技能之间的语义相关度,但机器学习技术带给我们更有趣和强大的结果。


II. 词向量


该机构为我们提供了大约250,000份简历的文本数据。在我们的项目开展之前,该机构已经给每份简历加上了是否与“数据”或是“分析”相关的标签。此数据还包括了一份经过机构编译的清单,罗列了大约3000种相关的工作技能。


我们决定用Word2vec的词向量技术来评测清单中3000项技能的相似度,这里假设简历的文本数据就是Word2vec的文本集合。也许部分读者还不熟悉Word2vec,Word2vec技术用单词在文本中的相隔距离作为相关性的指标。具体来说,Word2vec创建了一个共现矩阵,用来表示文本集中某个单词在一个“窗口”范围内与另一个单词相邻出现的频率。用户可以调节窗口大小,即相邻单词的个数。然后利用奇异值分解的方法降低共现矩阵的维度。得到的结果是空间中的一个向量,空间的各个维度表示隐语义,因此:


  1. 在向量空间中相近的两个单词的语义可能更相近;

  2. 每个维度表示一种特定语义下的含义。


一个经常被引用的Word2vec例子就是表示“国王”的词向量减去表示“男人”的词向量,再加上表示“女人”的词向量,计算结果得到的向量与表示“女王”的词向量非常接近。自2013年谷歌研究员公布Word2vec技术以来,它在判断术语相关性方面已经显现出卓越的成绩,而且仍将是一个重要的研究方向。


针对这个项目,我们在250k份简历上训练了Word2vec模型,窗口大小设为12,向量空间的维度设为100.我们用Ben Schmidt开发的版本。使用skip-gram方法来创建共现矩阵,使用了8GB的内存和2.5GHz的处理器,整个处理时间大约为3.5个小时。


向量空间创建之后,我们下一步任务就是评估向量空间对工作技能相关度的描述准确性。我们在向量空间使用聚类的方法,以评估词向量是否将工作技能聚集到对应的类别中。


a. K-Means聚类


我们以K-Means聚类方法为例。广义地定义,K-Means方法是将一组样本按照它们在特征空间中的相互距离划分为若干个子类,子类的个数可以自定义,即k的值。我们这里使用3000个技能作为样本来聚类,依据它们在Word2vec向量空间中的词向量(简历文本集和技能列表中的单词都使用Snowball方法提取了词干)。我们武断地决定将词分为15个簇。我们说自己的决定武断是因为我们用R的NbClust包来判断15~25之间的最佳k取值,却没有很好的结论。


当然,在评价一个算法识别词的意义时会含有主观性的因素。但基于我们的目测判断,Word2vec对工作技能的聚类结果相对出色。每个簇内的单词的含义与其它簇内的单词含义似乎有明显差别。我们也看到,某些簇内的单词还可以被进一步分为多个子类,但鉴于我们任意选择的K值,这个结果并不奇怪(这表明事实上选择一个更大的k值就会拆散这些簇)。最重要的是,我们没有看到非常多的混合组,这意味着我们没有看到意义相近的词被分配到不同的簇。在评估聚类结果时,我们对这15个簇的含义做了如下的解释:


  1. 软件开发和数据科学

  2. 会计/项目管理

  3. 电信

  4. 通用技术

  5. 法律/职业/其它

  6. 大数据/数据工程

  7. 医学

  8. 人力资源

  9. 一般业务

  10. 设计与项目管理

  11. 银行和金融

  12. 网站开发

  13. 教育类专题

  14. 社交媒体

  15. 体育/艺术/旅游/媒体


我们还可以浏览技能列表中任意两个词的距离,以及特征空间中与其最接近的50个词。举个例子,下图是与“机器学习”技能最相近的50个技能:



github上有完整的技能列表以及它们分属的类别,还有此部分的R语言代码。


b. 分层聚类


在K-Means聚类方法的基础上,我们可以进一步对簇运用一种层次聚类的方法,同样是基于词向量。如同K-Means方法,层次聚类方法也是基于“距离”对一组样本聚类,但一开始并不固定簇的数量,该程序是以每个样本自身的簇作为起始,然后按照相互之间的距离依次结合这些簇。簇之间的距离度量与K-Means方法中对独立样本的距离度量是不一样的,实际上如何在集群之间实现这种“联动方法”有几个不同的选择。对当前的任务而言,基于工作技能对词向量聚类,我们偏向于全连接的方法,它认为集群间的距离就是被合并的簇内任意两个单独的样本之间的最大距离。之所以选择这种方法,因为它不容易聚类形成包含很少样本的簇,我们希望避免出现这种情况,因为少数几个大簇的情况要好于很多小簇且每个小簇只包含少量的技能。


这种持续合并从而形成更大的簇的过程可以通过树状图(dendrogram)的结构可视化展现。通常,树状图会根据特定的应用场合限制树的高度,但是在本例中我们将展现完整的树状图,如下图所示。



当把这个树状图作为一个整体考虑时,这个层次聚类的结果不容易解释。我们可以从这个过程中借鉴其它一些方面。正如在K-Means聚类的分析中提到的,其中一些簇比其它的簇要大得多,并且它们还可以进一步被细分。这里也是一样,在此情况下,进一步细分就意味着向下延伸树。我们很难从上图中学到什么内容(即使添加了标签),如果在某个合理的高度做截断,比如20层,树状图就变成了只有22个簇,与上一种方法所得到的15个簇非常相似。



这更易于管理,并很容易观察树状图的分支给出相应的簇的标签,比如分支1,这显然是一个社会媒体平台相关的技能组成的簇。



这张局部树状图看起来比之前的社交媒体簇更有用,因为我们能很容易地从图中读出子簇的信息,比如为何Instagram与pinterest被认为更相似,也许是因为它们都是图像相关的应用平台。这类图最有用之处就是对于那些本身庞大而难以在树状图中直接观察的子类,我们也可以对其再做切割,观察局部图的局部图。


除了有明确的方法进一步做分组的优势之外,在K-Means聚类的同时再做分层聚类的另一个简单原因就是它可能会给一个不同的答案。这两种方法都需要设定几个自定义的输入参数,这些参数没有明确的对错之分,比如联动方法的簇的数目,所以如果一些技能被分类到两个不同的簇也不应该令人感到惊讶。使用聚类分析作为一个整体,我们可以发现除了刚才的词向量距离来测量”技能关联度”之外的另一种方法。


聚类分析作为一个整体,可以用另一种方式做可视化;将其表示为一个矩阵,每一行是技能列表,列表示树状图的高度。



因此,矩阵的每个元素表示了该技能落在树状图的哪一层。注意观察靠近表的右侧的元素,所有类别的值最终都变为了“1”,就如同在树状图的顶部所有技能都归为一类。若要衡量两个技能的相似程度,我们只需要找到这两行元素值相等时,最靠近左侧的那一列。这给我们提供了一维额外的特征,在今后的应用产品中,我们可以计算这些距离的加权平均值。


计算树状图的脚本、完整的表和计算距离的脚本都已经上传到了github


III. LDA和数据可视化


我们的研究也使用了主题模型,称为隐含狄利克雷分布(Latent Dirichlet Allocation, LDA)。我们使用这个方法来寻找一堆工作简介所涵盖到的话题。


下图所示的截屏图像是LDA模型的可视化交互工具界面。通常,我们把一些工作简介作为一个语料库,其中的技能作为我们要发现的术语。由于每个主题是许多词语的概率分布,因此很难解释这些主题。因此,我们开发了这个互动的应用程序,以帮助我们对主题进行解释。每一个圆圈代表一个主题。鼠标悬停或点击一个圆圈,你可以看到这个主题最相关的术语。



要查看相关的术语,你可以简单地点击每一个术语。例如,我们可以点击“数据”一词,各个圆圈就会调整大小来显示“数据”一词与各个主题的关系。此应用显示,“数据”与每个主题都相关,尤其与第8、9和11主题相关。



通过例子,在使用这个应用程序中,我们可以找到一些有趣的关系:


  • “风险”,“信用”、“投资”和“金融”共享相同的主题(如主题2、16和18)。这些主题都在PC1和PC2右上角。

  • “数据”和“业务”是无处不在。

  • “亚马逊”和“云”是主题10、13、3和2下的一个非常重要的术语;而“谷歌”和“营销”与主题15、4、5、17高度相关。这表明亚马逊与云服务和数据库更相关,而谷歌的产品在市场营销中很受欢迎。


总结


纵观我们所使用的三种方法 —— Word2vec结合K-Means聚类,Word2vec结合层次聚类,和隐含狄利克雷分布 —— 那么究竟哪种方法“最好”的描述了工作技能的相关性。因为在评估整体关联性方面它们都是有效的,最终结果在很大程度上取决于实际应用场景。例如,k-均值是线性复杂度,而层次聚类的运行时间是二次函数,因此,需要分析的数据量可能会变得非常重要。同时,LDA一般用于比较文本,而Word2vec更擅长逐词地比较。所以,如果应用与评估简历或职位描述最相似有关,那么LDA可能效果更好(也看到一些结合Word2vec和LDA优势的有趣的新研究)。其它应用程序的需求可能会突出不同的方法之间的差异,并驱动算法的选择。


原文:Using Machine Learning to Measure Job Skill Similarities 

翻译:KK4SBB 

责编:周建丁(zhoujd@csdn.net)


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多