Analyse de Descriptions d'Emploi avec Word2Vec

L'analyse des descriptions d'emploi (JD) est un élément essentiel dans le domaine du traitement automatique des ressources humaines. À l'ère du big data, les technologies d'appariement automatique entre les CV des candidats et les besoins des entreprises atteignent une maturité remarquable. Ce processus comprend principalement trois modules : l'analyse des JD, l'analyse des CV, et leur correspondance.

Dans cet article, nous nous concentrerons spécifiquement sur l'analyse des descriptions d'emploi.

Començons directement par le sujet technique.

  1. Prétraitement des données

Conversion d'encodage

cat news_tensite_xml.dat | iconv -f gbk -t utf-8 -c | grep "<content>"  > corpus.txt 

Après avoir segmenté le texte avec jieba, nous utilisons l'outil puissant de Google, word2vector, pour transformer le texte en vecteurs sémantiques.

#! /usr/bin/env python
#coding=utf-8
import jieba
import json
import codecs

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

source_file = codecs.open('../donnees_entreprise/jd_100w.json','r',encoding='utf-8')
output_file = open('./donnees_entrainement.txt','w')

compteur = 1

for ligne in source_file:
    donnees = json.loads(ligne)
    if donnees['emploi'].get('description_poste',1)!=1:
        contenu = donnees['emploi']['description_poste'].strip().\
        replace('\r',' ').replace('\n',' ').replace('\t',' ').replace('。',' ').replace('
,',' ').replace('、',' ').replace('|',' ').replace(':',' ').split()
        contenu = ' '.join(contenu)
        if compteur<=5:
            print contenu[:50]+"*"*20
            compteur+=1

        segments = jieba.cut(contenu)
        for element in segments:
            output_file.write(element.encode('utf-8')+' ')

  1. Utilisation de word2vec
./word2vec -train donnees_entrainement.txt -output vecteurs_60.bin -cbow 0 -size 60 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1  

Cette commande indique que le fichier d'entrée est donnees_entrainement.txt, le fichier de sortie est vecteurs_60.bin, nous n'utilisons pas le modèle cbow (le modèle par défaut est Skip-Gram). La dimension de chaque vecteur de mot est de 60, et la taille de la fenêtre d'entraînement est de 5, ce qui signifie que nous considérons cinq mots avant et cinq mots après chaque cible (dans le code réel, il y a également un processus de sélection aléatoire de la fenêtre, où la taille de la fenêtre est inférieure ou égale à 5). Nous n'utilisons pas la méthode NEG, mais la méthode HS. Le paramètre -sample définit le seuil d'échantillonnage : plus un mot apparaît fréquemment dans l'échantillon d'entraînement, plus il a de chances d'être échantillonné. -binary à 1 signifie que le résultat est stocké en binaire, tandis que 0 correspond à un stockage normal (qui permet d'ouvrir et de voir les mots et leurs vecteurs correspondants).

Outre les paramètres mentionnés, word2vec possède d'autres options utiles :

  • -alpha : définit le taux d'apprentissage (par défaut 0.025)
  • -min-count : définit la fréquence minimale (par défaut 5), les mots apparaissant moins de fois sont ignorés
  • -classes : définit le nombre de clusters (le code source utilise la méthode de clustering k-means)
# Exemple : clustering en 100 classes

./word2vec -train donnees_entrainement.txt -output classes.txt -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -classes 100

Tri des résultats

sort classes.txt -k 2 -n > classes_triees.txt  

Étiquettes: traitement de langage naturel Word2Vec vectorisation de texte analyse de CV nlp

Publié le 17 juin à 21h55