LLM(GPT, BERT 등)으로 주제 요약하기?

Discourse 팀에,

Discourse는 긴 스레드를 요약하는 기능을 갖추고 있습니다. 제 이해로는 이 기능이 반응(리액션)이나 답변 수 같은 참여 지표(engagement metrics)를 사용하여 어떤 게시물을 유지할지 식별한다고 합니다. 제 커뮤니티(회사 내부 커뮤니케이션)에서는 스레드가 20페이지에 달할 정도로 길어도 이 기능이 거의 작동하지 않습니다(답변 수는 우리에게 가장 좋은 트리거가 아닙니다).

더 강력한 접근 방식은 GPT-3나 BERT와 같은 LLM을 사용하여 전체 스레드를 요약하는 것입니다(단순히 게시물만 필터링하는 것이 아니라). 요청 시(on demand) 요약하는 방식입니다. 요약은 LLM이 가장 빛을 발하는 사용 사례(거의 대표적 사례)이며, 현재 접근 방식이 약한 신호(일부 커뮤니티에서는 사람들이 리액션을 쓰지 않거나 특정 게시물에 답글을 달지 않을 수 있음)에 기반하고 있기 때문에 이 방식이 훨씬 더 효과적일 것이라고 생각합니다.

반면, 텍스트를 요약하기 위해 GPT를 실행하는 것은 비쌀 수 있습니다. 1,000토큰당 최대 0.02달러까지요. 이 기능은 트래픽이 많은 공개 커뮤니티보다는 일부 비공개 커뮤니티에서 더 의미가 있을 것입니다.

이 기능이 다음과 같이 작동할 것이라 상상합니다:

  • 이전에 요약된 적 없는 긴 스레드(긴 것의 정의는 설정으로 결정)를 처음 읽을 때, 요청 시 요약할 것을 제안합니다.
  • 요약본은 스레드에 삽입됩니다(예: 이 앞의 모든 내용이 요약되었습니다).
  • 스레드 상단에서 링크로 연결됩니다(예: 요약으로 건너뛰기).
  • 이상적으로는 :+1: :-1: 같은 피드백 메커니즘이 있습니다.
  • N개의 추가 답변이 게시된 후, 새 요약을 게시할 것을 제안하고 상단의 링크를 업데이트합니다.
  • 플러그인은 OpenAI 키로 구성됩니다(사용되는 LLM이 OpenAI라고 가정). 결국 성공적으로 입증되면 다른 모델에 대한 접근을 제공하게 될 것입니다.

적어도 이론적으로는 그렇습니다 :slight_smile:. 실제로는 그것이 얼마나 좋은지, 또는 요약의 정도를 어떻게 구성해야 하는지에 대한 불확실성이 있습니다. 직관적으로 이 기능은 일부 커뮤니티에서 ROI가 매우 높을 것입니다. 제가 듣는 가장 큰 문제는 사람들이 스레드를 따라가는 것을 싫어한다는 것입니다. 이 기능은 거대한 도움이 될 것입니다.

의견은 어떻게 되시나요?

8개의 좋아요

저희 AI 팀은 이 분야를 확실히 탐구하고 있습니다. 요약은 가장 흥미로운 가능성 중 하나입니다.

보여드릴 것이 생기면 여기에 답변드리겠습니다.

8개의 좋아요

참고로:

import openai
import requests
from bs4 import BeautifulSoup

openai.api_key = "KEY"

url = "https://meta.discourse.org/t/summarising-topics-with-an-llm-gpt-bert/254951.json"

response = requests.get(url)
data = response.json()

messages = []
messages.append("Title: " + data["title"])
for post in data['post_stream']['posts']:
    soup = BeautifulSoup(post['cooked'], 'html.parser')
    messages.append("Post #" + str(post["post_number"]) + " by " + post["username"])
    messages.append(soup.get_text())

text_blob = "\n".join(messages)

print(text_blob)

max_chunk_len = 4000  # 각 청크의 최대 길이

chunks = [text_blob[i:i+max_chunk_len] for i in range(0, len(text_blob), max_chunk_len)]

summaries = []
for chunk in chunks:
    print("processing chunk")
    response = openai.Completion.create(
        engine="text-davinci-003",
        prompt="prompt:\n" + chunk + "\nsummary:",
        temperature=0.7,
        max_tokens=200,
        top_p=1,
        frequency_penalty=0,
        presence_penalty=0
    )
    summary = response.choices[0].text.strip()
    print("\nSUMMARY")
    print(summary)
    print("\nSUMMARY")

Discourse는 GPT-3나 BERT와 같은 LLM을 사용하여 긴 스레드를 요청 시 요약하는 가능성을 탐구하고 있습니다. 이 기능은 openai 키로 구성되며, 특히 비공개 커뮤니티에서 유용할 수 있습니다. 요약은 스레드에 삽입되며, 상단에 링크와 피드백 메커니즘이 포함됩니다. AI 팀은 현재 이 가능성을 탐구하고 있으며, 시연할 수 있는 것이 준비되면 업데이트할 예정입니다.

흥미롭지만 다소 고르지 못한 결과입니다.

9개의 좋아요

그래서 오늘 용기를 내서 직접 만들어 보았습니다:

