본문 바로가기
프로그램 (PHP,Python)

슬랙 채널 데이타를 수집하고 학습하여 질의에 자동응답

by 날으는물고기 2024. 11. 25.

슬랙 채널 데이타를 수집하고 학습하여 질의에 자동응답

Slack Auto Response: A Simple Way to Make Customer Support Efficient - ClearFeed

슬랙 채널에서 특정 기간동안 소통한 스레드 데이터를 수집하고, 전처리하며, GPT 모델을 학습시키고, 학습된 모델을 사용하여 질의에 응답하는 것을 포함합니다.

1. Slack API를 통한 데이터 수집

Slack의 API를 사용하여 특정 채널의 스레드 및 댓글 데이터를 수집할 수 있습니다.

  1. Slack API 토큰 생성: Slack API에 접근하기 위해서는 OAuth 토큰이 필요합니다. Slack 앱을 생성하고 필요한 권한을 설정하여 토큰을 얻습니다.
  2. API 엔드포인트 사용
    • conversations.history: 특정 채널의 메시지 내역을 가져옵니다.
    • conversations.replies: 특정 메시지에 대한 스레드 및 댓글을 가져옵니다.
    Python 예시 코드
    import os
    from slack_sdk import WebClient
    from slack_sdk.errors import SlackApiError
    
    client = WebClient(token=os.getenv('SLACK_API_TOKEN'))
    
    channel_id = "채널_ID"
    
    try:
        response = client.conversations_history(channel=channel_id)
        messages = response['messages']
    
        for message in messages:
            if 'thread_ts' in message:
                thread_response = client.conversations_replies(channel=channel_id, ts=message['thread_ts'])
                thread_messages = thread_response['messages']
                # 스레드 및 댓글 처리
    except SlackApiError as e:
        print(f"Error fetching conversations: {e.response['error']}")
  3. 데이터 저장: 수집한 데이터를 JSON 형식으로 로컬 파일에 저장하거나, 필요에 따라 텍스트 파일로 변환합니다.

2. 데이터 전처리

Slack 메시지 데이터는 다양한 형식을 가지므로, 이를 GPT 모델이 이해할 수 있는 형식으로 전처리해야 합니다.

  1. 텍스트 정제: 불필요한 메타데이터, 이모티콘, 링크 등을 제거합니다.
  2. 형식화: 대화의 흐름을 유지하면서 텍스트를 문장 단위로 재구성합니다.

3. 문서 파일 생성

정제된 데이터를 하나의 문서 파일로 생성합니다. Python의 docx 또는 txt 파일로 저장할 수 있습니다.

from docx import Document

doc = Document()
doc.add_heading('Slack 대화 내역', 0)

for message in cleaned_messages:
    doc.add_paragraph(message)

doc.save('slack_threads.docx')

4. GPT 모델 학습

GPT 모델에 데이터를 학습시키기 위해서는, Hugging Face와 같은 플랫폼을 사용할 수 있습니다.

  1. 데이터셋 준비: 문서 파일을 토큰화하여 텍스트 데이터셋으로 변환합니다.
  2. 모델 준비: GPT-2나 GPT-3 모델을 선택하고, 데이터를 학습시킵니다.
  3. 모델 학습: 사용자가 보유한 데이터에 따라 추가 학습(파인튜닝)을 수행합니다.

5. 학습된 모델을 사용하여 질의 응답

모델을 학습시킨 후, 이를 기반으로 특정 질의를 수행할 수 있습니다. Hugging Face의 Transformers 라이브러리를 사용하여 모델을 로드하고 질의에 응답할 수 있습니다.

from transformers import GPT2LMHeadModel, GPT2Tokenizer

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

prompt = "질문 내용"
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(inputs['input_ids'], max_length=100)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
  • Slack API를 통해 데이터를 수집하고 전처리합니다.
  • 전처리된 데이터를 문서 파일로 생성합니다.
  • GPT 모델을 학습시켜 학습된 모델을 기반으로 질의에 응답할 수 있도록 설정합니다.

 

이 과정에서는 Python과 Slack API 사용에 대한 이해가 필요하며, 모델 학습을 위해서는 충분한 컴퓨팅 자원이 필요할 수 있습니다. 이 방법을 통해 Slack의 대화 내역을 효과적으로 분석하고, 해당 내용에 대해 특정 질문에 응답할 수 있는 시스템을 구축할 수 있습니다.

