我想建立一个推荐系统,为你职业生涯的下一步提供建议。
关于数据集。大约 50,000 名用户拥有以下信息:
- 技能(标签、字符串值)
- 他们所做的每一项工作(嵌入式职位)
- 他们去过的每一所学校
现在推荐系统应该告诉你职业生涯的下一步是什么,以及你是否需要另一项技能或学位。
你应该如何建立这样一个系统?(监督,无监督(推荐系统,...),...)
我想建立一个推荐系统,为你职业生涯的下一步提供建议。
关于数据集。大约 50,000 名用户拥有以下信息:
现在推荐系统应该告诉你职业生涯的下一步是什么,以及你是否需要另一项技能或学位。
你应该如何建立这样一个系统?(监督,无监督(推荐系统,...),...)
我曾经尝试过类似的东西。我使用了一种你不会想到的方法,但它给出了一些令人惊讶的好结果。
我在 Tensorflow 中使用了 NMT(神经机器翻译)模型。网上有一些越南语->英语翻译的例子。我将其更改为从“旧职位”翻译为“新职位”,并在我的数据集上对其进行了训练。这很容易做到,您不需要修改任何代码,除了可以稍微调整模型(例如,文档的长度现在比机器翻译示例中的要短)。
这种方法的缺点是在使用它进行推理时只考虑最近的职位。但是,您可以尝试将所有以前的职位和其他数据(学校等)连接起来作为输入文本,以生成单个职位作为输出,这样您就可以确保您正在利用他们的整个职业道路。
我建议调整架构的各个方面(层数、以前使用的作业数量、现成的 word2vec 与特定领域训练的 word2vec 等),直到您针对所使用的任何评估指标获得最佳性能。
您可以采用的另一种方法是获取每个标题的 doc2vec,并训练某种 RNN/LSTM 以在给定所有先前 vec 的情况下预测下一个 vec。然后,您需要在输出上进行后处理阶段,以将输出 vec 转换为文本。不幸的是,我不知道这里有避免从头开始构建模型架构的捷径,所以这种方法更有效。
当然还有其他解决问题的方法,但由于没有其他人回答,但我想我会给出我的建议。
首先了解如何衡量系统的性能/准确性是一个好主意。
你说你的推荐系统的输出是“你职业生涯的下一步可以是什么”,但是如果系统告诉我我应该成为一名面包师,你将如何衡量推荐的好坏?它会基于它对我下一个职业发展的预测程度吗?系统是否允许我就它的推荐给它反馈,并相应地评估它自己?
一旦澄清了这一点,那么你就在游戏中。您有某种拟合优度函数,g您现在正在寻找一个最大化(或最小化,取决于您的定义)的函数,其中 x 是数据,y 是推荐值。fg(f(x), y)
然后还有两个问题:如何对解释数据x和目标变量y进行编码?同样,这在很大程度上取决于目标是什么,但鉴于您拥有的数据似乎是非标准化的,我确实会将所有内容都转换为文本挖掘问题:您需要将数据映射到一组标记(英语词或任何其他符号),过滤掉您知道携带少量信息(标点符号、数字等)的模式,并将词袋转换为向量(例如,word2vec@Tom 提到的 with )。您可能还希望将 y 分类,或者相反,将其扩展为词向量,以便可以比较相似的工作。
获得一个预测/估计的模型y是x很容易的部分。你会发现很多现成的学习者可以尝试(例如在sklearn(python) 或中tensorflow)。