自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利用多向量和高級搜索數(shù)據(jù)模型設(shè)計(jì)城市數(shù)據(jù)

譯文 精選
人工智能 其他數(shù)據(jù)庫
本文將介紹如何構(gòu)建高級數(shù)據(jù)模型,并將其用于攝取和各種搜索選項(xiàng)。對于記事簿(Notebook)部分,將運(yùn)行混合多向量搜索,對結(jié)果進(jìn)行重新排序,并顯示結(jié)果文本和圖像。

譯者 | 李睿

審校 | 重樓

本文介紹如何使用Milvus、GenAI、LangChain、YoLo等工具為向量數(shù)據(jù)庫創(chuàng)建、構(gòu)建和設(shè)計(jì)復(fù)雜的非結(jié)構(gòu)化數(shù)據(jù)應(yīng)用程序。

應(yīng)用程序的目標(biāo)

本文將介紹如何構(gòu)建高級數(shù)據(jù)模型,并將其用于攝取和各種搜索選項(xiàng)。對于記事簿(Notebook)部分,將運(yùn)行混合多向量搜索,對結(jié)果進(jìn)行重新排序,并顯示結(jié)果文本和圖像。

  • 攝取數(shù)據(jù)字段,通過查找和格式化來豐富數(shù)據(jù):學(xué)習(xí)攝取包括JSON和圖像在內(nèi)的數(shù)據(jù),格式化和轉(zhuǎn)換以優(yōu)化混合搜索。這一過程在streetcams.py應(yīng)用程序中完成。
  • 將數(shù)據(jù)存儲到Milvus:學(xué)習(xí)如何將數(shù)據(jù)存儲到Milvus中,Milvus是一個(gè)高效的向量數(shù)據(jù)庫,專為高速相似度搜索和人工智能應(yīng)用而設(shè)計(jì)。在這一步中,使用標(biāo)量和多個(gè)向量字段來優(yōu)化數(shù)據(jù)模型(一個(gè)用于文本,一個(gè)用于攝像頭圖像)。這同樣在streetcams.py應(yīng)用程序中進(jìn)行。
  • 在混合多模態(tài)、多向量搜索中使用開源模型進(jìn)行數(shù)據(jù)查詢:了解如何使用標(biāo)量和多個(gè)向量來查詢存儲在Milvus中的數(shù)據(jù),并在這個(gè)記事簿中重新排序最終結(jié)果。
  • 顯示生成的文本和圖像:在這個(gè)記事簿中構(gòu)建用于驗(yàn)證和檢查的快速輸出。
  • 使用LangChain的簡單檢索增強(qiáng)生成(RAG):構(gòu)建一個(gè)簡單的Python RAG應(yīng)用程序(streetcamrag.py),使用Milvus通過Ollama查詢當(dāng)前天氣。在輸出到屏幕上的同時(shí),還將結(jié)果以Markdown格式發(fā)送到Slack。

總結(jié)

通過完成這個(gè)應(yīng)用程序,將全面了解使用Milvus、數(shù)據(jù)攝取對象半結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),以及使用開源模型構(gòu)建健壯高效的數(shù)據(jù)檢索系統(tǒng)。對于未來的功能改進(jìn),可以使用這些結(jié)果為LLM、Slack機(jī)器人將數(shù)據(jù)流傳輸?shù)紸pache Kafka中,以及作為街道攝像頭搜索引擎的基礎(chǔ)。

Milvus:為規(guī)模而構(gòu)建的開源向量數(shù)據(jù)庫

Milvus是一個(gè)流行的開源向量數(shù)據(jù)庫,為應(yīng)用程序提供高性能和可擴(kuò)展的向量相似性搜索。Milvus采用分布式架構(gòu),將計(jì)算和存儲分離,并將數(shù)據(jù)和工作負(fù)載分布在多個(gè)節(jié)點(diǎn)上。這是Milvus具有高可用性和彈性的主要原因之一。Milvus針對各種硬件進(jìn)行了優(yōu)化,并支持大量索引。

可以在Milvus快速入門中獲得更多細(xì)節(jié)。

有關(guān)運(yùn)行Milvus的其他選項(xiàng),可以查看部署頁面。

紐約市511交通信息服務(wù)數(shù)據(jù)

  • 紐約市街道攝像頭信息的REST Feed ,包括緯度、經(jīng)度、道路名稱、攝像頭名稱、攝像頭URL、禁用標(biāo)志和阻止標(biāo)志:

JSON

