В настоящее время я пытаюсь предсказать пять / 10 лучших предметов для статистического упражнения на основе описания упражнения. Предметы и упражнения (с обозначением наземной истины в виде целого числа) представлены в формате CSV. Наземный ярлык истины также присутствует в CSV испытуемых и там называется "id".
Моя текущая модель создает кортеж для любых упражнений, первый элемент которого представляет собой метку наземной истины, второй элемент представляет собой список прогнозируемых меток.
Тогда мой вопрос: как вычислить (Точность,) Precision, Recall и F1 (если возможно также MRR и MAR)?
Кроме того, все упражнения и предметы преобразуются в векторы. Кроме того, я вычисляю точность, подсчитывая все случаи, для которых основополагающая правда присутствует в верхних 5/10, и делю это на общее количество упражнений.
* примечание: в коде упражнения = вопрос и тема = кс
Мои переменные следующие:
question_data = df[['all_text_clean', 'all_text_as_vector', 'groud_truth_id'] ].values
kc_data = subject_df[['id', 'all_text_as_vector']].values
Затем я перебираю каждую пару вопросов-упражнений:
question_candidates = []
for qtext, qvec, gt_id in question_data:
scores = []
for kc_id, kc_vec in kc_data:
score = distance.cosine(qvec, kc_vec) # calculate cosine similarities
scores.append((kc_id, score)) # kc_id and related store cos-sim
scores = sorted(scores, key=itemgetter(1)) # sort cos-sims and related ids
candites = [id for id, score in scores][:5] # only id is relevant. These are the suggestions
question_candidates.append((gt_id, candites))
Точность умеренная: около 0,59. Я не ожидаю ничего более высокого, поскольку это просто базовая модель.