¿Resumir temas con un LLM (GPT, BERT, ...)?

Estimado equipo de Discourse:

Discourse tiene la capacidad de resumir hilos largos. Entiendo que utiliza métricas de participación como reacciones o número de respuestas para identificar qué publicaciones deben conservarse. En mi comunidad (comunicación interna dentro de la empresa), esto casi nunca se activa a pesar de que los hilos tienen 20 páginas de largo (el recuento de respuestas no es el mejor disparador para nosotros).

Un enfoque más potente sería utilizar un LLM como GPT-3 o BERT para resumir todo el hilo bajo demanda (en lugar de simplemente filtrar las publicaciones). La resumen es un caso de uso en el que los LLM brillan (prácticamente el cartel principal) y creo que esto sería mucho más efectivo que el enfoque actual que se basa en señales débiles (en algunas comunidades, las personas pueden no usar reacciones o responder a publicaciones específicas).

Por otro lado, ejecutar GPT para resumir texto puede ser costoso, hasta $0.02 por cada 1k tokens. Esta función probablemente tendría más sentido en algunas comunidades privadas que en las públicas de alto tráfico.

Imagino que la función funcionaría así:

  • al leer un hilo largo por primera vez (largo definido con una configuración) que nunca se ha resumido, sugerir resumirlo bajo demanda.
  • el resumen se insertaría en el hilo (por ejemplo, todo lo anterior se resume).
  • se enlaza desde la parte superior del hilo (por ejemplo, saltar al resumen).
  • idealmente, hay algún mecanismo de retroalimentación :+1: :-1:.
  • después de N respuestas más, ofrecer publicar un nuevo resumen y actualizar el enlace en la parte superior.
  • el plugin se configuraría con una clave de openai (suponiendo que este sea el LLM utilizado). Finalmente, si tiene éxito, querrá ofrecer acceso a diferentes modelos.

Al menos esa es la teoría :slight_smile:. En la práctica, hay incógnitas sobre qué tan bueno sería, o cómo configurar el grado de resumen. Mi instinto es que esto tiene un ROI extremadamente alto para algunas comunidades. El problema número uno que escucho es que la gente odia ponerse al día con los hilos. Esto sería de gran ayuda.

¿Opiniones?

8 Me gusta

Nuestro equipo de IA ciertamente está explorando este espacio. La resumen es una de las posibilidades más interesantes.

Responderemos aquí una vez que tengamos algo que mostrar.

8 Me gusta

FWIW:

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  # Maximum length of each chunk

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 está explorando la posibilidad de utilizar un LLM como GPT-3 o BERT para resumir hilos largos bajo demanda. Esta función se configuraría con una clave de openai y podría ser especialmente útil para comunidades privadas. El resumen se insertaría en el hilo, con un enlace en la parte superior y un mecanismo de retroalimentación. El equipo de IA está explorando actualmente esta posibilidad y actualizará cuando tenga algo que mostrar.

Es interesante pero bastante irregular

9 Me gusta

No pude evitar intentarlo hoy:

Es muy experimental y hay muy pocas salvaguardas para cuando las cosas salen mal en este momento, ¡así que definitivamente no es para uso profesional!

Nota: debido a los límites de tokens, actualmente solo puede tener en cuenta las primeras ~40 publicaciones (basado en la actividad de uno de mis foros).

Tiene un sistema de votos negativos. Vista previa de la interfaz de usuario:

(por cierto, este ejemplo se basa en los datos bastante aleatorios de los fixtures de desarrollo, funciona mucho mejor con datos reales).

Por cierto, “gasté” $0.33 en llamadas para construir esto hasta ahora :smiley:

($18 es una asignación gratuita)

8 Me gusta

@Julienlavigne He realizado algunas mejoras significativas en esto en términos de estabilidad, flexibilidad y retroalimentación administrativa.

Por ejemplo, ahora se registran los errores devueltos por el modelo, por lo que ahora puede saber fácilmente si ha infringido los límites del modelo.

Si usted (o alguien) quiere probarlo, puedo ofrecerle un poco de soporte informal durante un tiempo y puedo incorporar comentarios razonables.

El conjunto completo de configuraciones es ahora:

5 Me gusta

@merefield ¡eso suena increíble!

Lamentablemente, estoy usando la versión de empresa de Discourse y no puedo implementar plugins personalizados, así que no puedo probar esto fácilmente. Sin embargo, intentaré ejecutar Discourse localmente con una copia de seguridad y jugar con él. Te mantendré informado.

3 Me gusta

@sam ¿ha habido algún progreso en este esfuerzo?

Mi plugin ha proporcionado esto durante mucho tiempo.

CDCK lanzó posteriormente el plugin Discourse AI con una solución de resumen similar.

Aprovecha.

Gracias @merefield Robert, y sí, lo había visto, y gracias por tu trabajo en esto. Sin embargo, esperaba que @sam (o alguien con soporte de Discourse) estuviera trabajando en una función de resumen de LLM con integración completa con Discourse nativo. Obviamente, si a los clientes del plan de negocios de Discourse simplemente se les cobra un poco más por su propia clave individual de OpenAI (o el proveedor que sea), eso sería mucho más simple desde la perspectiva de configuración, compatibilidad de nivel superior y mantenimiento. Mis mejores deseos.

1 me gusta

No puedo hablar por CDCK aquí, pero el matiz es que sospecho que muchos sitios prefieren que esto sea opcional, ya que algunos desconfían de la IA (mientras que otros desean abrazarla por completo).

Por lo tanto, sospecho que esto seguirá siendo un plugin opcional y permitirá a CDCK personalizar la oferta de productos como ellos y los clientes consideren conveniente.

Sin embargo, hablando como ingeniero, eso permite una experiencia totalmente nativa y no presentaría ninguna limitación significativa desde una perspectiva funcional.

No puedo hablar sobre la facturación/configuración de la cuenta de OpenAI.

Hola Mike, recientemente hemos activado el bot de IA, mira:

Esto ya está disponible en tu instalación, puedes introducir las credenciales para Anthropic u OpenAI.

En cuanto a la hoja de ruta, estamos pensando en activar el “embedding” a continuación, lo que te dará temas relacionados semánticamente. Después de eso, creo que los siguientes 2 serían el asistente de IA y el resumen.

No puedo dar una fecha exacta de cuándo se activarán todas estas funciones en el plan de negocios, pero tenemos la intención de implementarlas en los próximos meses.

Los autoalojados y los clientes empresariales ya pueden acceder a ellas hoy mismo.


La resumen es particularmente interesante, estamos comprando varios servidores A100 y deberíamos tenerlos instalados en las próximas semanas. Mistral es sorprendentemente capaz y rápido, una vez que tengamos la capacidad implementada, es posible que podamos ofrecer resúmenes incluso para planes de negocios sin claves BYO, pero primero debemos explorar las características de rendimiento antes de hacer cualquier compromiso al respecto.

4 Me gusta

Gracias, Sam. Estaríamos muy interesados en esta función, y sospecho que otros clientes de alojamiento también lo estarían. Mis mejores deseos.

1 me gusta