마호 우트에서는 GenericItemBasedRecommender
에 대해 CandidateItemsStrategy
을 정의 할 수 있습니다. 특정 카테고리의 GenericUserBasedRecommender
을 사용할 때 이것은 불가능합니다. GenericUserBasedRecommender
으로 어떻게이 작업을 수행 할 수 있습니까? IDRescorer
을 사용하여이 작업을 수행 할 수있는 유일한 방법입니까? 가능한 경우 IDRescorer
을 사용하지 않는 것이 좋습니다. 도와 줘서 고마워! 항목을 기반으로 추천인에 대한 Mahout의 GenericUserBasedRecommender에 대한 후보 전략
[편집]
나는 이런 식으로 그것을 할 : 사용자 기반 추천인에 대한private final class OnlySpecificlItemsStrategy implements CandidateItemsStrategy {
private final JpaDataModel dataModel;
public OnlySpecificlItemsStrategy(JpaDataModel dataModel) {
this.dataModel = dataModel;
}
@Override
public FastIDSet getCandidateItems(long userID, PreferenceArray preferencesFromUser, DataModel dataModel) throws TasteException {
List<Long> specificlItemIDs = this.dataModel.getSpecificlItemIDs();
FastIDSet candidateItemIDs = new FastIDSet();
for (long itemID : specificlItemIDs)
candidateItemIDs.add(itemID);
for (int j = 0; j < preferencesFromUser.length(); j++)
candidateItemIDs.remove(preferencesFromUser.getItemID(j));
return candidateItemIDs;
}
}
나는 Rescorer 함께 할 :
public class FilterIDsRescorer implements IDRescorer {
FastIDSet allowedIDs;
public FilterIDsRescorer(FastIDSet allowedIDs) {
this.allowedIDs = allowedIDs;
}
@Override
public double rescore(long id, double originalScore) {
return originalScore;
}
@Override
public boolean isFiltered(long id) {
return !this.allowedIDs.contains(id);
}
}
다음 다음과 같이 설정하십시오.
List<Long> specificItemIDsList = dataModel.getOtherSpecificlItemIDs();
FastIDSet specificItemIDs = new FastIDSet(specificItemIDsList.size());
for (Long id : specificItemIDsList) {
specificItemIDs.add(id);
}
this.filterIDsRescorer = new FilterIDsRescorer(specificItemIDs);
userBasedRecommender.recommend(userID, howMany, this.filterIDsRescorer)
특정 항목을 필터링/제외하기 위해 각 추천 자 유형에 대한 데이터 모델을 서브 클래스화할 수 있지만 성능에 영향을주는 동일한 데이터 모델 인스턴스를 공유 할 수 없습니다.
답변 해 주셔서 감사합니다. 어쩌면 제 질문이 충분히 명확하지 않을 수도 있습니다. 나는 내 질문을 편집하여 그 순간에 내가 어떻게하는지 볼 수있다. 나는 이것이 갈 길인지 또는 더 효율적이고 우아한 해결책이 있는지를 알고 싶다. 또 다른 솔루션은 내 데이터 모델을 서브 클래스 화하고 모든 항목 대신 "특정"항목 만 반환 할 수 있습니다. 어떻게 생각해? – Sbhklr
아, 네가하고 싶다면 IDRescorer를 원한다. 모든 권장 사항에 적용됩니다. 귀하의 CandidateItenStrategy 버전은 실제로 항목 기반의 최적화이며 또한 작동해야합니다. –