Beachten Sie, dass ich alles in R mache.
Das Problem lautet wie folgt:
Grundsätzlich habe ich eine Liste von Lebensläufen. Einige Kandidaten haben bereits Berufserfahrung und andere nicht. Das Ziel dabei ist: Ich möchte sie auf der Grundlage des Texts in ihren Lebensläufen in verschiedene Berufsbereiche einteilen. Ich bin besonders in jenen Fällen, in denen die Kandidaten keine Erfahrung haben / Student sind, und ich möchte eine Vorhersage machen, um zu klassifizieren, welchen Berufsbereichen dieser Kandidat nach dem Abschluss am wahrscheinlichsten angehört.
Frage 1: Ich kenne Algorithmen für maschinelles Lernen. Allerdings habe ich noch nie NLP gemacht. Ich bin auf Latent Dirichlet Allocation im Internet gestoßen. Ich bin mir jedoch nicht sicher, ob dies der beste Ansatz ist, um mein Problem anzugehen.
Meine ursprüngliche Idee: Machen Sie dies zu einem überwachten Lernproblem . Angenommen, wir haben bereits eine große Menge gekennzeichneter Daten, was bedeutet, dass wir die Jobsektoren für eine Kandidatenliste korrekt gekennzeichnet haben. Wir trainieren das Modell mit ML-Algorithmen (dh dem nächsten Nachbarn ...) und geben diese nicht etikettierten Daten ein , die Kandidaten sind, die keine Berufserfahrung haben / Studenten sind, und versuchen vorherzusagen, zu welchem Berufsbereich sie gehören werden.
Update Frage 2: Wäre es eine gute Idee, eine Textdatei zu erstellen, indem Sie alles in einem Lebenslauf extrahieren und diese Daten in der Textdatei ausdrucken, sodass jeder Lebenslauf mit einer Textdatei verknüpft ist, die unstrukturierte Zeichenfolgen enthält, und dann wir angewandte Text-Mining-Techniken auf die Textdateien anwenden und die Daten strukturieren oder sogar eine Häufigkeitsmatrix von Begriffen aus den Textdateien erstellen? Die Textdatei könnte beispielsweise so aussehen:
I deployed ML algorithm in this project and... Skills: Java, Python, c++ ...
Dies ist, was ich mit "unstrukturiert" meinte, dh alles in einer einzigen Zeile zusammenfassen.
Ist dieser Ansatz falsch? Bitte korrigieren Sie mich, wenn Sie meinen, mein Ansatz sei falsch.
Frage 3: Der schwierige Teil ist: Wie identifiziere und extrahiere ich die Schlüsselwörter ? Verwenden Sie das tm
Paket in R? Welcher Algorithmus ist dertm
Paket? Soll ich NLP-Algorithmen verwenden? Wenn ja, auf welche Algorithmen sollte ich achten? Bitte weisen Sie mich auf einige gute Ressourcen hin, die Sie ebenfalls ansehen können.
Irgendwelche Ideen wären toll.
quelle
Extrahieren Sie einfach Schlüsselwörter und trainieren Sie einen Klassifikator . Das ist wirklich alles.
Der Großteil des Textes in Lebensläufen bezieht sich nicht auf Fähigkeiten. Denken Sie beispielsweise an den Satz "Ich bin erfahren und sehr effizient in Java". Hier ist nur 1 von 7 Wörtern ein Name für eine Fähigkeit, der Rest ist nur ein Geräusch, das Ihre Klassifizierungsgenauigkeit herabsetzt.
Die meisten Lebensläufe sind nicht wirklich strukturiert. Oder zu frei strukturiert. Oder verwenden Sie ungewöhnliche Namen für Abschnitte. Oder Dateiformate, bei denen die Struktur bei der Übersetzung in Text nicht erhalten bleibt. Ich habe Erfahrung darin, Daten, Zeiten, Namen, Adressen und sogar Absichten von Personen aus unstrukturiertem Text zu extrahieren, aber keine Liste von Fähigkeiten (oder Universitäten oder irgendetwas anderem), nicht einmal in der Nähe.
Also nur tokenize (und möglicherweise stammen ) Ihre Lebensläufe, wählen Sie nur Wörter aus vordefinierten Liste (Sie verwenden können , LinkedIn oder etwas ähnliches , diese Liste greifen), erstellen Sie einen Merkmalsvektor und versuchen , ein paar Klassifizierer (sagen wir, SVM und Naive Bayes) .
(Hinweis: Ich habe einen ähnlichen Ansatz verwendet, um LinkedIn-Profile mit einer Genauigkeit von> 90% in mehr als 50 Klassen zu klassifizieren. Daher bin ich mir ziemlich sicher, dass auch eine naive Implementierung gut funktioniert.)
quelle
Das ist ein kniffliges Problem. Es gibt viele Möglichkeiten, damit umzugehen. Ich denke, Lebensläufe können als semi-strukturierte Dokumente behandelt werden. Manchmal ist es vorteilhaft, wenn die Dokumente eine minimale Struktur aufweisen. Ich glaube, in Lebensläufen würden Sie einige tabellarische Daten sehen. Sie können diese als Attributwertpaare behandeln. Beispielsweise würden Sie eine Liste von Begriffen für das Attribut "Fähigkeitssatz" erhalten.
Die Schlüsselidee besteht darin, manuell eine Liste von Schlüsselsätzen wie "Fähigkeit", "Bildung", "Veröffentlichung" usw. zu konfigurieren. Der nächste Schritt besteht darin, Begriffe zu extrahieren, die sich auf diese Schlüsselsätze beziehen, indem entweder die Struktur auf irgendeine Weise ausgenutzt wird (z. B. B. Tabellen) oder durch Verwenden der Nähe von Begriffen um diese Schlüsselphrasen, z. B. die Tatsache, dass sich das Wort "Java" in unmittelbarer Nähe des Begriffs "Geschicklichkeit" befindet, könnte darauf hinweisen, dass die Person mit Java vertraut ist.
Nachdem Sie diese Informationen extrahiert haben, besteht der nächste Schritt möglicherweise darin, für jeden dieser Schlüsselbegriffe einen Merkmalsvektor zu erstellen. Sie können dann ein Dokument als Vektor mit verschiedenen Feldern darstellen (jeweils eines für eine Schlüsselphrase). Betrachten Sie beispielsweise die folgenden zwei Lebensläufe, die mit zwei Bereichen dargestellt werden, nämlich Projekt und Bildung .
Doc1: {project: (java, 3) (c, 4)}, {education: (computer, 2), (physics, 1)}
Doc2: {project: (java, 3) (python, 2)}, {education: (maths, 3), (computer, 2)}
Im obigen Beispiel zeige ich einen Term mit der Häufigkeit. Natürlich müssen Sie beim Extrahieren der Begriffe Stoppwörter entfernen. Aus den Beispielen geht hervor, dass die Person, deren Lebenslauf Doc1 ist, C besser beherrscht als D2. In Bezug auf die Implementierung ist es in Lucene sehr einfach, Dokumente als Feldvektoren darzustellen.
Der nächste Schritt besteht nun darin, eine Rangliste der Lebensläufe abzurufen, wenn eine Auftragsspezifikation vorliegt. Tatsächlich ist dies ziemlich einfach, wenn Sie Abfragen (Jobspezifikationen) auch als Feldvektoren darstellen. Sie müssen lediglich eine Rangliste der Kandidaten (Lebensläufe) mithilfe von Lucene aus einer Sammlung indizierter Lebensläufe abrufen.
quelle
Ich arbeite für eine Online-Jobsite und wir entwickeln Lösungen, um Jobs basierend auf Lebensläufen zu empfehlen. Unser Ansatz besteht darin, die Berufsbezeichnung einer Person (oder die gewünschte Berufsbezeichnung eines Studenten oder Bekannten) zusammen mit den Fähigkeiten, die wir aus ihrem Lebenslauf extrahieren, und ihrem Standort (der für die meisten Menschen sehr wichtig ist) anzugeben und Übereinstimmungen mit den darauf basierenden Berufen zu finden.
In Bezug auf die Klassifizierung von Dokumenten würde ich einen ähnlichen Ansatz verfolgen. Ich würde empfehlen, eine tf idf-Matrix für jeden Lebenslauf als Standardmodell für Wörter zu berechnen, wobei nur die Berufsbezeichnung und die Fähigkeiten der Person (für die Sie eine Liste der zu suchenden Fähigkeiten definieren müssen) extrahiert und in eine ML eingespeist werden Algorithmus. Ich würde empfehlen, es mit knn und einer SVM zu versuchen. Letztere funktioniert sehr gut mit hochdimensionalen Textdaten. Lineare SVMs schneiden in der Regel besser ab als nichtlineare (z. B. mit RBF-Kerneln). Wenn Sie vernünftige Ergebnisse erzielen, spiele ich mit dem Extrahieren von Features mit einem Parser \ Chunker in natürlicher Sprache und einigen benutzerdefinierten Ausdrücken, die mit regulären Ausdrücken abgeglichen werden.
quelle