文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

利用多向量和高级搜索数据模型设计城市数据

2024-11-29 18:58

关注

译者 | 李睿

审校 | 重楼

本文介绍如何使用Milvus、GenAI、LangChain、YoLo等工具为向量数据库创建、构建和设计复杂的非结构化数据应用程序。

应用程序的目标

本文将介绍如何构建高级数据模型,并将其用于摄取和各种搜索选项。对于记事簿(Notebook)部分,将运行混合多向量搜索,对结果进行重新排序,并显示结果文本和图像。

总结

通过完成这个应用程序,将全面了解使用Milvus、数据摄取对象半结构化和非结构化数据,以及使用开源模型构建健壮高效的数据检索系统。对于未来的功能改进,可以使用这些结果为LLM、Slack机器人将数据流传输到Apache Kafka中,以及作为街道摄像头搜索引擎的基础。

Milvus:为规模而构建的开源向量数据库

Milvus是一个流行的开源向量数据库,为应用程序提供高性能和可扩展的向量相似性搜索。Milvus采用分布式架构,将计算和存储分离,并将数据和工作负载分布在多个节点上。这是Milvus具有高可用性和弹性的主要原因之一。Milvus针对各种硬件进行了优化,并支持大量索引。

可以在Milvus快速入门中获得更多细节。

有关运行Milvus的其他选项,可以查看部署页面

纽约市511交通信息服务数据

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}

美国国家海洋和大气管理局(NOAA)当前天气状况

此外还摄取了一个REST提要,用于满足从摄像头记录中传入的纬度和经度的天气条件,其中包括海拔、观测日期、风速、风向、能见度、相对湿度和温度等参数。

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        }

摄入和富集

构建Milvus数据模式

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)

这两个向量是image_vector和weather_text_vector,它们包含一个图像向量和一个文本向量。为主键id和每个向量添加索引。对于这些索引有很多选择,它们可以极大地提高性能。

将数据插入Milvus

然后使用与模式名称和类型匹配的标量字段对集合进行简单的插入操作。在插入之前,必须对图像和天气文本运行嵌入函数。然后插入记录。再采用Attu检查数据。

建立记事簿的报告

将构建一个Jupyter记事簿来查询和报告多向量数据集。

为嵌入句子文本准备Hugging Face的句子转换器

利用Hugging Face的一个模型“all-MiniLM-L6-v2”,一个句子转换器来为短文本字符串构建密集嵌入。这篇文章是对离街头摄像头最近的地点的天气细节的简短描述。

参见:使用HuggingFace整合

为图像准备嵌入模型

使用标准的resnet34 Pytorch特征提取器,经常使用它来处理图像。

实例化Milvus

如前所述,Milvus是一个流行的开源向量数据库,为人工智能应用程序提供高性能和可扩展的向量相似性搜索。

准备搜索

建立两个搜索(AnnSearchRequest),将其组合在一起进行混合搜索,其中将包括一个重排器(Reranker)。

显示结果

这里显示了对两个向量重新排序的混合搜索结果,展示了一些输出标量字段和从存储路径读取的图像。

混合搜索的结果可以迭代,可以很容易地访问选择的所有输出字段。filepath包含到本地存储映像的链接,可以从key.entity.filepath访问。键包含所有的结果,而key.entity拥有在上一步混合搜索中选择的所有输出字段。

迭代重新排序的结果,并显示图像和天气细节。

RAG应用程序

由于已经加载了一个包含天气数据的集合,可以将其用作RAG(检索增强生成)的一部分。将利用本地的Ollama、LangChain和Milvus构建一个完全开源的RAG应用程序。

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 )

Python

1llm = Ollama(
2        model="llama3",
3
       callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),
4        stop=["<|eot_id|>"],
5    )

Python

1 query = input("\nQuery: ")

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"])

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应用程序的所有源代码。

结论

在这个记事簿中,已经了解如何使用Milvus对同一集合中的多个向量进行混合搜索,并对结果进行重新排序。还看到了如何构建一个复杂的数据模态,其中包含多个向量和许多标量字段,这些字段表示与数据相关的大量元数据。

学习了如何使用Python将JSON、图像和文本摄取到Milvus中。

最后,构建了一个小型聊天应用程序,用于查看交通摄像头附近位置的天气。

用户如果构建自己的应用程序,可以查看下面的参考资料。

资源

在下面的列表中,可以找到有助于了解更多关于为Milvus使用预训练的嵌入模型、对文本数据进行搜索的资源,以及一个很好的嵌入函数示例记事簿。

原文Utilizing Multiple Vectors and Advanced Search Data Model Design for City Data作者:Tim Spann,Timothy Spann

来源:51CTO内容精选内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