DataChain 是一個專為人工智慧設計的現代 Python 資料框架庫。它用於將非結構化資料組織成資料集,並在本地計算機上大規模處理它。 Datachain不會抽像或隱藏AI模型和API調用,而是有助於將它們整合到後現代資料堆疊中。
儲存作為事實來源。
處理非結構化數據,無需來自 S3、GCP、Azure 和本機檔案系統的冗餘副本。
多模式資料支援:影像、影片、文字、PDF、JSON、CSV、鑲木地板。
將檔案和元資料合併成持久的、版本化的柱狀資料集。
Python 友善的資料管道。
對 Python 物件和物件欄位進行操作。
內建並行化和記憶體不足計算,無需 SQL 或 Spark。
數據豐富和處理。
使用本機 AI 模型和 LLM API 產生元資料。
按元資料過濾、聯結和分組。按向量嵌入搜尋。
將資料集傳遞到 Pytorch 和 Tensorflow,或將它們匯出回儲存。
效率。
並行化、記憶體不足的工作負載和資料快取。
Python 物件欄位的向量化運算:sum、count、avg 等。
優化的向量搜尋。
$ pip 安裝資料鏈
儲存由貓和狗的圖像(dog.1048.jpg、cat.1009.jpg)組成,以“json-pairs”格式以真實值和模型推理進行註釋,其中每個圖像都有一個匹配的JSON 文件,如cat。
{“class”:“cat”,“id”:“1009”,“num_annotators”:8,“inference”:{“class”:“dog”,“confidence”:0.68} }
使用 JSON 元資料僅下載「高置信度貓」推斷影像的範例:
from datachain import Column, DataChainmeta = DataChain.from_json("gs://datachain-demo/dogs-and-cats/*json", object_name="meta")images = DataChain.from_storage("gs://datachain-demo /dogs-and-cats/*jpg")images_id = images.map(id=lambda 檔案: file.path.split('.')[-2])annotated = images_id.merge(meta, on="id" , right_on="meta.id")likely_cats = annotated.filter((Column("meta.inference.confidence") > 0.93) & (Column("meta.inference.class_") == "cat"))likely_cats.export_files("high-confidence-cats/", signal="file")
使用 Transformers 庫透過簡單的情感模型進行批量推理:
點安裝變壓器
下面的程式碼從雲端下載文件,並對每個文件應用一個使用者定義的函數。然後,偵測到的所有具有正面情緒的檔案都會複製到本機目錄。
from Transformers import pipelinefrom datachain import DataChain, Columnclassifier = pipeline("sentiment-analysis", device="cpu",model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")def is_positive_iuncased-finetuned-sst-2-english")def is_positive_hfileals - > bool:dialogue_ending = file.read()[-512:]傳回分類器(dialogue_ending)[0]["label"] == "POSITIVE"chain = ( DataChain.from_storage("gs://datachain-demo/ chatbot -KiT/", object_name="檔案", 類型="文字") .settings(並行=8,快取=True) .map(is_positive=is_positive_dialogue_ending) .save("檔案回應") )positive_chain = chain.filter(Column("is_positive") == True)positive_chain.export_files("./output")print(f"{positive_chain.count()} 個檔案已匯出")
匯出了 13 個文件
$ ls 輸出/datachain-demo/chatbot-KiT/ 15.txt 20.txt 24.txt 27.txt 28.txt 29.txt 33.txt 37.txt 38.txt 43.txt ... $ ls 輸出/datachain-demo/chatbot-KiT/ |廁所-l 13
法學碩士可以作為通用分類器。在下面的範例中,我們使用 Mistral 的免費 API 來判斷公開可用的聊天機器人對話方塊。請在 https://console.mistral.ai 取得免費的 Mistral API 金鑰
$ pip install Mistralai (需要版本 >=1.0.0) $ 匯出 MISTRAL_API_KEY=_your_key_
DataChain可以並行化API呼叫;免費的 Mistral 層最多同時支援 4 個請求。
從 Mistralai import Mistralfrom datachain import File, DataChain, ColumnPROMPT = "此對話框成功嗎?用一個字回答:成功或失敗。"def eval_dialogue(file: File) -> bool: client = Mistral() response = cliclient.chatse = cliclient.chatse = cliclient.chatse = client.chatse = client.chatse = Mistral()。 .complete( model="open-mixtral-8x22b", messages=[{"角色": "系統", "內容": 提示}, {"角色": "使用者", "內容": file.read()}]) result = response.choices[0].message.content return result.lower().startswith("success")chain = ( DataChain .from_storage("gs://datachain-demo/chatbot-KiT/", object_name="file") .settings(並行=4,快取=True) .map(is_success=eval_dialogue) .save("mistral_files") )successful_chain = chain.filter(Column("is_success") == True)successful_chain.export_files("./output_mistral")print(f"{successful_chain.count()} 個檔案已匯出")
根據上述說明,Mistral 模型考慮 31/50 個檔案來保存成功的對話:
$ ls output_mistral/datachain-demo/chatbot-KiT/ 1.txt 15.txt 18.txt 2.txt 22.txt 25.txt 28.txt 33.txt 37.txt 4.txt 41.txt ... $ ls output_mistral/datachain-demo/chatbot-KiT/ |廁所-l 31
LLM 回應可能包含對分析有價值的信息,例如使用的令牌數量或模型性能參數。
DataChain 可以將整個 LLM 回應序列化到內部資料庫,而不是從 Mistral 回應資料結構(類別 ChatCompletionResponse)中提取此資訊:
from mistralai import Mistralfrom mistralai.models import ChatCompletionResponsefrom datachain import File, DataChain, ColumnPROMPT = "此對話框成功嗎?用一個字回答:成功或失敗。"def eval_dialog(file: File) - ChatcliletionResents> return client.chat( model="open-mixtral-8x22b", messages=[{"role": "system", "content": PROMPT}, {"角色": "使用者", "內容": file.read()}])chain = ( DataChain.from_storage("gs://datachain-demo/chatbot-KiT/", object_name="file") .settings(並行=4,快取=True) .map(響應=eval_dialog) .map(狀態=lambda回應:response.choices[0].message.content.lower()[:7]) .save("回應") )chain.select("file.name", "status", "response.usage").show(5)success_rate = chain.filter(Column("status") == "success").count() / chain .count()print(f"{100*success_rate:.1f}% 對話成功")
輸出:
文件狀態 回應 回應 回應 名稱 用法 用法 用法 提示令牌 總計令牌 完成令牌 0 1.txt 成功 547 548 1 1 10.txt 失敗 3576 3578 2 2 11.txt 失敗 626 628 2 3 12.txt失敗1144 1182 38 4 13.txt 成功 1100 1101 1 [僅限5行] 64.0% 對話成功
在前面的範例中,資料集保存在嵌入式資料庫中(工作目錄的 .datachain 資料夾中的 SQLite)。這些資料集會自動進行版本控制,並且可以使用 DataChain.from_dataset("dataset_name") 進行存取。
以下是如何檢索已儲存的資料集並迭代物件:
chain = DataChain.from_dataset("response")# 逐一迭代:支援記憶體不足的工作流程for file, response in chain.limit(5).collect("file", "response"):# 驗證收集到的Python物件assert isinstance(response, ChatCompletionResponse)status = response.choices[0].message.content[:7]tokens = response.usage.total_tokensprint(f"{file.get_uri()}: {status},檔案大小:檔案大小: 檔.大小},令牌:{令牌}”)
輸出:
gs://datachain-demo/chatbot-KiT/1.txt:成功,檔案大小:1776,代幣:548 gs://datachain-demo/chatbot-KiT/10.txt:失敗,檔案大小:11576,令牌:3578 gs://datachain-demo/chatbot-KiT/11.txt:失敗,檔案大小:2045,令牌:628 gs://datachain-demo/chatbot-KiT/12.txt:失敗,檔案大小:3833,令牌:1207 gs://datachain-demo/chatbot-KiT/13.txt:成功,檔案大小:3657,代幣:1101
某些操作可以在資料庫內部運作而無需反序列化。例如,讓我們計算使用 LLM API 的總成本,假設 Mixtral 呼叫每 1M 個輸入代幣的成本為 2 美元,每 1M 個輸出代幣的成本為 6 美元:
chain = DataChain.from_dataset("mistral_dataset")cost = chain.sum("response.usage.prompt_tokens")*0.000002 + chain.sum("response.usage.completion_tokens")*0.000006print(f"在 {chain.count()} 呼叫上花費了 ${cost:.2f}")
輸出:
50 通通話花費了 0.08 美元
鏈結果可以匯出或直接傳遞到 PyTorch 資料載入器。例如,如果我們有興趣傳遞圖像和基於檔案名稱後綴的標籤,則以下程式碼將執行此操作:
from torch.utils.data import DataLoaderfrom Transformers import CLIPProcessorfrom datachain import C, DataChainprocessor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")chain = (DataChain.from_storin." ) -和-貓/”,類型=“圖像”) .map(label=lambda 名稱: name.split(".")[0], params=["file.name"]) .select("檔案", "標籤").to_pytorch(transform=processor.image_processor,tokenizer=processor.tokenizer, ) )loader = DataLoader(鏈,batch_size=1)
入門
多式聯運(在 Colab 中嘗試)
LLM 評估(在 Colab 中嘗試)
讀取 JSON 元資料(在 Colab 中嘗試)
非常歡迎您的貢獻。要了解更多信息,請參閱貢獻者指南。
文件
如果您遇到任何問題,請提出問題
不和諧聊天
電子郵件
嘰嘰喳喳