제퍼넷 로고

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

시간

인셀덤 공식 판매점인 OpenAI 2020년 XNUMX월에 텍스트 생성을 전문으로 하는 기계 학습(ML) 모델의 XNUMX세대를 출시했는데 뭔가 다르다는 것을 알았습니다. 이 모델은 이전에 없었던 것과 같이 신경을 곤두서게 했습니다. 갑자기 나는 기술에 관심이 있을 수 있지만 일반적으로 AI/ML 분야의 최신 발전에 대해 별로 신경 쓰지 않는 친구와 동료들이 그것에 대해 이야기하는 것을 들었습니다. 가디언도 썼다 기사 그것에 대해. 또는 정확히 말하면, 모델 기사를 작성하고 Guardian이 편집하여 게시했습니다. 부정할 수 없었다- GPT-3 게임 체인저였습니다.

모델이 출시된 후 사람들은 즉시 해당 모델에 대한 잠재적인 응용 프로그램을 찾기 시작했습니다. 몇 주 만에 인상적인 데모가 많이 만들어졌으며 GPT-3 웹사이트. 내 눈을 사로잡은 하나의 특정 응용 프로그램은 텍스트 요약 – 주어진 텍스트를 읽고 그 내용을 요약하는 컴퓨터의 능력. 자연어 처리(NLP) 분야에서 독해와 텍스트 생성이라는 두 가지 필드를 결합하기 때문에 컴퓨터에서 가장 어려운 작업 중 하나입니다. 이것이 내가 텍스트 요약을 위한 GPT-3 데모에 깊은 인상을 받은 이유입니다.

당신은 그들에게 시도를 줄 수 있습니다 허깅 페이스 스페이스 웹사이트. 현재 내가 가장 좋아하는 것은 신청 기사의 URL만 입력으로 사용하여 뉴스 기사 요약을 생성합니다.

XNUMX부로 구성된 이 시리즈에서는 도메인에 대한 텍스트 요약 모델의 품질을 평가할 수 있도록 조직을 위한 실용적인 가이드를 제안합니다.

튜토리얼 개요

내가 함께 일하는 많은 조직(자선단체, 기업, NGO)에는 읽고 요약해야 하는 엄청난 양의 텍스트가 있습니다. 재무 보고서나 뉴스 기사, 과학 연구 논문, 특허 출원, 법적 계약 등. 당연히 이러한 조직은 NLP 기술로 이러한 작업을 자동화하는 데 관심이 있습니다. 가능성의 예술을 보여주기 위해 나는 종종 텍스트 요약 데모를 사용하는데, 거의 결코 감명을 주지 못합니다.

하지만 지금은?

이러한 조직의 과제는 한 번에 하나씩이 아니라 많은 문서에 대한 요약을 기반으로 텍스트 요약 모델을 평가하기를 원한다는 것입니다. 그들은 지원서를 열고 문서에 붙여넣고 요약 버튼을 누르고 출력을 기다리고 요약이 좋은지 평가하고 수천 개의 문서에 대해 이 작업을 반복합니다.

나는 XNUMX주 전의 나의 과거를 염두에 두고 이 튜토리얼을 작성했습니다. 이 튜토리얼은 제가 이 여행을 시작할 때 갖고 싶었던 튜토리얼입니다. 그런 의미에서 이 튜토리얼의 대상 독자는 AI/ML에 익숙하고 이전에 Transformer 모델을 사용한 적이 있지만 텍스트 요약 여정의 시작 단계에 있으며 더 깊이 들어가고 싶어하는 사람입니다. "초보자"가 작성했기 때문에 초보자를 위해 이 튜토리얼이 a 실용적인 가이드 - 아님 전에, 실용적인 가이드. 처럼 대해주세요 조지 EP 박스 말했다:

이 튜토리얼에서 얼마나 많은 기술 지식이 필요한지 측면에서: Python에서 약간의 코딩이 필요하지만 대부분의 경우 코드를 사용하여 API를 호출하기 때문에 깊은 코딩 지식도 필요하지 않습니다. 다음과 같은 ML의 특정 개념에 익숙해지면 도움이 됩니다. 기차 배포 모델, 개념 훈련, 확인 테스트 데이터 세트, 등등. 또한 변압기 라이브러리 이 자습서 전체에서 이 라이브러리를 광범위하게 사용하기 때문에 before가 유용할 수 있습니다. 나는 또한 이러한 개념에 대한 추가 읽기를 위한 유용한 링크를 포함합니다.

