在認知搜尋中建立適用于語義字幕的查詢

重要

語義搜尋處於公開預覽狀態,可透過預覽版 REST API 和 Azure 入口網站取得。 預覽功能在 補充使用條款下依原樣提供。 這些是可計費的功能。 如需詳細資訊,請參閱 可用性和定價

在本文中,您將瞭解如何使用語義排名來制訂搜尋要求,並傳回語義標題 (以及選擇性的 語義式答案) ,並強調最相關的詞彙和片語。 使用「語義」查詢類型的查詢會傳回標題和答案。

從搜尋檔中的文字逐字解壓縮標題和答案。 此語義子系統會決定您的內容中有哪些部分具有標題或解答的特性,但不會撰寫新的句子或片語。 基於這個理由,包含解釋或定義的內容最適用于語義搜尋。

必要條件

  • 位於標準層 (S1、S2、S3) 的搜尋服務,位於下列其中一個區域:美國中北部、美國西部、美國西部2、美國東部2、北歐、西歐。 如果您在其中一個區域中有現有的 S1 或更高的服務,您可以要求存取,而不需要建立新的服務。

  • 存取語義搜尋預覽: 註冊

  • 包含英文內容的現有搜尋索引

  • 用於傳送查詢的搜尋用戶端

    搜尋用戶端必須在查詢要求中支援預覽 REST Api。 您可以使用 PostmanVisual Studio Code或對預覽 api 進行 REST 呼叫的程式碼。 您也可以在 Azure 入口網站中使用 [搜尋] explorer 來提交語義查詢。

  • 查詢要求必須包含語義選項以及本文中所述的其他參數。

什麼是語義查詢?

在認知搜尋中,查詢是參數化的要求,可判斷查詢處理和回應的圖形。 語義查詢 會加入可叫用語義 reranking 模型的參數,該模型可以評估內容和比對結果的意義,將更多相關的相符專案升階到最上方,並傳回語義答案和標題。

下列要求代表最基本的語義查詢 (沒有答案) 。

POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=2020-06-30-Preview      
{    
    "search": " Where was Alan Turing born?",    
    "queryType": "semantic",  
    "searchFields": "title,url,body",  
    "queryLanguage": "en-us"  
}

如同認知搜尋中的所有查詢,要求是以單一索引的檔集合為目標。 此外,語義查詢所經歷的剖析、分析、掃描和評分順序與非語義查詢相同。

差異在於相關性和評分。 如同此預覽版本中所定義,語義查詢是使用語義語言模型 reranked 結果 的方法,提供一種方式來呈現語義 ranker 最相關的相符專案,而不是預設的相似性排名演算法所指派的分數。

只有從初始結果開始的50相符專案才能以語義方式排列,而且回應中會包含標題。 (選擇性)您可以在 answer 要求上指定參數,以解壓縮可能的答案。 如需詳細資訊,請參閱 語義答案

使用搜尋總管進行查詢

搜尋瀏覽器 已更新為包含適用于語義查詢的選項。 在完成下列步驟之後,入口網站中就會顯示這些選項:

  1. 將您的搜尋服務註冊並進場至預覽計畫

  2. 使用下列語法開啟入口網站: https://portal.azure.com/?feature.semanticSearch=true

查詢選項包括啟用語義查詢、searchFields 和拼寫更正的參數。 您也可以將所需的查詢參數貼到查詢字串中。

搜尋 explorer 中的查詢選項

使用 REST 進行查詢

使用 (REST 預覽) 的搜尋檔 ,以程式設計方式設計要求。

回應會自動包含標題和反白顯示。 如果您想要讓回應包含拼寫更正或答案,請在要求中新增選擇性 spelleranswers 參數。

下列範例會使用飯店範例索引來建立含有語義答案和標題的語義查詢要求:

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30-Preview      
{
    "search": "newer hotel near the water with a great restaurant",
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "searchFields": "HotelName,Category,Description",
    "speller": "lexicon",
    "answers": "extractive|count-3",
    "highlightPreTag": "<strong>",
    "highlightPostTag": "</strong>",
    "select": "HotelId,HotelName,Description,Category",
    "count": true
}

下表摘要說明在語義查詢中使用的查詢參數,讓您可以看到它們全面性地型。 如需所有參數的清單,請參閱 (REST 預覽版搜尋檔)

參數 類型 描述
queryType String 有效的值包括 simple、full 和語義。 語義查詢需要 "語義" 值。
queryLanguage String 語義查詢的必要參數。 目前只會實作為 "en-us"。
searchFields String 可搜尋的欄位清單(以逗號分隔)。 指定進行語義排名的欄位,以從中解壓縮標題和答案。

相較于簡單和完整查詢類型,列出欄位的順序會決定優先順序。 如需詳細的使用方式指示,請參閱 步驟2:設定 searchFields
拼寫 String 選擇性參數,不是特定于語義查詢,會在到達搜尋引擎之前更正拼錯的字詞。 如需詳細資訊,請參閱 將拼寫更正新增至查詢
解答 String 指定結果中是否包含語義答案的選擇性參數。 目前只會執行 "extractive"。 答案可以設定為傳回最多五個。 預設值為1。 此範例會顯示三個答案的計數: "extractive | count3" '。 如需詳細資訊,請參閱傳回 語義答案

