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

阿里云Elasticsearch AI場(chǎng)景語義搜索

阿里云檢索服務(wù)Elasticsearch版(簡(jiǎn)稱ES)結(jié)合了搜索開發(fā)工作臺(tái)的組件化模型能力,本文介紹搭建AI語義搜索的方案。

方案介紹

阿里云搜索開發(fā)工作臺(tái)圍繞智能搜索及檢索增強(qiáng)生成RAG(Retrieval-Augmented Generation)場(chǎng)景,能夠提供優(yōu)質(zhì)的組件化服務(wù)。阿里云ES提供高性能混合檢索方案,結(jié)合搜索開發(fā)工作臺(tái)AI模型服務(wù),可以提供完整的AI語義搜索方案。方案如下:

image

  • 數(shù)據(jù)寫入原理:

    對(duì)大文檔數(shù)據(jù)進(jìn)行切片處理(可選操作),將切分后的文檔片段調(diào)用文本向量化服務(wù),生成稠密向量(Dense ventor)和稀疏向量(Sparse ventor),在阿里云ES中構(gòu)建稠密向量索引和稀疏向量索引。稀疏向量常用于表達(dá)關(guān)鍵詞和詞頻信息,可與稠密向量、文本索引搭配進(jìn)行混合檢索,提升檢索效果。

  • 數(shù)據(jù)查詢?cè)恚?/p>

    將需要查詢的Query信息,通過向量化模型轉(zhuǎn)換為稠密向量和稀疏向量,在阿里云ES中進(jìn)行混合檢索,召回TOP N文檔內(nèi)容。

前提條件

步驟一:創(chuàng)建模型

阿里云ES的Inference API提供了加載第三方模型服務(wù)的功能, 同時(shí)擴(kuò)展了對(duì)阿里云搜索開發(fā)工作臺(tái)推理模型服務(wù)的支持,詳情參見阿里云Elasticsearch Inference API介紹。

在阿里云ES中注冊(cè)搜索開發(fā)工作臺(tái)模型服務(wù),構(gòu)建語義搜索需要的模型服務(wù)如下:

說明

您也可以使用已注冊(cè)模型服務(wù)快速搭建語義搜索。

環(huán)節(jié)

服務(wù)說明

服務(wù)說明文檔

文檔切片

文檔切片服務(wù)(ops-document-split-001):提供通用文本切片服務(wù),支持基于文檔段落、文本語義、指定規(guī)則,對(duì)HTML、Markdown、txt格式的結(jié)構(gòu)化數(shù)據(jù)進(jìn)行拆分,同時(shí)支持以富文本形式提取文檔中的代碼、圖片以及表格。

文檔切片API

文本向量化

  • 文本向量化服務(wù)-001(ops-text-embedding-001):提供多語言(40+)文本向量化服務(wù),輸入文本最大長(zhǎng)度300,輸出向量維度1536維。

  • 通用文本向量化服務(wù)-002(ops-text-embedding-002):提供多語言(100+)文本向量化服務(wù),輸入文本最大長(zhǎng)度8192,輸出向量維度1024維。

  • 文本向量化服務(wù)-中文-001(ops-text-embedding-zh-001):提供中文文本向量化服務(wù),輸入文本最大長(zhǎng)度1024,輸出向量維度768維。

  • 文本向量化服務(wù)-英文-001(ops-text-embedding-en-001):提供英文文本向量化服務(wù),輸入文本最大長(zhǎng)度512,輸出向量維度768維。

文本向量API

文本稀疏向量化

文本稀疏向量化服務(wù)(ops-text-sparse-embedding-001):提供將文本數(shù)據(jù)轉(zhuǎn)化為稀疏向量形式表達(dá)的服務(wù),稀疏向量存儲(chǔ)空間更小,常用于表達(dá)關(guān)鍵詞和詞頻信息,可與稠密向量搭配進(jìn)行混合檢索,提升檢索效果。提供多語言(100+)文本向量化服務(wù),輸入文本最大長(zhǎng)度8192。

文本稀疏向量化API

創(chuàng)建doc_split推理模型

注冊(cè)搜索開發(fā)工作臺(tái)文檔切片服務(wù)(ops-document-split-001),創(chuàng)建doc_split推理模型。

