我们正在尝试使用 IBM Watson Cognitive Insights (CI) 服务来实现自然语言搜索功能。我们希望用户能够使用自然语言输入问题,然后从 CI 语料库中返回适当的文档。我们使用 CI 而不是 Watson QA 服务来避免培训需求并降低 Watson 基础架构成本(即避免每个语料库/用例都需要专用的 Watson 实例)。
我们能够通过 CI API 构建必要的语料库,但我们不确定以什么顺序使用哪些 API 来完成最精确/准确的查询。
我们最初的想法是:
接受用户的自然语言问题并将该文本字符串发布到“识别一段文本中的概念”API(在 CI API 参考文档中从底部倒数第 6 位)以获取与问题相关的概念列表。
然后使用“在语料库中执行概念搜索”API(在 CI API 参考文档中从底部倒数第 3 个)执行 GET,以从语料库中获取相关文档的列表。
第一个问题——这是实现本文第一段所述目标的正确方法吗?我们应该以不同的方式组合 CI API 还是同时使用多个 Watson 服务来实现目标?
如果我们最初的方法是正确的,那么我们会发现当我们向“识别一段文本中的概念”API 提交一个简单的问题(例如“我如何修复 MySQL 数据库损坏”)时,我们并没有得到全面的返回相关概念列表。例如:
curl -u userid:password -k -d "How can I repair MySQL database corruption" https://gateway.watsonplatform.net/concept-insights-beta/api/v1/graph/wikipedia/en-20120601?func=annotateText
返回:
[{"concept":"/graph/wikipedia/en-20120601/MySQL","coords":[[17,22]],"weight":0.85504603}]
然而,显然还有其他与示例问题相关的概念(修复、损坏、数据库等)。
在另一个示例中,我们刚刚将文本“修复”提交给“识别一段文本中的概念”API:
curl -u userid:password -k -d "repair" https://gateway.watsonplatform.net/concept-insights-beta/api/v1/graph/wikipedia/en-20120601?func=annotateText
它返回:
[{"concept":"/graph/wikipedia/en-20120601/Repair","coords":[[0,6]],"weight":0.65392953}]
似乎我们也应该从第一个示例中恢复“修复”概念。为什么我们提交“repair”时API会返回“repair”概念,但提交文本“How can I repair MySQL database corruption”时却没有返回,其中还包含“repair”一词。</p>
请就基于 Watson Concept Insights 服务实现自然语言搜索功能的最佳方式提出建议(如果合适,可能与其他服务结合使用)。