查詢參數

當您使用 Discovery 查詢語言撰寫查詢時,可以使用這些參數。 如需相關資訊,請參閱 Discovery API 參考資料。 如需查詢概念的概觀,請參閱查詢概觀

以 Discovery 查詢語言撰寫的查詢可以包含搜尋參數和結構參數。

查詢參數的預設值可能因專案類型而異。 如需預設值的相關資訊,請參閱 預設查詢設定

回答發現項目

IBM Cloud find_answers 參數僅在受管理部署中受支援。

依預設,Discovery 提供答案的方式為傳回整個段落,其中包含自然語言查詢的答案。 啟用回答功能時,Discovery 也會在段落內提供「簡短回答」,並提供信任評分以顯示「簡短回答」是否回答使用者查詢中明確或隱含的問題。 使用尋找答案功能的應用程式可以單獨顯示簡短答案,也可以在完整段落的上下文中強調顯示簡短答案。 對於大多數應用程式而言,在完整的段落中顯示強調的簡短答案較為可取,因為答案通常在上下文中更有意義。

回答尋找特性的行為方式如下:

在接下來的段落範例中,簡短回答會以粗體字型顯示。

  • 尋找答案。 它不會產生答案。 答案是文字的一部分;無法進行推斷。

    「IBM '在 2022 年的營收是多少?」如果您有文件說明 IBM '在 2022 年的營收是多少,就可以得到正確的答案。 但是,如果您有一份列出 IBM 2022 年每個季度營收的文件,它不會把它們加起來,然後給您一個總數。

  • 如果答案可用,則處理同義字和詞彙變異。

    • 問題範例:「IBM 何時購買 Red Hat?」
    • 通過:「IBM 在 2019 年 7 月完成了對 Red Hat 的 340 億美元收購」
  • 將多個句子之間的資訊結合在一起 (大約 2,000 個字元內)。

    • 問題範例:「IBM 何時購買 Red Hat?」
    • 通過:" IBM 以 340 億美元收購 Red Hat。 此交易於 2019 年 7 月完成。」
  • 處理隱含問題的方式與處理明確問題的方式類似。

    範例問題:

    • company that developed the AS/400
    • What company developed the AS/400?
  • 使用較長片語或條款回答的問題良好運作。

    • 範例問題:如何翻轉煎餅?
    • 通道:要做出世界級的薄餅,關鍵在於正確地翻轉。 翻轉煎餅的最佳方法是在其下方插上抹刀,將其舉至空中至少 4 英寸,然後快速將抹刀旋轉 180 度。
  • 許多如何或為什麼的問題只能由更長的文字範圍才可以完整回答。 回答-發現項目特性不會傳回整個文件作為回答 (且不會彙總文件長度回答)。

  • 處理「是」或「否」的問題,這些問題都是事實,並在文中有簡明的答案

    • 範例問題: Timbuktu 中是否有程式庫
    • 通過: 廷巴克圖的 主圖書館,正式稱為艾哈邁德-巴巴高等伊斯蘭研究和研究學院,是一個藏著兩萬多份涵蓋馬裡歷史幾個世紀的手稿的寶庫。
  • 可處理答案非常簡短的問題,例如姓名和日期,尤其是當要求的答案類型在文中明確列出時。

  • 處理意見問題,但只能找到該意見的陳述;不會評估意見的有效性。

    • 範例問題:我應該嘗試使用藍色眼影嗎?
    • Passage:我們認為藍色眼影是今年的流行趨勢

尋找答案功能如何運作

在使用者提交查詢之後,「探索」服務會分析查詢。 查詢分析會以可增加尋找最佳搜尋結果的機會的方式來轉換使用者的原始查詢。 例如,它會還原字組、移除停止字組,以及新增查詢擴充。 會執行搜尋,並傳回產生的文件及段落。

回答發現項目會套用至傳回的段落。 最多 60 個段落會傳送至回答尋找服務。 根據 passages.per_document 參數值,選擇這 60 個段落的方式不同。

  • 如果 passages.per_documentfalse,則只會根據搜尋所傳回之所有文件的段落評分來選擇前 60 個段落。

  • 如果 passages.per_documenttrue,則會先對傳回的文件進行分級,然後選擇這些最上層文件的前 60 個段落。

    例如,如果您將查詢設為傳回 100 個文件 (count=100),並從每一份文件中要求 2 個段落 (passages.max_per_document=2),則只會從 30 個排名最前的文件中選擇 2 個段落 (2 x 30 = 60 個段落)。 其餘 70 份文件並無選擇段落。

