ホームページ >テクノロジー周辺機器 >AI >ローカル合成データ生成
イギリスの数学者Clive Humbyによる有名な引用「データは新しいオイル」を聞いたことがあります。これは、21世紀のデータの重要性を説明する最も影響力のある引用ですが、大規模な言語モデルの爆発的な発達とそのトレーニングの後、私たちが持っていないものはデータです。 LLMモデルの開発速度とトレーニング速度は、人間のデータ生成速度をほぼ上回るためです。解決策は、データをより洗練され、タスクまたは合成データ生成に固有のものにすることです。前者はより多くのドメインの専門家ロードされたタスクですが、後者は今日の問題の大きな飢erにより顕著です。
高品質のトレーニングデータは、重要なボトルネックのままです。このブログ投稿では、Llama 3.2とOllamaを使用して合成データを生成するための実用的なアプローチを調査します。プログラムで構造化された教育コンテンツを作成する方法を示します。
合成データとは、必須パターンと統計的特性を保存しながら、実際のデータの特性を模倣する人為的に生成された情報を指します。アルゴリズム、シミュレーション、またはAIモデルを使用して作成され、プライバシーの懸念に対処し、制限されたデータを制御されたシナリオでテストシステムを増強します。実際のデータとは異なり、合成データは特定の要件に合わせて調整し、多様性、バランス、およびスケーラビリティを確保できます。機械学習、ヘルスケア、金融、自律システムなどの分野で広く使用されており、モデルを訓練したり、アルゴリズムを検証したり、環境をシミュレートしたりします。合成データは、倫理的およびコンプライアンスリスクを減らしながら、データ不足と現実世界のアプリケーションの間のギャップを橋渡しします。
合成データの需要は、いくつかの要因により指数関数的に増加しました
合成データは、大小の言語モデルの両方を改善する上で有望な結果を示しています
次のセクションでは、プロジェクトのレイアウトを分類し、必要な環境を構成することをガイドします。
プロジェクト/ ├·ックス。Main.py ├├)。要件。txt ├├。Readme.md └··ックス。English_qa_new.json
次に、Condaを使用してプロジェクト環境を設定します。以下の手順に従ってください
$ conda create -n Synthetic -Data Python = 3.11 #新しく作成されたenvをアクティブにします $ condaは合成データをアクティブにします
ピップインストールPydantic Langchain Langchain-community ピップインストールlangchain-ollama
これで、コード実装を開始するためにすべて設定されています
このセクションでは、各ステップを詳細にカバーするプロジェクトの実際の実装を掘り下げます。
プロジェクトを開始する前に、プロジェクトルートでファイル名main.pyを作成し、そのファイルのすべてのライブラリをインポートします。
Pydantic Import Basemodel、Field、VaridationErrorから from langchain.prompts Import prompttemplate langchain_ollamaインポートOllamallmから インポートリストの入力から JSONをインポートします uuidをインポートします Reをインポートします Pathlibインポートパスから 睡眠を輸入してから
今こそ、main.pyファイルでコード実装パーツを継続する時が来ました
まず、データスキーマの実装から始めます。
EnglishQuestion Data Schemaは、生成されたデータが必要なフィールドと自動ID生成を伴う一貫した構造に従うことを保証するPydanticモデルです。
クラス英語質問(BASEMODEL): ID:str = field( default_factory = lambda:str(uuid.uuid4())、 説明= "質問の一意の識別子"、 )) カテゴリ:str = field(...、description = "質問タイプ") 質問:str = field(...、description = "英語の質問") 回答:str = field(...、description = "質問に対する正解")) Thought_Process:str = field( ...、説明=「答えに到達する推論プロセスの説明」 ))
これで、EnglishQuestionデータクラスを作成しました。
第二に、Questiongeneratorクラスの実装を開始します。このクラスは、プロジェクトの実装の中核です。
クラスQuestiongenerator: def __init __(self、model_name:str、output_file:path): 合格 def clean_json_string(self、text:str) - > str: 合格 def parse_response(self、result:str) - >英語question: 合格 def generate_with_retries(self、category:str、retries:int = 3) - > inglishquestion: 合格 def generate_questions( 自己、カテゴリ:リスト[str]、iterations:int ) - > list [EnglishQuestion]: 合格 def save_to_json(self、quuctions:inglishquestion): 合格 def load_existing_data(self) - > list [dict]: 合格
重要な方法を段階的に実装しましょう
言語モデル、プロンプトテンプレート、出力ファイルでクラスを初期化します。これにより、Model_Nameを使用してOllamallmのインスタンスを作成し、厳密なJSON形式でQAを生成するためのPromptTemplateを設定します。
コード実装:
def __init __(self、model_name:str、output_file:path): self.llm = ollamallm(model = model_name) self.prompt_template = prompttemplate( input_variables = ["category"]、 テンプレート= "" " 理解と使用をテストする英語の質問を生成します。 {category}に焦点を当てます。質問は、ブランク、1つのライナー、MUTがMCQタイプではないようなものです。この厳格なJSON形式で出力を書き込みます。 {{ 「質問」:「」、 「答え」:「」、 「Thought_Process」:「」 }} JSONオブジェクトの外にテキストを含めないでください。 "" "、 )) self.output_file = output_file self.output_file.touch(esclow_ok = true)
生成プロセス中にLLMから得られる応答には、生成されたデータを倒す可能性のある多くの不要な特徴があります。したがって、これらのデータをクリーニングプロセスに渡す必要があります。
ここでは、Regexを使用してJSON Keys/Valuesで共通のフォーマット問題を修正し、Newlineや特殊文字などの問題のある文字を置き換えます。
コード実装:
def clean_json_string(self、text:str) - > str: "" "不正なJSONまたは不完全なJSONを処理するための改善されたバージョン。" "" start = text.find( "{") end = text.rfind( "}") start == -1またはend == -1の場合: Raise ValueError(f "no jsonオブジェクトが見つかりません。応答は{text}") json_str =テキスト[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>応答解析</h3><p>解析方法は、上記のクリーニングプロセスを使用してLLMからの応答をクリーニングし、一貫性のための応答を検証し、クリーニングしたJSONをPython辞書に変換し、辞書をEnglishQuestionオブジェクトにマッピングします。</p><p><strong>コード実装:</strong></p><pre class="brush:php;toolbar:false"> def parse_response(self、result:str) - >英語question: "" "LLM応答を解析し、スキーマに対して検証します。" "" cleaned_json = self.clean_json_string(result) parsed_result = json.loads(cleaned_json) return EnglishQuestion(** parsed_result)
永続的なデータ生成の場合、このためにいくつかのNOSQLデータベース(MongoDBなど)を使用できますが、ここでは、生成されたデータを保存するために簡単なJSONファイルを使用します。
コード実装:
def load_existing_data(self) - > list [dict]: "" "jsonファイルから既存の質問を読み込む。" "" 試す: open(self.output_file、 "r")がf: json.load(f)を返します を除いて(filenotfounderror、json.jsondecodeerror): 戻る []
このデータ生成フェーズには、2つの最も重要な方法があります。
再試行メカニズムの目的は、障害の場合に自動化に応答を生成するように強制することです。質問を複数回生成し(デフォルトは3回)、エラーを記録し、レトリの間に遅延を追加します。また、すべての試みが失敗した場合、例外が発生します。
コード実装:
def generate_with_retries(self、category:str、retries:int = 3) - > inglishquestion: 範囲での試みの場合(再試行): 試す: result = self.prompt_template | self.llm response = result.invoke(input = {"category":category}) self.parse_response(応答)を返す eとしての例外を除く: 印刷( f "redise {pirice 1}/{retries} category '{category}':{e}"で失敗しました} )) 睡眠(2)#再試行前の小さな遅延 Raise ValueError( f「{retries}試行後にカテゴリ '{category}'を処理できませんでした。 ))
質問生成方法は、カテゴリのリストに対して複数の質問を生成し、それらをストレージに保存します(ここではJSONファイル)。カテゴリを反復し、各カテゴリのGenerating_with_retriesメソッドを呼び出します。そして最後に、Save_To_jsonメソッドを使用して、正常に生成された各質問を保存します。
def generate_questions( 自己、カテゴリ:リスト[str]、iterations:int ) - > list [EnglishQuestion]: "" "カテゴリのリストに複数の質問を生成する" "" all_questions = [] _ in range(iterations): カテゴリのカテゴリの場合: 試す: 質問= self.generate_with_retries(category) self.save_to_json(質問) all_Questions.Append(質問) print(f "カテゴリの質問に正常に生成された質問:{category}") eとして(validationError、valueError)を除く: 印刷(f "エラー処理カテゴリ '{category}':{e}") all_questionsを返します
ここでLLMから生成される応答が何であるかを知るために、単純な印刷機能があります。
dif display_questions(question:list [englishquestion]): print( "\ ngenerated英語の質問:") 質問の質問について: print( "\ n ---") print(f "id:{question.id}") 印刷(f "question:{question.question}") print(f "Answer:{question.answer}") print(f "思考プロセス:{question.thought_process}")
プロジェクトを実行する前に、プロジェクトルートにEnglish_Qa_new.jsonファイルを作成します。
__name__ == "__main__"の場合: output_file = path( "English_qa_new.json") generator = questiongenerator(model_name = "llama3.2"、output_file = output_file) カテゴリ= [ 「単語の使用」、 「句ver」、 "語彙"、 「イディオム」、 ] イテレーション= 2 generated_questions = generator.generate_questions(カテゴリ、反復) display_questions(generated_questions)
次に、ターミナルに移動して入力します。
python main.py
出力:
これらの質問は、プロジェクトルートに保存されます。保存された質問は次のように見えます:
このプロジェクトで使用されるすべてのコードはこちらです。
合成データ生成は、AIおよびLLMSの急速な進歩の時代における高品質のトレーニングデータセットの需要の高まりに対処するための強力なソリューションとして浮上しています。 Llama 3.2やOllamaなどのツールを活用することにより、Pydanticなどの堅牢なフレームワークを作成することで、特定のニーズに合わせた構造化、スケーラブル、およびバイアスフリーのデータセットを作成できます。このアプローチは、費用と時間のかかる現実世界のデータ収集への依存を減らすだけでなく、プライバシーと倫理的コンプライアンスを保証します。これらの方法論を改良すると、合成データは、イノベーションの推進、モデルのパフォーマンスの向上、多様な分野での新しい可能性のロックを解除する上で極めて重要な役割を果たし続けます。
A. Ollamaはローカルの展開機能を提供し、コストと待ち時間を削減しながら、生成プロセスをより強化します。
Q 2。生成された質問の品質をどのように確保できますか?A.品質を維持するために、実装はPydantic検証、再試行メカニズム、およびJSONクリーニングを使用します。追加のメトリックと維持検証を実装できます。
Q 3。このアプローチの制限は何ですか?A.ローカルLLMは、より大きなモデルと比較して低品質の出力を持っている可能性があり、ローカルコンピューティングリソースによって生成速度を制限できます。
Q4。合成データは安全で倫理的ですか?A.はい、合成データは、識別可能な情報を削除することによりプライバシーを保証し、データバイアスに対処し、実際の感受性データへの依存を減らすことにより、倫理的AI開発を促進します。
Q5。合成データを使用することの重要な課題は何ですか?A.課題には、データリアリズムの確保、ドメインの関連性の維持、効果的なモデルトレーニングのための実世界のユースケースと合成データ特性の調整が含まれます。
以上がローカル合成データ生成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。