日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

阿里云Elasticsearch AI場景語義搜索

阿里云檢索服務Elasticsearch版(簡稱ES)結合了搜索開放平臺的組件化模型能力,可以用于構建高效、精準的語義搜索系統。本文介紹搭建AI語義搜索的方法,帶您體驗AI技術如何提升搜索的準確性和用戶體驗。

前提條件

操作流程

AI場景語義搜索包括數據寫入和數據查詢兩個核心步驟。具體原理,請參見AI語義搜索。操作流程包括:

  • AI模型調試:驗證模型是否可以成功調用。

  • 數據處理與寫入:

    • 配置ingest pipeline:配置可以對數據進行預處理的ingest pipeline,應用文檔切片模型對源數據進行語義切分,應用向量化模型生成文檔片段的稠密與稀疏向量。

    • 創建索引:在ES中建立基于向量的文檔索引。

    • 寫入數據:將源數據寫入索引作為搜索內容的基礎。

  • 數據查詢:

    • Knn查詢:將Query轉化為稠密向量進行稠密向量檢索。

    • RRF查詢:將Query轉化為稠密向量及稀疏向量,并進行全文檢索、稠密向量檢索、稀疏向量檢索,通過融合排序算法召回Top 10的內容。

本文演示了2個ES語義搜索示例:

  • 不使用文檔切片:根據寫入的文本,直接生成embedding、sparse_embedding字段。

  • 使用文檔切片:使用ES nested類型,將一個文本切成多個chunk數組,分別對這些chunk進行embedding、sparse_embedding。

