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

GenAI時(shí)代的實(shí)時(shí)數(shù)據(jù)分析:Apache Pinot與向量索引技術(shù)探秘

大數(shù)據(jù) 數(shù)據(jù)分析 算法
本文將分享如何使用 Apache Pinot 將實(shí)時(shí)數(shù)據(jù)分析和檢索增強(qiáng)生成 RAG 結(jié)合起來。隨著實(shí)時(shí)機(jī)器學(xué)習(xí)以及數(shù)據(jù)分析應(yīng)用的發(fā)展,實(shí)時(shí)數(shù)據(jù)的價(jià)值越來越多地被挖掘出來。

一、實(shí)時(shí) OLAP 的興起

1. 數(shù)據(jù)價(jià)值隨時(shí)間的變化

圖片

如上圖所示,可以看出,對(duì)于單個(gè)事件來說,數(shù)據(jù)價(jià)值會(huì)隨著時(shí)間逐漸降低,比如,用戶對(duì)小紅書上某個(gè)帖子或淘寶上的產(chǎn)品發(fā)生了點(diǎn)擊行為,之后就會(huì)有相關(guān)的產(chǎn)品或廣告的推薦,以及進(jìn)行步更多的鏈接、視頻等各式各類的推薦,推薦的效果在點(diǎn)擊發(fā)生當(dāng)時(shí)最有用,之后效果會(huì)遞減。同時(shí),由于有很多人有類似的數(shù)據(jù),我們可以在這些數(shù)據(jù)上做一些聚合分析,這類聚合分析的價(jià)值會(huì)隨著時(shí)間和數(shù)據(jù)量的增加而增加。之前我們會(huì)把大部分的時(shí)間和精力都聚焦在這類批式的后處理的分析上,而對(duì)實(shí)時(shí)數(shù)據(jù)分析的關(guān)注較少。

隨著實(shí)時(shí)機(jī)器學(xué)習(xí)以及數(shù)據(jù)分析應(yīng)用的發(fā)展,實(shí)時(shí)數(shù)據(jù)的價(jià)值越來越多地被挖掘出來。

圖片

過去,數(shù)據(jù)分析更多是面向公司內(nèi)部的分析,比如運(yùn)營(yíng)數(shù)據(jù)分析等;未來,數(shù)據(jù)分析將更多用來服務(wù)最終用戶。比如,推薦算法,本身就是用戶自己的數(shù)據(jù)來訓(xùn)練模型,通過把用戶的數(shù)據(jù)變?yōu)楫a(chǎn)品又給用戶使用,完成整個(gè)數(shù)據(jù)的生命周期,并且能給用戶更好的體驗(yàn)。

2. 實(shí)時(shí)數(shù)據(jù)分析邊界拓展

圖片

實(shí)時(shí)數(shù)據(jù)分析的邊界也在不停地拓展。比如:

  • 在應(yīng)用上,由面向內(nèi)部的數(shù)據(jù)分析變成面向用戶、面向?qū)ο蟮臄?shù)據(jù)分析;
  • 在數(shù)據(jù)的結(jié)構(gòu)上,從結(jié)構(gòu)化數(shù)據(jù)(如 SQL 表,定義好行列的數(shù)據(jù)類型)變成半結(jié)構(gòu)化數(shù)據(jù)或非結(jié)構(gòu)化的數(shù)據(jù)(如文本數(shù)據(jù)、Json 數(shù)據(jù)),甚至對(duì)于音頻、視頻的數(shù)據(jù),可以把它們做成 embedding,存入數(shù)據(jù)庫(kù)以進(jìn)行更多的分析和查找;
  • 在數(shù)據(jù)準(zhǔn)確性上,對(duì)查詢的準(zhǔn)確一致性支持也更強(qiáng);
  • 在分析的復(fù)雜度上,原來只能做一些特點(diǎn)維度或切片的分析,未來可以支持復(fù)雜的 Full-SQL 語(yǔ)義的實(shí)時(shí)分析;
  • 在數(shù)據(jù)量級(jí)上,從 TB 級(jí)增加到 PB 級(jí);
  • 在使用場(chǎng)景上,從特定的應(yīng)用場(chǎng)景,到用戶可探索的場(chǎng)景,包括機(jī)器學(xué)習(xí)和 AI 相關(guān)的各類應(yīng)用場(chǎng)景。

3. 典型的數(shù)據(jù)分析技術(shù)棧

圖片

