public String toString() { StringBuilder builder = new StringBuilder(); for (int i = 0; i < numDocs(); i++) { if (i > 0) builder.append(" "); builder.append( String.format("%d. %d=%.3f", (i+1), results[i].getId(), results[i].getScore()) ); } return builder.toString(); }
@Override public SRResultList predictMostSimilar(List<SRResultList> scores, int maxResults, TIntSet validIds) { int numMetrics = scores.size(); TIntDoubleHashMap scoreMap = new TIntDoubleHashMap(); for (SRResultList resultList : scores){ for (SRResult result : resultList){ double value = result.getScore()/numMetrics; scoreMap.adjustOrPutValue(result.getId(),value,value); } } List<SRResult> resultList = new ArrayList<SRResult>(); for (int id : scoreMap.keys()){ resultList.add(new SRResult(id,scoreMap.get(id))); } Collections.sort(resultList); Collections.reverse(resultList); SRResultList result = new SRResultList(maxResults); for (int i=0; i<maxResults&&i<resultList.size();i++){ result.set(i,resultList.get(i)); } return result; }
public MostSimilarGuess(KnownMostSim known, SRResultList guess) { this.known = known; length = guess.numDocs(); minScore = guess.minScore(); maxScore = guess.maxScore(); TIntDoubleMap actual = new TIntDoubleHashMap(); for (KnownSim ks : known.getMostSimilar()) { actual.put(ks.wpId2, ks.similarity); } for (int i = 0; i < guess.numDocs(); i++) { SRResult sr = guess.get(i); if (actual.containsKey(sr.getId())) { observations.add(new Observation(i+1, sr.getId(), sr.getScore(), actual.get(sr.getId()))); } } }
public synchronized void update(int sparseId, SRResultList neighbors) { int denseId; if (sparse2Dense.containsKey(sparseId)) { denseId = sparse2Dense.get(sparseId); } else { expandIfNecessary(); denseId = sparse2Dense.size(); sparse2Dense.put(sparseId, denseId); dense2Sparse[denseId] = sparseId; } for (SRResult r : neighbors) { if (!sparse2Dense.containsKey(r.getId())) continue; int denseId2 = sparse2Dense.get(r.getId()); matrix[denseId][denseId2] = (float) r.getScore(); matrix[denseId2][denseId] = (float) r.getScore(); } completed[denseId] = true; }
private void doMostSimilar(WikiBrainWebRequest req) throws DaoException, ConfigurationException { Language lang = req.getLanguage(); WebEntity entity = entityParser.extractEntity(req); int n = Integer.valueOf(req.getParam("n", "10")); SRMetric sr = getSr(lang); SRResultList results; switch (entity.getType()) { case ARTICLE_ID: case TITLE: results = sr.mostSimilar(entity.getArticleId(), n); break; case PHRASE: results = sr.mostSimilar(entity.getPhrase(), n); break; default: throw new WikiBrainWebException("Unsupported entity type: " + entity.getType()); } List jsonResults = new ArrayList(); for (SRResult r : results) { LocalPage page = pageDao.getById(lang, r.getId()); Map obj = new HashMap(); obj.put("articleId", r.getId()); obj.put("score", r.getScore()); obj.put("lang", lang.getLangCode()); obj.put("title", page == null ? "Unknown" : page.getTitle().getCanonicalTitle()); jsonResults.add(obj); } req.writeJsonResponse("results", jsonResults); }
if (resultList != null) { for (SRResult result : resultList){ allIds.add(result.getId()); int rank = (int) ((j + 1) * k); SRResult result = resultList.get(j); unknownIds.remove(result.getId()); double value = c1 * result.getScore() + c2 * Math.log(rank); if (debug) { System.err.format("%s %d. %.3f (id=%d), computing %.3f * %.3f + %.3f * (log(%d) = %.3f)\n", "m" + i, j, value, result.getId(), c1, result.getScore(), c2, rank, Math.log(rank)); scoreMap.adjustOrPutValue(result.getId(), value, value);
if (resultList != null) { for (SRResult result : resultList){ allIds.add(result.getId()); unknownIds.remove(result.getId()); double value = c1 * result.getScore() + c2 * Math.log(rank); if (debug) { System.err.format("%s %d. %.3f (id=%d), computing %.3f * %.3f + %.3f * (log(%d) = %.3f)\n", "m" + i, j, value, result.getId(), c1, result.getScore(), c2, rank, Math.log(rank)); scoreMap.adjustValue(result.getId(), value);
@Override public SRResultList mostSimilar(int pageId, int maxResults, TIntSet validIds) throws DaoException { TIntSet candidateSet = new TIntHashSet(); for (SubMetric m : metrics) { SRResultList rl = m.metric.mostSimilar(pageId, (int)(maxResults * numCandidateMultiplier), validIds); if (rl != null) { for (SRResult r : rl) { candidateSet.add(r.getId()); } } } int candidates[] = candidateSet.toArray(); double cosims[][] = cosimilarity(new int[]{pageId}, candidates); Leaderboard top = new Leaderboard(maxResults); for (int i = 0; i < candidates.length; i++) { top.tallyScore(candidates[i], cosims[0][i]); } return top.getTop(); }
if (rl != null) { for (SRResult r : rl) { candidateSet.add(r.getId());