[개발이야기#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)

댓글

이 블로그의 인기 게시물

[개발이야기#053] SubVersion(SVN)을 사용하는 방법 - 호스팅 방법

[개발이야기#055] SubVersion(SVN)을 사용하는 방법 - SVN 용어 설명