PUT _inference/doc_split/os-doc-split-test
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-xxx",
    "service_id": "ops-document-split-001",
    "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  },
  "task_settings": {
    "document": {"content_type": "text"},
    "strategy": {"max_chunk_size": 20}
  }
}

max_chunk_size用來設(shè)置切片的最大長(zhǎng)度,默認(rèn)值是300。由于本文測(cè)試的文本較短,為了測(cè)試查詢時(shí)的inner_hits參數(shù),以上示例max_chunk_size設(shè)置了較小值。其他參數(shù)請(qǐng)參見阿里云Elasticsearch Inference API介紹。

創(chuàng)建text_embedding推理模型

注冊(cè)搜索開發(fā)工作臺(tái)文本向量化服務(wù)-001(ops-text-embedding-001),創(chuàng)建text_embedding推理模型。

PUT _inference/text_embedding/os-embeddings-test
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-xxx",
    "service_id": "ops-text-embedding-001",
    "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  }
}

創(chuàng)建sparse_embedding推理模型

注冊(cè)搜索開發(fā)工作臺(tái)文本稀疏向量化服務(wù)(ops-text-sparse-embedding-001),創(chuàng)建sparse_embedding推理模型。

PUT _inference/sparse_embedding/os-sparse-embeddings-test
{
  "service": "alibabacloud-ai-search",
  "service_settings": {
    "api_key": "OS-xxx",
    "service_id": "ops-text-sparse-embedding-001",
    "host" : "default-j01.platform-cn-shanghai.opensearch.aliyuncs.com",
    "workspace" : "default"
  }
}

調(diào)試模型

以下代碼以調(diào)試text_embedding推理模型為例,其他模型使用類似方式調(diào)試。

POST _inference/text_embedding/os-embeddings-test
{
  "input":["科學(xué)技術(shù)是第一生產(chǎn)力", "elasticsearch產(chǎn)品文檔"]
}

步驟二:調(diào)用服務(wù)搭建語義搜索并調(diào)試

以下演示了2個(gè)ES語義搜索示例:

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

  • 使用文檔切片:使用ES nested類型,將一個(gè)文本切成多個(gè)chunk數(shù)組,分別對(duì)這些chunk進(jìn)行embedding、sparse_embedding。

說明

關(guān)于ingest pipeline的更多信息,請(qǐng)參見Ingest Processor擴(kuò)展

不使用文檔切片

配置ingest pipeline

文檔原始數(shù)據(jù)長(zhǎng)度較小,或已完成文檔切片的doc,在向量模型最大處理限制之內(nèi),可不使用文檔切片,只對(duì)寫入的content進(jìn)行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": "os-embeddings-test",
        "input_output": [
          {
            "input_field": "content",
            "output_field": "content_embedding"
          }
        ]
      }
    },
    {
      "text_embedding": {
        "model_id": "os-sparse-embeddings-test",
        "input_output": [
          {
            "input_field": "content",
            "output_field": "content_sparse_embedding"
          }
        ]
      }
    }
  ]
}

ingest pipeline創(chuàng)建成功后,可以通過simulate接口(僅用于模擬調(diào)試,不會(huì)實(shí)際創(chuàng)建索引),測(cè)試pipeline處理的效果:

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

創(chuàng)建索引

執(zhí)行以下代碼,創(chuàng)建不使用文檔切片的索引:

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

寫入數(shù)據(jù)

寫入數(shù)據(jù)時(shí)帶上配置好的pipeline_id,文本數(shù)據(jù)就可以通過pipeline進(jìn)行自動(dòng)的embedding。

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

