您已經聽說英國數學家克萊夫·亨比(Clive Humby)著名的報價“數據是新石油”,這是最有影響力的報價,描述了21世紀數據的重要性,但是在大型語言模型的爆炸性開發之後,我們沒有正確的數據是數據。因為LLM模型的開發速度和訓練速度幾乎超過了人類的數據生成速度。該解決方案是使數據更加精緻,並且特定於任務或合成數據生成。前者是較大的域專家加載任務,但後者對當今問題的渴望更為突出。
高質量的培訓數據仍然是關鍵的瓶頸。這篇博客文章探討了一種使用Llama 3.2和Ollama生成合成數據的實用方法。它將展示我們如何以編程方式創建結構化的教育內容。
學習成果
- 了解局部合成數據生成對增強機器學習模型培訓的重要性和技術。
- 了解如何實施本地合成數據生成以創建高質量數據集,同時保留隱私和安全性。
- 在數據生成管道中實施強大的錯誤處理和重試機制方面獲得實踐知識。
- 了解JSON驗證,清潔技術及其在保持一致可靠的產出中的作用。
- 開發設計和利用Pydantic模型來確保數據模式完整性的專業知識。
目錄
- 什麼是合成數據?
- 為什麼我們今天需要合成數據?
- 對LLM和小型LM性能的影響
- 項目結構和環境設置
- 項目實施
- 強大的一代
- 測試自動化
- 結論
- 常見問題
什麼是合成數據?
綜合數據是指人為生成的信息,這些信息模仿了現實世界數據的特徵,同時保留基本模式和統計屬性。它是使用算法,仿真或AI模型創建的,以解決受控方案中的隱私問題,增強有限數據或測試系統。與實際數據不同,合成數據可以根據特定要求量身定制,以確保多樣性,平衡和可擴展性。它被廣泛用於機器學習,醫療保健,金融和自治系統等領域,以訓練模型,驗證算法或模擬環境。合成數據彌合了數據稀缺和現實世界應用之間的差距,同時降低了道德和合規風險。
為什麼我們今天需要合成數據?
由於幾個因素,對合成數據的需求呈指數增長
- 數據隱私法規:使用GDPR和類似法規,合成數據為開發和測試提供了安全的選擇
- 成本效率:收集和註釋真實數據是昂貴且耗時的。
- 可及性:可以大量生成具有控制變化的合成數據
- 邊緣案例覆蓋範圍:我們可以生成可能難以自然收集的稀有情況的數據
- 快速原型: ML模型上的快速迭代,而無需等待實際數據收集。
- 不太偏見:從現實世界中收集的數據可能是錯誤的,並且充滿了性別偏見,種族主義文本,並且對兒童的單詞不安全,因此要與這種類型的數據製作模型,模型的行為也與這些偏見同在。借助合成數據,我們可以輕鬆控制這些行為。
對LLM和小型LM性能的影響
合成數據顯示出有希望的結果,可以改善大型和小語言模型
- 微調效率:在高質量合成數據上進行微調的模型通常表現出與經過實際數據培訓的型號相當的性能
- 域的適應性:合成數據有助於橋接域間隙
- 數據增強:合成和真實數據的結合通常可以單獨使用任何一個單獨產生更好的結果。
項目結構和環境設置
在下一節中,我們將分解項目佈局,並指導您配置所需的環境。
專案/ ├─-main.py ├ - ─txt ├├前 └ - ─英語_qa_new.json
現在,我們將使用Conda建立我們的項目環境。按下以下步驟
創建Conda環境
$ conda create -n合成data python = 3.11 #激活新創建的Env $ conda激活合成數據
在Conda Env中安裝庫
PIP安裝Pydantic Langchain Langchain-Community PIP安裝Langchain-Collama
現在我們都設置了以開始代碼實現
項目實施
在本節中,我們將深入研究項目的實際實施,詳細介紹每個步驟。
導入庫
在啟動項目之前,我們將在項目root中創建一個文件名main.py,並在該文件上導入所有庫:
來自Pydantic Import Basemodel,field,validationError 來自langchain.prompts導入提示網板 從langchain_ollama進口ollamallm 從輸入導入列表 進口JSON 導入uuid 導入 從pathlib導入路徑 從時間進口睡眠
現在是時候繼續在main.py文件上繼續執行代碼
首先,我們從實施數據架構開始。
EnglishQuestion Data Schema是一個Pydantic模型,可確保我們的生成數據遵循具有所需字段和自動ID生成的一致結構。
代碼實現
班級英語Question(basemodel): id:str = field( default_factory = lambda:str(uuid.uid4()), 描述=“問題的唯一標識符”, ) 類別:str =字段(...,描述=“問題類型”) 問題:str =字段(...,description =“英語問題”) 答案:str = field(...,description =“問題的正確答案”) think_process:str = field( ...,description =“解釋得出答案的推理過程” )
現在,我們創建了英語問題數據類。
其次,我們將開始實現QuestionGenerator類。該課程是項目實施的核心。
問題加生子類結構
班級詢問器: def __init __(self,model_name:str,output_file:path): 經過 def clean_json_string(self,text:str) - > str: 經過 def parse_response(self,result:str) - >英語標語: 經過 def generate_with_retries(自我,類別:str,reteries:int = 3) - >英語標語: 經過 def generate_questions( 自我,類別:列表[str],迭代:int ) - >列表[英語標語]: 經過 def save_to_json(self,問題:英語提議): 經過 def load_existing_data(self) - > list [dict]: 經過
讓我們逐步實現關鍵方法
初始化
使用語言模型,提示模板和輸出文件初始化類。這樣,我們將使用model_name創建一個Ollamallm的實例,並設置一個以嚴格的JSON格式生成質量檢查的提示網格。
代碼實施:
def __init __(self,model_name:str,output_file:path): self.llm = ollamallm(model = model_name) self.prompt_template = strightemplate( input_variables = [“類別”], 模板=“”“” 產生一個英語問題,以測試理解和用法。 專注於{category}。問題將就像填寫空白一樣,一個襯裡,一個不是MCQ類型。以這種嚴格的JSON格式編寫輸出: {{ “問題”:“ ”, “答案”:“ ”, “ think_process”:“ ” }}} 請勿在JSON對象之外包含任何文本。 ”“”, ) self.output_file = output_file self.output_file.touch(equent_ok = true)
JSON清潔
在生成過程中,我們將從LLM中獲得的響應將具有許多不必要的額外字符,這些字符可能會使生成的數據有序,因此您必須通過清潔過程傳遞這些數據。
在這裡,我們將使用REGEX在JSON鍵/值中修復常見的格式問題,替換有問題的字符,例如Newline和特殊字符。
代碼實施:
def clean_json_string(self,text:str) - > str: “”“改進的版本來處理錯誤或不完整的JSON。”“” start = text.find(“ {”) end = text.rfind(“}”) 如果開始== -1或end == -1: 提高ValueError(f“未找到json對象。響應是:{text}”) json_str = text [start:end 1] #刪除任何可能打破JSON解析的特殊字符 json_str = json_str.replace(“ \ n”,“”).replace(“ \ r”,“”) json_str = re.sub(r“ [^\ x20- \ x7e]”,“”,json_str) #解決常見的JSON格式問題 json_str = re.sub( r'(?<h3 id="反應解析">反應解析</h3><p>解析方法將使用上述清潔過程清除LLM的響應,驗證響應以保持一致性,將清潔的JSON轉換為Python詞典,然後將字典映射到英語標語對象。</p><p><strong>代碼實施:</strong></p><pre class="brush:php;toolbar:false"> def parse_response(self,result:str) - >英語標語: “”“解析LLM響應並對模式進行驗證。 cleaned_json = self.clean_json_string(結果) parsed_result = json.loads(cleaned_json) 返回英語標題(** parsed_result)
數據持久性
對於持續的數據生成,儘管我們可以使用一些NOSQL數據庫(MongoDB等)為此,但在這裡我們使用一個簡單的JSON文件來存儲生成的數據。
代碼實施:
def load_existing_data(self) - > list [dict]: “”“加載JSON文件中的現有問題。”“” 嘗試: 用fling(self.output_file,“ r”)作為f: 返回JSON.LOAD(F) 除(Filenotfounderror,json.jsondecodeerror): 返回 []
強大的一代
在這個數據生成階段,我們有兩種最重要的方法:
- 生成重試機制
- 問題生成方法
重試機制的目的是強迫自動化在失敗時產生響應。它嘗試多次生成一個問題(默認值為3次),並將記錄錯誤並在重試之間添加延遲。如果所有嘗試失敗,它也會引起例外。
代碼實施:
def generate_with_retries(自我,類別:str,reteries:int = 3) - >英語標語: 嘗試進行範圍(檢索): 嘗試: 結果= self.prompt_template | self.llm 響應= result.invoke(input = {“ category”:category}) 返回self.parse_response(響應) 除例外為E: 列印( f“嘗試{嘗試1}/{retry}因類別'{category}':{e} ) 睡眠(2)#重試之前的小延遲 提高價值Error( f“未能處理{retry}嘗試後處理類別'{category}'。” )
問題生成方法將為類別列表生成多個問題,並將其保存在存儲中(這裡JSON文件)。它將在類別上迭代並調用每個類別的呼叫generating_with_retries方法。最後,它將使用save_to_json方法保存每個成功生成的問題。
def generate_questions( 自我,類別:列表[str],迭代:int ) - >列表[英語標語]: “”“為類別列表生成多個問題。“” all_questions = [] 對於_範圍(迭代): 類別類別: 嘗試: 問題= self.generate_with_retries(類別) self.save_to_json(問題) all_questions.append(問題) print(f“成功生成類別的問題:{類別}”) 除了(驗證Error,valueerror)為e: print(f“錯誤處理類別'{類別}':{e}”) 返回all_questions
在終端上顯示結果
為了了解LLM產生的響應是一個簡單的打印功能。
def display_questions(問題:列表[英語標語]): 打印(“ \ ngenerated英語問題:”) 對於問題中的問題: 打印(“ \ n ---”) 打印(f“ id:{Question.id}”) 打印(f“問題:{Question.Question}”) 打印(f“答案:{Question.answer}”) 打印(f“思考過程:{Question.thought_process}”)
測試自動化
在運行項目之前,請在項目根上創建English_QA_NEW.JSON文件。
如果__name__ ==“ __ -main __”: output_file =路徑(“英語_qa_new.json”) Generator = QuestionGenerator(model_name =“ llama3.2”,output_file = output_file) 類別= [ “用法”, “短語”, “詞彙”, “成語”, 這是給出的 迭代= 2 generated_questions = generator.generate_questions(類別,迭代) display_questions(生成_questions)
現在,轉到終端並輸入:
python main.py
輸出:
這些問題將保存在您的項目根源中。保存的問題看起來像:
該項目中使用的所有代碼都在這裡。
結論
在AI和LLMS快速發展的時代,合成數據生成已成為解決對高質量培訓數據集不斷增長的需求的強大解決方案。通過利用諸如Llama 3.2和Ollama之類的工具,以及像Pydantic這樣的強大框架,我們可以創建滿足特定需求的結構化,可擴展性和無偏見的數據集。這種方法不僅降低了對昂貴和耗時的現實數據收集的依賴,而且還可以確保隱私和道德合規性。隨著我們完善這些方法,合成數據將繼續在推動創新,改善模型性能並解鎖不同領域的新可能性方面發揮關鍵作用。
關鍵要點
- 本地合成數據生成可以創建各種數據集,這些數據集可以提高模型準確性而不會損害隱私。
- 實施本地合成數據生成可以通過最大程度地依賴對現實世界敏感數據的依賴來顯著提高數據安全性。
- 合成數據可確保隱私,減少偏見並降低數據收集成本。
- 量身定制的數據集改善了各種AI和LLM應用程序的適應性。
- 合成數據為道德,高效和創新的AI發展鋪平了道路。
常見問題
Q 1。為什麼要使用Ollama代替基於API的模型?A. Ollama提供本地部署功能,降低成本和延遲,同時對生成過程提供更多控制。
問2。我們如何確保產生的問題的質量?答:為了保持質量,該實施使用了Pydantic驗證,重試機制和JSON清潔。可以實施其他指標和維護驗證。
問3。這種方法有什麼局限性?答:與較大的模型相比,本地LLMS可能具有較低的質量輸出,並且可以通過本地計算資源限制生成速度。
Q4。合成數據是否安全和道德使用?答:是的,綜合數據通過刪除可識別信息並通過解決數據偏差並降低對現實世界敏感數據的依賴性來確保隱私。
Q5。使用合成數據的主要挑戰是什麼?A.挑戰包括確保數據現實主義,維持域相關性以及將合成數據特徵與現實世界用例相結合,以進行有效的模型培訓。
以上是本地合成數據生成的詳細內容。更多資訊請關注PHP中文網其他相關文章!

自2008年以來,我一直倡導這輛共享乘車麵包車,即後來被稱為“ Robotjitney”,後來是“ Vansit”,這是城市運輸的未來。 我預見這些車輛是21世紀的下一代過境解決方案Surpas

革新結帳體驗 Sam's Club的創新性“ Just Go”系統建立在其現有的AI驅動“掃描和GO”技術的基礎上,使會員可以在購物旅行期間通過Sam's Club應用程序進行掃描。

NVIDIA在GTC 2025上的增強可預測性和新產品陣容 NVIDIA是AI基礎架構的關鍵參與者,正在專注於提高其客戶的可預測性。 這涉及一致的產品交付,達到績效期望以及

Google的Gemma 2:強大,高效的語言模型 Google的Gemma語言模型家族以效率和性能而慶祝,隨著Gemma 2的到來而擴展。此最新版本包括兩種模型:270億個參數VER

這一領先的數據劇集以數據科學家,天體物理學家和TEDX演講者Kirk Borne博士為特色。 Borne博士是大數據,AI和機器學習的著名專家,為當前狀態和未來的Traje提供了寶貴的見解

這次演講中出現了一些非常有見地的觀點——關於工程學的背景信息,這些信息向我們展示了為什麼人工智能如此擅長支持人們的體育鍛煉。 我將從每位貢獻者的觀點中概括出一個核心思想,以展示三個設計方面,這些方面是我們探索人工智能在體育運動中應用的重要組成部分。 邊緣設備和原始個人數據 關於人工智能的這個想法實際上包含兩個組成部分——一個與我們放置大型語言模型的位置有關,另一個與我們人類語言和我們的生命體徵在實時測量時“表達”的語言之間的差異有關。 Alexander Amini 對跑步和網球都很了解,但他還

卡特彼勒(Caterpillar)的首席信息官兼高級副總裁傑米·恩格斯特(Jamie Engstrom)領導了一支由28個國家 /地區的2200多名IT專業人員組成的全球團隊。 在卡特彼勒(Caterpillar)工作了26年,其中包括她目前的四年半,Engst

Google Photos的新Ultra HDR工具:快速指南 使用Google Photos的新型Ultra HDR工具增強照片,將標準圖像轉換為充滿活力的高動態範圍傑作。對於社交媒體而言,此工具可提高任何照片的影響,


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Dreamweaver Mac版
視覺化網頁開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能