1

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

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

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

因此,我尝试提取有助于清理搜索查询的参数。

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

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

4

1 回答 1

1

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

  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)

的长度nterm-list向量空间的大小。

  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此外,出于明显的原因,您不需要 a 。

结果是归一化的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.

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

于 2015-01-20T09:19:06.577 回答