He estado trabajando en un proyecto pequeño y personal que toma las habilidades laborales de un usuario y sugiere la carrera más ideal para ellos en función de esas habilidades. Utilizo una base de datos de listados de trabajo para lograr esto. Por el momento, el código funciona de la siguiente manera:
1) Procese el texto de cada listado de trabajo para extraer las habilidades que se mencionan en el listado
2) Para cada carrera (por ejemplo, "Analista de datos"), combine el texto procesado de los listados de trabajo para esa carrera en un documento
3) Calcular el TF-IDF de cada habilidad dentro de los documentos de carrera
Después de esto, no estoy seguro de qué método debo usar para clasificar las carreras en función de una lista de habilidades de un usuario. El método más popular que he visto sería tratar las habilidades del usuario como un documento también, luego calcular el TF-IDF para el documento de habilidad y usar algo como la similitud del coseno para calcular la similitud entre el documento de habilidad y cada uno documento de carrera.
Esto no me parece la solución ideal, ya que la similitud de coseno se usa mejor cuando se comparan dos documentos del mismo formato. Para el caso, TF-IDF no parece la métrica adecuada para aplicar a la lista de habilidades del usuario. Por ejemplo, si un usuario agrega habilidades adicionales a su lista, el TF para cada habilidad disminuirá. En realidad, no me importa cuál es la frecuencia de las habilidades en la lista de habilidades del usuario, solo me importa que tengan esas habilidades (y tal vez qué tan bien las conocen).
Parece que una mejor métrica sería hacer lo siguiente:
1) Para cada habilidad que tenga el usuario, calcule el TF-IDF de esa habilidad en los documentos de carrera
2) Para cada carrera, sume los resultados de TF-IDF para todas las habilidades del usuario
3) Rango de carrera basado en la suma anterior
¿Estoy pensando en la línea correcta aquí? Si es así, ¿hay algún algoritmo que funcione en este sentido, pero que sea más sofisticado que una simple suma? ¡Gracias por la ayuda!