제퍼넷 로고

Hugging Face Transformers로 텍스트 요약 프로젝트 설정: 2부

시간

이것은 조직을 위한 실용적인 가이드를 제안하는 XNUMX부작 시리즈의 두 번째 게시물이므로 도메인에 대한 텍스트 요약 모델의 품질을 평가할 수 있습니다.

텍스트 요약에 대한 소개, 이 자습서의 개요 및 프로젝트의 기준선을 만드는 단계(섹션 1이라고도 함)는 다시 첫 번째 게시물.

이 게시물은 세 섹션으로 나뉩니다.

  • 섹션 2: 제로샷 모델로 요약 생성
  • 섹션 3: 요약 모델 학습
  • 섹션 4: 훈련된 모델 평가

섹션 2: 제로샷 모델로 요약 생성

이 포스트에서 우리는 개념을 사용합니다. 제로 샷 학습 (ZSL), 이는 텍스트를 요약하도록 훈련된 모델을 사용하지만 arXiv 데이터 세트. 인생에서 하고 있는 모든 것이 풍경화일 때 초상화를 그리려는 것과 같습니다. 당신은 그림을 그리는 방법을 알고 있지만 초상화 그림의 복잡성에 너무 익숙하지 않을 수 있습니다.

이 섹션에서는 다음을 사용합니다. 수첩.

왜 제로샷 러닝인가?

ZSL은 훈련 없이도 최첨단 NLP 모델을 사용할 수 있기 때문에 지난 몇 년 동안 인기를 얻었습니다. 그리고 그들의 성능은 때때로 매우 놀랍습니다. 큰 과학 연구 작업 그룹 은 최근 제로샷 멀티태스킹 학습 연구를 위해 특별히 훈련된 T0pp("T Zero Plus Plus"로 발음) 모델을 출시했습니다. 종종 XNUMX배 더 큰 모델을 능가할 수 있습니다. BIG-벤치 벤치마킹하고 성능을 능가할 수 있습니다. GPT-3 (16배 더 큼) 다른 여러 NLP 벤치마크에서.

ZSL의 또 다른 이점은 그것을 사용하는 데 단 두 줄의 코드가 필요하다는 것입니다. 그것을 시도함으로써 우리는 데이터 세트에서 모델을 미세 조정한 후 모델 성능의 이득을 수량화하는 데 사용하는 두 번째 기준선을 만듭니다.

제로샷 학습 파이프라인 설정

ZSL 모델을 사용하려면 Hugging Face의 파이프라인 API. 이 API를 사용하면 단 두 줄의 코드로 텍스트 요약 모델을 사용할 수 있습니다. NLP 모델의 주요 처리 단계를 처리합니다.

  1. 모델이 이해할 수 있는 형식으로 텍스트를 전처리합니다.
  2. 전처리된 입력을 모델에 전달합니다.
  3. 모델의 예측을 후처리하여 이해할 수 있도록 합니다.

이미 사용 가능한 요약 모델을 사용합니다. 허깅페이스 모델허브.

사용하려면 다음 코드를 실행하세요.

from transformers import pipeline summarizer = pipeline("summarization")
print(summarizer(text))

그게 다야! 코드는 요약 모델을 다운로드하고 컴퓨터에서 로컬로 요약을 생성합니다. 어떤 모델을 사용하는지 궁금하시다면 소스 코드 또는 다음 명령을 사용하십시오.

print(summarizer.model.config.__getattribute__('_name_or_path'))

이 명령을 실행하면 텍스트 요약의 기본 모델이 호출되는 것을 볼 수 있습니다. sshleifer/distilbart-cnn-12-6:

