> 기술 주변기기 > 일체 포함 > 로컬 합성 데이터 생성

로컬 합성 데이터 생성

尊渡假赌尊渡假赌尊渡假赌
풀어 주다: 2025-03-13 13:13:10
원래의
346명이 탐색했습니다.

영국의 수학자 인 Clive Humby의 유명한 인용 인용“Data is the New Oil”을 들었습니다. 21 세기의 데이터의 중요성을 설명하는 가장 영향력있는 인용문이지만 큰 언어 모델의 폭발적인 개발과 우리가 가지고 있지 않은 훈련 후에는 데이터입니다. LLM 모델의 개발 속도와 훈련 속도는 인간의 데이터 생성 속도를 거의 능가하기 때문입니다. 솔루션은 데이터를보다 세련되고 작업 또는 합성 데이터 생성에 구체적으로 만들고 있습니다. 전자는 도메인 전문가로드 된 작업이 많지만 후자는 오늘날의 문제에 대한 큰 굶주림에 더 두드러집니다.

고품질 교육 데이터는 중요한 병목 현상으로 남아 있습니다. 이 블로그 게시물은 Llama 3.2와 Ollama를 사용하여 합성 데이터를 생성하는 실질적인 접근법을 탐구합니다. 프로그래밍 방식으로 구조화 된 교육 콘텐츠를 만들 수있는 방법을 보여줄 것입니다.

학습 결과

  • 기계 학습 모델 교육을 향상시키기위한 로컬 합성 데이터 생성의 중요성과 기술을 이해하십시오.
  • 프라이버시 및 보안을 유지하면서 고품질 데이터 세트를 만들기 위해 로컬 합성 데이터 생성을 구현하는 방법을 알아보십시오.
  • 데이터 생성 파이프 라인에서 강력한 오류 처리 및 재 시도 메커니즘 구현에 대한 실질적인 지식을 얻습니다.
  • JSON 검증, 청소 기술 및 일관되고 신뢰할 수있는 출력을 유지하는 역할을 배우십시오.
  • 데이터 스키마 무결성을 보장하기 위해 Pydantic 모델 설계 및 활용에 대한 전문 지식을 개발하십시오.

목차

  • 합성 데이터 란 무엇입니까?
  • 오늘날 우리는 왜 합성 데이터가 필요한가요?
  • LLM 및 작은 LM 성능에 미치는 영향
  • 프로젝트 구조 및 환경 설정
  • 프로젝트 구현
  • 강력한 세대
  • 자동화 테스트
  • 결론
  • 자주 묻는 질문

합성 데이터 란 무엇입니까?

합성 데이터는 필수 패턴과 통계적 특성을 보존하면서 실제 데이터의 특성을 모방하는 인위적으로 생성 된 정보를 말합니다. 알고리즘, 시뮬레이션 또는 AI 모델을 사용하여 제어 된 시나리오에서 개인 정보 문제를 해결하거나 제한된 데이터 또는 테스트 시스템을 강화합니다. 실제 데이터와 달리 합성 데이터는 특정 요구 사항에 맞게 조정되어 다양성, 균형 및 확장 성을 보장 할 수 있습니다. 기계 학습, 의료, 금융 및 자율 시스템과 같은 분야에서 널리 사용되어 모델을 훈련 시키거나 알고리즘을 검증하거나 환경을 시뮬레이션합니다. 합성 데이터는 윤리적 및 규정 준수 위험을 줄이면서 데이터 부족과 실제 응용 프로그램 간의 격차를 해소합니다.

오늘날 우리는 왜 합성 데이터가 필요한가요?

합성 데이터에 대한 수요는 몇 가지 요인으로 인해 기하 급수적으로 증가했습니다.

