<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      Binary Quantization技術助力RAG系統內存占用降低32倍

      0
      分享至


      當文檔庫規模擴張時向量數據庫肯定會跟著膨脹。百萬級甚至千萬級的 embedding 存儲,float32 格式下的內存開銷相當可觀。

      好在有個經過生產環境驗證的方案,在保證檢索性能的前提下大幅削減內存占用,它就是Binary Quantization(二值化量化)

      本文會逐步展示如何搭建一個能在 30ms 內查詢 3600 萬+向量的 RAG 系統,用的就是二值化 embedding。



      二值化量化解決什么問題

      常規 embedding 用 float32 存儲:單個 embedding(1024 維)占 4 KB 左右,3600 萬個 embedding 就是 144 GB

      二值化量化把每個維度壓縮成 1 bit:同樣的 embedding 只需 128 bytes,3600 萬個 embedding 降到 4.5 GB

      內存直接減少約 32 倍,而且位運算做相似度搜索更快。

      精度損失與應對策略

      二值化量化確實會帶來精度損失,這點不能回避。

      從 float32 直接壓縮到 1 bit信息丟失不可避免,根據測試數據顯示純二值檢索的準確度會下降到 92.5% 左右。不過這個問題有成熟的解決方案。

      Oversampling(過采樣)

      檢索時多拿一些候選結果。比如本來只需要 top-5,可以先檢索 top-20 或 top-50,用數量換精度抵消量化造成的分辨率損失。

      Rescoring(重排序)

      先用二值向量快速篩選候選集,然后用原始的 float32 向量重新計算相似度并排序。

      具體做法是:把全精度向量存在磁盤、二值向量和索引放內存,檢索時先用內存里的二值索引快速找到候選,再從磁盤加載原始向量做精確評分。

      這兩個技術組合使用,能把準確度拉回到 95%-96%,對大多數 RAG 應用來說夠用了。

      使用限制

      維度小于 1024 的 embedding 不建議用二值化。維度太小時,1 bit 能保留的信息不足,準確度會掉得比較厲害。所以這個技術更適合高維向量(≥1024 維)和大規模數據集。

      相比之下,float8 這類低位浮點格式在 4 倍壓縮下性能損失不到 0.3%,但內存節省遠不如二值化激進。32 倍的壓縮率帶來的精度代價,需要根據具體場景權衡。

      數據加載

      先用 LlamaIndex 的 directory reader 讀取文檔。

      支持的格式挺全:PDF、Word、Markdown、PowerPoint、圖片、音頻、視頻都行。

      LLM 配置

      from llama_index.llms.groq import Groq
      from llama_index.core.base.llms.types import (
      ChatMessage, MessageRole )
      llm = Groq(
      model="MiniMaxAI/MiniMax-M2.1",
      api_key=groq_api_key,
      temperature=0.5,
      max_tokens=1000
      )
      Moonshot Al
      prompt_template = (
      "Context information is below.\n"
      "-----\n"
      "CONTEXT: {context}\n"
      "Given the context information above think step by step
      "to answer the user's query in a crisp and concise manner.
      "In case you don't know the answer say 'I don't know!'.\n"
      "QUERY: {query}\n"
      "ANSWER:
      )
      = query "Provide concise breakdown of the document"
      prompt = prompt_template.format(context=full_context, query=query)
      user_msg = ChatMessage(role=MessageRole.USER, content=prompt)
      # Stream response from LLM
      streaming_response = llm.stream_complete(user_msg.content)

      LLM 配置完成,下一步開始對文件進行索引

      二值 Embedding 生成

      我們先生成標準 float32 embedding,然后用簡單閾值轉成二值向量。

      每個維度的轉換規則:

      • 值 > 0 → 1
      • 否則 → 0

      Query Embedding 和二值化

      # Generate float32 query embedding
      query_embedding = embed_model.get_query_embedding(query)
      # Apply binary quantization to query
      binary_query = binary_quantize(query_embedding)
      # Perform similarity search using Milvus
      search_results = client.search(
      )
      collection_name="fastest-rag",
      data=[binary_query],
      Similarity search
      anns_field="binary_vector",
      search_params={"metric_type": "HAMMING"},
      output_fields=["context"],
      limit=5 # Retrieve top 5 similar chunks
      # Store retrieved context
      full_context = []
      for res in search_results:
      context = res ["payload"]["context"]
      full_context.append(context)

      為什么用 Hamming distance? 它是二值向量的天然相似度度量,計算速度極快。

      Milvus Schema 和索引設置

      from pymilvus import MilvusClient, DataType
      # Initialize client and schema
      client = MilvusClient("milvus_binary_quantized.db")
      schema = client.create_schema (auto_id=True, enable_dynamic_fields=True)
      # Add fields to schema
      schema.add_field(field_name="context", datatype=DataType. VARCHAR)
      schema.add_field(field_name="binary_vector", datatype=DataType.BINARY_VECTOR)
      # Create index parameters for binary vectors
      index_params = client.prepare_index_params()
      index_params.add_index(
      Specify index params
      field_name="binary_vector",
      index_name="binary_vector_index",
      index_type="BIN_FLAT",
      # Exact search for binary vectors
      metric_type="HAMMING" # Hamming distance for binary vectors
      )
      # Create collection with schema and index
      client.create_collection(
      collection_name="fastest-rag",
      schema=schema,
      )
      index_params=index_params
      Create collection
      # Insert data to index
      client.insert(
      collection_name="fastest-rag",
      Insert data
      data=[
      {"context": context, "binary_vector": binary_embedding}
      for context, binary_embedding in zip(batch_context, binary_embeddings)
      ]
      )

      這套配置能讓 Milvus 高效處理數千萬級別的向量。

      檢索流程

      檢索時的數據流:

      1. 用戶 query 轉 embedding
      2. embedding 轉二值向量
      3. 用 Hamming distance 做二值檢索
      4. 返回 top-k 相關文本塊

      文檔 Embedding 的二值化處理

      import numpy as np
      from llama_index.embeddings.huggingface import HuggingFaceEmbedding
      embed_model = HuggingFaceEmbedding(
      model_name="BAAI/bge-large-en-v1.5",
      trust_remote_code=True,
      cache_folder='./hf_cache'
      )
      for context in batch_iterate(documents, batch_size=512):
      # Generate float32 vector embeddings
      batch_embeds = embed_model.get_text_embedding_batch(context)
      # Convert float32 vectors to binary vectors
      embeds_array = np.array(batch_embeds)
      binary_embeds = np.where(embeds_array > 0, 1, 0).astype(np.uint8)
      # Convert to bytes array
      packed_embeds = np.packbits(binary_embeds, axis=1)
      byte_embeds = [vec.tobytes() for vec in packed_embeds]
      binary_embeddings.extend(byte_embeds)

      這個轉換過程快、簡單、效果好。

      LLM 生成環節

      檢索到 top-k 文本塊后,用結構化 prompt 喂給 LLM。

      # Combine retrieved contexts
      full_context = "\n\n".join(full_context)
      # Format prompt with context and query
      prompt = prompt_template.format(context=full_context, query=query)
      # Create chat message
      user_msg = ChatMessage(role=MessageRole.USER, content=prompt)
      # Stream response from LLM
      streaming_response = llm.stream_complete(user_msg.content)
      # Display streaming response
      for chunk in streaming_response:
      print(chunk.delta, end="", flush=True)

      這里把檢索到的多個文本塊拼接起來,填充到 prompt template 里。LLM 會基于這些上下文生成回答。如果檢索內容里沒有答案,LLM 會直接回復 "I don't know!"。

      總結

      二值化量化在大規模 RAG 系統中的價值已經得到驗證。32 倍的內存壓縮率配合 Hamming distance 的計算效率,使得在資源受限環境下部署千萬級向量檢索成為可能。

      精度損失是這個方案的代價,但 oversampling + rescoring 的組合能將準確度維持在 95% 以上,這對多數應用場景足夠。

      Perplexity、Azure、HubSpot 的生產實踐說明這套方案已經過大規模驗證。不過具體部署時還是要根據數據特征做測試,尤其是 rescoring 的候選集大小(oversampling factor)需要根據實際召回率調整。

      https://avoid.overfit.cn/post/3a922ea4c69b4e2883a63da1d314dadb

      作者:Algo Insights

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      獨家消息:西貝創始成員董俊義擔任CEO,賈國龍退幕后!門店管理層工資延發,店長廚師長全部降薪,“新CEO首要目標是讓公司活下來”

      獨家消息:西貝創始成員董俊義擔任CEO,賈國龍退幕后!門店管理層工資延發,店長廚師長全部降薪,“新CEO首要目標是讓公司活下來”

      每日經濟新聞
      2026-03-06 18:44:10
      6年了,郭麒麟的反擊幾乎斷送了朱亞文的演藝生涯

      6年了,郭麒麟的反擊幾乎斷送了朱亞文的演藝生涯

      小熊侃史
      2025-12-25 11:24:12
      全軍僅此一例:師長授中將軍銜,軍長和另外3名師長卻被授予少將

      全軍僅此一例:師長授中將軍銜,軍長和另外3名師長卻被授予少將

      史韻流轉
      2026-03-07 09:20:08
      字節跳動啟動最大規模實習生招聘:擬招超7000人,轉正率超50%,重點傾斜研發、產品與AI領域

      字節跳動啟動最大規模實習生招聘:擬招超7000人,轉正率超50%,重點傾斜研發、產品與AI領域

      深圳晚報
      2026-03-06 16:38:48
      90年小伙打工被誣陷偷東西,他沒反抗,只讓工廠老板看了眼他的背

      90年小伙打工被誣陷偷東西,他沒反抗,只讓工廠老板看了眼他的背

      牛魔王與芭蕉扇
      2025-11-06 10:09:31
      國防預算草案公布,大陸24小時內促統,賴清德面臨兩條路

      國防預算草案公布,大陸24小時內促統,賴清德面臨兩條路

      二凱訓猛犬
      2026-03-07 11:52:24
      車頂可升降、車內可站立,小米YU9最新爆料

      車頂可升降、車內可站立,小米YU9最新爆料

      金融界
      2026-03-06 14:23:07
      為什么說要得饒人處且饒人?網友:卡里幾千萬,為了5塊錢命沒了

      為什么說要得饒人處且饒人?網友:卡里幾千萬,為了5塊錢命沒了

      另子維愛讀史
      2026-02-25 23:23:26
      0-2大冷!3月7日一大早,王欣瑜一輪游,鄭欽文比賽對手+時間出爐

      0-2大冷!3月7日一大早,王欣瑜一輪游,鄭欽文比賽對手+時間出爐

      大秦壁虎白話體育
      2026-03-07 08:18:55
      4號秀轟27+4超喬丹,打破塵封41年神紀錄!難解三球露餡6連勝終結

      4號秀轟27+4超喬丹,打破塵封41年神紀錄!難解三球露餡6連勝終結

      鍋子籃球
      2026-03-07 12:40:41
      2026轉運年來了!這4個星座從此告別倒霉,一順到底!

      2026轉運年來了!這4個星座從此告別倒霉,一順到底!

      朗威談星座
      2026-03-07 12:29:48
      22年河南女孩高考601分,辦升學宴遭嫉妒,被親人"設局"棄尸窯洞

      22年河南女孩高考601分,辦升學宴遭嫉妒,被親人"設局"棄尸窯洞

      談史論天地
      2026-03-07 09:05:15
      馬龍:淚目!乒協副主席只是掛名?龍隊現在處于待業狀態?

      馬龍:淚目!乒協副主席只是掛名?龍隊現在處于待業狀態?

      行舟問茶
      2026-03-06 17:03:57
      陳飛宇在巴黎吃麻辣燙被偶遇!衣服破了個大洞,網友:我眼花了?

      陳飛宇在巴黎吃麻辣燙被偶遇!衣服破了個大洞,網友:我眼花了?

      木子愛娛樂大號
      2026-03-06 16:45:32
      火箭106-99戰勝開拓者 球員評價:阿門滿分,6人及格,2人低迷

      火箭106-99戰勝開拓者 球員評價:阿門滿分,6人及格,2人低迷

      籃球資訊達人
      2026-03-07 11:49:29
      又一個10萬億產業,要來了!

      又一個10萬億產業,要來了!

      環球時報國際
      2026-03-06 17:23:46
      中東變局下的外貿人:伊朗客戶失聯,迪拜華人敞開家門接待同胞

      中東變局下的外貿人:伊朗客戶失聯,迪拜華人敞開家門接待同胞

      齊魯壹點
      2026-03-06 21:59:09
      浦東機場凌晨兩點“爆哭”:幾百名中年人防線崩塌,真相太扎心

      浦東機場凌晨兩點“爆哭”:幾百名中年人防線崩塌,真相太扎心

      匹夫來搞笑
      2026-03-06 20:17:30
      61歲雪梨自曝被TVB高層性侵,滿臉驚恐:不能說名字,會死人的!

      61歲雪梨自曝被TVB高層性侵,滿臉驚恐:不能說名字,會死人的!

      潮鹿逐夢
      2026-03-05 22:34:12
      3.7金價預警!黃金大風暴將至,所有人做好心理準備

      3.7金價預警!黃金大風暴將至,所有人做好心理準備

      花小貓的美食日常
      2026-03-07 12:02:07
      2026-03-07 13:44:49
      deephub incentive-icons
      deephub
      CV NLP和數據挖掘知識
      1940文章數 1456關注度
      往期回顧 全部

      科技要聞

      OpenClaw爆火,六位"養蝦人"自述與AI共生

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      頭條要聞

      特朗普突然放話"先解決伊朗后解決古巴" 梅西聽懵了

      體育要聞

      塔圖姆歸來:凱爾特人的春之綠

      娛樂要聞

      周杰倫田馥甄的“JH戀” 被扒得底朝天

      財經要聞

      針對"不敢休、不讓休"怪圈 國家出手了

      汽車要聞

      逃離ICU,上汽通用“止血”企穩

      態度原創

      游戲
      家居
      旅游
      數碼
      公開課

      鍵鼠不是萬能的神!外媒盤點近年適合用手柄玩的游戲

      家居要聞

      暖棕撞色 輕法奶油風

      旅游要聞

      文旅部部長:7名外國游客到上海旅游,買了40箱貨;“成為中國人”成了熱詞

      數碼要聞

      蘋果M5 Pro芯片GeekBench跑分曝光:多核破2.8萬

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版