우리는 찾을 수 있습니다 모델 카드 Hugging Face 웹사이트에서 이 모델의 경우 모델이 다음 두 가지 데이터 세트에 대해 학습되었음을 알 수 있습니다. CNN Dailymail 데이터 세트 그리고 극한 요약(XSum) 데이터 세트. 이 모델은 arXiv 데이터 세트에 익숙하지 않으며 훈련된 것과 유사한 텍스트(대부분 뉴스 기사)를 요약하는 데만 사용된다는 점은 주목할 가치가 있습니다. 모델명의 숫자 12와 6은 각각 인코더 계층과 디코더 계층의 수를 나타냅니다. 이것들이 무엇인지 설명하는 것은 이 튜토리얼의 범위를 벗어나지만, 게시물에서 더 자세히 읽을 수 있습니다. 바트 소개 모델을 만든 Sam Shleifer가 제작했습니다.

우리는 앞으로 기본 모델을 사용하지만 다른 사전 훈련된 모델을 사용해 보는 것이 좋습니다. 요약에 적합한 모든 모델은 다음에서 찾을 수 있습니다. 허깅페이스 홈페이지. 다른 모델을 사용하려면 Pipeline API를 호출할 때 모델 이름을 지정할 수 있습니다.

summarizer = pipeline("summarization", model="facebook/bart-large-cnn")

추출 및 추상 요약

텍스트 요약에 대한 두 가지 가능하지만 다른 접근 방식에 대해서는 아직 이야기하지 않았습니다. 추출물 추상적인. 추출적 요약은 텍스트에서 발췌한 내용을 요약으로 연결하는 전략인 반면, 추상적 요약은 새로운 문장을 사용하여 말뭉치를 의역하는 것과 관련됩니다. 대부분의 요약 모델은 새로운 텍스트를 생성하는 모델을 기반으로 합니다(예: GPT-3). 이것은 요약 모델이 새로운 텍스트도 생성하여 추상적인 요약 모델이 된다는 것을 의미합니다.

제로샷 요약 생성

이제 사용 방법을 알았으므로 테스트 데이터 세트에서 사용하려고 합니다. 섹션 1 기준선을 생성합니다. 다음 루프로 이를 수행할 수 있습니다.

candidate_summaries = [] for i, text in enumerate(texts): if i % 100 == 0: print(i) candidate = summarizer(text, min_length=5, max_length=20) candidate_summaries.append(candidate[0]['summary_text'])

우리는을 사용하여 min_lengthmax_length 모델이 생성하는 요약을 제어하는 ​​매개변수. 이 예에서는 다음을 설정합니다. min_length 제목이 5단어 이상이어야 하기 때문에 20로 변경합니다. 그리고 참고 요약(연구 논문의 실제 제목)을 추정하여 XNUMX이 max_length. 그러나 다시 말하지만 이것은 첫 번째 시도일 뿐입니다. 프로젝트가 실험 단계에 있을 때 이 두 매개변수를 변경하여 모델 성능이 변경되는지 확인해야 합니다.

추가 매개 변수

텍스트 생성에 이미 익숙하다면 빔 검색, 샘플링 및 온도와 같이 모델이 생성하는 텍스트에 영향을 주는 매개변수가 더 많다는 것을 알 수 있습니다. 이러한 매개변수를 사용하면 생성되는 텍스트를 더 잘 제어할 수 있습니다. 예를 들어 텍스트를 더 매끄럽고 덜 반복적으로 만들 수 있습니다. 이러한 기술은 Pipeline API에서 사용할 수 없습니다. 소스 코드min_lengthmax_length 고려되는 유일한 매개변수입니다. 그러나 자체 모델을 훈련하고 배포한 후에는 해당 매개변수에 액세스할 수 있습니다. 이 게시물의 섹션 4에서 더 자세히 설명합니다.

모델 평가

제로샷 요약을 생성한 후 ROUGE 함수를 다시 사용하여 후보 요약을 참조 요약과 비교할 수 있습니다.

from datasets import load_metric
metric = load_metric("rouge") def calc_rouge_scores(candidates, references): result = metric.compute(predictions=candidates, references=references, use_stemmer=True) result = {key: round(value.mid.fmeasure * 100, 1) for key, value in result.items()} return result