이 튜토리얼은 초보자가 작성했기 때문에 NLP 전문가와 고급 딥 러닝 실무자가 이 튜토리얼의 많은 부분을 얻을 것이라고 기대하지 않습니다. 적어도 기술적인 관점에서는 그렇지 않습니다. 그래도 여전히 재미있게 읽을 수 있으므로 아직 종료하지 마십시오! 그러나 당신은 나의 단순화와 관련하여 인내심을 가져야 할 것입니다. 나는 이 튜토리얼의 모든 것을 가능한 한 단순하게 만드는 개념에 따라 생활하려고 노력했지만 더 단순하지는 않습니다.

이 튜토리얼의 구조

이 시리즈는 텍스트 요약 프로젝트의 여러 단계를 거치는 두 개의 게시물로 분할된 1개의 섹션에 걸쳐 있습니다. 첫 번째 게시물(섹션 XNUMX)에서는 요약이 좋은지 나쁜지 평가할 수 있는 성능 측정인 텍스트 요약 작업에 대한 메트릭을 소개하는 것으로 시작합니다. 또한 요약하려는 데이터 세트를 소개하고 ML이 아닌 모델을 사용하여 기준선을 만듭니다. 간단한 휴리스틱을 사용하여 주어진 텍스트에서 요약을 생성합니다. 이 기준선을 만드는 것은 모든 ML 프로젝트에서 매우 중요한 단계입니다. 이를 통해 앞으로 AI를 사용하여 얼마나 많은 진전이 이루어지고 있는지를 정량화할 수 있기 때문입니다. 이를 통해 "AI 기술에 투자할 가치가 있습니까?"라는 질문에 답할 수 있습니다.

두 번째 게시물에서는 요약을 생성하기 위해 이미 사전 훈련된 모델을 사용합니다(섹션 2). 이것은 ML의 최신 접근 방식으로 가능합니다. 전학 학습. 기본적으로 기성품 모델을 가져와 데이터 세트에서 테스트하기 때문에 이는 또 다른 유용한 단계입니다. 이를 통해 데이터 세트에서 모델을 실제로 훈련할 때 어떤 일이 발생하는지 확인하는 데 도움이 되는 또 다른 기준을 생성할 수 있습니다. 접근 방식은 제로샷 요약, 모델이 데이터 세트에 대한 노출이 전혀 없었기 때문입니다.

그런 다음 사전 훈련된 모델을 사용하고 자체 데이터 세트에서 훈련할 차례입니다(섹션 3). 이것은 또한 미세 조정. 이를 통해 모델은 데이터의 패턴과 특이성을 배우고 천천히 적응할 수 있습니다. 모델을 훈련시킨 후 요약을 생성하는 데 사용합니다(섹션 4).

요약하면 :

  • 부품 1 :
    • 섹션 1: 비 머신러닝 모델을 사용하여 기준선 설정
  • 파트 2:
    • 섹션 2: 제로샷 모델로 요약 생성
    • 섹션 3: 요약 모델 학습
    • 섹션 4: 훈련된 모델 평가

이 자습서의 전체 코드는 다음에서 사용할 수 있습니다. GitHub 레포.

이 튜토리얼을 마치면 무엇을 얻을 수 있을까요?

이 튜토리얼이 끝나면 습관 프로덕션에 사용할 수 있는 텍스트 요약 모델이 있어야 합니다. 우리는 가질 수 없습니다 좋은 요약 모델(여기에 비명 이모티콘 삽입)!

대신 우리가 갖게 될 것은 프로젝트의 다음 단계를 위한 시작점입니다.
실험 단계. 이것은 데이터 과학의 "과학"이 들어오는 곳입니다. 왜냐하면 이제 사용 가능한 교육 데이터로 충분히 좋은 요약 모델을 교육할 수 있는지 이해하기 위해 다양한 모델과 다양한 설정을 실험하는 것이 전부이기 때문입니다.

그리고 완전히 투명하게 하자면 기술이 아직 성숙하지 않았고 프로젝트가 구현되지 않을 것이라는 결론이 나올 가능성이 높습니다. 그리고 그 가능성에 대해 비즈니스 이해 관계자를 준비해야 합니다. 그러나 그것은 다른 게시물의 주제입니다.

섹션 1: 비 머신러닝 모델을 사용하여 기준선 설정

이것은 텍스트 요약 프로젝트 설정에 대한 튜토리얼의 첫 번째 섹션입니다. 이 섹션에서는 실제로 ML을 사용하지 않고 매우 간단한 모델을 사용하여 기준선을 설정합니다. 이것은 모든 ML 프로젝트에서 매우 중요한 단계입니다. 왜냐하면 이를 통해 ML이 프로젝트 기간 동안 얼마나 많은 가치를 추가하고 투자할 가치가 있는지 이해할 수 있기 때문입니다.

튜토리얼의 코드는 다음에서 찾을 수 있습니다. GitHub 레포.