操作步驟(不使用文檔切片

步驟一:(可選)調試模型

  • 調試doc_split推理模型。

    POST _inference/doc_split/ops-document-split-001
    {
      "input":["文檔切片服務(ops-document-split-001):提供通用文本切片服務,支持基于文檔段落、文本語義、指定規則,對HTML、Markdown、txt格式的結構化數據進行拆分,同時支持以富文本形式提取文檔中的代碼、圖片以及表格。OpenSearch文本向量化服務-001(ops-text-embedding-001)提供多語言(40+)文本向量化服務,輸入文本最大長度300,輸出向量維度1536維。"]
    }
  • 調試text_embedding推理模型。

    POST _inference/text_embedding/ops-text-embedding-001
    {
      "input":["科學技術是第一生產力", "elasticsearch產品文檔"]
    }
  • 調試sparse_embedding推理模型。

    POST _inference/sparse_embedding/ops-text-sparse-embedding-001
    {
      "input":["科學技術是第一生產力", "elasticsearch產品文檔"]
    }

步驟二:配置ingest pipeline

文檔原始數據長度較小,或已完成文檔切片的doc,在向量模型最大處理限制之內,可不使用文檔切片,只對寫入的內容進行text dense embedding和sparse embedding,配置的ingest pipeline示例如下:

PUT _ingest/pipeline/os-pipeline-no-split-demo
{
  "description": "This is an example of text-embedding and sparse-embedding fields",
  "processors": [
    {
      "text_embedding": {
        "model_id": "ops-text-embedding-001",
        "input_output": [
          {
            "input_field": "content",
            "output_field": "content_embedding"
          }
        ]
      }
    },
    {
      "text_embedding": {
        "model_id": "ops-text-sparse-embedding-001",
        "input_output": [
          {
            "input_field": "content",
            "output_field": "content_sparse_embedding"
          }
        ]
      }
    }
  ]
}

ingest pipeline創建成功后,可以通過simulate接口(僅用于模擬調試,不會實際創建索引),測試pipeline處理的效果:

POST _ingest/pipeline/os-pipeline-no-split-demo/_simulate
{
  "docs": [
    {
      "_index": "testindex",
      "_id": "1",
      "_source":{
        "content": "elasticsearch產品文檔"
      }
    }
    ]
}

步驟三:創建索引

執行以下代碼,創建不使用文檔切片的索引:

PUT os_demo_no_split_index
{
  "mappings": {
    "properties": {
        "content": {
          "type": "text"
        },
        "content_embedding":{
          "type": "dense_vector",
          "dims": 1536
        },
        "content_sparse_embedding":{
          "type": "sparse_vector"
        }
      }
  }
}

步驟四:寫入數據

將通過pipeline處理后的數據寫入索引作為搜索內容基礎。

寫入數據時帶上配置好的pipeline_id,文本數據就可以通過pipeline進行自動的embedding。

POST os_demo_no_split_index/_bulk?pipeline=os-pipeline-no-split-demo
{"index":{}}
{"content":"現代科技的發展推動了人工智能的極速進步。AI在各個領域展現出巨大的潛力,從醫療到金融,AI都在發揮著重要的作用,為人類的生活帶來了翻天覆地的變化。"}
{"index":{}}
{"content":"教育是一個國家發展的基石。高質量的教育不僅能夠幫助個人實現夢想,還能推動社會的進步。教育公平是實現社會和諧的關鍵,每個孩子都有受教育的權利。"}
{"index":{}}
{"content":"旅游可以讓人們開闊視野,體驗不同的文化和風俗。無論是飽覽自然風光,還是探尋歷史古跡,旅行都能讓人們在體驗中學習和成長。"}
{"index":{}}
{"content":"健康飲食對于保持身體健康至關重要。合理搭配膳食,攝入足夠的營養,不僅可以增強免疫力,還能預防多種疾病。多吃蔬菜水果,少吃高脂食物,是保持健康的重要措施。"}
{"index":{}}
{"content":"互聯網改變了人們的生活方式。隨著智能手機和社交媒體的普及,信息傳播的速度大大加快。人們可以通過網絡獲取最新的新聞、學習新的知識,以及與朋友保持聯系。"}
{"index":{}}
{"content":"歷史是一面鏡子,通過研究歷史,人們能夠更好地了解過去,從而預測未來。無論是戰爭的經驗教訓,還是文明的更迭,歷史都為我們提供了寶貴的知識和智慧。"}
{"index":{}}
{"content":"運動是保持身體健康的重要途徑。無論是跑步、游泳,還是做瑜伽,都有助于強身健體。適量的運動可以提高心肺功能,增強體力,減輕壓力,提高生活質量。"}
{"index":{}}
{"content":"藝術是人類文明的重要組成部分。通過繪畫、音樂、舞蹈等形式,藝術表達了人們的情感和思想。豐富多彩的藝術形式不僅帶給人們美的享受,還能陶冶情操、激發創造力。"}
{"index":{}}
{"content":"環境保護是全人類共同的責任。隨著工業化進程的推進,環境問題日益嚴重。保護環境不僅關系到我們這一代人的生活質量,也影響到后代的福祉。"}
{"index":{}}
{"content":"科學研究是推動社會進步的重要力量。通過不斷的探索和實驗,科學家們揭示了自然界的奧秘,為人類文明的發展提供了強大的推動力。"}
{"index":{}}
{"content":"城市化進程中,城市規劃顯得尤為重要。科學合理的城市規劃能夠提高居民的生活質量,優化資源配置,促進經濟發展。"}
{"index":{}}
{"content":"文學作品是人類思想的結晶。通過閱讀文學作品,人們可以了解不同的世界觀和價值觀,培養同理心,提升文化素養。"}

步驟五:查詢數據

knn查詢(稠密向量檢索)

將Query轉化為稠密向量進行稠密向量檢索。

GET os_demo_no_split_index/_search
{
  "_source": "content", 
  "knn" : {
    "field": "content_embedding",
    "query_vector_builder": {
      "text_embedding": {
        "model_id": "ops-text-embedding-001",
        "model_text": """
        AI在醫療和金融行業的應用
        """
      }
    },
    "k": 10,
    "num_candidates": 100
  }
}

RRF查詢(混合檢索)

將Query轉化為稠密向量及稀疏向量,并進行全文檢索、稠密向量檢索、稀疏向量檢索,通過融合排序算法召回Top 10的內容。

GET os_demo_no_split_index/_search
{
  "_source": "content", 
  "sub_searches":[
    {
      "query":{
        "match": {
          "content": "AI在醫療和金融行業的應用"
        }
      }
    },
    {
      "query": {
        "text_expansion":{
          "content_sparse_embedding":{
            "model_id":"ops-text-sparse-embedding-001",
            "model_text":"AI在醫療和金融行業的應用"
          }
        }
      }
    }
  ],
  "knn" : {
    "field": "content_embedding",
    "query_vector_builder": {
      "text_embedding": {
        "model_id": "ops-text-embedding-001",
        "model_text": """
        AI在醫療和金融行業的應用
        """
      }
    },
    "k": 10,
    "num_candidates": 100
  },
  "rank":{
    "rrf":{
    }
  }
}

操作步驟(使用文檔切片)

步驟一:(可選)調試模型

  • 調試doc_split推理模型。

    POST _inference/doc_split/ops-document-split-001
    {
      "input":["文檔切片服務(ops-document-split-001):提供通用文本切片服務,支持基于文檔段落、文本語義、指定規則,對HTML、Markdown、txt格式的結構化數據進行拆分,同時支持以富文本形式提取文檔中的代碼、圖片以及表格。OpenSearch文本向量化服務-001(ops-text-embedding-001)提供多語言(40+)文本向量化服務,輸入文本最大長度300,輸出向量維度1536維。"]
    }
  • 調試text_embedding推理模型。

    POST _inference/text_embedding/ops-text-embedding-001
    {
      "input":["科學技術是第一生產力", "elasticsearch產品文檔"]
    }
  • 調試sparse_embedding推理模型。

    POST _inference/sparse_embedding/ops-text-sparse-embedding-001
    {
      "input":["科學技術是第一生產力", "elasticsearch產品文檔"]
    }

步驟二:配置ingest pipeline

pipeline配置文檔切片模型對文檔進行語義切分,并應用向量化模型將切片后的文檔生成text embedding向量和sparse embedding向量,寫入nested類型的子文檔中。

PUT _ingest/pipeline/os-pipeline-demo
{
  "description": "This is an example of splitting, text-embedding and sparse-embedding fields use foreach",
  "processors": [
    {
      "document_splitting": {
        "model_id": "ops-document-split-001",
        "input_output": [
          {
            "input_field": "content",
            "output_field": "chunk",
            "extend_output_field": "chunk_ext"
          }
        ]
      }
    },
    {
      "foreach": {
        "field": "chunk",
        "processor": {
          "text_embedding": {
            "model_id": "ops-text-embedding-001",
            "input_output": [
              {
                "input_field": "_ingest._value.content",
                "output_field": "_ingest._value.embedding"
              }
            ]
          }
        }
      }
    },
    {
      "foreach": {
        "field": "chunk",
        "processor": {
          "text_embedding": {
            "model_id": "ops-text-sparse-embedding-001",
            "input_output": [
              {
                "input_field": "_ingest._value.content",
                "output_field": "_ingest._value.sparse_embedding"
              }
            ]
          }
        }
      }
    }
  ]
}

ingest pipeline創建成功后,可以通過simulate接口(僅用于模擬調試,不會實際創建索引),測試pipeline處理的效果::

POST _ingest/pipeline/os-pipeline-demo/_simulate
{
  "docs": [
    {
      "_index": "testindex",
      "_id": "1",
      "_source":{
        "content": "現代科技的發展推動了人工智能的極速進步。AI在各個領域展現出巨大的潛力,從醫療到金融,AI都在發揮著重要的作用,為人類的生活帶來了翻天覆地的變化。"
      }
    }
    ]
}

步驟三:創建索引

執行以下代碼,在ES中建立基于向量的文檔索引。

PUT os_demo_index
{
  "mappings": {
    "properties": {
        "content": {
          "type": "text"
        },
        "chunk":{
          "type":"nested",
          "properties": {
            "content":{
              "type":"text"
            },
            "embedding":{
              "type": "dense_vector",
              "dims": 1536
            },
            "sparse_embedding":{
              "type": "sparse_vector"
            }
          }
        }
      }
  }
}

步驟四:寫入數據

將通過pipeline處理后的數據寫入索引作為搜索內容基礎。

寫入數據時帶上配置好的pipeline_id,文本數據就可以通過pipeline進行自動的切分和embedding。

POST os_demo_index/_bulk?pipeline=os-pipeline-demo
{"index":{}}
{"content":"現代科技的發展推動了人工智能的極速進步。AI在各個領域展現出巨大的潛力,從醫療到金融,AI都在發揮著重要的作用,為人類的生活帶來了翻天覆地的變化。"}
{"index":{}}
{"content":"教育是一個國家發展的基石。高質量的教育不僅能夠幫助個人實現夢想,還能推動社會的進步。教育公平是實現社會和諧的關鍵,每個孩子都有受教育的權利。"}
{"index":{}}
{"content":"旅游可以讓人們開闊視野,體驗不同的文化和風俗。無論是飽覽自然風光,還是探尋歷史古跡,旅行都能讓人們在體驗中學習和成長。"}
{"index":{}}
{"content":"健康飲食對于保持身體健康至關重要。合理搭配膳食,攝入足夠的營養,不僅可以增強免疫力,還能預防多種疾病。多吃蔬菜水果,少吃高脂食物,是保持健康的重要措施。"}
{"index":{}}
{"content":"互聯網改變了人們的生活方式。隨著智能手機和社交媒體的普及,信息傳播的速度大大加快。人們可以通過網絡獲取最新的新聞、學習新的知識,以及與朋友保持聯系。"}
{"index":{}}
{"content":"歷史是一面鏡子,通過研究歷史,人們能夠更好地了解過去,從而預測未來。無論是戰爭的經驗教訓,還是文明的更迭,歷史都為我們提供了寶貴的知識和智慧。"}
{"index":{}}
{"content":"運動是保持身體健康的重要途徑。無論是跑步、游泳,還是做瑜伽,都有助于強身健體。適量的運動可以提高心肺功能,增強體力,減輕壓力,提高生活質量。"}
{"index":{}}
{"content":"藝術是人類文明的重要組成部分。通過繪畫、音樂、舞蹈等形式,藝術表達了人們的情感和思想。豐富多彩的藝術形式不僅帶給人們美的享受,還能陶冶情操、激發創造力。"}
{"index":{}}
{"content":"環境保護是全人類共同的責任。隨著工業化進程的推進,環境問題日益嚴重。保護環境不僅關系到我們這一代人的生活質量,也影響到后代的福祉。"}
{"index":{}}
{"content":"科學研究是推動社會進步的重要力量。通過不斷的探索和實驗,科學家們揭示了自然界的奧秘,為人類文明的發展提供了強大的推動力。"}
{"index":{}}
{"content":"城市化進程中,城市規劃顯得尤為重要。科學合理的城市規劃能夠提高居民的生活質量,優化資源配置,促進經濟發展。"}
{"index":{}}
{"content":"文學作品是人類思想的結晶。通過閱讀文學作品,人們可以了解不同的世界觀和價值觀,培養同理心,提升文化素養。"}

步驟五:查詢數據

說明

contentmodel_text中的內容,可以替換為您想要查詢的內容。

knn查詢(稠密向量檢索)

將Query轉化為稠密向量進行稠密向量檢索。

GET os_demo_index/_search
{
  "_source": "content", 
  "knn" : {
    "field": "chunk.embedding",
    "query_vector_builder": {
      "text_embedding": {
        "model_id": "ops-text-embedding-001",
        "model_text": """
        AI在醫療和金融行業的應用
        """
      }
    },
    "k": 10,
    "num_candidates": 100
  }
}

查詢時帶上inner hint,可返回knn查詢命中的chunk:

GET os_demo_index/_search
{
  "_source": "content", 
  "knn" : {
    "field": "chunk.embedding",
    "query_vector_builder": {
      "text_embedding": {
        "model_id": "ops-text-embedding-001",
        "model_text": """
        AI在醫療和金融行業的應用
        """
      }
    },
    "k": 10,
    "num_candidates": 100,
    "inner_hits":{
      "_source": ["chunk.content","chunk.meta"],
      "size":2
    }
  }
}

RRF查詢(混合檢索)

將Query轉化為稠密向量及稀疏向量,并進行全文檢索、稠密向量檢索、稀疏向量檢索,通過融合排序算法召回Top 10的內容。

GET os_demo_index/_search
{
  "_source": "content", 
  "sub_searches":[
    {
      "query":{
        "match": {
          "content": "AI在醫療和金融行業的應用"
        }
      }
    },
    {
      "query":{
        "nested": {
          "path": "chunk",
          "query": {
            "text_expansion":{
              "chunk.sparse_embedding":{
                "model_id":"ops-text-sparse-embedding-001",
                "model_text":"AI在醫療和金融行業的應用"
              }
            }
          }
        }
      }
    }
  ],
  "knn" : {
    "field": "chunk.embedding",
    "query_vector_builder": {
      "text_embedding": {
        "model_id": "ops-text-embedding-001",
        "model_text": """
        AI在醫療和金融行業的應用
        """
      }
    },
    "k": 10,
    "num_candidates": 100
  },
  "rank":{
    "rrf":{
    }
  }
}

常見問題

配置inference接口時的相關報錯及解決方法:

  • 報錯信息:"Received an unsuccessful status code for request from inference entity id [${inference_endpoint}] status [400]. Error message: [Credentials is not found]"

    解決方法:配置的api_key不存在,請檢查api_key是否配置正確。

  • 報錯信息:"Received an unsuccessful status code for request from inference entity id [${inference_endpoint}] status [400]. Error message: [service_id does not exist]"

    解決方法:配置的service_id不存在,請檢查service_id是否配置正確。

  • 報錯信息:"Invalid host [${URL}], please check that the URL is correct."

    解決方法:配置的host錯誤,請檢查host是否配置正確。

  • 報錯信息:"Received an unsuccessful status code for request from inference entity id [${inference_endpoint}] status [400]. Error message: [App is not found]"

    解決方法:配置的workspace錯誤,請檢查workspace是否配置正確。