[ https://issues.apache.org/jira/browse/LUCENE-8647?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16745452#comment-16745452 ]
Sambhav Kothari edited comment on LUCENE-8647 at 1/17/19 8:04 PM: ------------------------------------------------------------------ Example implementation of a possibly useful subclass in contrib/ltr - {code:java} /** * A special explanation class that stores feature scores for a specific doc that a model is scoring. */ public class ModelExplanation extends Explanation { private Map<String, Float> featureImportance = new HashMap<>(); private Map<String, Float> featureValues = new HashMap<>(); public Map<String, Float> getFeatureImportance() { return featureImportance; } public void setFeatureImportance(Map<String, Float> featureImportance) { this.featureImportance = featureImportance; } public Map<String, Float> getFeatureValues() { return featureValues; } public void setFeatureValues(Map<String, Float> featureValues) { this.featureValues = featureValues; } @Override public LinkedHashMap<String, Object> toMap() { LinkedHashMap<String, Object> data = super.toMap(); data.put("featureImportance", getFeatureImportance()); data.put("featureValues", getFeatureValues()); return data; } } {code} was (Author: samj1912): Example implementation of a subclass - {code:java} /** * A special explanation class that stores feature scores for a specific doc that a model is scoring. */ public class ModelExplanation extends Explanation { private Map<String, Float> featureImportance = new HashMap<>(); private Map<String, Float> featureValues = new HashMap<>(); public Map<String, Float> getFeatureImportance() { return featureImportance; } public void setFeatureImportance(Map<String, Float> featureImportance) { this.featureImportance = featureImportance; } public Map<String, Float> getFeatureValues() { return featureValues; } public void setFeatureValues(Map<String, Float> featureValues) { this.featureValues = featureValues; } @Override public LinkedHashMap<String, Object> toMap() { LinkedHashMap<String, Object> data = super.toMap(); data.put("featureImportance", getFeatureImportance()); data.put("featureValues", getFeatureValues()); return data; } } {code} > Create a generic method in the Explanation class to get explanation attributes > ------------------------------------------------------------------------------ > > Key: LUCENE-8647 > URL: https://issues.apache.org/jira/browse/LUCENE-8647 > Project: Lucene - Core > Issue Type: Improvement > Components: core/search > Affects Versions: 7.5 > Reporter: Sambhav Kothari > Priority: Minor > > Initial proposal and discussion can be found here - > > [http://mail-archives.apache.org/mod_mbox/lucene-java-user/201901.mbox/%3CCADitDkmnv4Vup5VG2ZwLUOv5VM=itu-y8eugxxmtoppzpcy...@mail.gmail.com%3E] > > Currently the Explanation class has a toString method, but it doesn't seem to > have any method to output the explanation as a NamedList. Part of the reason > is that NamedList is a Solr only concept and it cannot exist in lucene. But > this leads to utility functions like > ([https://github.com/apache/lucene-solr/blob/1d85cd783863f75cea133fb9c452302214165a4d/solr/core/src/java/org/apache/solr/response/transform/ExplainAugmenterFactory.java#L115] > and > [https://github.com/apache/lucene-solr/blob/1d85cd783863f75cea133fb9c452302214165a4d/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java#L400-L466] > which assume a particular structure about explanations. > > Explanation should instead have a toMap method which returns a Map of > key-value pairs which can then be converted to a NamedList in Solr. This can > be exceptionally useful if we have a class inheriting from Explanation that > adds more attributes. > > For example for Learning to Rank model explanations we can have a > ModelExplanation class which adds doc-specific feature scores and other > machine learning model explanations to the output. It also allows the > ExplainAugmenter and other classes to have a more generic way of getting an > Explanation's data in a structured format. > > The way it currently does so is very ugly - > [https://github.com/apache/lucene-solr/blob/1d85cd783863f75cea133fb9c452302214165a4d/solr/core/src/java/org/apache/solr/response/transform/ExplainAugmenterFactory.java#L115] > > This also implies that we shouldn't keep Explanation as a final class > anymore. Storing and parsing things like feature values in the explanation > description doesn't seem like the right way. -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org For additional commands, e-mail: dev-h...@lucene.apache.org