데이터, 데이터, 데이터

모든 ML 프로젝트는 데이터에서 시작됩니다! 가능하다면 항상 텍스트 요약 프로젝트로 달성하고자 하는 것과 관련된 데이터를 사용해야 합니다. 예를 들어, 우리의 목표가 특허 출원을 요약하는 것이라면 특허 출원을 사용하여 모델을 훈련시켜야 합니다. ML 프로젝트에 대한 큰 주의 사항은 일반적으로 교육 데이터에 레이블을 지정해야 한다는 것입니다. 텍스트 요약의 맥락에서 이는 요약(레이블)뿐만 아니라 요약할 텍스트도 제공해야 함을 의미합니다. 두 가지를 모두 제공해야만 모델이 좋은 요약이 어떤 것인지 알 수 있습니다.

이 자습서에서는 공개적으로 사용 가능한 데이터 세트를 사용하지만 사용자 지정 또는 비공개 데이터 세트를 사용하는 경우 단계와 코드는 정확히 동일하게 유지됩니다. 다시 말하지만, 텍스트 요약 모델에 대해 염두에 두고 있는 목표가 있고 해당 데이터가 있는 경우 이를 최대한 활용하기 위해 대신 데이터를 사용하십시오.

우리가 사용하는 데이터는 arXiv 데이터 세트, arXiv 논문의 초록과 제목이 포함되어 있습니다. 우리의 목적을 위해 요약하려는 텍스트로 초록을 사용하고 참조 요약으로 제목을 사용합니다. 데이터 다운로드 및 전처리의 모든 단계는 다음에서 사용할 수 있습니다. 수첩. 우리는 필요합니다 AWS 자격 증명 및 액세스 관리 (IAM) 데이터 로드를 허용하는 역할 아마존 단순 스토리지 서비스 (Amazon S3) 이 노트북을 성공적으로 실행하려면 데이터 세트는 문서의 일부로 개발되었습니다. ArXiv를 데이터 세트로 사용 에 따라 라이선스가 부여됩니다. 크리에이티브 커먼즈 CC0 1.0 유니버설 퍼블릭 도메인 헌정.

데이터는 훈련, 검증 및 테스트 데이터의 세 가지 데이터 세트로 분할됩니다. 자신의 데이터를 사용하려는 경우에도 마찬가지인지 확인하십시오. 다음 다이어그램은 다양한 데이터 세트를 사용하는 방법을 보여줍니다.

당연히 이 시점에서 일반적인 질문은 다음과 같습니다. 얼마나 많은 데이터가 필요합니까? 이미 짐작할 수 있듯이 대답은 다음과 같습니다. 도메인이 얼마나 전문화되어 있는지(특허 출원 요약은 뉴스 기사 요약과 상당히 다릅니다), 모델이 유용하려면 얼마나 정확해야 하는지, 모델 교육 비용은 얼마인지 등에 따라 다릅니다. 나중에 실제로 모델을 훈련할 때 이 질문으로 돌아오지만 프로젝트의 실험 단계에 있을 때 다른 데이터 세트 크기를 시도해야 한다는 점이 부족합니다.

무엇이 좋은 모델을 만드는가?

많은 ML 프로젝트에서 모델의 성능을 측정하는 것은 다소 간단합니다. 이는 일반적으로 모델의 결과가 올바른지 여부에 대한 모호성이 거의 없기 때문입니다. 데이터 세트의 레이블은 종종 이진(True/False, Yes/No) 또는 범주형입니다. 어떤 경우든 이 시나리오에서는 모델의 출력을 레이블과 비교하고 이를 정확하거나 잘못된 것으로 표시하는 것이 쉽습니다.

텍스트를 생성할 때 이것은 더 어려워집니다. 데이터세트에서 제공하는 요약(레이블)은 텍스트를 요약하는 한 가지 방법일 뿐입니다. 그러나 주어진 텍스트를 요약할 수 있는 많은 가능성이 있습니다. 따라서 모델이 레이블 1:1과 일치하지 않더라도 출력은 여전히 ​​유효하고 유용한 요약일 수 있습니다. 그러면 모델의 요약을 우리가 제공하는 요약과 어떻게 비교할 수 있습니까? 모델의 품질을 측정하기 위해 텍스트 요약에서 가장 자주 사용되는 메트릭은 루즈 점수. 이 메트릭의 역학을 이해하려면 다음을 참조하십시오. NLP의 궁극적인 성능 메트릭. 요약하면 ROUGE 점수는 n- 그램 (인접한 순서 n 항목) 모델의 요약(후보 요약)과 참조 요약(데이터 세트에서 제공하는 레이블) 사이. 그러나 물론 이것은 완벽한 척도가 아닙니다. 한계를 이해하려면 다음을 확인하십시오. 루즈 할 것인가, 루즈하지 않을 것인가?

