본문 바로가기
IT KNOWLEDGE

Translation LLM 실습

by BTC_박현영 2023. 7. 21.

베하~ 안녕하세요! BTC_현상수배범 입니다.

지난 시간에는 Embedding 문서를 기반으로 유사도 검색을 수행했었습니다! 단순한 QA 태스크 외에도, Claasification, Summarization과 같은 여러 작업을 수행할 수 있는데, 오늘은 Translation 모델로 실습을 해보도록 하겠습니다.

Huggingface.co 에서 여러 다양한 오픈소스 모델들을 다운받아서 테스트할 수 있으니 참고 부탁드립니다.

저는 NHNDQ/nllb-finetuned-ko2en 모델로 테스트해봤습니다.

 

transformers 라이브러리를 활용하여 굉장히 간편하게 로컬 환경에서 llm을 돌려볼 수 있습니다!

from transformers import pipeline
translator = pipeline("translation", 
                        model = "NHNDQ/nllb-finetuned-ko2en", 
                        tokenizer = "NHNDQ/nllb-finetuned-ko2en",
                        src_lang='ko', 
                        tgt_lang="en", 
                        max_length=400)

위 코드만 실행하면 로컬에 custom llm도 다운로드하고, 로드까지 할 수 있습니다.

model, tokenizer는 huggingface의 각 모델별 페이지 우측에 Use in Trasformers를 클릭하면 편리하게 복붙이 가능합니다.

 

모델 로드가 끝났으니, 이제 번역을 테스트해보려 합니다.

위 코드에서 src_lang은 번역하고자하는 소스 언어이고, tgt_lang이 목표 언어입니다.

모델명에 ko2en 이라는 글자를 확인할 수 있는데, 해당 모델은 korean -> english로의 번역이 가능한 모델이라고 이해하시면 되겠습니다.

 

이제 번역할 문장을 지정해보려합니다.

test_text_li = ['메이저대회 US오픈에서 10위권에 진입한 김주형(21)이 미국프로골프(PGA)투어 트래블러스 챔피언십(총상금 264억원, 우승상금 47억원)에서 우승에 도전한다.', '트래블러스 챔피언십은 오는 22일(현지시간)부터 미국 코네티컷주 크롬웰에 있는 TPC 리버 하이랜드(파70)에서 열린다.', '한국 선수로는 김주형을 비롯해 안병훈, 임성재, 김성현, 김시우, 이경훈이 출전한다.', '지난해 대회에서는 이경훈이 공동 19위에 올랐다. 한국 선수 역대 최고 성적은 2014년 최경주가 거둔 공동 2위다.', '이번 대회에는 지난주 US오픈에 출전했던 선수들 중 72명이 출전한다.', '김주형은 US오픈에서 공동 8위에 올랐다. 이로써 김주형은 부진 탈출 계기를 마련했다. 김주형은 지난해 8월 윈덤 챔피언십과 10월 슈라이너스 칠드런스 오픈에서 우승을 차지해 통산 2승을 올렸지만 이후 뚜렷한 성적을 내지 못하다 이번에 다시 도약했다.', '자신의 메이저 대회 최고 성적도 거뒀다. 김주형은 지난 4월 마스터스 토너먼트에서 거둔 공동 16위를 넘어 톱10 진입에 성공했다.', '김주형 외에 지난주 US오픈에서 첫 메이저 우승을 차지한 윈덤 클라크도 출전한다. 여기에 세계 1위 스코티 셰플러를 비롯해 욘 람, 로리 매킬로이, 패트릭 캔틀레이, 빅토르 호블란, 잰더 쇼플리, 매튜 피츠패트릭, 맥스 호마 등 상위권 선수들이 출전해 우승 경쟁을 펼친다.', '◎공감언론 뉴시스 daero@newsis.com']
ts_li = []
for text in test_text_li:
    ts_li.append(translator(f"{text}")[0]['translation_text'])
ts_li

번역 결과

저는 그냥 신문기사를 가져와서 리스트로 저장했습니다. <신문기사>

