MarianMT를 사용한 텍스트 데이터 증대

Hugging Face는 최근 모델 허브에서 거의 140개 언어로 출시되었습니다1008 translation models.

이 모델은 원래 Jörg TiedemannLanguage Technology Research Group at the University of Helsinki에 의해 훈련되었습니다. 그들은 Open Parallel Corpus(OPUS)이라는 신경 기계 번역 프레임워크를 사용하여 MarianNMT에 대해 교육을 받았습니다.

이 게시물에서는 MarianMT 모델을 사용하여 데이터 텍스트 데이터를 보강하는 방법을 설명합니다.

역 번역



우리는 "역변환(Back Translation)"이라는 데이터 증대 기술을 사용할 것입니다. 여기에서 우리는 영어로 작성된 원본 텍스트를 사용합니다. 그런 다음 MarianMT를 사용하여 다른 언어(예: 프랑스어)로 변환합니다. MarianMT를 사용하여 프랑스어 텍스트를 다시 영어로 번역합니다. 원래 영어 문장과 다른 경우 역번역된 영어 텍스트를 유지합니다.



증강 과정



먼저 다음 명령을 사용하여 Hugging Face 변환기와 Moses 토크나이저를 설치해야 합니다.

pip install -U transformers 
pip install mosestokenizer


설치 후 이제 MarianMT 모델과 토크나이저를 가져올 수 있습니다.

from transformers import MarianMTModel, MarianTokenizer


그런 다음 영어에서 로맨스 언어로 번역할 수 있는 모델을 초기화할 수 있습니다. 모든 로맨스 언어로 번역할 수 있는 단일 모델입니다()

target_model_name = 'Helsinki-NLP/opus-mt-en-ROMANCE'
target_tokenizer = MarianTokenizer.from_pretrained(target_model_name)
target_model = MarianMTModel.from_pretrained(target_model_name)


마찬가지로 로맨스 언어를 영어로 번역할 수 있는 모델을 초기화할 수 있습니다.

en_model_name = 'Helsinki-NLP/opus-mt-ROMANCE-en'
en_tokenizer = MarianTokenizer.from_pretrained(en_model_name)
en_model = MarianMTModel.from_pretrained(en_model_name)


다음으로 기계 번역 모델, 토크나이저 및 대상 로맨스 언어가 주어진 텍스트 배치를 번역하는 도우미 함수를 작성합니다.

def translate(texts, model, tokenizer, language="fr"):
    # Prepare the text data into appropriate format for the model
    template = lambda text: f"{text}" if language == "en" else f"{language}<< {text}"
    src_texts = [template(text) for text in texts]

    # Tokenize the texts
    encoded = tokenizer.prepare_seq2seq_batch(src_texts)

    # Generate translation using model
    translated = model.generate(**encoded)

    # Convert the generated tokens indices back into text
    translated_texts = tokenizer.batch_decode(translated, skip_special_tokens=True)

    return translated_texts


다음으로 위의 translate() 함수를 이용하여 역번역을 수행할 수 있는 함수를 준비하겠습니다.

def back_translate(texts, source_lang="en", target_lang="fr"):
    # Translate from source to target language
    fr_texts = translate(texts, target_model, target_tokenizer, 
                         language=target_lang)

    # Translate from target language back to source language
    back_translated_texts = translate(fr_texts, en_model, en_tokenizer, 
                                      language=source_lang)

    return back_translated_texts


이제 아래와 같이 문장 목록에서 영어에서 스페인어로의 역번역을 사용하여 데이터 증대를 수행할 수 있습니다.

en_texts = ['This is so cool', 'I hated the food', 'They were very helpful']

aug_texts = back_translate(en_texts, source_lang="en", target_lang="es")
print(aug_texts)



["Yeah, it's so cool.", "It's the food I hated.", 'They were of great help.']


유사하게, 우리는 정확히 같은 헬퍼 메서드로 아래와 같이 영어에서 프랑스어로 증강을 수행할 수 있습니다.

en_texts = ['This is so cool', 'I hated the food', 'They were very helpful']
aug_texts = back_translate(en_texts, source_lang="en", target_lang="fr")

print(aug_texts)



["It's so cool.", 'I hated food.', "They've been very helpful."]


체인 백 번역



더 많은 다양성을 얻기 위해 체인에서 다시 번역을 실행할 수도 있습니다. 예: English -> Spanish -> English -> French -> English
en_texts = ['This is so cool', 'I hated the food', 'They were very helpful']

aug1_texts = back_translate(en_texts, source_lang="en", target_lang="es")
aug2_texts = back_translate(aug1_texts, source_lang="en", target_lang="fr")

print(aug2_texts)



["Yeah, that's cool.", "It's the food I hated.", 'They were of great help.']


사용 가능한 모델



위에서 사용할 수 있는 주요 로맨스 언어의 하위 집합에 대한 언어 코드는 다음과 같습니다.


언어
프랑스 국민
스페인의
이탈리아 사람
포르투갈 인
루마니아 사람
카탈로니아 사람
갈리시아어
라틴어


암호
정말로

그것
태평양 표준시

캘리포니아
GL




언어
왈론 사람
옥시탄(1500년 이후)
사르디니아 사람
아라곤어
코르시카어
로만시어


암호

OC
sn

공동
rm


사용 가능한 모든 언어 코드를 보려면 다음을 실행할 수 있습니다.

target_tokenizer.supported_language_codes


대체 응용 프로그램



데이터 증대 외에도 역번역 프로세스는 텍스트 패러프레이징에도 사용할 수 있습니다.

마찬가지로 적대적 공격으로도 사용할 수 있습니다. NLP 모델을 교육한 교육 데이터 세트가 있다고 가정합니다. 그런 다음 훈련 데이터 세트를 보강하고 증강 텍스트에 대한 모델에서 예측을 생성할 수 있습니다. 예측이 실제 레이블과 다른 경우 모델이 실패한 텍스트 목록이 있습니다. 이러한 응답을 분석하면 좋은 통찰력을 얻을 수 있습니다.

결론



따라서 MarianMT는 역번역을 위한 Google 번역의 적절한 무료 및 오프라인 대안입니다.

참조


  • MarianMT - transformers 3.0.2 documentation

  • 연결하다



    블로그 게시물이 마음에 드셨다면 매주 새 블로그 게시물을 공유하는 곳에서 저와 연락해 주시기 바랍니다.

    좋은 웹페이지 즐겨찾기