在LTR中训练SolrFeatures时,LIBLINEAR模型缺少权重

时间:2018-08-28 08:00:42

标签: solr liblinear

我正在使用Solr 7.4.0,并根据以下示例使用LIBLINEAR对LTR模型进行训练:https://github.com/bloomberg/lucene-solr/blob/master-ltr/solr/contrib/ltr/example/README.md

但是,我发现当我想使用SolrFeature类训练solr过滤器查询时,会收到以下错误消息,表明模型缺少权重:

Exception: Status: 400 Bad Request
Response: {
  "responseHeader":{
    "status":400,
    "QTime":1},
  "error":{
     "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.ltr.model.ModelException"],
      "msg":"org.apache.solr.ltr.model.ModelException: Model myModel lacks weight(s) for [category]",

这是我在功能JSON文件中定义它的方式:

  {
    "store" : "myFeatures",
    "name" : "category",
    "class" : "org.apache.solr.ltr.feature.SolrFeature",
    "params" : {
        "fq": ["{!terms f=category}book"]
    }
  }

造成此问题的原因可能是什么,我们如何解决此问题?

2 个答案:

答案 0 :(得分:0)

原因可能是使用上述功能json文件创建的* model.json缺少权重参数。因此,请确保为特征json文件中定义的每个特征都包括了权重参数。

您的* model.json文件应如下所示,

{
  "class" : "org.apache.solr.ltr.model.LinearModel",
  "name" : "myModel",
  "features" : [
    { "name" : "documentRecency" },
    { "name" : "isBook" },
    { "name" : "originalScore" }
  ],
  **"params" : {
    "weights" : {
      "documentRecency" : 1.0,
      "isBook" : 0.1,
      "originalScore" : 0.5
    }
  }**
}

有关更多信息,请参阅Solr 7.4 documentation

谢谢。

答案 1 :(得分:0)

我发现这是由于与该功能相关的训练数据不足,并且它无法为该功能教授适当权重的模型,从而导致错误。

在我将更多与该功能相关的条目添加到训练数据之后,问题没有发生。