ZSL 모델로 생성된 요약에 대해 이 계산을 실행하면 다음 결과를 얻을 수 있습니다.

이를 기준과 비교할 때 이 ZSL 모델이 실제로 첫 번째 문장을 취하는 단순한 휴리스틱보다 성능이 더 나쁘다는 것을 알 수 있습니다. 다시 말하지만, 이것은 예상치 못한 것이 아닙니다. 이 모델은 뉴스 기사를 요약하는 방법을 알고 있지만 학술 연구 논문의 초록을 요약하는 예는 본 적이 없습니다.

기준 비교

이제 간단한 경험적 방법을 사용하는 것과 ZSL 모델을 사용하는 것의 두 가지 기준선을 만들었습니다. ROUGE 점수를 비교함으로써 우리는 단순한 휴리스틱이 현재 딥 러닝 모델을 능가한다는 것을 알 수 있습니다.

다음 섹션에서는 이와 동일한 딥 러닝 모델을 사용하여 성능을 개선하려고 합니다. 우리는 arXiv 데이터 세트에서 훈련함으로써 그렇게 합니다(이 단계는 미세 조정). 우리는 이미 일반적으로 텍스트를 요약하는 방법을 알고 있다는 사실을 이용합니다. 그런 다음 arXiv 데이터 세트의 많은 예를 보여줍니다. 딥 러닝 모델은 훈련을 받은 후 데이터 세트의 패턴을 식별하는 데 매우 뛰어나므로 이 특정 작업에서 모델이 더 좋아질 것으로 기대합니다.

섹션 3: 요약 모델 학습

이 섹션에서는 섹션 2(sshleifer/distilbart-cnn-12-6) 데이터 세트에 있습니다. 아이디어는 많은 예를 보여줌으로써 연구 논문의 초록에 대한 요약이 어떻게 생겼는지 모델을 가르치는 것입니다. 시간이 지남에 따라 모델은 이 데이터 세트의 패턴을 인식해야 하므로 더 나은 요약을 생성할 수 있습니다.

레이블이 지정된 데이터, 즉 텍스트 및 해당 요약이 있는 경우 이를 사용하여 모델을 훈련시켜야 한다는 점을 다시 한 번 언급할 가치가 있습니다. 그렇게 해야만 모델이 특정 데이터 세트의 패턴을 학습할 수 있습니다.

모델 훈련을 위한 전체 코드는 다음과 같습니다. 수첩.

훈련 작업 설정

랩톱에서 딥 러닝 모델을 훈련하는 데 몇 주가 걸리기 때문에 우리는 아마존 세이지 메이커 대신 훈련 직업. 자세한 내용은 Amazon SageMaker로 모델 훈련. 이 게시물에서 저는 GPU 컴퓨팅 인스턴스를 사용할 수 있다는 사실 외에도 이러한 훈련 작업을 사용할 때의 이점을 간략하게 강조합니다.

사용할 수 있는 GPU 인스턴스 클러스터가 있다고 가정해 보겠습니다. 이 경우 교육을 실행할 Docker 이미지를 생성하여 다른 머신에서 교육 환경을 쉽게 복제할 수 있습니다. 그런 다음 필요한 패키지를 설치하고 여러 인스턴스를 사용하려고 하므로 분산 교육도 설정해야 합니다. 교육이 완료되면 이러한 컴퓨터는 비용이 많이 들기 때문에 빨리 종료하고 싶습니다.

훈련 작업을 사용할 때 이러한 모든 단계는 추상화됩니다. 실제로 훈련 매개변수를 지정한 다음 하나의 메서드를 호출하여 설명된 것과 동일한 방식으로 모델을 훈련할 수 있습니다. SageMaker는 추가 비용이 발생하지 않도록 교육이 완료되면 GPU 인스턴스를 중지하는 것을 포함하여 나머지를 처리합니다.