로컬 합성 데이터 생성

  • 데이터 개인 정보 보호 규정 : GDPR 및 유사한 규정을 통해 합성 데이터는 개발 및 테스트를위한 안전한 대안을 제공합니다.
  • 비용 효율성 : 실제 데이터 수집 및 주석은 비싸고 시간이 많이 걸립니다.
  • 성성 : 합성 데이터는 변동이 제어되는 대량으로 생성 될 수 있습니다.
  • Edge Case Coverage : 자연스럽게 수집하기 어려운 드문 시나리오에 대한 데이터를 생성 할 수 있습니다.
  • 빠른 프로토 타이핑 : 실제 데이터 수집을 기다리지 않고 ML 모델의 빠른 반복.
  • 덜 편견 : 현실 세계에서 수집 된 데이터는 오류가 발생하고 성 편견, 인종 차별적 텍스트로 가득 차 있으며, 이러한 유형의 데이터를 가진 모델을 만들기 위해 어린이의 말에 안전하지 않기 때문에 모델의 행동은 본질적으로 이러한 편견과도 관련이 있습니다. 합성 데이터를 사용하면 이러한 동작을 쉽게 제어 할 수 있습니다.

LLM 및 작은 LM 성능에 미치는 영향

합성 데이터는 크고 작은 언어 모델을 개선하는 유망한 결과를 보여주었습니다.

로컬 합성 데이터 생성

  • 미세 조정 효율성 : 고품질 합성 데이터에 미세 조정 된 모델은 종종 실제 데이터에 대해 교육을받은 사람들과 비슷한 성능을 보여줍니다.
  • 도메인 적응 : 합성 데이터는 전문 애플리케이션에서 도메인 간격을 연결하는 데 도움이됩니다.
  • 데이터 확대 : 합성 및 실제 데이터를 결합하면 종종 단독을 사용하여 더 나은 결과를 얻습니다.

프로젝트 구조 및 환경 설정

다음 섹션에서는 프로젝트 레이아웃을 분해하고 필요한 환경 구성을 안내합니다.

 프로젝트/
main.py
├ ─) 요구 사항 .txt
├ ── readme.md
└ ── English_QA_NEW.JSON
로그인 후 복사

이제 Conda를 사용하여 프로젝트 환경을 설정할 것입니다. 아래 단계를 따르십시오

콘다 환경을 만듭니다

 $ conda create -n 합성 데이터 파이썬 = 3.11

# 새로 생성 된 환경을 활성화합니다

$ Conda는 합성 데이터를 활성화합니다
로그인 후 복사

Conda Env에 라이브러리를 설치하십시오

 Pip Pydantic Langchain Langchain-Community를 설치하십시오
PIP 설치 Langchain-Ollama
로그인 후 복사

이제 우리는 코드 구현을 시작하기 위해 모두 설정되었습니다.

프로젝트 구현

이 섹션에서는 각 단계를 자세히 다루는 프로젝트의 실제 구현을 탐구합니다.

라이브러리 가져 오기

프로젝트를 시작하기 전에 프로젝트 루트에서 파일 이름 Main.py를 생성하고 해당 파일의 모든 라이브러리를 가져옵니다.

 Pydantic Import Basemodel, Field, ValidationError에서
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 = "Question Type")
    질문 : str = field (..., description = "영어 질문")
    답 : str = field (..., description = "질문에 대한 정답")
    Thought_process : str = field (
        ..., description = "답변에 도달하기위한 추론 과정의 설명"
    ))
로그인 후 복사

이제 우리는 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) -> 영어 질문 :
        통과하다


    def generate_with_retries (자체, 카테고리 : str, 리트리 : int = 3) -> 영어 Question :
        통과하다

    def generate_questions (
        자기, 범주 : List [str], 반복 : int
    ) -> 목록 [EnglishQuestion] :
        통과하다

    def save_to_json (자기, 질문 : 영어 Question) :
        통과하다

    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 = PrustTemplate (
            input_variables = [ "범주"],
            템플릿 = "" ""
            이해와 사용을 테스트하는 영어 질문을 생성하십시오.
            {category}에 중점을 둡니다. 질문은 블랭크를 채우고 하나의 라이너를 채우고 MP는 MCQ 유형이 아닙니다. 이 엄격한 JSON 형식으로 출력을 쓰십시오.

            {{
                "질문": "",
                "답": "",
                "Thought_Process": ""
            }}

            JSON 객체 외부에 텍스트를 포함하지 마십시오.
            "" ",
        ))
        self.output_file = output_file
        self.output_file.touch (extin_ok = true)
로그인 후 복사

JSON 청소