for문 내부의 구문이 번역을 진행하고, ts_li에 추가합니다.

결과를 보시면 앞에 ened, enco같은 쓸데없는 문자들도 생겼는데, 이것들도 제거해보도록 하겠습니다.

# ts_li에서 불필요한 문자 제거(ened, enco 등등)
import re
prefixes = ["ened ", "enco ", "enko ", "en ", "en, ", "en. ", "eness "]
result = [re.sub(r'^(' + '|'.join(prefixes) + r')', '', sentences) for sentences in ts_li]

result

정규식을 통해 ened, enco 등의 문자열을 제거한 모습입니다.

Translation 태스크를 평가할 땐, 일반적으로 BLEU Score라는 지표를 많이 사용합니다.

BLEU Score를 평가하는 방식은 해당 문서(링크)를 읽어보시면 도움이 될 것 같습니다.

 

다행히도, 파이썬에서는 라이브러리를 통해 편리하게 bleu score를 계산할 수 있습니다.

다만, BLEU Score를 지표로 사용하기 위해서는 reference가 필요한데, 저는 구글 번역기와 챗 지피티를 이용해서 번역을 해봤습니다.

import nltk.translate.bleu_score as bleu
import numpy as np
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))

test_text_li = ['메이저대회 US오픈에서 10위권에 진입한 김주형(21)이 미국프로골프(PGA)투어 트래블러스 챔피언십(총상금 264억원, 우승상금 47억원)에서 우승에 도전한다.', '트래블러스 챔피언십은 오는 22일(현지시간)부터 미국 코네티컷주 크롬웰에 있는 TPC 리버 하이랜드(파70)에서 열린다.', '한국 선수로는 김주형을 비롯해 안병훈, 임성재, 김성현, 김시우, 이경훈이 출전한다.', '지난해 대회에서는 이경훈이 공동 19위에 올랐다. 한국 선수 역대 최고 성적은 2014년 최경주가 거둔 공동 2위다.', '이번 대회에는 지난주 US오픈에 출전했던 선수들 중 72명이 출전한다.', '김주형은 US오픈에서 공동 8위에 올랐다. 이로써 김주형은 부진 탈출 계기를 마련했다. 김주형은 지난해 8월 윈덤 챔피언십과 10월 슈라이너스 칠드런스 오픈에서 우승을 차지해 통산 2승을 올렸지만 이후 뚜렷한 성적을 내지 못하다 이번에 다시 도약했다.', '자신의 메이저 대회 최고 성적도 거뒀다. 김주형은 지난 4월 마스터스 토너먼트에서 거둔 공동 16위를 넘어 톱10 진입에 성공했다.', '김주형 외에 지난주 US오픈에서 첫 메이저 우승을 차지한 윈덤 클라크도 출전한다. 여기에 세계 1위 스코티 셰플러를 비롯해 욘 람, 로리 매킬로이, 패트릭 캔틀레이, 빅토르 호블란, 잰더 쇼플리, 매튜 피츠패트릭, 맥스 호마 등 상위권 선수들이 출전해 우승 경쟁을 펼친다.', '◎공감언론 뉴시스 daero@newsis.com']
google_ts = ['Kim Joo-hyung (21), who finished in the top 10 at the major US Open, will challenge to win the PGA Tour Travelers Championship (total prize money of 26.4 billion won, prize money of 4.7 billion won).', 'The Travelers Championship will be held at TPC River Highland (par 70) in Cromwell, Connecticut, USA starting on the 22nd (local time).', 'Korean players include Kim Joo-hyung, Ahn Byeong-hun, Lim Seong-jae, Kim Seong-hyun, Kim Si-woo, and Lee Kyung-hoon will participate.', 'Last year In the competition, Lee Kyung-hoon tied for 19th place. The highest record for a Korean player was joint second place achieved by Choi Kyung-joo in 2014.', "This tournament will feature 72 players out of last week's US Open players.", "Kim Joo-hyung tied for eighth place at the US Open. With this, Kim Joo-hyung prepared an opportunity to escape from sluggishness. Kim Joo-hyung did not achieve any clear results after the Wyndham Championship in August last year and the Shriners Children's Open in October winning two career victories, but this time he took another leap.", "He also achieved his best performance in major tournaments. Kim Joo-hyung succeeded in entering the top 10 beyond a tie for 16th in the Masters Tournament in April.", "Aside from Joo-hyung Kim, Wyndham Clark, who won his first major championship at the US Open last week, will also participate. Here, top players such as Scotty Scheffler, the world's No. 1, John Lahm, Rory McIlroy, Patrick Cantley, Victor Hoblan, Xander Chopley, Matthew Fitzpatrick, and Max Houma will compete for the championship.", '◎Sympathetic Media Newsis daero@newsis.com']
gpt_ts = ["Kim Ju-hyung (21), who ranked in the top 10 at the major tournament, the US Open, will challenge for the championship at the Travelers Championship on the US Professional Golf Association (PGA) Tour. The total prize money for the Travelers Championship is 26.4 billion won, with a winner's prize of 4.7 billion won.","The Travelers Championship will be held from the 22nd of this month (local time) at TPC River Highlands in Cromwell, Connecticut, USA, which is a par-70 course.","In addition to Kim Ju-hyung, Korean players including Ahn Byung-hoon, Im Sung-jae, Kim Sung-hyun, Kim Si-woo, and Lee Kyung-hoon will participate.","In last year's tournament, Lee Kyung-hoon finished tied for 19th place. The best performance by a Korean player in the tournament was a tie for 2nd place achieved by Choi Kyung-ju in 2014.","A total of 72 players who participated in the US Open last week will compete in this tournament.","Kim Ju-hyung finished tied for 8th place at the US Open. With this result, Kim Ju-hyung created an opportunity to break out of his slump. Although Kim Ju-hyung won two titles in August last year at the Wyndham Championship and in October at the Shriners Children's Open, he has not achieved notable results since then. However, he is making a comeback this time.","He also set his best performance in a major tournament. Kim Ju-hyung succeeded in entering the top 10, surpassing his tied 16th place finish at the Masters Tournament in April.","In addition to Kim Ju-hyung, Brendon Clark, who won his first major title at last week's US Open, will also compete. Top players such as Scottie Scheffler, Jon Rahm, Rory McIlroy, Patrick Cantlay, Viktor Hovland, Xander Schauffele, Matthew Fitzpatrick, and Max Homa, as well as world number one, will compete for the championship.","◎Sympathetic press Newsis daero@newsis.com"]