또한 Hugging Face와 AWS는 2022년 초 SageMaker에서 Hugging Face 모델을 더욱 쉽게 훈련할 수 있는 파트너십을 발표했습니다. 이 기능은 Hugging Face 개발을 통해 제공됩니다. AWS 딥 러닝 컨테이너 (DLC). 이러한 컨테이너에는 Hugging Face Transformers, Tokenizers 및 Datasets 라이브러리가 포함되어 있어 교육 및 추론 작업에 이러한 리소스를 사용할 수 있습니다. 사용 가능한 DLC 이미지 목록은 사용 가능한 포옹 얼굴 딥 러닝 컨테이너 이미지. 보안 패치로 유지 관리되고 정기적으로 업데이트됩니다. 이 DLC와 포옹 얼굴 모델을 훈련하는 방법에 대한 많은 예를 찾을 수 있습니다. 허깅페이스 파이썬 SDK 다음에서 GitHub 레포.

우리의 목적에 필요한 거의 모든 작업을 수행하기 때문에 이러한 예제 중 하나를 템플릿으로 사용합니다. 요약 모델 훈련 특정 데이터 세트에서 분산 방식으로(둘 이상의 GPU 인스턴스 사용)

그러나 한 가지 고려해야 할 점은 이 예제에서는 Hugging Face 데이터 세트 허브에서 직접 데이터 세트를 사용한다는 것입니다. 우리는 우리 자신의 사용자 정의 데이터를 제공하고 싶기 때문에 노트북을 약간 수정해야 합니다.

학습 작업에 데이터 전달

자체 데이터세트를 가져온다는 사실을 설명하려면 다음을 사용해야 합니다. 채널. 자세한 내용은 다음을 참조하십시오. Amazon SageMaker에서 교육 정보를 제공하는 방법.

저는 개인적으로 이 용어가 약간 혼란스러워서 항상 생각합니다. 매핑 내가 들을 때 채널, 무슨 일이 일어나는지 더 잘 시각화하는 데 도움이 되기 때문입니다. 설명하겠습니다: 우리가 이미 배웠듯이 훈련 작업은 아마존 엘라스틱 컴퓨트 클라우드 (Amazon EC2) 인스턴스를 만들고 여기에 Docker 이미지를 복사합니다. 그러나 우리의 데이터 세트는 다음 위치에 저장됩니다. 아마존 단순 스토리지 서비스 (Amazon S3) 해당 Docker 이미지에서 액세스할 수 없습니다. 대신 훈련 작업은 Amazon S3에서 사전 정의로 데이터를 복사해야 합니다.
해당 Docker 이미지에서 로컬로 경로를 지정했습니다. 이를 수행하는 방식은 데이터가 Amazon S3에 있는 위치와 훈련 작업이 데이터에 액세스할 수 있도록 데이터를 복사해야 하는 Docker 이미지의 위치를 ​​교육 작업에 알려주는 것입니다. 우리 지도 로컬 경로가 있는 Amazon S3 위치.

훈련 작업의 하이퍼파라미터 섹션에서 로컬 경로를 설정합니다.

그런 다음 훈련을 시작하는 fit() 메서드를 호출할 때 Amazon S3에서 데이터가 있는 위치를 훈련 작업에 알려줍니다.

다음 폴더 이름에 유의하십시오. /opt/ml/input/data 채널 이름과 일치합니다(datasets). 이렇게 하면 훈련 작업이 Amazon S3에서 로컬 경로로 데이터를 복사할 수 있습니다.

교육 시작

이제 훈련 작업을 시작할 준비가 되었습니다. 앞에서 언급했듯이 우리는 전화를 걸어 그렇게합니다. fit() 방법. 학습 작업은 약 40분 동안 실행됩니다. SageMaker 콘솔에서 진행 상황을 확인하고 추가 정보를 볼 수 있습니다.

