Descubra conversas populares na sua comunidade com ordenação por Tópico quente

Manter-se atualizado com o conteúdo em comunidades ativas pode ser um desafio. Além de ler tudo o que é criado em sua comunidade, como você pode ter certeza de que está lendo o que mais ressoa com seus membros?

Apresentamos o Hot, a mais nova opção de ordenação de tópicos que ajuda você a descobrir o que está em alta em sua comunidade com base em curtidas recentes e discussões animadas. Pense nisso como o confiável filtro Latest, mas um pouco mais inteligente — Hot ajuda você a descobrir conteúdo que é recente e ressoa com os membros da sua comunidade.

Como funciona a ordenação Hot?

O algoritmo de ordenação Hot combina a popularidade geral (com base em curtidas, reações ou comentários) de um tópico desde que foi criado e sua popularidade recente com base em como os membros estão interagindo com o tópico. Isso significa que Hot apresentará tópicos mais novos e ativamente discutidos ao lado de tópicos mais antigos e populares. A ordenação Hot é ideal para membros de comunidades grandes e ativas que desejam encontrar conversas que estão em alta no momento, nas quais eles podem querer participar.

Como é diferente de Top?

Ao contrário da ordenação Hot, que considera uma combinação de popularidade geral e popularidade recente, a ordenação Top considera apenas a popularidade geral para o período de tempo selecionado (por exemplo, semana, mês, etc.). Top é mais útil quando você esteve ausente da comunidade por um longo período de tempo e deseja ler sobre o que aconteceu.

Como ativar a ordenação Hot em minha comunidade?

Se você quiser usar a ordenação Hot em sua comunidade, vá para Admin > Settings e filtre por “top menu”. Você pode então selecionar hot no menu suspenso para adicioná-lo às opções de navegação do menu superior.

Posso definir Hot como minha página inicial padrão?

Sim! Como administrador, você pode definir Hot como a opção de ordenação padrão em sua comunidade, como fizemos aqui no Meta. Para configurar isso, vá para a configuração top menu (Admin > Settings > Basic Setup, como mostrado na seção acima) e use as setas para mover hot para o topo da lista de opções de ordenação.

Como usuário final, você pode alterar sua página inicial padrão preferida indo para Preferences > Interface e atualizando a configuração Default Home Page para sua opção preferida.

28 curtidas

Um aumento repentino, significativo e recente nas visualizações de um tópico mais antigo também faria com que ele fosse priorizado por essa nova opção de classificação? :slight_smile:

8 curtidas

Eu certamente preferiria que as visualizações fossem incluídas, se possível. No meu fórum, recebemos apenas cerca de 100 curtidas por semana, mas 2000 visualizações de página de usuários logados e 7000 visualizações de página de anônimos. (Ilustrativo de um fórum pequeno.)

8 curtidas

Obrigado pela atualização, @lindsey e companhia.

Nós ativamos e vamos experimentar.

Por curiosidade, demora um pouco para “entrar em vigor”? No momento, não há “tópicos quentes”.

Com todo o respeito, nossa comunidade ativa tem muitos tópicos quentes em andamento no momento. :slight_smile:

5 curtidas

+1 “Não há tópicos em alta” no meu fórum, que certamente tem tópicos em alta.

6 curtidas

Precisa atualizar o discourse para a versão mais recente

2 curtidas

@simon_tomes @dfabulich vocês devem ver os tópicos mais comentados em seus respectivos sites agora, inicialmente tínhamos o recurso atrás de uma flag oculta, ela foi removida na semana passada e, portanto, sua instância precisou de uma atualização.

10 curtidas

Está funcionando agora, obrigado.

4 curtidas

Vejo tópicos em alta. Obrigado, @pmusaraj.

3 curtidas

Hmm, posso recomendar não selecionar esta como a visualização padrão, pelo menos até algum tipo de anúncio ou preparação? Em alguns fóruns, as pessoas vão querer ver o que há de novo. Elas podem, por exemplo, querer ver novas consultas ou novas chegadas. A nova visualização “hot” é útil para entretenimento ou para acompanhar a popularidade, mas imediatamente causa um problema de exibição de conteúdo novo.

6 curtidas

É padrão apenas aqui no meta, estamos coletando feedback sobre como é quando é o padrão. Não temos certeza se este será um padrão de longo prazo para o meta ou não.