1 {
2  "Latitude": 43.004452, "Longitude": -78.947479, "ID": "NYSDOT-badsfsfs3",
3  "Name": "I-190 at Interchange 18B", "DirectionOfTravel": "Unknown",
4  "RoadwayName": "I-190 Niagara Thruway",
5 "Url": "https://nyimageurl",
6 "VideoUrl": "https://camera:443/rtplive/dfdf/playlist.m3u8",
7 "Disabled":true, "Blocked":false
8}
  • 然后,從攝像頭圖像的URL端點(diǎn)獲取攝像頭圖像:

  • 在通過Ultralytics YOLO運(yùn)行之后,將得到這個(gè)攝像頭圖像的標(biāo)記版本。

美國國家海洋和大氣管理局(NOAA)當(dāng)前天氣狀況

此外還攝取了一個(gè)REST提要,用于滿足從攝像頭記錄中傳入的緯度和經(jīng)度的天氣條件,其中包括海拔、觀測日期、風(fēng)速、風(fēng)向、能見度、相對濕度和溫度等參數(shù)。

JSON

1
2 "currentobservation":{
3            "id":"KLGA",
4            "name":"New York, La Guardia Airport",
5            "elev":"20",
6            "latitude":"40.78",
7            "longitude":"-73.88",
8            "Date":"27 Aug 16:51 pm EDT",
9            "Temp":"83",
10            "Dewp":"60",
11            "Relh":"46",
12            "Winds":"14",
13            "Windd":"150",
14            "Gust":"NA",
15            "Weather":"Partly Cloudy",
16            "Weatherimage":"sct.png",
17            "Visibility":"10.00",
18            "Altimeter":"1017.1",
19            "SLP":"30.04",
20            "timezone":"EDT",
21            "state":"NY",
22
           "WindChill":"NA"
23        }

攝入和富集

  • 將在Python加載腳本中從NY REST提要中攝取數(shù)據(jù)。
  • 在streetcams.py應(yīng)用程序中Python腳本負(fù)責(zé)攝取、處理和豐富。
  • 迭代REST調(diào)用的JSON結(jié)果,然后豐富、更新、運(yùn)行Yolo predict,然后對提供的緯度和經(jīng)度運(yùn)行NOAA天氣查詢。

構(gòu)建Milvus數(shù)據(jù)模式

  • 在這里將把集合命名為“nycstreetcameras”。
  • 為元數(shù)據(jù)、主鍵和向量添加字段。
  • 此外,還有很多varchar變量,例如roadwayname、county和weathername。

Python

FieldSchema(name='id', dtype=DataType.INT64, is_primary=True, auto_id=True),
2    FieldSchema(name='latitude', dtype=DataType.VARCHAR, max_length=200),
3    FieldSchema(name='longitude', dtype=DataType.VARCHAR, max_length=200),
4    FieldSchema(name='name', dtype=DataType.VARCHAR, max_length=200),
5    FieldSchema(name='roadwayname', dtype=DataType.VARCHAR, max_length=200),
6    FieldSchema(name='directionoftravel', dtype=DataType.VARCHAR, max_length=200),
7    FieldSchema(name='videourl', dtype=DataType.VARCHAR, max_length=200),
8    FieldSchema(name='url', dtype=DataType.VARCHAR, max_length=200),
9    FieldSchema(name='filepath', dtype=DataType.VARCHAR, max_length=200),
10   FieldSchema(name='creationdate', dtype=DataType.VARCHAR, max_length=200),
11    FieldSchema(name='areadescription', dtype=DataType.VARCHAR, max_length=200),
12    FieldSchema(name='elevation', dtype=DataType.VARCHAR, max_length=200), 
13    FieldSchema(name='county', dtype=DataType.VARCHAR, max_length=200), 
14    FieldSchema(name='metar', dtype=DataType.VARCHAR, max_length=200), 
15    FieldSchema(name='weatherid', dtype=DataType.VARCHAR, max_length=200),
16    FieldSchema(name='weathername', dtype=DataType.VARCHAR, max_length=200), 
17    FieldSchema(name='observationdate', dtype=DataType.VARCHAR, max_length=200), 
18    FieldSchema(name='temperature', dtype=DataType.FLOAT), 
19    FieldSchema(name='dewpoint', dtype=DataType.VARCHAR, max_length=200), 
20    FieldSchema(name='relativehumidity', dtype=DataType.VARCHAR, max_length=200), 
21    FieldSchema(name='windspeed', dtype=DataType.VARCHAR, max_length=200), 
22    FieldSchema(name='winddirection', dtype=DataType.VARCHAR, max_length=200),
23    FieldSchema(name='gust', dtype=DataType.VARCHAR, max_length=200), 
24    FieldSchema(name='weather', dtype=DataType.VARCHAR, max_length=200), 
25    FieldSchema(name='visibility', dtype=DataType.VARCHAR, max_length=200), 
26    FieldSchema(name='altimeter', dtype=DataType.VARCHAR, max_length=200),
27    FieldSchema(name='slp', dtype=DataType.VARCHAR, max_length=200), 
28    FieldSchema(name='timezone', dtype=DataType.VARCHAR, max_length=200), 
29    FieldSchema(name='state', dtype=DataType.VARCHAR, max_length=200), 
30    FieldSchema(name='windchill', dtype=DataType.VARCHAR, max_length=200),
31    FieldSchema(name='weatherdetails', dtype=DataType.VARCHAR, max_length=8000),    
32    FieldSchema(name='image_vector', dtype=DataType.FLOAT_VECTOR, dim=512),
33    FieldSchema(name='weather_text_vector', dtype=DataType.FLOAT_VECTOR, dim=384)