如果您的目標是取得最佳 10 個簡短回答,則最好的方法是提供更多文件中的各種段落,而非僅前 10 個。 若要這樣做,請將 passages.per_document 設為 true,然後在啟用回答功能的情況下,要求每一個文件 20 個文件最多 3 個段落。 回答尋找功能會搜尋最多 20 * 3 = 60 個段落的回答。

回答發現項目不使用查詢分析所產生的已轉換查詢字串。 相反地,它會使用在查詢時儲存的使用者原始輸入副本,以尋找最佳簡短回答。 如果答案發現模組確信它在其中一個段落中找到答案,則答案信任評分會與文件及段落評分結合,以產生最終等級,這可以提升否則可能會遺漏的文件或段落。

回答-尋找 API 詳細資料

尋找答案 API 會將下列參數新增至查詢 API 的 passage 區段:

  • find_answers 是選用項目,預設為 false。 如果設定為 true (且 natural_language_query 參數設定為查詢字串),則會啟用尋找答案功能。
  • max_answers_per_passage 是選用項目,預設為 1。 在此情況下,回答發現功能會從任何一個段落中尋找最多指定的回答數目。

每個 passage 物件內的回傳值也會加入一節。 該部分稱為 answers,是答案物件的清單。 清單最長可達 max_answers_per_passage。 每一個 answer 物件都包含下列欄位:

  • answer_text 是查詢的簡明答案文字。
  • confidence 是介於 01 之間的數字,其為答案正確的可能性預估值。 有些答案信心不足,不太可能是正確的。 根據此值,對您如何使用答案進行選擇。 如果段落擷取的 per_document 參數設為 true(這是預設值),搜尋結果中文件的信賴度及順序即會根據此組合進行調整。
  • start_offset 是段落所在欄位內答案的開始字元偏移(第一個字元的索引)。 它大於或等於段落的起始偏移量 (因為答案必須在段落內)。
  • end_offset 是段落所在欄位內答案的結束字元偏移(最後一個字元的索引,加一)。 它小於或等於通道的末端偏移量。

如果要在整個專案中尋找答案,請執行下列動作:

  • passages.enabled 設為 true
  • passages.find_answers 設為 true

若要在單一已知文件內尋找答案 (例如,具有長而複雜的文件的文件檢閱應用程式),請執行下列動作:

  • passages.enabled 設為 true
  • passages.find_answers 設為 true
  • 設定 filter 以選取文件的 document_id

下列範例顯示使用此 API 的查詢:

POST /v2/projects/{project_id}/query{
  "natural_language_query": "Why did Nixon resign?",
  "passages": {
    "enabled": true, "find_answers":true
  }
}

回應範例:

{
  "matching_results": 74, "retrieval_details": { "document_retrieval_strategy": "untrained"},
  "results": [
    {
      "document_id": "63919442-7d5b-4cae-ab7e-56f58b1390fe",
      "result_metadata":{"collection_id": "collection_id1234","document_retrieval_source":"search","confidence": 0.78214},
      "metadata": {"parent_document_id": "63919442-7d5b-4cae-ab7e-56f58b1390fg"},
      "title": "Watergate scandal",
      "document_passages": [
        {
          "passage_text": "With his complicity in the cover-up made public and his political support completely eroded, Nixon resigned from office on August 9, 1974. It is believed that, had he not done so, he would have been impeached by the House and removed from office by a trial in the Senate.",
          "field": "text",
          "start_offset": 281,
          "end_offset": 553,
          "answers": [
            {
              "answer_text": "his complicity in the cover-up made public and his political support completely eroded",
              "start_offset": 286, "end_offset": 373, "confidence": 0.78214
            }
          ]
        }
      ]
}

natural_language_query

使用自然語言查詢來輸入以自然語言表示的查詢,如在交談式或任意文字介面 (例如 IBM Watson Assistant) 中從使用者收到的查詢。 此參數使用整個輸入作為查詢文字。 它不識別操作員。

自然語言查詢的查詢字串長度上限為 2048

結果信賴分數

當查詢類型是自然語言查詢時,每一個結果都有信任評分。 信賴分數是結果相關性的測量。 每一個查詢結果會獨立評估及評分。

使用各種技術來評估信賴度。 一個重要因素是查詢與文件之間單字相符的頻率。

因為在不同的環境定義中使用各種技術來評估結果,所以結果評分的數目範圍可能會因查詢而有很大的不同。 此變異性表示將信賴分數與靜態臨界值相比較是一種不適當的方法,用來區隔應用程式所傳回的結果。 結果會從最高到最低的信賴度進行排序。 無論其信賴分數值為何,您都可以取得最佳結果來尋找最佳候選答案。

natural_language_query 參數會啟用相關性訓練等功能。 如需相關資訊,請參閱使用訓練改善結果相關性

query

查詢搜尋會依相關性順序傳回資料集的所有文件,內含完整強化和全文。 查詢也會排除未提及查詢內容的任何文件。

aggregation

彙總查詢會返回符合一組資料值的文件數量。 如需聚集選項的完整清單,請參閱 查詢聚集

filter

可快取的查詢,其排除未提及查詢內容的任何文件。 過濾器搜尋結果會依相關性順序傳回。

當您編寫的查詢同時包含 filter,和 aggregation, query,或 natural_language_query 參數時,filter 參數會先執行,然後再並行執行任何 aggregation, query,或 natural_language_query 參數。

對於簡單的查詢,尤其是在小型資料集上,filterquery 參數通常會傳回完全相同(或類似的)結果。 如果 filterquery 呼叫傳回類似結果,且您不需要依相關性順序傳回回應,請使用 filter 參數。 過濾器呼叫更快且已快取。 快取意味著下次您進行相同的呼叫時,可以得到更快的回應,尤其是在大型資料集中。

結構參數

結構參數定義所傳回 JSON 中文件的內容及組織。 結構參數不影響哪些文件屬於整個結果集的一部分。

return

文件階層中所要傳回部分的逗點區隔清單。 任何文件層級都是有效值。 如果此參數是空清單,則會傳回所有欄位。

count

您希望在回應中傳回的文件數量。 預設值為 10。 任何一個查詢中的 countoffset 值的總和上限為 10000

offset

要傳回的結果集開始的搜尋結果位置的索引值。 比方說,如果傳回的結果總數為 10,偏移為 8,則它會傳回最後兩個結果。 預設值為 0。 在任何一次查詢中,countoffset 一起的最大允許值是 10000

spell correction

在自然語言查詢中,檢查提交的查詢是否有拼錯的術語。 查詢依現狀處理。 不過,回應的 suggested_query 欄位中會傳回原始查詢的可能更正 (如果有的話)。 建議不會自動使用,但您的應用程式可以使用它們。

sort

要排序的文件中以逗號分隔的欄位清單。 您可以選擇性地指定排序方向,方法是以 - 作為欄位字首來代表遞減順序,或以 + 作為字首來代表遞增順序。 遞增順序是預設排序方向。

highlight

布林值,指定是否在傳回的輸出中包括 highlight 物件。 包含時,強調顯示會傳回作為欄位名稱的索引鍵,以及作為陣列的值。 陣列包含使用 HTML 強調顯示 (<em>) 標籤強調顯示的查詢相符文字區段。

如果 passages.enabledpassages.per_documenttrue,則會忽略此參數,在此情況下,會針對每一個文件傳回段落,而不是強調顯示。

目前,如果查詢搜尋強化提及項目的 exact match,則只會強調顯示小寫相符項。 使用 includes 運算子時,會強調顯示大小寫相符項。

此輸出在 highlight 物件之後列出 enriched_text 物件,如下列範例所示。

curl -H "Authorization: Bearer {token}" \
'https://{hostname}/{instance_name}/v2/projects/{project_id}/collections/{collection_id}/query?version=2019-11-29&natural_language_query=Hybrid%20cloud%20companies&highlight=true'

傳回的 JSON 格式如下:

{
  "highlight": {
    "extracted_metadata.title": [
      "IBM to Acquire Sanovi Technologies to Expand Disaster Recovery Services for <em>Hybrid</em> <em>Cloud</em>"
    ],
    "enriched_text.concepts.text": [
      "Privately held <em>company</em>",
      "<em>Cloud</em> computing"
    ],
    "text": [
      " Sanovi Technologies, a privately held <em>company</em> that provides <em>hybrid</em> <em>cloud</em> recovery, <em>cloud</em> migration",
      "IBM to Acquire Sanovi Technologies to Expand Disaster Recovery Services for <em>Hybrid</em> <em>Cloud</em>\n\nPublished",
      " undergoing digital and <em>hybrid</em> <em>cloud</em> transformation.\n\nURL: http://www.ibm.com/press/us/en/pressrelease/50837.wss",
      " and business continuity software for enterprise data centers and <em>cloud</em> infrastructure. Adding"
    ],
    "enriched_text.categories.label": [
      "/business and industrial/<em>company</em>/bankruptcy"
    ],
    "enriched_text.entities.type": [
      "<em>Company</em>"
    ],
    "html": [
      " Technologies, a privately held <em>company</em> that provides <em>hybrid</em> <em>cloud</em>\n recovery, <em>cloud</em> migration and business",
      " Disaster Recovery Services for <em>Hybrid</em> <em>Cloud</em></title></head>\n<body>\n\n\n<p>Published: Thu, 27 Oct 2016 07:01",
      " digital and <em>hybrid</em> <em>cloud</em> transformation.</p>\n<p>URL: http://www.ibm.com/press/us/en/pressrelease/50837.wss</p>\n\n\n\n</body></html>",
      " continuity software for \nenterprise data centers and <em>cloud</em> infrastructure. Adding these \ncapabilities"
    ]
  }
}

passages

一個布林值,指定服務是否會從使用 natural_language_query 參數的查詢所傳回的文件中,傳回一組最相關的段落。 這些段落是由精密的 Watson 演算法所產生,這些演算法會從查詢所傳回的所有文件中找出最佳的文字段落。 參數的預設值會根據您的專案類型而有所不同。 如需預設值的相關資訊,請參閱 預設查詢設定

Discovery 透過句子邊界偵測,嘗試傳回從句子開始到句子結束的段落。 為此,它會先搜尋大約 passages.characters 參數 中指定的長度的段落 (對於大部分專案類型,預設值為 200)。 然後,它會將每個段落擴展至指定長度的兩倍,以便傳回完整的句子。 如果您的 passages.characters 參數很短,或者文件中的句子很長,可能沒有足夠接近的句子邊界來傳回完整的句子,而不會超過所要求長度的兩倍。 在這種情況下,Discovery 會維持在 passages.characters 參數兩倍的限制範圍內,因此傳回的段落可能不包括整個句子,可能會省略開頭、結尾或兩者。

由於句子界限調整會擴充段落大小,因此平均段落長度可能會增加。 如果您的應用程式的螢幕空間有限,您可能需要為 passages.characters 設定較小的值,或截斷 Discovery 所傳回的段落。 句子界限偵測適用於所有支援的語言,並使用語言特定邏輯。

段落與每個文件結果一起分組,並依段落相關性排序。 在查詢中包括段落擷取會增加回應時間,因為它需要更多時間來對段落進行評分。

您可以使用 passages.fields 參數來調整文件中要進行段落擷取的欄位,以進行搜尋。

passages 參數會傳回匹配的段落 ( passage_text ),而 score, document_id,則會傳回該段落所抽取的欄位名稱 ( field ),以及該欄位內段落文字的起始和結束字元 ( start_offsetend_offset ),如以下範例所示。

 curl -H "Authorization: Bearer {token}" 'https://{hostname}/{instance_name}/v2/projects/{project_id}/collections/{collection_id}/query?version=2019-11-29&natural_language_query=Hybrid%20cloud%20companies&passages=true&passages.per_document=false'

查詢傳回的 JSON 格式如下:

  {
    "matching_results":2,
    "passages":[
      {
        "document_id":"ab7be56bcc9476493516b511169739f0",
        "passage_score":15.230205287402338,
        "passage_text":"a privately held company that provides hybrid cloud recovery, cloud migration and business continuity software for enterprise data centers and cloud infrastructure.",
        "start_offset":120,
        "end_offset":300,
        "field":"text"
      },
      {
        "passage_text":"Disaster Recovery Services for Hybrid Cloud</title></head>\n<body>\n\n\n<p>Published: Thu, 27 Oct 2016 07:01:21 GMT</p>\n",
        "passage_score":10.153470191601558,
        "document_id":"fbb5dcb4d8a6a29f572ebdeb6fbed20e",
        "start_offset":70,
        "end_offset":120,
        "field":"html"
      }
    ]
  }

passages.fields

以逗點分隔的清單,列出索引中的欄位,這些欄位是抽取通道的來源。 如果未指定此參數,則會包括所有根層次欄位的段落。

您可以同時在 returnpassages.fields 參數中指定欄位。 當您指定這兩個參數時,每一個參數都具有不同的值,則會個別處理它們。

例如,要求可能包括參數 "return": ["docno"]"passages":{"fields": ["body"]body 欄位指定在 passages.fields 中,但未指定在 return 中。 在結果中,會傳回文件內文的段落,但不會傳回內文欄位本身的內容。

passages.count

要傳回的段落數上限。 如果指定的計數是找到的總數,則搜尋會傳回較少的段落。 預設值為 10。 最大值為 100

passages.characters

任何一個段落可擁有的大約字元數。 預設值為 200。 最小值為 50。 最大值為 2,000。 傳回的段落最多可包含所要求長度的兩倍 (如有必要),使其在句子邊界開始和結束。

passages.max_per_document

依預設,每個文件會傳回一個段落。 您可以在 passages.max_per_document 參數中指定較高的數字,以增加每個文件要傳回的段落數上限。

similar

尋找與您識別為感興趣的文件類似的文件。 為了尋找類似文件,Discovery 會識別原始文件中最相關的 25 個術語,然後搜尋具有類似相關術語的文件。

如果 similar.enabledtrue,您必須指定 similar.document_ids 欄位,以包含感興趣文件的逗點區隔清單。

在已安裝的部署中,此參數的支援已隨 4.6.0 版新增。

table retrieval

如果在集合中啟用 表格理解,則 natural_language_query 會尋找內容或環境定義符合搜尋查詢的表格。

範例查詢:

 curl -H "Authorization: Bearer {token}" \
 'https://{hostname}/{instance_name}/v2/projects/{project_id}/collections/{collection_id}/query?version=2019-11-29&natural_language_query=interest%20appraised&table_results=true'

查詢傳回的 JSON 格式如下:

{
  "matching_results": 1,
  "session_token": "1_FDjAVkn9SW6oH9y5_9Ek3KsNFG",
  "results": [
    {}
  ]
  {
    "table_results": [
      {
        "table_id": "e883d3df1d45251121cd3d5aef86e4edc9658b21",
        "source_document_id": "c774c3df0c90255191cc0d4bb8b5e8edc6638d96",
        "collection_id": "collection_id",
        "table_html": "html snippet of the table info",
        "table_html_offset": 42500,
        "table": [
          {
            "location": {
              "begin": 42878,
              "end": 44757
          },
          "text": "Appraisal Premise Interest Appraised Date of Value Value Conclusion\nMarket Value \"As Is\" Fee Simple Estate January 12, 2016 $1,100,000\n",
          "section_title": {
            "location": {
              "begin": 42300,
              "end": 42323
            },
            "text": "MARKET VALUE CONCLUSION"
          },
          "title": {},
          "table_headers": [],
          "row_headers": [
            {
              "cell_id": "rowHeader-42878-42896",
              "location": {
                "begin": 42878,
                "end": 42896
              },
              "text": "Appraisal Premise",
              "text_normalized": "Appraisal Premise",
              "row_index_begin": 0,
              "row_index_end": 0,
              "column_index_begin": 0,
              "column_index_end": 0
            }
          ],
          "column_headers": [],
          "body_cells": [
            {
              "cell_id": "bodyCell-43410-43424",
              "location": {
                "begin": 43410,
                "end": 43424
              },
              "text": "Date of Value",
              "row_index_begin": 0,
              "row_index_end": 0,
              "column_index_begin": 2,
              "column_index_end": 2,
              "row_header_ids": [
                "rowHeader-42878-42896",
                "rowHeader-43145-43164"
              ],
              "row_header_texts": [
                "Appraisal Premise",
                "Interest Appraised"
              ],
              "row_header_texts_normalized": [
                "Appraisal Premise",
                "Interest Appraised"
              ],
              "column_header_ids": [],
              "column_header_texts": [],
              "column_header_texts_normalized": [],
              "attributes": []
            }
          ],
          "contexts": [
            {
              "location": {
                "begin": 44980,
                "end": 44996
              },
              "text": "Compiled by CBRE"
            }
          ],
          "key_value_pairs": []
        }
      ]
    }
  ]
}

table_results.enabled

true 時,回應中會包含一個 table_results 陣列,該陣列依得分相關性順序列出與 natural_language_query 值相符的表物件清單。 對於所有專案類型 ( 合約的文件擷取除外),預設值為 false

table_results.count

此參數指定 table_results 陣列中可包含的最大表數。 只有在 table_results.enabled=true 時才會傳回。預設值為 10