制訂要求

本節會逐步解說語義搜尋所需的查詢參數。

步驟1:設定 queryType 和 queryLanguage

將下列參數新增至其餘部分。 這兩個參數都是必要參數。

"queryType": "semantic",
"queryLanguage": "en-us",

QueryLanguage 必須與指派給索引架構中之欄位定義的任何 語言分析器 一致。 如果 queryLanguage 為 "en-us",則任何語言分析器也必須是英文變數 ( "en-us" 或 "en-us" ) 。 任何與語言無關的分析器(例如關鍵字或 simple)都不會與 queryLanguage 值發生衝突。

在查詢要求中,如果您也使用 拼寫更正,則您設定的 queryLanguage 會同樣套用至 [拼寫檢查]、[解答] 和 [標題]。 沒有個別部分的覆寫。

雖然搜尋索引中的內容可以使用多種語言來撰寫,但查詢輸入最有可能是一個。 搜尋引擎不會檢查 queryLanguage、language analyzer 的相容性,以及用來撰寫內容的語言,因此請務必適當地界定查詢範圍,以避免產生不正確的結果。

步驟2:設定 searchFields

SearchFields 參數是用來識別要針對查詢的「語義相似性」進行評估的段落。 在預覽中,我們不建議將 searchFields 留白,因為模型需要提示,指出哪些欄位是最重要的處理方式。

SearchFields 的順序很重要。 如果您已經在現有程式碼中使用 searchFields 來進行簡單或完整的 Lucene 查詢,請重新流覽此參數,以在切換至語義查詢類型時檢查欄位順序。

針對兩個或多個 searchFields:

  • 只將字串欄位和最上層的字串欄位包含在集合中。 如果您在集合中包含非字串欄位或較低層級的欄位,就不會發生任何錯誤,但這些欄位不會用於語義排名。

  • 第一個欄位應該一律是簡潔的 (例如標題或名稱) ,最好是在25個單字下。

  • 如果索引具有文字 (人類可讀取的 URL 欄位(例如), www.domain.com/name-of-the-document-and-other-details 而不是以電腦為焦點(例如 www.domain.com/?id=23463&param=eis) ),請將它放在清單 (,如果沒有精確的標題欄位) ,則為第二個。

  • 依照描述性欄位來追蹤這些欄位,其中可能會找到語義查詢的答案,例如檔的主要內容。

如果只指定一個欄位,請使用描述性欄位,其中可能會找到語義查詢的答案,例如檔的主要內容。

步驟3:移除 orderBy 子句

如果任何 orderBy 子句存在於現有的要求中,請將其移除。 語義分數是用來排序結果,如果您包含明確的排序邏輯,則會傳回 HTTP 400 錯誤。

步驟4:新增答案

(選擇性)如果您想要包含提供答案的其他處理常式,請新增「解答」。 您可以從 searchFields 所欄欄位中找到的段落中,將答案 (和標題) 解壓縮。 請務必在 searchFields 中包含內容豐富的欄位,以取得回應中的最佳解答。 如需詳細資訊,請參閱 如何傳回語義答案

步驟5:新增其他參數

在要求中設定您想要的任何其他參數。 參數(例如,[ 拼寫器]、[ 選取] 和 [計數])會改善要求的品質和回應的可讀性。

(選擇性)您可以自訂套用至標題的醒目提示樣式。 標題會將醒目提示格式套用至檔中摘要回應的主要段落。 預設為 <em>。 如果您想要指定格式化的類型 (例如,黃色背景) ,您可以設定 highlightPreTag 和 highlightPostTag。

評估回應

就像所有的查詢一樣,回應是由標示為可抓取的所有欄位,或只由 select 參數中列出的欄位所組成。 它包含原始的相關性分數,也可能包含計數或批次結果(視您提出要求的方式而定)。

在語義查詢中,回應會有其他元素:新的語義排名相關性分數、純文字中的標題和醒目提示,以及選擇性的答案。

在用戶端應用程式中,您可以建立搜尋頁面的結構,以包含標題做為相符項的描述,而不是特定欄位的整個內容。 當個別欄位對 [搜尋結果] 頁面而言太大時,這會很有用。

上述範例查詢的回應會傳回下列符合項做為最上層挑選。 系統會自動傳回具有純文字和反白顯示版本的標題。 範例中省略了答案,因為無法判斷此特定查詢和主體的答案。

"@odata.count": 35,
"@search.answers": [],
"value": [
    {
        "@search.score": 1.8810667,
        "@search.rerankerScore": 1.1446577133610845,
        "@search.captions": [
            {
                "text": "Oceanside Resort. Luxury. New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
                "highlights": "<strong>Oceanside Resort.</strong> Luxury. New Luxury Hotel. Be the first to stay.<strong> Bay</strong> views from every room, location near the pier, rooftop pool, waterfront dining & more."
            }
        ],
        "HotelName": "Oceanside Resort",
        "Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
        "Category": "Luxury"
    },

下一步

回想一下,語義排名和回應是在初始結果集上建立的。 改善初始結果品質的任何邏輯都將會繼續進行語義搜尋。 在下一個步驟中,請檢查構成初始結果的功能,包括影響字串標記方式的分析器、可以微調結果的評分設定檔,以及預設的相關性演算法。