훈련 작업이 완료되면 새로 훈련된 모델을 평가할 차례입니다.

섹션 4: 훈련된 모델 평가

훈련된 모델을 평가하는 것은 ZSL 모델을 평가한 섹션 2에서 수행한 것과 매우 유사합니다. 모델을 호출하고 후보 요약을 생성하고 ROUGE 점수를 계산하여 참조 요약과 비교합니다. 그러나 이제 모델은 Amazon S3라는 파일에 저장됩니다. model.tar.gz (정확한 위치를 찾으려면 콘솔에서 훈련 작업을 확인할 수 있습니다). 그렇다면 요약을 생성하기 위해 모델에 어떻게 액세스합니까?

두 가지 옵션이 있습니다. ZSL 모델에 대해 섹션 2에서 수행한 것과 유사하게 모델을 SageMaker 엔드포인트에 배포하거나 로컬로 다운로드합니다. 이 튜토리얼에서 나는 모델을 SageMaker 끝점에 배포 더 편리하고 엔드포인트에 대해 더 강력한 인스턴스를 선택하면 추론 시간을 크게 단축할 수 있기 때문입니다. GitHub 리포지토리에는 수첩 모델을 로컬에서 평가하는 방법을 보여줍니다.

모델 배포

일반적으로 SageMaker에 훈련된 모델을 배포하는 것은 매우 쉽습니다(다음 예제를 다시 참조하십시오. GitHub의 포옹 얼굴에서). 모델이 학습된 후에는 다음을 호출할 수 있습니다. estimator.deploy() SageMaker는 백그라운드에서 나머지 작업을 수행합니다. 자습서에서는 한 노트북에서 다음 노트북으로 전환하기 때문에 배포하기 전에 먼저 교육 작업과 관련 모델을 찾아야 합니다.

모델 위치를 검색한 후 SageMaker 엔드포인트에 배포할 수 있습니다.

from sagemaker.huggingface import HuggingFaceModel model_for_deployment = HuggingFaceModel(entry_point='inference.py', source_dir='inference_code', model_data=model_data, role=role, pytorch_version='1.7.1', py_version='py36', transformers_version='4.6.1', ) predictor = model_for_deployment.deploy(initial_instance_count=1, instance_type='ml.g4dn.xlarge', serializer=sagemaker.serializers.JSONSerializer(), deserializer=sagemaker.deserializers.JSONDeserializer() )

SageMaker에서의 배포는 다음을 사용하기 때문에 간단합니다. SageMaker 포옹 얼굴 추론 도구 키트, SageMaker에서 Transformers 모델을 제공하기 위한 오픈 소스 라이브러리입니다. 우리는 일반적으로 추론 스크립트를 제공할 필요조차 없습니다. 툴킷이 이를 처리합니다. 그러나 이 경우 툴킷은 파이프라인 API를 다시 활용하며 섹션 2에서 논의한 것처럼 파이프라인 API를 사용하면 빔 검색 및 샘플링과 같은 고급 텍스트 생성 기술을 사용할 수 없습니다. 이러한 제한을 피하기 위해 당사는 사용자 정의 추론 스크립트.

첫 번째 평가

새로 훈련된 모델의 첫 번째 평가를 위해 섹션 2에서와 동일한 매개변수를 제로샷 모델과 함께 사용하여 후보 요약을 생성합니다. 이렇게 하면 사과 대 사과 비교가 가능합니다.

candidate_summaries = [] for i, text in enumerate(texts): data = {"inputs":text, "parameters_list":[{"min_length": 5, "max_length": 20}]} candidate = predictor.predict(data) candidate_summaries.append(candidate[0][0])

모델에 의해 생성된 요약을 참조 요약과 비교합니다.

이것은 고무적입니다! 하이퍼파라미터 조정 없이 모델을 훈련시키려는 첫 번째 시도는 ROUGE 점수를 크게 향상시켰습니다.

XNUMX차 평가