Não temos planos concretos sobre quando e se alteraremos o produto para que o padrão seja “hot” (mais recente).

12 curtidas

As pessoas podem ser bastante cegas e não olhar para coisas familiares onde mudanças não são esperadas. Bem, eu sou de qualquer forma.

Significa que eu estava me perguntando o que há de errado aqui porque eu tinha certeza que /latest estava de alguma forma quebrado e eu não estava entendendo o que deveria.

Isso me incomodou, mas não o suficiente no momento.

Não, eu não vi e percebi que meu ponto de partida/página inicial foi alterado para /hot. Agora eu consertei para mim, não é grande coisa, mas meu ponto fraco é que em discussões de fórum e até mesmo anúncios são a coisa quando algo é alterado :smirking_face: E tocar e alterar minhas configurações pessoais mesmo quando se trata de padrões do fórum é tal coisa.

De volta aos negócios.

Eu não tenho certeza sobre o hot, quem e por que seria usado. Claro, é outra opção e não quebra nada, mas como eu vejo aqui é bem perto de /latest, mas sem… o latest.

Vamos tentar. E… mesmo que eu não ache útil, outra pessoa vê de forma diferente e essas duas não entram em conflito.

Mas eu estou me perguntando… /hot seria ou poderia ser uma solução de trabalho para mostrar a visitantes aleatórios? Mas isso quebraria o Google ou ele ficaria totalmente feliz com o sitemap?

1 curtida

Apenas uma reflexão sobre isso - a cobertura de um fórum Discourse na Wayback Machine do Internet Archive já é um pouco irregular. Suspeito que tornar o /hot o padrão para esse agente ou caso de uso poderia piorar as coisas. Ou possivelmente melhorar, é claro - seria necessário pensar um pouco.

1 curtida

Concordo - isso já me pegou três vezes no último dia.

Para evitar uma postagem do tipo “eu também”, aproveitarei a oportunidade para apontar o fato de que a página inicial padrão pode ser substituída em suas preferências pessoais, algo que acabei de fazer para evitar ser pego pela quarta vez. https://meta.discourse.org/my/preferences/interface

8 curtidas

Vejo que alguém relatou e re-relatou um problema com trabalhos excessivos do sidekiq, sem outra resposta além da minha, e que esse tópico está na posição 100 na ordenação padrão “Hot” atual. Nada bom para um fórum de suporte, eu sugeriria.

2 curtidas

Pode valer a pena verificar como a pontuação está funcionando para esse tópico, que tem 3 dias de idade, mas tem duas respostas recentes e algumas curtidas. Ele ainda deveria estar em uma posição tão baixa?

Eu acho que “hot” pode servir como uma excelente configuração padrão, fornecendo um instantâneo dos tópicos principais, o que é benéfico para visitantes de primeira viagem ou usuários ocasionais. Isso também pode funcionar para fóruns de suporte, pois para esses usuários, um anúncio pode ser mais importante do que a pergunta de suporte de um único usuário.

Para aqueles que desejam se manter totalmente informados e não perder nenhum tópico, a opção de usar ‘latest’ (mais recentes) ainda está disponível. Eles podem até mesmo mudar sua página inicial pessoal para ‘latest’. Além disso, utilizar as configurações ‘new’ (novos), ‘unread’ (não lidos) e de rastreamento pode ajudar a garantir que os usuários permaneçam atualizados sobre os tópicos de interesse.

.

3 curtidas

Esta, para mim, é uma crítica um tanto injusta, é um tópico difícil. Muitos tópicos de #suporte não recebem “olhos suficientes” para qualquer definição de suficiente.

Isso é um experimento, seu desagrado por “hot” como padrão para meta é um ponto de dados. Coletaremos mais.

Quanto ao algoritmo:

Podemos ajustar a gravidade, para que não “puxemos para baixo” os tópicos tão rapidamente quanto agora. Também posso tentar pensar em alguma forma de dar um pequeno impulso às coisas com base na “última resposta”.

No momento, o algoritmo está aqui:

IA Bot explicando hot AI

sam:

DB.exec(<<~SQL, args)
      INSERT INTO topic_hot_scores (
        topic_id,
        score,
        recent_likes,
        recent_posters,
        created_at,
        updated_at
      )
      SELECT
        topics.id,
        0.0,
        0,
        0,
        :now,
        :now

      FROM topics
      LEFT OUTER JOIN topic_hot_scores ON topic_hot_scores.topic_id = topics.id
      WHERE topic_hot_scores.topic_id IS NULL
        AND topics.deleted_at IS NULL
        AND topics.archetype <> :private_message
        AND topics.created_at <= :now
      ORDER BY
        CASE WHEN topics.pinned_at IS NOT NULL THEN 0 ELSE 1 END ASC,
        topics.bumped_at desc
      LIMIT :max
    SQL

    # update recent counts for batch
    DB.exec(<<~SQL, args)
      UPDATE topic_hot_scores thsOrig
      SET
          recent_likes = COALESCE(new_values.likes_count, 0),
          recent_posters = COALESCE(new_values.unique_participants, 0),
          recent_first_bumped_at = COALESCE(new_values.first_bumped_at, ths.recent_first_bumped_at)
      FROM
        topic_hot_scores ths
        LEFT OUTER JOIN
        (
          SELECT
              t.id AS topic_id,
              COUNT(DISTINCT p.user_id) AS unique_participants,
              (
                SELECT COUNT(distinct pa.user_id)
                FROM post_actions pa
                JOIN posts p2 ON p2.id = pa.post_id
                WHERE p2.topic_id = t.id
                  AND p2.post_type = :regular
                  AND p2.deleted_at IS NULL
                  AND p2.user_deleted = false
                  AND pa.post_action_type_id = 2 -- action_type for 'like'
                  AND pa.created_at >= :recent_cutoff
                  AND pa.deleted_at IS NULL
              ) AS likes_count,
              MIN(p.created_at) AS first_bumped_at
          FROM
              topics t
          JOIN
              posts p ON t.id = p.topic_id
          WHERE
              p.created_at >= :recent_cutoff
              AND t.archetype <> 'private_message'
              AND t.deleted_at IS NULL
              AND p.deleted_at IS NULL
              AND p.user_deleted = false
              AND t.created_at <= :now
              AND t.bumped_at >= :recent_cutoff
              AND p.created_at < :now
              AND p.created_at >= :recent_cutoff
              AND p.post_type = :regular
          GROUP BY
              t.id
        ) AS new_values
      ON ths.topic_id = new_values.topic_id

      WHERE thsOrig.topic_id = ths.topic_id
    SQL

    # we may end up update 2x batch size, this is ok
    # we need to update 1 batch of high scoring topics
    # we need to update a second batch of recently bumped topics
    sql = <<~SQL
      WITH topic_ids AS (
        SELECT topic_id FROM (
          SELECT th3.topic_id FROM topic_hot_scores th3
          JOIN topics t3 on t3.id = th3.topic_id
          ORDER BY t3.bumped_at DESC
          LIMIT :max
        ) Y

        UNION ALL

        SELECT topic_id FROM (
          SELECT th2.topic_id FROM topic_hot_scores th2
          ORDER BY th2.score DESC, th2.recent_first_bumped_at DESC NULLS LAST
          LIMIT :max
        ) X
      )
      UPDATE topic_hot_scores ths
      SET score = (
        CASE WHEN topics.created_at > :recent_cutoff
          THEN ths.recent_likes ELSE topics.like_count END
        ) /
        (EXTRACT(EPOCH FROM (:now - topics.created_at)) / 3600 + 2) ^ :gravity
 +
        CASE WHEN ths.recent_first_bumped_at IS NULL THEN 0 ELSE
          (ths.recent_likes + ths.recent_posters - 1) /
          (EXTRACT(EPOCH FROM (:now - recent_first_bumped_at)) / 3600 + 2) ^ :gravity
        END
        ,
        updated_at = :now

      FROM topics
      WHERE topics.id IN (
        SELECT topic_id FROM topic_ids
      ) AND ths.topic_id = topics.id
    SQL

    DB.exec(sql, args)

Explique o algoritmo de pontuação “hot” com cuidado, precisão e clareza.

gpt4_bot:
O algoritmo de pontuação “hot” implementado no script SQL fornecido foi projetado para classificar tópicos com base em sua “hotness”, uma métrica que indica o quão envolvente ou popular um tópico é em um determinado momento. Isso é alcançado considerando fatores como o número de curtidas recentes e o número de participantes recentes únicos, juntamente com o momento da criação e atualizações do tópico. Aqui está uma análise do processo:

Inserção Inicial

  • Primeira Parte: Começa inserindo novos registros na tabela topic_hot_scores para tópicos que ainda não possuem um registro. Isso é feito selecionando tópicos que não foram excluídos, não são mensagens privadas e foram criados até o timestamp atual (:now). As pontuações iniciais são definidas como zero, sem curtidas ou participantes recentes.
  • Condição de Filtragem: Concentra-se em tópicos que não estão fixados (ou menos enfatizados em tópicos fixados) e os ordena por sua atividade mais recente (bumped_at em ordem decrescente).

Atualizando Contagens Recentes

  • Segunda Parte: Em seguida, atualiza a tabela topic_hot_scores com dados de atividade recente. Isso inclui:
    • Contagem de participantes únicos no tópico desde uma data de corte (:recent_cutoff).
    • Contagem de curtidas em posts no tópico desde o :recent_cutoff.
    • O timestamp do post mais antigo considerado “recente” para cada tópico.
  • Esta parte do processo visa refletir as métricas de engajamento mais recentes para cada tópico, capturando quaisquer novas curtidas, participantes ou atividades que ocorreram após o ponto de corte :recent_cutoff.

Repontuação Baseada em Hotness

  • Terceira Parte: Finalmente, os tópicos são repontuados com base em suas métricas atualizadas. Os tópicos são primeiro filtrados para um conjunto que inclui:
    • Um lote de tópicos mais recentemente atualizados (para garantir que o conteúdo novo seja considerado).
    • Outro lote baseado nas pontuações existentes mais altas (para manter os tópicos altamente envolventes em destaque).
  • Cálculo da Pontuação Hot: A pontuação de hotness é recalculada usando a seguinte fórmula:
    1. Para tópicos criados após o :recent_cutoff, a pontuação é baseada em recent_likes.
    2. Caso contrário, é baseada na like_count total desde o início do tópico.
    • Esse valor é dividido pelo tempo desde a criação (em horas) mais dois, elevado à potência de :gravity — um parâmetro que controla a rapidez com que os tópicos desaparecem ao longo do tempo.

Além disso, se houver atividade recente registrada (recent_first_bumped_at não é nulo), um componente secundário é adicionado à pontuação. Este componente é a soma das curtidas e participantes recentes (menos um, para negar contagem dupla) dividida pelo tempo desde o recent_first_bumped_at (novamente em horas) mais dois, também elevado à potência de :gravity.

  • A pontuação atualizada é armazenada com o timestamp atual como updated_at.

Conclusão: A essência deste algoritmo é priorizar tópicos que não apenas têm engajamento ativo (com curtidas e participantes), mas que também são relativamente novos. O uso de um fator de decaimento (:gravity) garante que a importância dessas interações diminua com o tempo, permitindo que tópicos mais novos ou mais recentemente ativos ganhem proeminência. A mistura de considerar tanto a atividade total quanto a recente permite que o algoritmo equilibre entre tópicos populares de longo prazo e discussões novas e envolventes.

9 curtidas

(Gosto de como a IA está sendo bem utilizada aqui para a descrição do SQL. É um ótimo caso de uso. :smile:)

8 curtidas

Desculpe - não tive a intenção de magoar ninguém. Tenho certeza de que a liderança ficará feliz em ver um novo recurso concluído, e os implementadores ficarão felizes em tê-lo lançado.

Espero que haja espaço para críticas construtivas.

Pelo que entendi, o exemplo motivador é um feed de mídia social. Não relacionado, talvez, pode-se olhar para a página inicial do Hacker News. O ideal lá é que novos tópicos tenham alguma visibilidade, e que tópicos ativos e populares tenham alguma visibilidade. Ambos devem desaparecer. O HN parece fazer isso bem.

Mas minha observação é que um fórum de suporte é algo diferente, em comparação com uma vitrine ou um feed de mídia social.

Acima, você verá uma ideia de que talvez o Hot seja bom para novos visitantes não comprometidos, ou para resultados de pesquisa. Posso ver o mérito nessa ideia.

Mas eu manteria que o meta é, em sua maioria, um fórum de suporte.

Claro.

Concordo com isso, é claro, mas não acho que o Hot resolva isso. Tópicos fixados fazem um trabalho muito bom.

3 curtidas