Какой будет правильный вывод? - PullRequest
0 голосов
/ 30 октября 2019

Я хочу реализовать следующее уравнение, приведенное в статье «Трехслойная модель, усиленная взаимно, для рекомендации персонализированного цитирования» (стр. 4). Согласно описанию в статье, B должен быть квадратной матрицей, тогда как я получаю вектор.

enter image description here

Я пробовал следующий код:

querySplit = query.split(',')
queryText = querySplit[0]
qt_tag = word_tokenize(queryText.rstrip().lower().translate(translator))
qt_vector = model.infer_vector(qt_tag)

def eq_b(query):
    vecs = np.asarray(
        [spatial.distance.cosine(spatial.distance.cosine(query, model.docvecs[i]), model.docvecs[i]) for i in
         range(Docs_len)])
    return vecs / vecs.sum()

b = eq_b(qt_vector)
print("B", b)

1 Ответ

1 голос
/ 30 октября 2019

Формула, которую вы написали для B, неверна. Из бумаги B * Rt_p равен тому, что у вас есть, но не самому B. Это означает, что фактическая формула для матрицы:

B=np.matmul(eq_b(qt_vector),transpose(Rt_p))/norm(Rt_p)^2

В основном вы добавляете этот дополнительный материал, чтобы при умножении на Rt_p все термины, включающие Rt_p отменены и у вас осталось eq_b(qt_vector). Отмена обусловлена ​​тем, что

transpose(Rt_p)*Rt_p ==norm(Rt_p)^2

...