Generation Process에서 LLM에서 얻을 수있는 응답에는 생성 된 데이터를 포기할 수있는 많은 불필요한 추가 문자가 있으므로 청소 프로세스를 통해 이러한 데이터를 전달해야합니다.

여기서는 Regex를 사용하여 JSON 키/값의 공통 형식 문제를 해결하고 Newline과 같은 문제가있는 문자를 대체합니다.

코드 구현 :

 def clean_json_string (self, text : str) -> str :
        "" "오르플 폼 또는 불완전한 JSON을 처리하기위한 개선 된 버전." ""
        start = text.find ( "{")
        end = text.rfind ( "}")

        start == -1 또는 end == -1 인 경우 :
            ValueError Raise (F "JSON 객체가 발견되지 않았습니다. 응답은 다음과 같습니다. {text}")

        json_str = 텍스트 [시작 : 끝 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) -> 영어 질문 :
        "" "LLM 응답을 구문 분석하고 스키마에 대해 검증하십시오." ""
        cleaned_json = self.clean_json_string (결과)
        parsed_result = json.loads (cleaned_json)
        rec
로그인 후 복사

데이터 지속성

영적 데이터 생성의 경우,이를 위해 일부 NOSQL 데이터베이스 (MongoDB 등)를 사용할 수 있지만 여기서는 간단한 JSON 파일을 사용하여 생성 된 데이터를 저장합니다.

코드 구현 :

 def load_existing_data (self) -> list [dict] :
        "" "JSON 파일에서 기존 질문을로드합니다." ""
        노력하다:
            f로 open (self.output_file, "r")을 f :
                반환 json.load (f)
        (filenotfounderRor, json.jsondecodeerror)를 제외하고 :
            반품 []
로그인 후 복사

강력한 세대

이 데이터 생성 단계에는 가장 중요한 두 가지 방법이 있습니다.

  • 재 시도 메커니즘으로 생성하십시오
  • 질문 생성 방법

재 시도 메커니즘의 목적은 자동화가 고장시 응답을 생성하도록 강제하는 것입니다. 질문을 여러 번 생성하려고 시도하고 (기본값은 세 번) 오류를 기록하고 재시도 사이에 지연을 추가합니다. 모든 시도가 실패하면 예외가 발생합니다.

코드 구현 :

 def generate_with_retries (자체, 카테고리 : str, 리트리 : int = 3) -> 영어 Question :
        범위의 시도 (재수) :
            노력하다:
                결과 = self.prompt_template | self.llm
                response = result.invoke (입력 = { "범주": 카테고리})
                return self.parse_response (응답)
            E로 예외를 제외하고 :
                인쇄(
                    f "시도 {ritk 1}/{retries} 범주 '{category}': {e}"에 실패했습니다.
                ))
                수면 (2) # 재 시도 전의 작은 지연
        ValueError를 높이기 (
            f "{retries} 시도 후 범주 '{category}'를 처리하지 못했습니다."
        ))
로그인 후 복사

질문 생성 방법은 카테고리 목록에 대한 여러 질문을 생성하고 스토리지 (여기서 JSON 파일)에 저장합니다. 각 카테고리에 대한 카테고리를 반복하고 각 카테고리에 대한 호출 생성 _with_retries 메소드를 호출합니다. 마지막으로 Save_To_JSON 메소드를 사용하여 성공적으로 생성 된 각 질문을 저장합니다.

 def generate_questions (
        자기, 범주 : List [str], 반복 : int
    ) -> 목록 [EnglishQuestion] :
        "" "카테고리 목록에 대해 여러 질문을 생성합니다." ""
        all_questions = []
        _ in range (반복) :
            카테고리 카테고리의 경우 :
                노력하다:
                    question = self.generate_with_retries (카테고리)
                    self.save_to_json (질문)
                    All_Questions.Append (질문)
                    print (f "카테고리에 대한 성공적인 질문 : {category}")
                E로 (ValidationError, ValueError)를 제외하고 :
                    print (f "오류 처리 범주 '{category}': {e}")
        all_questions를 반환하십시오
로그인 후 복사

터미널에 결과를 표시합니다