上圖是一個(gè)典型的數(shù)據(jù)分析技術(shù)棧。左邊是數(shù)據(jù)的生成端,在各種設(shè)備上,生成各種原始數(shù)據(jù);中間是基于用戶或產(chǎn)品特性的數(shù)據(jù),比如,電商的訂單數(shù)據(jù),廣告的事件數(shù)據(jù),這些數(shù)據(jù)存到 OLTP,如 MySQL 數(shù)據(jù)庫(kù)中,或 Kafka 的消息隊(duì)列;接下來,OLAP 分析端,離線分析端一般會(huì)將 ETL 來的數(shù)據(jù),存入數(shù)倉(cāng)或數(shù)據(jù)湖里,實(shí)時(shí)分析端一般從 Kafka 直接消費(fèi)進(jìn)入實(shí)時(shí)數(shù)據(jù)庫(kù)中。這里的目標(biāo)是低數(shù)據(jù)查詢延時(shí)、高數(shù)據(jù)查詢精度,并支持更大的查詢量。

二、Apache Pinot 體系結(jié)構(gòu)

1. Apache Pinot 簡(jiǎn)介

圖片

Apache Pinot 是一個(gè)支持高可用、高并發(fā)、低延時(shí)的快速實(shí)時(shí)分布式 OLAP。為了方便處理互聯(lián)網(wǎng)上的用戶數(shù)據(jù),Apache Pinot 是采用列式存儲(chǔ)的 OLAP,并且可以與 Kafka 集成起來,進(jìn)行實(shí)時(shí)數(shù)據(jù)處理。

圖片

Apache Pinot 已在一些大公司里被使用。在 LinkedIn 支持每秒上百萬(wàn)事件,20 萬(wàn) QPS 的毫秒級(jí)查詢;在 stripe 上,支持單表 1 千億行,數(shù)據(jù)量超 PB,2 萬(wàn) QPS,25 毫秒查詢延時(shí);Uber 也是對(duì)實(shí)時(shí)性要求很高的應(yīng)用,用 Pinot 來實(shí)現(xiàn)地理信息的查詢。

圖片

Pinot 是 Apache 基金會(huì)的項(xiàng)目,所有內(nèi)容都完全開源,很多公司都在使用,如上圖所示。大家如果有興趣,也歡迎試用,并在社區(qū)中交流。

2. Apache Pinot 架構(gòu)

圖片

Pinot 采用 Lambda 架構(gòu),架構(gòu)圖所示,包括:

  • Pinot Controller。作為集群和數(shù)據(jù)管理。使用 Zookeeper、Helix 來進(jìn)行集群和數(shù)據(jù)的管理,使用 Restful API 來進(jìn)行溝通。
  • Pinot Broker。作為 Pinot 的查詢層,所有請(qǐng)求先到 Broker,再通過它分配給具體的離線和在線服務(wù),分別查詢,之后再將結(jié)果合并起來。
  • Pinot Server。分為在線和離線數(shù)據(jù)服務(wù)器,在線部分直接從 Kafka 消費(fèi)數(shù)據(jù),離線部分可以從離線和遠(yuǎn)端存儲(chǔ)層讀取數(shù)據(jù);
  • 離線數(shù)據(jù)存儲(chǔ)(Segment Store)。離線部分的數(shù)據(jù)存儲(chǔ)在遠(yuǎn)程 HDFS、Amazon S3 等比較便宜的存儲(chǔ)上,作為備份和分層查詢使用;
  • 實(shí)時(shí)數(shù)據(jù)導(dǎo)入(Real-time Ingestion)。從各種實(shí)時(shí)的數(shù)據(jù)源(如 Kafka、Kinesis)把數(shù)據(jù)消費(fèi)進(jìn)來,實(shí)時(shí)消費(fèi)的數(shù)據(jù)會(huì)被寫到本地?cái)?shù)據(jù)服務(wù)器并且上傳到離線數(shù)據(jù)存儲(chǔ)用于備份。
  • 離線數(shù)據(jù)導(dǎo)入(batch ingestion)。離線數(shù)據(jù)可以通過微批任務(wù),把原始數(shù)據(jù)讀出后,再寫到離線存儲(chǔ)中,然后就可以通知集群,將離線數(shù)據(jù)下載供查詢使用。

3. 索引

圖片

為了支持低延時(shí)、高并發(fā)的查詢,Pinot 的工程優(yōu)化目標(biāo)是盡量減少單次查詢需要掃描的數(shù)據(jù)量。

為此 Pinot 實(shí)現(xiàn)了很多索引來幫助縮小查詢范圍,包括常見的反向索引、排序索引,以及對(duì)于特殊數(shù)據(jù)格式和類型的索引,如區(qū)間范圍的索引、半結(jié)構(gòu)化 Json 數(shù)據(jù)的索引、地理信息的索引等。

同時(shí),對(duì)于聚合查詢,相比于對(duì)于全維度的預(yù)聚合,Pinot 內(nèi)部可以根據(jù)維度的,動(dòng)態(tài)的聚合結(jié)果,使得查詢效率更高。