查詢數(shù)據(jù)

  • knn查詢:

    GET os_demo_no_split_index/_search
    {
      "_source": "content", 
      "knn" : {
        "field": "content_embedding",
        "query_vector_builder": {
          "text_embedding": {
            "model_id": "os-embeddings-test",
            "model_text": """
            AI在醫(yī)療和金融行業(yè)的應(yīng)用
            """
          }
        },
        "k": 10,
        "num_candidates": 100
      }
    }
  • 使用RRF查詢,并對(duì)文本檢索、稀疏向量檢索、稠密向量檢索進(jìn)行混合排序:

    GET os_demo_no_split_index/_search
    {
      "_source": "content", 
      "sub_searches":[
        {
          "query":{
            "match": {
              "content": "AI在醫(yī)療和金融行業(yè)的應(yīng)用"
            }
          }
        },
        {
          "query": {
            "text_expansion":{
              "content_sparse_embedding":{
                "model_id":"os-sparse-embeddings-test",
                "model_text":"AI在醫(yī)療和金融行業(yè)的應(yīng)用"
              }
            }
          }
        }
      ],
      "knn" : {
        "field": "content_embedding",
        "query_vector_builder": {
          "text_embedding": {
            "model_id": "os-embeddings-test",
            "model_text": """
            AI在醫(yī)療和金融行業(yè)的應(yīng)用
            """
          }
        },
        "k": 10,
        "num_candidates": 100
      },
      "rank":{
        "rrf":{
        }
      }
    }

使用文檔切片

配置ingest pipeline

對(duì)寫入的文檔進(jìn)行文檔切片,使用nested類型存儲(chǔ)切片內(nèi)容,將切片后的文檔、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": "os-doc-split-test",
        "input_output": [
          {
            "input_field": "content",
            "output_field": "chunk",
            "extend_output_field": "chunk_ext"
          }
        ]
      }
    },
    {
      "foreach": {
        "field": "chunk",
        "processor": {
          "text_embedding": {
            "model_id": "os-embeddings-test",
            "input_output": [
              {
                "input_field": "_ingest._value.content",
                "output_field": "_ingest._value.embedding"
              }
            ]
          }
        }
      }
    },
    {
      "foreach": {
        "field": "chunk",
        "processor": {
          "text_embedding": {
            "model_id": "os-sparse-embeddings-test",
            "input_output": [
              {
                "input_field": "_ingest._value.content",
                "output_field": "_ingest._value.sparse_embedding"
              }
            ]
          }
        }
      }
    }
  ]
}

ingest pipeline創(chuàng)建成功后,可以通過simulate接口(僅用于模擬調(diào)試,不會(huì)實(shí)際創(chuàng)建索引),測(cè)試pipeline處理的效果::

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

創(chuàng)建索引

執(zhí)行以下代碼,創(chuàng)建使用文檔切片的索引:

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"
            }
          }
        }
      }
  }
}

寫入數(shù)據(jù)

寫入數(shù)據(jù)時(shí)帶上配置好的pipeline_id,文本數(shù)據(jù)就可以通過pipeline進(jìn)行自動(dòng)的embedding。

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

查詢數(shù)據(jù)

  • knn查詢

    GET os_demo_index/_search
    {
      "_source": "content", 
      "knn" : {
        "field": "chunk.embedding",
        "query_vector_builder": {
          "text_embedding": {
            "model_id": "os-embeddings-test",
            "model_text": """
            AI在醫(yī)療和金融行業(yè)的應(yīng)用
            """
          }
        },
        "k": 10,
        "num_candidates": 100
      }
    }

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

    GET os_demo_index/_search
    {
      "_source": "content", 
      "knn" : {
        "field": "chunk.embedding",
        "query_vector_builder": {
          "text_embedding": {
            "model_id": "os-embeddings-test",
            "model_text": """
            AI在醫(yī)療和金融行業(yè)的應(yīng)用
            """
          }
        },
        "k": 10,
        "num_candidates": 100,
        "inner_hits":{
          "_source": ["chunk.content","chunk.meta"],
          "size":2
        }
      }
    }
  • 使用RRF查詢,并對(duì)文本檢索、稀疏向量檢索、稠密向量檢索進(jìn)行混合排序。

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

常見問題

配置inference接口時(shí)的相關(guān)報(bào)錯(cuò)及解決方法:

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

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

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

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

  • 報(bào)錯(cuò)信息:"Invalid host [${URL}], please check that the URL is correct."。

    解決方法:配置的host錯(cuò)誤,請(qǐng)檢查host是否配置正確。

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

    解決方法:配置的workspace錯(cuò)誤,請(qǐng)加差workspace是否配置正確。