Twitter publica el código fuente de su sistema de recomendaciones

benitoll

Elon Musk cumplió su palabra: Twitter acaba de publicar (¿buena parte de?) el código fuente de su sistema de recomendaciones.

ENLACES DE INTERÉS

Twitter Space:

Anuncio oficial (+Dpto. de Ingeniería):

Repositorios:

En los posts oficiales, además de explicaciones, están los enlaces a los repositorios públicos de GitHub donde han publicado el código, pero por si acaso, aquí los dejo también:

Nota a la moderación:

Dejo a vuestra discreción si esto debe de ir en el subforo de desarrollo.

Vitov

Tiene palabra

tute07011988

¿Y la de arreglar el reproductor te la sabes?

25 1 respuesta
benitoll

Un ingeniero de Twitter acaba de decir que "están ¿valorando/planeando? liberar también todo su algoritmo de búsqueda". Supongo que se aclarará a posteriori con la grabación del Space o antes si lo vuelven a mencionar.

Kike_Knoxvil

Va viento en popa: Se medio carga twitter, libera su código y cuando termine de hundirse levanta su propio proyecto "open-source" donde él sea el imbloqueable y que te salga siempre en la feed (como él siempre quiso)

2
cabron

vaya lol

"author_is_elon", "author_is_democrat", "author_is_republican"

 
private val Democrats = "democrats"
  private val Republicans = "republicans"
  private val Elon = "elon"

https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/home-mixer/server/src/main/scala/com/twitter/home_mixer/functional_component/feature_hydrator/RequestQueryFeatureHydrator.scala#L61

3 2 respuestas
benitoll

#6 justo lo acaban de mencionar en el Space al mismo tiempo que lo has posteado xD han dicho algo de que "solo es para seguimiento estadístico" o algo así.

:ninjaedit: yyyyyy se acaba el Space.

1 respuesta
allmy

#6 lol

#7 ha dicho en la call que es la primera vez que ve eso xD

1
allmy

https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/home-mixer/server/src/main/scala/com/twitter/home_mixer/functional_component/decorator/HomeTweetTypePredicates.scala

Aquí hay más de demócratas y republicanos xD

    (
      "author_is_elon",
      candidate =>
        candidate
          .getOrElse(AuthorIdFeature, None).contains(candidate.getOrElse(DDGStatsElonFeature, 0L))),
    (
      "author_is_power_user",
      candidate =>
        candidate
          .getOrElse(AuthorIdFeature, None)
          .exists(candidate.getOrElse(DDGStatsVitsFeature, Set.empty[Long]).contains)),
    (
      "author_is_democrat",
      candidate =>
        candidate
          .getOrElse(AuthorIdFeature, None)
          .exists(candidate.getOrElse(DDGStatsDemocratsFeature, Set.empty[Long]).contains)),
    (
      "author_is_republican",
      candidate =>
        candidate
          .getOrElse(AuthorIdFeature, None)
          .exists(candidate.getOrElse(DDGStatsRepublicansFeature, Set.empty[Long]).contains)),
  )
Huk

si no publican los scripts del sentiment analysis e incluso parte del corpora con el que han entrenado el mining, este código no vale para nada

pero vamos que no tengo ni idea del tema un saludo

3
allmy

Lo encontré! Esto es lo que clasifican como sensible

https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/visibilitylib/src/main/scala/com/twitter/visibility/models/TweetSafetyLabel.scala

frekaice

@desu primer análisis del código de twitter?

1 respuesta
desu

#12 El codigo es muy malo y muchisima sobre enginieria. Nada que no se supiese. La verdad es que el 99% parece escrito por estudiantes recien salidos de la universdad, al menos es la porqueria que yo escribiria si tuviese 18 años.

No se si alguien puede linkear las partes "buenas" del codigo.

ejemplo porqueria
1
perez_chuck

Me la pelan los enums, lo importante es la gestión de vídeo! :rofl:

Qué cojones hacen con los vídeos?!

2 1 respuesta
desu
#14perez_chuck:

Me la pelan los enums, lo importante es la gestión de vídeo! :rofl:

XDDDDDDDDDDDD

ya pero mira la puta sobre enginieria que tienen montada para un puto enum... imaginate el resto

tambien he visto en algun lado una clase que recibe 20 repository o algo asi por parametro XD que cada uno seguro que sera un micro servicio XD

