Big Data Analytics - Textanalyse

In diesem Kapitel werden wir die in Teil 1 des Buches gesammelten Daten verwenden. Die Daten enthalten Text, der Profile von Freiberuflern und den Stundensatz beschreibt, den sie in USD berechnen. Die Idee des folgenden Abschnitts ist es, ein Modell anzupassen, das angesichts der Fähigkeiten eines Freiberuflers in der Lage ist, sein Stundengehalt vorherzusagen.

Der folgende Code zeigt, wie der Rohtext, der in diesem Fall über die Fähigkeiten eines Benutzers verfügt, in eine Wortbeutelmatrix konvertiert wird. Dafür verwenden wir eine R-Bibliothek namens tm. Dies bedeutet, dass wir für jedes Wort im Korpus eine Variable mit der Anzahl der Vorkommen jeder Variablen erstellen.

library(tm)
library(data.table)  

source('text_analytics/text_analytics_functions.R') 
data = fread('text_analytics/data/profiles.txt') 
rate = as.numeric(data$rate) 
keep = !is.na(rate) 
rate = rate[keep]  

### Make bag of words of title and body 
X_all = bag_words(data$user_skills[keep]) 
X_all = removeSparseTerms(X_all, 0.999) 
X_all 

# <<DocumentTermMatrix (documents: 389, terms: 1422)>> 
#   Non-/sparse entries: 4057/549101 
# Sparsity           : 99% 
# Maximal term length: 80 
# Weighting          : term frequency - inverse document frequency (normalized) (tf-idf) 

### Make a sparse matrix with all the data 
X_all <- as_sparseMatrix(X_all)

Nachdem wir den Text als spärliche Matrix dargestellt haben, können wir ein Modell anpassen, das eine spärliche Lösung ergibt. Eine gute Alternative für diesen Fall ist die Verwendung des LASSO (Operator für geringste absolute Schrumpfung und Auswahl). Dies ist ein Regressionsmodell, mit dem die relevantesten Merkmale zur Vorhersage des Ziels ausgewählt werden können.

train_inx = 1:200
X_train = X_all[train_inx, ] 
y_train = rate[train_inx]  
X_test = X_all[-train_inx, ] 
y_test = rate[-train_inx]  

# Train a regression model 
library(glmnet) 
fit <- cv.glmnet(x = X_train, y = y_train,  
   family = 'gaussian', alpha = 1,  
   nfolds = 3, type.measure = 'mae') 
plot(fit)  

# Make predictions 
predictions = predict(fit, newx = X_test) 
predictions = as.vector(predictions[,1]) 
head(predictions)  

# 36.23598 36.43046 51.69786 26.06811 35.13185 37.66367 
# We can compute the mean absolute error for the test data 
mean(abs(y_test - predictions)) 
# 15.02175

Jetzt haben wir ein Modell, das mit einer Reihe von Fähigkeiten das Stundengehalt eines Freiberuflers vorhersagen kann. Wenn mehr Daten gesammelt werden, verbessert sich die Leistung des Modells, aber der Code zum Implementieren dieser Pipeline wäre der gleiche.