Ich habe an einem kleinen, persönlichen Projekt gearbeitet, das die beruflichen Fähigkeiten eines Benutzers aufgreift und basierend auf diesen Fähigkeiten die für ihn idealste Karriere vorschlägt. Ich benutze eine Datenbank mit Stellenangeboten, um dies zu erreichen. Im Moment funktioniert der Code wie folgt:
1) Verarbeiten Sie den Text jeder Stellenanzeige, um die Fähigkeiten zu extrahieren, die in der Liste aufgeführt sind
2) Kombinieren Sie für jede Karriere (z. B. "Data Analyst") den verarbeiteten Text der Stellenangebote für diese Karriere in einem Dokument
3) Berechnen Sie die TF-IDF für jede Fähigkeit in den Karriereunterlagen
Danach bin ich mir nicht sicher, welche Methode ich verwenden soll, um Karrieren basierend auf einer Liste der Fähigkeiten eines Benutzers einzustufen. Die beliebteste Methode, die ich gesehen habe, wäre, die Fähigkeiten des Benutzers ebenfalls als Dokument zu behandeln, dann die TF-IDF für das Fähigkeitendokument zu berechnen und die Ähnlichkeit zwischen dem Fähigkeitendokument und jedem zu berechnen Karrieredokument.
Dies scheint mir nicht die ideale Lösung zu sein, da die Kosinusähnlichkeit am besten zum Vergleichen von zwei Dokumenten desselben Formats verwendet wird. In diesem Fall scheint TF-IDF nicht die geeignete Metrik zu sein, um überhaupt auf die Skill-Liste des Benutzers angewendet zu werden. Wenn ein Benutzer beispielsweise seiner Liste zusätzliche Fertigkeiten hinzufügt, wird die TF für jede Fertigkeit gelöscht. In Wirklichkeit ist es mir egal, wie häufig die Fähigkeiten in der Liste der Fähigkeiten des Benutzers aufgeführt sind - es ist mir nur wichtig, dass sie über diese Fähigkeiten verfügen (und vielleicht, wie gut sie diese Fähigkeiten kennen).
Es scheint, als wäre eine bessere Metrik, Folgendes zu tun:
1) Berechnen Sie für jede Fertigkeit, die der Benutzer besitzt, die TF-IDF dieser Fertigkeit in den Laufbahnunterlagen
2) Summieren Sie für jede Karriere die TF-IDF-Ergebnisse für alle Fähigkeiten des Benutzers
3) Rang Karriere basierend auf der obigen Summe
Denke ich hier in die richtige Richtung? Wenn ja, gibt es Algorithmen, die in diese Richtung funktionieren, aber ausgefeilter sind als eine einfache Summe? Danke für die Hilfe!
quelle
Antworten:
Vielleicht könnten Sie Worteinbettungen verwenden, um die Distanz zwischen bestimmten Fertigkeiten besser darzustellen. Zum Beispiel sollten "Python" und "R" näher beieinander liegen als "Python" und "Zeitmanagement", da beide Programmiersprachen sind.
Die ganze Idee ist, dass Wörter, die im selben Kontext vorkommen, näher sein sollten.
Sobald Sie diese Einbettungen haben, verfügen Sie über eine Reihe von Fähigkeiten für den Kandidaten und eine Reihe von Fähigkeiten unterschiedlicher Größe für die Jobs. Sie können dann die Entfernung des Erdbewegers verwenden , um die Entfernung zwischen den Sätzen zu berechnen. Diese Abstandsmessung ist ziemlich langsam (quadratische Zeit), sodass sie möglicherweise nicht gut skaliert werden kann, wenn Sie viele Jobs zu erledigen haben.
Um das Problem der Skalierbarkeit zu lösen, können Sie die Jobs möglicherweise anhand der Anzahl der Fähigkeiten einstufen, die der Kandidat gemeinsam hat, und diese Jobs bevorzugen.
quelle
Eine gebräuchliche und einfache Methode zum Abgleichen von "Dokumenten" ist die von Ihnen beschriebene TF-IDF-Gewichtung. Wie ich Ihre Frage verstehe, möchten Sie jedoch jede Karriere (-dokument) basierend auf einer Reihe von Benutzerfähigkeiten einstufen.
Wenn Sie einen "Abfragevektor" aus den Fertigkeiten erstellen, können Sie den Vektor mit Ihrer Termkarrierematrix multiplizieren (mit allen tf-idf-Gewichten als Werten). Der resultierende Vektor würde Ihnen eine Rangliste pro Karrieredokument geben, mit der Sie die besten Karrieren für die Gruppe der "Abfragefähigkeiten" auswählen können.
Diese Methode der Rangfolge ist eine der einfachsten und es gibt viele Variationen. Der TF-IDF-Eintrag auf Wikipedia beschreibt diese Rangfolge ebenfalls kurz. Diese Fragen und Antworten zu passenden Dokumenten habe ich auch auf SO gefunden.
quelle
Verwenden Sie den Jaccard-Index . Dies wird Ihrem Zweck sehr dienen.
quelle
Sie können versuchen, "gensim" zu verwenden. Ich habe ein ähnliches Projekt mit unstrukturierten Daten durchgeführt. Gensim gab bessere Noten als Standard-TFIDF. Es lief auch schneller.
quelle