[개발이야기#047] 인공지능 이야기 내글을 요약해서 다른곳에 보내 보자.

in #kr2 years ago

안녕하세요 가야태자 @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)

Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.04
TRX 0.32
JST 0.082
BTC 60783.65
ETH 1557.84
USDT 1.00
SBD 0.47