這兩個(gè)向量是image_vector和weather_text_vector,它們包含一個(gè)圖像向量和一個(gè)文本向量。為主鍵id和每個(gè)向量添加索引。對于這些索引有很多選擇,它們可以極大地提高性能。

將數(shù)據(jù)插入Milvus

然后使用與模式名稱和類型匹配的標(biāo)量字段對集合進(jìn)行簡單的插入操作。在插入之前,必須對圖像和天氣文本運(yùn)行嵌入函數(shù)。然后插入記錄。再采用Attu檢查數(shù)據(jù)。

建立記事簿的報(bào)告

將構(gòu)建一個(gè)Jupyter記事簿來查詢和報(bào)告多向量數(shù)據(jù)集。

為嵌入句子文本準(zhǔn)備Hugging Face的句子轉(zhuǎn)換器

利用Hugging Face的一個(gè)模型“all-MiniLM-L6-v2”,一個(gè)句子轉(zhuǎn)換器來為短文本字符串構(gòu)建密集嵌入。這篇文章是對離街頭攝像頭最近的地點(diǎn)的天氣細(xì)節(jié)的簡短描述。

參見:使用HuggingFace整合

為圖像準(zhǔn)備嵌入模型

使用標(biāo)準(zhǔn)的resnet34 Pytorch特征提取器,經(jīng)常使用它來處理圖像。

實(shí)例化Milvus

如前所述,Milvus是一個(gè)流行的開源向量數(shù)據(jù)庫,為人工智能應(yīng)用程序提供高性能和可擴(kuò)展的向量相似性搜索。

  • 在這個(gè)例子中,將連接到運(yùn)行在Docker中的Milvus。
  • 將URI設(shè)置為本地文件,例如/milvus.db是最方便的方法,因?yàn)樗鼤詣?dòng)利用Milvus Lite將所有數(shù)據(jù)存儲在該文件中。
  • 如果有大量的數(shù)據(jù)(例如超過一百萬個(gè)向量),可以在Docker或Kubernetes上設(shè)置一個(gè)性能更高的Milvus服務(wù)器。在這一設(shè)置中,可以使用服務(wù)器URI,例如http://localhost:19530作為URI。
  • 如果想使用Zilliz Cloud (Milvus的完全托管云服務(wù)),可以調(diào)整URI和令牌,它們對應(yīng)于Zilliz Cloud中的公共端點(diǎn)和API密鑰。

準(zhǔn)備搜索

建立兩個(gè)搜索(AnnSearchRequest),將其組合在一起進(jìn)行混合搜索,其中將包括一個(gè)重排器(Reranker)。

顯示結(jié)果

這里顯示了對兩個(gè)向量重新排序的混合搜索結(jié)果,展示了一些輸出標(biāo)量字段和從存儲路徑讀取的圖像。

混合搜索的結(jié)果可以迭代,可以很容易地訪問選擇的所有輸出字段。filepath包含到本地存儲映像的鏈接,可以從key.entity.filepath訪問。鍵包含所有的結(jié)果,而key.entity擁有在上一步混合搜索中選擇的所有輸出字段。

迭代重新排序的結(jié)果,并顯示圖像和天氣細(xì)節(jié)。

RAG應(yīng)用程序

由于已經(jīng)加載了一個(gè)包含天氣數(shù)據(jù)的集合,可以將其用作RAG(檢索增強(qiáng)生成)的一部分。將利用本地的Ollama、LangChain和Milvus構(gòu)建一個(gè)完全開源的RAG應(yīng)用程序。

  • 采用集合將vector_store設(shè)置為Milvus。