그렇다면 ROUGE 점수는 어떻게 계산할까요? 이 메트릭을 계산하기 위한 꽤 많은 Python 패키지가 있습니다. 일관성을 유지하려면 프로젝트 전체에서 동일한 방법을 사용해야 합니다. 이 튜토리얼의 뒷부분에서 직접 작성하는 대신 Transformers 라이브러리의 교육 스크립트를 사용할 것이기 때문에 소스 코드 스크립트의 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

이 방법을 사용하여 점수를 계산함으로써 프로젝트 전체에서 항상 사과와 사과를 비교합니다.

이 함수는 여러 ROUGE 점수를 계산합니다. rouge1, rouge2, rougeLrougeLsum. 의 "합" rougeLsum 이 메트릭이 전체 요약에 대해 계산된다는 사실을 참조하는 반면, rougeL 개별 문장에 대한 평균으로 계산됩니다. 그렇다면 우리 프로젝트에 어떤 ROUGE 점수를 사용해야 할까요? 다시 말하지만, 우리는 실험 단계에서 다른 접근 방식을 시도해야 합니다. 가치가 있는 만큼, 원래 ROUGE 종이 "ROUGE-2 및 ROUGE-L은 단일 문서 요약 작업에서 잘 작동했습니다." 반면 "ROUGE-1 및 ROUGE-L은 짧은 요약을 평가하는 데 탁월합니다."

기준선 생성

다음으로 단순한 no-ML 모델을 사용하여 기준선을 생성하려고 합니다. 그게 무슨 뜻이야? 텍스트 요약 분야에서 많은 연구는 매우 간단한 접근 방식을 사용합니다. n 텍스트의 문장을 만들고 후보 요약을 선언합니다. 그런 다음 후보 요약을 참조 요약과 비교하고 ROUGE 점수를 계산합니다. 이것은 몇 줄의 코드로 구현할 수 있는 간단하면서도 강력한 접근 방식입니다(이 부분의 전체 코드는 다음과 같습니다. 수첩):

import re ref_summaries = list(df_test['summary']) for i in range (3): candidate_summaries = list(df_test['text'].apply(lambda x: ' '.join(re.split(r'(?<=[.:;])s', x)[:i+1]))) print(f"First {i+1} senctences: Scores {calc_rouge_scores(candidate_summaries, ref_summaries)}")

이 평가를 위해 테스트 데이터 세트를 사용합니다. 모델을 훈련시킨 후 최종 평가를 위해 동일한 테스트 데이터 세트를 사용하기 때문에 이는 의미가 있습니다. 우리는 또한 다른 숫자를 시도 n: 후보 요약으로 첫 번째 문장만 시작하고 처음 두 문장, 마지막으로 처음 세 문장으로 시작합니다.

다음 스크린샷은 첫 번째 모델의 결과를 보여줍니다.

ROUGE 점수가 가장 높으며 첫 번째 문장만 후보 요약으로 사용됩니다. 즉, 두 개 이상의 문장을 사용하면 요약이 너무 장황해지고 점수가 낮아집니다. 즉, 한 문장 요약의 점수를 기준으로 사용할 것입니다.

이러한 간단한 접근 방식의 경우 이러한 수치는 실제로 상당히 좋습니다. 특히 rouge1 점수. 이 숫자를 문맥에 맞게 하기 위해 다음을 참조할 수 있습니다. 페가수스 모델, 다양한 데이터 세트에 대한 최신 모델의 점수를 보여줍니다.

결론과 그 다음

시리즈의 1부에서는 요약 프로젝트 전반에 걸쳐 사용하는 데이터 세트와 요약을 평가하는 메트릭을 소개했습니다. 그런 다음 ML이 없는 간단한 모델로 다음 기준선을 만들었습니다.

. 다음 글, 우리는 제로샷 모델, 특히 공개 뉴스 기사의 텍스트 요약을 위해 특별히 훈련된 모델을 사용합니다. 그러나 이 모델은 데이터 세트에서 전혀 훈련되지 않습니다(따라서 "제로 샷"이라는 이름).

이 제로샷 모델이 우리의 매우 간단한 기준선과 비교하여 어떻게 수행될지 추측하는 숙제로 남겨두겠습니다. 한편으로는 훨씬 더 정교한 모델이 될 것입니다(실제로는 신경망입니다). 반면에 뉴스 기사를 요약하는 데만 사용되므로 arXiv 데이터 세트에 고유한 패턴으로 어려움을 겪을 수 있습니다.


저자에 관하여

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

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

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