LLM에서 생성되는 응답이 무엇인지에 대한 아이디어를 얻는 것은 간단한 인쇄 기능입니다.

 def display_questions (질문 : List [EnglishQuestion]) :
    print ( "\ ngenerated 영어 질문 :")
    질문에 대한 질문 :
        print ( "\ n ---")
        print (f "id : {question.id}")
        print (f "Question : {Question.question}")
        print (f "답 : {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)

    카테고리 = [
        "단어 사용법",
        "phrasal ver",
        "어휘",
        "관용구",
    ]]
    반복 = 2

    generated_questions = generator.generate_questions (카테고리, 반복)
    display_questions (generated_questions)
로그인 후 복사

이제 터미널로 이동하여 다음을 입력하십시오.

 Python main.py
로그인 후 복사

산출:

로컬 합성 데이터 생성

이러한 질문은 프로젝트 루트에 저장됩니다. 저장된 질문은 다음과 같습니다.

로컬 합성 데이터 생성

이 프로젝트에 사용 된 모든 코드는 여기에 있습니다.

결론

합성 데이터 생성은 AI 및 LLM의 빠른 발전 시대에 고품질 교육 데이터 세트에 대한 증가하는 수요를 해결하기위한 강력한 솔루션으로 등장했습니다. Llama 3.2 및 Ollama와 같은 도구를 Pydantic과 같은 강력한 프레임 워크와 함께 Llama와 같은 도구를 활용하여 특정 요구에 맞게 조정 된 구조화되고 확장 가능하며 편견이없는 데이터 세트를 만들 수 있습니다. 이 접근법은 비용이 많이 들고 시간이 많이 걸리는 실제 데이터 수집에 대한 의존성을 줄일뿐만 아니라 개인 정보 및 윤리적 준수를 보장합니다. 이러한 방법론을 개선함에 따라 합성 데이터는 혁신 주도, 모델 성능 향상 및 다양한 분야의 새로운 가능성을 잠금 해제하는 데 중추적 인 역할을 할 것입니다.

주요 테이크 아웃

  • 로컬 합성 데이터 생성을 통해 개인 정보를 손상시키지 않으면 서 모델 정확도를 향상시킬 수있는 다양한 데이터 세트를 생성 할 수 있습니다.
  • 로컬 합성 데이터 생성을 구현하면 실제 민감한 데이터에 대한 의존을 최소화함으로써 데이터 보안이 크게 향상 될 수 있습니다.
  • 합성 데이터는 프라이버시를 보장하고 편견을 줄이며 데이터 수집 비용을 낮 춥니 다.
  • 맞춤형 데이터 세트는 다양한 AI 및 LLM 응용 프로그램에서 적응성을 향상시킵니다.
  • 합성 데이터는 윤리적이고 효율적이며 혁신적인 AI 개발의 길을 열어줍니다.

자주 묻는 질문

Q 1. 왜 API 기반 모델 대신 Ollama를 사용합니까?

A. Ollama는 로컬 배치 기능을 제공하여 비용과 대기 시간을 줄이면서 생성 프로세스를보다 잘 제어 할 수 있습니다.

Q 2. 생성 된 질문의 품질을 어떻게 보장 할 수 있습니까?

A. 품질을 유지하기 위해 구현은 Pydantic 검증, 재 시도 메커니즘 및 JSON 청소를 사용합니다. 추가 메트릭 및 유지 유지 관리를 구현할 수 있습니다.

Q 3.이 접근법의 한계는 무엇입니까?

A. 로컬 LLM은 더 큰 모델에 비해 품질이 낮을 수 있으며, 지역 컴퓨팅 리소스에 의해 생성 속도가 제한 될 수 있습니다.

Q4. 합성 데이터는 사용하기에 안전하고 윤리적입니까?

A. 예, 합성 데이터는 식별 가능한 정보를 제거하여 프라이버시를 보장하고 데이터 편견을 해결하고 실제 민감한 데이터에 대한 의존성을 줄임으로써 윤리적 AI 개발을 촉진합니다.

Q5. 합성 데이터 사용의 주요 과제는 무엇입니까?

A. 도전에는 데이터 현실주의 보장, 도메인 관련성 유지, 합성 데이터 특성을 효과적인 모델 교육을위한 실제 사용 사례와 정렬하는 것이 포함됩니다.

위 내용은 로컬 합성 데이터 생성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