Python

1 vector_store = Milvus(
2    embedding_function=embeddings,
3    collection_name="CollectionName",
4    primary_field = "id",
5    vector_field = "weather_text_vector",
6    text_field="weatherdetails",
7    connection_args={"uri": "https://localhost:19530"},
8 )
  • 然后連接到Ollama。

Python

1llm = Ollama(
2        model="llama3",
3
       callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),
4        stop=["<|eot_id|>"],
5    )
  • 提示互動(dòng)問題。

Python

1 query = input("\nQuery: ")
  • 在LLM和vector store之間建立了一個(gè)RetrievalQA連接。傳入查詢并獲得結(jié)果。

Python

1 qa_chain = RetrievalQA.from_chain_type(
2    llm, retriever=vector_store.as_retriever(collection =  SC_COLLECTION_NAME))
3
4 result = qa_chain({"query": query})
5 resultforslack = str(result["result"])
  • 然后將結(jié)果發(fā)布到Slack通道。

Python

1 response = client.chat_postMessage(channel="C06NE1FU6SE", text="", 
2                                   blocks=[{"type": "section",
3                                            "text": {"type": "mrkdwn",
4                                                     "text": str(query) + 
5                                                     "  \n\n" }}, 
6                                           {"type": "divider"},
7                                           {"type": "section","text": 
8                                            {"type": "mrkdwn","text": 
9                                             str(resultforslack) +"\n" }}]

以下是與Slack聊天的輸出。

可以在下面的GitHub中找到記事簿、攝取腳本和交互式RAG應(yīng)用程序的所有源代碼。

結(jié)論

在這個(gè)記事簿中,已經(jīng)了解如何使用Milvus對同一集合中的多個(gè)向量進(jìn)行混合搜索,并對結(jié)果進(jìn)行重新排序。還看到了如何構(gòu)建一個(gè)復(fù)雜的數(shù)據(jù)模態(tài),其中包含多個(gè)向量和許多標(biāo)量字段,這些字段表示與數(shù)據(jù)相關(guān)的大量元數(shù)據(jù)。

學(xué)習(xí)了如何使用Python將JSON、圖像和文本攝取到Milvus中。

最后,構(gòu)建了一個(gè)小型聊天應(yīng)用程序,用于查看交通攝像頭附近位置的天氣。

用戶如果構(gòu)建自己的應(yīng)用程序,可以查看下面的參考資料。

資源

在下面的列表中,可以找到有助于了解更多關(guān)于為Milvus使用預(yù)訓(xùn)練的嵌入模型、對文本數(shù)據(jù)進(jìn)行搜索的資源,以及一個(gè)很好的嵌入函數(shù)示例記事簿。

原文標(biāo)題:Utilizing Multiple Vectors and Advanced Search Data Model Design for City Data,作者:Tim Spann,Timothy Spann

責(zé)任編輯:姜華 來源: 51CTO內(nèi)容精選
相關(guān)推薦

2017-06-27 14:13:04

智慧城市數(shù)據(jù)體系城市數(shù)據(jù)體系

2016-10-18 09:46:56

大數(shù)據(jù)城市高科技

2021-07-14 10:09:05

架構(gòu)模型數(shù)據(jù)

2018-08-08 14:59:26

大數(shù)據(jù)

2010-05-26 14:37:56

Cassandra數(shù)據(jù)

2021-02-28 22:20:25

2023-12-14 10:51:57

2017-03-29 10:02:40

新華三

2023-10-26 06:55:46

大數(shù)據(jù)數(shù)據(jù)倉庫

2017-06-27 10:08:29

數(shù)據(jù)倉庫模型

2009-09-18 14:07:51

LINQ to SQL

2012-03-05 10:54:03

NoSQL

2021-01-27 05:34:33

Python對象模型

2022-06-14 08:02:35

關(guān)系模型數(shù)據(jù)模型文檔模型

2024-04-22 10:33:18

物聯(lián)網(wǎng)數(shù)據(jù)科學(xué)智慧城市

2016-11-02 12:32:47

數(shù)據(jù)分析大數(shù)據(jù)模型

2010-08-11 09:29:25

FlexJava數(shù)據(jù)模型

2010-07-06 11:52:59

數(shù)據(jù)庫RationalJazz

2020-10-14 06:28:38

數(shù)據(jù)倉庫模型

2016-01-07 11:25:12

數(shù)據(jù)模型訓(xùn)練數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號