【问题标题】:Closest match for job titles最接近的职位匹配
【发布时间】:2015-03-18 10:12:49
【问题描述】:

我有已知职位的主列表,并正在寻找从搜索词中提取相同职位的方法。例如:

搜索职位:高级数字营销专家
提取到:高级数字营销

搜索职位:零售店内销售助理;全职
提取到:零售销售助理

所以我尝试提取有助于清理搜索查询的参数。

1) db 中 2 个令牌的出现。 (获得关于术语相互关联程度的数学评估) 示例:

 t01->t0 or t1        Senior || java--->226374 
 t02->t0 or t2        Senior || software--->2566450 
 t03->t0 or t3        Senior || engineer--->7220787 
 t12->t1 or t2        java || software--->315397
 t13->t1 or t3        java || engineer--->407682
 t23->t2 or t3        software || engineer--->11533495

 total =t01+t02+t03+t12+t13+t23

2) 令牌在整个数据库中的出现时间为 1。 示例:

t0->    Senior----->55042636  
t1->    java----->1655805
t2->    software----->26136204
t3->    engineer----->81574912

3) 我取了相关标记的总和并设置了 5% 的最小阈值,这给了我以下输出,即 (txy*100)/total > 5

我的输出:高级软件工程师
任何人都有类似项目的经验或进一步改进的想法?

【问题讨论】:

  • 不太清楚我是否理解。您是否假设查询始终是您的主列表中某些条目的超集?
  • @Thomas 不,它可能根本不是超集。示例:搜索的职位:纽约的全职 Java 开发人员 提取到:Java 开发人员 在数据库中,我没有任何职位名称会包含“纽约”一词,因此它们很容易被删除。
  • 您是否考虑过使用诸如 lucene 或 elasticsearch 之类的全文搜索引擎?它可能比数据库更好
  • @bedrin 感谢您的建议。我们会尝试一下。
  • 你最后是怎么解决的?

标签: java nlp extraction data-analysis summarization


【解决方案1】:

确定查询与列表条目之间相似性的一种标准方法是vector space model。粗略地说,您可以通过以下步骤来构建这样的模型:

  1. 定义向量空间的维度(离线)
term-list = []
for-all job titles in your master list:
    for-all words in the current job-title:
        canonicalize(current-word)  // e.g. to-lower-case, etc.
        if not contains(term-list, current-word):
            add(current-word, term-list)
sort(term-list)
n = size(term-list)

term-list 的长度n 是向量空间的大小。

  1. 将主列表中的每个职位与向量关联(离线)
vector-list = []
vector = []
fill(vector, 0, n-1, 0) // initialize to n zeros
for-all job titles in your master list:
    for-all words in the current job-title:
        canonicalize(current-word)  // e.g. to-lower-case, etc.
        term-index = index-of(current-word, term-list)
        vector[term-index]++
normalize(vector) // scale vector to length = 1
add(vector, vector-list)
  1. 将每个搜索query 也转换为向量(在线)

这与 2. 中的代码完全一样,只是您只有一个 for 循环(内部循环),您可以在其中迭代查询中的单词而不是主列表职位的单词。此外,出于显而易见的原因,您不需要vector-list

结果是标准化的query-vector

  1. 使用余弦相似度测量给定query-vector 的职位的相关性(在线)
similarities-vector = []
for-all job-title vectors in vector-list:
    similarity = dotProduct(query-vector, job-title-vector)
    add(similarity, similarities-vector)

结果是查询与主列表中每个条目之间的相似性值,存储在similarities-vector 中。

这是一个非常通用的模型,它的吸引力在于它的简单性。然而,对于手头的工作来说,它是否是一个很好的模型是有争议的,因为你的职位通常只包含少量的单词,这些单词可能只在每个职位中出现一次。不过你可以试试看。

【讨论】:

  • 经过几次试验后,我发现 Lucene 适合我的结果。它内部使用向量空间模型,所以我发现使用它比自己编写代码更容易。
  • 希望对此有更多建议。在解决这个问题的方法方面可能有另一个建议:)
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 2018-07-28
  • 2017-03-29
  • 1970-01-01
相关资源
最近更新 更多