ホームページ >テクノロジー周辺機器 >AI >ローカル合成データ生成

ローカル合成データ生成

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-03-13 13:13:10351ブラウズ

イギリスの数学者Clive Humbyによる有名な引用「データは新しいオイル」を聞いたことがあります。これは、21世紀のデータの重要性を説明する最も影響力のある引用ですが、大規模な言語モデルの爆発的な発達とそのトレーニングの後、私たちが持っていないものはデータです。 LLMモデルの開発速度とトレーニング速度は、人間のデータ生成速度をほぼ上回るためです。解決策は、データをより洗練され、タスクまたは合成データ生成に固有のものにすることです。前者はより多くのドメインの専門家ロードされたタスクですが、後者は今日の問題の大きな飢erにより顕著です。

高品質のトレーニングデータは、重要なボトルネックのままです。このブログ投稿では、Llama 3.2とOllamaを使用して合成データを生成するための実用的なアプローチを調査します。プログラムで構造化された教育コンテンツを作成する方法を示します。

学習成果

  • 機械学習モデルトレーニングを強化するためのローカル合成データ生成の重要性と技術を理解します。
  • プライバシーとセキュリティを維持しながら、高品質のデータセットを作成してローカル合成データ生成を実装する方法を学びます。
  • データ生成パイプラインで堅牢なエラー処理と再試行メカニズムの実装に関する実用的な知識を得る。
  • JSONの検証、クリーニングテクニック、および一貫した信頼性の高い出力を維持する上での役割を学びます。
  • データスキーマの整合性を確保するために、Pydanticモデルの設計と利用に関する専門知識を開発します。

目次

  • 合成データとは何ですか?
  • 今日、合成データが必要なのはなぜですか?
  • LLMおよび小さなLMパフォーマンスへの影響
  • プロジェクト構造と環境のセットアップ
  • プロジェクトの実装
  • 堅牢な生成
  • 自動化のテスト
  • 結論
  • よくある質問

合成データとは何ですか?

合成データとは、必須パターンと統計的特性を保存しながら、実際のデータの特性を模倣する人為的に生成された情報を指します。アルゴリズム、シミュレーション、またはAIモデルを使用して作成され、プライバシーの懸念に対処し、制限されたデータを制御されたシナリオでテストシステムを増強します。実際のデータとは異なり、合成データは特定の要件に合わせて調整し、多様性、バランス、およびスケーラビリティを確保できます。機械学習、ヘルスケア、金融、自律システムなどの分野で広く使用されており、モデルを訓練したり、アルゴリズムを検証したり、環境をシミュレートしたりします。合成データは、倫理的およびコンプライアンスリスクを減らしながら、データ不足と現実世界のアプリケーションの間のギャップを橋渡しします。

今日、合成データが必要なのはなぜですか?

合成データの需要は、いくつかの要因により指数関数的に増加しました

ローカル合成データ生成

  • データプライバシー規制:GDPRおよび同様の規制により、合成データは開発とテストのための安全な代替品を提供します
  • コスト効率:実際のデータの収集と注釈は、高価で時間がかかります。
  • スカラリビリティ:合成データは、制御されたバリエーションで大量に生成できます
  • エッジケースのカバレッジ:自然に収集するのが難しいかもしれないまれなシナリオのデータを生成できます
  • 迅速なプロトタイピング:実際のデータ収集を待つことなく、MLモデルの迅速な反復。
  • 偏りが少ない:現実の世界から収集されたデータは、エラーが発生しやすく、性別バイアス、人種差別的なテキストに満ちている可能性があり、子供の言葉が安全ではないため、このタイプのデータを使用してモデルを作成するために、モデルの動作は本質的にこれらのバイアスを備えています。合成データを使用すると、これらの動作を簡単に制御できます。

LLMおよび小さなLMパフォーマンスへの影響

合成データは、大小の言語モデルの両方を改善する上で有望な結果を示しています

ローカル合成データ生成

  • 微調整効率:高品質の合成データで微調整されたモデルは、多くの場合、実際のデータでトレーニングされたものと同等のパフォーマンスを示します。
  • ドメイン適応:合成データは、専門アプリケーションのドメインギャップをブリッジするのに役立ちます
  • データ増強:合成データと実際のデータを組み合わせると、どちらかを使用してより良い結果が得られます。

プロジェクト構造と環境のセットアップ

次のセクションでは、プロジェクトのレイアウトを分類し、必要な環境を構成することをガイドします。

プロジェクト/
├·ックス。Main.py
├├)。要件。txt
├├。Readme.md
└··ックス。English_qa_new.json

次に、Condaを使用してプロジェクト環境を設定します。以下の手順に従ってください

コンドラ環境を作成します

$ conda create -n Synthetic -Data Python = 3.11

#新しく作成されたenvをアクティブにします

$ condaは合成データをアクティブにします

Conda envにライブラリをインストールします

ピップインストール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クラス構造

クラス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)

JSONクリーニング

生成プロセス中に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などの堅牢なフレームワークを作成することで、特定のニーズに合わせた構造化、スケーラブル、およびバイアスフリーのデータセットを作成できます。このアプローチは、費用と時間のかかる現実世界のデータ収集への依存を減らすだけでなく、プライバシーと倫理的コンプライアンスを保証します。これらの方法論を改良すると、合成データは、イノベーションの推進、モデルのパフォーマンスの向上、多様な分野での新しい可能性のロックを解除する上で極めて重要な役割を果たし続けます。

キーテイクアウト

  • ローカル合成データ生成により、プライバシーを損なうことなくモデルの精度を改善できる多様なデータセットを作成できます。
  • ローカル合成データ生成を実装することで、実際の機密データへの依存を最小限に抑えることにより、データセキュリティを大幅に強化できます。
  • 合成データは、プライバシーを保証し、バイアスを削減し、データ収集コストを削減します。
  • カスタマイズされたデータセットは、多様なAIおよびLLMアプリケーション全体で適応性を向上させます。
  • 合成データは、倫理的、効率的、革新的なAI開発への道を開きます。

よくある質問

Q 1。なぜAPIベースのモデルの代わりにOllamaを使用するのですか?

A. Ollamaはローカルの展開機能を提供し、コストと待ち時間を削減しながら、生成プロセスをより強化します。

Q 2。生成された質問の品質をどのように確保できますか?

A.品質を維持するために、実装はPydantic検証、再試行メカニズム、およびJSONクリーニングを使用します。追加のメトリックと維持検証を実装できます。

Q 3。このアプローチの制限は何ですか?

A.ローカルLLMは、より大きなモデルと比較して低品質の出力を持っている可能性があり、ローカルコンピューティングリソースによって生成速度を制限できます。

Q4。合成データは安全で倫理的ですか?

A.はい、合成データは、識別可能な情報を削除することによりプライバシーを保証し、データバイアスに対処し、実際の感受性データへの依存を減らすことにより、倫理的AI開発を促進します。

Q5。合成データを使用することの重要な課題は何ですか?

A.課題には、データリアリズムの確保、ドメインの関連性の維持、効果的なモデルトレーニングのための実世界のユースケースと合成データ特性の調整が含まれます。

以上がローカル合成データ生成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。