mongodb-rag-core
Version:
Common elements used by MongoDB Chatbot Framework components.
35 lines • 1.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.averagePrecisionAtK = void 0;
const assertKIsValid_1 = require("./assertKIsValid");
/**
Calculate Average Precision (AP) for a single query.
Average Precision is the average of the precision scores at each rank where a relevant item appears.
@param relevantItems - List of relevant items
@param retrievedItems - List of retrieved items
@param matchFunc - Function to compare items for equality
@param k - Value of k (top-k results to consider)
@returns Average Precision (AP)
*/
function averagePrecisionAtK(relevantItems, retrievedItems, matchFunc, k) {
(0, assertKIsValid_1.assertKIsValid)(k);
let numRelevantRetrieved = 0;
let precisionSum = 0;
const retrievedRelevantItems = new Set();
const limit = Math.min(k, retrievedItems.length);
for (let i = 0; i < limit; i++) {
const item = retrievedItems[i];
// Find the matching relevant item
const relevantItem = relevantItems.find((relevantItem) => matchFunc(relevantItem, item));
if (relevantItem) {
if (!retrievedRelevantItems.has(relevantItem)) {
retrievedRelevantItems.add(relevantItem);
numRelevantRetrieved++;
precisionSum += numRelevantRetrieved / (i + 1);
}
}
}
return relevantItems.length === 0 ? 0 : precisionSum / relevantItems.length;
}
exports.averagePrecisionAtK = averagePrecisionAtK;
//# sourceMappingURL=averagePrecisionAtK.js.map