Hej! Jag skriver en akademisk artikel och det är, för vissa läsare, otillfredsställande om vi skriver att vi använder er JobAd Enrichment API och fick tillbaka en lista med nyckelord.
Kan man få lite fler detaljer gällande vilken typ av natural language processing algoritm ni använder eller dylikt?
Då en annons ska bearbetas i JobAd Enrichments händer följande:
Annonsen bryts upp i meningar
En synonymordlista används för att identifiera om meningen innehåller kända termer som t.ex. kompetenser och yrkestitlar (synonymordlistan är nedladdningsbar via API:et, endpointen /synonymdictionary, se https://jobad-enrichments-api.jobtechdev.se/)
Beroende på vilken typ termen som hittas i meningen har, skickas meningen in till den modell som är tränad på just den typen. Med andra ord så finns det en modell för kompetenser, en för yrkestitlar, en för förmågor och en för geografiska platser
Ett decimaltal mellan 0.0 och 1.0 returneras från respektive modell. Denna siffra innebär följande per typ:
KOMPETENS - Ju närmare 1.0, desto mer uppskattar modellen att kompetensen efterfrågas av arbetsgivaren
YRKESTITEL - Ju närmare 1.0, desto mer uppskattar modellen att det är detta man ska jobba som, ju närmare 0.0 desto mer uppskattar modellen att det är en yrkestitel som nämns i texten, men som man inte förväntas jobba som
FÖRMÅGA - Ju närmare 1.0, desto mer uppskattar modellen att arbetsgivaren vill att man ska ha en viss förmåga
GEO - Ju närmare 1.0, desto mer uppskattar modellen att det är vid denna fysiska plats som ens arbetsplats ligger, där man ska arbeta
Jag kan ingenting om maskininlärning så det är lite svårt att förstå. Är denna beskrivning korrekt:
“The prediction model is based on a pre-trained word vector model that is then used as a word embedding layer in a deep learning Tensorflow model through Keras.”
Är det så att synonymordlistan också är tränad eller utvecklad genom någon sorts deep learning model? Och är det så att ni har en separat modell som identifierar hurivida ett ord tillhör skills, soft skills, occupation titles, geography och sedan har ni fyra modeller som används för att ge en “predicted value between 0 and 1”?
Ja, jag tycker att meningen är korrekt: “The prediction model is based on a pre-trained word vector model that is then used as a word embedding layer in a deep learning Tensorflow model through Keras.”
Nej, synonymordlistan är inte tränad/utvecklad genom deep learning, men varje typ (COMPETENCE, OCCUPATION, TRAIT, GEO) har sin lista med unika ord, vilket gör att vi ser vilken typ som det identifierade ordet i texten tillhör. Identifieringen av ord i annonstexten görs med hjälp av ett pythonpaket som heter flashText, https://github.com/vi3k6i5/flashtext, vilket är snabbare jämfört med om man hade försökt identifiera orden med hjälp av regEx.
När ett ord är identifierat så vet vi vilken typ det tillhör och vilken Tensorflow-modell (COMPETENCE, OCCUPATION, TRAIT, GEO) som ska användas för prediction.
Jag är nyfiken på hur ovanstående modell skattar relevansen för individuella kompetenser i en mening som innehåller fler kompetenser. Om vi exempelvis ger följande mening till modellen för inferens:
“Vi eftersöker utvecklare med goda kunskaper i C++ men som också är bekant med C#.”
Returneras ett decimaltal (\in [0, 1]) som representerar efterfrågan för samtliga kompetenser i hela meningen, men hur genererar men sedan individuella skattningar för kompetenserna “C++” och “C#”? Är sista lagret i modellen ovan mer komplicerat (multi-label eller motsvarande)?
Jag var nog lite otydlig tidigare i mitt svar, det returneras ett decimaltal mellan 0.0-1.0 för varje känd term, inte för hela meningen. För ditt exempel “Vi eftersöker utvecklare med goda kunskaper i C++ men som också är bekant med C#.” så returneras ett decimaltal för C++ och ett för C#, enligt:
Modellen består enbart av de lager som du kan se ovan, vid texten “Exempelkod för modellens lager”.
När en mening ska bedömas av modellen, exempelvis din exempelmening, så preparerar vi meningen så att den innehåller samtliga ord förutom just det ord som vi vill bedöma.
I fallet med “C++” så skickar vi alltså in följande till modellen:
“Vi eftersöker utvecklare med goda kunskaper i men som också är bekant med C#.”
…och för kompetensen “C#” skickar vi in dessa termer till modellen:
“Vi eftersöker utvecklare med goda kunskaper i C++ men som också är bekant med .”
Modellerna är tränade på denna typ av meningar där ett av orden i meningen är utblankad, det vill säga det ord som vi vill bedöma. Detta gör att man kan stoppa in vilket ord som helst istället för “C++” eller “C#” eftersom modellerna är tränade på kontexten, exklusive det specifika ord som man vill bedöma.