아직 매우 실험적인 단계이며, 문제가 발생했을 때를 위한 안전장치도 거의 없어 프로페셔널한 용도로는 절대 사용하시면 안 됩니다(!!)

토큰 제한으로 인해 현재는 첫 번째 ~40개 게시물만 고려할 수 있습니다(제 포럼 활동 기준).

하위 평가(downvoting) 시스템이 있습니다. UI 미리보기:

(참고로, 이 예시는 개발용 픽스처에 있는 다소 무작위적인 데이터를 기반으로 한 것이며, 실제 데이터에서는 훨씬 잘 작동합니다).

참고로, 이걸 만들면서 지금까지 호출 비용으로 $0.33을 "사용"했습니다 :smiley:

($18은 무료 할당량입니다)

8개의 좋아요

@Julienlavigne 안정성, 유연성 및 관리 피드백 측면에서 상당한 개선을 가했습니다.

이제 모델이 반환하는 오류가 로깅되므로, 모델 한도를 초과했는지를 쉽게 확인할 수 있습니다.

혹시 (혹은 다른 분) 사용해 보시려면, 당분간 비공식적인 지원을 제공할 수 있으며, 합리적인 범위 내에서 피드백을 반영할 수도 있습니다.

현재 전체 설정 목록은 다음과 같습니다:

5개의 좋아요

@merefield 정말 멋지네요!

불행히도 저는 비즈니스 버전의 discourse를 사용 중이라 커스텀 플러그인을 배포할 수 없어서 이걸 쉽게 테스트할 수 없어요. 대신 백업으로 로컬에서 discourse를 실행해서 직접 플레이해볼지도 모르겠네요. 소식 있으면 알려드릴게요.

3개의 좋아요

@sam 이 작업에 진전이 있었나요?

제 플러그인은 이미 아주 오래전부터 이 기능을 제공하고 있습니다.

CDCK는 이후에도 유사한 요약 솔루션을 갖춘 Discourse AI 플러그인을 출시했습니다.

마음껏 활용하세요.

@merefield Robert, 감사합니다. 네, 해당 사항을 확인했고, 이 부분에 대한 노고에 감사드립니다. 다만, @sam (또는 Discourse 지원 담당자)이 Discourse와 네이티브로 완전히 통합된 LLM 요약 기능을 개발 중이기를 바랐습니다. 물론, Discourse 비즈니스 플랜 고객이 자신의 개별 OpenAI(또는 최종적으로 결정될 제공업체) 키를 위해 소액의 추가 요금만 지불하면 되는 방식이라면, 설정, 호환성 및 유지보수 측면에서 훨씬 간단할 것입니다. 좋은 결과 있으시길 바랍니다.

1개의 좋아요

저는 CDCK을 대신해서 말하기는 어렵지만, 여기서의 뉘앙스는 많은 사이트들이 AI에 대해 우려를 가지고 있어 이 기능을 선택적으로 사용하는 것을 선호할 것이라고 의심하는 것입니다(반면 다른 사이트들은 이를 완전히 수용하기를 원합니다).

따라서 이것이 선택적 플러그인으로 유지될 것이라고 추측하며, CDCK과 고객이 필요하다고 판단하는 대로 제품 제공을 커스터마이징할 수 있게 될 것입니다.

그러나 엔지니어로서 말하자면, 이는 거의 완전한 네이티브 경험을 허용하며, 기능적인 관점에서 의미 있는 제한을 초래하지 않을 것입니다.

빌링/OpenAI 계정 설정에 대해서는 언급할 수 없습니다.

마이크님, 최근 AI 봇 기능이 공개되었습니다. 관련 링크는 아래를 확인해 주세요:

이 기능은 현재 마이크님의 인스턴스에서도 사용 가능하며, Anthropic 또는 OpenAI의 자격 증명을 등록하시면 바로 사용할 수 있습니다.

로드맵 측면에서 다음으로 ‘임베딩(embedding)’ 기능을 공개할 계획입니다. 이 기능이 활성화되면 의미론적으로 관련 있는 주제들을 파악할 수 있게 됩니다. 그 이후에는 AI 헬퍼와 요약 기능이 순서대로 추가될 것으로 예상합니다.

비즈니스 플랜에서 이러한 기능들이 모두 언제 잠금 해제될지에 대한 정확한 날짜를 제시하기는 어렵지만, 향후 몇 달에 걸쳐 단계적으로 배포할 예정입니다.

자체 호스팅(Self-hosters) 및 엔터프라이즈 고객은 이미 오늘 이 기능들을 이용할 수 있습니다.


요약 기능은 특히 흥미로운 부분입니다. A100 서버 몇 대를 구매하여 향후 몇 주 안에 설치를 완료할 예정입니다. Mistral은 의외로 성능이 뛰어나고 빠릅니다. 용량 배포가 완료되면 BYO 키 없이도 비즈니스 플랜 사용자에게 요약 기능을 제공할 수 있을 것으로 보이지만, 이를 확약하기 전에 먼저 성능 특성을 철저히 검토해야 합니다.

4개의 좋아요

샘, 감사합니다. 이 기능에 매우 관심이 있고, 다른 호스팅 고객들도 그럴 것 같습니다. 좋은 결과를 바랍니다.

1개의 좋아요