圖片

4. 可插拔架構(gòu)

圖片

Pinot 采用可插拔架構(gòu),查詢層、索引層、存儲(chǔ)層都支持 SPI 接口,用戶可以方便地在 Pinot 上進(jìn)行二次擴(kuò)展開發(fā)。

圖片

上圖展示了 Pinot 的可插拔架構(gòu)?;?Pinot SPI 包,開發(fā)者可以配置開發(fā)自己的數(shù)據(jù)存儲(chǔ)、輸入格式、流式引擎、索引、查詢等。開發(fā)者只需要寫一些簡(jiǎn)單的實(shí)現(xiàn),就可以構(gòu)建、打包然后應(yīng)用,非常方便。比如,作者僅花一周左右時(shí)間,就實(shí)現(xiàn)了向量索引功能。

三、Apache Pinot 對(duì) AI 的支持

下面將介紹在 AI 時(shí)代,Pinot 如何支持 AI 應(yīng)用。

1. Pinot 作為向量數(shù)據(jù)庫(kù)

圖片

Pinot 可以作為一個(gè)向量數(shù)據(jù)庫(kù)為 AI 提供 Embedding 數(shù)據(jù)存儲(chǔ)以及向量檢索。

Embedding 可以看成一個(gè)浮點(diǎn)數(shù)的數(shù)組,存到數(shù)據(jù)庫(kù)中。有了 Embedding 向量后,當(dāng)一個(gè)向量進(jìn)來,需要查詢和這個(gè)向量最相似的 K 個(gè)結(jié)果。

這類應(yīng)用場(chǎng)景有很多,如常見的搜索場(chǎng)景和推薦場(chǎng)景。

例如二手車搜索場(chǎng)景。用戶可能會(huì)去二手車網(wǎng)站,搜索想要的車。在搜索過程中,用戶會(huì)有很多偏好,比如喜好品牌、年份區(qū)間、價(jià)格區(qū)間、顏色、天窗等。直接使用篩選的話,結(jié)果可能過多或過少。我們可以把用戶搜索的偏好描述,作為一個(gè) Embedding,存入數(shù)據(jù)庫(kù)。然后根據(jù)用戶偏好描述,返回一個(gè)與描述相似的 topK 排序,展示給用戶。

圖片

用戶推薦餐廳場(chǎng)景。可以根據(jù)用戶歷史喜歡吃的東西,同時(shí)結(jié)合用戶當(dāng)前的描述,生成一個(gè) Embedding,存儲(chǔ)起來。然后根據(jù) Embedding,給用戶推薦和他偏好相近的產(chǎn)品,這可以得到更好的用戶產(chǎn)品體驗(yàn)。

圖片

2. 實(shí)時(shí)檢索增強(qiáng)生成 RAG

為什么需要實(shí)時(shí)呢?比如問 ChatGPT,“在足球界,藥廠是什么梗?”,回答“勒沃庫(kù)森”“但至今未能獲得聯(lián)賽冠軍”,而熟悉足球的小伙伴會(huì)知道,“勒沃庫(kù)森”在 2024 年第一次獲得德甲聯(lián)賽冠軍。

圖片

因此,可以看出 LLM 模型和數(shù)據(jù)都是有時(shí)效性的,如果沒有最準(zhǔn)確最實(shí)時(shí)的數(shù)據(jù),可能獲取不到準(zhǔn)確的結(jié)果。通過 RAG 和實(shí)時(shí)向量數(shù)據(jù)庫(kù)的幫助,模型可以提供更實(shí)時(shí)和準(zhǔn)確的結(jié)果。

3. 用 Pinot 實(shí)現(xiàn)實(shí)時(shí) RAG

圖片

為了實(shí)現(xiàn)實(shí)時(shí) RAG,在向量數(shù)據(jù)方面,我們需要通過將原始數(shù)據(jù)變成 Embedding,存到向量數(shù)據(jù)庫(kù)中,從而提供給用戶查詢。

圖片

上圖是一個(gè)一般的流程,用來實(shí)現(xiàn)用戶回復(fù)中對(duì)于實(shí)時(shí)數(shù)據(jù)的要求。

將原始文本文件、音頻或照片根據(jù) Embedding 模型,得到他們的 Embedding 表示,寫入 Kafka 并存入 Pinot,這樣實(shí)時(shí)的數(shù)據(jù)流就變成向量進(jìn)入了向量庫(kù)。

對(duì)于一個(gè)用戶,將他的問題,也轉(zhuǎn)換成對(duì)應(yīng)的 Embedding,然后通過向量相似性搜索,就可以找到一堆類似的數(shù)據(jù);這些數(shù)據(jù)稱為加強(qiáng)上下文(Enhance Context),也就是把相關(guān)的文本和用戶本身的問題合在一起,交給 Prompt,再通過 LLM,生成給用戶的回答。

