Watson Retrieve和Rank服务在尝试使用自定义功能训练Ranker时不返回搜索结果和Solr错误

时间:2017-04-24 08:18:05

标签: solr watson retrieve-and-rank

所以我有以下问题:

当我尝试使用经过培训搜索的Ranker时,我收到以下错误消息:

pysolr.SolrError: Solr responded with an error (HTTP 500): [Reason: Can not rerank results. Verify that your schema has not changed in incompatible ways.]

这就是我要求结果的方式:

pysolr_client._send_request("GET", path='/fcselect?q=%s&ranker_id=%s&wt=json' % (Question, ranker_id))

当我尝试不通过Python而不是通过curl时,我得到以下错误:

{"responseHeader":{"status":400,"QTime":1},"error":{"metadata":["error-class","org.apache.solr.common.SolrException","root-error-class","org.apache.solr.common.SolrException"],"msg":"Bad contentType for search handler :application/octet-stream request=...}","code":400}}

(我遗漏了请求本身不在此处发布排名者ID。)

我发送的卷曲请求如下:

curl -X POST -u "*username*":"*password*" "https://gateway.watsonplatform.net/retrieve-and-rank/api/v1/solr_clusters/*solr_cluster_id*/solr/Question_collection/fcselect?ranker_id=*ranker_id*&q=*question*?&wt=json"

我找到了以下解决方案:只添加一个-H "Content-Type: application/json",好吧,它显示了一些文档作为结果,但在响应结束时它仍然显示相同的错误。另外,我看到以下痕迹:

org.apache.solr.common.SolrException: Can not rerank results. Verify that your schema has not changed in incompatible ways.
at com.ibm.watson.hector.plugins.utils.ExceptionHandlingUtil.logAndThrowSolrException(ExceptionHandlingUtil.java:36)
at com.ibm.watson.hector.plugins.ss.FCFeatureGeneratorComponent.rerank(FCFeatureGeneratorComponent.java:743)
at com.ibm.watson.hector.plugins.ss.FCFeatureGeneratorComponent.process(FCFeatureGeneratorComponent.java:348)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:272)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:155)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:2102)
at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:654)
at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:460)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:257)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:208)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:499)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:745)

问题是在训练排名和使用它之间我甚至没有触及其他任何东西。不是模式,不是集合,没有名称。我只有一个集合,一个配置,一个所有,除了文档 - 其中294个。

我经历过的整个过程都是为没有自定义功能的Ranker工作的。但是使用自定义功能却没有。

我已经通过本教程创建了具有自定义功能的Watson Ranker:https://medium.com/machine-learning-with-ibm-watson/developing-with-ibm-watson-retrieve-and-rank-part-3-custom-features-826fe88a5c63

据我所知,我所做的一切都归功于本教程改变了trainingdata.txt文件,培训过程是一样的。

现在我已经没有想法要检查什么来解决问题..

你有什么建议吗?

提前多多感谢! :)

1 个答案:

答案 0 :(得分:1)

在rr_custom_scorer_proxy的server.py中,这是一个愚蠢的事情。当它写入必须由排名者重新排列的“回答”csv时,它会以“wt”模式打开文件,这会导致每行之间出现空白行。排名者无法处理,我们收到错误。

如果你把它改成'wb'那么效果很好。