Tenga en cuenta que estoy haciendo todo en R.
El problema es el siguiente:
Básicamente, tengo una lista de currículums (CV). Algunos candidatos tendrán experiencia laboral antes y otros no. El objetivo aquí es: en función del texto en sus CV, quiero clasificarlos en diferentes sectores de trabajo. Soy particular en esos casos, en los que los candidatos no tienen ninguna experiencia / es estudiante, y quiero hacer una predicción para clasificar a qué sectores laborales pertenecerá este candidato después de la graduación.
Pregunta 1: Conozco algoritmos de aprendizaje automático. Sin embargo, nunca antes había hecho PNL. Me encontré con la asignación de Dirichlet Latente en Internet. Sin embargo, no estoy seguro de si este es el mejor enfoque para abordar mi problema.
Mi idea original: hacer de esto un problema de aprendizaje supervisado . Supongamos que ya tenemos una gran cantidad de datos etiquetados, lo que significa que hemos etiquetado correctamente los sectores de trabajo para una lista de candidatos. Entrenamos el modelo utilizando algoritmos ML (es decir, el vecino más cercano ...) y alimentamos esos datos no etiquetados , que son candidatos que no tienen experiencia laboral / son estudiantes, y tratamos de predecir a qué sector laboral pertenecerán.
Pregunta de actualización 2: ¿Sería una buena idea crear un archivo de texto extrayendo todo en un currículum e imprimiendo estos datos en el archivo de texto, de modo que cada currículum esté asociado con un archivo de texto, que contiene cadenas no estructuradas, y luego ¿aplica técnicas de minería de texto a los archivos de texto y hace que los datos se vuelvan estructurados o incluso crear una matriz de frecuencia de términos utilizados en los archivos de texto? Por ejemplo, el archivo de texto puede verse así:
I deployed ML algorithm in this project and... Skills: Java, Python, c++ ...
Esto es lo que quise decir con 'no estructurado', es decir, contraer todo en una sola cadena de línea.
¿Es este enfoque incorrecto? Corrígeme si crees que mi enfoque es incorrecto.
Pregunta 3: La parte difícil es: ¿cómo identificar y extraer las palabras clave ? ¿Usando el tm
paquete en R? ¿En qué algoritmo se tm
basa el paquete? ¿Debo usar algoritmos de PNL? En caso afirmativo, ¿qué algoritmos debería mirar? Por favor, muéstrame algunos buenos recursos para ver también.
Cualquier idea sería genial.
fuente
Simplemente extraiga palabras clave y entrene a un clasificador en ellas. Eso es todo, de verdad.
La mayor parte del texto en los CV no está realmente relacionado con las habilidades. Por ejemplo, considere la oración "Tengo experiencia y soy muy eficiente en Java". Aquí solo 1 de cada 7 palabras es un nombre de habilidad, el resto es solo un ruido que reducirá la precisión de su clasificación.
La mayoría de los CV no están realmente estructurados. O estructurado demasiado libremente. O use nombres inusuales para las secciones. O formatos de archivo que no conservan la estructura cuando se traducen a texto. Tengo experiencia extrayendo fechas, horas, nombres, direcciones e incluso intenciones de personas a partir de texto no estructurado, pero no una lista de habilidades (o universidad ni nada), ni siquiera de cerca.
Así que solo tokenice (y posiblemente elimine ) sus CV, seleccione solo palabras de la lista predefinida (puede usar LinkedIn o algo similar para obtener esta lista), cree un vector de características y pruebe un par de clasificadores (por ejemplo, SVM y Naive Bayes) .
(Nota: utilicé un enfoque similar para clasificar los perfiles de LinkedIn en más de 50 clases con una precisión> 90%, por lo que estoy seguro de que incluso la implementación ingenua funcionará bien).
fuente
Este es un problema complicado. Hay muchas formas de manejarlo. Supongo que los currículums se pueden tratar como documentos semiestructurados. A veces, es beneficioso tener una estructura mínima en los documentos. Creo que en los currículums verías algunos datos tabulares. Es posible que desee tratarlos como pares de valores de atributos. Por ejemplo, obtendría una lista de términos para el atributo "Conjunto de habilidades".
La idea clave es configurar manualmente una lista de frases clave como "habilidad", "educación", "publicación", etc. El siguiente paso es extraer los términos que pertenecen a estas frases clave ya sea explotando la estructura de alguna manera (como como tablas) o al utilizar la proximidad de los términos en torno a estas frases clave, por ejemplo, el hecho de que la palabra "Java" está muy cerca del término "habilidad" podría indicar que la persona es experta en Java.
Después de extraer esta información, el siguiente paso podría ser crear un vector de características para cada una de estas frases clave. Luego puede representar un documento como un vector con diferentes campos (uno para cada frase clave). Por ejemplo, considere los siguientes dos currículums representados con dos campos, a saber, proyecto y educación .
Doc1: {proyecto: (java, 3) (c, 4)}, {educación: (computadora, 2), (física, 1)}
Doc2: {proyecto: (java, 3) (python, 2)}, {educación: (matemáticas, 3), (computadora, 2)}
En el ejemplo anterior, muestro un término con la frecuencia. Por supuesto, mientras extrae los términos, debe detener y eliminar las palabras vacías. A partir de los ejemplos, queda claro que la persona cuyo currículum es Doc1 tiene más habilidades en C que la de D2. En cuanto a la implementación, es muy fácil representar documentos como vectores de campo en Lucene.
Ahora, el siguiente paso es recuperar una lista clasificada de currículums dada una especificación de trabajo. De hecho, eso es bastante sencillo si también representa consultas (especificaciones de trabajo) como vectores de campo. Solo necesita recuperar una lista clasificada de candidatos (currículums) usando Lucene de una colección de currículums indexados.
fuente
Trabajo para un sitio de empleos en línea y creamos soluciones para recomendar trabajos basados en currículums. Nuestro enfoque toma el título de trabajo de una persona (o el título de trabajo deseado si es un estudiante y es conocido), junto con las habilidades que extraemos de su currículum y su ubicación (que es muy importante para la mayoría de las personas) y encuentra coincidencias con trabajos basados en eso.
En términos de clasificación de documentos, tomaría un enfoque similar. Recomendaría calcular una matriz tf idf para cada currículum como un modelo estándar de bolsa de palabras, extrayendo solo el título del trabajo y las habilidades de la persona (para lo cual tendrá que definir una lista de habilidades para buscar), e ingresar eso en un ML algoritmo. Recomendaría probar knn, y un SVM, este último funciona muy bien con datos de texto de alta dimensión. Los SVM lineales tienden a funcionar mejor que los no lineales (por ejemplo, usando núcleos RBf). Si tiene resultados razonables, jugaría con funciones de extracción utilizando un analizador de lenguaje natural \ chunker, y también algunas frases personalizadas combinadas con expresiones regulares.
fuente