GPT 모델을 구성하고 사용하는 부분을 더 구체적으로 Hugging Face의 Transformers 라이브러리를 사용하여 GPT-2 모델을 학습시키고 질의응답 시스템을 구축하는 방법입니다.

1. 환경 설정

먼저, 필요한 라이브러리를 설치해야 합니다. Python 환경에서 Hugging Face의 transformersdatasets, torch 라이브러리를 설치합니다.

pip install transformers datasets torch

2. 데이터 준비

Slack에서 수집한 데이터를 GPT 모델에 학습시키기 위해서는 데이터를 텍스트 형식으로 준비해야 합니다. 아래는 데이터 준비 예시입니다.

import json

# Slack 데이터 로드
with open('slack_threads.json', 'r') as f:
    data = json.load(f)

# 텍스트 데이터로 변환
texts = []
for thread in data:
    for message in thread:
        texts.append(message['text'])

# 데이터를 하나의 텍스트 파일로 저장
with open('slack_data.txt', 'w') as f:
    for text in texts:
        f.write(text + "\n\n")

3. 데이터셋 구축

Hugging Face의 datasets 라이브러리를 사용하여 텍스트 데이터를 데이터셋으로 변환합니다.

from datasets import load_dataset

# 텍스트 파일을 데이터셋으로 로드
dataset = load_dataset('text', data_files={'train': 'slack_data.txt'})

# 학습 데이터 확인
print(dataset['train'][0])

4. 모델 준비

GPT-2 모델을 Hugging Face에서 불러오고, 토크나이저를 준비합니다. 모델은 사전 학습된 모델을 사용하며, 필요에 따라 파인튜닝을 진행할 수 있습니다.

from transformers import GPT2LMHeadModel, GPT2Tokenizer, Trainer, TrainingArguments

# 사전 학습된 모델과 토크나이저 불러오기
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

# 데이터셋을 토큰화
def tokenize_function(examples):
    return tokenizer(examples['text'], padding='max_length', truncation=True, max_length=512)

tokenized_datasets = dataset.map(tokenize_function, batched=True)

5. 모델 학습

모델을 학습시키기 위한 설정을 정의합니다. TrainingArguments를 사용하여 학습 관련 설정을 조정하고, Trainer 객체를 사용하여 모델을 학습시킵니다.

training_args = TrainingArguments(
    output_dir='./results',
    num_train_epochs=3,
    per_device_train_batch_size=2,
    save_steps=10_000,
    save_total_limit=2,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets['train'],
)

# 모델 학습
trainer.train()

6. 학습된 모델 사용

학습이 완료된 모델을 사용하여 특정 질문에 응답하도록 합니다. 이를 위해 generate 메소드를 사용하여 질문에 대한 답변을 생성합니다.

# 학습된 모델을 사용하여 응답 생성
def generate_response(prompt):
    inputs = tokenizer(prompt, return_tensors="pt")
    outputs = model.generate(inputs['input_ids'], max_length=100)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    return response

# 예시 질문
prompt = "작년에 팀이 논의한 주요 이슈는 무엇이었나요?"
response = generate_response(prompt)
print(response)

7. 모델 저장 및 배포

학습된 모델을 저장하고 필요에 따라 배포할 수 있습니다. 로컬 환경에서 사용할 수 있도록 모델을 저장하거나, 클라우드 환경에서 API로 제공할 수 있습니다.

# 모델 저장
model.save_pretrained('./trained_model')
tokenizer.save_pretrained('./trained_model')

# 저장된 모델 로드
model = GPT2LMHeadModel.from_pretrained('./trained_model')
tokenizer = GPT2Tokenizer.from_pretrained('./trained_model')

8. 추가 학습 및 커스터마이징

모델이 특정 도메인에 대한 더 높은 정확도를 요구하는 경우, 추가 학습을 진행하거나, 파인튜닝을 통해 모델을 커스터마이징할 수 있습니다. 필요에 따라 더 큰 모델인 GPT-4o를 사용하거나, 사전 학습된 다른 모델로 전환할 수도 있습니다.


이 과정을 통해 Slack 데이터에서 추출한 정보를 기반으로 GPT 모델을 학습시키고, 이를 활용하여 특정 질문에 대해 응답할 수 있는 시스템을 구축할 수 있습니다. 이 방법은 다양한 응용 분야에 활용 가능하며, 데이터 양이나 복잡도에 따라 조정할 수 있습니다.

728x90

댓글