I am looking for some suggestions on Learning to Rank method for search engines. I created a dataset with the following data:
query_dependent_score, independent_score, (query_dependent_score*independent_score), classification_label
query_dependent_score is the TF-IDF score i.e. similarity b/w query and a document.
independent_score is the viewing time of the document.
There are going to be 3 classes:
- 0 (not relevant),
- 1 (kind of relevant),
- 2 (most relevant)
I have a total of 750 queries and I collected top 10 results of each, so I have a total of 7500 data points.
I have been thinking of estimating a relevance function like:
w0 + w1*query_dependent_score + w2*independent_score + w3*(query_dependent_score*independent_score)
I can clearly see this is like a classification problem but I wanted some info on whether this is right way to approach this problem.
I referred to Machine learning technique to calculate weighted average weights? for some ideas.
Following is the code that I have written:
from sklearn.linear_model import LogisticRegression import numpy as np DATASET_PATH = "..." search_data = np.genfromtxt(DATASET_PATH, delimiter=',', skip_header=1, usecols=(1, 2, 3, 4)) document_grades = search_data[:, 3:4] document_signals = search_data[:, :3] # This has 3 features. total_rows = np.shape(search_data) split_point = int(total_rows * 0.8) training_data_X, test_data_X = document_signals[:split_point, :], document_signals[split_point:, :] training_data_y, test_data_y = document_grades[:split_point, :], document_grades[split_point:, :] clf = LogisticRegression(multi_class="multinomial", solver="lbfgs") clf.fit(X=training_data_X, y=training_data_y.ravel()) print(clf.classes_) # [0, 1, 2] print(clf.coef_) # This is a 3 x 3 matrix? print(clf.intercept_) # An array of 3 elements?
Based on the
coef_ should give me the values of
intercept_ should give me the value of
But I have a matrix and an array for those weights. I am not sure how to get the values of the weights for the relevance function?
I am looking into learning to rank for the first time, so any suggestions are welcome.