[개발이야기#047] 인공지능 이야기 내글을 요약해서 다른곳에 보내 보자.
안녕하세요 가야태자 @talkit 입니다.
오늘 할려고 하는 인공지능 관련 내용은 그냥 python으로 한글 문서를 요약해줄 수 있을까라는 생각에 ^^
해봤습니다.
그랬다가 결국에는 T5모델까지 가게 되었습니다. ^^
관련글
[AI] 무료 사용 가능한 LLM API 서비스 — Steemit - @anpigon
[개발이야기#045] 인공지능 이야기 윈도우에서 Ollama 사용해보기 — Steemit
[개발이야기#046] 인공지능 이야기 윈도우에서 Ollama 사용해보기 with Python — Steemit
소스코드
``` import pymysql
from krwordrank.sentence import summarize_with_sentences
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
MySQL 연결 정보
db_host = "mysql_server_address"
db_user = "mysql_user_id"
db_password = "mysql_user_password"
db_name = "steemit_postings"
KoT5 모델 및 토크나이저 로드
tokenizer = AutoTokenizer.from_pretrained("lcw99/t5-large-korean-text-summary")
model = AutoModelForSeq2SeqLM.from_pretrained("lcw99/t5-large-korean-text-summary")
postings 테이블에서 데이터 가져오기 함수
def get_post_content(post_id):
connection = pymysql.connect(
host=db_host,
user=db_user,
password=db_password,
db=db_name
)
try:
with connection.cursor() as cursor:
sql = "SELECT body FROM postings WHERE post_id = %s"
cursor.execute(sql, (post_id,))
result = cursor.fetchone()
if result:
return result[0] # body 텍스트 반환
else:
print("해당 post_id의 데이터가 없습니다.")
return None
finally:
connection.close()
def summarize_text_kr(text, topk=3):
# krwordrank를 이용하여 텍스트 요약
sentences = text.splitlines() # 텍스트를 문장 단위로 나눕니다.
_, summarized_sentences = summarize_with_sentences(sentences) # 튜플의 두 번째 요소가 요약 문장 리스트입니다.
summary = " ".join(summarized_sentences[:topk]) # 상위 topk 문장만 선택
return summary
특정 post_id의 내용을 요약
post_id = "https://steemit.com/kr/@talkit/041-m2e" # 포스팅 주소.
content = get_post_content(post_id)
입력 텍스트를 최대 길이로 잘라서 인코딩
inputs = tokenizer(content, return_tensors="pt", max_length=8096, truncation=False)
print(inputs)
요약 생성 (길고 세부적인 요약을 위해 다양한 파라미터 조정)
summary_ids = model.generate(
inputs["input_ids"],
max_length=250, # 요약의 최대 길이를 더 길게 설정
min_length=100, # 요약의 최소 길이
num_beams=4, # 빔 서치 적용 (값이 높을수록 다양한 요약 생성 가능)
repetition_penalty=1.2, # 반복 페널티를 설정하여 중복 단어를 줄임
do_sample=False # 샘플링 비활성화 (일관된 결과 제공)
)
요약 텍스트 디코딩
summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True)
print("요약:", summary) ```
실행 방법
위 파일을 summary_test.py 정도로 저장 합니다.
pip install transformers
pip install torch # 또는 tensorflow
pip install sentencepiece # KoBART에 필요
위 세가지 일단 설치 해주시고,
python summary_test.py
위와 같이 실행해주시면 됩니다.
결론
그러면 요약은 해주기는 하는데 원하는대로 안해주네요 ^^
이부분을 LLM에 기대볼 생각입니다.
제컴에 GPU도 없고, 맥도 아니지만 느려도 CPU로 되는 것 같습니다.
어차피 하루에 2~3개의 글을 요약하고 글을 적을꺼라 ^^
한번 구현해 보겠습니다.
안되면, 정말 GPU나 맥북프로를 지르는 수가 있습니다. ^^
감사합니다.
Posted through the ECblog app (https://blog.etain.club)
댓글