# gpt 번역 결과, google 번역 결과 합침
references = []
for i in range(len(google_ts)):
    row = []
    for j in range(1):
        row.append(google_ts[i])
        row.append(gpt_ts[i])
    references.append(row)

# BLEU-2, BLEU-3, BLEU-4로 각 문장 번역 결과를 평가한 뒤, 평가 별로 평균을 냄
def llm_bleu_score(ts_li, references):
    
    weights = [
        (1./2, 1./2),               # 2-gram
        (1./3, 1./3, 1./3),         # 3-gram
        (1./4, 1./4, 1./4, 1./4)    # 4-gram
    ]
    bleu_li = []
    
    for i in range(len(ts_li)):
        bleu_li.append(bleu.sentence_bleu(list(map(lambda ref: ref.split(), references[i])), 
                                                    ts_li[i].split(),
                                                    weights))
    
    bleu_mean = np.mean(bleu_li, axis=0)
    return bleu_mean
   
# BLEU Score 결과
llm_bleu_score(result, references)

평가 결과

 

'IT KNOWLEDGE' 카테고리의 다른 글

[Youtube API] YouTube Data API v3 개요  (0) 2023.08.03
Keycloak과 Grafana 연동  (0) 2023.07.21
백엔드란?  (0) 2023.07.21
JWT 토큰과 세션의 차이점  (0) 2023.07.21
경쟁조건(Race Condition)  (0) 2023.07.21

댓글