通過這樣的數(shù)據(jù)處理,可以將實(shí)時(shí)數(shù)據(jù)流與 RAG 結(jié)合起來,達(dá)到更好的準(zhǔn)確性。

圖片

Pinot 提供了很多向量計(jì)算的支持,比如距離計(jì)算函數(shù),支持 L1、L2、余弦、點(diǎn)積等距離??梢愿鶕?jù)不同的用戶場(chǎng)景,選擇不同的距離計(jì)算方法,達(dá)到不同的效果。

圖片

Pinot 通過向量索引可以提高查詢效率。采用 HNSW 算法,來建立向量索引,然后通過多層迭代的方式,幫助用戶輸入的向量,找到離它最近的 n 個(gè)向量。這樣相對(duì)于全表掃描對(duì)每個(gè)向量都計(jì)算一個(gè)距離的方法,計(jì)算復(fù)雜度大幅降低。

而對(duì)于開發(fā)者來說,這個(gè)查詢也很簡(jiǎn)單。如上圖右邊代碼所示,定義了算法使用的距離,以及向量相似度查詢的語(yǔ)句,返回 10 條最近的結(jié)果。

圖片

算法在不同數(shù)據(jù)集上的性能表現(xiàn)如上圖所示。我們使用了 Lucene Benchmark,采用 Lucene 的 HNSW 算法的實(shí)現(xiàn)。大家也可以點(diǎn)擊鏈接去看看不同算法的實(shí)現(xiàn)和性能,因 Lucene 也是開源的,我們會(huì)跟社區(qū)一起進(jìn)行性能優(yōu)化。

圖片

通過混合負(fù)載,可以將 OLAP 和向量數(shù)據(jù)庫(kù)結(jié)合起來,以實(shí)現(xiàn)維度數(shù)據(jù)的過濾,并結(jié)合其它數(shù)據(jù),提高 prompt 的準(zhǔn)確度。

比如,用戶可以有產(chǎn)品評(píng)價(jià)數(shù)據(jù)的 Embedding,也有產(chǎn)品本身的特征,比如 SKU_ID,類別等。在做向量查詢時(shí),需要根據(jù)類別等維度特征過濾,再做相似性查詢,查完的結(jié)果合起來,輸出給 Prompt,進(jìn)行后面的反饋生成。

四、總結(jié)

最后,對(duì)本次分享的主要內(nèi)容進(jìn)行一下總結(jié)。

  • 通過實(shí)時(shí) RAG 可以幫助用戶獲得更好的用戶體驗(yàn);同時(shí),用戶也可以使用他們自己的數(shù)據(jù)來輔助結(jié)果生成。
  • Pinot 作為一個(gè)實(shí)時(shí)向量數(shù)據(jù)庫(kù),可以提供更加實(shí)時(shí)準(zhǔn)確的查詢。
  • Pinot 通過結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)的混合負(fù)載,一起為用戶提供數(shù)據(jù)分析與應(yīng)用服務(wù)。
責(zé)任編輯:姜華 來源: DataFunTalk
相關(guān)推薦

2014-01-07 09:25:31

Amazon云計(jì)算Kinesis

2021-10-25 17:57:08

數(shù)據(jù)技術(shù)架構(gòu)

2012-08-24 08:51:27

IBMdW

2018-08-23 07:40:58

Spark流處理數(shù)據(jù)流

2012-08-28 10:52:58

IBMdW

2024-06-11 08:03:11

2016-08-10 01:00:21

2016-04-22 17:05:30

2022-07-26 11:42:31

科大訊飛Flink數(shù)據(jù)倉(cāng)庫(kù)

2024-02-19 00:06:06

數(shù)據(jù)分析系統(tǒng)Doris

2022-07-14 23:27:57

數(shù)據(jù)分析數(shù)據(jù)驅(qū)動(dòng)可變數(shù)據(jù)

2017-08-09 13:30:21

大數(shù)據(jù)Apache Kafk實(shí)時(shí)處理

2023-11-20 15:52:18

GenAI人工智能

2023-10-24 12:21:58

人工智能邊緣計(jì)算

2015-07-23 09:34:57

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

2023-09-11 14:20:46

人工智能GenAI

2024-08-21 08:00:00

2021-01-18 05:20:52

數(shù)倉(cāng)hive架構(gòu)

2021-09-13 13:46:29

Apache HudiB 站數(shù)據(jù)湖

2023-12-11 08:00:00

架構(gòu)FlinkDruid
點(diǎn)贊
收藏

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