이제 빔 검색 및 샘플링과 같은 고급 기술을 사용하여 모델을 다룰 차례입니다. 각 매개변수가 하는 일에 대한 자세한 설명은 다음을 참조하십시오. 텍스트 생성 방법: Transformers로 언어 생성에 다양한 디코딩 방법 사용. 다음 매개변수 중 일부에 대해 반무작위 값 세트로 시도해 보겠습니다.

candidate_summaries = [] for i, text in enumerate(texts): data = {"inputs":text, "parameters_list":[{"min_length": 5, "max_length": 20, "num_beams": 50, "top_p": 0.9, "do_sample": True}]} candidate = predictor.predict(data) candidate_summaries.append(candidate[0][0])

이러한 매개변수로 모델을 실행할 때 다음 점수를 얻습니다.

ROUGE 점수가 실제로 약간 떨어졌습니다. 그러나 이것이 이러한 매개변수에 대해 다른 값을 시도하는 것을 방해하지 않도록 하십시오. 사실, 이것은 우리가 설정 단계를 끝내고 프로젝트의 실험 단계로 전환하는 지점입니다.

결론 및 다음 단계

실험 단계를 위한 설정을 완료했습니다. XNUMX부로 구성된 이 시리즈에서는 데이터를 다운로드 및 준비하고, 단순한 휴리스틱으로 기준선을 만들고, 제로샷 학습을 사용하여 또 다른 기준선을 만든 다음, 모델을 훈련하고 성능이 크게 향상되는 것을 확인했습니다. 이제 더 나은 요약을 만들기 위해 우리가 만든 모든 부분을 가지고 놀 시간입니다. 다음을 고려하세요:

  • 데이터를 적절하게 전처리 – 예를 들어, 불용어와 구두점을 제거합니다. 이 부분을 과소평가하지 마십시오. 많은 데이터 과학 프로젝트에서 데이터 사전 처리는 가장 중요한 측면 중 하나이며(가장 중요하지는 않더라도) 데이터 과학자는 일반적으로 이 작업에 대부분의 시간을 보냅니다.
  • 다양한 모델 사용해보기 – 튜토리얼에서는 요약을 위해 표준 모델을 사용했습니다(sshleifer/distilbart-cnn-12-6), 그러나 더 많은 모델 이 작업에 사용할 수 있습니다. 그 중 하나가 사용 사례에 더 적합할 수 있습니다.
  • 초매개변수 조정 수행 – 모델을 훈련할 때 특정 하이퍼파라미터 세트(학습률, 에포크 수 등)를 사용했습니다. 이러한 매개변수는 고정된 것이 아니라 정반대입니다. 모델 성능에 미치는 영향을 이해하려면 이러한 매개변수를 변경해야 합니다.
  • 텍스트 생성에 다른 매개변수 사용 – 우리는 이미 빔 검색 및 샘플링을 활용하기 위해 다른 매개변수로 요약을 생성하는 한 라운드를 수행했습니다. 다른 값과 매개변수를 사용해 보십시오. 자세한 내용은 다음을 참조하십시오. 텍스트 생성 방법: Transformers로 언어 생성에 다양한 디코딩 방법 사용.

이 튜토리얼이 도움이 되었기를 바랍니다.


저자에 관하여

하이코 핫츠 AI 및 기계 학습을 위한 수석 솔루션 설계자이며 AWS 내에서 자연어 처리(NLP) 커뮤니티를 이끌고 있습니다. 이 역할 이전에는 Amazon EU 고객 서비스의 데이터 과학 책임자였습니다. Heiko는 고객이 AWS에서 AI/ML 여정을 성공적으로 수행할 수 있도록 지원하며 보험, 금융 서비스, 미디어 및 엔터테인먼트, 의료, 유틸리티, 제조를 비롯한 다양한 산업의 조직과 협력했습니다. 여가 시간에 Heiko는 가능한 한 많이 여행합니다.

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?