1 respuesta
clawder

Las issues y las PRs de la peña son de coña, acabarán por bloquearlo porque les van a empezar a trollear a saco:

Issues:

PRs:

#15

¿Inyección de dependencias quizás? Aunque 20 params.....telita

desu

https://github.com/twitter/the-algorithm/pull/17

lgtm

allmy

jajajaaj https://github.com/twitter/the-algorithm/pull/331/commits/04c7947340401413cadc8682fcddb96348f71425

allmy

Esto siempre se ha sabido, pero ahora es evidente

/**

  • reduce pagerank of users with low followers but high followings
    */
    def adjustReputationsPostCalculation(mass: Double, numFollowers: Int, numFollowings: Int) = {
    if (numFollowings > threshAbsNumFriendsReps) {
    val friendsToFollowersRatio = (1.0 + numFollowings) / (1.0 + numFollowers)
    val divFactor =
    scala.math.exp(
    constantDivisionFactorGt_threshFriendsToFollowersRatioReps *
    (friendsToFollowersRatio - threshFriendsToFollowersRatioUMass) *
    scala.math.log(scala.math.log(numFollowings))
    )
    mass / ((divFactor min maxDivFactorReps) max 1.0)
    } else {
    mass
    }
    }
    }

https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/src/scala/com/twitter/graph/batch/job/tweepcred/Reputation.scala

y

https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/src/scala/com/twitter/graph/batch/job/tweepcred/UserMass.scala

El ratio de followers / following te hace rankear mejor o peor.

if (antigamingPenalty > 0
        && antiGamingFilter != null
        && !antiGamingFilter.accept(internalDocID)) {
      data.weightedCountIncrement = 0;
      data.penaltyIncrement = antigamingPenalty;
      data.tweepCred = 0;
      accumulator.accessor.collect(internalDocID);
      return;
    }

https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/src/java/com/twitter/search/common/relevance/features/RelevanceSignalConstants.java

O sea todo el mundo empieza con 17, y tu reputación va cambiando de 0 a 100 en base a followers y following.

Esta es la relacion de pagerank con la reputación
https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/src/scala/com/twitter/graph/batch/job/tweepcred/Reputation.scala

y baja a los que tienen malos ratios

  /**
   * reduce pagerank of users with low followers but high followings
   */
  def adjustReputationsPostCalculation(mass: Double, numFollowers: Int, numFollowings: Int) = {
    if (numFollowings > threshAbsNumFriendsReps) {
      val friendsToFollowersRatio = (1.0 + numFollowings) / (1.0 + numFollowers)
      val divFactor =
        scala.math.exp(
          constantDivisionFactorGt_threshFriendsToFollowersRatioReps *
            (friendsToFollowersRatio - threshFriendsToFollowersRatioUMass) *
            scala.math.log(scala.math.log(numFollowings))
        )
      mass / ((divFactor min maxDivFactorReps) max 1.0)
    } else {
      mass
    }
  }
}

https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/src/scala/com/twitter/graph/batch/job/tweepcred/README

4 3 respuestas
wOlvERyN

#19 Tinder será parecido jajaja

1 respuesta
allmy

Estoy mirando muy rápido, pero creo que el boost que le dan a los tweets con algún retweet le meten un decaimiento. Función sigmoide está por ahí.

https://github.com/twitter/the-algorithm/blob/7f90d0ca342b928b479b512ec51ac2c3821f5922/src/java/com/twitter/search/earlybird/search/relevance/scoring/RetweetBasedTopTweetsScoringFunction.java

#20 Esa última parte solo parece tools de analisis, pero luego creo que va a otro sitio.

1
DiosUniverso

1 de Abril

3
The_elovator

#3 por favor, que sea pronto como puede ser tan asqueroso, el peor de todas las RRSS

benitoll

#19 no me sorprende, yo soy uno de esos (literalmente tengo que ir limpiando porque llego al límite de seguir a 5000, creo que puedes seguir a 1000 por cada 100 seguidores o que se duplica a 10000 cuando llegas a 1000 seguidores y a a partir de ahí´no sé) y me cuadra.

PD: con las listas es más fácil seguir mucha gente y muchos temas a la vez pero qué pereza...

pantocreitor

#19 LGTM xD

Usuarios habituales

  • benitoll
  • allmy
  • desu
  • clawder
  • Huk
  • cabron
  • Vitov