From 2f5f511bb883eb3f5e67c39457e1e3d0f89d0ef4 Mon Sep 17 00:00:00 2001 From: Ari Archer Date: Tue, 23 Jan 2024 19:17:38 +0200 Subject: [PATCH] [docx] split commit for file 5000 Signed-off-by: Ari Archer --- .../common/SimClustersMultiEmbedding.docx | Bin 0 -> 37022 bytes .../common/SimClustersMultiEmbedding.scala | 32 - .../common/SimClustersMultiEmbeddingId.docx | Bin 0 -> 37515 bytes .../common/SimClustersMultiEmbeddingId.scala | 96 - .../simclusters_v2/common/clustering/BUILD | 11 - .../common/clustering/BUILD.docx | Bin 0 -> 36823 bytes .../ClusterRepresentativeSelectionMethod.docx | Bin 0 -> 37072 bytes ...ClusterRepresentativeSelectionMethod.scala | 30 - .../common/clustering/ClusteringMethod.docx | Bin 0 -> 37317 bytes .../common/clustering/ClusteringMethod.scala | 34 - .../ConnectedComponentsClusteringMethod.docx | Bin 0 -> 37743 bytes .../ConnectedComponentsClusteringMethod.scala | 67 - .../LargestDimensionClusteringMethod.docx | Bin 0 -> 37314 bytes .../LargestDimensionClusteringMethod.scala | 33 - .../clustering/LouvainClusteringMethod.docx | Bin 0 -> 38973 bytes .../clustering/LouvainClusteringMethod.scala | 236 -- ...FavScoreRepresentativeSelectionMethod.docx | Bin 0 -> 37015 bytes ...avScoreRepresentativeSelectionMethod.scala | 21 - .../MedoidRepresentativeSelectionMethod.docx | Bin 0 -> 37094 bytes .../MedoidRepresentativeSelectionMethod.scala | 28 - .../clustering/SimilarityFunctions.docx | Bin 0 -> 37017 bytes .../clustering/SimilarityFunctions.scala | 32 - .../twitter/simclusters_v2/common/ml/BUILD | 12 - .../simclusters_v2/common/ml/BUILD.docx | Bin 0 -> 36900 bytes .../ml/SimClustersEmbeddingAdapter.docx | Bin 0 -> 37094 bytes .../ml/SimClustersEmbeddingAdapter.scala | 39 - .../simclusters_v2/common/package.docx | Bin 0 -> 36843 bytes .../simclusters_v2/common/package.scala | 17 - .../hdfs_sources/AdhocSources.docx | Bin 0 -> 37991 bytes .../hdfs_sources/AdhocSources.scala | 164 -- .../twitter/simclusters_v2/hdfs_sources/BUILD | 2216 ----------------- .../simclusters_v2/hdfs_sources/BUILD.docx | Bin 0 -> 42908 bytes .../hdfs_sources/DataPaths.docx | Bin 0 -> 37175 bytes .../hdfs_sources/DataPaths.scala | 49 - .../hdfs_sources/DataSources.docx | Bin 0 -> 37123 bytes .../hdfs_sources/DataSources.scala | 39 - .../hdfs_sources/EntityEmbeddingsSources.docx | Bin 0 -> 38459 bytes .../EntityEmbeddingsSources.scala | 222 -- .../hdfs_sources/InterestedInSources.docx | Bin 0 -> 37624 bytes .../hdfs_sources/InterestedInSources.scala | 178 -- .../ProducerEmbeddingSources.docx | Bin 0 -> 37587 bytes .../ProducerEmbeddingSources.scala | 86 - .../hdfs_sources/injections/BUILD | 13 - .../hdfs_sources/injections/BUILD.docx | Bin 0 -> 36845 bytes .../injections/ClusterDetailsInjection.docx | Bin 0 -> 36879 bytes .../injections/ClusterDetailsInjection.scala | 16 - .../ClusterTopMediaTweetsInjection.docx | Bin 0 -> 36861 bytes .../ClusterTopMediaTweetsInjection.scala | 13 - .../injections/ClusterTopTweetsInjection.docx | Bin 0 -> 36864 bytes .../ClusterTopTweetsInjection.scala | 14 - .../injections/ClusteringInjections.docx | Bin 0 -> 36885 bytes .../injections/ClusteringInjections.scala | 16 - .../EntityEmbeddingsInjections.docx | Bin 0 -> 37006 bytes .../EntityEmbeddingsInjections.scala | 47 - .../InferredEntitiesInjections.docx | Bin 0 -> 36920 bytes .../InferredEntitiesInjections.scala | 27 - .../injections/InterestedInInjection.docx | Bin 0 -> 36865 bytes .../injections/InterestedInInjection.scala | 13 - .../injections/KnownForInjection.docx | Bin 0 -> 36836 bytes .../injections/KnownForInjection.scala | 12 - .../injections/MultiTypeGraphInjections.docx | Bin 0 -> 37030 bytes .../injections/MultiTypeGraphInjections.scala | 31 - .../ProducerEmbeddingsInjections.docx | Bin 0 -> 37077 bytes .../ProducerEmbeddingsInjections.scala | 45 - .../SemanticCoreEntitiesInjections.docx | Bin 0 -> 37026 bytes .../SemanticCoreEntitiesInjections.scala | 53 - .../SingleSideUserScoresInjection.docx | Bin 0 -> 36838 bytes .../SingleSideUserScoresInjection.scala | 12 - .../hdfs_sources/presto_hdfs_sources/BUILD | 60 - .../presto_hdfs_sources/BUILD.docx | Bin 0 -> 37152 bytes .../EntityEmbeddingsPrestoSources.docx | Bin 0 -> 36795 bytes .../EntityEmbeddingsPrestoSources.scala | 10 - .../simclusters_v2/images/bipartite_graph.png | Bin 62580 -> 0 bytes .../simclusters_v2/images/interestedin.png | Bin 67315 -> 0 bytes .../simclusters_v2/images/knownfor.png | Bin 26378 -> 0 bytes .../images/producer_embeddings.png | Bin 72820 -> 0 bytes .../images/producer_producer_similarity.png | Bin 238661 -> 0 bytes .../images/topic_embeddings.png | Bin 71151 -> 0 bytes .../com/twitter/simclusters_v2/scalding/BUILD | 521 ---- .../simclusters_v2/scalding/BUILD.docx | Bin 0 -> 38646 bytes .../scalding/BipartiteClusterEvaluation.docx | Bin 0 -> 41995 bytes .../scalding/BipartiteClusterEvaluation.scala | 513 ---- .../BipartiteClusterEvaluationClasses.docx | Bin 0 -> 39455 bytes .../BipartiteClusterEvaluationClasses.scala | 316 --- .../scalding/ClusterDetailsJob.docx | Bin 0 -> 44768 bytes .../scalding/ClusterDetailsJob.scala | 794 ------ .../scalding/ClusterEvaluation.docx | Bin 0 -> 43023 bytes .../scalding/ClusterEvaluation.scala | 607 ----- .../scalding/CompareClusters.docx | Bin 0 -> 38297 bytes .../scalding/CompareClusters.scala | 131 - .../EigenVectorsForSparseSymmetric.docx | Bin 0 -> 40918 bytes .../EigenVectorsForSparseSymmetric.scala | 330 --- ...dInFromAggregatableProducerEmbeddings.docx | Bin 0 -> 40258 bytes ...InFromAggregatableProducerEmbeddings.scala | 332 --- .../scalding/InterestedInFromKnownFor.docx | Bin 0 -> 42488 bytes .../scalding/InterestedInFromKnownFor.scala | 666 ----- .../InterestedInFromKnownForLite.docx | Bin 0 -> 40523 bytes .../InterestedInFromKnownForLite.scala | 354 --- ...estedInFromProducerEmbeddingsAdhocApp.docx | Bin 0 -> 40008 bytes ...stedInFromProducerEmbeddingsAdhocApp.scala | 290 --- .../scalding/KnownForSources.docx | Bin 0 -> 39553 bytes .../scalding/KnownForSources.scala | 275 -- .../scalding/ProducerNormsAndCounts.docx | Bin 0 -> 38728 bytes .../scalding/ProducerNormsAndCounts.scala | 195 -- .../scalding/TopUsersSimilarityGraph.docx | Bin 0 -> 47232 bytes .../scalding/TopUsersSimilarityGraph.scala | 996 -------- .../scalding/UpdateKnownFor.docx | Bin 0 -> 39914 bytes .../scalding/UpdateKnownFor.scala | 311 --- .../scalding/UpdateKnownForApps.docx | Bin 0 -> 41909 bytes .../scalding/UpdateKnownForApps.scala | 443 ---- .../scalding/UserUserFavGraph.docx | Bin 0 -> 41397 bytes .../scalding/UserUserFavGraph.scala | 445 ---- .../scalding/UserUserGraph.docx | Bin 0 -> 38927 bytes .../scalding/UserUserGraph.scala | 180 -- .../scalding/UserUserNormalizedGraph.docx | Bin 0 -> 40975 bytes .../scalding/UserUserNormalizedGraph.scala | 453 ---- .../simclusters_v2/scalding/common/BUILD | 14 - .../simclusters_v2/scalding/common/BUILD.docx | Bin 0 -> 36859 bytes .../PersistentTweetEmbeddingSource.docx | Bin 0 -> 37298 bytes .../PersistentTweetEmbeddingSource.scala | 60 - .../scalding/common/QTreeMultiAggregator.docx | Bin 0 -> 37212 bytes .../common/QTreeMultiAggregator.scala | 30 - .../scalding/common/TypedRichPipe.docx | Bin 0 -> 37484 bytes .../scalding/common/TypedRichPipe.scala | 72 - .../simclusters_v2/scalding/common/Util.docx | Bin 0 -> 39904 bytes .../simclusters_v2/scalding/common/Util.scala | 305 --- .../scalding/common/matrix/BUILD | 8 - .../scalding/common/matrix/BUILD.docx | Bin 0 -> 36765 bytes .../common/matrix/DenseRowMatrix.docx | Bin 0 -> 37637 bytes .../common/matrix/DenseRowMatrix.scala | 73 - .../scalding/common/matrix/SparseMatrix.docx | Bin 0 -> 40868 bytes .../scalding/common/matrix/SparseMatrix.scala | 423 ---- .../common/matrix/SparseRowMatrix.docx | Bin 0 -> 40373 bytes .../common/matrix/SparseRowMatrix.scala | 366 --- .../common/matrix/TypedPipeMatrix.docx | Bin 0 -> 37245 bytes .../common/matrix/TypedPipeMatrix.scala | 49 - .../simclusters_v2/scalding/embedding/BUILD | 311 --- .../scalding/embedding/BUILD.docx | Bin 0 -> 38226 bytes ...tityEmbeddingFromProducerEmbeddingJob.docx | Bin 0 -> 39091 bytes ...ityEmbeddingFromProducerEmbeddingJob.scala | 239 -- .../EntityToSimClustersEmbeddingsJob.docx | Bin 0 -> 39997 bytes .../EntityToSimClustersEmbeddingsJob.scala | 354 --- .../GlobalSimClustersLanguageEmbedding.docx | Bin 0 -> 38863 bytes .../GlobalSimClustersLanguageEmbedding.scala | 197 -- ...LocaleEntitySimClustersEmbeddingV2Job.docx | Bin 0 -> 38958 bytes ...ocaleEntitySimClustersEmbeddingV2Job.scala | 248 -- .../LocaleEntitySimClustersEmbeddingsJob.docx | Bin 0 -> 40408 bytes ...LocaleEntitySimClustersEmbeddingsJob.scala | 437 ---- .../ProducerEmbeddingsFromInterestedIn.docx | Bin 0 -> 41769 bytes .../ProducerEmbeddingsFromInterestedIn.scala | 701 ------ .../SimilarUsersBySimClustersEmbedding.docx | Bin 0 -> 39211 bytes .../SimilarUsersBySimClustersEmbedding.scala | 299 --- .../AbuseSimclusterFeaturesScaldingJob.docx | Bin 0 -> 38730 bytes .../AbuseSimclusterFeaturesScaldingJob.scala | 178 -- ...hocAbuseSimClusterFeaturesScaldingJob.docx | Bin 0 -> 39164 bytes ...ocAbuseSimClusterFeaturesScaldingJob.scala | 217 -- .../scalding/embedding/abuse/BUILD | 74 - .../scalding/embedding/abuse/BUILD.docx | Bin 0 -> 37298 bytes .../CrossSimClusterFeaturesScaldingJob.docx | Bin 0 -> 38553 bytes .../CrossSimClusterFeaturesScaldingJob.scala | 149 -- .../scalding/embedding/abuse/DataSources.docx | Bin 0 -> 38050 bytes .../embedding/abuse/DataSources.scala | 101 - .../abuse/PairedinteractionFeatures.docx | Bin 0 -> 37905 bytes .../abuse/PairedinteractionFeatures.scala | 122 - .../SingleSideInteractionTransformation.docx | Bin 0 -> 38664 bytes .../SingleSideInteractionTransformation.scala | 154 -- .../embedding/common/EmbeddingUtil.docx | Bin 0 -> 38313 bytes .../embedding/common/EmbeddingUtil.scala | 114 - .../embedding/common/EntityEmbeddingUtil.docx | Bin 0 -> 37724 bytes .../common/EntityEmbeddingUtil.scala | 79 - .../embedding/common/ExternalDataSources.docx | Bin 0 -> 42100 bytes .../common/ExternalDataSources.scala | 565 ----- .../common/SimClustersEmbeddingJob.docx | Bin 0 -> 39022 bytes .../common/SimClustersEmbeddingJob.scala | 248 -- ...ggregatableFavBasedProducerEmbeddings.docx | Bin 0 -> 38655 bytes ...gregatableFavBasedProducerEmbeddings.scala | 278 --- ...egatableFollowBasedProducerEmbeddings.docx | Bin 0 -> 38517 bytes ...gatableFollowBasedProducerEmbeddings.scala | 165 -- ...egatableLogFavBasedProducerEmbeddings.docx | Bin 0 -> 39194 bytes ...gatableLogFavBasedProducerEmbeddings.scala | 368 --- .../AggregatableProducerEmbeddings.docx | Bin 0 -> 38555 bytes .../AggregatableProducerEmbeddings.scala | 168 -- .../scalding/embedding/producer/BUILD.bazel | 223 -- .../scalding/embedding/producer/BUILD.docx | Bin 0 -> 37738 bytes .../scalding/embedding/tfg/BUILD | 196 -- .../scalding/embedding/tfg/BUILD.docx | Bin 0 -> 37721 bytes ...entWeightedTfgBasedTopicEmbeddingsJob.docx | Bin 0 -> 40531 bytes ...ntWeightedTfgBasedTopicEmbeddingsJob.scala | 310 --- ...ferredLanguageTfgBasedTopicEmbeddings.docx | Bin 0 -> 37692 bytes ...erredLanguageTfgBasedTopicEmbeddings.scala | 66 - .../tfg/FavTfgBasedTopicEmbeddings.docx | Bin 0 -> 38533 bytes .../tfg/FavTfgBasedTopicEmbeddings.scala | 172 -- ...anguageTfgBasedTopicEmbeddingsBaseApp.docx | Bin 0 -> 39097 bytes ...nguageTfgBasedTopicEmbeddingsBaseApp.scala | 194 -- .../tfg/LogFavTfgBasedTopicEmbeddings.docx | Bin 0 -> 37728 bytes .../tfg/LogFavTfgBasedTopicEmbeddings.scala | 70 - .../scalding/embedding/tfg/README | 7 - .../scalding/embedding/tfg/README.docx | Bin 0 -> 36776 bytes .../tfg/TfgBasedTopicEmbeddingsBaseApp.docx | Bin 0 -> 38738 bytes .../tfg/TfgBasedTopicEmbeddingsBaseApp.scala | 191 -- .../scalding/embedding/twice/BUILD.bazel | 166 -- .../scalding/embedding/twice/BUILD.docx | Bin 0 -> 37713 bytes .../embedding/twice/InterestedInTwice.docx | Bin 0 -> 38873 bytes .../embedding/twice/InterestedInTwice.scala | 454 ---- .../twice/InterestedInTwiceBaseApp.docx | Bin 0 -> 41595 bytes .../twice/InterestedInTwiceBaseApp.scala | 495 ---- .../scalding/evaluation/BUILD.bazel | 72 - .../scalding/evaluation/BUILD.docx | Bin 0 -> 37031 bytes .../evaluation/CandidateEvaluationBase.docx | Bin 0 -> 39047 bytes .../evaluation/CandidateEvaluationBase.scala | 163 -- .../evaluation/EvaluationMetricHelper.docx | Bin 0 -> 41884 bytes .../evaluation/EvaluationMetricHelper.scala | 540 ---- .../EvaluationReferenceDataExtraction.docx | Bin 0 -> 39850 bytes .../EvaluationReferenceDataExtraction.scala | 270 -- .../evaluation/LabelCorrelationsHelper.docx | Bin 0 -> 37477 bytes .../evaluation/LabelCorrelationsHelper.scala | 61 - .../SimClustersEvaluationAdhocApp.docx | Bin 0 -> 39693 bytes .../SimClustersEvaluationAdhocApp.scala | 210 -- .../scalding/inferred_entities/BUILD.bazel | 74 - .../scalding/inferred_entities/BUILD.docx | Bin 0 -> 37055 bytes .../inferred_entities/InferredEntities.docx | Bin 0 -> 37985 bytes .../inferred_entities/InferredEntities.scala | 92 - .../InferredEntitiesFromInterestedIn.docx | Bin 0 -> 40593 bytes .../InferredEntitiesFromInterestedIn.scala | 377 --- ...erredSemanticCoreEntitiesFromKnownFor.docx | Bin 0 -> 39374 bytes ...rredSemanticCoreEntitiesFromKnownFor.scala | 244 -- .../inferred_entities/ProdSources.docx | Bin 0 -> 37665 bytes .../inferred_entities/ProdSources.scala | 94 - .../scalding/mbcg/AllFeatures.docx | Bin 0 -> 37265 bytes .../scalding/mbcg/AllFeatures.scala | 58 - .../simclusters_v2/scalding/mbcg/BUILD.bazel | 314 --- .../simclusters_v2/scalding/mbcg/BUILD.docx | Bin 0 -> 38494 bytes .../scalding/mbcg/RecordAdapters.docx | Bin 0 -> 37494 bytes .../scalding/mbcg/RecordAdapters.scala | 79 - .../mbcg/TweetEmbeddingGenerationJob.docx | Bin 0 -> 41037 bytes .../mbcg/TweetEmbeddingGenerationJob.scala | 384 --- .../mbcg/UserEmbeddingGenerationJob.docx | Bin 0 -> 39599 bytes .../mbcg/UserEmbeddingGenerationJob.scala | 270 -- .../AssembleMultiTypeGraph.docx | Bin 0 -> 41186 bytes .../AssembleMultiTypeGraph.scala | 514 ---- .../AssembleMultiTypeGraphApp.docx | Bin 0 -> 37729 bytes .../AssembleMultiTypeGraphApp.scala | 74 - .../AssembleMultiTypeGraphBaseApp.docx | Bin 0 -> 38664 bytes .../AssembleMultiTypeGraphBaseApp.scala | 185 -- .../assemble_multi_type_graph/BUILD | 91 - .../assemble_multi_type_graph/BUILD.docx | Bin 0 -> 37489 bytes .../assemble_multi_type_graph/Config.docx | Bin 0 -> 37250 bytes .../assemble_multi_type_graph/Config.scala | 35 - .../scalding/offline_job/BUILD.bazel | 126 - .../scalding/offline_job/BUILD.docx | Bin 0 -> 37709 bytes .../OfflineTweetRecommendation.docx | Bin 0 -> 38975 bytes .../OfflineTweetRecommendation.scala | 176 -- .../offline_job/SimClustersOfflineJob.docx | Bin 0 -> 38433 bytes .../offline_job/SimClustersOfflineJob.scala | 176 -- .../SimClustersOfflineJobAdhocApp.docx | Bin 0 -> 38894 bytes .../SimClustersOfflineJobAdhocApp.scala | 197 -- .../SimClustersOfflineJobScheduledApp.docx | Bin 0 -> 38119 bytes .../SimClustersOfflineJobScheduledApp.scala | 113 - .../SimClustersOfflineJobUtil.docx | Bin 0 -> 37856 bytes .../SimClustersOfflineJobUtil.scala | 97 - .../scalding/offline_job/adhoc/BUILD.bazel | 81 - .../scalding/offline_job/adhoc/BUILD.docx | Bin 0 -> 37375 bytes .../scalding/offline_job/adhoc/README | 5 - .../scalding/offline_job/adhoc/README.docx | Bin 0 -> 36795 bytes .../SimClustersTweetEmbeddingAdhocApp.docx | Bin 0 -> 39672 bytes .../SimClustersTweetEmbeddingAdhocApp.scala | 211 -- .../TweetSimilarityEvaluationAdhocApp.docx | Bin 0 -> 40465 bytes .../TweetSimilarityEvaluationAdhocApp.scala | 362 --- .../scalding/offline_tweets/BUILD.bazel | 27 - .../scalding/offline_tweets/BUILD.docx | Bin 0 -> 36967 bytes .../ClusterTopMediaTweetsJob.docx | Bin 0 -> 39896 bytes .../ClusterTopMediaTweetsJob.scala | 267 -- .../scalding/optout/BUILD.bazel | 81 - .../simclusters_v2/scalding/optout/BUILD.docx | Bin 0 -> 37110 bytes .../scalding/optout/InterestedInOptOut.docx | Bin 0 -> 39171 bytes .../scalding/optout/InterestedInOptOut.scala | 269 -- .../scalding/optout/KnownForOptOut.docx | Bin 0 -> 38973 bytes .../scalding/optout/KnownForOptOut.scala | 198 -- .../optout/SimClustersOptOutUtil.docx | Bin 0 -> 38693 bytes .../optout/SimClustersOptOutUtil.scala | 166 -- .../scalding/topic_recommendations/BUILD | 168 -- .../scalding/topic_recommendations/BUILD.docx | Bin 0 -> 37656 bytes .../GeoPopularTopicsApp.docx | Bin 0 -> 38663 bytes .../GeoPopularTopicsApp.scala | 165 -- ...roducersForTopicsFromTopicFollowGraph.docx | Bin 0 -> 39054 bytes ...oducersForTopicsFromTopicFollowGraph.scala | 206 -- .../SimilarTopicsFromTopicFollowGraphApp.docx | Bin 0 -> 39472 bytes ...SimilarTopicsFromTopicFollowGraphApp.scala | 222 -- .../TopicsForProducersFromEM.docx | Bin 0 -> 39838 bytes .../TopicsForProducersFromEM.scala | 261 -- .../TopicsForProducersUtils.docx | Bin 0 -> 38100 bytes .../TopicsForProducersUtils.scala | 103 - .../model_based_topic_recommendations/BUILD | 70 - .../BUILD.docx | Bin 0 -> 37280 bytes .../DataSources.docx | Bin 0 -> 37832 bytes .../DataSources.scala | 74 - .../UserFeatures.docx | Bin 0 -> 37203 bytes .../UserFeatures.scala | 57 - .../UserTopicDataRecordAdapter.docx | Bin 0 -> 37369 bytes .../UserTopicDataRecordAdapter.scala | 64 - ...picModellingTrainingDataCollectionJob.docx | Bin 0 -> 40834 bytes ...icModellingTrainingDataCollectionJob.scala | 449 ---- .../scalding/tweet_similarity/BUILD | 234 -- .../scalding/tweet_similarity/BUILD.docx | Bin 0 -> 37781 bytes .../DatasetTopKAnalysisJob.docx | Bin 0 -> 38903 bytes .../DatasetTopKAnalysisJob.scala | 255 -- .../TrainingDataCollectionJob.docx | Bin 0 -> 38834 bytes .../TrainingDataCollectionJob.scala | 228 -- .../TrainingDataCollectionUtil.docx | Bin 0 -> 38086 bytes .../TrainingDataCollectionUtil.scala | 138 - .../TweetPairFeatureHydrationUtil.docx | Bin 0 -> 39071 bytes .../TweetPairFeatureHydrationUtil.scala | 289 --- .../TweetPairLabelCollectionUtil.docx | Bin 0 -> 41700 bytes .../TweetPairLabelCollectionUtil.scala | 490 ---- .../UnhydratedPairsCollectionJob.docx | Bin 0 -> 39105 bytes .../UnhydratedPairsCollectionJob.scala | 209 -- .../tweet_similarity/evaluation/BUILD.bazel | 40 - .../tweet_similarity/evaluation/BUILD.docx | Bin 0 -> 37141 bytes .../evaluation/ModelEvalAdhocApp.docx | Bin 0 -> 38080 bytes .../evaluation/ModelEvalAdhocApp.scala | 91 - .../RUXLandingDdgAnalysisAdhocApp.docx | Bin 0 -> 37970 bytes .../RUXLandingDdgAnalysisAdhocApp.scala | 82 - .../scalding/update_known_for/BUILD.bazel | 59 - .../scalding/update_known_for/BUILD.docx | Bin 0 -> 37122 bytes .../UpdateKnownFor20M145K2020.docx | Bin 0 -> 39756 bytes .../UpdateKnownFor20M145K2020.scala | 256 -- .../UpdateKnownForSBFRunner.docx | Bin 0 -> 45108 bytes .../UpdateKnownForSBFRunner.scala | 685 ----- .../common/BQGenerationUtil.docx | Bin 0 -> 39391 bytes .../common/BQGenerationUtil.scala | 255 -- .../scio/bq_generation/common/BUILD | 10 - .../scio/bq_generation/common/BUILD.docx | Bin 0 -> 36771 bytes .../common/IndexGenerationUtil.docx | Bin 0 -> 37656 bytes .../common/IndexGenerationUtil.scala | 63 - .../scio/bq_generation/ftr_tweet/BUILD | 250 -- .../scio/bq_generation/ftr_tweet/BUILD.docx | Bin 0 -> 37637 bytes .../scio/bq_generation/ftr_tweet/Config.docx | Bin 0 -> 37399 bytes .../scio/bq_generation/ftr_tweet/Config.scala | 43 - .../scio/bq_generation/ftr_tweet/FTRJob.docx | Bin 0 -> 39786 bytes .../scio/bq_generation/ftr_tweet/FTRJob.scala | 242 -- .../FtrClusterToTweetIndexGenerationJob.docx | Bin 0 -> 39444 bytes .../FtrClusterToTweetIndexGenerationJob.scala | 264 -- .../scio/bq_generation/ftr_tweet/README.docx | Bin 0 -> 37755 bytes .../scio/bq_generation/ftr_tweet/README.md | 212 -- ...based-simclusters-index-generation-job.d6w | 44 - ...ased-simclusters-index-generation-job.docx | Bin 0 -> 37256 bytes .../ftr_tweet/ftr-tweets-ann-adhoc-job.d6w | 36 - .../ftr_tweet/ftr-tweets-ann-adhoc-job.docx | Bin 0 -> 37179 bytes .../iikf2020-decayed-sum-ann-batch-job.d6w | 35 - .../iikf2020-decayed-sum-ann-batch-job.docx | Bin 0 -> 37232 bytes .../iikf2020-ftrat5-pop1000-ann-batch-job.d6w | 35 - ...iikf2020-ftrat5-pop1000-ann-batch-job.docx | Bin 0 -> 37235 bytes ...iikf2020-ftrat5-pop10000-ann-batch-job.d6w | 35 - ...ikf2020-ftrat5-pop10000-ann-batch-job.docx | Bin 0 -> 37234 bytes .../scio/bq_generation/ftr_tweet/sql/BUILD | 3 - .../bq_generation/ftr_tweet/sql/BUILD.docx | Bin 0 -> 36668 bytes .../ftr_tweet/sql/ftr_tweet_embeddings.docx | Bin 0 -> 39588 bytes .../ftr_tweet/sql/ftr_tweet_embeddings.sql | 280 --- .../simclusters_index_generation/BUILD | 167 -- .../simclusters_index_generation/BUILD.docx | Bin 0 -> 37334 bytes .../simclusters_index_generation/Config.docx | Bin 0 -> 37896 bytes .../simclusters_index_generation/Config.scala | 82 - ...ntEventBasedClusterToTweetIndexFromBQ.docx | Bin 0 -> 38706 bytes ...tEventBasedClusterToTweetIndexFromBQ.scala | 177 -- ...BasedClusterToTweetIndexGenerationJob.docx | Bin 0 -> 41292 bytes ...asedClusterToTweetIndexGenerationJob.scala | 659 ----- .../simclusters_index_generation/README | 146 -- .../simclusters_index_generation/README.docx | Bin 0 -> 37504 bytes ...based-simclusters-index-generation-job.d6w | 44 - ...ased-simclusters-index-generation-job.docx | Bin 0 -> 37262 bytes .../scio/bq_generation/sql/BUILD | 3 - .../scio/bq_generation/sql/BUILD.docx | Bin 0 -> 36668 bytes ...ads_user_tweet_action_pair_generation.docx | Bin 0 -> 37129 bytes .../ads_user_tweet_action_pair_generation.sql | 38 - .../bq_generation/sql/cluster_top_tweets.docx | Bin 0 -> 36880 bytes .../bq_generation/sql/cluster_top_tweets.sql | 15 - ...ets_intersection_with_fav_based_index.docx | Bin 0 -> 37268 bytes ...eets_intersection_with_fav_based_index.sql | 59 - ...ned_user_tweet_action_pair_generation.docx | Bin 0 -> 37663 bytes ...ined_user_tweet_action_pair_generation.sql | 68 - .../engagement_based_index_generation.docx | Bin 0 -> 37820 bytes .../sql/engagement_based_index_generation.sql | 85 - ...ent_user_tweet_action_pair_generation.docx | Bin 0 -> 37529 bytes ...tent_user_tweet_action_pair_generation.sql | 62 - .../sql/nsfw_tweet_denylist.docx | Bin 0 -> 37249 bytes .../bq_generation/sql/nsfw_tweet_denylist.sql | 43 - .../sql/tweet_embeddings_generation.docx | Bin 0 -> 38083 bytes .../sql/tweet_embeddings_generation.sql | 104 - .../bq_generation/sql/tweet_fav_count.docx | Bin 0 -> 37318 bytes .../bq_generation/sql/tweet_fav_count.sql | 38 - .../scio/bq_generation/sql/tweets_ann.docx | Bin 0 -> 37552 bytes .../scio/bq_generation/sql/tweets_ann.sql | 64 - ...ied_user_tweet_action_pair_generation.docx | Bin 0 -> 37450 bytes ...fied_user_tweet_action_pair_generation.sql | 45 - 394 files changed, 37240 deletions(-) create mode 100644 src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbedding.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbedding.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbeddingId.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbeddingId.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/ClusterRepresentativeSelectionMethod.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/ClusterRepresentativeSelectionMethod.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/ClusteringMethod.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/ClusteringMethod.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/ConnectedComponentsClusteringMethod.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/ConnectedComponentsClusteringMethod.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/LargestDimensionClusteringMethod.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/LargestDimensionClusteringMethod.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/LouvainClusteringMethod.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/LouvainClusteringMethod.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/MaxFavScoreRepresentativeSelectionMethod.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/MaxFavScoreRepresentativeSelectionMethod.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/MedoidRepresentativeSelectionMethod.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/MedoidRepresentativeSelectionMethod.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/SimilarityFunctions.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/clustering/SimilarityFunctions.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/common/ml/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/common/ml/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/common/ml/SimClustersEmbeddingAdapter.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/ml/SimClustersEmbeddingAdapter.scala create mode 100644 src/scala/com/twitter/simclusters_v2/common/package.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/common/package.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/AdhocSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/AdhocSources.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/DataPaths.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/DataPaths.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/DataSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/DataSources.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/EntityEmbeddingsSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/EntityEmbeddingsSources.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/InterestedInSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/InterestedInSources.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/ProducerEmbeddingSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/ProducerEmbeddingSources.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterDetailsInjection.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterDetailsInjection.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopMediaTweetsInjection.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopMediaTweetsInjection.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopTweetsInjection.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopTweetsInjection.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusteringInjections.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusteringInjections.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/EntityEmbeddingsInjections.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/EntityEmbeddingsInjections.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/InferredEntitiesInjections.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/InferredEntitiesInjections.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/InterestedInInjection.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/InterestedInInjection.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/KnownForInjection.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/KnownForInjection.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/MultiTypeGraphInjections.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/MultiTypeGraphInjections.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ProducerEmbeddingsInjections.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ProducerEmbeddingsInjections.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/SemanticCoreEntitiesInjections.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/SemanticCoreEntitiesInjections.scala create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/SingleSideUserScoresInjection.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/SingleSideUserScoresInjection.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/EntityEmbeddingsPrestoSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/EntityEmbeddingsPrestoSources.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/images/bipartite_graph.png delete mode 100644 src/scala/com/twitter/simclusters_v2/images/interestedin.png delete mode 100644 src/scala/com/twitter/simclusters_v2/images/knownfor.png delete mode 100644 src/scala/com/twitter/simclusters_v2/images/producer_embeddings.png delete mode 100644 src/scala/com/twitter/simclusters_v2/images/producer_producer_similarity.png delete mode 100644 src/scala/com/twitter/simclusters_v2/images/topic_embeddings.png delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/BipartiteClusterEvaluation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/BipartiteClusterEvaluation.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/BipartiteClusterEvaluationClasses.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/BipartiteClusterEvaluationClasses.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/ClusterDetailsJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/ClusterDetailsJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/ClusterEvaluation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/ClusterEvaluation.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/CompareClusters.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/CompareClusters.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/EigenVectorsForSparseSymmetric.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/EigenVectorsForSparseSymmetric.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromAggregatableProducerEmbeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromAggregatableProducerEmbeddings.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownFor.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownFor.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownForLite.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownForLite.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromProducerEmbeddingsAdhocApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromProducerEmbeddingsAdhocApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/KnownForSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/KnownForSources.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/ProducerNormsAndCounts.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/ProducerNormsAndCounts.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/TopUsersSimilarityGraph.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/TopUsersSimilarityGraph.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UpdateKnownFor.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UpdateKnownFor.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UpdateKnownForApps.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UpdateKnownForApps.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UserUserFavGraph.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UserUserFavGraph.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UserUserGraph.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UserUserGraph.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UserUserNormalizedGraph.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/UserUserNormalizedGraph.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/PersistentTweetEmbeddingSource.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/PersistentTweetEmbeddingSource.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/QTreeMultiAggregator.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/QTreeMultiAggregator.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/TypedRichPipe.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/TypedRichPipe.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/Util.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/Util.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/DenseRowMatrix.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/DenseRowMatrix.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseMatrix.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseMatrix.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseRowMatrix.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseRowMatrix.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/TypedPipeMatrix.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/common/matrix/TypedPipeMatrix.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityEmbeddingFromProducerEmbeddingJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityEmbeddingFromProducerEmbeddingJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityToSimClustersEmbeddingsJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityToSimClustersEmbeddingsJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/GlobalSimClustersLanguageEmbedding.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/GlobalSimClustersLanguageEmbedding.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingV2Job.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingV2Job.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingsJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingsJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/ProducerEmbeddingsFromInterestedIn.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/ProducerEmbeddingsFromInterestedIn.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/SimilarUsersBySimClustersEmbedding.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/SimilarUsersBySimClustersEmbedding.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AbuseSimclusterFeaturesScaldingJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AbuseSimclusterFeaturesScaldingJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AdhocAbuseSimClusterFeaturesScaldingJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AdhocAbuseSimClusterFeaturesScaldingJob.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/CrossSimClusterFeaturesScaldingJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/CrossSimClusterFeaturesScaldingJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/DataSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/DataSources.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/PairedinteractionFeatures.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/PairedinteractionFeatures.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/SingleSideInteractionTransformation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/SingleSideInteractionTransformation.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EmbeddingUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EmbeddingUtil.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EntityEmbeddingUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EntityEmbeddingUtil.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/common/ExternalDataSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/common/ExternalDataSources.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/common/SimClustersEmbeddingJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/common/SimClustersEmbeddingJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFavBasedProducerEmbeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFavBasedProducerEmbeddings.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFollowBasedProducerEmbeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFollowBasedProducerEmbeddings.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableLogFavBasedProducerEmbeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableLogFavBasedProducerEmbeddings.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableProducerEmbeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableProducerEmbeddings.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/BUILD.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/EngagementWeightedTfgBasedTopicEmbeddingsJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/EngagementWeightedTfgBasedTopicEmbeddingsJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavInferredLanguageTfgBasedTopicEmbeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavInferredLanguageTfgBasedTopicEmbeddings.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavTfgBasedTopicEmbeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavTfgBasedTopicEmbeddings.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/InferredLanguageTfgBasedTopicEmbeddingsBaseApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/InferredLanguageTfgBasedTopicEmbeddingsBaseApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/LogFavTfgBasedTopicEmbeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/LogFavTfgBasedTopicEmbeddings.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/README create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/README.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/TfgBasedTopicEmbeddingsBaseApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/TfgBasedTopicEmbeddingsBaseApp.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwice.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwice.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwiceBaseApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwiceBaseApp.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/CandidateEvaluationBase.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/CandidateEvaluationBase.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/EvaluationMetricHelper.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/EvaluationMetricHelper.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/EvaluationReferenceDataExtraction.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/EvaluationReferenceDataExtraction.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/LabelCorrelationsHelper.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/LabelCorrelationsHelper.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/SimClustersEvaluationAdhocApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/evaluation/SimClustersEvaluationAdhocApp.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntities.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntities.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntitiesFromInterestedIn.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntitiesFromInterestedIn.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredSemanticCoreEntitiesFromKnownFor.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredSemanticCoreEntitiesFromKnownFor.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ProdSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ProdSources.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/AllFeatures.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/AllFeatures.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/RecordAdapters.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/RecordAdapters.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/TweetEmbeddingGenerationJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/TweetEmbeddingGenerationJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/UserEmbeddingGenerationJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/mbcg/UserEmbeddingGenerationJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraph.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraph.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphBaseApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphBaseApp.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/Config.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/Config.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/OfflineTweetRecommendation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/OfflineTweetRecommendation.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobAdhocApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobAdhocApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobScheduledApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobScheduledApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobUtil.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/BUILD.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/README create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/README.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/SimClustersTweetEmbeddingAdhocApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/SimClustersTweetEmbeddingAdhocApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/TweetSimilarityEvaluationAdhocApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/TweetSimilarityEvaluationAdhocApp.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/ClusterTopMediaTweetsJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/ClusterTopMediaTweetsJob.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/optout/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/optout/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/optout/InterestedInOptOut.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/optout/InterestedInOptOut.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/optout/KnownForOptOut.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/optout/KnownForOptOut.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/optout/SimClustersOptOutUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/optout/SimClustersOptOutUtil.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/GeoPopularTopicsApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/GeoPopularTopicsApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/ProducersForTopicsFromTopicFollowGraph.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/ProducersForTopicsFromTopicFollowGraph.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/SimilarTopicsFromTopicFollowGraphApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/SimilarTopicsFromTopicFollowGraphApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersFromEM.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersFromEM.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersUtils.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersUtils.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/DataSources.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/DataSources.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserFeatures.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserFeatures.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicDataRecordAdapter.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicDataRecordAdapter.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicModellingTrainingDataCollectionJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicModellingTrainingDataCollectionJob.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/DatasetTopKAnalysisJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/DatasetTopKAnalysisJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionUtil.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TweetPairFeatureHydrationUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TweetPairFeatureHydrationUtil.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TweetPairLabelCollectionUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TweetPairLabelCollectionUtil.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/UnhydratedPairsCollectionJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/UnhydratedPairsCollectionJob.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/ModelEvalAdhocApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/ModelEvalAdhocApp.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/RUXLandingDdgAnalysisAdhocApp.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/RUXLandingDdgAnalysisAdhocApp.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/update_known_for/BUILD.bazel create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/update_known_for/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownFor20M145K2020.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownFor20M145K2020.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownForSBFRunner.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownForSBFRunner.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BQGenerationUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BQGenerationUtil.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/IndexGenerationUtil.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/IndexGenerationUtil.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/Config.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/Config.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FTRJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FTRJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FtrClusterToTweetIndexGenerationJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FtrClusterToTweetIndexGenerationJob.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/README.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/README.md delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-tweets-ann-adhoc-job.d6w create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-tweets-ann-adhoc-job.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-decayed-sum-ann-batch-job.d6w create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-decayed-sum-ann-batch-job.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-ftrat5-pop1000-ann-batch-job.d6w create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-ftrat5-pop1000-ann-batch-job.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-ftrat5-pop10000-ann-batch-job.d6w create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-ftrat5-pop10000-ann-batch-job.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.sql delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/Config.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/Config.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexFromBQ.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexFromBQ.scala create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexGenerationJob.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexGenerationJob.scala delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/README create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/README.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/BUILD create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/BUILD.docx create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/ads_user_tweet_action_pair_generation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/ads_user_tweet_action_pair_generation.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/cluster_top_tweets.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/cluster_top_tweets.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/cluster_top_tweets_intersection_with_fav_based_index.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/cluster_top_tweets_intersection_with_fav_based_index.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/combined_user_tweet_action_pair_generation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/combined_user_tweet_action_pair_generation.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/engagement_based_index_generation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/engagement_based_index_generation.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/evergreen_content_user_tweet_action_pair_generation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/evergreen_content_user_tweet_action_pair_generation.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/nsfw_tweet_denylist.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/nsfw_tweet_denylist.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_embeddings_generation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_embeddings_generation.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_fav_count.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_fav_count.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweets_ann.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweets_ann.sql create mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/unified_user_tweet_action_pair_generation.docx delete mode 100644 src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/unified_user_tweet_action_pair_generation.sql diff --git a/src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbedding.docx b/src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbedding.docx new file mode 100644 index 0000000000000000000000000000000000000000..f762f0abd28082ddb6a6769e5eddaf5dcff6e8ed GIT binary patch literal 37022 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 Ol^{bRFng%?fOr5JiYR>m literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbedding.scala b/src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbedding.scala deleted file mode 100644 index c9b86be4f..000000000 --- a/src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbedding.scala +++ /dev/null @@ -1,32 +0,0 @@ -package com.twitter.simclusters_v2.common - -import com.twitter.simclusters_v2.common.SimClustersMultiEmbeddingId._ -import com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbedding.{Ids, Values} -import com.twitter.simclusters_v2.thriftscala.{ - SimClustersMultiEmbedding, - SimClustersEmbeddingId, - SimClustersMultiEmbeddingId -} - -/** - * Helper methods for SimClustersMultiEmbedding - */ -object SimClustersMultiEmbedding { - - // Convert a multiEmbedding to a list of (embeddingId, score) - def toSimClustersEmbeddingIdWithScores( - simClustersMultiEmbeddingId: SimClustersMultiEmbeddingId, - simClustersMultiEmbedding: SimClustersMultiEmbedding - ): Seq[(SimClustersEmbeddingId, Double)] = { - simClustersMultiEmbedding match { - case Values(values) => - values.embeddings.zipWithIndex.map { - case (embeddingWithScore, i) => - (toEmbeddingId(simClustersMultiEmbeddingId, i), embeddingWithScore.score) - } - case Ids(ids) => - ids.ids.map(_.toTuple) - } - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbeddingId.docx b/src/scala/com/twitter/simclusters_v2/common/SimClustersMultiEmbeddingId.docx new file mode 100644 index 0000000000000000000000000000000000000000..dbfa533473a1e033bb21db3e07666c9433ef3c1f GIT binary patch literal 37515 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%0DMQN z;1_>1N{7bk9|)?#VLz@U0*H)j*XbyR* zBXvfLJ%=nHFTi;h*oMxyiRkD16+7HEQ|V*JA4d5 z8D_5Rj(?`z9B$;O6hj)T)_SUJMGeeLq8a@{1XP|X`4E|3r%bOwx=FMy6YlunHccvD z&o%!e#j)-Lbk)fX#_i|3@R|0N4SwGI2%}awaqF)5Mn%qC^`clqIJA@E0s9v|})!|2-swgm4 zC#&Jy_TieN9IKuN=ew}d$1Ev_S25&mW~kQFn?6OjQ*Q@>WhpRD61%skbe1Gr1sn64 z&p%i9ABF}v?vdo2=E>nk;*e5(So!$M^SVI_y)?vdGU7+>6!E0x z-iot&nd#TWSVbYP`zKTgx}lQDaWL~Tj{B|G&`$_Fj;%5~Q1QuFFq0YC0}Y}(Ll zp0rr;r$$L-a%@(gQpLR&Wd%hm7gTSwBRBIl0f}KQ^8f@EnvxJozAEDgB_9o%FDZB% z>xNkjJC$nVCH1!yi8m!HOhKZ~-ZPC{5`+A3T@(R+S{9ZjyrCo!W*&a$`k$r<5MsK@ z%v+;9^Hs}=Yo`~~pGdRk29A!Yz^+!Oi^F{{?yglJ=$129r{N;tXu#m2X+IXuGh~Mm zP<-NShAEMDEm!3~{v{?SF2v*E*GJ4N_(Mx9pM(ffKfYIpGU6+c%0Gh8wQ2Y)E48!C z93|%8JP>66;*r~v!UEkXzEnV|F>p8@Vq~HzfuRCgO8EX$SmlO^yRB7RNViYB@>ubx zmreyjg%0c(8wnjz1!Dfs~_hj=pl&2Dbj8i@SrtW+L#qJMf#)qFE)+;Ygs)5gZ*y?? zjk4lBQCR#Fkv29c3dt90bbBUuRM|3In4GgGzT1#*3E!kQJKuf1aDYpJ-d=5M_@Gd#s|8nZ z#Xt|yFTk@2mZ^vS0_9<6#;JKCp|mTR>UFo zfCtLp>ZyBj_<}U*C-w%I=yh%Vd$p=g;-uajQB_spKyX*)5bspbjIPBGKXKKh0<1+YP zdQO-(Smw$SBU9(ZPl4DIeaZ$M=!vpT#uTF~qNV#rQlB|eQ5}=Yy~O0PYm%+`fx8Vf zN{&uq3p^h8vq2jEN;!Erbr#;Z5%a~hQRpCg-Ojom9YuzmAIB;>SS(no2$4OAGK|=V zkiijn63jUaOwrgCIpal0FnefLljvW^tl`9;ID2M82Y-0%8Y$CBRI@@i8Z!^(pS#jQ zd4mwtrigH4K*g_QD9_o=6d{M8&-lfIaL1rgff@?YN$4Thrc~8nhfO$>)H5K*@M@BH z97_I8BWZb>mSWLTuGDYeEBwEG_Xcao*m<2AGhg62bKw2yTYMA<3A`}ZcrkzX4;gd} z8dNZDLQ8Et4Igb9n&OZ>|C`D~iQg)f2^)Ya`=NiUgaEBgF&u9F>B)3xEQ)0f=O+p3 z^b9`Y*YFM=;)icUL?5CdqptBm+>|#~6ANbK_HM%2>-0Z}Yiu2*5Jl>17L^(@2UXq= zrryQf1wkHKvj=y6!T5z)Sv_@%2AVyj-)FYd&=c0lIE9Z`5E|mCnmx1)Y~~ zT1$A+yRcPUM=DB7x@amKC`6+co2&*Kq}9=Bopj>8(=I4x0a9v`-Kd~5PB$MN5%bnw z&lXX1lz1+SST986?DVU{j3&1sPFE?C^AKw2Z=se4I6|#a*M4bzj?=U<(L*!bP1hKr z>@v?7o!LvoHlr^ipOVU`Un2_OD)w$uKg?Lrw<>FX7% z{h7q|Ka&zC59n_XuLih79Z-*cQ>9cOSY60wpp8Eaa7VI!bnietst|AdJ@1TbjC?dN ze?OK{e?IZ(kP>01lt>5$Q2rMBE$Hg8d zQ<`qJ0fpYS;C6Cnzb1IAGI&hfxa5Z{Z2nJ zS5@$l^}tPKP_!4Zw`@@bTGPt#MYLusGb(lq|Mw34<8f=Fo9?|`up>K25nDzv7}vZ?-XwMCKWu*4$4XNcff_X;*}+doF9cw;|TsnYpNuP!$o zC`!LyNK8;Wg7|7gra(Um_-z!F6yF-WXSU|TJVHXwW*H9M&YjX!AF3;$%-vDhexrQMZ9ZH>T^B1Y~+Bq`~!<@}o1K?4-p5H^+{LbRJ2I5w2!2q^-!xS^A z$HN+xt~ZFh)mt}JqhW_wkDIO+wf{@#Z))j3s8NB`(9*w8-xIByiwH>ue^5Icj{~WB zIsT;nPL39i_EbB$JnaiT1^K-L1MgP(;vrSR6JcXAk?|ni~9SNUHGxtWB$Wm~r4j!_sa_XAwkk!84r(V%X0}KyAX1*K&?9%__IrT)vNNXJ+N`rAyOc44qlo z<{XHY;%TFdJie1l|C)MZCz5_$+6?<`K^uRmEvZ$pK+=X<(CC0GeT*OMtw_zh2Qf1F z2?#mb@&ujWNn@iZ4utd525lda1%;*e-WTP}eHoUs&@6MYX$UK`vO`?TuiuqbKk07T zhAn#QqfSa`y~2^CLFJia=%!lYuO3N zJY%bLhD4DCpKZ9>^hYT^m=6O!-tpv4iJGoA$SIhMs2Ne%JO zvPFJP^F5VW@Z4jQbuT+E8ON2ITRq<^<(4hi7Z#fnVyo;(E-T!WPW-9`{WVR9RjkMV zJ&A{|&)NN^ZK>j49<}a^MhE`}cI`1|{D;Y(Y?ZfNLv3>ntN$`7t$o~C82YEl;Kbi1 zx!`}B?6m&>Gsz`u**)EU$X4kMG>KMZ{?22S)q+oukA;E58(YlWT9C5khhSGRP1{{ne=?!KI}l=HS1;_O=9-xEmG(Sb*i#=^qdYS48mV{%LHPD z$v*gxT21A`BC`Gxu6zSg60)`cwI|Xg0vMfETDHZ%{f(=U4xR zoUU!i!qZXwA$X=};*K6Ybfzl_foE;Tq~yjnZ_sPCg$pp3V0TQ$9+wg{J*qR8^eJc~ zx#f0X@lMNt#XE(89`Unkf%s?fth06gDqc;eRaeU7ay-*t3gP-U=B$rTni z!F>q4AMg(u?HiHdx2c&6Ls;;*#RfoNGId$JyctHWW7J6#7Y+;NQEw!1D4TH@o6T#7 z$pC*GhP73xF`BPDzr#HP`I#}}>>};e&U@L8c)?4V^5JORt4Zh^B@MjM{%@&^(5PCHoUZbYW;K?62hE))yl)a;&|90{6*evzjlm1sE2 zcoLo}EA@mjJCD8>t*`#y!LH#cx{f^h3CS4ug%b#?w6#i_ULb_)GgfAi1+giT7Db4U)CKo2=Hr;kXd^qg_WULc?#8(T^UFu%{{xvOY^ z!_V58Jgcfiu3;T6dGeNXq-;^`d;fx?JfRMKOa-wCeRP_E8F*3ng?fv8v0TVtss)IB zY}`7Q%X}=&L%(Rb5btTU+;BWp-;|kA0#Ha!RD(|dSZp)rZRTVGc@z$T#S46d{Qz&^ z4VLepl6}zp)9gFo~WiTys zLeJ8Dm!4F{DyW(OMu7E;==M)4%ta*tJg^Ah6Vs{FnDEK?xujIrXxQit)79=8BLdyW zieH{z#D)_$j?~$0^i%Y&=}p&Gj*g&|cZ$gl%|Ken50}JAk*`H-!#S^Cdoblstk143 zJ73xQ1O&x@6Ln2jJ6EPpy^P^{Y9AwX0c+s<2)S2!VoNd~#3JY?EQ~N*9vpOoRZW1g zD5vA7vvRhhx_1}&*f>Mi5qbXd(zBD$qxs*hn$C9rrG&*=**x;HDkv%RSN&|EOLb3* zSh}xXy)LZ1=1fDf6dR~5*9STs79kZWYyE_8q^!Qe1fk-7Ov*7HN|IF~F}e?wYqaI+ zqk#U#ad06yuN4L{Fc8y>Cu*1#jDuq0?^N3XT;ip4revC)tqMP+mv=!_emh7%gz*xc(?oqKw zc4?5n4PHq#mO?4g!m`RQR;MRLC(=ndR?;nt%t@E(_2A<@3&`#((N(Kk(bbaePt^W! z-uR3UjrQni46a)*ImP~jeFa&(wp6&_Di?E0&$6jk?t3pP7p#rj!CBz9w_r36xj5-? z-bHePWB4gIJOgo_7Hgt0U2voO+*s3w}YS zxLxOV01Ed1k6{1oQb@r+1^50IeDPaw74C_XGxMX`iB*>eq@W6+I_*Ou;iy$P;i$}C zz^=X3i2>370#;~qG>*cW90I|3xw-XLF6!9i62y3sp?}Cd67uTwh4U^MDgqMCMVH~4 zI~()=12}R3&O14NwsiXwq#%Ma1jY+?waaUVhweq!qp&=rU<8NhigIB+vk;`9SLap& zbv5S{a8w!I`vho2ZXDi@+D^8uIhPRlRDh5p$?|7zy{S{vv5 zN5dgasGk zYHWWT5afmyAY`f385IuDSqe9ywhKu`OaG?hZyHm{BvdS>stboLk5rpbEvq)AY+{iYpvx#SZ96AQBiecq#3sM1k@a=eZR#p|PM4?+1R(O5%{zO#Z zs>`$48`j!?8={waYJ?nFj;JG?Xx;u-j|n3S5%wn3hvp4MCKJFl3DKsAFPlO1o6u!Z z!U{Z7RJjZ!mmXhT8_00)uqqnfIT{|8KyTDGSMMc5pWRX&-uNK|Nbe=)l(H@GiT?nC zi0!(o#|?B8XW@iikDZPQP0!`7UmPSCqJT`?wrlow%f%xL#4v1>3rZAk7jMI|?47lm z93_`tz3}g6{o+w}#9W&g{|#U#{~O>q^bY{rdl&ybh~aja;nN<1sO2qJo{9`P+YZx! z2rx6AtWey*?Uu{CA4qtB fhdo5!szI%iH*l@OZp2*<6mjb9l&=0 z^WAoZw;T>eGvmSHgz2^0JDnxu+Du^a03EhVECm@3uZ)AY#apLH{geKP?JxRbBQw5j zNTB({ofbfQIB5IfAlrYZQ-crhJ-psvBH>Z^g5h*`c)PfPqlfFqNWp9HK}*IZBubFc z=h_yYows(zjVc#%NGBD#Z02B;(R`}h7M3n@zep*ZR8Yk6aY)OhiF{SK2$!>G--`53 zMJM(;U2k#XVvp=99k6QO7_Jv^Z-Ot^XAJCNUYn%Fk_CxSc)ZAkaxa!G{@!Mqc`*~= zegdv@9N&9jC{az%IRuWKY-bbjv&lO5jSQhsm`uLI5bYgCE`Z_UB^VWqy!MLg38O<% zNY}hM$`*2|6%w=~rl6W#Qi(`sJu1mZ!8w4OLPDk@UuHs!E1bDq8QP9nl_5#l#^!U2PE~RwyMe*35sxN#Wb7nmco3s~ z^{GSMiYtL@*F_~NZM>Pu;7}2t8q_)9bHxON8U=8_OdQQqXiyAIG@lsr4?TbEU}zbf zkgJH$(1g}lakZkSyTidYeHSw{LH)^Iysl%Q%dj*)hQq{E%aU2)H#GJ#>&apUU^A8t zv94obOo=r6CB9stO|C{UJr?$A?N;$&^Ds%{BMa^LZPl2J5Mn~&!PA^6RHJ4ombC^5 zEgE*BM(R|B75Wv6b0__pLXAU(43TqaqEkX*!mimnaS~oqGi;SVT0{VztCPHR&3B0hG_$c z9E`x;5fTod%ibRo2ER`MjitZhf~T0VH6`Rf6!Cr-(p+{(USh|GR=Q2@-TxOA6Oal! z;x`pj_@Lo-?KGzm&?ZZY8xx_smElO6>XV*SRw4$k=(Wbj4q>)h7Gt%flc%IqUmYsi zaVO`g4?Kp2dJSKQJ!;B6k*gIk(_VM>AS}l#G+~$>X`~AMLZv;SqOBh~vzn+HVZogN zwnws>`{1xBaQqU}yqtBmgPt#7)3MnZ;7X$_Z(41ozRZZoEy^(B!J3Vwoso zcx>CNFEo+3o&{8nWO@u@o8<2u1rxOOybDZyg{lNrw&}BQMFnq#)mhX!D6Tv6GcwxW z7~M5B!J#PBisIR4G&Gs+Gq~GXp@59>iICTW5e{-ZCu*UIp*3|s#3%$X!u5l`SC3EG z=2=fK$9xb&iicRSps1LVM z1O`IJYKozR4CRR49$BRi5-D&LuJJxgS)htYj%lgcO9aO17W6I8momtwkVxFhB5ffE#UEWGdtq6f5D- z^x)E803AO}ns zQa8sRBi3n0XW>{YDD@n=>7jBF7UQ#Xc5yD4=LxrPke*NwW)s>y0?qQ&Kzi*-(F7*t zzg55^{i!0T=NezGTv4sc!l}~#NS+%(C$%{Y5#!BineUQVAMGD;?tB>-NeBc`G@nP9`g_^lLwSps~*Zf zu1mf~5>f>GP@j1R=|rFD0ojcd$rZXa9r>YqoK6gji_B4ihFfBdWr2i00bHJ@ZItFT zJr&+rEd!CQT+n62@#^8RbNzzFMPchN`N;PA^p+{)fZtKY3l!?GSR&E4J&0kck(El& zs7p>UEs&@m@*j-_FuTs>h=QK7HAxGYfWM8K_LCegs^-UvfFp&wSUED`PA|h(Xaa$h z{sO}I4W#{VAnV^i^F9-u-jca*W{WV?5gVl@;e1wDF@GTNl>^rnJ4P!sYT$D}5+$k? z*i;F)i_DlnbQtRSF!Y2wxW-`gV?jAB!Gb@0piB6%;@7+6GkNG>N224nYIKl-TMFXq zP6w=G#EOhcjIb&B0s_ejgd}t23UZoMOZb6#D8*02e>yNgqMS;2ZNzq94V#q&R$@@Q zSm8Oe)182!A_V>Oop4bsm?t3_F{B8b6A5HvrpPHUFM4AR=-_<4UTM_s8@1r?(TA_Sfv`@eSRp=i9UP>T0C(^Xxm| ztNojuYy5ol`k3wAofQO4=^KZ0Zvdq9WS4aLY&E2D7k$pPVV5ZbF0PmErPISNt!v~% zhvB#9;Tx}|t;q=bmW<)S*Y8eH0a91@7GCCicTpVG<4*QhbEeOA%alGgf|T9M-fkYR z9Olky_oWTp zIzE0Ig1&>|!L@7eWCCuywYNHcd|m<`LcVvW7v9Z^`}X$gEqZ69@`dWrSMtj43RF?S ziN*E>FMHG0OWTb-CsHur6= z8u&KGm*(9vi%rH4%H`AL=xkHVg725r&5je8fM?k^2EBThSk6=e>JP^|t@ooOcRMXu ziy57Q>_#W@7VE z^7B(EC7G~_yvl>lcj>{TO7+$)%30YPLQ&^toG^ROD+oCc-p&DpUD+EwLBOFO+rS}g z;1KKGt)Pbn-doq>j^qdS?y9@#@zq;v$=ZypyVQ1l%(cOz)7{&j3$MaOB67k75k zE_0&(>2Eb#HcEHeM&oucR^p7+^5Gj6>VQZ?E^k@Q&5f<*@?kBH{J7W3p+3gx@Zf{F zL*T1|ozG5>!+K@0*_=o!(9!VrfJUU^wZ*Ivolo_I?f|T=LZ4_n^pY?+e&()R_<)=z;jb1 zq)^c@aFc}vjh=+#Iy!?eQ!h*=$$ABNY%+~n$cj<=jd!iLuGLJ~=7*MZmX78-%#Aoi z6hoHx=cbjVc;jG^wg|5x=MoL&h!gGk#?hudB%yez@gW%#N6=%-N=Ut*j;*$f4v)<|s2z-o}LgK<@$ z*nmzxXo4+GVe?6);UOZ#%EC&at!tElIo1L6a1ikE7s_zn`T7^62UE$(_OyLBNLy%PoWVqnESb zgM-YmzI(I?Tq!}tHIBg^l{mUrxx!+V_Y#V+GWSZ@!mk1(h99zS2# zGrKVOGTS$we=<}-H?wQpKkr#YjfXsYR)Agnf=W6_Ru=pTkLV}d^(x8bzS6)bZmX8ax2+ut?fa6 zu(|T*=y!m&1MvInS{lKW&stiP(OI8MmCt-aRjb6UImsCzH+;+{mC3g+ct089mQb4Cr%g3U;n1DXwxtn#oH>^Y0|V&dI@Ls*qL#Fqw?X&@>nkPCbw_0X5L zvLLzmj<~LNjm*9)P#JnJMV>ABHLS@(Fx#cxRe)PCa*^QDgJ2PCxeltb4z=8OCxDNQ zxO~&briz3}Bgmr~b@-q+Xzd3|c#p_S9nAjMg%}N(k4~9;G00(t@3crz#BAyjjI&o~o-$cP`M?~3>Fat7FVk@S~p284R zrk@oPV=CdgMV)Tch2{n22UKr4!Z73?8%n!|+?MYF?)z6lf+zV|uWtu@Ii3az1HA`H z0`Cpuh;Gj7KF_bOapHnmN51#kZ;J<$jjzo@`dkEZl}xYg>p!@e2^j5>9iEmrGGf(k zdlkk!b~}8%pW8QcjT1_ohD7aC6B`7m>OL6hGK`YzRBW9JEA*p>OpuVfW%~*) zzWL6*%0|9H(3rqtmtxbt$y+JX7Jrb^1vO0 z#kg2%@YE5=^N6{%*F_o~a%%jv?W+4C2H0BhIBV}F^L0*W!)DmN%udVWDS^+PzCp&glAF}qb@A4HXy-!DTXjYUqew_CBaj}+? z5jCTCYiYo42>OMGE}-lnWpMGfxyFfiO*JspzQjZ>2)GWcY0V8v=<Qz6Zq$=)L5R9IgkDX zKMJ_P^P=$GUVIBl3pjU>-E!oS>+$yFga&2wary+C$LSBMsSiCEyK5jLMF?xV&gyjw z@z0Y^?|Rg^IUYQ!6V86!tQq#DHYGbd7m7)r4rH29UEdycmW{l)XpcYMd;yoEyh=%| zIaU=b-eYnh6v{)8=nQ)ly} zo9V)1sK;VQSLN~BGv0xDuVNWj@i%k+7VC2ZzUAf#=A{bg$sOUkcaz)tt>ma}=Cd<2 z*!?>d!ayZ?gKKQ!FCA_iypHcq-viFrd+psPT7|yZs-$Qjg{?cfJeC~Tj(6TEj}dxw zrvVy8^*t*tVmyeaWIa@TbvmAMq*S?QD4$yO2q7Cpo3Fem>X7wx!M@f#Yrr^rstf-;=B$|iXH&O+7{PQoYg zc#4xyWU_?p%8_{>?6~>%;`DQ3Z0pBZJATs7&nV~zUUJbBtgKK}nX=@hFyYdlNT?3| z(;vW5Le0!j#73Kma8;a5<$ebscqb9m6J9^>$3JJrq=qd@la*!NHvTAw!uD!(*ELgZ zK<>fStafHg)<`gVmK+fsiHoe;0lRF=YOK3eI5E|L4Q0=ZQ7(_5p(LzZ!%u?)nSO82 zro2Q=VW#YOKpKJER|U=kr1NWF%u&smITWaux#+w+EG_;zqvbb?XQz#OliLyvi4}EE zJTRE7%GgVsK$JRfkQobbP721)!MMm_6;1lxe(9;z6OUEZJy%mUgk}0NVd(7D)fjtT zF$p2wtnu?sUJHNFPWH%KxhmjmO_oZ?<%OE-*XxDHXQp-AJoIye?SlIO%iR=L%lD-7 zwn1MhxSP!FUPg1VwXN?RbkB;azD#u%*$bTjOiw8`vpg8dQ9B3I$xcnqlqsQ;6EBr% z-)XF3x+^IOHfANi?i_~9wlk)(b>AZ|?z6<(o9|_33C)&z(rKk-$l_O%-W*v}4V60* zU?SEpuP$Mshl{jOSyuD?B#7ava3W-?%4)4aGm6QlOa{C>5jI4OctIymC z39-+XxyDD^?#pio;GYSR#^n+RIe4Rto-fyZTuNDNBJWFuVI8FRy7oEv1$2hGw_mdnI&v*+2dhSlM7cT%=|FS0BB zp%+g`jC8!N<#kCz+T~<4meRjrgyOqq`!PszN(_OybF{H8Jy848=sGq{J>}p!l$|`I zuIK(5!6IMF>jM+Ubf_diRuoRlu2}gJiJ>UP(Z+wEl@(^SbhVn#b%-YtuDWx4d3RG& z00H7!-pUs})LSLtxETL>X36F2D!uncQQtMBTCH}Rdvt&38PzZl}S1bc%cw8n_EbH5!g`(lKUQ`NbCD;AjfD&z;C%q!&bt4U+8x&FOd79Kf$EM zKt|sL@6w9=6Y3g~*R(}Rwt>GsT6?eu6l!CXWHU?u{+uVeyFR_X3fL0cz?M+Ho>8dU z>YXg(&DQv7(rC33E&a>BEo~q#u0x=yd!QrNp^O7f`sXrdXA05&kl%>Xd%MT4JI^jp z+14CyuCU$B!1lCzuDjt+N^_+zq@(Z$a~oU*G{R74C>en>Le*h*OKpf4AIV1VC#9<|G9> z&o|VxCN0NHDiYbDM%tmqzs-lt07%ip<_`A2tvJYmXHVd<5Z+-%#sSf#e~x#qwGGO! z83BRT;p)f6vPnvsJ5Swpwi$X-Kd&g?d+OpXF&?w($=u?r172pBtW~aTM-2DH8RR1;~8kXmgT zoh$pE7OcY-YDHm6(iS`=sp=GPKG^LSPC_2nNTiI!o{3f7uHBBWyryQh$u$P8Cj`Oor`j1TN%6@&2b{SjFXxb4Sul&b zQHxgcH*`DbK|!P;EtO3&`ourm{d~NlWl^Sk%u+EDtFm1KfD*vGGXjh-6o(K(ACS+8 zUHeB{id9HKKt$PDhA|fB5D#cN*CtnMW{9o;EFdsTpIz{dSk(QyXZk^e?S;nO!eHoR zBh5u2Fet@Q$;S0V6AMF=G0dLNIuT%)h-e}+b$+3c)$5_xmsRRnh4*JSx@$v@x>quh ziOua}NG$758wSImkbw}^J29TAhJ*CaAt10mazu)9n_|085MKep|2rfK=)Xf=tXTj< zx?TPilJ6;Wslno3A+w=S$b`fDk>vYxl_yI`!Cb6qZ7^{*Xdh!xM50vEnZ*oeF-8&W zjiAWI3~$MUkk-0VUFpO?3@xET^S#a`m3V+^E6eP!Ex&w*5YETST%-wW06Vk`g#mH? zEmF%bwtE{2)A;h~GsI{x%&(}PscFZA6|>_uso!W#I>nw9C;{!D10z9;AfF*%P}d4z z9cOX2=+&<>)$qtr*b7|N7wA~->g-@pT}|QcLtrj52Ga)^|9HUQYdQz&y_yIJfdN67 z=|@pf7~;tmONy$g_Bua`b*B~sfv_&%jd8}I7v44x2O()AKI{~QAm2tAfFT7#7lqJg z$(oh5R*!@84HTne4Ol5bi-2urPLhzz_w3My7=#jQO1{Mv4hJCxzjRf2yU-fkOqs$qXPZ&*htE z_(pBompKVM8~(d#mbD>3Ivz<@3CV6eMIi(~Lr{gn?B6c^l$krieucQjWm@Q*e#Npf zFm{jPV8$dv;U;PKaK!tcd}Kr+jHz6ibhIHQ-dhk!17qckdQk#Cso=1;hu}t|1dPNX z@EQKlUZ_9;^)JB1F+R5SehdW+`R5Iw62H?U{T>?`N}Ju7(HRW8Pu=itQgG(u=x*ldZRhCemYNI; zk%cM0-@P#i;3NKFkU@@*iN>OqJQjWV8ofk2-bNO&h@Ya$*pb%pO!79Sd)zn{jX5B< zMyGuy`Z=Z~XQJkKI8XoS!1Z{x?scGwd!dRLx@n-h*trC%Pk$nNTD{Ix(YQ*Zk@{$B zN;}vO`J)&0L*G}1qj$Wyeww3i4o7sm+k*|EHZC49VPMf=ba8C+a%MAlY^QUKxYLM0 zoDyFDiN?qG-V0UV@B2_}`fA>r6taFFtNw=o5%fW#u`1vQin8U5J|k)UE(Jlx_Lt04 zaksBl)XmG@BlrH}ltRQPb_P~z#xXXY$?1j<3!aB<-Hwul_00=!x9{}K_O!gmTaEXd zQnp7mU?MQ>6I|U+w|?+y-cvpO@uS5jcaOJGkGBB+JO!C^+4dCtQ#PWURb5G9_0skWwhrh#R2fx{vRjD*GsjqHxDTPajs-q6M0!d7>B zSAPJnU^=avM#;U$tW_Y>MWUzS?)Pe0q`DoPIzK!GbCC#!D>ZvX<*eRB-V8>AiTvTv zI#Y$oi?kM)I%0i4a{a#7WJ{j}E29i6-vZXqUQ9Z?6IrXF3x~n~MCn{59^IqJOlI&{ zFS>b|xe)hw8)N(YS^uNt9HrYgsr&ubR1oIV6BK9VW_~f(S4tOU;>QY{X@73hmR!d$ZdjsqM7K{k=nY-sho4L|O$6>o3aR+;>F= zgD4(JI&Qs11+`>pKnLMLDz$2qz-v&$Pe^=zAFTM$`X>i<9cg5fOUYtqV{KxhV@t0{ zfojAs`4WPt5*m96eM{W-EBno#UHn0}a&eil1g~4#XC>dt^4_sBwKR|qieuTVzvuGS z!lRxd*ZegX1cN4DSe_8Q((z1Dy**erwFki&_mFMe>`ixX1jjH=2KF;c6Lu-eG)ek; z$EzENa!$PCLoA0FyUQ?TxcMUpct)rt6b24urcyxH-xUN#>(V2)2p; zr^;d2`Dy+1&m2LP<|lWnpi*w12j}@0P-do4(?~Lx!4XXH3UL(;lPyOz4Au*(>k#G{ zym7_Y|6sgy3`Vi`6Ja)nSei4-k!Ff;G`T!qfE4qQ?wt}^g_|FT%c9JjgF>+(&LhyU z$Z#CcD_kq4QioXrMHK#p@h=hQ!lE31L;zX+zeU6hi#5si=>IK%H6L~!fxer_e4~i% z9A)M*g!T_DcP2kVe^qJF-X;gUXGU8G_dD;4zX=;{3zA-~TpB&o)`myZ_KyYL25-$8U-_lN2$F$7im>P=PgCV6#+n+IOHXHX*6!pJ7iFk^5 z;)CMR)R8UjU0X~^pe17qTL#}rI1Qq#uMgizUKMoX5liRXsizrDspv=I+2(hLz{?kP zhv4CKn2k{8cV}M(-38upfpIA6iz`-#XqWHXGT<{vRaV3bnHRMjl@jQZI!R1UNP z{r_RbsL^4_$RX58SYy(iwGV~o^+ z4v4P4Z(Bbw45ruLICmNVTvEqsiI#l1cmfWf*46-{H_u(%TA3hQCDZ<46canVGk4_= ze70E|$rvK_HyoEx$@TI03&4*sD}BDh@p-?Ei`GLi3MDC4n3DA~S~a9AbWduh-}@km z%2ODwIPcRLNM^@!FzhJiQjPABO$4IOfs={W#RMV3LlJYz0TK)y1(?Z=7ickS@gl_m zQbmxOZ#ZsEW_T$}&FSYQK}ZFmx1H6T>puL9%grnZC^kGKONp98_jd?p-z>s8QEa5{ z?#i z+Bi_*oCGM=($#zA>br{S^!}RQ4WY%#fjq0M#YjO69TFMP;hfnpjF>jVXp=f3^j%CV z;fT1yc;TGd{>yPn+&a}tw9tVS`h2G-HaK(voS3Sej4K>M|KX}+F;-CB1l|B;j3^yL z>{M$a1xc#q90Mi}6oaZww-TQ6xgk*9U9TDypY4yLW{@i4BKua&BIR*7l^)kQ(iN88 zzJ}5#jk1wUtWZ#6MCf2`G#eheVculSeUcU7YSIb-_3cC(Zp#nT2~L>{k?K7$OV4k3 z1!Vf_bCb1EoW`P1z~C`hhL0voGgvmNGAzcGX-Is-c%d?e^2?LR?ojgP2n@>BG%ZH7Y;j1hxwKetG_=#30kGSzT>Wq8>1 z8BJ*D1eZEXw_Yn7aH4m+EDoPYY`gxd%u;7=SWV4yuHunxrTQ6LjnJ>vD zrG<{s%;Jp;%SiAi*=ttC;AK^1qZUO3W?=E6l-|k@@%@D)BFQZ!24=u*Z|LZ%c- zMzH}@c+%(=2P8<()ai&~N(bZ>DkJBSrk<5jN(l(6tlqftgmoSS(X!6Oe9KY!s(J{R zF3KsrstA+G)=CZ3;+U`uaLVFZQTdTCRnq=+<~O1en3%^n<%J2VtkD(+8MB`TZ1W@k z^j~!9tD+Ms;*nl7`H|~WQsu_G-%gSer)BLQ$!J6|Q>G^r#VLc(RFx)jG1MsPX{0dC z7z63fXUz~R(+7}o)l}0>@*^dbM?7&tn|OahGzHKBdjhvg&77D|3YfHw4MB9~%tf?3 z*ncv$zDqUcKxIf>)oJOJVii^z6&0zGf1(z{{u7l1DU_0Ush%nwQT1OI=+*-*NPx%s zW5G;UWYROq!&=mCxfg1(mxj_v_EJ|Q9hBL&nrZ{}&)ULH@%b;9lz;I(fc%5J)fIW? zf}lDtRmp=NQWX9c3T+d(E{w@3n8>GA{Y@;bED|H*R2Z`K%DEU7qlY#w{GEe%fxvl<4rXiQ2cuX9H0w%AZMZvE~vjskOu~=ghUM5N6 z>`W}`=2yF^dX4uL%5plt1LbbjW=|2c$z=f?3uxynDMoAOXr)8Q`9oq02gI`TLy?$I z+-o8G#T!aG!uDA96iVv-8HG_sSaWz%o0|s3H|-(VC>Y$MHns2jwEksZZ>EtyZk<6j z2xZ6J)Dfp-z^>6R^HMN$=RrV8@QHbzcoMw2c#(p?Ae%@_ipaLg4s1Z{}nS~ zVyj^K5D69<4dA&j4jgDu(mrg0nZ%FN)6I3N;wk-68VUzgN}&o=3Q!aTk9XutVBD61 zwZKr2+156G#HJvS;z=vu-ee661}_Fu;`LZyh$H0}8#n~VlHz$FUmgm(cj|3ZV|94oj3Q?^DjK9M2WgJxeNMWG! z4Pcc@R>ri{t8}gu{>>Jm44Ii$6-8$&+>Ah%2P(yrQ|@J57>q92pn+Cm`v3Kr-(%1c zuTd03PS7wQ*hFE=N*OjR>tAs}(r4m~Pbdju33xCn97;15uV}co7J2VZd1nNud`w%A zMBtUZ!txPuXGG_MHCVxinflZGs@%{tXiTn4-zuw zdupY=d;4=+hfQr#0c`7glIDhFvQ``1S@31Mf<_ z4bEt#AWhZmZqCEGs?ZA($!z1E{Z1wzKKWAzJrI{Q+2tc4tK!F6_n0G;t$#O9`|Q8> z5PKR=KIiBw`S8+6Murs5L$dE5F4{(hRDeH9S+R!d0>UpkJs@nY2HZV7uPL05SwG}W)`(fI#6)pq}B=mP6fr!*^x6r1# zpMjqZ;~ysO#Pho;qM6pv<6&NUULXw@^3NlEH-zZOgc4yfwg{n=0*U$szK@*VnK7vfcpF3}($Di%pi+i>FdInUWhIyQuXtR$7=OHw z8>87r&d2ypN-#XYLf{DW?7yUt2mBg>`P(t!*Mh2BXzI+7=VXtQ5WWvJh`$}f5vlDq zGjdv<9!u>>oL|(D;tP*4Rfb zH37;|gnL6lI&Ml-@X)m9-be1|+($N_W(ESbulYV(wQMv6A)T#v4Ot!W40*)!ZUM4M z6;cl^HDXc-fYBBtZ6C zlCTAnQ$Z2f5H>}!&Jz8;Y4*@vh}TZNF&lrVBNVr@Y(j%n&a<0GT=gJf9kSrCY3sQGs;-%YfU@;~ zMc^gHRpu#(gDB9tcxf7j4q(qV=b8Ds7V&lLmY~g4+<$SCxy~9!7K-shM6ycxm>0}>Up+FSTx@>o>?*#*)aRDyG?#9e_VMtwr4O8DE_Bg(* zSrPqK8OyoKq(^OIXga(xv)phOSCKT2##}_M-J&q0b_(*_@biqA-Sw{Xi?;k0Mev8vekVyXl${DcSkCRo0 z;F)=I&fMA?&VqV11d7xv>p)}xqAdsyTD4k`VCEbro@a9d*hS0$JTs1&S#Fu0GHLxl zVhCj&%>1{mmod<0^kCV?zPvLD7qifpno#Hnj+tE-9Bl!RJTrQDQam$H2*u@#KAO-% zJ%nehe9YZ|fe9~ClDY&s8M>TOULr?4T~n7@%#Or@cSj^PHYDkL?vfGL z@J$;e+Uo-Uh)W1DhETI0XSC6#+vqn>nu~<|?DT@{)IT3*i0&-dF8WN5zK} zv->)y%@H^lkM;C?zlX&c$i)I3BaGx+W6Nv@BGx9sk~a%&#F{0^JJcvb4zq8F(^x{V zLcVte$G%-lQ&FW=nyr|;8tkmxKF4!Ztf);ciTApB$CNTpZg9o6`ce)|7bTE^=^~pK z3kwNlc6YMFSw_ii>+BR{Rwfc<`j5ep3eQ(>#%JX-xD*0M8Ol-aY-~%Ys%#Kxbh# z#QQjLJ?y6@G?IU^z)DF1I&&oUA7`A=pbN0;T?!g;QV}Pm38pRBTb&2JC}^ndXsLy2 z+<)VB96CmHiY3Zt!$kzElLbs!OIN6vtcj&`@wp=03YRAEyR2t@V*k48W1ss)%OjNF zs8_mB!w2N5*ZfTJekGw*gk{%>&QqL9xh-(JoI)*RR_Ph=3wVp9Bd1-JlHSdi)Av{0 z&j8(bXl0{<>=1-SS=uU`z*HYj&j%>*Mcex5SL)n!Y+&u{zij7VYP?reE2}+fUXiF2 zuR?gZ6j$gt+*7b73@FkPKv)Muy8nxS=Wf$sG8wGEzX(trLGfbZPB?Moc!P;6$WfGq zSd1quW-W-4l#!IlNQeO3f*%hYl@q1IS_(8p0Fp+!iDLfGQZtE*ovK}0&N2xW*oV!I zq~lh^_ql=DksY`uUsz0HDek8%{vuU*kL;fvm`#TZ$-689$WgUC+*Y(DDcfU+G*0{5 zkadJVd{Tf2e;HDm3J&BWy_yxw?k*6MF}Eh>tPN}@-X3XsBxgA1N>iXql6Mmyb*D|w z&x5e17Vy6kGZO;)TH8pu@FfOifsDLIJxlEc{p(!1Xf-W`92!62ek_D3P8&ysGe9RF zZt(|?1+2KQ@|Kv=26)As*tcT9SxK^VPCq_8b|Cjt2)7LNTzw8NRMNA6vBf;p7mjxH z8nd`R{}dKrM|^Ea>0Ov1`D=!xiFv)Blv5B5G^%>4H`y!!V?C{(42U8A6e2ET(OI7( zE>UEN7TrNiz_1VxXigOed|Lgo9-Wm@Q#H%b7z4y18}i`FZRjI1o594_EFP64GfZ%^ zN^E3EB$G$eG~N4LKi*p}b(W0L+B7~Fx9R_8On)&jK!$iGW}|humdD4WU=SeQx}edi zbtr%^g!`e}5Fiem1_8s;N}HvbBBQ;-4G;&O%~6+#QOPreM*LCPvnN4`8hu*GNLW@< z)Y?;IlE7*3CKUvhq^73~@z!}Dk|_%GP~xnGrppKvR>f@sjHapHegQ*Nv6KJ=mR36o zLnAYTGT%hd6$9JNP(4K!!G8!9^JjagJav&z>w>Tm=9 zs1rr`-|B1;fa-W)di>wcG5-T*didg!;9B-KkUbVI^!<9Ye8;~@u`%4;`6cDNe*BMO ziA6#Z27TZlASbZ@Ra(r&%+=M(-r}!yRxRpV&fj@3dUwhU+xN_2Tb<+%XwN9>x8OhdwkkL8=)C+~`=*XwNMZF{`g0`(cq9Yy- zBG9ISx8YX>H#*?KrDn9`Fj7-nQR2!74N`>da&!E-eueBxH=38Rg~Qn{N1ATcM*H*6 z1I7nlC!M4c1{vnfoMV!Zb!D?|?stP8()LGy`wz^9gXxQ_q1|ZbpUN6_SSQ6N z2+66GI6>IM84B@{f{w32MXPJrI9>D&P9euebJ;J`i2T$ESYG)dR4j@OUP!V~5II+iF;oN@N0c%0 zkT%Nfzr`XqWsbJK73PObG0qn^=evl@Jha9ST2FNAQ+}kn2QVzJ4X+Hw6AD-3lW$wn|EE$HMYq1)DTDl=mfKwu4#A&-TR?D4=aT0Z1ZLYOEj? zY9~5Av5eP`X8Q)=D{ZZgDnG0t^fQ~@=!22y9?nWdl?4SNgkNMl=LK?Nr?OV6tJ+lj z5DQ6qt{R{kTaBV`WP866m$^_2+U3ffDJ5(m_)b2+0T?`_NQ9Vhb%KLs4$|`RhKs08 zJX^lQV2eq-JU4~n=H9y-lFrJr=xIkxq!0`-jXJc>bn7|e8&qlgP1GX9n~CUQ(?HTa zmyDop&kx9!D9CfDxbXmOXWqq`xEKsNaDvAH;7mE{enM%!i^OXQc5^YOFXZmo0f^=$ z?_0O~J*tr@2!B+V)o8ocMOdF5s15R5GgQITL+(yJ<0&H zw`xYRA%c&=y1slQ6Ir>_SgDKup>cdF_Mudt>&mPlZKUUNVT#FHYu_v)$uEkXDy5Oa1%n!wFYE%BFyj_XG#1<6SmH9Rrqy25*JcZvqIP=TNQ6XcL zQc#rKo~&uf6EL;J8r5|53@ZvNlOP%qL4%b31=l8W&9mOGJg@JB2eIY<(r3B41NzV9 zm8aTADj>iTRIR}0pR%`qm7w}!W~}mG7ktdzfb|dy0?3?q@8Dsg%7JM#>*qu^9Kx<- zkyd0!0!r2v;9{tmm!IrfTsU11RHSF572AGzGfcbE1%KAtvq7ov=U*G8v_T z;fIOA%DjY2zS=0(uY`O-`WzlJOlDlc)+l{~0^BNj0yjFJfN)KdU>+aU_?+54SSV); zQ0PQfu5X1|`&vswv=DRKM#B>;Gsr&K1d6}nc`YJ|$~ZGQAJ@8B$ao5Uq6DVYJ$C9a z3uES&araJan*1Qe6DmN|WY?_h)XlImewvJ{)dRrlIpyTA3SQtcV(?Y8jG5ZF4RLt( zmqf^E??-oYLPUfvA;q$JKiROmgZ!sszj^arOn`M#f5U-*p#9r1b6{CuRU>2Dzlx=9 zr4HDCXCWB<@imerEnCJmsRaX-ZZx!c3JKpE1f8HBYa`)GxMSh>H-6hVmaBT{t_Qn# zuPgd#3eZ3pTvt&ka8lln*=OUAhc`m)wl55gRAO{=?LYeQ92o||S&MxR`H5e8rb10< zW1dkY1JQRfP>(iSnY9bcUK57`)m zsBXdtj+{iyP>AF}Sz>yVy@ZzGgBsJ&Atf9!ZR6;SS z47!!cGL%lMVmOVAjm|6wU8^4WMmN{C=MH%_UE!b+xK!4l7ZAdG7Nlc8T8f~O$5vR~ zW@_Doj&T3h9sjH!z~=!fa4%|psCENZw)^<~62{G|2eGcULYG^hedwYzQo{?DJ}+piaR~Y1_P%V4+2BJ7o9k&Y z(aM9H4!e^XeIake6nQ9qJHg1!WDrq!4rJ9V2KEC2#){mCXB{j0*6wmh&RC{FKB4V2EqrI!u2$WHOgwX2m1xMndO zTN)*jGm2isE2n;cqpkWOxXad|`Wj*Q%Z0a0d%{+vQv)2@^+*~e=i?Fi@08GEWX}RV zeFn-m%NJoppufYN7BSrvC;4bfMi>0%0xV*p=R|&j%Z6vjbI<%=({Rj+PI`>WJQSA^Kq7 zoY3Bne>1=PzR>=dy$>(c@Spbf`PvJU5>~bm!$rSh)Ts3elM;ajRkF-GOm^Wdp z6W-41Sx(z>(HJ2$mKxfA0ON!0K znq(4{X*yl`I#*EaI3(X(Cu-XHS-BmSEEC(lKf+(XL4A%~dfbj?^Ru{n+4Ks*SO`KX zD;dTE!LTRkFQzPOx~;?(ClOP-go-lJ^nUM<_>K4l3e%)(H@#EH5ig@1`9Q&aZ#ET@ zwbDXO!OD|*uhiI(_x1l0W2cYlU7IR&X4nI=x9>~9&cbt@{YSglW zI4;RaZ33gC55R$_B;ZLZz<;L5p_Kp7h z4uJK}sy!DlF3#%JmA&?lz8*R|9Lt70x6w;dK z!SYfyju$CSZi0R2kkW3fE=O)&^Ct954hjtG`9JnD7+{^_c;4#tenI~;7t8hMTP*|r z;6VYiS9IX3iJOb7gPo?GEwh!YncZJMdo|GwaDyxuAU}P@ClV)0`NA<4l~Jfs3*c&{ zU%o>nb|)4ae{6^M?RtE196Pp?e+MJx-~+UYOS?G2d0$BYh=1N63*V!JT!e@~XV;=w zs#r*BxwU&hk}7~>(@jiZ9O$xQEkURUgIPFMAfDEQ!@i9>;xq@MSB?Zm*=nSEQ?+p5 zNirW>QTDC-sT1NTqP{TILh%?~)iCC6QHIpD!)2K|2QRPx4_$(jN6S4xJ=8#5ME}tB zcXinRsQarlY|Lx}Fh56u+U-#wZMLj5v!E%^d_n_T|LjOw6+hb=UV`2!E4AHQr~;15 zwoUl))5XpYxvE`+DsH~Kv@*s2)bYWI>)c|^&pw5u)v1|Yg5?~v_~p9j(|~n{spV~i zm*L~gIYRC>QpeVCX-37TjRB{#aveB`@(Y{X&1E$fdu)zk!>*!5$tw@ zQ)YJ%VW*A%I5S;y7n%uA*kgJFN94dU?wZsr%DcL}np{Pfy3pI|8`wV^w53ZxgknOXxFb5sn7KXO?6#P0C6}`2_JTSZ(#N035t`|D-HF1Y+hRgXHgUqC zs@Ch4^&N*L|A7TuRqFhz#_g18ru6y3WnqqO{rXfkU7f>jUr#GfL8*nY&k2>J8SrxD z6S7@<7*Vr568?eI9eF|VVE9X5o7J16v1}6h*L^D4um3Shi=PXNumR4=L;$n9|BN~8 z-Rz9boPo14f3mw7%`N+V9-N+?GT{UX-IjmZ%79Z`m3+3A&o_n&E} zRF^-MVb{^nzRk7!30r;ay~oY|M%`F|M5C)KqtWF1PJO%fT`D8mmOq9&eDEQ4U-Krp z?$BhX~0Qkxqy{it>02oI%E36`TlcM zfmpa~Rj2}2mxBM!w}%XWZ%zVOW?H|D zAessKItz$zkg=ALa8A;&4yz3GykCDk%@p%ue%S(S2tn>pNpfw*UPbh%>sF$_B5CZ+ zpRFvoj|eyz79ydRs0u1N z(+q?=hUL%X+VV_F(Xrt1kH_0Dd)t*HMi_YbS~Z}o2g~J^Tq2KgeUb{JeBo&2XmhSEThu`}LQZsRc zaX3#>g*sQZhB$qpI@mnEn$A)vT=)4N=1tCJE@Fy|LBF6mq5VB-$Q~1Rn*u0>7jS)+H$ui#HYu=o|N-$?{#3? zQCFXDVqsW|i?!4*zjVZK|gcp#ubKcNle2K0+& zGN`M?ocn*Nz?F+d(=dYWmS!oD@q z{ zhc5b!j?&c}K)71a99{s?%-qWi8 zs(zcXPgf@3o6zIvv@=ApeBsLYXk6~Ve2eY6r3mmU)UK-3GW)r`t9jN1hFeHq zZt)N^oLsZ#`2;Sb=^_)H3?}}3VrSGZvUux+Gm`u_EA|4z8{$XzP^|L{v~Zb0eg zf1lES)a_%RzxU6{mL~gy^N*|+?=sllFey;^UY#nxre^aKsa+qZ9c(>sccpbwN%-0q zyz9>URb;5QY@Iq?Yhi8Fp)9+se>d+W-^;m|_3z^>J^ov&dBWS9e>dDd`Sy_=yYTke zubdFjE&aZ~v3&g%>Gjj9*j{gCU~E2WaLeFeK#oNAjFc4~M~qV>i+EGp zG+#*Cez-U3y7#)H{HH%izJK)~d*v?R#a9a>S2_e)$+TR({^tLU9HX`;LcdLSZ) zbca*=WzpAN2bRoUrG4e;t5cf&&zH|`+UHbrYu&BVchVsWDk~?wp0nK_--_wpSX`< z!k(X%uhy4v&+}cr=wf$8+)Hz&n0o@f|L#im#@%cB=+E?q&*itnwyi(*GH{Du3YHIQ zFt~Z(^396#$!`1~gw)vi3r_Jl*zMDPH*{H@YIX1WCQ=QCN`;z1&vsV|Hd8P4%r8IGct)V zgNDaB7&K>@N30E6I&mtng?b7&<_79^z(4~~jDaEA88{f6npYAZQdy8%91Cilp&L-C z=I!tUsPrCi9GM%Y8%Q@W9s?QyY2$;N_UIZr+PH%=fl4j{H436=d=31M~wWVfq^wn`}`uqa81aZVvi9DZ-r3MKE)aCQ;C}qffjbv_C9^YDb%fK{o+? zA_8H8a0S!^lxYcc{ph2{2>r{dp!(6rkkO4m?|&nVnBR!CH;!%qdPf&wKzS3g0ob~| z=w_k!9T8>~G$WgZ+LJ^#1-+| ThriftEmbeddingId, - SimClustersMultiEmbeddingId => ThriftMultiEmbeddingId -} - -/** - * Helper methods for SimClustersMultiEmbeddingId - */ -object SimClustersMultiEmbeddingId { - - private val MultiEmbeddingTypeToEmbeddingType: Map[MultiEmbeddingType, EmbeddingType] = - Map( - MultiEmbeddingType.LogFavApeBasedMuseTopic -> EmbeddingType.LogFavApeBasedMuseTopic, - MultiEmbeddingType.TwiceUserInterestedIn -> EmbeddingType.TwiceUserInterestedIn, - ) - - private val EmbeddingTypeToMultiEmbeddingType: Map[EmbeddingType, MultiEmbeddingType] = - MultiEmbeddingTypeToEmbeddingType.map(_.swap) - - def toEmbeddingType(multiEmbeddingType: MultiEmbeddingType): EmbeddingType = { - MultiEmbeddingTypeToEmbeddingType.getOrElse( - multiEmbeddingType, - throw new IllegalArgumentException(s"Invalid type: $multiEmbeddingType")) - } - - def toMultiEmbeddingType(embeddingType: EmbeddingType): MultiEmbeddingType = { - EmbeddingTypeToMultiEmbeddingType.getOrElse( - embeddingType, - throw new IllegalArgumentException(s"Invalid type: $embeddingType") - ) - } - - /** - * Convert a SimClusters Multi-Embedding Id and SubId to SimClusters Embedding Id. - */ - def toEmbeddingId( - simClustersMultiEmbeddingId: ThriftMultiEmbeddingId, - subId: Int - ): ThriftEmbeddingId = { - val internalId = simClustersMultiEmbeddingId.internalId match { - case InternalId.TopicId(topicId) => - InternalId.TopicSubId( - TopicSubId(topicId.entityId, topicId.language, topicId.country, subId)) - case _ => - throw new IllegalArgumentException( - s"Invalid simClusters InternalId ${simClustersMultiEmbeddingId.internalId}") - } - ThriftEmbeddingId( - toEmbeddingType(simClustersMultiEmbeddingId.embeddingType), - simClustersMultiEmbeddingId.modelVersion, - internalId - ) - } - - /** - * Fetch a subId from a SimClusters EmbeddingId. - */ - def toSubId(simClustersEmbeddingId: ThriftEmbeddingId): Int = { - simClustersEmbeddingId.internalId match { - case InternalId.TopicSubId(topicSubId) => - topicSubId.subId - case _ => - throw new IllegalArgumentException( - s"Invalid SimClustersEmbeddingId InternalId type, $simClustersEmbeddingId") - } - } - - /** - * Convert a SimClustersEmbeddingId to SimClustersMultiEmbeddingId. - * Only support the Multi embedding based EmbeddingTypes. - */ - def toMultiEmbeddingId( - simClustersEmbeddingId: ThriftEmbeddingId - ): ThriftMultiEmbeddingId = { - simClustersEmbeddingId.internalId match { - case InternalId.TopicSubId(topicSubId) => - ThriftMultiEmbeddingId( - toMultiEmbeddingType(simClustersEmbeddingId.embeddingType), - simClustersEmbeddingId.modelVersion, - InternalId.TopicId(TopicId(topicSubId.entityId, topicSubId.language, topicSubId.country)) - ) - - case _ => - throw new IllegalArgumentException( - s"Invalid SimClustersEmbeddingId InternalId type, $simClustersEmbeddingId") - } - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/BUILD b/src/scala/com/twitter/simclusters_v2/common/clustering/BUILD deleted file mode 100644 index f394e109a..000000000 --- a/src/scala/com/twitter/simclusters_v2/common/clustering/BUILD +++ /dev/null @@ -1,11 +0,0 @@ -scala_library( - compiler_option_sets = ["fatal_warnings"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "eventdetection/common/src/main/java/com/twitter/eventdetection/common/louvain", - "eventdetection/common/src/main/java/com/twitter/eventdetection/common/model", - "src/java/com/twitter/sbf/graph", - "src/scala/com/twitter/simclusters_v2/scalding/common", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/BUILD.docx b/src/scala/com/twitter/simclusters_v2/common/clustering/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..a179ef5910efdbd6bd01e272661ce17602e2718c GIT binary patch literal 36823 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 embedding. - * - * @return UserId of the member chosen as representative. - */ - def selectClusterRepresentative( - cluster: Set[NeighborWithWeights], - embeddings: Map[UserId, T] - ): UserId - -} - -object ClusterRepresentativeSelectionStatistics { - - // Statistics, to be imported where recorded. - val StatClusterRepresentativeSelectionTime = "cluster_representative_selection_total_time_ms" -} diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/ClusteringMethod.docx b/src/scala/com/twitter/simclusters_v2/common/clustering/ClusteringMethod.docx new file mode 100644 index 0000000000000000000000000000000000000000..bfec38a5d21f32e44e592c42fb265fe1f566982a GIT binary patch literal 37317 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, the larger, more similar), given two embeddings - * @tparam T embedding type. e.g. SimClustersEmbedding - * - * @return A set of sets of entity IDs, each set representing a distinct cluster. - */ - def cluster[T]( - embeddings: Map[Long, T], - similarityFn: (T, T) => Double, - recordStatCallback: (String, Long) => Unit = (_, _) => () - ): Set[Set[Long]] - -} - -object ClusteringStatistics { - - // Statistics, to be imported where recorded. - val StatSimilarityGraphTotalBuildTime = "similarity_graph_total_build_time_ms" - val StatClusteringAlgorithmRunTime = "clustering_algorithm_total_run_time_ms" - val StatMedoidSelectionTime = "medoid_selection_total_time_ms" - val StatComputedSimilarityBeforeFilter = "computed_similarity_before_filter" - -} diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/ConnectedComponentsClusteringMethod.docx b/src/scala/com/twitter/simclusters_v2/common/clustering/ConnectedComponentsClusteringMethod.docx new file mode 100644 index 0000000000000000000000000000000000000000..a43ee39f378ef75868d4586623c295f88f408a6c GIT binary patch literal 37743 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 z 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/ConnectedComponentsClusteringMethod.scala b/src/scala/com/twitter/simclusters_v2/common/clustering/ConnectedComponentsClusteringMethod.scala deleted file mode 100644 index 07f785f24..000000000 --- a/src/scala/com/twitter/simclusters_v2/common/clustering/ConnectedComponentsClusteringMethod.scala +++ /dev/null @@ -1,67 +0,0 @@ -package com.twitter.simclusters_v2.common.clustering - -import com.twitter.sbf.graph.ConnectedComponents -import com.twitter.sbf.graph.Graph -import com.twitter.util.Stopwatch -import it.unimi.dsi.fastutil.ints.IntSet -import scala.collection.SortedMap -import scala.jdk.CollectionConverters._ - -/** - * Aggregate entities into clusters such that a cluster contains all embeddings with a similarity - * above a configurable threshold to any other embedding. - * - * @param similarityThreshold: When building the edges between entities, edges with weight - * less than or equal to this threshold will be filtered out. - */ -class ConnectedComponentsClusteringMethod( - similarityThreshold: Double) - extends ClusteringMethod { - - import ClusteringStatistics._ - - def cluster[T]( - embeddings: Map[Long, T], - similarityFn: (T, T) => Double, - recordStatCallback: (String, Long) => Unit = (_, _) => () - ): Set[Set[Long]] = { - - val timeSinceGraphBuildStart = Stopwatch.start() - // com.twitter.sbf.graph.Graph expects neighbors to be sorted in ascending order. - val sourcesById = SortedMap(embeddings.zipWithIndex.map { - case (source, idx) => idx -> source - }.toSeq: _*) - - val neighbours = sourcesById.map { - case (srcIdx, (_, src)) => - sourcesById - .collect { - case (dstIdx, (_, dst)) if srcIdx != dstIdx => // avoid self-edges - val similarity = similarityFn(src, dst) - recordStatCallback( - StatComputedSimilarityBeforeFilter, - (similarity * 100).toLong // preserve up to two decimal points - ) - if (similarity > similarityThreshold) - Some(dstIdx) - else None - }.flatten.toArray - }.toArray - - recordStatCallback(StatSimilarityGraphTotalBuildTime, timeSinceGraphBuildStart().inMilliseconds) - - val timeSinceClusteringAlgRunStart = Stopwatch.start() - val nEdges = neighbours.map(_.length).sum / 2 // Graph expects count of undirected edges - val graph = new Graph(sourcesById.size, nEdges, neighbours) - - val clusters = ConnectedComponents - .connectedComponents(graph).asScala.toSet - .map { i: IntSet => i.asScala.map(sourcesById(_)._1).toSet } - - recordStatCallback( - StatClusteringAlgorithmRunTime, - timeSinceClusteringAlgRunStart().inMilliseconds) - - clusters - } -} diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/LargestDimensionClusteringMethod.docx b/src/scala/com/twitter/simclusters_v2/common/clustering/LargestDimensionClusteringMethod.docx new file mode 100644 index 0000000000000000000000000000000000000000..ff8f7931a088e6c147faef194c4ac881446a2dde GIT binary patch literal 37314 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 Double, - recordStatCallback: (String, Long) => Unit - ): Set[Set[Long]] = { - - // rely on clustering by connected component. - // similarityThreshold=0.1 because it's larger than 0.0 (similarityFn returns 0.0 if two embeddings - // don't share the largest dimension. - new ConnectedComponentsClusteringMethod(similarityThreshold = 0.1) - .cluster(embeddings, similarityFn, recordStatCallback) - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/LouvainClusteringMethod.docx b/src/scala/com/twitter/simclusters_v2/common/clustering/LouvainClusteringMethod.docx new file mode 100644 index 0000000000000000000000000000000000000000..e54c7ad6760a84d785cdb3012fec134267aff2f9 GIT binary patch literal 38973 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/LouvainClusteringMethod.scala b/src/scala/com/twitter/simclusters_v2/common/clustering/LouvainClusteringMethod.scala deleted file mode 100644 index c3337119b..000000000 --- a/src/scala/com/twitter/simclusters_v2/common/clustering/LouvainClusteringMethod.scala +++ /dev/null @@ -1,236 +0,0 @@ -package com.twitter.simclusters_v2.common.clustering - -import com.twitter.eventdetection.common.louvain.LouvainDriver -import com.twitter.eventdetection.common.louvain.NetworkFactory -import com.twitter.eventdetection.common.model.Entity -import com.twitter.eventdetection.common.model.NetworkInput -import com.twitter.eventdetection.common.model.TextEntityValue -import com.twitter.util.Stopwatch -import scala.collection.JavaConverters._ -import scala.math.max - -/** - * Groups entities by the Louvain clustering method. - * @param similarityThreshold: When building the edges between entities, edges with weight - * less than or equal to this threshold will be filtered out. - * @param appliedResolutionFactor: If present, will be used to multiply the applied resolution - * parameter of the Louvain method by this factor. - * Note that the DEFAULT_MAX_RESOLUTION will not be applied. - */ -class LouvainClusteringMethod( - similarityThreshold: Double, - appliedResolutionFactor: Option[Double]) - extends ClusteringMethod { - - import ClusteringStatistics._ - - def cluster[T]( - embeddings: Map[Long, T], - similarityFn: (T, T) => Double, - recordStatCallback: (String, Long) => Unit = (_, _) => () - ): Set[Set[Long]] = { - - // 1. Build the graph on which to run Louvain: - // - Weigh edges by the similarity between the 2 embeddings, - // - Filter out edges with weight <= threshold. - val timeSinceGraphBuildStart = Stopwatch.start() - val edges: Seq[((Long, Long), Double)] = embeddings.toSeq - .combinations(2) - .map { pair: Seq[(Long, T)] => // pair of 2 - val (user1, embedding1) = pair.head - val (user2, embedding2) = pair(1) - val similarity = similarityFn(embedding1, embedding2) - - recordStatCallback( - StatComputedSimilarityBeforeFilter, - (similarity * 100).toLong // preserve up to two decimal places - ) - - ((user1, user2), similarity) - } - .filter(_._2 > similarityThreshold) - .toSeq - - recordStatCallback(StatSimilarityGraphTotalBuildTime, timeSinceGraphBuildStart().inMilliseconds) - - // check if some entities do not have any incoming / outgoing edge - // these are size-1 clusters (i.e. their own) - val individualClusters: Set[Long] = embeddings.keySet -- edges.flatMap { - case ((user1, user2), _) => Set(user1, user2) - }.toSet - - // 2. LouvainDriver uses "Entity" as input, so build 2 mappings - // - Long (entity id) -> Entity - // - Entity -> Long (entity id) - val embeddingIdToEntity: Map[Long, Entity] = embeddings.map { - case (id, _) => id -> Entity(TextEntityValue(id.toString, Some(id.toString)), None) - } - val entityToEmbeddingId: Map[Entity, Long] = embeddingIdToEntity.map { - case (id, e) => e -> id - } - - // 3. Create the list of NetworkInput on which to run LouvainDriver - val networkInputList = edges - .map { - case ((fromUserId: Long, toUserId: Long), weight: Double) => - new NetworkInput(embeddingIdToEntity(fromUserId), embeddingIdToEntity(toUserId), weight) - }.toList.asJava - - val timeSinceClusteringAlgRunStart = Stopwatch.start() - val networkDictionary = NetworkFactory.buildDictionary(networkInputList) - val network = NetworkFactory.buildNetwork(networkInputList, networkDictionary) - - if (networkInputList.size() == 0) { - // handle case if no edge at all (only one entity or all entities are too far apart) - embeddings.keySet.map(e => Set(e)) - } else { - // 4. Run clustering algorithm - val clusteredIds = appliedResolutionFactor match { - case Some(res) => - LouvainDriver.clusterAppliedResolutionFactor(network, networkDictionary, res) - case None => LouvainDriver.cluster(network, networkDictionary) - } - - recordStatCallback( - StatClusteringAlgorithmRunTime, - timeSinceClusteringAlgRunStart().inMilliseconds) - - // 5. Post-processing - val atLeast2MembersClusters: Set[Set[Long]] = clusteredIds.asScala - .groupBy(_._2) - .mapValues(_.map { case (e, _) => entityToEmbeddingId(e) }.toSet) - .values.toSet - - atLeast2MembersClusters ++ individualClusters.map { e => Set(e) } - - } - } - - def clusterWithSilhouette[T]( - embeddings: Map[Long, T], - similarityFn: (T, T) => Double, - similarityFnForSil: (T, T) => Double, - recordStatCallback: (String, Long) => Unit = (_, _) => () - ): (Set[Set[Long]], Set[Set[(Long, Double)]]) = { - - // 1. Build the graph on which to run Louvain: - // - Weigh edges by the similarity between the 2 embeddings, - // - Filter out edges with weight <= threshold. - val timeSinceGraphBuildStart = Stopwatch.start() - val edgesSimilarityMap = collection.mutable.Map[(Long, Long), Double]() - - val edges: Seq[((Long, Long), Double)] = embeddings.toSeq - .combinations(2) - .map { pair: Seq[(Long, T)] => // pair of 2 - val (user1, embedding1) = pair.head - val (user2, embedding2) = pair(1) - val similarity = similarityFn(embedding1, embedding2) - val similarityForSil = similarityFnForSil(embedding1, embedding2) - edgesSimilarityMap.put((user1, user2), similarityForSil) - edgesSimilarityMap.put((user2, user1), similarityForSil) - - recordStatCallback( - StatComputedSimilarityBeforeFilter, - (similarity * 100).toLong // preserve up to two decimal places - ) - - ((user1, user2), similarity) - } - .filter(_._2 > similarityThreshold) - .toSeq - - recordStatCallback(StatSimilarityGraphTotalBuildTime, timeSinceGraphBuildStart().inMilliseconds) - - // check if some entities do not have any incoming / outgoing edge - // these are size-1 clusters (i.e. their own) - val individualClusters: Set[Long] = embeddings.keySet -- edges.flatMap { - case ((user1, user2), _) => Set(user1, user2) - }.toSet - - // 2. LouvainDriver uses "Entity" as input, so build 2 mappings - // - Long (entity id) -> Entity - // - Entity -> Long (entity id) - val embeddingIdToEntity: Map[Long, Entity] = embeddings.map { - case (id, _) => id -> Entity(TextEntityValue(id.toString, Some(id.toString)), None) - } - val entityToEmbeddingId: Map[Entity, Long] = embeddingIdToEntity.map { - case (id, e) => e -> id - } - - // 3. Create the list of NetworkInput on which to run LouvainDriver - val networkInputList = edges - .map { - case ((fromUserId: Long, toUserId: Long), weight: Double) => - new NetworkInput(embeddingIdToEntity(fromUserId), embeddingIdToEntity(toUserId), weight) - }.toList.asJava - - val timeSinceClusteringAlgRunStart = Stopwatch.start() - val networkDictionary = NetworkFactory.buildDictionary(networkInputList) - val network = NetworkFactory.buildNetwork(networkInputList, networkDictionary) - - val clusters = if (networkInputList.size() == 0) { - // handle case if no edge at all (only one entity or all entities are too far apart) - embeddings.keySet.map(e => Set(e)) - } else { - // 4. Run clustering algorithm - val clusteredIds = appliedResolutionFactor match { - case Some(res) => - LouvainDriver.clusterAppliedResolutionFactor(network, networkDictionary, res) - case None => LouvainDriver.cluster(network, networkDictionary) - } - - recordStatCallback( - StatClusteringAlgorithmRunTime, - timeSinceClusteringAlgRunStart().inMilliseconds) - - // 5. Post-processing - val atLeast2MembersClusters: Set[Set[Long]] = clusteredIds.asScala - .groupBy(_._2) - .mapValues(_.map { case (e, _) => entityToEmbeddingId(e) }.toSet) - .values.toSet - - atLeast2MembersClusters ++ individualClusters.map { e => Set(e) } - - } - - // Calculate silhouette metrics - val contactIdWithSilhouette = clusters.map { - case cluster => - val otherClusters = clusters - cluster - - cluster.map { - case contactId => - if (otherClusters.isEmpty) { - (contactId, 0.0) - } else { - val otherSameClusterContacts = cluster - contactId - - if (otherSameClusterContacts.isEmpty) { - (contactId, 0.0) - } else { - // calculate similarity of given userId with all other users in the same cluster - val a_i = otherSameClusterContacts.map { - case sameClusterContact => - edgesSimilarityMap((contactId, sameClusterContact)) - }.sum / otherSameClusterContacts.size - - // calculate similarity of given userId to all other clusters, find the best nearest cluster - val b_i = otherClusters.map { - case otherCluster => - otherCluster.map { - case otherClusterContact => - edgesSimilarityMap((contactId, otherClusterContact)) - }.sum / otherCluster.size - }.max - - // silhouette (value) of one userId i - val s_i = (a_i - b_i) / max(a_i, b_i) - (contactId, s_i) - } - } - } - } - - (clusters, contactIdWithSilhouette) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/MaxFavScoreRepresentativeSelectionMethod.docx b/src/scala/com/twitter/simclusters_v2/common/clustering/MaxFavScoreRepresentativeSelectionMethod.docx new file mode 100644 index 0000000000000000000000000000000000000000..159763aff49c99cd01582aab8755c6ac6ea89c6b GIT binary patch literal 37015 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 embedding. - */ - def selectClusterRepresentative( - cluster: Set[NeighborWithWeights], - embeddings: Map[UserId, T], - ): UserId = { - val key = cluster.maxBy { x: NeighborWithWeights => x.favScoreHalfLife100Days.getOrElse(0.0) } - key.neighborId - } -} diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/MedoidRepresentativeSelectionMethod.docx b/src/scala/com/twitter/simclusters_v2/common/clustering/MedoidRepresentativeSelectionMethod.docx new file mode 100644 index 0000000000000000000000000000000000000000..de703f16bfcceb7a0ec4240e438e00a89e0aff97 GIT binary patch literal 37094 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

7*a5FF$e>e>{&S* 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 Double) - extends ClusterRepresentativeSelectionMethod[T] { - - /** - * Identify the medoid of a cluster and return it. - * - * @param cluster A set of NeighborWithWeights. - * @param embeddings A map of producer ID -> embedding. - */ - def selectClusterRepresentative( - cluster: Set[NeighborWithWeights], - embeddings: Map[UserId, T], - ): UserId = { - val key = cluster.maxBy { - id1 => // maxBy because we use similarity, which gets larger as we get closer. - val v = embeddings(id1.neighborId) - cluster - .map(id2 => producerProducerSimilarityFn(v, embeddings(id2.neighborId))).sum - } - key.neighborId - } -} diff --git a/src/scala/com/twitter/simclusters_v2/common/clustering/SimilarityFunctions.docx b/src/scala/com/twitter/simclusters_v2/common/clustering/SimilarityFunctions.docx new file mode 100644 index 0000000000000000000000000000000000000000..3f0d64cf54accfb5d5c01c0b5c957ab56955bf05 GIT binary patch literal 37017 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 Double = - (e1, e2) => e1.cosineSimilarity(e2) - - def simClustersMatchingLargestDimension: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = (e1, e2) => { - val doesMatchLargestDimension: Boolean = e1 - .topClusterIds(1) - .exists { id1 => - e2.topClusterIds(1).contains(id1) - } - - if (doesMatchLargestDimension) 1.0 - else 0.0 - } - - def simClustersFuzzyJaccardSimilarity: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = (e1, e2) => { - e1.fuzzyJaccardSimilarity(e2) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/common/ml/BUILD b/src/scala/com/twitter/simclusters_v2/common/ml/BUILD deleted file mode 100644 index e71aa0c59..000000000 --- a/src/scala/com/twitter/simclusters_v2/common/ml/BUILD +++ /dev/null @@ -1,12 +0,0 @@ -# This package/target is separate from other simclusters common packages because the ml/api dep is -# large (350MB+). Having it as a separate target means that we can avoid bundling it with targets -# that do not need it. -scala_library( - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "src/java/com/twitter/ml/api:api-base", - "src/scala/com/twitter/ml/api/util", - "src/scala/com/twitter/simclusters_v2/common", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/common/ml/BUILD.docx b/src/scala/com/twitter/simclusters_v2/common/ml/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..2f28215009a6b691a60fc307fa17568f1917a44b GIT binary patch literal 36900 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/common/ml/SimClustersEmbeddingAdapter.docx b/src/scala/com/twitter/simclusters_v2/common/ml/SimClustersEmbeddingAdapter.docx new file mode 100644 index 0000000000000000000000000000000000000000..26e7d536f375693fbb1ae0b88b527a804cc69f89 GIT binary patch literal 37094 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 - (clusterId.toString, score) - }.toMap - - new DataRecord().setFeatureValue(embeddingFeature, embeddingMap) - } -} - -class NormalizedSimClustersEmbeddingAdapter( - embeddingFeature: SparseContinuous, - normFeature: Continuous) - extends IRecordOneToOneAdapter[SimClustersEmbedding] { - - override def getFeatureContext: FeatureContext = new FeatureContext(embeddingFeature, normFeature) - - override def adaptToDataRecord(embedding: SimClustersEmbedding): DataRecord = { - - val normalizedEmbedding = Map( - embedding.sortedClusterIds.map(_.toString).zip(embedding.normalizedSortedScores): _*) - - val dataRecord = new DataRecord().setFeatureValue(embeddingFeature, normalizedEmbedding) - dataRecord.setFeatureValue(normFeature, embedding.l2norm) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/common/package.docx b/src/scala/com/twitter/simclusters_v2/common/package.docx new file mode 100644 index 0000000000000000000000000000000000000000..f143a5289607eb3c08461aebb63e8b51893d8df3 GIT binary patch literal 36843 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 hw+9jWn_7{w7;5VE7qu`=@vq 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/AdhocSources.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/AdhocSources.scala deleted file mode 100644 index 63098e137..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/AdhocSources.scala +++ /dev/null @@ -1,164 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources - -import com.twitter.bijection.scrooge.BinaryScalaCodec -import com.twitter.bijection.scrooge.CompactScalaCodec -import com.twitter.bijection.Bufferable -import com.twitter.bijection.Injection -import com.twitter.hermit.candidate.thriftscala.Candidates -import com.twitter.scalding.DateRange -import com.twitter.scalding.commons.source.VersionedKeyValSource -import com.twitter.scalding_internal.source.lzo_scrooge.DailySuffixMostRecentLzoScrooge -import com.twitter.scalding_internal.source.lzo_scrooge.FixedPathLzoScrooge -import com.twitter.scalding_internal.source.lzo_scrooge.HourlySuffixMostRecentLzoScrooge -import com.twitter.simclusters_v2.thriftscala._ - -case class EdgeWithDecayedWtsFixedPathSource(path: String) - extends FixedPathLzoScrooge[EdgeWithDecayedWeights](path, EdgeWithDecayedWeights) - -case class UserAndNeighborsFixedPathSource(path: String) - extends FixedPathLzoScrooge[UserAndNeighbors](path, UserAndNeighbors) - -case class NormsAndCountsFixedPathSource(path: String) - extends FixedPathLzoScrooge[NormsAndCounts](path, NormsAndCounts) - -case class UserToInterestedInClustersFixedPathSource(path: String) - extends FixedPathLzoScrooge[UserToInterestedInClusters](path, UserToInterestedInClusters) - -case class TimelineDataExtractorFixedPathSource(path: String) - extends FixedPathLzoScrooge[ReferenceTweets](path, ReferenceTweets) - -case class TweetClusterScoresHourlySuffixSource(path: String, override val dateRange: DateRange) - extends HourlySuffixMostRecentLzoScrooge[TweetAndClusterScores](path, dateRange) - -case class TweetTopKClustersHourlySuffixSource(path: String, override val dateRange: DateRange) - extends HourlySuffixMostRecentLzoScrooge[TweetTopKClustersWithScores]( - path, - dateRange - ) - -case class ClusterTopKTweetsHourlySuffixSource(path: String, override val dateRange: DateRange) - extends HourlySuffixMostRecentLzoScrooge[ClusterTopKTweetsWithScores]( - path, - dateRange - ) - -case class TweetSimilarityUnhydratedPairsSource(path: String, override val dateRange: DateRange) - extends DailySuffixMostRecentLzoScrooge[LabelledTweetPairs]( - path, - dateRange - ) - -case class WTFCandidatesSource(path: String) - extends FixedPathLzoScrooge[Candidates](path, Candidates) - -case class EmbeddingsLiteSource(path: String) - extends FixedPathLzoScrooge[EmbeddingsLite](path, EmbeddingsLite) - -object AdhocKeyValSources { - def interestedInSource(path: String): VersionedKeyValSource[Long, ClustersUserIsInterestedIn] = { - implicit val keyInject: Injection[Long, Array[Byte]] = Injection.long2BigEndian - implicit val valInject: Injection[ClustersUserIsInterestedIn, Array[Byte]] = - CompactScalaCodec(ClustersUserIsInterestedIn) - VersionedKeyValSource[Long, ClustersUserIsInterestedIn](path) - } - - def clusterDetailsSource(path: String): VersionedKeyValSource[(String, Int), ClusterDetails] = { - implicit val keyInject: Injection[(String, Int), Array[Byte]] = - Bufferable.injectionOf[(String, Int)] - implicit val valInject: Injection[ClusterDetails, Array[Byte]] = - CompactScalaCodec(ClusterDetails) - VersionedKeyValSource[(String, Int), ClusterDetails](path) - } - - def bipartiteQualitySource( - path: String - ): VersionedKeyValSource[(String, Int), BipartiteClusterQuality] = { - implicit val keyInject: Injection[(String, Int), Array[Byte]] = - Bufferable.injectionOf[(String, Int)] - implicit val valInject: Injection[BipartiteClusterQuality, Array[Byte]] = - CompactScalaCodec(BipartiteClusterQuality) - VersionedKeyValSource[(String, Int), BipartiteClusterQuality](path) - } - - def entityToClustersSource( - path: String - ): VersionedKeyValSource[SimClustersEmbeddingId, SimClustersEmbedding] = { - implicit val keyInject: Injection[SimClustersEmbeddingId, Array[Byte]] = - BinaryScalaCodec(SimClustersEmbeddingId) - implicit val valInject: Injection[SimClustersEmbedding, Array[Byte]] = - BinaryScalaCodec(SimClustersEmbedding) - VersionedKeyValSource[SimClustersEmbeddingId, SimClustersEmbedding](path) - } - - def clusterToEntitiesSource( - path: String - ): VersionedKeyValSource[SimClustersEmbeddingId, InternalIdEmbedding] = { - implicit val keyInject: Injection[SimClustersEmbeddingId, Array[Byte]] = BinaryScalaCodec( - SimClustersEmbeddingId) - implicit val valInject: Injection[InternalIdEmbedding, Array[Byte]] = - BinaryScalaCodec(InternalIdEmbedding) - VersionedKeyValSource[SimClustersEmbeddingId, InternalIdEmbedding](path) - } - - // For storing producer-simclusters embeddings - def topProducerToClusterEmbeddingsSource( - path: String - ): VersionedKeyValSource[Long, TopSimClustersWithScore] = { - implicit val keyInject: Injection[Long, Array[Byte]] = Injection.long2BigEndian - implicit val valInject: Injection[TopSimClustersWithScore, Array[Byte]] = - CompactScalaCodec(TopSimClustersWithScore) - VersionedKeyValSource[Long, TopSimClustersWithScore](path) - } - - // For storing producer-simclusters embeddings - def topClusterEmbeddingsToProducerSource( - path: String - ): VersionedKeyValSource[PersistedFullClusterId, TopProducersWithScore] = { - implicit val keyInject: Injection[PersistedFullClusterId, Array[Byte]] = - CompactScalaCodec(PersistedFullClusterId) - implicit val valInject: Injection[TopProducersWithScore, Array[Byte]] = - CompactScalaCodec(TopProducersWithScore) - VersionedKeyValSource[PersistedFullClusterId, TopProducersWithScore](path) - } - - def userToInferredEntitiesSource( - path: String - ): VersionedKeyValSource[Long, SimClustersInferredEntities] = { - implicit val keyInject: Injection[Long, Array[Byte]] = Injection.long2BigEndian - implicit val valInject: Injection[SimClustersInferredEntities, Array[Byte]] = - CompactScalaCodec(SimClustersInferredEntities) - VersionedKeyValSource[Long, SimClustersInferredEntities](path) - } - - def knownForAdhocSource(path: String): VersionedKeyValSource[Long, ClustersUserIsKnownFor] = { - implicit val keyInject: Injection[Long, Array[Byte]] = Injection.long2BigEndian - implicit val valInject: Injection[ClustersUserIsKnownFor, Array[Byte]] = - CompactScalaCodec(ClustersUserIsKnownFor) - VersionedKeyValSource[Long, ClustersUserIsKnownFor](path) - } - - def knownForSBFResultsDevelSource( - path: String - ): VersionedKeyValSource[Long, Array[(Int, Float)]] = { - implicit val keyInject: Injection[Long, Array[Byte]] = Injection.long2BigEndian - implicit val valInject: Injection[Array[(Int, Float)], Array[Byte]] = - Bufferable.injectionOf[Array[(Int, Float)]] - VersionedKeyValSource[Long, Array[(Int, Float)]](path) - } - - // injection to store adjlist in the mapped indices space for users - def intermediateSBFResultsDevelSource( - path: String - ): VersionedKeyValSource[Int, List[(Int, Float)]] = { - implicit val keyInject: Injection[Int, Array[Byte]] = Injection.int2BigEndian - implicit val valInject: Injection[List[(Int, Float)], Array[Byte]] = - Bufferable.injectionOf[List[(Int, Float)]] - VersionedKeyValSource[Int, List[(Int, Float)]](path) - } - - def mappedIndicesDevelSource(path: String): VersionedKeyValSource[Int, Long] = { - implicit val keyInject: Injection[Int, Array[Byte]] = Injection.int2BigEndian - implicit val valInject: Injection[Long, Array[Byte]] = Injection.long2BigEndian - VersionedKeyValSource[Int, Long](path) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/BUILD b/src/scala/com/twitter/simclusters_v2/hdfs_sources/BUILD deleted file mode 100644 index 4cddde193..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/BUILD +++ /dev/null @@ -1,2216 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - ":data_sources", - "3rdparty/src/jvm/com/twitter/scalding:core", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/simclusters_v2/common", - "src/thrift/com/twitter/hermit/candidate:hermit-candidate-scala", - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - "src/thrift/com/twitter/wtf/entity_real_graph:entity_real_graph-thrift-scala", - ], -) - -scala_library( - name = "data_sources", - sources = [], - description = "DAL datasets we wish to expose externally", - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - ":ads_fav_based_simclusters_cluster_to_tweet_index-scala", - ":ads_fav_click_based_simclusters_cluster_to_tweet_index-scala", - ":aggregatable_producer_simclusters_embeddings_by_fav_score-scala", - ":aggregatable_producer_simclusters_embeddings_by_fav_score_2020-scala", - ":aggregatable_producer_simclusters_embeddings_by_fav_score_2020_thrift-scala", - ":aggregatable_producer_simclusters_embeddings_by_fav_score_thrift-scala", - ":aggregatable_producer_simclusters_embeddings_by_follow_score_2020-scala", - ":aggregatable_producer_simclusters_embeddings_by_follow_score_2020_thrift-scala", - ":aggregatable_producer_simclusters_embeddings_by_log_fav_score-scala", - ":aggregatable_producer_simclusters_embeddings_by_log_fav_score_2020-scala", - ":aggregatable_producer_simclusters_embeddings_by_log_fav_score_2020_thrift-scala", - ":aggregatable_producer_simclusters_embeddings_by_log_fav_score_relaxed_fav_engagement_threshold_2020-scala", - ":aggregatable_producer_simclusters_embeddings_by_log_fav_score_relaxed_fav_engagement_threshold_2020_thrift-scala", - ":aggregatable_producer_simclusters_embeddings_by_log_fav_score_thrift-scala", - ":clusters_members_connected_components_ape_similarity-scala", - ":clusters_members_largest_dim_ape_similarity-scala", - ":clusters_members_largest_dim_ape_similarity_2_day_update-scala", - ":clusters_members_louvain_ape_similarity-scala", - ":co_engagement_top_k_similar_tweets-scala", - ":explore_mbcg_user_embeddings_kv-scala", - ":fav_based_evergreen_content_simclusters_cluster_to_tweet_index-scala", - ":fav_based_simclusters_cluster_to_tweet_index-scala", - ":fav_based_video_simclusters_cluster_to_tweet_index-scala", - ":fav_inferred_language_tfg_topic_embeddings-scala", - ":fav_tfg_topic_embeddings-scala", - ":fav_tfg_topic_embeddings_2020-scala", - ":fav_tfg_topic_embeddings_2020_parquet-scala", - ":fav_tfg_topic_embeddings_parquet-scala", - ":full_multi_type_graph-scala", - ":geopopular_top_tweet_impressed_topics-scala", - ":hashtag_simclusters_embeddings_updated-scala", - ":interested_in_twice_by_largest_dim-scala", - ":interested_in_twice_by_largest_dim_2_day_update-scala", - ":interested_in_twice_by_largest_dim_fav_score-scala", - ":interested_in_twice_connected_components-scala", - ":interested_in_twice_louvain-scala", - ":log_fav_reverse_index_semantic_core_per_language_simclusters_embeddings-scala", - ":log_fav_semantic_core_per_language_simclusters_embeddings-scala", - ":log_fav_tfg_topic_embeddings-scala", - ":log_fav_tfg_topic_embeddings_parquet-scala", - ":multi_type_graph_for_top_k_right_nodes_thrift_50_m_scio-scala", - ":multi_type_graph_for_top_k_right_nodes_thrift_scio-scala", - ":multi_type_simclusters_right_node_to_clusters_thrift_50_m-scala", - ":multi_type_simclusters_right_node_to_clusters_thrift_fav_90_p_20_m-scala", - ":offline_cluster_top_media_tweets_20M_145K_2020-scala", - ":offline_tweet_recommendations_from_interested_in_20M_145K_2020-scala", - ":offline_tweet_recommendations_from_interested_in_20M_145K_2020_HL_0_EL_15-scala", - ":offline_tweet_recommendations_from_interested_in_20M_145K_2020_HL_2_EL_15-scala", - ":offline_tweet_recommendations_from_interested_in_20M_145K_2020_HL_2_EL_50-scala", - ":offline_tweet_recommendations_from_interested_in_20M_145K_2020_HL_8_EL_50-scala", - ":offline_tweet_recommendations_from_mts_consumer_embeddings-scala", - ":producer_norms_and_counts-scala", - ":producer_top_k_simcluster_embeddings_by_fav_score-scala", - ":producer_top_k_simcluster_embeddings_by_fav_score_2020-scala", - ":producer_top_k_simcluster_embeddings_by_fav_score_updated-scala", - ":producer_top_k_simcluster_embeddings_by_follow_score-scala", - ":producer_top_k_simcluster_embeddings_by_follow_score_2020-scala", - ":producer_top_k_simcluster_embeddings_by_follow_score_updated-scala", - ":push_open_based_simclusters_cluster_to_tweet_index-scala", - ":reply_based_simclusters_cluster_to_tweet_index-scala", - ":retweet_based_simclusters_cluster_to_tweet_index-scala", - ":reverse_index_hashtag_simclusters_embeddings_updated-scala", - ":reverse_index_semantic_core_per_language_simclusters_embeddings-scala", - ":reverse_index_semantic_core_simclusters_embeddings-scala", - ":reverse_index_semantic_core_simclusters_embeddings_2020-scala", - ":reverse_index_semantic_core_simclusters_embeddings_updated-scala", - ":right_node_cosine_similarity_scio-scala", - ":right_node_sim_hash_scio-scala", - ":rux_faved_top_k_tweets-scala", - ":semantic_core_embeddings_from_producer-scala", - ":semantic_core_per_language_simclusters_embeddings-scala", - ":semantic_core_simclusters_embeddings-scala", - ":semantic_core_simclusters_embeddings_2020-scala", - ":semantic_core_simclusters_embeddings_updated-scala", - ":simcluster_embedding_top_k_producers_by_fav_score-scala", - ":simcluster_embedding_top_k_producers_by_fav_score_2020-scala", - ":simcluster_embedding_top_k_producers_by_fav_score_updated-scala", - ":simcluster_embedding_top_k_producers_by_follow_score-scala", - ":simcluster_embedding_top_k_producers_by_follow_score_2020-scala", - ":simcluster_embedding_top_k_producers_by_follow_score_updated-scala", - ":simclusters_inferred_entities_from_interested_in-scala", - ":simclusters_inferred_entities_from_interested_in_keyed_by_cluster-scala", - ":simclusters_inferred_entities_from_known_for-scala", - ":simclusters_offline_cluster_top_k_tweets-scala", - ":simclusters_offline_tweet_cluster_scores-scala", - ":simclusters_offline_tweet_top_k_clusters-scala", - ":simclusters_v2_cluster_details-scala", - ":simclusters_v2_cluster_details_20m_145k_2020-scala", - ":simclusters_v2_cluster_details_20m_145k_updated-scala", - ":simclusters_v2_cluster_details_lite-scala", - ":simclusters_v2_cluster_details_lite_20m_145k_2020-scala", - ":simclusters_v2_cluster_details_lite_20m_145k_updated-scala", - ":simclusters_v2_embeddings_lite-scala", - ":simclusters_v2_global_language_embedding-scala", - ":simclusters_v2_global_language_embedding_thrift-scala", - ":simclusters_v2_interested_in-scala", - ":simclusters_v2_interested_in_20M_145K_2020-scala", - ":simclusters_v2_interested_in_20M_145K_updated-scala", - ":simclusters_v2_interested_in_from_aggregatable_producer_embeddings_20M_145K_2020-scala", - ":simclusters_v2_interested_in_from_producer_embeddings_20M_145K_updated-scala", - ":simclusters_v2_interested_in_lite_20M_145K_2020-scala", - ":simclusters_v2_known_for_20M_145K_2020-scala", - ":simclusters_v2_known_for_20M_145K_2020_thrift-scala", - ":simclusters_v2_known_for_20M_145K_dec11-scala", - ":simclusters_v2_known_for_20M_145K_updated-scala", - ":simclusters_v2_known_for_20M_145K_updated_thrift-scala", - ":simclusters_v2_raw_interested_in_20M_145K_2020-scala", - ":simclusters_v2_raw_interested_in_20M_145K_dec11-scala", - ":simclusters_v2_raw_interested_in_20M_145K_updated-scala", - ":simclusters_v2_raw_interested_in_lite_20M_145K_2020-scala", - ":simclusters_v2_raw_known_for_20M_145K_2020-scala", - ":simclusters_v2_raw_known_for_20M_145K_dec11-scala", - ":simclusters_v2_raw_known_for_20M_145K_updated-scala", - ":simclusters_v2_user_to_interested_in_20M_145K_2020-scala", - ":simclusters_v2_user_to_interested_in_20M_145K_dec11-scala", - ":simclusters_v2_user_to_interested_in_20M_145K_updated-scala", - ":simclusters_v2_user_to_interested_in_from_aggregatable_producer_embeddings_20M_145K_2020-scala", - ":simclusters_v2_user_to_interested_in_lite_20M_145K_2020-scala", - ":similar_topics_from_topic_follow_graph-scala", - ":similar_users_by_fav_based_producer_embedding-scala", - ":similar_users_by_follow_based_producer_embedding-scala", - ":top_k_right_nouns-scala", - ":top_k_right_nouns_scio-scala", - ":top_locale_topics_for_producer_from_em-scala", - ":top_producers_for_locale_topics_from_topic_follow_graph-scala", - ":topic_top_producers_em-scala", - ":truncated_multi_type_graph-scala", - ":truncated_multi_type_graph_scio-scala", - ":tweet_evaluation_timelines_reference_set-scala", - ":user_topic_weighted_embedding-scala", - ":user_topic_weighted_embedding_parquet-scala", - ":user_user_fav_graph-scala", - ":user_user_graph-scala", - ":user_user_normalized_graph-scala", - ":video_view_based_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/common", - ], -) - -create_datasets( - base_name = "user_user_fav_graph", - java_schema = "com.twitter.simclusters_v2.thriftjava.EdgeWithDecayedWeights", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.EdgeWithDecayedWeights", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "producer_norms_and_counts", - java_schema = "com.twitter.simclusters_v2.thriftjava.NormsAndCounts", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.NormsAndCounts", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "user_user_normalized_graph", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserAndNeighbors", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserAndNeighbors", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "multi_type_simclusters_right_node_to_clusters_thrift_fav_90_p_20_m", - java_schema = "com.twitter.simclusters_v2.thriftjava.RightNodeWithClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.RightNodeWithClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "multi_type_simclusters_right_node_to_clusters_thrift_50_m", - java_schema = "com.twitter.simclusters_v2.thriftjava.RightNodeWithClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.RightNodeWithClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "user_user_graph", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserAndNeighbors", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserAndNeighbors", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -# InterestedIn -create_datasets( - base_name = "simclusters_v2_raw_interested_in_20M_145K_dec11", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_raw_interested_in_20M_145K_updated", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_raw_interested_in_20M_145K_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_raw_interested_in_lite_20M_145K_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "multi_type_graph_for_top_k_right_nodes_thrift_fav_90_p_20_m_scio", - java_schema = "com.twitter.simclusters_v2.thriftjava.MultiTypeGraphEdge", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.MultiTypeGraphEdge", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "multi_type_graph_for_top_k_right_nodes_thrift_50_m_scio", - java_schema = "com.twitter.simclusters_v2.thriftjava.MultiTypeGraphEdge", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.MultiTypeGraphEdge", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_v2_interested_in", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_interested_in_20M_145K_updated", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_interested_in_20M_145K_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_interested_in_lite_20M_145K_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_user_to_interested_in_20M_145K_dec11", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserToInterestedInClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_v2_user_to_interested_in_20M_145K_updated", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserToInterestedInClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_v2_user_to_interested_in_20M_145K_2020", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserToInterestedInClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_v2_user_to_interested_in_lite_20M_145K_2020", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserToInterestedInClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_v2_user_to_interested_in_from_aggregatable_producer_embeddings_20M_145K_2020", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserToInterestedInClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) -# end of InterestedIn - -# KnownFor -create_datasets( - base_name = "simclusters_v2_raw_known_for_20M_145K_dec11", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.KnownForInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsKnownFor", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_raw_known_for_20M_145K_updated", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.KnownForInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsKnownFor", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_raw_known_for_20M_145K_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.KnownForInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsKnownFor", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_known_for_20M_145K_dec11", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.KnownForInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsKnownFor", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_known_for_20M_145K_updated", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.KnownForInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsKnownFor", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_known_for_20M_145K_updated_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserToKnownForClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserToKnownForClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_v2_known_for_20M_145K_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.KnownForInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsKnownFor", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_known_for_20M_145K_2020_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.UserToKnownForClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserToKnownForClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -# end of KnownFor - -create_datasets( - base_name = "simclusters_v2_cluster_details", - key_type = "scala.Tuple2[String, Int]", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterDetailsInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClusterDetails", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_cluster_details_lite", - java_schema = "com.twitter.simclusters_v2.thriftjava.ClusterDetailsLite", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.ClusterDetailsLite", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_v2_embeddings_lite", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.EmbeddingsLite", - segment_type = "snapshot", - tags = ["bazel-compatible"], - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_cluster_details_20m_145k_updated", - key_type = "scala.Tuple2[String, Int]", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterDetailsInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClusterDetails", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_cluster_details_lite_20m_145k_updated", - java_schema = "com.twitter.simclusters_v2.thriftjava.ClusterDetailsLite", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.ClusterDetailsLite", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_v2_cluster_details_20m_145k_2020", - key_type = "scala.Tuple2[String, Int]", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterDetailsInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClusterDetails", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_cluster_details_lite_20m_145k_2020", - java_schema = "com.twitter.simclusters_v2.thriftjava.ClusterDetailsLite", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.ClusterDetailsLite", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "tweet_evaluation_timelines_reference_set", - description = "A Tweet dataset that contains impressed tweets with engagement labels, parsed from Timelines", - java_schema = "com.twitter.simclusters_v2.thriftjava.ReferenceTweets", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.ReferenceTweets", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "semantic_core_simclusters_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "semantic_core_simclusters_embeddings_updated", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "semantic_core_simclusters_embeddings_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "semantic_core_per_language_simclusters_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "log_fav_semantic_core_per_language_simclusters_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "reverse_index_semantic_core_simclusters_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.InternalIdEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.InternalIdEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "reverse_index_semantic_core_simclusters_embeddings_updated", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.InternalIdEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.InternalIdEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "reverse_index_semantic_core_simclusters_embeddings_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.InternalIdEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.InternalIdEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "reverse_index_semantic_core_per_language_simclusters_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.InternalIdEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.InternalIdEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "log_fav_reverse_index_semantic_core_per_language_simclusters_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.InternalIdEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.InternalIdEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "hashtag_simclusters_embeddings_updated", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "fav_tfg_topic_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "fav_tfg_topic_embeddings_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "fav_tfg_topic_embeddings_parquet", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.TfgTopicEmbeddings", - segment_type = "snapshot", - tags = ["bazel-compatible"], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "fav_tfg_topic_embeddings_2020_parquet", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.TfgTopicEmbeddings", - segment_type = "snapshot", - tags = ["bazel-compatible"], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "fav_inferred_language_tfg_topic_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "log_fav_tfg_topic_embeddings", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "log_fav_tfg_topic_embeddings_parquet", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.TfgTopicEmbeddings", - segment_type = "snapshot", - tags = ["bazel-compatible"], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "reverse_index_hashtag_simclusters_embeddings_updated", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.InternalIdEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.InternalIdEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simcluster_embedding_top_k_producers_by_fav_score", - key_type = "com.twitter.simclusters_v2.thriftscala.PersistedFullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.SimClusterEmbeddingTopKProducersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopProducersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simcluster_embedding_top_k_producers_by_fav_score_updated", - key_type = "com.twitter.simclusters_v2.thriftscala.PersistedFullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.SimClusterEmbeddingTopKProducersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopProducersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simcluster_embedding_top_k_producers_by_fav_score_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.PersistedFullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.SimClusterEmbeddingTopKProducersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopProducersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "producer_top_k_simcluster_embeddings_by_fav_score", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerTopKSimClusterEmbeddingsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopSimClustersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "producer_top_k_simcluster_embeddings_by_fav_score_updated", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerTopKSimClusterEmbeddingsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopSimClustersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "producer_top_k_simcluster_embeddings_by_fav_score_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerTopKSimClusterEmbeddingsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopSimClustersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simcluster_embedding_top_k_producers_by_follow_score", - key_type = "com.twitter.simclusters_v2.thriftscala.PersistedFullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.SimClusterEmbeddingTopKProducersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopProducersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simcluster_embedding_top_k_producers_by_follow_score_updated", - key_type = "com.twitter.simclusters_v2.thriftscala.PersistedFullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.SimClusterEmbeddingTopKProducersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopProducersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simcluster_embedding_top_k_producers_by_follow_score_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.PersistedFullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.SimClusterEmbeddingTopKProducersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopProducersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "producer_top_k_simcluster_embeddings_by_follow_score", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerTopKSimClusterEmbeddingsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopSimClustersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "producer_top_k_simcluster_embeddings_by_follow_score_updated", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerTopKSimClusterEmbeddingsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopSimClustersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "producer_top_k_simcluster_embeddings_by_follow_score_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerTopKSimClusterEmbeddingsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopSimClustersWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "similar_users_by_fav_based_producer_embedding", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.SimilarUsersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.hermit.candidate.thriftscala.Candidates", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "similar_users_by_follow_based_producer_embedding", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.SimilarUsersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.hermit.candidate.thriftscala.Candidates", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_log_fav_score", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerSimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_log_fav_score_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerSimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_follow_score_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerSimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_log_fav_score_relaxed_fav_engagement_threshold_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerSimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_fav_score", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerSimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_fav_score_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ProducerEmbeddingsInjections.ProducerSimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_log_fav_score_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.SimClustersEmbeddingWithId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingWithId", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_log_fav_score_2020_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.SimClustersEmbeddingWithId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingWithId", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_follow_score_2020_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.SimClustersEmbeddingWithId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingWithId", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_fav_score_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.SimClustersEmbeddingWithId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingWithId", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_fav_score_2020_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.SimClustersEmbeddingWithId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingWithId", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "aggregatable_producer_simclusters_embeddings_by_log_fav_score_relaxed_fav_engagement_threshold_2020_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.SimClustersEmbeddingWithId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingWithId", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -# TWICE & Clustering datasets -create_datasets( - base_name = "interested_in_twice_by_largest_dim", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersMultiEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "interested_in_twice_by_largest_dim_fav_score", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersMultiEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "interested_in_twice_by_largest_dim_2_day_update", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersMultiEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "interested_in_twice_louvain", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersMultiEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "interested_in_twice_connected_components", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersMultiEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "clusters_members_largest_dim_ape_similarity", - key_type = "com.twitter.simclusters_v2.common.UserId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusteringInjections.OrderedClustersAndMembersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.OrderedClustersAndMembers", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "clusters_members_largest_dim_ape_similarity_2_day_update", - key_type = "com.twitter.simclusters_v2.common.UserId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusteringInjections.OrderedClustersAndMembersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.OrderedClustersAndMembers", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "clusters_members_louvain_ape_similarity", - key_type = "com.twitter.simclusters_v2.common.UserId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusteringInjections.OrderedClustersAndMembersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.OrderedClustersAndMembers", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "clusters_members_connected_components_ape_similarity", - key_type = "com.twitter.simclusters_v2.common.UserId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusteringInjections.OrderedClustersAndMembersInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.OrderedClustersAndMembers", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -# End of TWICE & Clustering datasets - -create_datasets( - base_name = "simclusters_offline_tweet_cluster_scores", - description = "A dataset that contains the scores for tweet and cluster pairs", - java_schema = "com.twitter.simclusters_v2.thriftjava.TweetAndClusterScores", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.TweetAndClusterScores", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_offline_tweet_top_k_clusters", - description = "A dataset that contains the top clusters for each tweet", - java_schema = "com.twitter.simclusters_v2.thriftjava.TweetTopKClustersWithScores", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.TweetTopKClustersWithScores", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_offline_cluster_top_k_tweets", - description = "A dataset that contains the top tweets for each cluster", - java_schema = "com.twitter.simclusters_v2.thriftjava.ClusterTopKTweetsWithScores", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.ClusterTopKTweetsWithScores", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "simclusters_inferred_entities_from_known_for", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InferredEntitiesInjections.InferredEntityInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersInferredEntities", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_inferred_entities_from_interested_in", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InferredEntitiesInjections.InferredEntityInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersInferredEntities", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_inferred_entities_from_interested_in_keyed_by_cluster", - key_type = "Int", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InferredEntitiesInjections.InferredEntityKeyedByClusterInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersInferredEntities", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "co_engagement_top_k_similar_tweets", - description = "A dataset that contains the top similar tweets based on co-engagement", - java_schema = "com.twitter.simclusters_v2.thriftjava.TweetTopKTweetsWithScore", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.TweetTopKTweetsWithScore", - segment_type = "partitioned", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "rux_faved_top_k_tweets", - description = "A dataset that contains the top similar tweets based on rux fav-to-impression ratio", - java_schema = "com.twitter.simclusters_v2.thriftjava.TweetTopKTweetsWithScore", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.TweetTopKTweetsWithScore", - segment_type = "partitioned", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "semantic_core_embeddings_from_producer", - key_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.EntitySimClustersEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_interested_in_from_producer_embeddings_20M_145K_updated", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_interested_in_from_aggregatable_producer_embeddings_20M_145K_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "geopopular_top_tweet_impressed_topics", - key_type = "String", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.SemanticCoreEntitiesInjections.StringToSemanticCoreEntityScoreListInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.recos.entities.thriftscala.SemanticCoreEntityScoreList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "similar_topics_from_topic_follow_graph", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.SemanticCoreEntitiesInjections.LongToSemanticCoreEntityScoreListInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.recos.entities.thriftscala.SemanticCoreEntityScoreList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "top_locale_topics_for_producer_from_em", - key_type = "com.twitter.recos.entities.thriftscala.UserIdWithLocale", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.SemanticCoreEntitiesInjections.UserWithLocaleToSemanticCoreEntityScoreListInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.recos.entities.thriftscala.SemanticCoreEntityScoreList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "top_producers_for_locale_topics_from_topic_follow_graph", - key_type = "com.twitter.recos.entities.thriftscala.SemanticCoreEntityWithLocale", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.SemanticCoreEntitiesInjections.SemanticCoreEntityWithLocaleToUsersScoreListInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.recos.entities.thriftscala.UserScoreList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "topic_top_producers_em", - key_type = "com.twitter.recos.entities.thriftscala.SemanticCoreEntityWithLocale", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.SemanticCoreEntitiesInjections.SemanticCoreEntityWithLocaleToUsersScoreListInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.recos.entities.thriftscala.UserScoreList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "adhoc_abuse_simcluster_features", - java_schema = "com.twitter.simclusters_v2.thriftjava.AdhocSingleSideClusterScores", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.AdhocSingleSideClusterScores", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "search_abuse_simcluster_features_manhattan", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.SingleSideUserScoresInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SingleSideUserScores", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "adhoc_cross_simcluster_block_interaction_features", - java_schema = "com.twitter.simclusters_v2.thriftjava.AdhocCrossSimClusterInteractionScores", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.AdhocCrossSimClusterInteractionScores", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "adhoc_cross_simcluster_fav_interaction_features", - java_schema = "com.twitter.simclusters_v2.thriftjava.AdhocCrossSimClusterInteractionScores", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.AdhocCrossSimClusterInteractionScores", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "top_k_right_nouns", - key_type = "com.twitter.simclusters_v2.thriftscala.RightNodeTypeStruct", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.topKRightNounListInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.NounWithFrequencyList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "top_k_right_nouns_scio", - key_type = "com.twitter.simclusters_v2.thriftscala.RightNodeTypeStruct", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.topKRightNounListInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.NounWithFrequencyList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_cluster_top_media_tweets_20M_145K_2020", - key_type = "com.twitter.simclusters_v2.thriftscala.DayPartitionedClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopMediaTweetsInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TweetsWithScore", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "truncated_multi_type_graph", - key_type = "com.twitter.simclusters_v2.thriftscala.LeftNode", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.truncatedMultiTypeGraphInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.RightNodeWithEdgeWeightList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "truncated_multi_type_graph_scio", - key_type = "com.twitter.simclusters_v2.thriftscala.LeftNode", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.truncatedMultiTypeGraphInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.RightNodeWithEdgeWeightList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "multi_type_graph_for_top_k_right_nodes_thrift_scio", - java_schema = "com.twitter.simclusters_v2.thriftjava.MultiTypeGraphEdge", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.MultiTypeGraphEdge", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "full_multi_type_graph", - java_schema = "com.twitter.simclusters_v2.thriftjava.MultiTypeGraphEdge", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.MultiTypeGraphEdge", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "right_node_sim_hash_scio", - java_schema = "com.twitter.simclusters_v2.thriftjava.RightNodeSimHashSketch", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.RightNodeSimHashSketch", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "right_node_cosine_similarity_scio", - key_type = "com.twitter.simclusters_v2.thriftscala.RightNode", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.similarRightNodesInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.SimilarRightNodes", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "user_topic_weighted_embedding", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.injection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "user_topic_weighted_embedding_parquet", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.UserTopicWeightedEmbedding", - segment_type = "snapshot", - tags = ["bazel-compatible"], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "explore_mbcg_user_embeddings_kv", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.EntityEmbeddingsInjections.UserMbcgEmbeddingInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.ml.api.thriftscala.Embedding", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_from_interested_in_20M_145K_2020", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_from_interested_in_20M_145K_2020_HL_0_EL_15", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_from_interested_in_20M_145K_2020_HL_2_EL_15", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_from_interested_in_20M_145K_2020_HL_2_EL_50", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_from_interested_in_20M_145K_2020_HL_8_EL_50", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_from_mts_consumer_embeddings", - key_type = "Long", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "fav_based_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "video_view_based_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "retweet_based_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "reply_based_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "push_open_based_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "ads_fav_based_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "ads_fav_click_based_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "fav_based_evergreen_content_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "fav_based_video_simclusters_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_global_language_embedding", - key_type = "String", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.InterestedInInjection.languageInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_v2_global_language_embedding_thrift", - java_schema = "com.twitter.simclusters_v2.thriftjava.LanguageToClusters", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.LanguageToClusters", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/BUILD.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..945abb819221f1d6f2a058eec9a0dd9acea67391 GIT binary patch literal 42908 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 G-~Ry^_l52N literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/DataPaths.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/DataPaths.docx new file mode 100644 index 0000000000000000000000000000000000000000..746841c7d7c03ce69e76b1f72d224aeff80b2268 GIT binary patch literal 37175 zcmagFWmsIvwm*!!dvJGmcL)S`m!Lr#2@Z`1_W;2mxVyVMgy3#L0>QP>e`jXSIWy

h6OthzAjaSzAh5x$22udWkCu)f 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 Ol^{bRFnjd$fOr5eky%jy literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/DataSources.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/DataSources.scala deleted file mode 100644 index c72b25d3f..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/DataSources.scala +++ /dev/null @@ -1,39 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources - -import com.twitter.scalding.DateOps -import com.twitter.scalding.DateRange -import com.twitter.scalding.Days -import com.twitter.scalding.TypedPipe -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.ProcAtla -import com.twitter.simclusters_v2.thriftscala.NormsAndCounts -import com.twitter.simclusters_v2.thriftscala.UserAndNeighbors -import java.util.TimeZone - -object DataSources { - - /** - * Reads production normalized graph data from atla-proc - */ - def userUserNormalizedGraphSource(implicit dateRange: DateRange): TypedPipe[UserAndNeighbors] = { - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(14)(DateOps.UTC)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - - /** - * Reads production user norms and counts data from atla-proc - */ - def userNormsAndCounts( - implicit dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[NormsAndCounts] = { - DAL - .readMostRecentSnapshot(ProducerNormsAndCountsScalaDataset, dateRange.prepend(Days(14))) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/EntityEmbeddingsSources.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/EntityEmbeddingsSources.docx new file mode 100644 index 0000000000000000000000000000000000000000..04f845f1aab9ae865f8514d65ca2a9d037adb262 GIT binary patch literal 38459 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 List(clusterId)) from a certain dateRange. - */ - def getSemanticCoreEntityEmbeddingsSource( - embeddingType: EmbeddingType, - modelVersion: String, - dateRange: DateRange - ): TypedPipe[(Long, SimClustersEmbedding)] = { - val dataSet = modelVersion match { - case ModelVersions.Model20M145KDec11 => SemanticCoreSimClustersEmbeddingsDec11Dataset - case ModelVersions.Model20M145KUpdated => SemanticCoreSimClustersEmbeddingsUpdatedDataset - case _ => throw new IllegalArgumentException(s"ModelVersion $modelVersion is not supported") - } - assert(validSemanticCoreEmbeddingTypes.contains(embeddingType)) - entityEmbeddingsSource(dataSet, embeddingType, dateRange) - } - - /** - * Given a fav/follow/etc embedding type and a ModelVersion, retrieve the corresponding dataset to - * (clusterId -> List(SemanticCore entityId)) from a certain dateRange. - */ - def getReverseIndexedSemanticCoreEntityEmbeddingsSource( - embeddingType: EmbeddingType, - modelVersion: String, - dateRange: DateRange - ): TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] = { - val dataSet = modelVersion match { - case ModelVersions.Model20M145KDec11 => - ReverseIndexSemanticCoreSimClustersEmbeddingsDec11Dataset - case ModelVersions.Model20M145KUpdated => - ReverseIndexSemanticCoreSimClustersEmbeddingsUpdatedDataset - case ModelVersions.Model20M145K2020 => - ReverseIndexSemanticCoreSimClustersEmbeddings2020Dataset - case _ => throw new IllegalArgumentException(s"ModelVersion $modelVersion is not supported") - } - - assert(validSemanticCoreEmbeddingTypes.contains(embeddingType)) - reverseIndexedEntityEmbeddingsSource(dataSet, embeddingType, dateRange) - } - - // Return the raw DAL dataset reference. Use this if you're writing to DAL. - def getEntityEmbeddingsDataset( - entityType: EntityType, - modelVersion: String, - isEmbeddingsPerLocale: Boolean = false - ): KeyValDALDataset[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] = { - (entityType, modelVersion) match { - case (EntityType.SemanticCore, ModelVersions.Model20M145KDec11) => - SemanticCoreSimClustersEmbeddingsDec11Dataset - case (EntityType.SemanticCore, ModelVersions.Model20M145KUpdated) => - if (isEmbeddingsPerLocale) { - SemanticCorePerLanguageSimClustersEmbeddingsDataset - } else { - SemanticCoreSimClustersEmbeddingsUpdatedDataset - } - case (EntityType.SemanticCore, ModelVersions.Model20M145K2020) => - SemanticCoreSimClustersEmbeddings2020Dataset - case (EntityType.Hashtag, ModelVersions.Model20M145KUpdated) => - HashtagSimClustersEmbeddingsUpdatedDataset - case (entityType, modelVersion) => - throw new IllegalArgumentException( - s"(Entity Type, ModelVersion) ($entityType, $modelVersion) not supported.") - } - } - - // Return the raw DAL dataset reference. Use this if you're writing to DAL. - def getReverseIndexedEntityEmbeddingsDataset( - entityType: EntityType, - modelVersion: String, - isEmbeddingsPerLocale: Boolean = false - ): KeyValDALDataset[KeyVal[SimClustersEmbeddingId, InternalIdEmbedding]] = { - (entityType, modelVersion) match { - case (EntityType.SemanticCore, ModelVersions.Model20M145KDec11) => - ReverseIndexSemanticCoreSimClustersEmbeddingsDec11Dataset - case (EntityType.SemanticCore, ModelVersions.Model20M145KUpdated) => - if (isEmbeddingsPerLocale) { - ReverseIndexSemanticCorePerLanguageSimClustersEmbeddingsDataset - } else { - ReverseIndexSemanticCoreSimClustersEmbeddingsUpdatedDataset - } - case (EntityType.SemanticCore, ModelVersions.Model20M145K2020) => - ReverseIndexSemanticCoreSimClustersEmbeddings2020Dataset - case (EntityType.Hashtag, ModelVersions.Model20M145KUpdated) => - ReverseIndexHashtagSimClustersEmbeddingsUpdatedDataset - case (entityType, modelVersion) => - throw new IllegalArgumentException( - s"(Entity Type, ModelVersion) ($entityType, $modelVersion) not supported.") - } - } - - private def entityEmbeddingsSource( - dataset: KeyValDALDataset[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]], - embeddingType: EmbeddingType, - dateRange: DateRange - ): TypedPipe[(Long, SimClustersEmbedding)] = { - val pipe = DAL - .readMostRecentSnapshot(dataset, dateRange) - .withRemoteReadPolicy(AllowCrossDC) - .toTypedPipe - filterEntityEmbeddingsByType(pipe, embeddingType) - } - - private def reverseIndexedEntityEmbeddingsSource( - dataset: KeyValDALDataset[KeyVal[SimClustersEmbeddingId, InternalIdEmbedding]], - embeddingType: EmbeddingType, - dateRange: DateRange - ): TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] = { - val pipe = DAL - .readMostRecentSnapshot(dataset, dateRange) - .withRemoteReadPolicy(AllowCrossDC) - .toTypedPipe - filterReverseIndexedEntityEmbeddingsByType(pipe, embeddingType) - } - - private[hdfs_sources] def filterEntityEmbeddingsByType( - pipe: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]], - embeddingType: EmbeddingType - ): TypedPipe[(Long, SimClustersEmbedding)] = { - pipe.collect { - case KeyVal( - SimClustersEmbeddingId(_embeddingType, _, InternalId.EntityId(entityId)), - embedding - ) if _embeddingType == embeddingType => - (entityId, embedding) - } - } - - private[hdfs_sources] def filterReverseIndexedEntityEmbeddingsByType( - pipe: TypedPipe[KeyVal[SimClustersEmbeddingId, InternalIdEmbedding]], - embeddingType: EmbeddingType - ): TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] = { - pipe.collect { - case KeyVal( - SimClustersEmbeddingId(_embeddingType, _, InternalId.ClusterId(clusterId)), - embedding - ) if _embeddingType == embeddingType => - val entitiesWithScores = embedding.embedding.collect { - case InternalIdWithScore(InternalId.EntityId(entityId), score) => - SemanticCoreEntityWithScore(entityId, score) - } - (clusterId, entitiesWithScores) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/InterestedInSources.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/InterestedInSources.docx new file mode 100644 index 0000000000000000000000000000000000000000..f13edcbd2c80bd7377af9fbf576aa966ed15efde GIT binary patch literal 37624 zcmagEWmsIvwm*!!ySux)TOh&RA!yLXoyLQ^1&847?(PtRy9EgZcmH>0=A1Kg?!E8( zW%E$A)=$>jy{me6DSv>3!U6*Wg9Bqo=hd!MEsReF2Ll^}0RzJXjp|7P>|M<5U5wN{ z9n75#SUl`(8jahpS@tGu!@j*OQK?z?KsdmFvSx{RcGAr=`69H$U{8bO$dZ* z%qWM#u*7Gk-T9KN)(Lm{G|}iuN}U)OWNPJ8Ko8jwhE}l-(ts8-%H8 z$@IaW<^gBht?3sq!U#E&$kh!@)_wqsp{O~=0>lQq?=MiE_CG?e;N2qy zRNcuwcNXort_FTJm1jz!*Lz7OE&|M=wnh*(^XFD26ZyjZ-xCpvaV@%0Hy!4ORO zA6@jM`5<-=>fQzf7#JexuaT3vturgj?`vhkr6)6L4oL-WHvt3h*g^YZ{CB`D#AT1M}`M|uzUhPf#i-vZiHMkV` zjsS8G^_^fH+w{mAN)$13nmZl~O)?S24a`A3`ufuu@hS-^BL+KJl#<}mMD%M!7dkCh zU*=f=3_wP{i94dWvh|0pd&IqHlZ&jezt~Zn1G-w8q8U3bUjd4oBj&ZF+`)8ASzK!- zPTOO<@+ZCW3zowmNhLKy52|aJ$qtMGKFbE7;+dA+cl*p#l#^OsQx>ipK`MR@($~YF41zdn#_zg6()V&*bKAft_wHqZ`Sl;P91$$U1Lh zGo)!qLI`PS{8@lm1fmZ1>#7OP+EcbP1Ak?5aNk+a4N5&&}!AorhWuwuIHf)y9--}!e=GjU0+zS zXC%pC6^my=$+gLTXX={#dRXuG_U;vbiHPx@_W}y<$P&ene%4*`^||ko@SlCTUR}jK z2KB`j3JeVG?|u2`;P6LV)W_{t+0Z(k7@-VYBCKG=Rqzr57sO{I*9mG8GMnedDBj0I zwX*L3eILTG`9HJXgbUUSJ~fOzEs9&fHYk45z#f12I-=~jj?h>gF}%Mzc|hR|RR&#( ztvQHp;Ak{GRyhyD4DXVrrCc@UO;K+$aX|v>;H<MsWbbDo@;5RhbuHoDRxZ4y&O4 z3^$_TxSmX{u2d`RGWsO0TU&fMm!BK*MUpOR^gCs;^+!POHF}PAz?x%R%WZwBU>wSa zTNJ2AL5Zbj94UqsNmyOtxWuM3OuyPOz|}8aKBUCTOGs_-h|3>O`&l)ZNn%z+%WddX zzEd+I(zW9?U5kBC}qYYjzdve4@N&TY3 zny?gQpDzxwpm&Z)m#{}`Xwp!8EF{Uy)J9TS=i>UNp@L9OB40tgj4`?DhE$xQc|qg( zk*l-}*T5J&e!TugfEyg@u@9SZ@B*#=<4w`3Lt;`~rgC9!Dn@;Fluj`DhHFJcM0w-|1AB?{p< z+t>=*(9YaU;P3@LEsYJ8cvx8rvma108H0xm2;$4=?*PFfa);y7;*(iCibd{<_w}eq zg{``}(6}y!_zu+{iDucx?LwxgBmw%*V-PZhw+ha6-T*Ee?DXraAPZj%+bOCzAPw|BakY*WrfHUgdk7 zjaNu`TKQCScUOczdXcC@g2yqzQ7;!TAF`vh3T{`de$JPFd67FSaN9N_iQ3F@yQehn z-4w0#UU+vJ&5dkb01t6smfGp;mh*do48RNBxKfp2)|dFaxa}OFq7+t-s4VUJo`(^M zM^v!YCL*jezdWh@9oOt)7EIsO1R6|lA!rm5i4ZUq^%$$d$hbILq*DZObM;J0>60`_ z;lV!1b4L{>ElJ*&UxSoLKkckl7FML&qO1>Z!(Da0MvZ@%V;5FozEO=_&#c-kBIMDX zu8yU*;`-KmCiy}uki*(GJsARTiDSq^)p&CFOhtyH_Qq1EaEJB2d-}a7__{*#&nmhV zEM^84mGf83E210A=`o^g%hIP{ux!9L8@e5Wn;37JBQVV^*U0?q zeS}}TJ|grQUY%0MI>xQqMByKP%m(0RtvTjwk4luVucr=;Ic1gSaJFgn+^Fi!;U{?< zI-Z-g)}QZZ#6%vg&p2&LH53ogzzI*i?zug|^?rtaD%StW`QG@>gXCkLjDD)%!^Eb9 zS!*pqM3isKszezEd;)uEv!J+MJ>L>NxHg6)glG&rl zENkw~k`!QP%zk~NuA3S;&N0gswgq~?XnMRC_mmH6>-t@8%*V>_8srTTUlPoPhU{Wj ze^pzpV(iGkv2SAQuyvr~?YB!teio%9(4Ei=^d#)Q_$Ur|%C(f6Nccisdy=5-l(T5E zzBIY%$mFjBRu5(YZreU{3pqO{qfhAQ&ahLI=yj~ZyLV3tZ9s@^ zr{19ANNfLL>76ss>;=YU=>Xsc$@}Yy7gZ+dM2N5b(hlqcRf;TA{4bLD=cCv_CUEqp zj^XJj3LM7l3BT3~Bz)@f8YENvA&!Yt_6gP(v_TC2+U`|tuVsF(+E_Vlm)b*Co1CzCHO6rww$i!-;#y`7(F$W(&d{^nowgeC!9-?evmY+M7v!A-?Iz7 z;Z7+EB+Jwgjd}KBt=Lu3 z1&1=Etx9G zQCO3ywheh%%o!=pM_re$7HkuOKWW2feLa&j;H3!f;tdNSx+@Y@OtiyKtZkz*uJ!I% zxbOT6MgSSD9gg!#iRQlX+6TUs>zQgO{)eFNtp8k|qswswBU!<~3^ky^Q2$kHXBSUf zbLT%6X9I)89ho}c?(VPoM$bR&;)213r|iKJ+=xDUcV^d~aVl`m{`&R}_fzbNksmd= z7^#M;hUWXSggU{#Y#e3!J*})nb@P{(9KR0RGoTS^OvcOUI&XhBa#yR~ndVdRY;m@owE93|8klkx;PAYeTaQ~cv?J*DHd%$-Zi*?Sifjboo|0SnEiRv z9vZrPKL}0T+a6y%ZZ3ZrKfY}6T(jjZ7A39d?deqd z%pVq2_jYYnuj~CZzdG*a9wGYXpbh9pziZ#U+Q0F@KPeyiWONr=yx0$H6d~!i1TJR} zd+XS{Eq?s0_%Szi@~B4iR5a@qM?~J~-G%b@aA?rI5$oy`NR<1g-^K~*`0&Z&x-Z|i z7g32x;S;S5&=&?fZvh!U5}*i`AC2GO8{%#I?8WJ^`}nSP{R7^6WLS^oVAIZ=lbDRB z^W>XLk91<*@#{#S6SLO~zZd0IV)-t;t7n(z%9^N@M66#3>uc9qS9^2Cc=8~-pI!T! zZ-3HjSV^+UHwZ}s>*O-lWjRXTq2H9P|fSLN6*zF`h@ zr9`!?be||5ti}R%?ti@1>UPUy6Lz)f$?!bTKlbo=-LX^CzTU6yyYU_%@|Ru=zO{!D z(cGHIc^b0j<8>2iBBbxY)qUB0kNmM5b-M(WU6r&?gVdx#WI)O{jNT_~7U=5Mbv=Ay zHAstKsQwThII9l)x<#3sL)Rj;M~gtB3>xZX6jiAKfd1QOdKs|Be>1qBkX?cmu~%Gm zHHRQzC~BiR*?j2`ViF}ysh)P9S<{VE<>(7-9!^}UM47k0>Hk@?>05gwldzjG!RV@NAep;q);|Gq~VN#+%uMiAoix4nC6zjM+>rHtm(NNcEXVK$5r zHD%I#V(9VUQY0S>IJ$aX+Iuc22_x6uw9S12o^nc}09vuESyml!%@HAs+5&F4PbaVE zKkXPZNrt|o`(Tsb!hIL_AvU6uiz=k#OB6Y?DAyQSlX_Msk9{wzB3pu?n#5Ti%(REa zNdAF&@jYCEVq15G-zE|3z2;cQFxEmv2YW_7xQgvXPV-AC!57^Krq`!+t4_hHvw?!; zh#GdzO}Qm)yPZU|0v^csaH<&y)KI+#QjX+DiTS}yjXJ6laVswL0obv z^y~J0^romm^Nkc~jQtMFvRJZy%o%q)!P}Dqk|eX|v@sgfS}Aen=HMFH?J3Z0DbpQ! zaJ7rYZ#YNR?${~ep!L^41fY5+peh!v)Yg|ysPF2*iRs7@f8~5raADStx1BZh_#hr< zdi;keFQWbiyMh~uS!Yll!6vcdez8yz zb6Cy74YS%RG1XXGl-5!rPP=s-zfDe`FXl)*pn{&Ca0-4tBafrI zkF&36);(zh8;-6S_jXUsYCl*+pSwB{-V4eP4(;suec-`)$Lhq3V=3afs!e3jWyb^* zdUJOKe$@!3Wp%e|&o?G$w|Jhxv-$i=5;U>82dDUs6R7-Uh9;G@aiaw{XM0?rqJj6QM*_R~cRe6`s z{~1xCg@vovB~Ol5|5HUQBE3Tuc#tzPnvd1kO(A^|t3vzs2TWfdcy{8C{JKR2V-H@T zI+&B~WW|{1!@i$QPW!vh)aHDPe`N2T3KedCSRVwGmThYa-v4yWz?vm(-aMmtdrhBf zpLTz|9=?3N92)d$e{u8#-n}NjEu1{g{(L@iVEfqd+9H~D%lbS$4DIy_hPs^L*&+gE zwAtRAI($R^pc?Y;(`0U7XwU4z4TlK|879@&;0f9WVafUrE}L;5TWcX70tV!Qi(u*9#c zqwEghDJ}LIS0PpW8WI#R=jr3;pK-m=7kc?c)1#_|-4sMV?%4%j0Xn9QImt9%$HwnN z_@_w1CY<6c41&!!Q&!FP=V1~p*R1(aXafUTz6v(CB=%@fH)H4y7@%n3wkn`3^0Esk z$1<%wJ2`U|ahB7hs7syuYEL(qqz^8KAFVWV12&Ek@qQk0Xj=^h=I+HQWxmxe<8*r{ z8O~9Pm-rlOIHYWs_;VA%ETHL+(WN7DX#RMJw3ZopB;HiGmPa7aOCx?mFYI#N87Jgk zEU9L|#;PeZg;*oDv0G_qD1x&F2>x+;R|&U5+i= z9x8NPCiHw8W71cP{WXESe4up1pXrnMogwx=U<2foGHyN1`>&kt_yvlNM0E6G1*2uAwI?d&5N`=`)|=Lh z1?WPMqJ_NK69=XZv!sr^Z?}!Vf9s##Y+B`BJv&QSOxNg7M)>@8|N6KR~cPY#R_Pq=ciPcL|J$o~-TI190{! zvxa4Z@N@sT7U7zE6su9_`Nqd($l@Jh%psN^6N0vu>W;;VeC;$37teFpMyyhu;u|O# zoTZ8csQOh@Qr8IIYH+ra9quX^f4tBFu?rX6uT0PqQ1IL!$ zG$}x(^ z5{{J<2DG)gOjeX!54I{RC|h>-kMMNx5Mq1CO;JbC>R^8~*`B#9aW=71r|wZi^;R)~ zQ7bSaK58$<6g zqkwm_TuOX*7=6c|{Z@uzCyZy&Yf)(bRUplRsIE`2Ah27-)dGhDu($@5a8_H9{_gXL zM*FC70@GDV`jvPT!8Wfd)#ovR)% z3I^pJXX;H_>qO3K-giX6kmcq21ZzcS9GK}lyxRSyhfvuPyQ`}BG~ zs_fk{;4vfr5HOtpebc$wel~Df!_SAXLs9*7)ilZVGXwmwf^N#(@A11MOT)lp z=gP2OkneL|E--O52@8^5#GH=5Hn=P|y{BCU5r0nIeuucHF6T;GTUv(J98K1!%#O>3aLcf>JB|PFprz8PpWXhdclszP zLyC&aEL?y*%6{x7r+JdCv1^QccGT4e^OYo!YtHn`ZD@BT>OpcO_P!+nqEU68Z%#Gl zsdc*{$>llC^VO^cA!g^{o%Ib_*Ox5ne4B%nNMe0+xzdA|*K@72dB_lp&8Y+@MS7`r zqHjYY=TgoUFo*0GG`g7gD@X}#(qsO?OAQ&T&>i4*Zn$yMCDBYDMket-?JOH^J@J1^ z$l-j7T35y{2;0!s+rm4H?!;7dzUFbYU3Bx<#CC=2g!iF`k=sh{$MBkUjKMvJY2Y^$ z!^z{VW6I+-?FlChKL5cZSkx@|xsw+Vb#R^W=J1_qkc#@7cQW!0CYDvVIGrCEWYIgZ zrlet>Wxei05cs4z`j4`cngMqq)>+F7%l#PCN>Lm(|_Lc>@Gz*)Ml^nKMy&A&hd{(seqsJdol` z5!v(?{E=hGYH+hz5fed}xxa z%R)HXyGfVJH}uHIr#Uj1fUP>d#=d!f8~Lq$8ENFWG(-Vc1prFNLGqR9{3E^Ouk^Wp zryu@K41F*gD?OJ{Z{6f7ouk4E-J#rrc~rH1dy{YyXImWT z<=Gkiy##k-DNMQA+7F{MgD{{YTbITa{bs)+-R@z=a_$2-E7p0imleuPf8mjIrQqgFn?6D-^dpUv(0q4J=D0<*$SRhv8<`sQ%odMPUi4cb5ZTJCljL44 z>YXL2wxMQ%R&!6){rllTZo8?uWOsFaX<{tgbm;h;i&v!t?gBDF zL|Pe>!?J~Er$#An>!cgg5?50B6_Qcxg7zstabJGuUOzft%k0x?4XYhp`dl^0VU>oN zOhz5%O_5L9>@K@$m05gBj#m-$y?exfVj3!m9*3|h34fO#r?%HJr&ec|AvdRm z8+3RlVBdym|ESAJJT*!wpKHJJm?jNeP!N@@oY%P4i{ALU0Z5K;p93IsFqDMR3RRg! zsrqR%eEdSRzGjlmvR$b;UQ&NUlYCvW%oZZ)2K?5@Co?FF&_xpzplfYoE*MS`W$7Jo zX7p}~1Uas&%&IlkCtstixORG8>ya{NcHrQM4&riUx;WDR{Ps#6ifJixWf~z0fdK*` zmJz>jjwL68gytP@GhE3Bk8%y+qhC^r(qaPM0e$3xqKCRt`4nW(Mv1**v{9cxRDn^X z9!P!$vc&Jz?>QHm%uTSjwRyaN@IN+mh2~COgBQ0HL(N&a|s4?IPoI?*yVscn7118NxSpW= zUC0d-7O|GwtVkBKf;4JSe#R!Ia^ktBZJ_3EZ6}EE1is{>kTRb#x^n;1*|1rG&bgHy z6xFKSieeF&=|er)YWN9{!(&;IwAf{|W@+}2h?c36*d@QPPgM*>E~7G32N6(SS}d4? zjM#wr-{ugA8x^E`VsM2gqV4U`l~d0(%e~-2XtBXp>Hp7a(v3i6pLqlwkNgab%4q#x zn#UI5FIttu17Ic1PF30_#)*Xy>GnzOsB&OAH$US}ezT|E6u-`BcDwy_?u_sSc59`r z0ZF;kKo_Cll7$(n38<`!r1AWNfyk;Wk?zGLm+W=4{ME7b@$#X@5AoxiZzm!(9SLFd zJ3~jxR+J&FpnKZT>ZvhXck0qE80ADEZ6bce-_7c6yJ6a3Dp2 zS=#dCge-vQ(#VH?{dHgdSV<>aio}v7@0m()Mt%URL7<9FS2>> znCIvq@wb7;C^E@xLM9TvH%=#BE~k#9&n6l-Wk0_%4Ijj++g>wdqRCVY;90?fh=)j% zAaep!gOfrE8yrETz?sFyk&ItfG+Tg%aDwGDkNtJT8A<+*w`V4N@X&k5RE?2CUH4aZPxKy5n345w}3=2{y0oJa1${m8AG(%FI6>o5fg3{ z^(<&{f;tr5`?7!2NLik)t5UR>C->X;vhZ);y`kFjj=m>m?B_&oJVbx`mL3H`f-dYe zzURB1QsN2$YYl%Qc7oNJuNJVK$7ej?JjbzM1lkH%`2Q4f{SN%j_`Z>)EKu%M(8w32C z>ovX$%GcGG(*<;WRe_5l&T|PxN2BTp)5$HUlNFlOugEpbH!w>BJmGd2tG{&LC+OIk z8)BO5WM~i3c3EYPe%npPvt%x#o|4O~UnL9TD+ab{?Pty#*_Jgk(t-vP`79Sz69&xe zjK@FiWP*~W{!HTgpGnD+d(1ccmjnFa&KL*3slHSo+ny_AVvgSr@JDmvdv#zOR7f}e zo_8ZOLpzvLx*N-^zoY~E@InW+lljLuGqs%j0!))B?NqqA&rar08j`SKxbwnS-QV-= z$Q)tLN5$UeQ#zgwL4`mENJqs###0i^c-Yexg>v|4Q!c`t2`o9TJ*cO2BCY>W!ZSiP zRhn~}%x}5JPMGq@PWT^%dBpp~u40*(lYc67`=1IgGp|A?<2NgKyj1eUPfGBeMx9FZ zVJ`>rzB7-^Ru$lL?s=*YO7^1kmMy5m>e!k*OV(^=#l&wC|6ZXFA2!#!ncmt(J90u) z@Z|JE(X8Com}XfYM;i}s4i2Lyl&WHi=k^}p${T zE8RZ!8t{XDRP7H4iwkK-mR^a<66r^WyorI46Iw;|$4&G%F2%&I)P zaBtd=W3nvUm<7{SIcbzvB6fA}U)5^tL^Y~Q|Hge&&?a2!KxtbnlCrKDGCJVF92Wq8 zBT+NwO^!x=3`UK)G{Gc#+}J2d0Oj_$&e%t0O=APx{iv4pL!RR_JljfY8p_tPY@d+! z(|0wEcLo~{5eq;gj7d4&7X*rQn6FmYMqf(rK9i>}fTz=ZTN4MK+LW6@!ChasyT^!g zDJ(n>NfrxOrJJo`D$Irz!7ojzPx30x78IAov~_HARlbNQq|Y`yVoPx$OU;gXo9i5P z)`bjKoNEO!+5O|7t4SatKuoFIn~^|j)@%|W z>-e;Ff!K>`3WSmfOcI9lhlwYCTNL*@GjH|LEwXAUCL-HqG z*iY$VoKii3Zz%#yeQsXYZHpEE@~C@PG&=Ys8fu$uSoxR94|+$P zh2eji3{C!Rk`M8>$xgffKa+e4Hr>=t5@d|Ye-!I+GX<}{8( zpf}2O;j4Q)%O?lmEo-#Qkk``54Op_++PbnVq4SLU&0d3eW4C5k74J8VJ~};k0Ik2N z@Iy%U>dc_c>P_(L!9l_ycrTfuy&!lkwG0NiqXDqspv%%la>xU`W-a?*Li|amErXz& zL#S{BK)a4D$S@)>3I8zgk5DaSa!F*YCA56vl{aRg@emWHaExr7wmjLe*)6G!;W)|w z4P;h__E?Jxh>j<^?GO{zdSf9{XP!~Li5gf}dC1?(B-BU%*DPch_%<{Mt>ZVEhj=Bd zZs^5tG**XOn8_hdt)=mm0mPE#vd_3JcIR~-;2SWp=Mv<<4sK1@w|^}(qi~;~>_J3hC+h&ir3%OW0eu6_O2@tXlg-fI6KNazw%H*2U=pX#aDm29tW$%#qvvEe zX%O)oC?AX)p>Q8KYCDw&kHYy&yz&)HRm{#B+=!j`f;Ut?Mwt27 z0d|GghbYgQ0eeMm*+@11A92y*zs2DNpG#cWjEtIW@&BqJW$!0x0D_Z2|GvQ1fi5sj zKyW5mx0k?%+^#L?!jnFBa#uTin;!-=Pcqe6`;+??3js)1YK>f3Lb~*Zg6|bh#w(HB}QX<=53K9Ad_l}9S z#|ddCdmyci)o61|J?P-PN{KKaG#Fr^w-UzK#mS@`)a3?LPJDd*aian4>hHm8@cZ5K zje0GK6bp-+5RiiJ1_HxI`$pu2?Q3QukmtQ`@BmOaY+csRuO`uJ*mWPs3x`F&(yyoR zs9ExuSwV-zKrov}|-G z!b&$aaX_K@{62#7uo%Ww$71WXY==&qrm5!M+m0TDCB)0HGxSZ$uHtC)u(Q0S!Hg%$ zsR)X7JfkN&?m7M(hWFsHh;DI@jrIap<@XXwosRJA-6(9`gT`DAeCXEVX*oT)xiSp% z{SuEw>ahqmi4+1=wpvMLj^2IGx}O5SLtG)!bRBs2DalPtgE@SdsE(8&+YdFx9nbJ~ zzG&E>xU%UMPY}3LlcwKt+%61Q`OU)!5H~Mv&ZXF21mEY)nm(YMGIS#xdxnC6Zfq$b z!TCP()k|F)5^=`S{7FMSdKGtn(MPbH=gTJD58y8Z+GG0ghcqzz@CVm#a0AcEzc6ml z&X)>VEOY_!4~?5gidhe(U$M?x&ZT=AZPs1(wKn9xsRC$ZC#oSQ02~fkbM~|H!2-(r zpyCBTz#}0V10nJQzvP^^BurF0t!1-y;}Bpr^*%F+!YyGdE~sH#ae}R3TpfQ!4|~{V z>yF30w>6%YKW66WzRgG};}q3Mf*`^DMRxNi70!Yx01;FK$cgE+X&l5<;yg;aD@;7B zhUscA?GcggBbAR&&r-w5>jzrg_C{Zfu9z)Wmk$nL)V7PM_AS9$sP`A8DbcPZYa@BD zUV3npj_ppbY&u`K`b0#fe-m|0SG!eaOg)bg`sf`YcY$i){{X#Pdh9?k7s4SLATEwP zTpk*7jayBEy`ZS?qQ88)t+9I>{LuJ~sU!OA`MGC1sYmC(TQ!~I^-C3(v$A>Qc|}xK z?63Mcz?K>u7jbl7zWAQo`OaE|WvevM+pG!X4F%(HhcJEt1~H82p@OeATN9ZG<19vC2v0xYHk%Thc3`B-KzHA~zI zbY=dku~|JS{oz@byMn-EW8^`}h!pe|dP`Snm;&)@X?Yp_I)J8)oYC zHgSw|TcO#I zH#ZOr_jv>v2*4sm(J|sL*8&3xKIN`Fo1KBAWwGVh&kVPxWjT{_(4z0r)z6Q;daI)` z*<5>{ehYp^qq$k*cLoU#{Ey(koKk4fKLz*x7JU9&a24UPs~h`+=CN&;H?*iasTSjX zGU=#oIq9hUU%(!{)yYAz{{mKSb1{p-og4zge!ji|sugu?@QGqS%QN5S9fjaYL*u4_xTERU}9*ZKiJqJ7-fzYG$WY%Pj!9(jTM z49_C~tF(Kk3j;|((iA`?G40qe?qxmq3B5vwIc{-gxc`ZLt$r@~WiIGq&UNW|xG*qh z=wHqJUu)x*|6nqtLpQdA0;+E=z_oJ=)KLy-QGnHk-11;hz*~E&aGz<{%lu%3b zzTRCoqE3$&bHjZ#qXP(k>{+0y5^v-h*54qqItm|y)WEg{I)GJx?|nX+nNiSyC{ga# zfEQmIy*ri^x$N?32Ey9~Zb9|3PmNHcDUx+WlC3%Y>M>{KAj8{$L26!CVKWC@QIKs& z_;VS@zKUHGB`qVe#gxlK^BD@&wSf)y4r^c%onaE;iuA^8@%3J?^f@lp5smLdf%RVC zOsP45-uMq7OE|1~cwfWD@D@%O_BiUBGxS{S1SCN7p@_&QY9){Fms*DoF8NY1x`{oeqNO1}Y)!v6qpxN{HOg&J;$8$RhFiCNn8 z5U9vhbm*`Mih{5d$POnA-fFqHJwzn}yie=&-)$LF_un1t$3t)+@FI-#p(ZKfM7@GwG(H1R)5yqI$Y(u6q!yswym(xd^cm&v1Fl^ayTldUGk z0>jT9I#^l;Clo89v~^&$mpyEmnQjU2EZ(F{%rSm)7q96X8?Y>nj}fr3)pBH21PqNm z&-idy0=Uc+!tCleSieMD{*qp*(4*F*nI4OHvGc4z+SpIg#^+!hzo{CN7eh%(-g}(2 zfN9hz#kJE0W5mQu)=rzMu*JIMaO-4VRjzTakSB8sPj*d8j()xvvB*IkvCWsOkf-R} zPs+%^U`ahTH%G?%qMfF=AZBWweZ1-%kJ5fpUl(%V$$6p2Y-xUkRJ4TgW!QKtDLNEWtm;i_ z?~i{`v4N=YqJC4cMGl&5)lT!8f^2ep@nj?QvNaiL(|9zL%TC4?l)Tc$?-1vz&DwO zOw2DUDwfDHhsU;j`@)mS>p8#`DW=DuwkZDIQ3z27pWEQH7nn*=Wt-lMS5ydA*q+9$ zffIVMKcQj%jnPX-2NH%xvnY}Ko3;+yT_%4!Ck%)&F&X-5Fv?j`;8-&}IlQLsP>Mzb zJJKlRd-eE~{a2$bk=)XYqRmD{p~7Kaoyy$iQoywBtxMn9_jc{MsAOl}Byph-gM-C( z6{#uxJ+0w3n&4pQcpWM9u%TSZn*-a7L9$2e33Z;=ULFp_FMXslgpK3&SP}4Lgm}f% zPQmW1G;!Zh&LxYyGn#4RHa*$fB{P7 zl=E))wE?$f&4Lb>FKO7`s9!S#- z>n!EGf?`zyh8{u&boE16^-o=LikrE8OF1k=;WX}zk|Arz=D8AisFdQ+fe7hh(5&Y) znOROC5e({hp5T_E&{vwr!3fmRBHxw4H}-;ZC0KJM5VHs$VXz@=Y*Ckrli0LI7E!RB zc-6bYgK{Cnp$&2avEyC0_2-XtL(Z_#E?#hZu^5;51?0Au}vZ z4P?|F7fs;M{#yki>Ypk?daj5S%T+Y1tX(Su50v| zOzzQUuXw8+UX^@`CZ!2F)cW=Y)`|742W%%=B2VnbV&u@^D1#iH5RInNz+<%q`G z@+OC;M^i1qq%S$au|}o8&wnrz!Rb0vBnx@W(V;A01N}B`(ND3zpphRh0f`#vZtKEE zIK6~ep#uU^{R;^DH;~@Hf$V+*&G}7q0%h}FEf?VEqt;8!BZX{nizvEbW zq1{0VX(LK(Fdejp9WOB|Gs30n4+y3z5R=VQEXZxrC=mwbp%*`r|LMROm3AuWr4i4W zGh#*-REa^oV&$jsPA?LciZHDAx8gj%Rfzb->g4rfPQ{&O$L7M*1N0Yz6IS6EUf`&KtE3rqmI(H zTaWzWH~u%1ap%P0oZyVm=F~kezm`t-)jemY{*0Sbs~fKq-sOdaM5O~622#GO8Y837 z?3LWm)xpIdepSeqYp=T(?^vgY1*`2H`L^)l8^Xs~J?zN=S3a~l=f26u>9z+z&EwT> z0570=aY56%@}=d~$%;`2MruVMTIF`e&6@XW+v*}+J~uV=4EWr!VT((elPLJ!>zPIR z$BWT-(KJ>1Rgr8{jwN98=kVJq~=*{(6aHHa`y}f#q*$uUPzIyb9 zy0W_hLsE2Np?%)h$)a`X#Ik*!!ka^Y_`|elAufmCL(Qrs3T*lC{7ZZ0&AQR3MmKBr z=BD7(Wa&fI^^Yr)mj@rG*4Nuj(z?4e{%dyjhgV?j%WeO!mA<<(j&+Ae%0-p%04>eU zPMk;kyEYGPVtca-t8V#)CbN6B^67FcuBj!_w~Oj#mkAuelfo;DVZD1iZyE_b($RM7 z-6+NFb_*^wE|cg>gXevn&vT8EVn?^Awi3$g)38xf`6Q3d+UBNGad8l73Trv3W^C;E z&C}ENL*LEpk>kT#cFM8eSxW5U?i(TL{#)r_=;W%GpHJ=wSm860d{L5=>YraT_3I1^ z`k$R2%MY$;+oNhF2?6ED%*3cz@}wxQZ}scjt@&f}!pyiot9*GY8hNN2_Spz=0mIbR z!<5#RQgbm%b5mbRvfxz&)dt;eGeRj<>+M?9vUAqOV$Lji;dY;vk#p~XZb777IqN+k zprOMp&=4MIi1YSF)LWbAwd-M97KyvN>UMg3<;G67HZ%J+t=$M`b@1S1=jJEN9yD*! zQToIAt>d)&tYl!uYt5#;>aCvXxFejcG;6g|rNU&R08aQ_u4C-KPY}N=nEzFWO}5A>^1*UJa2CV z$orAk!sLKlWdyNKfcT~@Qng_?B|O+0?~~dWqXrmOt4%~fnC_2CigpkRuQs6~_Q|Hj zXC&PANC>Y(Z{7%7W58xX2(Y9}z=AF(sDQ>nr)i7t`Jz#aaCy}vVF^Y1iWHxQ( z&(RA$vp_`+mmGsMpP$$6Njj=yGLEqD#bJ}JS4PC6(yoQB7-e36(|zq)$%1dbZ#m=W zXuic+Pe4I8;dpy$T3$>v3zcZQckDE(avv8INo0Zco;)dl2vVvkM9`*O(u1x*x2=O% zz;f3Eevn$N@)r+$(dr@Sm0>cDc6hhH<*P2p5lUZ1oYs$Z5;O5J&h4H3P$))?%$7X7 zHsu-wUj@27_~g9~#6nn;zt@KWJ+M&mK4$-Zf^D3hkI@c@Tjyh?O<*W$>Yxew70?9P z31}h?G*Khd0`2f`2%-hJX0VrZ!fxuF-$DP%{vG5oX$MYJRPr08;WzvrD1Q(5JIepA z0*|{H+TqLB6$n208GCRd7^`M5l%QY`823N4{v~Mz;)od?01AT#h1vWS)&sCd++ve% z{Ef2?!H4wyH_qP!{^q$xrU80Rk75H9h5-uuZ4Jf7sa)<6<@V|_<|$;4d{2+&xmqr< z0}SXh=f^C{+&q2*Ieg5Fr8zy#V4Sjpd~IC+;52+E=dTw?#O_@lJ6%4xU05OtK#H>2 zG=4jHJ`LU5%Npyu!;B)76ZIGeZn*KeJ)R1*`n(<3d_S_e<*ppwvY+`e@dMEYUM#nGt;nwQ2@dbNrXW;mCBZF|pcOxUl_&V0(`j%+nZTFSF zMlhlj8iMFM-zCP6A6TJs`<~oe*o!x!LFd6M>v;6R(RU5jX?4ivCLrh(Bqmf3bgx1gI_L>p`+*$RE&Ngov;S=&S{>%2L;7A6atJ0zh0MJG zr9ZKU%-u#HU^zHMcu!Q^0(%e8m0R{ubh*d+lFmWb<$HkJ{*|D>NnYmb+W~L3 zhrWD&&p{&pd;J)KtJAvo^XqG@m_X){&%M^$;=x42Ym=ZJC%$Y2<7?ac4=yHr20JAC zrzQ6E7}eVz`BC@Xb|0_jw#^))_+rOF5xbOxdVWf~d_wW`>cf+1o)fk8>YUm88LVc= zSIST4hE4K33f+@Ltvm{B7j=F6cQ-9E4z6J+SQ5-wcP4H#NGD+zx`tfzmn~Dp6;56R zPWIIt+14|5Cay5b$ZUYmX82B1+@D8ef1?Ns2em!IIF6(2gOM!5D7s9>)GD(;Ke|f? z3c6Xet>EC9?c6JGjHJ7{i z)A87Ri-8`fo3j1wdC~3Y28~3eKrHouiUi$r3c9ai?>bHjy!8B0V#IH#)oUy)ys0(bJG@reu)Ms}@ z)_Gj)x&^QY?!TM%FqtG8mHslX_#%7y+oA_+*D!;&>keYvRy>^GF;tv?dJ71;3 z^pMDY^uzy=&jp?viRb#_Q$Ui>v4iBAEr(QxyC*9+AgzbpE6_AXcTh!j=+4kp4H+R! zP}6xqglyVl$nDI4Ro$K>1H;pqbl|xVL2-UtD-_~s< zMQ$^louR_+-zgIWD9Y(yV-bCAcV*{scz68nf5z5h=QiFVIAf!ntd1DE?%@1bd|)%y zai=s&;NF!AXb{o!D8GnyCz_OTSN73vf6A6r;hLs+YSATttQTpz@+7ZC($xX`R{N|D zc|5#k@gpM+NJbZoaLoNri#SvwN?0!e_5`y+^P_p2-*Fp^Q~lf#Y{( z(#9}iUh&6M?D#_CB_tR2i~}Ku&9@iFpW~xjKStZ|5`TU{MmzA7jT&cRfuhWiAtQka zlln|ddFYq+0FE4DYKkm6(nN@(>|`SQ+aKO55xxLsY*RkH;zV?6Kj%syy3INu*h(1MC}gPWou?b?XCQYi8^cuTW+*cSvWNXLG2n| zDjdkvds`O8B}y_AMf(HdFyy`pa2_CyPaS=Za?aE~U#-+x`{iM2@z)s*pJ^N$P3)WO zmPl}nh+D#e{zPT^Ucxwne4|>lb3M= zC(q7?nDg=p2(c#hpLcSacmuXFM_x*m{@n`CEVV8FFlKIve1=EEh$A3yPEJ~ z&!nuc*bxU4wt9JW4h=b6q=Cx3I&ji<$2yM#)Q?Q#m~3Ww?`M(;3s7pSSO={hRahQp zl_*vxFZ1GjKSC0{dM#O)q4{QFc-iyA)Msj=+_$XNi*{7=DaX8IsqO`A_tP)e3{1b* zk&(B6$>&`;u$-wFwU$17{99k!9w^{QGjv%$b%p>lHEl3BeEs_;S9;CF1lZx*??|Jh zMN6K&W{!vmy*5nM-deU_e?tKOOo%upn=ru66KVK-x$f;;!fYLJUm^r+FSXaX&(6oM zjhKZLeEfvOWv~plnpyp|+p~wK7GVyuD`{KEkcy%Aur)yjv5(g6>UNjO<1%|r4YKb9 z@&@{~Ika~WERBEeGbsI#!cN9c%JIiVc-PZQ&fiw)yfzAZuMtkPnHM^le`s?$*zayDh^XN; zqj!Q&mQift8PwUr4|Jb#)W!fe3DeiqOi@3H9q6ui!G_t)T#yZf|5-x1XTY_YSug0i z$>YW4;B~nz8%T^TH~AvA)xBp!bd9iy=QL(jm}2zR0H-;~3mm>BTDXnt?ReP-J(!HL z*3DUBZ(D;G$Ss;`ciV(5)@`91XL#F%-}ndAY98QYGjqJ}rx`%Ax2%&Z>uRvu-%A8h z({|}EsVNTje@XpWvf9NPH7LbycxT1*75zH8cu;6}I|^bm(}r^q(7|=>urCMxWar?j z@cU%jz28RQ=l?%D0DI(p?$=Exjy5h#ByfMPgHLT->u`$MF7~9Wxk%ClT&r>gzSna6 zIWKzSjGFYMbd8^!TabQ2T_fOYMeELWnWe%ZCA_UFd7^EY<&x98ZGvZG4xpg*&4ae;3TpV8cnMn*m&8S-VoUFZ*$Yy1_ox z%lh5`INn7^xmh`NHjb1R6k)ZW1bilc3Ta&_YE|pg7QmtDYNqVscrIGyRnp?hV$bxP z4{kLpZVllvIK{Wv&<1DLf(of8`p}+1X#5jT7B(P)72Y*sJC^ ztH!uVnXQJiuZFdk69{dMf!{(n0V&mU*{jw(t2RW$=7s+Lv;q>9;-7zBty&^6>uHVN zKEGFO%4E&&-2Ur{ib@KXl<2J5X#aDOh^+{a$A;w$M1{}+6(^A5Qu|aL?ht6jH z?Yne)AjQ4vadVB;c){*H_^YKz#x4%JZjLEXkrSbfZCt;3R%Vs%=83~cP5Wq4=g(cu zm!{Dt$ym8QAtu$S*`AUSNcPoI_SJr^-lY0Kitg5Tum`S1f%e>c{Er2n?5Cye5uE$x zc;;GKp$wYf;c4uzerzloC#Sk`*Is9tq9yk6i15CrEZ!2~GO3)*Exy|0W`xRE=E$^1 zb6vbK+Is!0(|XH5-2VMLb=a44gUAdPd0`|KRyXTPE%I{w)P?@@N0Q#y>(QWHE)RYc zq53e1<)-1elFw=WI&6VvB!&b{{!^lgc0R|0?S8=o&s!+_UY^$156UCECYKWkb7F^KFm75RywZ=|_MnFItxgpGL!eQ^%qfVyLCVzqjj@Cv{T0<-kR8TW`;&97^^4@AgL zaLhFnhE^uROaua*LJWm;OfMv%AS4Oh^!cm<9)^*SIwC{+7cyy`E?Qk_g|1~-Usi*g z7UYOq1tY2G+&;Savfh+I5DYRY2tl1A!8C*^0&*1ABw!F&bGoQaO!D z)L<5U1m4aNicHktmMjo)tuw`iRusg*0xBfW^ISra8>qIT)b85i>lX;2Jj{$m>d<Co2tDS^Ss5#}SU8^mQCb%Nm15Lz*e0e#aoIeNb}fhjDAC5GTO6S<5E3vxcF=2_ zLa*Tp-Np%P6qxk6b{k6!?B`X^AQ)cOU><7}4YpvGK<%`C7!-}yu{`jn8j5T<6cFqT zf0D8s-g){NDwE!f3EOZ1}QQZahtmX?*HT?EdpUg>B6Y31u6dCj6f0)BWu`$?EhIAo2@Mv zCkokrI2NAQ;D^>iIWnkUJ`T3gxh1~19(UWH2J`tpHyD6`^w;Q}^F=HgPOogghQCfObkbx z&`$jQBs4)d0CF4*O3VLa(0|Y`w;zS*oeuH$=IJt!Y~KGN(xV@-8a?7ef?BHLZ=tnf9laR~AKi}oXnqnnr0n?a*H z9iv1YhWKI>pY)!ny?yRIQS^Mj55}ae=DtZH>GiVceee@PA0!y50FIz2n$PIc6W8yO z;iYYUNk0{J`DjMoyzD)4?LSV+hmT;TW2U4ZW8oT~Zg?}}y4%$5D4JW{yzq4SOigc3 z$+^E(d%Y=UxmN+k15!W3)$VlZ1+C^j)zKY4ntyh4e;aXs^XJQzmp+$iOU6rDDycOA zm`$p)QrGX%ttZ~Sm@*7pgs$#{tuhHx;Od)bX_#f`TSVpCFA~FutDjKI?C7|bK-K0B zUi>X=b*E?b2k;7})x2qt*n7-e1u|VEd>ZO{uaZHm-NCN)#g#V`4yV6TwNp^a>`CBB zXV4$d8w#m4k)OCoZHB2O((@(L>wQhK@Q$}MOt)x}a8@FEEXPiI zE|MS4+5GyJfVuYw#2dOu%|(r7Vr8Ibn`UAknQQ$LKj7^u>;49GEiJPRDuxGFVxd zn;2+VQY(_6>d}lo1RyE|MxKH*3ERG6G+Z%C#`Rx35et_2+?N zTQuqIIlnb?t0l`eeaitsr_K|SBS5QgI8#t-3(`sHhIhg_WF0eo)7cxwHi(sm{leUc zRf0T4oVMQn>I$Ni9p~^6!!F9^JVX&@_6P!=9%2E7j!lu_*rO$`NsL*b`NSG#hCEH2 z@#q|kW$gF4VhDDAN-ymTd!U8c$=xcbr0bV~dA<4u6*9s|Ap%y?91%F}uOT@X52>TxqKvw^65z#}UjWXSOe+yvAgPn(` z>moGUC}cfHp1usG`9sT%(U-tag^C=%n+#!o3f~c!V|?xtDj~@Lg%l4r>q)b4qxlNt z^CvzOJ4uFN@M@8GRB6xX6U8go6iG(-K6(KT&fj93{;y&z)Y*SqHdoT5r|StTQL_Ek z(&9VUAZ*~d!K%>8?aQUJ&Ia$E*3!oL&hz4D%u3UYs9PhOO2@dh;oi9YV}YmMOQYIH zuJhsTZE{~Q^9rfa#8JxLGM)Kj-L82oCkimSa4&xrJf$yi`IJ7`f9|*(kz0mfHiX9@ zVyNU)A5zan5L#vKfV&-t;k90&sDiG4w;>{O%_AfP4<<#VMO^9eQoGwqKt$tpxw`E6 z@xC2B{Z+L2a~xRi5iO+eVRMq}uCT)=tPF97Pp;hZ-yD>~ls)_RZHUOR$XikJ{Eul_ z@vnVaY{-ROL4(9k?M_1+(OJOtT2S?(V~YSDm7m&=X_&+?)D^Y|f=d*)zhG2vHtZuS z=*>I{dkA~rf#Oovk}mFDn@@_PCSeI#1l@@{4j`|u58X*z<#*u{NoC)ur5a8u>qX$& zA#>H+o9j3_Z%DM`?3%KJ1V^`1r#%FoXx28K< z{waB$)Y=gyopYz8q5yitpksl1#9&f4!$3y}dURw%l!TS^N5vg2E5Y9?JV1lY^lZWg zrBq(u?_L$$l>VhdIqw9h#VgzG@;rXwsVNY`dHir;76#X9`E7Uyzji}He@r&2DgYtd=aOBi3F=6{9vKM@Hr)aar*XrjHHGO z)abQ1;Ua&@LP(7_Y}ZCp+~lREwDaOX#Qc!kjw+6IZ$5_QCT4hKYi{DD1dYM_J9yI> z^Dqu%YsovgNM{0(2F=L?Yx2nujX$XM;`9u)7)=cqMt@MN{5AfCI*glKbp97=eMo%& zLI(dsHm0=}HdGh~KC+cm)n1v}u7Vn!p9Xk+NRd(i_bN*fVjz9Hcsg_#M-~hNhV>BY zgtjnUC*w*O0?rU_7>AbMa;zekc9kLxbU?Wt? z*Fza0NJSGl))-4dl4v?bgNXsfplH#qge8Be4^VT{twO`x6u0^9zX$(%e z+hvYqg}JA0bT|Vu1k?xtI!FuEnwxfrCkbPpctxm+q#QtXJKl=Z{KI6NL;6Cv zYERU{V+J>$R8MVgq9&5VNCXNPJQ~yB(RgVZ(^^HE*{C8Fk#`6;MA|@ZdBQG|V;Tt@ zxD7B&Gx>_c5~nM*b>l5MB|O%@m3`n^Z@vzofUbS*K>JG-53=2=$3 z9>RjJjp~W_4foeTZfNFmgP1Os@>J!+>G2`VqiPJbyO7Jbm7s2ciqA;T%@WSK!vhtJ z)tukxA2z*5)smB3U^NRnM59TbFB8_?#k^n5LaH4L69f={9%jHV_+}+qZ|1bly@S)# z3DsoeNpMPPqM~7@OgxZM}?$fJiH2v7mgf3tvh~{j1v*> za%7&0E_QgV+9{6vzKVm*}@1}r_Cl9*;>Uc^hKlpn3xjfgk~#xZtTLA(k}l=(sW z?B{-)yof*j7p>Z=$hfjtgeP@g#QLOUnbGddNn*m3jNKzCwFpM?)VP8eMIfq*;&=|a zDtR5XB!($N0PXp#DMCeBKN60rN}6$Agt*eM2X;s!&rgU(e_CKq;98-P9sOAzgQlTA zkk*W;kcJ!UPo~y;smc_f1gWDkC6!#H%tEcKEIIs7)FRk_q7oy9P!KKEQKliN{L2EJ zI-mvdpD_PeFx?rE_)Pq;7P(vIiIU{0t~i{v)EPkwWxB1ZQcv}>rl3P?{woH>UwjWB z{~&L5M%+2WtISJQaN`9RhP{PATL-KQVQ>f}@TykLh^CfCpr@Y-VKk=BAKGU^1v-wC zo~i>W1LuOLq)gp`loJai{s(1JuzynKPMbBe(HqV%;8YNcjwP4J;1Mv-{}o}nz{@5Y zV`R+3C_$8!fl1Z$YCBn{{=Py{M(cZ^)TPqoA&fe)%#Upj?Q|u{VC590cnCRvNMvr0 zPQ@`k@Ef@Wuk_o^ z6w=476R0|Y%$Tbh!lX3VHQHrvGP=$@2q-Zgk)VtcE!`>WYx)`f#FPuN74cFM)lxLo zU>>_yQiTfHLWhczssEE{1I;IPrc?pVH9w0U69I5!Ti*D$8Oe3ZsO+@2dZ-{g7_Jw7 zS{SY`LKpQv5cZ&U<7?3gL<X}28`9X*~ya(`5UHwG(SMh6YvMXk8>d2(+Syj7{y0Lj01x${juvfKn(xu*$)ym=Cen?6a~H=DBz&U%hv1l!+)qmv#K{hA z<856*gR?(jdoHYf(7nj^98@$Msp+bO2KJYo9YnQK;~hl5 zr^Y#mW~3%K3?aZsb7w&j@3|C2M8>1WpbfL|VGo@%{c(y>#J{HAPoG9$GzlGaA337$3=RFXTp%+snM2u-419ktlx z|LZfK`+x;*g9y5;fPsIIvHX^$5^QMZzv6v!0h)_-*&Kvddjn}>*`f)``eZ3bVu z{@pC~i{IWu%xN6ioP&?V!%G7xDPkBm@xEV}NGmB~KHdmL`5KBd2%pGQzmSz`*+zD5 zV;C>-`J8SloHM3lC?=(f?>^$o&y<`2^mu3)=7=?L>R>mR*%4vQO=*y=;hY?1dA*W8@`x+EqW@Df7Q6hf-Um~2` zet*9C=hJh=zeKP@6DLiT(xt3uhmRA+Zv88$>$7*W;DHLYizK3rOF2C5Pv) zc$~ZFf4q<#rQS!%L;p^KKh)2R?*R1dzod}){~Cn(+cBZn{K{Kss*K_1B=?hG-VarX zza7ICuIV!1%xx58B)GjVqm71f#=M1|()2o}|3hrePx+4|W`aVXY^BrM4`w(C6uzL5 ze`@je{}mYfA0_j@M1YfCQhD67H$cIHBCq{0P8hL&hH$;#d3mY0s^+J`8-=TZ!`uXo~?HdS{`u^ zy2tTs0kTNsQw}ZEV_a}BJN?|VGED;qeS8h}l{+BEf-zqGNwo`ecQ$ z$Nc1^m?sn<09op<3OZP(U)RTMg)Oex`|CkzyKY2Kpf~QTE5k1Jpkm9A;?w>(vw?b5 zNF}^FPE7;7L)BI&!EE%mC$Ch86r6)KOY`+diQA-X2#9N^+07%)I*`zI8F1Lt^&Ec{ zmka_x>AL?S@RH&z^$@^D;BQ&HGzmomuw|KXPk&nr|2BGy-)bV}x46kv>T%xQb8#C8 z3UL0KeGG&t{R30_H;gWz^jT?=;LrE8vyLs1Aqr`nx7*kEf`HIC0B0gMBc{7h#Lj{G z$?xHN>|fU`34be(X5asx!9D{@c`oJ$EJGG;f)}Th6|nwAXFYstjUZ<2hqp&nHa5UH zH2YZbQf`#Zhq=%4x@K_`3UinJt0nOs`vzNF1i)D;{~oV2J#UQXj}!#o#VJKd#Qy+g z_gn18%BVqbPro^3Z0!wYLcJOQMe3HeBhUlU7K8>YTg-_uvX2wav$z0k!lnT3X@`tV z*9;Ho)IK0F_|kSJzFU{eXlPS9u&iSrp6U3DS?Eg*C^UG7jLr-8R)0wDXP`N_IGBj2UlE7WEvJPLsHS}StBn$+9R+fT$>~X4AJ|!o;lA)#` zofe@xOIJf30Zaj?pqhj1)kGNlwTyDL_NTg^)3WEWJi{#!>30w{u@?ped<8ZOj257d z^U}wJYqI5Mv_Qh_mdVqmPEcmq)(bPIfSt7XW-P?f5d2Y5QI}4-(-%ck#0jarfgBnt z(&|ZSsy`vAfFXI#Qk_uc3z%su&D}d;zwr1wfgOp$+ndo+9n`aZUHgH+W=$f@)1Jkt z%0mNhY1qv}WT(hu3GS=_I3!-3cv^rGa-pM|r%r>ogb<|hcl2CtYVp~XK@01wCcSr4*2 zIKzoy1Oj8L!~RaBRap*9(oYK7)Kt2P0P%VEL(HAl8tO2}qeG|fDn~`kMZw?Rz1zf& ziV&uRdEx_g_#mPGSaC%DK*qIO&TkRx#EJy$<3A)xCt#z+6_k|fWy$i&s$in?9P%A; z{loC+Yf!?dky&y5fj41*hx<7g&k_`FMf}F#yVuU7IhY_0uxqh#LR9GJJUU!|uCL&| zRqnNvyok}euX9@L0RwTEPtW&zm>dC|%+S$7h)&fuOtv7Rt>VnNv(SbtnG!sM4Z>tF z`v%wz#rP{^dslF5+cnhXm6|143Q4O$PD*Wa+($(UT4WNqubX#_$@66TSFEcqWx#Y% z90`~%vUBOMj#Pe`GU_)KlD-Z$svWx>!f?Yh*2uF25gs+s|L?1J_CLMZ;`ZTx2aIj zx%zPU{EGeQuk#MAWSE~748JHtQ;8jrg2@QMaAmB@gRK1bLswi_mIL|EEzE?Z_!gx_ z<}mTwxR3Y@ic;6+f`-GS0tNIj%e^mgivpO}pgfR&J(f+;4^_Zr(7)M(?DdpJ&q50uV$ zV>Dys35s#b1cytp1r9^q`D;ReLQQ`7buh&HzX*8jHXbIC!t(!%0Ob)B4+hS-BYUh~-;ov_%U(y8er z9dC|x*yKPmW=V9P6Oa|rj${0l**J#$e$xCeQWf_|epvxov^bDF%ff(c6^p}d1smeh zJ^Bcv)V~c`hyTMT8Hn(gAtfo`Kt58dnL%uB{L$%iYobnCz;@#4mZC#+f^(`c0lFk{ zH_m(~EuCG@iH7@- zmD5{S>eT!^2wO@%-zyOl0kE&NiI5FjqF3Ti&wbRj&|1*D&Y_J`)s)Ys_7&>GgrDTF zc91^Z$qm#js5daVSYA**ZSn1g=ylyW=I;D*84~}1W-XEt0sGrOykklQ~OAP7-CPs zV$$Xvb=hL#g$Afm?L_$W3vqy^6fwZ()vxPOnd#M)v-AzoKpfIRcg~#pUP9Ap3_OjZ z5eZU*cvs7W2Koe2IaCdky)SiRJ#~_2N$4$&V{@^aes4x}7ybRD2xp?!nulw-yo~bt z{$ec)>K&Sg{P2S~A3F8^V!&w-Fig$VS?WnrnmZhSG2q!8d5I92G)-X07nwDC5}2Ug ztBHh&X(>siHAyM~oCa@HhG$M}d`cHy(C)tz^$Tzci+lS<*pQI9d)JCc9 z2LGiFC*Y4d5#;}^&ITT+jvJ=i@9iApKVT+@FV68UrGEq2Vd6mFuSdzX|C@3v;O;>2*8 z*1queI5>y^>vEp@U*%kAfCuO5k>bM$4J`%nD??OBVb;sdvFExK(kq=P9)@OiC);c( z+Er_h?ax2R$}`t8nG#Tv^7(Z7d*)@U(}T6EGGTX5;tHq-la$Jk>ci0zq~fIG7v|= zZ?&elCb+P$f~zHgki1pS8TWQ8gxJs`A-Np`%ZnLgTyJ02n}E>{V`;2!$x%D?;vmj3f zg1dD+ao1cDyqX;!AWJ+y*S`G59kh*U7km6-An?HP6E*;Q(n04la?@P|ZgY^Uvl(3h zSN9G;BsXc_s?GONl~i8nqujJw%cVBl>g+&ufcu)hybdYJtGzsOQyX^EK|+C{VwP{~ z0l4Z{pjool44z1Ga7!F(=$G|%81&E@p2)cOFC?5DK{pq3-mg``7>X69-u192BH~=y zc)V7!ruC`A-IoiKj9!}irs0XU zj;|awm*!a_zAksoCbHN0FO{Rd$gY!{azEv4i}lC1pg6D0woxG`-FC=`OzBPuLD<%c zZ;a}vF$Ac<3oVAnKj~Q^PiNf&GC90{N7oEyHF#d+lcxN7yBTRq5BELV-v-W8_}+sv zy__5sFhnW_M#}EVm=r$&Q%lSd4Hu8l!q8H2!eL=lNU2|Nt-{yb>wQY|dXBgdTYfLS z7OOj;|6E>qs&%9c0xUt*0(}0dvHMpEs;{O-%Kvr2N6+?v@lcG; zsqBITv$p^Rj-+LJmKZg!HPnO)(YLMC+%eJvY!i*3cq<;)!V)M9(-ZTtEt>@lr_d*g zV2WL%r}ncjroQQS??fg^50cy={Dh6RO-hbk^ebbhNjRF_0L<=F4tC3+1x`bH9|eo( z$&K4!`)5B1`0TbmG*?Fi1n6QCOzZcP4cj}&e>(P?C(qd!Sd{fQ90&;Nza29J)*x0f zG_v`tGV4}Kzuk9c{E;8uBB)cdq-_$L(NSneLYgKK@w`CL@ar%);;)3-7kUVoVeLj4Tm=wv&!>wAsR>wP;4&rk2v4T}k=L+pEfT(?u5}3U;u9(r6$W8*aRg zGu7#km0pnY)|6Nyii2P->^waZq^-dj&m$}nMg%ubom3KgkGFd#nVdByppqqedBWB+ zY(r(tkX}qEiB;Q7@pzQ^$QtkT3Y!I2GGDaJ+KlZvLW$0q58^CLtYtXhI1>d66^V3z zV`R)uUqfwXCWDj5tmNHi1d3F;SS5-DD?+GH-r;Z~@6fpOV!a<*M(n|plh%U7j6I{8 zJj+56*|;L`Ryxx_Dz%dSG$JM{qYQMds(*%du6551@@lHwUOix`v|iUgnCC1|+is); zUOAVwpsLlxsv8ad{;ezSS9hCoG#OzS@2CQ`V@%tr=t7kVtZB4lj7k}H}MM;FZ zCoEg8v4<-QUYeMiqt@LxH-kt1y#rX;*toV@m+MiVj%k)%&hXjU-p1k}(#7q4=_r%_ zhawi|(_(_9I~Ofh2NT*t?yw2cVBB`Rp{wx#g3uhus%bRr2L$rxR+dig0!m9&;fvzv zu!XT~DvLULi)=foIYf)GUbyc@@6IeA&27E}ajKrsG&O1fB>+L|)`b!7Rg!kLzw{RSs?&rfyaj>Dyw4cCYcvCFlql@bKh zR*~2yQEeM)MdCB^9)v5$K0m{)xz(MUUSMyU{$DohV6{fuzpumHe#yYpS$M z274{E$aegVz>`@hbN~#(iG=FA8qaH^G>e23SvOv>g-dszu7~M1aqfh06lvEtpFgs*|%Vf0EmSkdbNs4^q z_L&Rr1!aa-NJ)!X?QpH%HQ#GA2xu0%#(omDG!-Em-t5Xd~P_lqQOr zPq2in-sHku|bdcHj$Y^2WiS4uGHeSSGwJ{YYf zeA9vGg?)2GeLw!q^zQRQ^XuaIt9_1lGsswC-;VFgWvhO#jvunr&_!+T+wK1Pg}uPX zeJGV!8v<0Q)Fy~mSRmgi$fbfjt$q^)ZUaR=IMzP7%OH{SsR$%vz++Hl|FtZMznCB5 z0)a#BxRG{P8;eI7P4h)Vxa4R`NZXMou2H1YLVnd6NNW+IqaIhL$5-W z9c_?jqR=re<7UwXsa&!xX(3!pd@O{5vkOu_=__~?$A^t!rXoNBjK41r+_9bn+MRmp zG;=L6CI@qZQAE1&bmiMzev!kVTvM%xNyitZHdxXOEW5sNKfQXjIWnm+Tk6d(Vs52V zEBK?q@Fgsy=nwcq9wfgQGp%U15}F-_O>E=KOGVQ9yn^F4;ugqF60co#Pa%gr4R_=M z1opjHm5J9%3N!>NPU<{UVuIiI!#ZN)H5$Hb4H~cFM_HK-z&T?mc8AE0!xRj;Rgjo@ zW}bgt6IAQHH|dnwut|Ocw8XFO2)y<2ZiO@%8a9;v-uNQaQRzzKd=omq#JM-LBhKnS z>-F73p6`dHd08n#m2~9~6VKI%Yv23Mt$Ej3ZI=x^!!K^bNqHMO_I^4UBWIKAh4U8t zhmlML{&c-o-;<&=!tvR#5y8ZVsWjR;8R3g$G3c5H)2thY3W@V{wsRT2(dw5ybez7S zr=%caaXkE#;3Y!WUJ74Xo;VK9FS!4vyq}WP)lR##v_e%ZesyPAt{9FjFBvO+kmh;# z>q`F&CAw%pHv8o;T|PyUMy?UplBy9E^{|Xt4)U2lYt|`B-6@L@rDINbR5P{Cr`WBf zu#CApb?#?VL3J1P_kjTWvaN^}E=-sGz`&N~?J`b!gTXx8=tBYtpGUBEBK2yNg!-Kp zoBoA)t4qkypYe9TU7ZU`!K-bwQmmh{YS0#-q9WzSw!*k|l3N&W5lSjJ&nGABMb zJgHRsvoRIRS;wSDw@Xsag8k5taKECCbisp%ADj%YcwBTVL(Eh0i%RABhD zSblkAaw6HVHpgOZ%d>(Lx+jFgrk-jXqv?`vlDlVR;&99`k%R2 zjvw!8Dewmm3Yfj30bh+>on7p0HEeB|EL}`(|N7ahj;es8ihXr#9LM;f)+@T!dv^os-ZOj3?DFCfvI3UtS zJ;jT%nH^Vx>DZE@cimTw09yg&g|P;T+wiKIA!mysxV8;0)5IxgdHsLr5|}tz?gr|i z0_r0ChpxY?!~RFzU!`HAXX}CaIWp94w>(LcMTMz3b-u$?gqp zim(Y`x9c4R#z_vJJ}d-4X=PD zBu{%F#V9Gai`$OlX!Rl#BO>`7;ZgeZ?dfKh`BV#;q#c(h)X|_G-gvg)bf3#kBqr?^ zBWjYdBQ|A~ZkLSD7%bTjOyH_gr&m=j#|%@&FBi@WbFAyvr!r}3?6&*5nz{0d%?!Pc zD8x;Gmn-k!?V7{z>h0mM55%sB3-SkpU;NuFUhEB}6VSizQ%HaPk5O9OTxhs8a84#1 znBDzn%wgwhYh>yKoR#^L-A!w3+3j;*3Z(hq>8BfzyWeb)?u*ssjO-7^n?(n>O170D2z1{>SY$JxFJ9AzKYM1Va&>zc8 ztsK1nOg*K%{HX-Hj*2=n*XAo^`LXvNJNp}DV*wJCwzia7gZDet?b>(A^e7v?Xs)n< zhm?Jdo21%9+o|$tbvk@9ui4=RH-cRg_3&L5Y2{(IU>j)V%Dlo?R!+Esy9L)Qg)L(> z$FABis<86ih);0E9T?WZ$h8}X;*OLG`;e3xgzV}H^OqwlYITbJj>^mVEM%&E77|kF zQx{J6Un28G!(<|+NZ1JNX^dFuW--Ic0(fM&xOvW3lH?${D5S1JrC{w>>FIdB{d$@%;=%a31=tXT+@X}<+>E&j?^e^P zKzl`0-Kz2M2?n_w;qAiK~{}d>MG5ZywGc=YLhJXtAFh%?&kU`KUsfd zLPI|+gRvpZ+EQ@ImZsGbGsh7B>(h6VJ10qn^g=93>dcu%aydzyEYH4l`EOjYaoLCl z97&Pol(Z)4@OSjfU&yrN7!{*v$T9jqy(kU~_-|Of*8*4IT2S1d9cGTfDgCA&VU?&h zEWZe%8x}t0=G_r6Gb*8&6BX0gvL)8Oc(?ZuPS3gBSif6$FF0WuhN7%Dj~>qX4d8as z`4EY``rT}F;qcR_ld}FKdN_vA9}m7;O2UY0_D-lGxp!A3wWdePef41g*1CIc@4EX& zR!=m#`{v6Ibib~;?#N-VmlzY2T{Z^q_inVF{%~Y=H!%1Dd5NpczxO#TG}vLIhdMX zsaZRqsiF&XdU4U%P9sw@phFLIvi21*e4zv5wESL@#972p>lh-HD2J9oY4~+91&|&8 z0`eHj@BLAauHusAs4ySEt0X2Q0ge0#9eae->Xw5aT_5~*bE^neAt+vd=5lNOttab# z%XyZ^>%^{Lv_OAw?he%pmKh%0)LrS8{pH%A{DfAK>!hr}pgY&vPRvMcS5H;ef!>TG-HTVx>%a(FEl)DM^Pd{0m##Of`o6dvQQ z!K(&UvfMClUyT-p-zJBGVz^e3aq^G`p&r8tTB@_#8|Rgp0sLs~qf8stMo%jSy8mmb zQ>~`I&Ee23IA-$u?j+G_w#O6af8zYcWh&2S-*Qg{X5~( zBX_Cv|HCh}xdEk{|9wjTQMZqM{@y<)Tbk?-&OfqRyvtyF!=ymvdv&V(nwrf|q;`Fr zcChul-Idl!CE;sd@UA=WSCOIKvUTcot%bEwhqCOl{@uKjd@tu-*1wOl^!RV7<_T|a z{@rl<0XY)c zGg4M~95GIjEaFXV(|jRm`{CZC>)z{*@}K@7`To^|?3KHK7hf%mTmwQy{+Nh(;ZIfmqlN99au7ZmG+gVuTE+9KVLq(X`fTgt#!9b-${oksH~jy zdd|8xR=dJqzEL}>-Uz&>*vK|x?ZOXP7vtYg_N`3&oD(cqw~A%5?TdMaXP%O_#XNN;-`YbbkbI*%p7vA<%u;IFD!)+Nk) z@!-*%&?Ogz6PEs$%ger?uwA;j^Br3t1MBYen=^QT9c~~(oA@dCL3-+WZ?Y*aUFY(4dxzry&b>jB4!_TI0PJ4S-c~1K| z-!tolZ?`W=OY4=HYMc3K%ADQH&h4qb_NM7j^_rvGCS5YBt}OL^`$+Xi)m^!R(eFR6 zpYp^bxcKy|YwdD%PcCkKEmvLhc-iuKb zpRen;yZ8Czz1rXQf8U%w9RF3uvTDuuiu*6~&(-|C`~7cvy+!@QN9*^;{`%W*|9?@b z;Q`($b{VlZSlU!ul&hk|51R!yPWQYOzrIlbj)!Ba23k`4UJn%JZ=7Bpfd z{u_6EJ7gc=&B!Fe3>qHiV9=Un9BOnP7V0VBm>a0u0Rs&{F$RWcXW(FPYFT@5+M{diXyXpf1S+`*)F_Ce z@i|ZgUiT#D7lB8j(Y1fMeOvrBP2F|sZ;PTC?RZIabI|8W5#}Tm!^}aNL_yb%KJkLk z?pF@gjy4U0ZUXv51j2-d3aAMv(-P?V(MOFD`h}~Z`q9Ub(Tzawehby zql+-$35o&Oy1nRTq4ymTX5DQ@cMPH@iEavdR|{dvmlkNKpme;@^`o~35&HW(kg^zR X>oCBZ6_|rSxk`{B5tuz1`#?MZA^ldv literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/InterestedInSources.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/InterestedInSources.scala deleted file mode 100644 index 518b0be9f..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/InterestedInSources.scala +++ /dev/null @@ -1,178 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources - -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding.{DateOps, DateRange, Days, TypedPipe} -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.{ExplicitLocation, ProcAtla} -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import java.util.TimeZone - -object InterestedInSources { - - private val ModelVersionInterestedInDatasetMap: Map[ModelVersion, KeyValDALDataset[ - KeyVal[UserId, ClustersUserIsInterestedIn] - ]] = Map( - ModelVersion.Model20m145kDec11 -> SimclustersV2InterestedInScalaDataset, - ModelVersion.Model20m145kUpdated -> SimclustersV2InterestedIn20M145KUpdatedScalaDataset, - ModelVersion.Model20m145k2020 -> SimclustersV2InterestedIn20M145K2020ScalaDataset - ) - - /** - * Internal version, not PDP compliant, not to be used outside simclusters_v2 - * Reads 20M145KDec11 production InterestedIn data from atla-proc, with a 14-day extended window - */ - private[simclusters_v2] def simClustersRawInterestedInDec11Source( - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - - DAL - .readMostRecentSnapshot( - SimclustersV2RawInterestedIn20M145KDec11ScalaDataset, - dateRange.prepend(Days(14)(timeZone)) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - } - - /** - * Internal version, not PDP compliant, not to be used outside simclusters_v2 - * Reads 20M145KUpdated InterestedIn data from atla-proc, with a 14-day extended window - */ - private[simclusters_v2] def simClustersRawInterestedInUpdatedSource( - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - DAL - .readMostRecentSnapshot( - SimclustersV2RawInterestedIn20M145KUpdatedScalaDataset, - dateRange.prepend(Days(14)(timeZone)) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe.map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - } - - /** - * Internal version, not PDP compliant, not to be used outside simclusters_v2 - * Reads 20M145K2020 InterestedIn data from atla-proc, with a 14-day extended window - */ - private[simclusters_v2] def simClustersRawInterestedIn2020Source( - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - DAL - .readMostRecentSnapshot( - SimclustersV2RawInterestedIn20M145K2020ScalaDataset, - dateRange.prepend(Days(14)(timeZone)) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe.map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - } - - private[simclusters_v2] def simClustersRawInterestedInLite2020Source( - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - DAL - .readMostRecentSnapshot( - SimclustersV2RawInterestedInLite20M145K2020ScalaDataset, - dateRange.extend(Days(14)(timeZone))) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe.map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - } - - /** - * Reads 20M145KDec11 production InterestedIn data from atla-proc, with a 14-day extended window - */ - def simClustersInterestedInDec11Source( - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - - DAL - .readMostRecentSnapshot( - SimclustersV2InterestedInScalaDataset, - dateRange.prepend(Days(14)(timeZone))) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe.map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - } - - /** - * Reads 20M145KUpdated InterestedIn data from atla-proc, with a 14-day extended window - */ - def simClustersInterestedInUpdatedSource( - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - DAL - .readMostRecentSnapshot( - SimclustersV2InterestedIn20M145KUpdatedScalaDataset, - dateRange.prepend(Days(14)(timeZone)) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe.map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - } - - /** - * Reads 20M145K2020 InterestedIn data from atla-proc, with a 14-day extended window - */ - def simClustersInterestedIn2020Source( - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - DAL - .readMostRecentSnapshot( - SimclustersV2InterestedIn20M145K2020ScalaDataset, - dateRange.prepend(Days(14)(timeZone)) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe.map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - } - - /** - * Reads InterestedIn data based on ModelVersion from atla-proc, with a 14-day extended window - */ - def simClustersInterestedInSource( - modelVersion: ModelVersion, - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - - DAL - .readMostRecentSnapshot( - ModelVersionInterestedInDatasetMap(modelVersion), - dateRange.prepend(Days(14)(timeZone)) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe.map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/ProducerEmbeddingSources.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/ProducerEmbeddingSources.docx new file mode 100644 index 0000000000000000000000000000000000000000..a6cb14b8f22a331ec437f76204b952ebfd731d3d GIT binary patch literal 37587 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 iTX3YsOI}Y!xZb&=7W>FScAFM6yut9lX4r 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/ProducerEmbeddingSources.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/ProducerEmbeddingSources.scala deleted file mode 100644 index 01d391f11..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/ProducerEmbeddingSources.scala +++ /dev/null @@ -1,86 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources - -import com.twitter.scalding.DateRange -import com.twitter.scalding.TypedPipe -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossClusterSameDC -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.Proc3Atla -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.thriftscala.EmbeddingType -import com.twitter.simclusters_v2.thriftscala.InternalId -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId -import com.twitter.simclusters_v2.thriftscala.TopSimClustersWithScore - -object ProducerEmbeddingSources { - - /** - * Helper function to retrieve producer SimClusters embeddings with the legacy `TopSimClustersWithScore` - * value type. - */ - def producerEmbeddingSourceLegacy( - embeddingType: EmbeddingType, - modelVersion: ModelVersion - )( - implicit dateRange: DateRange - ): TypedPipe[(Long, TopSimClustersWithScore)] = { - val producerEmbeddingDataset = (embeddingType, modelVersion) match { - case (EmbeddingType.ProducerFollowBasedSemanticCoreEntity, ModelVersion.Model20m145kDec11) => - ProducerTopKSimclusterEmbeddingsByFollowScoreScalaDataset - case (EmbeddingType.ProducerFavBasedSemanticCoreEntity, ModelVersion.Model20m145kDec11) => - ProducerTopKSimclusterEmbeddingsByFavScoreScalaDataset - case ( - EmbeddingType.ProducerFollowBasedSemanticCoreEntity, - ModelVersion.Model20m145kUpdated) => - ProducerTopKSimclusterEmbeddingsByFollowScoreUpdatedScalaDataset - case (EmbeddingType.ProducerFavBasedSemanticCoreEntity, ModelVersion.Model20m145kUpdated) => - ProducerTopKSimclusterEmbeddingsByFavScoreUpdatedScalaDataset - case (_, _) => - throw new ClassNotFoundException( - "Unsupported embedding type: " + embeddingType + " and model version: " + modelVersion) - } - - DAL - .readMostRecentSnapshot(producerEmbeddingDataset).withRemoteReadPolicy( - AllowCrossClusterSameDC) - .toTypedPipe.map { - case KeyVal(producerId, topSimClustersWithScore) => - (producerId, topSimClustersWithScore) - } - } - - def producerEmbeddingSource( - embeddingType: EmbeddingType, - modelVersion: ModelVersion - )( - implicit dateRange: DateRange - ): TypedPipe[(Long, SimClustersEmbedding)] = { - val producerEmbeddingDataset = (embeddingType, modelVersion) match { - case (EmbeddingType.AggregatableLogFavBasedProducer, ModelVersion.Model20m145k2020) => - AggregatableProducerSimclustersEmbeddingsByLogFavScore2020ScalaDataset - case (EmbeddingType.AggregatableFollowBasedProducer, ModelVersion.Model20m145k2020) => - AggregatableProducerSimclustersEmbeddingsByFollowScore2020ScalaDataset - case (EmbeddingType.RelaxedAggregatableLogFavBasedProducer, ModelVersion.Model20m145k2020) => - AggregatableProducerSimclustersEmbeddingsByLogFavScoreRelaxedFavEngagementThreshold2020ScalaDataset - case (_, _) => - throw new ClassNotFoundException( - "Unsupported embedding type: " + embeddingType + " and model version: " + modelVersion) - } - - DAL - .readMostRecentSnapshot( - producerEmbeddingDataset - ) - .withRemoteReadPolicy(ExplicitLocation(Proc3Atla)) - .toTypedPipe - .map { - case KeyVal( - SimClustersEmbeddingId(_, _, InternalId.UserId(producerId: Long)), - embedding: SimClustersEmbedding) => - (producerId, embedding) - } - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/BUILD b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/BUILD deleted file mode 100644 index 7926b5dac..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/BUILD +++ /dev/null @@ -1,13 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/common", - "src/thrift/com/twitter/hermit/candidate:hermit-candidate-scala", - "src/thrift/com/twitter/ml/api:embedding-scala", - "src/thrift/com/twitter/recos/entities:entities-thrift-scala", - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/BUILD.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..33a2b30d09c28cb57236a6586d8981fedb4b797e GIT binary patch literal 36845 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterDetailsInjection.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterDetailsInjection.docx new file mode 100644 index 0000000000000000000000000000000000000000..1b6a480dc6593fef505e6446646bfeb175a9fdcf GIT binary patch literal 36879 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopMediaTweetsInjection.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopMediaTweetsInjection.scala deleted file mode 100644 index f542e0cbf..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopMediaTweetsInjection.scala +++ /dev/null @@ -1,13 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources.injections - -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection.ScalaCompactThrift -import com.twitter.simclusters_v2.thriftscala.{TweetsWithScore, DayPartitionedClusterId} - -object ClusterTopMediaTweetsInjection { - - val injection = KeyValInjection[DayPartitionedClusterId, TweetsWithScore]( - ScalaCompactThrift(DayPartitionedClusterId), - ScalaCompactThrift(TweetsWithScore) - ) -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopTweetsInjection.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopTweetsInjection.docx new file mode 100644 index 0000000000000000000000000000000000000000..e3f552287b039dfdafb6faf128b119379e382777 GIT binary patch literal 36864 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 z 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 B*n0o~ literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopTweetsInjection.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopTweetsInjection.scala deleted file mode 100644 index e09176813..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusterTopTweetsInjection.scala +++ /dev/null @@ -1,14 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources.injections - -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection.ScalaCompactThrift -import com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores -import com.twitter.simclusters_v2.thriftscala.FullClusterId - -object ClusterTopTweetsInjection { - - val clusterIdToTopKTweetsInjection = KeyValInjection[FullClusterId, TopKTweetsWithScores]( - ScalaCompactThrift(FullClusterId), - ScalaCompactThrift(TopKTweetsWithScores) - ) -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusteringInjections.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusteringInjections.docx new file mode 100644 index 0000000000000000000000000000000000000000..bcca6387958f06b3ca511c48132320077ab83a4b GIT binary patch literal 36885 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 XhXLNKz#Ih1Re}tO!0a)v8^i+uavjB? literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusteringInjections.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusteringInjections.scala deleted file mode 100644 index 22ba173ca..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ClusteringInjections.scala +++ /dev/null @@ -1,16 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources.injections - -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection.ScalaBinaryThrift -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection.Long2BigEndian -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.thriftscala._ - -object ClusteringInjections { - - final val OrderedClustersAndMembersInjection: KeyValInjection[ - UserId, - OrderedClustersAndMembers - ] = - KeyValInjection(Long2BigEndian, ScalaBinaryThrift(OrderedClustersAndMembers)) -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/EntityEmbeddingsInjections.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/EntityEmbeddingsInjections.docx new file mode 100644 index 0000000000000000000000000000000000000000..8148f20d47cef67afe8e65d11dbf0afcf13f4542 GIT binary patch literal 37006 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

uFzy??&VK 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/SingleSideUserScoresInjection.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/SingleSideUserScoresInjection.scala deleted file mode 100644 index d3fb79901..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/SingleSideUserScoresInjection.scala +++ /dev/null @@ -1,12 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources.injections - -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection.{ - Long2BigEndian, - ScalaCompactThrift -} -import com.twitter.simclusters_v2.thriftscala.SingleSideUserScores - -object SingleSideUserScoresInjection { - val injection = KeyValInjection(Long2BigEndian, ScalaCompactThrift(SingleSideUserScores)) -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/BUILD b/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/BUILD deleted file mode 100644 index 0b02e4ce9..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/BUILD +++ /dev/null @@ -1,60 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - ":data_sources", - "3rdparty/src/jvm/com/twitter/scalding:core", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/simclusters_v2/common", - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - "src/thrift/com/twitter/wtf/entity_real_graph:entity_real_graph-thrift-scala", - ], -) - -scala_library( - name = "data_sources", - sources = [], - description = "DAL datasets we wish to expose externally", - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - ":reverse_index_semantic_core_per_language_simclusters_embeddings_presto-scala", - ":semantic_core_per_language_simclusters_embeddings_presto-scala", - "src/scala/com/twitter/simclusters_v2/common", - ], -) - -create_datasets( - base_name = "reverse_index_semantic_core_per_language_simclusters_embeddings_presto", - java_schema = "com.twitter.simclusters_v2.thriftjava.InternalIdEmbeddingWithId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.InternalIdEmbeddingWithId", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "semantic_core_per_language_simclusters_embeddings_presto", - java_schema = "com.twitter.simclusters_v2.thriftjava.SimClustersEmbeddingWithId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingWithId", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/BUILD.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..5193e17554b7ae731f340d6dd69daae48963a266 GIT binary patch literal 37152 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/EntityEmbeddingsPrestoSources.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/EntityEmbeddingsPrestoSources.docx new file mode 100644 index 0000000000000000000000000000000000000000..167e7eaa0f5e29b7c4caaa9d0f4f18f1cb4927bf GIT binary patch literal 36795 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/EntityEmbeddingsPrestoSources.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/EntityEmbeddingsPrestoSources.scala deleted file mode 100644 index 740d0fadd..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources/EntityEmbeddingsPrestoSources.scala +++ /dev/null @@ -1,10 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources.presto_hdfs_sources - -object EntityEmbeddingsPrestoSources { - - final val SemanticCorePerLanguageSimClustersEmbeddingsDataset = - SemanticCorePerLanguageSimclustersEmbeddingsPrestoScalaDataset - - final val ReverseIndexSemanticCorePerLanguageSimClustersEmbeddingsDataset = - ReverseIndexSemanticCorePerLanguageSimclustersEmbeddingsPrestoScalaDataset -} diff --git a/src/scala/com/twitter/simclusters_v2/images/bipartite_graph.png b/src/scala/com/twitter/simclusters_v2/images/bipartite_graph.png deleted file mode 100644 index 15baf9b82cfe9d7d0976bc265abb8149e1122719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62580 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

0C)Nr;Cy8tpqKAzG=Iz?*U1qmfx8knkc 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 diff --git a/src/scala/com/twitter/simclusters_v2/images/interestedin.png b/src/scala/com/twitter/simclusters_v2/images/interestedin.png deleted file mode 100644 index 28142e6331be5ecdf14ba98f0c6afadfa651442a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67315 zcmeFZ^;2A5^eu=xBsdA~?(UM{5*$L~gamhYcMp~z!Ce#Fogl&8U4sV;k~#hPzNx8s zHUGd=y{i7HlgqvLoU`{{d#$xQQdLD36YVt`3=9mWyxd!L7#R2l7#P?v6eRG?J91JI z7#Io|`L~jq9s!?|6PgP(tT0-NY`mY=lpRj zbI6z|jFN#y0`7nRBorWU(OEXXx51%+{og+c2qg=b;r}1k%z%HOyWTe2ln+3V`+tAH z75x9_ivMSo6aLRy{r~@zaM8OSzW4Zlg~vH+;Ai@GQPi?=eQi911}=$BM`h)CU&p(H zk^2{ae9BJ+K_}SXPiRC^|0n$=Y6x{gHwOl_e!<)9YJ=8>bY5$1{pbW?ce`5a`Kpqg z_sve`wI7C(N(u^b7&VGwbQ^5G2<@aogG)WB>;7sVu>%{@XqR#;?)Aq)t-)q7`9pUG z9W2f{a$t4GUj-ifHIcngNrOh8`^%C&jWSKfixKwDx2(T7%?2U{$-G&t4ml}tP-MGq zsT-uD@UVs5e!mQVK~CU(dx~E>*UR4en=4QxpB53F0Iyu9nqV-VJYG9#YstDgR!>hU z0{Rq5DP8BAz5SzKxZ(R{4HWzN0)mCXAxEVMa5L(U!tb~5e4@i56~ep5$;tBCj^&S1 zNMVu|wJq@6>O)<8@3Gkv8ZkY{U^|pVE8XF9Po)w}m?S}i;3IBo-BCJS{B9)5bU2yO zbgM7Ybhb=uZyNi=$gv+kPpe!Tj=FqzB#m%h-&y(XVMwdR{#e%c-=FD}aj0ct5~94C ztYAZ%EoWMNI|n)snW(-=fBjf1Y|4{6l06^j&_f;_FK5Y6-toj z0^eeHNsNBwweG7i>FwL-4wf#6qFM@gA^uq7u@Q*eN9w*piH6Ta!}a0k%jxAHL0*|) z**Fr$fjClT)%6za-DWs>P>;udxipe4Kr;64^|5z@PzX-+p~t+Dzi*G7$#R3O)9_$*=kt*+ zQp}V}I)~(n`?_!3g+~&CsXRp~J|w{NcGX=vjmy1o)UD0po83!i)G`);GV6b4i{RNt;6xw#OL*~7_K zFZA53S9X0S@%sBj^=T|~l7QBJtu4=dBz4Idg9dtDG-+Y{(azs(&>YWKy9@nt{_i#% zaJ<%YE?MqX`px=-v95jJ{QeH{p)=H57-`6Ly+BAZtaUw-{tg$WV%PlEY99{obtj_nYY)(62%$15#L5h7+k}S7c&6MFgy8QH$XD zEG8t}qfBTLUP7OBEQ5cXx5EEQtsnDRvK|G3FySV4{XitB9#;#?W4dO^eu3A{Xo8bXp@?P|MsV*{Z)@(;V! z7AlP*r4|iT)ZVT6a_vgAp@&3SGE`Kv|6Zkl3pR!TgG^)rAI?k0Ei^I_WFnlmIZ9u+ zs+`t3d|PX-`nQ+@8Qw0nx>w(AMYBt(_k91t-udVxCjc);F$ulZ)5RdU!Bw#7G5vdx zQ{9@;m>T@N6j;zf#F3+Pnc$JgHsfb4W-eR5iihSoQ~8aCWjp5-5Gnipd%rRa`eU^U zo}V6~LA-?1`~xwG#_~;`61Edt&Z^&SAm&w-hv}~c@3Z!KtrZVxy&7XlIqgElG=c-f z{QtEZ@m({e8llTAhMf7P<#G;+a5NkIaE)tT<;PT>jtNIXYH8Rn$i-O1p6|937G8+m z~REPQDc93*g$0*=5R zpT?s=dhw*|@@&XXynqAeRREhoEidFa6Gw2o;oUc}t%X`MN%LQ+tQlPvtf2^x3KW+3 z%d_P=(eTJvO+E zo5QD*p@PMcg9!u`M!%_Y1c%qO)pnV$67J!sygDif5uGmJ^$!|YcZ4ME+H2FVVXh62 zG^$p)D_?2dPgn9lf!d=u{VyPgaU=%K$FoJ@Z{zRvh3M%5QHn_87QPxgq#?+4xg*$h z+<(+DSD1-l#nU}rSu*X9iX6)lZe`-9P6P*yrqcAG_l0xCBR#IB`!>;8${H}H+w{Pu>E_0~GDvH|?7E*caomf?FpRa`vcz+Dm%6jE6ZnI1&F zZz6E%RhpuRE9Fj>8wtm}*)#W|-9EYP$8b?(^9mc8=}CApA`T!nr! z*TJB}q%`6En6Wq?dF2jX+eaqH<6^5y5s$r}fV$V9#RZjd z{duG*~fa>gE6~<~vV^#I=&mL%8NKm14y^ov~M3q4s zeMS~A&4{4y6#;vZC*KvHo%nEb!o2aVi=}bJDcWMbDoZfpfo8)RPQG{neSvBw|aul_`gSuwujSJ$&iU$0gDNWL=aCo4rB=d-%x3?Ov|0yJ|HjHN1Y7B68FcE3I|0& zN>nK~`)OzoOv(OxbRo(b_cOyua2C2&yB_w0&)RSWw1sv5Vds->BDk`OQitdFU4i-# zNwwjYUAf$yS+^ovtdb>_nrpMx*4zZ{Je|Z+O&i#RD<=fqf=hrSSkl5Ggw?_^T=VOB z-nhXGXn^Y(-{b(u2aVjohtPXsp=XyK&jukT3~CU4bZ~a~%ewIkJ+~wL>pr+4Sc>Ky zPdCewCL$EjwbzVdZToOE7cd(bcE3cMrk^LAQp1s@uF}tE5+D2uMBiNqj7Y!#&EluP zDShATS-7aGtO=6EIE-Gf2T7p;5RIK+%$ z=}%RBUZC2E#G|P(?MGW*yDrlz4?2QbC*X-fbS__@8qtkiGR3N_&t`!%RCs`A%=ai( zibB|ur6|RNtVR@*GIcUGL=&*${Cm85r|OtH)AQl${~$gE?b6LoyL}*4@3*#QbD2k#=+@@x&yBSC)t{lg-i6y8PEpi%{>59R z9@{Shi9zVRS+bVA|1_GeCKS_?Dg`$rM^Wn6+#*;ebl||Y<%X4d`d2sPFxkoLO&p?S zkvu>hEC?#uB8-MU7yUU~H^=kuJ^)C|FzU6@;MW-UR(E=n6SV*iR#&3!?@{@sHh|y< z%)4%vJ41Pr!AM&GSey1mVCMlm1-DmQN@XW&YsP6BeMqLw{ImF*pPpMl0h<5Xr@zz* zJYsDZmrsAD-&JKxfa-0~AN`3YOMUFV{=x@tl$i{H;~h?HiDt^OeW!uX)Af9**F*Lh zvBK{L+hw@<*-{PJrrL&XhCwYI16q!)4Vv>9jBriRuee7IIMXE9p-Omm`^f*0Xbv?- zlb|x6Dv;lrlqFA5sAL*U=QQgB|FQpIGQVG%(4Zh_`h)+KSWV zU?Rt7a~X#E0S`y+Bbc43PAjl^G-!2;?C^a+IwiNJm6~*A=8$!prU(&q3Pr-!B<=&9)pisMFo(Og4c@H|J^VfB+V^+uA6rCdX zowiOF6$(qGL|5wUmQV1w4X=5v4peAaFs#pBhhZm+%UTCJoI|roKT6x<durNYmRE`+#s%8NGkGyYyh@0L1h+>GW6O1x zpRX^ZePYxuKtqLK;6HER9!a0=LB$Y*Op_3UFqLHr>G1JPNLVBc(C!6q3?4^L22MVA!EUYX{p0=qx2n6p zzc5}=*Avz9qNmnMoDuy`x{rl9dRviU(O`Oi=Kqg*gK{RiiL|y5o{?Si6~8Es$6;X_ z$-c^fVsn;&V_v@cGQb=GpUeN;k+|F@)4wB|59XXq{}infmnH0ugkPwf!M8OBvByLM zsh5U1ut3$OGAbAMH>i`sS#b}|_15!I?cTRYyXgDc>F@q)J_0qVIY9pe8jGneTS7+l zw{-wiIQ(`SJc(dUdvsJxzL?^MjR{)%)!6SlsMp-z_P#iA3G_h*Il;{M{gr}FdZN^3 z0SBw@>zGnLC-w7aE)1%26zwnNbfQ@4+Rd`~#3RQrzFb*9{Rz<}0KmoryDL*KhV0Ak zN#lCl&j-e${~DgXg1U!c?(a7=0I7zev|SD}Z^iPj)wFNxGB)DUDZPw+&HLS8pcwSc zl*gq@1YD%q4%Ts*bJ)uuNk)U75D`11w*vqpk^lC36g0RtDDQrrNBoxA;2E}$R)F9` zMoqes2tatmBb;{r^Ha-_2>jz=U3D5sMw`Vc8OfW`tp%FHnR1=+d#dmsMD?NW=JbI> zSD+dpKC**1nng9fCvU@5rE`VbCBUgH3>b(fXMfFaXH!0tCt|oie>|KuY66NwUChGR zS6;;~ycHIZj&b9~pPQg%G~o||PxV3-K=dDAErpN#Ae}cmL!T+L_iM&z=Zp&yB)n); zLA?tUM?=*`wOQ{lXuBE{4m5U=x;a}HcOV(U+FR5Ue&Kp(oXv_4A$=8ANClhzDAnu> zR=lo}oORa?WZ*pc&vXq6tfTo^G70seis6CaapYue#{Z{|yswerAdyi6dxL%6&iFm; zzTQv6rZ#NlaJo3ykNZy;Nk}j}Ue7thc4V-Glmm7uwYmijFv^qUp3~o+c>t zUG1XBc9p4NPR5|g#WNd0JrG95=0wKU@n0fS<7ToR3;%SZ{ko>a?<2BFH|Z=Ql^V?# zK1d#kpnislm?;q|XvrEFE^yj8;hfi-dhdE`SGJDhhA9viQ;zQn_*pT_J;rarG#?v{BRa+v-lk`^dbOZ3LVynxgp)in$N&F z$Pe%!LLdwU1$b)tifZr@Gh}pE&_^)-!@@EM9d}#kwNAUk5=TU=65D*QgVf>xt`oCS zC)yPN9sGhv3?NtJV8${sWzJWa8uMl22|&2lYguh347aQ(FykBi;{AY3gsH>tNX0%};^xDNnyj}jXI z_P{B|q$AQr5E}W^3Nk1^*o`J`GK62*Oox0SEOv&|9l^`@cEeF=?*BUj>fjG>|2Bro zv8~_3sboE?LJ5~!ubM#_fg|8nP(AYlY|2pr1V=6n!RG{jvCg{GEngb3V zatb{-6+Q8LQ<9-O04&0wzDucJ>1s4W^K%-47*ipO!wiMk98e_}GV zm)gWcaRb6lUEtaQ{9alPaYCtiJSCFo=w?wmL8aiS3#sRVD>okCK&R{vrMYRmjP}SQmB)H5-~a zgH`3fO?e(Kcb7CCRQ(`=@wiHsU_ zfs?A@Lk04mrJ{Q8>nY{b*-w#Ive2nAY!|9w z(M+V0E?M}yiyiLWtR<+J#&%MEUw^QhDdPE^DSM>{y@VKS6p3GzW0i>jJc3yj+~$QzFUg|vGU1iY2_AHb(XUF_E4pghUeNl!Oy{%x znl9v8W}}nm8!67v=%(K8<=U!o$R~0rYs0Knwo@J+jNP=_>W-We`SGWufch2;IT=fC z02*?($;lo$BN0b&xVt?XDvfX;$Ti5kW0$)l^hhtrNHn;c#>M~X-)IZhzJVugUjmTY z8Hy_<;OO8$cijp~$yvJ8iTgL7OLC-czP>=?*Z0tlZ#v z`PKvic^RRP83wA=QSW%a?_wyJqOY^hv2*fY&7b{^2LcWMmqJ1U1Gz`!W`Bzr%30 z6C^mGXPAZ~vx^JM{7rIQqtdE7W!0qQWnA9D;TGLSd zj?=C{`0uu!SHJkJ?NKxkK@U?TnwAakD`<)y3gd6L17(qLS=k&_Yklr_(S5r#FDeOq-hFN(5 z=(4ApV}#;n=PFGVk=1Lx;FS2=al80gGL47vUr#6hL@DU!=BhBQAaw_9P64g%hj=Q> zsvhsi`mGEeOC0r&O8=Sxka^QH?H$05zwG;P)4UZ|Z+)`&s!4%jI1%)XklIh<**TiT zd^QZE`iO{^6tt+ujxH{Kx`{ zZxhfk7);cuSb-YJy3ru861{pW&=E}0!>$^mp7OL~qUb^O)~UTq?VY9iH2 zh8ry1Oi(1l8!^bJU_4!K3N%vgoWb#Orni0?|#jKZQ=G7^-5F8TiprlRmuZTa!j7|esmFkUr(jtN{fHEpf%>V z7t!*b-BSG4+@I7H^NPDKnNcI?dkqAhn?XGp3*7vOsSp$dkb?mAGa^TmaD*Te`+8Tt zRI9CIg$ZY^(Qa?ChnQDrm{OPT<<-|;Q$IevO9aT;`Q`02Cu|n|NyYmgMZYf-sC*Ov3m>wGhxYOMf}~Pw#W>E!z)Crb+n#eAFb3cMhZ9Uk z0qZ8iV?8&jUD}@{Mnv1^qxZO2>0B;y=`>b}YL{-nPu(B~ryb;>f=e5RhnCVLc=UyncPOoXC-s!jo;hvN@C(eynSH2iJ`NRedJ>Y9ZcF zrN!Aey9^wN+jR0I=s`R<^B|>m92wMTwlupqJNN7n$Q@pI{^`L};hhV@gS)6fZ z6KE{K(Qr(p0Y)s;VZO=$_3dqE#b(ThyYo%SU5OWaitO!pD;ro3|F;(aZy@*_VdHTl z&BzaxoKuA}Cqhq{h3ePq_A;UPpQZZuZ-n@k zoBSJ};c}(|5Boq#f+~ZEB8K$pd*k2OPg~E#9FHp-qksTsXpCi~hj9A=KOM8M5g?$F z*=nP8uX09bjBw0Ss*yByLZF&hPMmDr)0dqB`p2n{?;sJ86i{XFnb<&&=r-Gg)gmyA z?C|FrFcCuoLdwkf7&@Obi3bT>sP%!^9L~vN4@C4Cu}{(lE|!66@ri20;lxI>F;|uRR}lj@q3M)KlH7aP=5o! zy;RO0jmq5Z?3hm+F}^7P#qwfK=y`Ya%d~*+UzeWK4NyX`7>&X(Uc~_Qho(YlDE$IZ z6)_OIX4)>0XRCRDx|dP|`ND6X4Fyg}!x{i zlUX5r=W#hzKrQ}J3pVO4{?J03r?aZ(?+)^k{CHB~)EcM1yxZ%355JmDTaIaZL4)(! zV<0jK(3sOr&wr22-;??NQQQ8#_#=`@L19N2?EU@oQakrM@uxb+%^pM@7DLZn{K4BA z|9{U_Q}VlVFGS7*sNWnrGZ}UGNUiI1ij|x6hP`^l{Sl+44S=Co(7DhRGy(pZ8}K7| z4CvXpX}1bG2O#nh3yb{-!Jc-oc@2kjf39XPH0tzQLM|f9TvGYMMN7H+@9B0u7TW$6 z#DG+%Ea#cTI}NZC5v@Wp%4RyluG{HKv!p`h->h70f1vY4Z~#_Lc;`96E*y)LN+F&Q zF#D)L?h)AGUu|;S4k18~(gm>K&2ZtG$(0)b)u^oH>s;$V)B}kzo5C$p-7a^AfJK+1 zgau0aI)d)1(?pSQ_m#L`8=xp!T&?F7D&a1HE`cN}e$^W8%hVW^?DqhKBB4v}tB|b* zz(4v*F_QcR8WHh9AJ2~-KdR*aAy{Z;N-TCFXb ztwru(VpMzvFhPA!l9>XIJrl8A_&{Fl5{&YOvrq-a9`ca6UAZ#$g6+jo&88H{77-H8W7 z>gML^(3Y~y3TX&os6V=|w_jgl|2d^BNT-y(Q8FWTHOifxqK8-v*y6Y|suYMclgk4@ z*uvj6&JY?vgQaf)hryXCWV2Pe(zDd3QX0A?`r&6n#5e7Ft63>O`hy%L*9-7o$kU+0 zB!qwT%bgWt3iLo7btLnDyhw1$owosb^MXmHW%$!-i)#aBxd&q-pnv$jn~xA&>R%AI z0_K@o+v*}mug(HHiA~7X0_#ha-vFaCHzqM3#=Yn|0O1`?{w^+MXF=09ActN`dp@b7 zFuZbW+bUe?Np6z}gj;gT=`{sw?bn^cHXK;0nJ#90yYkKVW-$W1*+J*Or)t~3KhuUQ zsqowCxjE~_m|f(gmo~{V&Hjowan;6$JE0d6XfRfcV-BiXah8#k8oyNjl$&fZQYv>w z|8@ReuQrtRv3}mL{7Eg{p8@c|Tu`j8%(hhbe7{e=4FJPrYO&d1+>$lXK^#o-a(Q)! z-U#2^aOG!pNRiT)2<3#?ta4B5z4hM)?yH3=&WdpIZ;Sy!xa1Bf&)kkC)fqR zRMJs*d2N17A=7`p=`uH}DA)oy4O8iT?%Q~nH8c9?rhkw7;+EQ0T9&QuXQy{6>dio1 zTzv*%6E~{aegl+%M{n%gIs}};6{*r$SGe*|Y1-wvAT}-hsR0{5?<7|!0UCLam!O(W zi-}xst1h>BUcCnUBs-c7{?0=zkiyIB$N*rEhHw~>M>c>Y!Bwf zA0K~xCoN?)XsNpZ#2eyj`8>Q!Q^|UXXLP(MDDjanN(q%$9JBU+fmh(BzfypgM)UnF zUsB81iE^Hr^W&Xkrgf74CNZ1Mhx< zoZO1iv_;Ek8A7~GixI%h#!7{vS&le>Xd@yTicQ<-jcT^38Ii4KO13RWJpsHYX*4`{ z8qkU~yu}5bb~udlc4Rh2;fwIxY|4PBxTu6=9-rnU?7XM6outS%=@g-Dehb8AtLblm zDIwt86ET??Iws#k){vvnMwqA>e5fe*H^JH^929F@b<1doX>pP*=fwP6L#vqj)3f#5 zDf0df%A0I{)?nEjbmg5sEn6`eLdP{x#3s9wv>Q@x}n76BD#hu&-b>U z;PK2xIF_KN9v!RI?c`G3#a5r;Ui|qkAGVMb(>eww7&}u_5LJkdqb$h2@b&83ZKC`q z&~*G+aXe1eX&cLh*ISJ~&GG<2Wu~1B4$10`d+7JK$G$O(n0#{h1Ca))dqXIg$@O(s0`^fr>C?iW=lArRMb33myuE3?e$hvWH7co5*( zwPnt)%;-5H2O5Wtzs;Y88$4fNyhH0Jkm&jHBb}VX%Pntm1Rb%)YPO70oGgWKRKERY z*xR>>qq|3rNk*!cCT=>DC>cHWm2me9Ji6(!&HU5emiDbEW{enBVbs*?E-ryN>&n4I zkH|15?^!J!%jvk(_gt@q+!R;^WQDd&%x^Y=Uxck7r{a9qKmeQ)az0?bWWe?seA(Q7 zFS)7P=26RQP4-!021US?&D5}f90Bbk&|KfF@mpsV#BIi|mTRFF4d%ST7$)E2GC3`_ zqk*|9&K&);sb#c(_a+4s!eF|Ia2tcALT`>3r`R?OlnvVvPQ77PmI_cFihm(v@>EkF z5$y)ba|YRj)JG;L#&#XYx|Kc-;R75=|o0fE$#4e{$Q#URP?uvP?wplZ>&fj zXL_Jp*0f8y1#55cP4n0`cV_z{s*v8rvt&0We?KmBhw%hfCwKL_TPUt| z$lh>W$5A>oY@m$1ZK9?5#elpW+$KrahWnSF*Vgz3N~Nl25zDMcUi?AVQzs^xy~Q-B=xI*1mc}cD$9GDGv*{L3sP}@6M%KSu@8rnF_s(unQRlm z_A;Hw={;ag{z2q_s#&ib-nQlPUiiV@k-9w^~Vacj+_&v8Qy`Sgl@_LuMuo|FI{e4aqUd~StXF|&>ma>OhL zqKLry(5e-bVBSzI4qA!#b~!4&F0c&W(u+)N|D{hWD;DECP9Ct>Ciu}%L&<)2TQO$x zRn7|aUo188Zh|aPD=14ld&g>nCMSm$cODL({VTSChX9@8K)FkHR7H|gyvE`*-(6(o zaaLEHqu@ojY|F#cQ_V%K_SM)#KBhCx4~f9p!om#e;QNuXG-SmMW4~maKNN;;i{?vp z98#}K-)c065(~U|sz?1y?9nh(EW>80eK)I^z2s0Y@pln|TT8oM|he2DUv1c%A{^`}GSX688__gWW zsF{p|gqE20uqTkoJi2r{{n}%Kun>fQ=oq{ZsYsX+-4+@hl+MTLAT!1^^`o=u1RC|+ zR+HH2YHK5(azU(`6MK=BiURB2wsg5O0?VjE*;W8+vX!+gQV||wC+?lf7O85{&fTv? z#$n6Nqrb2PlvG6}0y@26osQQ&ynUW#O?`PJ%Jx;a$+cm_6RY}5kXhq2^)8LLd& zD$0>HhFs|}$CllE;1Qju_<+1Zzjk1s?0I3DA(}ON6`64Xe_y)Uk7r8H;tk!XVOUvL&g^tShGesw)O{VBJdxz03Z;5I1L%lWeQvNf`cJN8-WQ zD>|3gM^n8IR+Z$NAt;WM2|;-l_^ntn<(~x^uC2U!0Td+PswbV3YvC$%T{ZL=pD&E& zXdGtk5I={_RYaaspS;pyi5Ej2#uhIiGw|0=9GA(?C4TgV%4VPt=jpwrndLfG6A{jlz9;lHs)ka2u zLRWV=TQm4`FiGv8a`FgP%oHHoBaWJ1fX!o2FOb_1NXnWjR2x;)MOEHaT2<B|iZLbqn;=gq_cS%U9w^1l5<> zgdDd*CT3&5aDPg*&6fzmKIO4p(wwt?Cvp)Y@n!V;$6v42fC|C+KLici6=SnM=;kMD zOx`RuUKZVm#6AOR6^7zf0Jt!u1z_}U)-cCftv>!V(} z$%Ynf;`V0;gP3pBVzs5-#WptA?aGH{781zn)$O!D#wyFhIewELFP22-;^*dwS**L~ zt@^OnoRll-VN+MZ113)07-Wt1ENr)-^q4zbrqH*@_(t z$C%B8PU3lB+;BNX-^$OsX`4%nzG9yAGzcTx{K)z*KAS9}&oRV6W1JE1N8R z&23dainuwWQ28aw^OIZ9*qc=z)F0vA=3*at^XrQ&`3y97C%?!*s;``W@667Xt@Jz; ztxn-M5C!jgno_2Zgd=5|<}_fw=0W)oeg^;g$H5)eZPrZXt4QmMn9tG^MC4*VP4>~z z0}ZZNMfT{##X-4t0X?RtF_9W`*yixGTKk&gBFb3PW#?jfq{LO*WSu(Kr(YXuIr0Zx z-tZ5zW+N5_rjMAdh1;j-qGl46@#P7Q15J1NW90hFRCH+{0W;Sl<9cP9A(et;(~J+} zG7$ZR-i&suGV(^fdG!1rsumaUGVhu{FDxEG{b!e40$-*6I`o({-lQuS{o2*qRf8x! z$2W8_#-8rVWLxbJtlj@kUXn}weD3w)Bl}DgVrKpV>gx`Rm952r?~UVZ{!s6`2X(-} zSFgs|xyQKj0R$3kLDbYy)%lFZa||>nQzjBWkUah9qwAest@Gf3hhtmo91|{*0vHv( zciAFKT-|}6HRz4>Mug3W@oYP+3gAeW?_^9noSK@w4q)azW%&5#ru7UB-@zRQ!f3Oq zUB`KrBMEE}BCjo9tTlW7GjX+4kv+-xB}Bjf{bQUY1u{ddqEKliJeX%AH+>2*DOSqQ zMHgUAeXJ7jP5us`-m!unkKXZeYuQ>Mx3^Xu_ zN=eDTt@dhiH8ANZ%-D!OZuc0)&@sI71bXHOgknXdG}c8B)p>36X7Zt0_iLjNGMhz7 z-jwV+N*SURflAagap>4ZUn)#8sX(1#g?!qoPA zy!nS?t|@v^Su87V!_9OVp)S>D+8m{r$}@CrTuI1F>S%#*V3t8CntDGiwLCWTdrrAU z#gU`G&u&NCGrutvb-c2+mR>jvjY>G45G_@IX00i>*&HvrT~wjt71q=(+U{VxC@7A>pNa^ z)HO6F)t*sIZ#*0bQJsa|`@=zsfJRhdK9TOU{oauO7R|B>(#ZC4gG0)M&ArJtot9bS zBprX4BL)yTp~>jZc9iFL@lIcr+p~t@#@AXNxE|^pTC(@$D6~)x@YFEqBxWvEfVS@( z3ZEa_Lc71wEiwm(YmsGMP(>y|lo}Nsevrx$ybi;Qsg?pOW~jMLw4SC3p-YOY{7XwS zbOQtjtoxs)Rd6y|CVHWTkt;k!4y{CpH60~HT7CNPA+0BeXMlr|6KWF6%rCH@2)9H^ zmOA#;jW?^!3^BOp6rcMl&NKwrcSJVH?W(ttI9y~h{ZBPwPB{+HaUlnqoY$6nwCj<%gdZz0x^P>vHcmr$Uw%zdd^p|-?=eyH;htp*PJa=7i$%bu z>a;qh*qEUbaNV^{=^$||(;TW%Y5tifL4sK4y$CYu^YClP*FjrmF>5pUVFW* zQOk(yw;&Wwba&B{&;44%ju?wbYr^+2cgFOYsm-Oum(s=gR|20*;x=XaVELTe%qnhX za9=q~lhG*ok5u^RcxK5^TkU~Wo`BhU=+@I@2XLA5cJ3dzgy2MRr2lBf9zEj$(YI+% zc6}fGLhOL<)iz-I=8A$<8az-&&oviaAp-S1nadtOfi1n>JkXM?tu!w%7E6sEZjiYJ zAOC2!e1FerfHE+d()d&9&33%_@GTapfBN2@w#ziCYGY1SbQ%VUfGQ-dM5qd=YZpvW zCZArFBIRrtAzvpk5kIaKlpPReU0uUTmqG+8r ztIHI09=_hLaa#bxUHX;wq4nB2m3sI|+Ca3H)|*$ske{K0ImXWx^Ih7jNH~5Ca{j`N z56?RwLaPCbA~TJAMR?f$A0Qi`Rpg`CDFB5b$E_J^s27Bt>5e93$70;IZCs^;PIE!E zmq|c`CtS6_RIFR2KIt z^IWIwp7iQif%eEeoXX0)e8$uXWHco2i8n1pdXezB9fiZYj!d-YMzqx$XB%dw2_g1A}DETfagWJK1Emwq-? z`+5yFhlj-Y^35lyy#d_J9$DdyUhH&zZq$>tdPNLL-g~?>2^Mf1fwP_x>_#1JK4+@@ zUSIYtKdBwK`Pu1thCrqU^{Y(`9YsjE4^v5kX)!XpmIUj2coH@7zEaUoYJ_v+T%i}< zOa@$-ZUsVs?AFQ03Z|#B@}pfgN)%Fh+n)9^>`he&vcI`HV~y@|oDIHdp5^6GL;7)8 z+pJ_|v_H$X2lE9wMeqsE0WWV2a@+uTva0D`%@?~HyG>#0Oc+aF11pkOe=v=@A<*anP-U6Vgr2*MmNB0v9HW2~_ z8fEAhL}?yq`x;2zu$>b*fT2a$X}qkiKTUw9%>&t}W!e;o_Dc>(&@vDWb3~Sf$Ev3Z zY`NO*3dCWIBw!$NGW(5aBIO&T6G3Z=Db9Dcs{3ZPVUK{c91^kxVh+{j(OD|9Da-O@Y0gF2CL2LvfJ=;#-i`)a+#Iul$f zws7~vHt;HWVJ3);(#V@uLL=yCZ{b;-zk!a z(==pM{I23}b6WWW=$>siVkh-Dt7Bwq>?_jM_!NwVcqyLyT`8+iLw-j=3$Q%=*_d&~N&Fmv(QGrk--{7vFFy zfV_m%T$PXZ!_JJ?sT{%!2k< zN)glJXUR?CEshYUbu|ILdiL33cFD&u>Sp523(M)At#QL0&{@nCZJWncr9HkRjO7(B zBvAaD-cCLUY4!yp1oa|fcN@Vu%YA=4%1pWJy>EWM!i$G`bf2km+Q>52A;0rACPqlO zR#NPgr3!cfcl?gu0L=0w{6%mrNK;W@e%7iy02x> zob7!o$ll1X4OKBIEpy?gPMm17xpxq05<(DE#}|}QgI~Z_|93jTfv8hwX)oHR6H5jY zYn+!2Y=`g~mgXOAEA35lSEK^#_uzN`0b5q!aaL%w87P#g@C97zckjRhF%bvq}RfHxt2`DdkF z9SkO`^&6Bc<%$%%xJg~5{`;46p9aiu&Y59Z%8R_++l3B+FScpU3I15bbgTj*=^JPs zSYh6SqQHWnxVOMqPt?uJT+ambPrZ@ixO^bORtGE0w@H(>0sT~qWPTYcfY7uAofvSHREed{j{ zG4_dCzfK7}> ze(@+dRiVgU$HLJAzkr`jG{xm;rj+uK!k}84*ln8JIGe=w9+dSuYnS{LRjaHyRiGJm z*H5b3ZAPyDwQ+a^gQi|GwU*O#wt65LU1k!nQw07|>KY4VAgPw75>g~^S@U$XI^r{8 zs23XlQ$`k;FF_wDy9JcgU?j|`IcXx^hG8%UUGK=5ciIo>s{e2e^}P?_F=@&f zE3bjE#js2bSTOL`+V#~!SK}Acq!R#T$El;pOm0`aEYF4{@I<47Q zC8Rr|u6d33tk`^K&MpN1Sj6k8VbjnhUm$&YZ&qrUm2iMM@B91U~>TDY(wr|UA_veVvY_8{? z5BB`7BWb3-A5y56FSAszVf%_M062kp;W+wv8*^vGNS36jbVa2KP1crXA?f=^^`t0; zb7O(@mw%4fC09SOBtu5k_?%TARL0IH?!zR>@#ow6qZl@6L|xXvOz&+nu8-gOM)wlA z1r0m-p8Z$<9jolZyJl}oS1^>chj6|Dt@2}E{ zw-(O+=$CwD9L&wUWuM_A}&bA}@kilnz-(-#ta9CDyZ(XO?w%N6^Rw~|*| zcJ+sR2#bC!dyo{91B3FTlRM!gP(UmG5+wbagF8Z%hSWHcLyPZukP*K64}&y zygW<`p<#ii>grt`uim#P4>iLdCy#1(PLp?kO;+SB09v00ZV| z{*~2IrDC)RI4_&1#$Ex}qOl+TFZSL#s;ai@8wCX1AV`DKr6MAYbf+{3NC+a`N;lFS zl7a%#4bmkdjkF@&p)^tg3X0!c_xHZ%JJ0jH=dUx)e`gHFaNPIS&Dv{U>$>Lr)ug>X z(LCcU7z-uU#v{`M6X)!ciFhFVV0){dy5}FSYm*cds2sR&6BXm2R6!E@;FO`Z7~wX zSnrI+mPg7nzx#l*kF*gy*=?@$B^H_6Yi!5dtnp(4AZ6WzznESUy|ARmP`RY$M& z40lG>@(gD&-O1Yl)enm`Z~SVFqvTV>5(Z)2OkI__nv6lQcF1)>C$m>c2Jemo+WTVs zlPl~ay?b~CYl0+Q8at}kRtm$=Nm%P0{1|W|kHD8|D?X*J`95;1uHhaUqoY^0fhFGN z_l5Tc1E*!k2TF8+je(bkDyRZ<1JDGU2`E*?2rjtXh2B?BLPpU70CwNK~xH zja}*DN>s4bM5e2;H7ap!f=;e*H(NRk?`NdM6dX{y_pBfH=9+AO=?z*SHGFzyXN~DV zU#Hn+^97v;bn1-F=l@hZtc?|XJ#;=D zvoPM^-TgD8^@S&`WrkS6zfAj!G5U*MZ|8pxGJspNL2NZ%l6*2B{Z(|#vs6Yt`(c1H zfuS!t506J#nA)ZEx0?BprL-P{10hZ2>?+YqCd2k+SVq~dznBJ9n`Cp9C!a-+)rg3w zY>#%fNU{+GTGO)-{FakhS!bNUOB2KC3PSsxpXJXf?+V813wC)$v6_?&IL zdqYOne?i7}nk$DUqAgf{eV$}9_n|#NUGdBVwg59TGW*B!Z=c7kDx`!|mhw|@80|E< z6h*m+p0Q9BXtya-GLbuc1EC>alUnMH-Ur3n=G{NY?l|jmY*G`>s7ywf@fv=M^O|_| zK`3+)<>IfYK%b0*H2vqXdHJg}U$}OJrj}T6jiTP`-pOGi(uvrb*ESf$R}GG)5!M+V zc=)Z2d{>l>!-6c8^Yv=+AIKw`q#PgT8vWv#F4s)Ps>KO%s8!Ysvxp>gEHctXqMv}g zbb(Rux@Lvt8($qWK)0CZZW}}7i3#w<3>vTQ*|P#;M?*}@z62l!#a@qvScWx+r zUqv8RC4@a?IhPK*+P9x2!O*3`KhF#ujVZpHYm4Km+~>UeB!IJQN&E)pIDACxTzSrG zyF7sNI~2KHnQb7dVNYQ!^YXmq7!>I+Gg5QaJ^?^gL8$gr0o#1L<0Z09v3Ls8jcpRWMCf~locwQoh8n*cG<-~MJ5vl5O>2}I zc?v{*l#79Q*SS6J$2!7sNYr-jvD6mu;v7VWMl!BxiYWU9Q11_%B9v{;v*nH)2+qg> zAu-~OWqq}Mck3fKn-H&dzb(S<8+mQsn4FXsUIBTw**U1WomZgnC*iReBy?Z!v{blf z6_m51Bl#!xjD=Y8bu*+eAekJ8hY0+dFU?Gi! zjzMV1y*OzWWUf)*n?Uhe5Z{KdB?`c55}!lZ7hxJ?HW)a5s+9Ux<9+I&QEhe~vGw=d zeQE*L*%yy6KQ&z|Kf~$2OZm7ch$MfE^$hAF3PjVzrW8SZL+jb21}lHL(M`fhDQ+G} znlivpYzpa!KD+yw8(gi$>X6-_r&aMt@O$?((As5RzzINh+OnF=KsM_UZz1*sN22Ku z6gQ0D<8faH^rGM%k!_5dboMX_$lZcoP#>dG=0M5v)tml=T7o33TLGlE{LvEui9QPr zT|jT=_+zx~K4`$yV$ZFn&J`wK`|l6uu~ z=L6&GNZ!i7{xIH@=)Py-((>ZpUqC{zzyrB_yAtm|FP?}b%Y=$c$VlPe?*{YIWehF5 zKl`M**#CCraMp$6z_PhU!-0fy{p-*ECAd$19=L3m{^Q~$y5KV8qGKrl$^5rZ{4)TJ z%s^ZOD<$ARE}q^5E`v#~_X^^R{@0)168@3pbeR|f|M6A+|6kYt{ag9};OmmG5GQ5S z8+dm1!@A0C7xZo2xQ<{WbVM=-UpqA42iM(Ay{ETt_xl1!?zl6>1%4lPaQ|I>XueQm z87Bbhb42yh1zNDJElMQHiXNRNzE4#=lEsO;}5N%SbE0-J%h*hrgfRq@AI+%xpg5l5dwce z4r4S*bM1!1KglB1B+F48t*FS@;SiAWM8fum9kQAQ2Ae}lv6qCrc(Ahf6^udCR4pcH zS@0bw4r#FnDBpOdYOoBI zH-d0Q7Q}!u0B&?$rt_hnskgr)kNNy;^OgpLesTHyd=^*C=k^o9c20~Xbo`VF7MBQ#AU64tq;?Zp+y5jRYXxBEm82|f`k}$)xirfj9 z1%pzT=;<626&oB0g{i#O2}m?%pr%Be2fzs35VqLOGa|x-OgO$r-@Y?lvV2jrbsC!3xRT|jmTdjXD zyt%+bwz+{iavTa2)Q43^ra+PWvAkh{b=_3E;?Xp<%J;t@oYIUB?W2;5e17rEk_&1G zgzFK+Ky$VVmR_R9JW^O6dVLE(ryI#13NyVFzXGhrGLOW7f_h5|AyrZcVk$uBfB&)) zWH`R`*vJmUh)pBsFk%}x19Mimi07dK&o;0;SosZpf4r)U+cDDKI0RFkhR5RzczgXm z=>1k_wFBN8OHjsFAekq`KnIcWSPqi{_(2LZ4k3h2)ucDr(UA4Nw+GfVD;JF)Q46r7b2u?vHf6x}rIa-A)#NT>xW{b|w z!b4p}3Xv} znK#a^PRq+{$`Y4pwjv!@dvN&X9iUjp*i};WK^ZsG6bP7XF}dJH;-d$xM7Dvz&jiH~ z4RrRbwvUXE?^*5dcStfDA3T;#h?}tg$BTkrdm!iI1?%72te*&~6a58J;7kFsl><{^ zU`1alS1uRe;iljb>H+$f&gH7L&``YQyfj&ATgvREy6?SR`<0Of5DPz*7k z;tNifeg(~_jJg+CI+6~`mRU!kMrIp9(s;1?&SmtW`Qic5i!rj|nBUsIeLtZKCfX&+ z9g*X)2iyzD{?chXUP9(XGdcv}xJyE0>#!KE20vMcG!Hqj57kaCIt|?I0iROPO3=$# zuEPN!%DJ4re$4tQ0#C5QbIgn1M7BH<38M550&!OUcStyNTL z8uB7V-hlb@#TQ8O;be!DNP9nsmgT=nEkNir1Xmb?)Z>p51)VKS0cDds0FNQtYMtG* zrXL4vR-}y%;6Utw&g0VJrK9&Hf1tXx5yUd@xCA@TeYD-z&~|)u-+_pOvDOdpPkAqn z-u(S2V0AQ@Df;?HjM-ak?Q_SaW9X}5U4&5kvnMis`wbVIh)MfHM&;Upl6 zdX`M1KrgX(!XaUj3mr@k^i*HzPGDuRj_`r;^#!e)x|$&b+8t6S&B9I7oXG!4%ku5| zvEbH6E0+47I`rTIgbmWIBIi;KXeP0RIEjp^Ok_Lfs)S9tP}f0?>vrk16}DTw=PU05 zn@Re2k$AmEj{K>dqbk@jHH$y2XL?6NAFu!mChP!&zaM{mx*d7d)aO(^Ea*7-q0#M; zV-P04phYqgcW{clF7I6<)fH|Rj=4v;Z~#x+w5+K|5{~X{tA?uBJhOcF#JAk84H_d8 zmPhfpaweaZ;#|aj?{~g1`-JLXVH*AbxN^V|e0u_73l@Uz-_zqktLv!(D=`Mld1-1? zAV*1A=ajN@Fot^t!Kgjp3np=iv9V+L0N)K(MyDj4+~%)rx=5c`YuLrB0cCE!_fC+9 zB~~CzJi3gv%DZW|!!bj(O8ZfES75FlC$Tyd25Ige{Qi6`hS~>9P93sj?PJ+bxrF?y zuTtG(`$~NYKH4Zjz_ZA^Tg$LxUMpe3qlp7r7zfSYB31Lp(h5S`4>E-GkaaFwe6k^J!pLPB+UrS9#V&afu;SZd}^m3 z8yeFA5#IIs%S$3<*6R0sdXreX$@@i;9!4vs%DM`i?o5B7W;+E&hvkcO;SC7MX-h*} zxNnYcRq=4AqQf6!;h{_G@_aq6Q0Awez+{xr?x$Edj57INiO7YGK@ozl`$Xc?a)=v? zQ0*tK{0_&fyH>SIT%2PN-J|#X`)q@nk>y2LtY}_DGuiPnw7bz1Mjn!G9li(M6q2sY zqt8K*{4GlX4viQLPrV318VSEZh0Ge~NT;Ypt-HH{c}WB5SU&@YIIS0Hs++u(z_9Q1 z-&z37<;FNT%dQofYD_@=H#-Gf414olN6}QX53?eJwz&Gsmsql$Q8AHdiq%aFrm=Zm zSyxC|2vIt?sngN?&qniVvzJZCSjs<=Jh#Boxn0kBqXt(lp6D<1@K-cLwOc?{(RZ}g zqoGe`z&lZfA^Yg|85O?+UV8llV^}2Fs#PJHapy9Zv~Cq?J)>pXAmm*ev%1HMD$N=V z>~pVf`8{!XlnP%24SJ2qm3*??pshV9AW*!78qX!-&w)M-B-T-+6Y4A*1zoq^UY1x5 ziFt7lb}X?rf7)H`F+sb}x&hh*{bm*Kn7CwnidaY6QB{VkKpKlB;4_UA{{Fcd_l-~G z6)zXX9V@!EI0XuP;c!hmA`99B9SYZ-DUF`6`~+8A0_8dly3(HP=1>G2RmbS39I=_F zpgdY6Y&rkQL-1;et#I~F9MKl@m|?oZ>E6?uwB9bX<~*lUls*t`5&`(b6#?H!EjZ}t zIS{_%W2(m93(AEg23=MRRpBKc8JzUno6Jy;b6-;xE`!K{m%2fLv978LT3-8GIP$tW zI4=wM{2EQaqOa@eND5FZwM%}1htgCuqrlXoEc6oVM~JBnq<&WvjNeI!?0+I*+-;6J zfKYbJ)A=$tyX~^ll(gMe0(dL$h&{a*;xnKKMp27;@#bYhW_hWLW|+`9Vu|)&70&=a z@n0Mqokg6o5QkeoRof0SBd@Ic{0u^pz-I=QPy|;qa;kRS~{K z65mfS{r>)O_au(ZnTz~B->XQEIBJzKl#DvKSg8G>iqM(}fwMnlZyicr^Yi|63hL3yKclIw4h|q77w=5QIe>#zxCEe8wZg-r6!shnN$>1YRfd_$?9+YO$O1{Ih?wn?! z9ukFoPxP>|XX;_DJsOK02XnCFe&gD@&vq9SFVDKk@0VPy z;q>f=Bn0~!Ysh=I`ji!bq(bL8Yjetam6SVpXA|at_B`QA<~9^sj7{wfcT;X+aR`ug zk=xs&Mi(IA>CrUS?xPK|XSk?BZ5Cl_RA7Ya;xkrxkr9n5*ZWj-Dn6+P#Er>7J3dYq zc2|X%KDCP%2d05-K@}Na2VSaqy$QBd^2oXaak%s)8Qf)z!NPA>(i&7J1u}RF<0pK1 zG3HyctcQAiM2#MChU!uouX)(eZAWH11@jB>rY=BK<)-9yqa+5zCP6DuWmJ*KubxcX z0QY?}2(5+Y&R&br-Uj$e@R~6*tcy+=R2OkvRl7s@jZs2U%bp9WIpf!+TRdw9F&6JM zjg1*QUm!mdxgLH<3*1P^8<> z^BdxuREXQK;*nA(SP{{|YG-9A5-$(p+F!$qJ1Y5tHz31U4sp7Q`NT@q#mPc1ZVE9} zabK=L1|MjV&O+t{t_wzoaI4M3m!Mmy_>CU7ulub_=tX|2ajB5tXF>mJ?J`}B3HvpH zW?zq*u+hkNim&M1G#J?G9-na{lMN8NQQxH?_k9O~0LCkOhlC!3Z`HE{fB1{r&+u-_ zE{-fz7Ekr}l3&n~8lb$iT{zvl4lZ9MInTCqv@)XP z%o@!-l2$54>zy>0r*g8(QjDZUqeH1FJJe6Oqyq96Dt{AAq!vPfw1LB7+XZV^ldfHs zB}tP-{@V5Kq9X0AR76o?%-jIQ5<}$O1@9WosO{`%22qw=IPXamLEux`PB&(MtxO%a zOz1E4v7y1Ym9CD}UCXY;9St@qEi*1#XA%tUcv}8agTSN>lRRK4&U`56wlN-vGc;|q z&seU=*=JAXIHN_1wchf$Xne|s6B$5RBQf0_E|i)32DsvZ!k{`VaMl}IpM}s~5q9QC zo`a|+7WdE6u?tsGUibIowM8dcD?G0_6Y?s55~e9%aCJVbnrS#m&^tQd9<_gekG$8z zv#Op$4!hEVLwV>u>N`a)*3ZrXf(Q6zICwl%TE<#-??0J6B34krnCQV~SrSH<#b1no zUdiB!oUinl0#_@S`n~Ka6Vitv1{^w*dYu`uuC5K5BIDsz-@VF?-`h=d2e=M#t)TIU zfRg(CM4XW7gve)!u9^CuLEIMr%|}9}l4ixF=shmED5MYd!hi#UgQC>w_g>n^lTSup zUEY11l66Y<%dup>oquGD@VqLKj;}YcLahTbpnH%RzR~8%ryu2;dP%}K6iZg&7U!aW zTW!Zs@1vJ;j2&a)H`h2eFmc~6%J5MF;aq-~lANKJ<s#$#Jq<{z)2JE2roinbhr=h-#0q304!ESmE2kU|DFr0>LHqwNfFJ(*|SAo>8pfN#CD@7F*pj3?9n$Y82Rdea)> zhr^xloY9mMxtXU;c3b z_kl#}XjURdto|74uF=I_>$$4&$_H(5YBL6Lx=W>@^jG(xO!3D|hXDYWDT$uhgxw~v zvB9lq7fa7uq6!wUc))dB-ac0cupzd2fDlne+5RtMvhl2tMf5>*o-3rvxk|8wVj%<;OR#a9WE<8$$i5vJ}?>yRu!2J1v;7PU*0kk;B{oWHXk~U-#Vm| zPrYozUP%!q;BaUTxB4ljmS|SNY{)xtmbO%fNs!)H-wpg(GQT=jHL~fp{84Vb<<(ih z*e9aMt7?Vfd;%f$>;<#!KfHe(ej9y*S7!K0FMJWZ>?txnV1txfuJ{w_^d((ozp#1H z!33`7mwQvK2yRfs;PKwumu`!SGBV?3FH?=*5Awf$1np;@HM!W*23Ht&xZvxb8qkKR z6l`W&;lxD>;%wOW{=OMa-9|#=^(A|QUB6c0)jDe-MipzBX2s`DUdI&~Yond9qqz0S z_ulS;>zDfP^y51ddF1uTct;Br39x`|otJr805^tDM0oH|8&79VFHd)CQ`PlSZ*ycw z$7UiLB{Sk%Pqz&PQ9~apW|z>~hv=Qsf|xBH@_3 zRp}aE$e|UvvS+(XH1NcIPf4~Uqd#`&tpH?eMpK+*apbB%cU41uFPntIJXli*`q1Ky z9QI(r%3oBd8`trfl4x9c4g)!GQgJ&wZ&RvmV2%q$a<7-4EIU$8ntZ3&+JVp`g_~AM zlJ~>R$+oPYAwxB$NS0iLz3&MGoekb^iFOgrCn z)UGGw_R|=!McXGMs{De7z-?{c_MC%30-g&kq*KOqFgFH8j0T>+r-g{JNOe#Q1?i!>Rx&n0dMT;0I0DXkYIRq^~{Iw zHgclAGR^>`r~UaW`F7nC(G`$CV$a{IxDCeKYy%1b7IY-(o>>(ANT?pPBd^!bHC%^2 z=gQl^?Vg!O9J&E#M8{VyD&s1Fdz>-~<8#&+$+@aEIS-+xJ)l;^d)G|m$~7^<_c-Y6 zL3vE`PUJ8gaS3GE0*+$~-7kUUWRa^~ zsdgzjse_nqwOND)wD?)oxp=y!4bYQHZa2JsyZR5z762VJv>sZ;nn;{XpxUe0Pnptx z{7=iEI}YHn@wIK4ov2TY%$s>y)SJXCP2~>x#D{(m$5|dpQ>%SSHgK<^|B}5;>BdZ> z6~XHD_YhGzv2o}Dv0$16lIIlm1{-t`0-3UFHID^kHeVA=1VxvTS^`G32Y@92HRk&fJ&B8^$+pfX!A5|TO@T>u;D|p^r;}=b z46{sjx?G&OC^bQ1nqVGW{aUBp7Xip^54D>l?*%F+q1e zSVpRct1u+OsD!c!3xQ0=o>8$Vh9G>Ahaku${N{l?duZr1=ISL$%t1(~`jibKo2nUL$db}Oj?*;!(v=8U>Hw?3h&cU z8qX~jv8&+ozIhbJxMP`p+ljLGPZge|070LsUfb*Z!&f_`9BIQ(GO=2)ZoO_Z8@6wH z;uIFraUc&C68ZpLB7aZz0#^^RRNj{yj~Bj}zclhHR#$rB(L{KhopHya)Z*+gg8{1Z6@1VTorP$HY1 z&Z6l>9U}q6W#0pun)bu|k3Sp~Vz%Ng&8atVhexi4*<<6~I?ty6cNWuM90h%ie3^co zq8CjVg_D4C_p50Ktc8hX2AWb?8E;?R2J>(?5f9%`cXt;5KC`-0fNsO#@kHsaEeVz+ z%eeSd{+;&)6=6+|MEv8BmMbQvlP?y|KT+hhNOf9<}Ce> zgngEO`)B{W$x@_0s=nfrLg;_IE4(a0NJ!Xz5A~k;|MB+*mfzt`VECWjm=F_FrV?L@ z11Ii(ys8RRxbZe_jM=|_lK=WIOmuW2yP!`>9l8J0Rr%k+VEljiahb(e0T?Vn8R(A&leSc?qcs&V4c>@hLwxeXhmRaXynuzsacYD#eRDmXF>c9^zajT) z3=#_i+iYSzsQDezSJV^;;e(?~(l;R}gVw<g*%#wPDbI-u?|E{@G3JhGL?o4H7E zcu5Que+irgrI1D^;Do6COWu8N9^i`W0&B^p_#}o{-xTnyTci0=lpq__iiOy$LTIkm z^euq>YmP;dphdy!u>}xZg?VDUIog3mSk2Fra7Bv=cIZGdy!w)iDD0!L#64 z9`PG^*CN=`)eK<=+=65G+1=M=(SVBzGpu)U~`Yvzo(bRJ)(tc`{u<6A(BW?4j;|{lEivQZ4F(=wXX|2 zYH-K^9#3!^j738)EQv#}(%3-b`uPm<_*4=&p1*B5RGc5iz{1sqIFm%CIPh}hyF%KC z@LD{QbgU2YU1P`o*Pp|HgnCHa-}6#osl_F+TX&hkd*@t|U?wI84kFI&$f-lUdHxQWUQFB_)uSC5*93;=7zXxNC zkq#KN0E%=IT-XBpEE0T4W^>u}0-%jO-Frq6(WQmyPLZvaPi}~DJWjI0o;wYcbb@<+|EkW%5(xkj!eT2FNtC1Th!(s4Jj$F`#B=2)f@dlPf@b#f_t zPz96$Kq@Rvivt{LVWwGz+l=)DaG!SX0Z&g!)53?DVh68eZixZLMDF_&V0>NAqqXr% zU%^vB)`NZN&ZRX-PNzt5P=&}!Yce+7Pp`y$n^n)w_db-vdK%e+guL5~A7GPsfrXj+ zBTE;EkWlj0i3-El%UcjrF~$n>&iwdE?#@A)e$-iO^cCRU46zqrSi{>R2-mfQrL7v5 zk7@#PwHls|lx&|CVvvNHjl(3vD`Rs{p#XWJ{Q;8kCg9ra(zw3ElV2Are&I36C9<<3 zkgl95A{aai?B1UKDijm0i$QNu4HcaC0mX#)eT{-3ks8dZU1OwpU16j97; zMuT;yyR#H&`6D0-EL*pOldTSfaQXO(mYJRfw10s^Tk}xiCN|If^>|FSQl;n1%MkCY zbYhP_M5C(ZzI64bMqrVI0X`}`(SsQiHuq@n;qnOx89x2~3u10cVl)*{~9O#juhr&HY#ve)I*eN&f=^LZiCfQ zp>kTzFILd}9Yenvd=NIyJ8C20iCKrtCrmzG`3hS@9TM5TjR4Z6w3&qLySy;_N%Z!k z8jF}x%h>lms<8yLB3AD~pf&;Q*3*Dl=wV=Xn1do* z<7;Ui;Yg+0yw2&xiO2wFUG<#cD|#o{}o-a8}4i9n(bF6OlLz- z{xe3MuZU!VW&Sm;nPB%^q$=?`XU1;c9V*2CqAeQUN9(7#>5 zv69;t1&&oZ@cr$le%DhOZ@GWnov!JH{L!TPq*v8`Kg}g%ZcDzoK)_(rV$h~lRIGw8 zxXMko{;`B1>UgaCF;GUwGE+u!u~@LtJ7Yo_M^`RW^YZH-?*2khq1=>hvo6(WgtNiol9I962Y5(pS9)kb^4 zkM%ia3Gcd?g2K9I0jgfi1C7UY8PpJ?989(fe*x}SKd`dpk`B3WC&XMP-{v7#!p`ia zdoEIj(>T*a#NMiVH)8_?{58+kYe?8z`fg(C&-69(2#YtGzblu{orAroQx}Z7z8lkx zFbt?};NCHJ1Sv5lX23JdXOprLyd5?k75VcCRVz*LlO1qis#;wZvwD&)KNVKRU)^?%+%Y6<7)#|R9u;I zD;69BskR^4=ZG87PrI!g*#=z?@1QVg0$frptC<-=$mu1RYFJzkp}R$qZ9s*;i+zq7 zU?ZtX^i{P~Q~TlAJPfC;%8$g9p>t4@D5~M^1PJBe)GG%v_9?UdwrlFfPwOK{kw3>w zoG(7mwm6qOcf3)12i3t%;({^K(|v{*PUh=CXp(JOcxi%U7KeiI z-2k1#r1Ds$R+Lf(&22$dcg#pFq-a}a}WL?CkVv0Zs%F1#;#HW(ZI1Q|{AE-7LV zm?g@TlxUKX#RL*4M z@k+|5XIA-5s3H?O#y+MNlu>lt{a%fl|6O$z&xkR?wFJZ_t}JPLXxq;-STv`@jNj1Q zVYiLbNJXgr@j<*2^fYT}ENiMD()i;?(tyb*KuR>4fpRw|eeB?@T$bY&!hjtD zf?a($;N42tm#sGiMv{E(66>b5$oCAuQ!`#;spbmvLtNodEkeTWK|igS;di#_^}GTI zqlfEhHV{R%+!(eC!#|5p&CLF`Lk7;MCaMbE-bqgcFlWn`iGW5Zi9wARGr&d07_{Ivpb58uqa@Pz zf*l4H9|H+r0u478% zuWJobi4xE;M~Ze#ht&i2v<0s|K=?aK5szn9e;;}nFS_!Z?63m&6S@NwU&$9$;k(ja zWjKg-$6*BIG6kn6NYwA~)FfO6UgH72Bcq2gopHD?E9}_i70p|$$TQ3b60zy^2^`-0 zO7}5GpJevUc|djC{5RE|2AJiM!VhO#cSMH;U3X05MAw9RL3WZS1pjQK8upUyr-Ojy zNLlxZC=7U7bc|ni>a=4rp5(1+V6aWr~H#q;x}8026-cKIwz zZj1L@<|N!fw@8HwfR4AhmuKharXI6V{@p>xSzc52uCi#hUL=k|Cx1wSPpNc?{LvR3 zHpL%274f=H7QOdGqa;|W2)_^c>8%r8`JgFBsKATSIJ^do*oUWOiHuX!+gy%VvB{Nl zum0o}ciQ{mK~JIUl4_ij#3ZtYL5UYS5SYf7qGUMG zHVbwOsR;uUy40#ve{H=RTklq5g{!^vidyDzqqVO+bP{#|I`*^qFLJRTpQN+5cP_K- zExn7#C%0{#|8uRuthMT7_he_Xzl#2a4JxlwB=MIP^!>+E;xKS5>ITi=yKBO_S9{pW zqE$k3JaakkwScy&nZ-N%0fDy_5ACmzQTxo>6(9XP4^6%Xq1xp3+xf^SIOk&3gf{ck zg?^!w(s1sT@st9#qLs}lSHEHu-G|Nov^FH-rtQeo<p~y%6cJNLR~|NYA(HbkotbD`>Y(qiL@d~y|8!$vKY5I_WI0U!ZJpk|!aXvV8;s`E zYJ&6f#Qs|gAcgW0B(jN?@iF!#&WxV&mkJXTU?=J`07F8Dxg^qQH?SP_xptv9~7xw0hY_8E(8 zb#BVbG~2@V*?;NJ!tV2LN5}Zb5G17l)sWic|PjntVPpu4O0`mwR>b*D!)DbnpujO`QXqco`lT+%GT z^N{cLo6!%=zK6vhV~|C7=ywf>&niS?SEBgpl8#@40oUc9TTyrFBN6MExO78G*Ew?M zx)RSb-=i9JC8|`j%1H)$K8!ckR77HQP=(UuWY}NNA(~JVZ=w@Eh@|4)mGSip# zchJyO5e%$+COUC_)z9+q>%;%O49rQeuI&*nFjNtnCK=Su>u!H6qdq42fxECj6Hbo5 zXfz2~9-<^RL%z?j?hz#}bC8Enrd*l{u;ny;{g5=mz=CM~{fhJ!8D?NOa~QPgO5X+=^hE zYSnu{74w`;wwCXeIm66x85MbyG;c7o8sRf}w9-2V*p)BNVm#gs-6Q+VSUCI3LNJgb zMgLq>z@jf|`exTqF7qMfTei9Q)2h`_{-_rKVRXg*b49r+o)qt*%`7jv4wLCobp?}O zo@Ay)_1xq!c{wNSjrt80bqQpZ2puvJ#X#ww`92cknKmdl#}W55C=Ci1UsK|$O1Bo=LD|Zf$u9}PUQ-q( z;23+&YQ#D)U^(UBOIH^NoY>r4Gbz0K6ex z4L#}_CLv>-@OJ@c)(>2a{-Ze{HRei5F@e|6FkqGkGCOD-y1chj&6d#3mB7@x+w;GQ z#gJ3|((j+u?kj@p>A9J3fTJ}qI!{b9#kZ4Diu?JjQD8P=o|lqw7(Kdji0%+t$qr~2 zEd#xj{fR$W_C4>$KJCpImd*vMWV1#)H7`(dG1T;Z9>1Gakf=Yeswq9sTs=Dv>E z@CAs_N-G*ya6>GRXrQ#mgiFK#Z9lXt0YCpn2F6@WNArJ!QG_1Ik<|oL>wB#y@CMdg zr;6W@+CG5JDG&XhkNmITSsp)z39;hd#mk8+{{j#G^S9vL0FLvaP`m^i0N{EENcDgH z0n{0B4TS`y>EH}z&aWORyCL;T<96Lh#p{yvtQdCJYk>?eGFQH7TMIn22i)L)`|T1- zfD=xvvLnJIlLgZgP>SflK5&xCR4hhA_!H!{u4pB?Gc(oZN_7wf^UoW%HK4L&%#>d0 zqHdT#Wn+4q)qE6%Uau*2``VT4;FMh$&7;`Qd@^JdrX|sGAC(zI z5W52IcCt2_cM)m)TH+_n+RAfyf2=bpoWQ}1>bitpuRtm6R%WYh*CO_$19Q>`_MpJf zHfa6J!8%GzGP|RP=vjKSba3+tFaQI4fMkIv;~PN_Yd1hnqN&NEheDdt5@0{L=3Ak~ zi2T_0&#&)RC>v3OUS$lxhQa*%f5_VJ0Z7L2*a)dzJ-~K-f>HjP%ARGWX*2&YXoCAJs90bJ=3e0OQ z;SAgY06`_~-scxu_74?Z6L{tRWif&opIO9%)EnOqu)N4!ITQyxk%hNN{ejeCIk8}r zs>)y+(EMG+VaU3x!VlVPKHyKiA4vBCd85hk{)gsaX)><0E%*?ZTMj56t3T^U`1qK=E0M&^qJ55^?eZbd;BS3&gbs8P3CkPdp`s zp3r@PmPz6dG|^jKBx+hP$Vmf;sULL2@T~h_j9Hr0^>_3LOvJ`0Uo)#=UT`Vy%2F357K*@oDj&FMva#rd=PYc@L z{@zEHW-(8%n~Huw`o0nn&V7Fi;E;gnayV%}iGl;*7&ai0^lI&!tAT#BHHmI*=yf3? zc{+w}($?r#MLSY>GwG)=7N*F%fOE$d`iBYd>DZJTz1Ls-2JS{3kXzo(*V=ds-Npob zL!v7yAI4h&veAJ7+hrhE-aK!G>B`r?gYRK-vjuLA#m9mB9gy-NZEp{gWK>J~59@%h z!l|2%Z4#`|DSss^j+F)=t|bWEdPz4ue>U(wl9D)M1H?&>_ zkg1UVZ5Bq|&$2?Xj+_D8ArwZHp#*de2r#Jw8uv1!^==a5VAlm^Z@k&nc77PL8ay1M z*d{kE=T?TO7L||w09K`vQk8HeFs=;|6mk`sDf5nW0Mge%iHr^jJ_Lu!d1Z@CCflP% z&MtYFW$)y(-5zv#`|LY3s!{9D!9h9!f6+Ls7B{U&ly<-TsB@HZPJ~m3oQ(G z%HoH!6^6pLaHlKETHxu_fzM3y7F-@xbcH3(1Yj2Ie2l=OH}=Z5AN@K4l^1nrXR0C@UV<`wV1<~f|%j$#ShOz zTV!s0m8nD~kY=XC=WdhYvIxf+1}MD<>yg+>Uk>QTxq~#P2m;ID*$Ct(vP(S1{(00o zXnLJQ{A?o^56=h$=0XJKTGcF>fxAp`B000t?{pRyY{{B{7#)m2y> z!u}V1b)e-fyTaZmF~SrR-PT0Hb(P|d&LAa37av2OvOe@KRX5c#?F>DZLz-19EFE?) zn_NX^7~8Z0WVy_lvINa{&cyv&8D>vp`q=Z6jcsd@R&_Lyp7+s{G8c<_&!bY~?fd&hpsTcz-vwO{JnLS?&?=VzjkUoS1i2I%a59hoDl-J1 zPdT{cUK=%h%XjCuO~?WO#H?`$d=M`Bph6&}A}++Zt6M1nn5pW#+pK-@r*u5~pRjF= zgWtl%3rKpNuZhoq(b&8&6UDTR36dzDsh~H0V@LZ(z=2X(H|z%jTmaBg*p5p-gHqGD=zv+L2F1Z1c$g1;p5 zKkbm7mZ?ryJ+cJ5{p4qu9@tw~8?6+r7M%;xdVL3fT1xzzE}-Mqf-Qh&F7O_FteZ&= zX4r|G?%yA|A{%R6@y($N+Z9#9UI=OpIw=dLL#+2IshpCFFZnuEN0!WA8WtSs-D!no z8+^3!4PTVVPEQ#hS>Fr`L(&~N-+;0R8&xreV#FGhwWVK`lx zxLO>}iCnN&`sc@u;N<8U6i?m8sChkBzJ1PYtn!2X?vC;rrVU9ua= zp;)Zcmiaw#GUn1StCLWMq6 z6gkUpTAzJMZzuY=U+lh+J@d-Ffh!>^K(5$2*jW7D2~bX2hzs(LEix?->$z0Cbs?ng zcbT!+z=o=GIP+HJ#{t}oad@ywo^DTAel(K1P&{$JyYSP4af+CML@MYh>I$P7tzTj+ zAO4|}RPYI=3auH1T|}TAoyRr$jBs?mLk4%&^_RS5cc8P(p2#G^*+n=@sOuhrUq>7E z-aL~}_(DWO!|DK{4Lu2coEWBqaIM!5|D?Pq**&Bh_WRoVbhUtniD_!4SM3mKP?KTs zq~VzTZ?oSwA`9qn?g*w>g`)}_%x+#*-Vevk`2NqDGiVm)7qtEh!pREYIZKdr{6d>N ze+Cv-L20*iDU5QDY+3`=_lrb>ZXbKtv0SDBx(znu@jNseuQHV%Qq%4ETlQ|pjgZs} z$r+Tt`kS$~DZa1M>pe^!ZZNs8WJw!G#`CHyfcVQ!s%EuWAE(iQPGr3)F1ca&yg-7= z-(MrorPxyaaBfUpRbGJTgIp%**=h{mjR@Ex(SoJIK9wNTrOr|-m)y8XZt_S>9j&+y zDurSbv{yjTLAH(OlOf;hgiQ0Fo>_Y?hfw@*l^nIo8j?v2Cm&L^BKxev70@|KY{ort z7yA{7sz7_)?Z)0~+>~t2-+LFe>|fGVolvRyQSsx8v2^U)1we|ab;5CqfHHZs6ZhyU zmSjc*ra?0@E;W1mw~KMB#=hCU`^w(f1GVu!7U}0OKB$n|qsL%=9P6ujqkq80wXdsHz4lC4;cjs=M8?KIvIzBwOn}@b{$B z(M&N~xshha?Hf8OICD?AVC04C6fTQ4%cH}H2c^+_ClGjDiX=3S!x(k@yQ`8<-V=72 zZ2+n804!sl19kG;m{rR*Y@+w=8tzpROal!}Ji1U>m}p29^m-c!fjiwY`7lYZ0rq3w z#oA>!(KX8MRI1JVM9cc4d?MtZZft`o5j>-SzF-9Y16k=pBs7iY{Fq*Q_S?gjKV2^u zdsKq(N$Nn*B>ncStRSkYzzq_b^n>Ei2E56ep5I-?qkPhTmOOZl{T$qh&gMK;tKpFM zk+l5JT}@w7duIdV9m;2;!#=_s@9fDI;Epv8!W;wZ$_TM>SL$~l@0THy3^juykZYHZ zju!Jh+Yo%|D~9v5468?l{}rPVe~0DY@BmYm2`+Aw9Ojps=NwLbz-k}A(pvjmMTpJR z>U?eY_e!Y!+2F;zlTDPUc#-eg7`qy#!6T__K7`DljE!^Te{$MZ8RvmuXbYJ%w{5RC zxO;=4O-im(c02Z7%sIPJi|+b$ej(F7GhYiho5z5|+__w2C*+y#t-U)pkzXUP6DNff; ze0~;;JPBQ=w59B0nCSdgHCIFleMgZmV>$P^1qPbZNfl#)thW)X3L4|=_3fsAx`C>d zJKs8prob<$%Bh4Qz{UQtte9_rL4jXK3rtWX9i<1j(kxprd;x}vg(W4LCrUhE8@Z#A z6Fh0xU3Z~NChL|xx#xVB-(ML`zSX|x)uv9$9`%9kPlphx$TMGRpND`!B0Sg zZn9TS53qXhElN99dU9IE%N8 zJK{dd;;!Pw_?&Av?N`-%wRDfl^~-f5=`-K%Q#*;Vp@1HxZ5vugAYebg^pihlMh@ZH^cH%b{(T{MNN<5EAc1}0*5o?SG*TDbdH_- zImxUCSEh+Rn#t(W-akdxZ12IRHGMZujlrDS8`shfl&ja}h2`Q0oPoINe?cXZGG|6q zO=kOn!TXKCf$4}^{@$xwf#sf@D7<7lDd$>Hg6{r}Jx;m&iBR$~N@bY*Dy9P0lU5bK zk_+PG5f<{DAe|R8wnkDIlUX;MbFN(3Qf}a*7v>dQ?LH#6#T}9S~gj(p^HN{m-<`Hc=-|;zgF2# zm?a3Dy%C>8vSjg3{FU#*!@OcGwYO9S50mJgR5pIuC)d7GjMK@gE?=qir3Y4Bf8s@K zm&ekqDOW%dR;{w$Plrnn|-1M~z)F zFg6)~{ zG`rQtgvG(d-Gz+yj8&wrX`nb&F6(r7u_CnF!9{yWDdM!=I)jeci4H;Wj($|7t}<&> zy2IMyMpM)d5L0I;&;DlSSu~jq2e(Mn10~Sv$<>q`=mPL}FnKtra6xJZz6S_R7>#%9@&C{IPwP)@_8kY>XCl(4=;)%arz{(Av8BD$t! zG5|OuELIne<9B3jysVRGDlXdRzoKT4EZ%5o)hqbPWi8=9l~AoX-LB&bf-oT*?O16? zontPK7^c0Z1!sVxE7#-VxcF|;^{gsb%FYt3)x@RGsS!=Gm`;|yzlGRF9Ya|@JHOQZ zm1^x&PZ>wQFrhK~G4fX@&V9dhX$L`i7V+%e2PuN_2<6wHQ5xJrG%lrDNYy2G3nq_q z>bu=CEC;R|akguN_^kk-rqJh`Gj(I$u(#xcptoPlbH{{z=K2}*d}t8uIck9b4;a`0 zrK{h!fw|6ye-R;HIrygEWnKZADZQf+N^w&POZL^W5czUDpqevRz`C9&DMv3cq4dFd zWHuO-P=#9cp3XiAY@INmia=rny5HCnT1dVc9DC=|b0c;PSUib`+n{1x)nUCK2?#vF zE(A}!lAl5EO8R&7bIbzsPuBVjaN*eMyJlxZzrZ;w_>)VoJmT38oWl5%N5Ib$yNtnW z7MAvCIcfrlm|gP*IA#7;5_G)!tCHQcOtwof0oIC7yLJd#JERHK4=12==P+}aC{-9J z$$lMK{|j0pwCgZ*-3nGLXJ>hz3y1xN;m13DM%24(z4pGB2tS$K)L|`?FBB*>Li8~l zX~n+km8Yh3JXuj6FjI0`Y(&oF^Dj5I%Kd^Kb815fbLS3kDCqYeYnR9ubBCS>F`TXO z0LSm(oD2%V`LSzD#CLtbV4hpWEBo1Q6+$JnA@nU7VD8wfy^dMcZ+xZxetcYa7F|Q< zsSLMszS|wMnuz#ru*29{PB)UzIlCBG;f3`D(e0TU|1G_8{V7r!m4)5Rm&Q~Focmg> zet889>ZYarMJXb+zigWH-hNcaZes89#t6U!kP1_PIe~@>YNJ^;IvA@#P+O=;B!&lYUflA8Gj01~5R_5DNubfeorB*l z3a9lFh#BsGFqn=Ai5$F8N2EQNtNBR}+lU~?~k&CnLV zm^4!f|EAXjcggsr!(7zWIZxWB8|Z%7-hnv)uN?g#E+$QgzK%?v0%*7-E%0-00Nz}# z4GP*tn8=+%X3jo&4gpFb!!Mn80Q%4aBpS!I3m$K24q3ST&Z_lv{k$q?Wu#}`+wH(d zWUeUyyW15Bvc(CmaGb~ghCmG+kW`ew^pH<~FX2;|nBG53ShOq&z0;8nJA@7_=SmQV zW=(Xw5rw`|f_1180+qZc-X^bG%{neO_04UCh-7#7ZYDX?#i`1HmKVn`s-33jZU+Sn z@MBdiy{Vm_^GwxC>a5VXY4#?Ru}8xOb?yaLktctV_GgOU_t(z#lC?)s4%~V_DyU51 z-sw$!@xFt0OM})PH%bqJXc`*bV%OQqeVH?DdwZxj1X--;?h3Lx{`nby+`V~S88s<@ z`BcGCzVXSNq(h*zYbg5pxp(A)%d_!%ANziiyz=Fwv~jToiz5jaUwk}KLu>bEccPMM zn}!J;+Rc!&P-%_Mev8bz8kACH=e;W9Jl>{-*`dF;&h6H2gE<3>x})BR&CB z)3wphNv(|WubrioMZUi0-DoZrBNPZ|e&&v71{oi(aaBzxl%KnuKc~Lco+`pAQ=ddQ zMLEgTF?p&GyA*}7A+p;g=JGwlzsQRXmy9!qOVvKU()DMu{Yv>*w6v2ff zHsLn+%;>VdcgfF?beWR0bg3Z45-q|D^yi9*G8&}g?-?tv>W`LaqV_OOxk-q`*xG(Q z{!ZZDIsw3eT3*y#g(&fu07U+&!RsWacU6!%pD7p=NgpdvFg9G5wF2w*6i1Xp@qMD7 zFJl69>|f4Y{CS+@JVKLdBPv=lKDp7ZZw+(=8k%WG^~5C=!W{v}-9=c3DdJePmY*Jj z19=`-i&{O(A!qn64Pns_VA$ikZ#?^|Bg;wcAFK!)SJY>%nIbZMb@Vu+yZHsPEjGK) zreoc>I4ga2JJi38CQ<0sNZC_h ziAMpa94_0Hba2x^U+$!q>_`A3RY%=q$hVbF3UVXCX_A&idWDcw;mmTrzX*SA8pL%v zZASYHda&};B%EtM6_`G#{Uf!`VgsU6{kItw)PbZ*2*l{k{Y3(zN03kmV2Mw3Cc1r) zC+b*9TeY>h#falTFvN=B^9?^=DZN7oc@*Z_bNKnS$^BtR__!`y%(k19!uH8&=5H#> z5yd8-Lg|CJSJyyA`Ax2wqy?>GtV$neQ=GCzqO;1yj8JmYwT$#jR<%d<<@#_1W-{|2 zCcBTYeP(uon0X~1x*@~=@B_kbA-Z*M5UHEx-s?er@Hyjrq)D%TDB+N;08>_!jJ)=L zuiTL6g|mR6kI^I-{DKq)Uh@uonyo~?lE@upU$Wb9^E4MuJld~4S~XlO}&V^!kQe^0_U6z*i>`c+eeF7yq;kmc|hhgm=kc}R6@z!zQ*#m52dyUpen+8tz( zyzobPGOCuIY*#xkk*11{L73?bh*};4`AIbcK7(~PB2*dBI>SGEVCT9g_5DNpzoj)! z_`-SQQrPu>Mw=ZeES0lB5TOfds&Lou$QoJ!f0>f_8WZ^i-YCz~83JCAKPi`3MPvVg z>gEcAHM!Y<_`V84O5!Zh%HFw(td)1j9e?LzJc&pLh6vd;GNjAx-yOpqvo;6e#TI(n zxX2S*XP8eh!Fvezd1Qkz4Z`CNL9Lk!Rbd`XcD~OrC~P|{Pt?v0ve(@3yz+lWlR$f9 zc?bu->_vVL3lZ<`WpFFxd==Z^922GmjT?-Ze|QbH1(=i6UGWxi+eoi7&gYuo*|WWS znqbCN@Sk-WByErCs-~n?dvFhK?*qC(Ao4!LTayR8UmkRwpTS6HWg{q){rhO^Gt?yc zFt91-qN*i3GY)bq_E4VO;~&L?hNb^sDp;M69ej{Twf7C;d~&}^92=b5RX%4f{sx-R zZwLSlpL<|b2`N%LAq2S(;dh_K1y~1dK>_pa*Y46N>_XoFAreq916m{{F&??`@cQ$^ z>;KVZ``#4tt?N*Ljw&$p5mTOkRpg4+J^*+jv8h6KAJafU4qrT1NiVYcJ7yi64ZLv9=S=1OGN@f}qg20#e-CFKy@V7v9hA_-p<9*D6R3?<3qY zNTnXJy>$wT6TOCZ34+BaDx+SAyt)tXWPq6Gc~=)y3AN_aWF$nQqs}jmaNt^RV?sYx z)Nu5M>@nW8oBsp~4ddy44(HPHeN$lV5d$H*K(Q+jv<=)$j|vSa_kvyoNZ*FQyF(!H zZZcw)`k`d%0POkzlHm6P!Gp1$d%u8J{tWh-`*5QAAVwUG{Lvanm%}8|32H=WjcfWe zNXYQ9CDe;g2Zgd$a6gb?`qPTYyb-dmmpgOYniRtK?MOp1ojxIEm|~d=NnH9L!B(4f z%>1?<54vVPCI z(%&F)JO=~@mh&s11AYMaT&dTK++;^J8T3W&SFEQ7=m((|{%A?w!I%HHx*5#Rmj&mb zg88F6;72WJlQDiQYT3OP;C=klVb?(YjbL~1WSP+q7@1K3$mgWkQnWxmfXuq^iuG%B z15*3R>nB`#Sp8dOP5}JI@MsYilaf}7(bOk(I=>>gJ$w({0hs?!Q}JKdklb3XzZ2Z+ z4d^r~f#J3U`mK`+W{bJOT-#>BQ@EGK5PoMnT4*>04uqoRRAHp3tBr#hqHnS*IdzKZ z4-5bc=D*|C-M%Z+3_!o_CcbuKsX z6t1Ss_Y@J9ZcuW-D`bzfTK~v)AT9La?DS9Eh+4t+UygByzeq>#EPN?|AVphz@M91U zEL+zVdM;^04>>4M2~HFHeHL;nf(wm-AhZr`Kkik7-szvb3k(_Gr-#4c=m`Jgli zOA7^TOlZ^St-wlesz}l6zLmD<-ksr```Ns-OU|;-zUAwV^niLLOlsNCmjEm(*W>iP z^g7`M%t!oX&z4|ztqEU~tWl2E=S2TP@rIht*8|CXU&MaA(#%I%^td5pPL$S170Rd+ zMYYqgZRP>8XW!PyWj_;ptfLE39c}oHSGyF!A;b0U0*7`!s#ntcAV;gw*X!M1V7$YA z{5W8~AG8&4;iBMQgu`y;52nUE&;6A481ykuDEBnE0%h_*&_NXkk4zV6$tw>@L?Aiu z-P2(uZP*nG;KdBz{ThxX^C}QBA82uUdwU{LmAWz`^ZEl!=M%fDzq3vxaUZEshaJ+Ml~WCM&#>ilfZ6W8p4jV|!w z(J9WT0QY-wrL$Sb4x_^J)k-V&dDEbDuj~mF^>V5xB*w%r4ak&Y>lZmeeFHL+mwCwh zp3Xzs=xIKI^Z6lI>7PpOS3{FOUM6uH!orFgKaJEsuerR9`F!0Xek{lVj^}bGK@f3q z?8WWUql{btI4JnZ7R?Y}4pW~#12L*sjim8dR2B`KsAa$SF%^wLrSx$|Wag=+g?8VH zEz3CE9c??D#Vs_oz~oizbYNl5cg(`#m<Pv|ys&&|~e4Ih4Uh*gr=$hnR0!zXKXnbeliK;Rv6>c$(poGfc@b-JB^N4h*->Lh#3N2_v$Y_b&y#b+;+n$EAbxRjV;%lKvlyIs?F7&6d zXIY%)E^;ZmOP#k9cW(|2)GJg{ZWHq^@=OF3Jc2bxJ+Tof+KJoi3dVqIkPE35D>4Jo z+Lp_*P=2^_l5Dquom*-DNBO~pq&0*UJx$cj8&GZ`W5Ny6u4r|vfS|uaKr`0ML4hR2$%A6Us`rLWaly}6 zn_Wpf=}c3cA>k0Fo;mA(>d?tAqt5KIgUC7rKq{OG0g`*oLXib{5wkEQA<7;raC{wv z^Dm+MnCP+>C1A${`NWl1R%iC(#hEuXG6Iye?bQ!JoVVf17;~9x{L&KS&-&+_c=*hr zN{6bQ%?-o2Hi;Gdm$~j!Sgc3}>AP#}9}8KX)qvqj3wlnP6c(K|q~L7%Fm9EAA#J1y zBA7$2aa)FjagVX+n0T*Tr$2!B_DJ-#M7sIDAw9+#9Q0HvTfO^8 zO9l(qW)}Z%d~_OIY#wkIV(j1BB1xFaF8ck9G{Iw(Uo3c-n=q>x9bsdyi5cPe%qZLD zQpepEcbHUwyFgewAB4wW94P$<4vQSfYR`c!(7H?A9rIo=$SG`uvlP;8{P0Jc8fHa9r_f{a*9{e&~5bJmGU05wlYsHpm-pH1vZ1gE8C`UJe`mDJL9dB$tb<2y&%zPB)Za>RSA&Xye-*1Cj zs&@Nsy119i>TL>L?uZqrnt;7Tld;s1MR7gNI`_h%^|ha>R4wuQ0*vdm+ELiFDh>lL zV{phLEvwh{;&Vmd#1DdpV6XS{h3KTv*Gfm-@S@3a4oZrYu3#%{d`FXgddfPBSoyw! z+u-FxkcxeSMAK2EG990~I&k5VX%j*HM=7sISzEfP>*s6VI&;&O5di!ccE>|o2;7kC zW`8(8QLhhdg+>RZa^YBDWz0@?1?dQ3b>d&XCzN z;9&Nd)tt0hzb8gb>ilUaA&Semak?P6Xc)|@*B8TA`eIb-S}w$OK4buHRpm&<^D#O< z7krm_h8&dk$lcB<5zeUL^$~%^sE#M5xD-}7+c?JklE=tsnhUfEu819|L1YsVY!&S% z%;kS`pj*wp^4*3%M)7&0l92b`^J6*HR*nF_S_&tI@&=v6T955QLtN*P9gdVg@;Nb; z>7@-tnk7=_lTt=|Kj0RZU+cZtBhx`BI2Gn}+5`dGP=nPSG*-CV{e&VhR|B*3dT7I! z2{{50S;-8MX{X>^#W%YSqDPNTy z5qHWq&9k%Jo@$)B*D-g*Fx8P0M=Ls50}$y7#&f8%ug)xji)}QBi&h(T2lN7UN8De^ z@W)Ovi0(-*k9^z;dxn3vyZ|&!>rj)iP9!xQIk!qS-sZF03pOL=cQEIE3lfh{tZRa& zB0TI4t`5;$Ur1Vx5I1j?=VByVxeqx>mIZNP+Y7%%H)zn;Ba?RJL>!+22s>oCEBY6- z?FdVq&*qx{y4erw4WD_~pTjRwmx$$#!oR(rc-G&W@;vCp+MP*#sF~UYZUM3$s!#RO z1zl+NdL`Rs!ZIl|U&Y-w!7qBT)AzgCma?Z>`yUl|W9Fqlh@j$<)tUT>HF_-T^^=*} zir92%QM9i>BYia^3KGaQeN=V|`Thv-wa?^&jB6bUMF5F|HR=>ls#n2BF7KjnqM1y9(~a^`Ja8oXa|+M~$FgtGd+ zaNtYE+!mzNX+?lRog*k;g$kbD8TvYW1Izhzn&oT0m-dVtfyDb_T*kiO+qfz|zSzrO z;oN>{eH?eEJy+aA*dgjj_2L%`-?7CZkCf4cNRz1Bm?5cQbX_WaP8S0~t#2zalm|n3 z$O7)l6IdG96;4P;p{>nTFf6tniTw zk!bNMwX>u&6Auzdoz0(C5SJXWY_(ju$NmfT%VAnDV$tnlN`)8@pIV+0J8G0;oYOB- z>_H#=u*s+TmO?G7=4DLo0pX<_x~|6MqznN^3u7{qSL%+IORs-g&n}KC@~jh0*Gmi4 zxS5>`2KpmG?*;XZkeFZY9CY}OeUOk=*9b{*6*6rN3E{I3xme#3(avwxmt5?_bhfZd zu4E-i)t^P?6+<`ROwx%L&VmvBw__waf?rur2Mkh`a!*FCx|V4#0s`fH zGvS+{U>_2(Al^2aL>l|BnYn_^Cm-MgLa?Fm_KCakKRw7dfIYKFm%j~UV*BszNe)hnZZzgjX^PC% zMv611?BKg1!NmGs=5M;dt6RHhiMAgWZhB!$eI`#5=Hx0A#MScpK}?@soXvSSh7I~* zk$%>lIin=EAYVK`~!b zr!&^+tH(V-$d{1vYMprso46N%$l1B1mdUu#u-Q_1)NNIN22fX7 zo(id11}BF#_e|c*B2Z)snL?tslCTMugh{sE$S)6x%wY5?K6bl#WNqOy zvM>$zh-MoaVvgxQ8dM6BaXKnpozGKJlxd8Jv99fE?&NfJ$D~$;pZh6)!)hL=pGYTY zqJa&5BmUQ3umY}Ji1AS_+g;jOVO^rf_f^WYvLl7*j6)Lisa+kTrH~PxJXKwStK*$G zr@tKcwwhS!GKJq zOlKasReT;X#XMC_RBF}vM3&2eZ8dbFH}TI?yiv#BFB`3uuVv0N%_BvHjo=R@PO{61 zxWzyFpD1H&qTkurecJT0io&`rX>|QGMTBRPx=0MW%9G*7VOvmuCTCz@A(Q8g3-7aH zKEqD9;v0RJa3k&f9u}n#>1Rs;_H%_PLVFxFvi<;ba{J(6;SuX0e-Mij@#_%8-;^(Y z0S=ZMWM58IDP(<=n57wG-_Yx-Ri`SP*`z{D?)pRKL0fqSW=00?vFe)(4D<3j?erpn zLu+s3KSI{H5=bD`2^0@Lk)-24{8*%mm!_MME5FBc+#`vZE9^+cjHXkpkYJ zMGxB^5-sNKgZs+VUddv*kjaalz^v5-Eqf<1^0+45E6PKENjH6-OkME&{ut;w^8p}C zRfFmqJi>{hMlw$sz&K#8e^S!5xm$fl#&}t|{rAB-{|zmBPB8!!P+s z&c8m{lC730ZhwBqiHx-?-r{Iap)UCz_vMf8 z@eIFP&d%ht0v+Q@Oh9Z@j>cp97x$Jvt`VU}8NU&i57-*;|42BD>Lt5i?S%8)&oxz? zx}E-Bi+oMiNlKN);UmuDYtv>jH*_pfvsTA%B03u8q6yrMCT=E(evoKRkdV@f?Vp^4 zmv~PrRCS-PIz6{;j|c{py0h z1D*Z+yUNUf03)BR3XN)4pE}RTlE&;0*~aJh@|QkJ*wf9wcT@DavQRk*?QC%IbsXl~!aYb`1m&vbskCPvWIbXm;?h zaYUL-maQcT*^9+R&r9mC_b*KQ=&p!abP;aV{HQuAR-FWhR~9pTfxtXux0&Bo=C9vI zLDhi^?=rhTYuPDIpccTQYh8IMcEmg=Wgo(bt_8(hlUJqjzGWR#eLTU8#dj)Owx&s< zxPrbxZ?o#I-ubjCRGiI|fV;6esPw3xkPJmjDy5*<5fqT2ioqGeINiL(Lr>@ByM+_C zz5LjEa%IK1_1DyKslffbD+8#l>X_oIR98mJZAWAam)LI%CX{v@fpMniLB?gxXIcIw z^b3{U%)cwA97p`@eyS1*hG13_N}qDP5<|Ujt+w61f{7xQW_F>bnQq)ssfK);t@fAh zD(|%nVn7D+89{NMT@gU7AXTPhI|u6nX^|iGzYpPdIVd*swjHykkTOpvL~3gMR5cl} zX_3I8?Vi5$=>DrS_Ds*DbD+zk!|lU6Zkb2WKakgCm5i8+@M3Z;1Pm)g_vS9Ed6UsH zy=RXC@xD2h{<6MWnrr-zmtM1Al9{OlYC8{!U8h#vJVR*B20+&)l~*#uX-ln7{v;P9 z?qHg8aAN743fu4w9OKu5JC3BXp4BwtKT;3Q4-XUnh?_9o(SqoTme+p~3GZanvu7%Y zJVy1m9;$;#&8(KSE))SaVSK$DQ!oy9+c-x3YV|5E*eCxxdVbVjrt zkHsOFVySBka+vagA=d>cs_OArp#zd*g@(wH0)R4f0O2SD4;WkL##!<$crl`^V^)@t zj9?o9KS*eHwF6{T)XeMuDnUf^l(}OGFmrifUqV=v&me9udDUU*rW_3`N*vuhpUVY&?vq63;G`Z=yQOlo)OA`(cg03!zWU}{r&gR;%aczHsr94cEuHph}C&w;A=#w@jlxLIRJNc1taeU{=U{XK099r;V!=K&#CP z^le%H91U)S)f^>{W}%~b`ylF!<~E-yiKgkaprHqR`5S+NWIY=)QaXnNtnq&Sc@NN+ zYSXjsXy$F}SyW!D2XU{k`OA0Xk6uZMt0xeRwG32GI43OqVhniw;z^T!ef+OkuKme~ zELyHx@pLN*JJBB0_g$HiZkI$yVI+C-myux z>TRocWG9njz2_NG1Zgi@;t@UZ{vGsFU(n|$W$d=QsVY#mrxMI*KL|Mfk*t^zPuJ722Oau+x>}{;BGnr5jydC~3!%C*y&PuPYA(&)WoEJ|DQ!T4U^i z$v57)FJc?S6(e02Jc^3i0=c!WhS`A&bdm`WT?D0=fy>|2 z=%^3QCzjOYoRR= ze7#y&LKyEovzXoH((nox=0Fps7Y|#=#)zilGav4l6C7pJPlM+f{LDbK{x_~rx}K1J zupjhIKlNw|JMFDo#RlN0sZD%|WZ&KO!xAU5pU8Q)+Bp<~Jqduz15QcSn`5@0-jNkl ze@D1G`WM4MiKYzCaKwQ96^Pb==AQKbu%#&ok$5`oI*w@azH*8y^@ znnh6aulY@y1MttTi#@&DX$f88vjayeB$eeVDdJZ|VhtJ`zJufIA>6Nrz$6G5@cg5H zX_3pC%)AYVqa+u=vwzNEechQoi1J|P8`#WcRkBb;pH z3DaYdaq47PeSMn?#i1BD7&Gu?x$Gb2XviSpcDPLUpxz>BOPNMA2WMgM_>i@(1!vti z7-2{HlL^EGBU>H zJfZA52?uh{btIvGfCK0(h`r-L1RrbR0c?d`kh5K=*W}-j2T^!$ZhI7p!Qu4UQui^S zwp0r+Vrs*U5Y>R7k8f@nsEiM2|3?e(R9?EH|LLZiZ5i?sg*8LD<`$16=agk-esJiM z0pjI_t=A1?h319^u#rt6@sHVUdZ-XRn0l-Q2d`ls==bz;SYm{T$qk$We*@Kg&F)EP z7Sj&=7Y8N_^Yc}KR|NhaL0o4@14A_QIb90ordGc3dM+Ch-{XQ?dtm&`%EMksUiqwx z+UTg-wP5g{THtmAuAGZ%>vT`}?^b{;Yc+h?2%&OFbnx>8 z0yLHRyqC(LYa>#O%$#wh;SjBFdc5)-w11BQtN$HmE=82M33H8dz%XnVia~Xk*B8`t zuHu38K_*Guh6j2!Xt}As2y>3i4D77n?Cw~3sV+H0G4K8mVkyD2P2>h3VGeLfT$*T< z9vY-jT97l~$7O^Gp7CM3MuCP~k=UNxY%0ka64zm9)q8kpKcGsT5wT--zZ#>D%f>DG z`A+ATR($Tn$v*(?(6GC>1hz!BF1 zBte0qjkx{A0J3${=+fy}k`LMtnI@h%%9#5MrBE$SpATdZtB)=3G%}9wai#&1SomWx z-Wf(QR)C|c0zd`)QG_AQ9OtLx*JKV9-uwB9+B5<@THEEEM9eIdu3f+&U=1g~{9)a< z7l17AsFOhe=E?KUhn0CoZ6Q(?|AVs=m}A!uU@e7z=-faC!TnR}B2?ZfqK}swg(-1k zUNCLA>qXK?2mpHN9B=Y~Ew5mk%myr0%%!7Q| zdZ=$0X6JeKo4sqW{-+KI__?>i+G91<=16>PDe)u>%zv8nRN!y^GH1$A7;T!5Rmy|8YLVaSY*0 z%)oZ=E}WmA@;kO8<2Y+J+h3mn5C-c({g2y_>U)e!&V8NODh4AwAQc5_+N5RdPzz=T ztQK|9GBTABd(*17xI;+6zc>OAafC)|_hrsPq&wl&T-Is0jrw?d?0ksUq(7ODDR-_q zUs4=Z;hSXlEyomu5~{}jkPm1F;Ck%Ae&#zP1egr9r5V^gxE1&s2wKmO3!SS2yl1E(H^A%A=|bIzge( zu=0@E))qp|#?Y3RnArGnQ^7PWY6+25kmam8%zp;9Y~EzfJ%9Q$1!5!K?+Y>sDm?&0 zAMZh(O(44zNQb50w08vVew(+1!f(aHkqY5moW~F-RfzxCcm}4TDsi?uimCsAng*RA z6D;d`Z-2&$JLJyWT`E*vS2oGgS~#|70^trYR<HXXr0)g!w-6xwhVl$*N*&3=LV?e^oOdI-1|%b6ige4>?u#dFr*X$Ch#<(? za_tt};}RgtefC>?ZxJa$GnxSQ!JuJ zem8?0bdFgMv5G#xxW86e3}?+V?{0co;Q`^^)VG|kL9bQP2-RTWb(Q$uBzE4A^7Cc2}_JO3+FnHp0x|;{@X|Dzi`q=0@yLa}4o7Ri_C8ffOpS zr#Zi&dUUf`*C|q06vb48MB-cP1p@#&yi+fx_K^-p!U>?2tu|8D0N=TaIFo-C5{N;n zI~~dM#Rp#5ccm;`Ca7Pw(}IIrAa}cr?u7$}J*%M`DVeTvw|iNbNNXzkYZ3&4icQ-O zu;5x#*i1bfGENj5KtTL2f%^xu9AVc@OsqKO9MYjUm@bht+UshN*8B-8^Lq`%g}CbY z^%X#rtv!tj7bjB&8wl`9m*0B4ix`OqDHB_+z}H)HY%p;`lK-~GN}b2HHWW!US8enm z0q8LO?^$O_zrQ2tzHuc%h+etPLf2y`z_s9GuhkU{c06QMKPnNz0B`Y~-4*#rEEkA> zc@x@o)qk&>?OH3>cflLx#f-%41m3WxYJo)h-5cWLa;WK~1a+Bv-c$2A$>Qh3_(Sa! z2P4OIFEHO9F2HIo{1qI*2?8T)n!p;^#Xjad@!y75OvTI8DKt5NL_thjwm3Zby{m&p zM1hb-Kyj5Z)XTxGl{+aonEsR^S5jes$58xIWY^bQrV-uLLkyXa#$fo)dp(y``EOQ+ z4`Rb4Kn5^bhL&&Zwad@P_Q5Ern~iva=T$ahP6M zTgDP=-w#r!_}fCs|NJH!Sr@d#@7{>H1^4_1vGJ>xoBem*5{RKa%EzF3CP&?h zNw;?mxb~Huo2gU1gW^@FeSgcXLlD8Pc27gq`2#!Zfprj3@w4pBxy-x5n_eaU*^C=6 zTxBq@l0U;?t-6rXUcU)`o3SvQSFG$4NVIc9f80o7tPw**>s5YNg4l@!6cegPQVz)L zG|4*`W?)9H7FbjZ4g^m8|AczT4ZYG~eF6Q{ z20;iiPq0a~l>*ewQqQfk1I4E|>mmcXW|cNOsbczQV~2Vy*dVl_KyRwe|AWqT{43XQ zY2f8mtI}gl%;XN{nCAXi>UYD>K~nf-=a*Wn2OjctOWsu^u?Jj_%Iu5e5Q;_Y`h00H z`h{?2=u)8K7c0RXR5hZDcki|2nWB$(j@f|5NyUC?R;5W6^&1+^9{QcmhxdcD4-2xfVCsU&*+g!$4`L}pLfG|6_bu8S@Je?Iu8Reu?<9{Hp?NH zpHYI6#%3P|eJ|k^TxrD%NgU9*;T&fk!$T#tij zLGc&I&>@T}3xOks=sBk^SJneB(+(yYHTmdUt{4(z5l3wo=_V>(&f;7UWx7P@7sY^5 z7d5M-r`w6y=KyKi$A|!rI_GG~ef{W^&BcvKjy(XF3PbgzzZklJbQ;-{@Bb~G3g|2R zqJYg$rW=AmI|%sfgVV&9;k<3{qowcZP;l3-W)&+@TI%q0Tuh6I4JVfy!cu1P)JzN% zVrvV(u#iZvHwe}DDEwT)%bO(LTx9PNb!MPY88yjHpbQT7<$G7;st54tB&Xm0-b-?m zN4gZy%caXwUpBR6?IQJKB{e`=Au7@m{+*U0VA5zwbTxbTMUeSO4YD=R726UJ)SD!i zLsXZdKC24N8InAV*I7z79ed9yuKzceUbFl_jD{6Os|yP=g2yd8qpo4Sh$elk>c>9r zbg|=RkC;IRS5Y_WD*G?O{QKf}aPz>;;CDAi=!|gc2coIzuTrU{duDz}FQ_vZMt`$} zcfI)Pqy{uN<@wS9`e+S-CfOR;bpGZ|Io7EjSKQe6WL)1EEpD<+!bZDwBC{#*NjQEv zvYjl7Eo7&e@wWvr0dvUF51=cCWfGkP!gN-z?$Yxv$WARE#CNDtZPB6UbjBRlpO>A) zMP@S4YLvx(d7omuzvJTA)bZW=Fi8o8R>8D1jbB&_X#VceD&Y&+MQrVLW3gzE!m8rv&Dv% z&bQJeo;bW$--vfGpc@f2FC~`Vx~bR2S$dl|b}!?t zG4qLa1oRGU>oQp)?s3+cgfnnHa5p{s4S95jVvdb|6s~^7+dr z@~wcoe)7LzN%R-Vm?SzW??GdJvec^3m4{qsu=8?clT+tW;2>?;ut@u*xro zR{s%_+8KM5O8w8<^-^_=O{(`@rAOid3sl}oGGHBwn#5lp`qzpmmoMt&awxr40;Ehbj7Iiun{TbWw)86uzO z2y_yNC4Jo8N!2o`H@&};V3MzZW9eZobR0it!eA1#-0a5Rc)vwfxw`)brj=Sy5GNHM z8~yX!`{HI1o~rg!a?R|gXDwT4J8Hi89a8S*^o!iH+Wu^(b&lz-ihB+NQ7gWJdy+=) zQl-PcZ7;JZrTJaPSgKgOraqCIv|Y&OK7QJk%kAS&2+1L;@4Xnu`BN?!OzWLXZ}N2f zR%Xi*h;e7)r>i0^7m)Yp7;b(atMq2fB2Mvo|KrETr-Q|&U#d$ikIV%Yrk1pwuX7+^ z&ehd+DqVwc*L(TBe2#q`Ga{edSl7Lm(yj?Ml7y;j{DepWflt+@{mqlTSh3x#xa_ZZ z+6)MBg)!Zu6w52lkHkYT7-Z<-Aoc2eOS}}6I(FF=v%V-|rPY_6$Y+?zsf^r)v(1BQ z2{%5~*|i;03__4~xK$rh*0J!seyw9Qi#N{NQ$e!hE|YHEA7}BKQ}08T@)ZnC+bD=ysU&Li3v-V(ej*LmRq@V{6Tocmbkf&tXBsL)m_AM<1j7*2eVTUEJe~nco$$=!7gdvzMoNnm!JUqg|oUF0@aP zl*3Ua>;f5Q(47UNmH^F)$65t4OlDj>&KBjjZbw*YTKK$~iygYf);ihD{Nk{i9lMV< zK~2X5JFqWgC|5;$Btkr*7awiggjh=*?kz?5q$MilSF6-vmHd!A&mm zL!o@qf?;qF;VQ?_IM$kfu9)K+Nt1I)3xCzxvr7aQf|iTJkB|W2f?YK(=}dR-7iZqKZH07Oy~3fbZ==TT06_N9uAl5YuaV-Va1em6(p+|$QLZ%E zV4KF5+)EY0`t>KXuMvRW!?OgpJofC}>+~-eTT;g-TDfFB&_9>`Y%z@|4SzQ@nIHYc zNaJK<&>-Ib1^HB#IVce)0T6=Mr3Kb-G8YSxq+NiPd8C8nljshBKTl)&$d}e`q+kmR za6LDJkutd6Q!KyRm5MFW6nPN(d7H$A#5LxGW0(xJ-kGS0LmXK{+Hh3H=dM87YHaJ(W!&B5eh)NXhb&eWfb>STV)d+df+gCeB| zA-7JIpbah~-yVP?7$ULf;jJ|^jJrpwaN@timUJ`-8L6q4r-;aWNXx=P>&#szAkML zan~#j-&AGib3&p=P>qCsVW|Y&p7eXuwl?Y3VB9E&d+{u=?Gi#832DY z5M%i;V5mb3VB4_L6c#YQjX$`z)`S?pw8iEAK)zr;#Bb;$2^fcv{-;mErdAFH7rWP- zy2Ec^0$JD|Gcx*J8&>~;1Yiub+8;rk&)`4*8R$7Q(25qLMaFZ8DIp)pws@_6poHX& zJwrf!!0J8?Zb3RM)#H~f0+ZYDwiDI5gRDgx6xDx<8ul@&vTmLJGFer4BghcI-jMU^ z?f~`&WlXFHdfbQ$GHqd)SpnZ=+AuGvGDk!xUQw01`-;)v`6bd~jIf(O7!~LLHn&o9y!o^5=hrhU5BJ#=kJ*wvL%16;r->f>KIxA+KwtlDWgm;!iOFgG z+YO|ZMMM%aSqgX(po7qS*0J}tc82NOE=Wpj>4I^AxUOE?z*`Dju56&}x1_;3}PV!&fnO#P>kneFY&551wQG>;KxT<2N2 z?GMb+zF{5YPYG10pC_xow}nv{tVLkG?RwP~9gUwo_X;wsw`b}^G<5`T&oc}>0=Y?+ z=;%mwTJ(6>@EO3_c72M2!BIn9Z+CRaZ_>nHrv~V4H!K=E71FmY6h)Xs2cmBA`gOQ) z>pUZ8%_TfYYbkGTtS&vDT@93ZLa*Y6n1~7ZHwsJzsjiaGpImW$z-#-bsCc9)#=<>$LSQO>d?s0R%c*mz_*8*8$;vP;3Tn32o@id?=9((@LqbvO7T>pgB7 z(%zZdu}g{ zo@g8(*?(Y`HMu@tGjsXlXtLPFJMULb!UVMPh2l;=mlB6g)%f3zb?Gcu;H-L-C65#O zL44sUy6}5vf))Os$S2tBzZWe<6YW^`t`8{M^YPI-PW)gBkk9tO!n5gRoJ?j5j9hg( zkoz~Q^dVcbx4>vR#&SB=-DV{Wrg9xw;vUr7)8<9|M7QGgAh|9LG%1o%XcTseLyvLC z5K>Fkn_nlm;@m0=b{*ZsB6Cj8enX8_OY!G{f_T|Vz)M>83eSjnQ*x$CCyS5;C(q?j zSE6LxmU#8SKJfArVIW8nNs$9SculG^(1It68G2=T`(9YtbX z)W>Skzh~(jA78*_;bFpS(RxO$zo%`mbN_&bot-Fv zt%i! zNt=u%c2NZ>G5rPNyIPp}BAON7Q=TAyLjDPqC){ZxtpUS4tAmaj>upj0v+7936$|q8 z1!SD-3u>IZG+o{TB8lAl@|etoTo*iN4MFL)JC*>0S(ieoTO$4nX&7^527p;=l!WRE^U$y71*+=^Pmk0r!3y8dh*jF0l zx-c%NtHfvafoSfVryNAFC-nzSs!aoeriIv{DBi73*OUn){~J0BBY1V5e0=CEPzD#l zja9t744QzL2l}vyBgvX>z=qvquW(|-{>uqr(9WW%;c&+uqy(@rRYH*S1DG25eC*mvkS+nq1=7+Xk_$w-wtz}E(nv^%5@LaLNK1nt9Rkv65Q4Pl zp8I{zID3!t@B95Z)?f@3=3>qH#Qj|N6+$*)J3%u|j~*B{`uq5-_S4uJ2?w4(tca`C z4dDL!PV^#g zg%A*TxYhDM&v-oRArA5`87)9n8G}ung3p8pOc=tI5z-EDl#smA@~|BYBqiDR^(2QGyD zJGc966HtTJtbe4y1?79mtr|0T6EHC0+NU>ypPhYkDB-gz()@c?>td6cT}M)PeSXea zJmEJtf{`WFcLoo=03jz-R1N}TU<|gh^7e(`Lp*vZPi217a%KM8wYojhtvi-umd1zB z792ycu^Z<*#1~cVK-yl_R;Gq6+h+M_|H<)|<)3@w-Ju&PmcS9=-2^_hh=#+$Z*a}o zb<)c$p@up1m^8cVC0HeEJ_5{=@hf|MAMAL>;F2*qiWl&Xpqsy5814L@snSlWmSJ-O z&E_|72IA%_&0r!`-(5X>w&I0CMIfe5V~A=?++~`A=e0wZ;Jt@HSK^ycWos?H9L^W* zBNY@M0xW#5Ug@YGF2#-HwD*~|N)u{e$T%T3v(WO=gI;YNqRce}$5I0j zs8Xikxszwd9?fOcggTT0Qw(uA*@Q&GIta*me+l>?Q9GggJ-f2#`jK^e_j3@ zf3Rnz`oeeqgU9xKYvOoSbiL|uNj^C9$v+2nyW9) zM(JnaBQ))6E}cagX=h75ztx;qlG*_M)vTdA91A=5zfYr^(gE=va~Q}jD{1!Iv)5Oh z|KNG>&2-CG+pU1C2Jl(aLDY*c_)-?G0gXtiIpGp8$Je3KjX326cE-{8hw!CZ<6W?a z*?`?X<1aK+;rprF`sFkCfHP7L7pL`kD2xVD*ZAHv@T_Z7Ji$po7FZmY&w)zv8SFYl zzeWH9?Ovr=C?DcP1fO;UNIswMl8+VNQi7**23{Pq3Ij$(mHD3}LB?+Z+P%H=`Rm3& z^cgt-_cphp+N5vvlI|`3O?iDsDtYg^K;h*X+cN|1PW!+tqZr!P2B#X}GdmB!daJCw z)=s_w^H<`xB6=wmB4RV&1K&V8ba8HwyQ3POf)R}*c^t7jbTGUjbhcl$jfOGx41_0H zGSChaw@XIc+sN-gQOdV~bWQH2=Gk@#Knr>pXdWVK3+%slL+>`b)w(QKKzvwH+Z41R z(uxrw^39)MDpVe(;vW>_Qc%zkOBLp?@7ZkIMYPwCL=DsW)L6trMh~2ho!XE@xCgrN zu3h<)_I7sbh_O4={brD7I{BJ7`Q0QVq~qnwDa}&6PLcsj0`ds$Pj+grJ@Rd~&h$BA z-gygj9B&z_-}(w3DmOK1%4iN{Gilv+d~5Y6!U8YK0ufrFCIC&iv*_R9nf?tg87U56ZyIL{KR;?y|`}?wtb#f>jmqJdc2T&?EM1ZWqEcVKLVQoO%pJlVf`^# zsjWSal8JdIOQY*rD5q9!gZSE{q(M*jOUhlB{4zXVhJyRhj~?H#b1uM=;HjRwVH#lU z9F75t{hW16i&Wl)H}YI6)R>w@SJlhH3!}W-fr2lhkp^?Y&Ll5~K{OMBgl|588&}S? ziU__?4z57Z5tZHv;k$rKB${UU*9v9MXmX%T-`UCU1fJLcL+7PjTLN6UMBwed0agGC zt!DvIjv@~0V3e0T_$gVc$kEX;bNJG=PcXzpx?Deeuhz6ym_pp{HTBAr)xaKAkps!w zSUrU4UpW6rEGpz^h@@ZQGJD2P7B9JPcj|;*`h(KmKHy&Qo}imy0f^|zGgB@5zbCHU z>g~@=1XJ7Bz^=>is|HG#H;&g03}lhU?*;M7q_gyvPJ_cPA)@oPe{@rdv$z>J-@7Wq z3z9_pV(sq)xFGZ7wPkZt^j_DEbD>uo95n@tgJKeq#Ds5e(fxcjAwR#i1Svy8-?=4y zDhTGnEzdTMkwmS7kHNF&ADPar=*O*H768bR(2xuGbMiII_V9}HY`vI9ttGKl?t4B} zY0y`!{HlJ`$6r$n3hbwK#h{YiaS|`rnt(}2k$sHtVmGIqN~;zT>MEks*qmrSuac?; z*AZU6ZaNR%YUm&e9Yv;OnG^sFwOR?QR;Q=G@>-t!t@kE>kO+y)fnahX58Chu)6dxP z_4Bh-!!Rf(A__$x=Z!XjWJaN{=w>P3csxp62Kzc1I_aHs64?sRv97eL7C}*6p0$Du zo7G8hLU5zkMMo!w;-2rOH*<;JWzn-A`0^3Y9H#Oo>xXK~M?RfPO@VmW&*v&f5QgxS z4^K71tsNVpXg?mwRc&^;X4!Nb0Hp4#Tj|ZGg-*K#xh4?(?J>VhE2M(e%|CfD?x#5{ zqf6&~c=#|Ug=+A|rii+{+<#@zVQWjU6h}fZR|>lZESb^KJQnomfk*2c^5ve&s79Vf6VfOEd7m*3OuM*}+8k_X7Xk=qr5=JfLmf*TVOw zQc?61dm?z_&m34I;X8e?PAvws=pHQKMxM`S8i9bxaS8;cf#E%S6~Z#iYxw|fNX(@v zVXv*Tl<~D_v2p7>-YyEkZKmfBqpvk3+0<&qa9co}h5TMBM=MfGk8PJkhgJA0gw6w# zC#Co_E-2_>4awM@!0S5UE9BT|I!O4sh~&ya5C2Mxj3W)oL9+eTWZNcwZwS|en;KSF zt_?sQXCL=GIR5JAi1#suKET|%Ez@X<%Bc%rq#?ssDGwLua8|^lgn`(IcmquoC{cyX zAhC)bArvGvHc)WerdaaTk;Qg*)AjQW=&D-zGrE*W66-M(1Zlj;A7mc7%v#ilKJd$)X(;G(`hpjQrtU9Nd4Ibf z>`_YFWsKv$1P&dMl~nXHN=$t*`Ab(Bbzt}PoY&d})j6l&maz2F#YC$$nVi*;_=y}> zqs@!QV(ng8R=QwHBBw{~LyWd(Y(MRMH`$gd30p#^D8<$v6*g)Y<#3F=!##Dy%%RqY zRK0xT3gKZQ`B{S2A&O>aTuA}#w@|`n49lH^h%_4*#d!J@f6jgej=2S%m{$n!qfUpM zVtgFgNc%e&K!Ujm7{{$-POYZ}*?V@Zb=ohM)cmID-aP+dO-$_R7tw3ZLr02n&{3D3N>2gYFwY#QI;&`2lj}wNB46bi3#q#EELh%`IcfX^UK#& z6uV&dUX4ln`Xsn4^`Cyxod^kMcsuxQEi7g&-S*%>rItt>I(T@BvJ{R@g5A1s*h#5k zUe@Sk9=2SU0A-aSVkPBNMZ2+oN^;G$Ou%`k7tDVy8~oVgV{;+;VEh z;=G*usLeCWtfZvpg2cG?tb*a4p}cY8LUCzX3fvJE()1!nx4^Q=hMo6zVW`?L2L5p$ z9{VrEv}rev_@aNdpbcHL41h-VL)UB@dV^nISI#dVIpr;3aQ*GqQUmdep|@m%5B zpt3MwZ`J7?w`r+1ip#7%SN)fVxWhWLxEfzfN^4mU-MSD-305kRXUQ}1K|vM@1jbBi zjqw`ObWWr*ti~von%kytoB9o42i2^H^2sqkD1lUey6tl6V{jT8ODbd%;m-N4W?rzb zOEP^mX_eq8OLzHD>?EeoiZxtPJ*w6Eaeq#ym#i!FPVPWMVQlUMA!x8)#@$^Ka0_4qD6U1^{-nvJ!{z1;0jRhQD5$?Mo0+`7W! zk$IPMbc@m{NsFbbB)OgB4`+~nSoJ3=TpNyO{V+@yMpUh~cM&I9;^E%sGCDg2bFfwJ z!6ynt2VJ^w9r2o2@#5+}Qkvf5V7&m|Ek>|+h{zsOFSO67`mT3eqF%kzs*HJ=`EhCy z;K#jea`G8pqxKq;fz~s9n|2^L&pp3}kVwZ}2M@y8w44&VGuzO!cUZ6w$FfesMAwcs?TY63Ci89u#U+nu^;cYNmDUZH$b|yWV}4JoLZ4 z8o5swM2UO(a)32}`lf<)q}RE7ze z0!K`21v!_BuP#~^)gJjGHdn0qK~)8B^#M+N3MGZS>5^D+98*K0Nj0v9(t^&a?7R|Y zm(IsXVu=`m)dkjEUq0`0_aFJ$LWA=C>^to7_yc%Q3u~X@np(K?K@$%%W zHQkazMyJ^AHbkKkCSGRKR|k0WM;LsbGchDek8I9#orDc(Ns@$BWn1)AbcGLIBt5y# z)pdH{q?0fE{rNEWg76^;kG5{SH8XKwB9u$q{di20?s;YXibryw4B6BPJl5AOCl}7a z(|7jp;Y!jK7UVgGqMb$s;7D2(5Yvb@Vy|Y!UjN(srCQ5>)RClr+t9TW;Vwrn^TIx^*htP`&<-0cOazKEv zp&dI^F|{=~2iymO!sK4FE}!yv2INqh=^Hjb2_GfJwtQFX}b9^?V z_o^}_%b3d#DpW)FL{5#`aP=WL#rF4JUP!x*=ab76KQ;2WzEi8LYC=h2-TD41FTGO_ zo#vqRS!Nb?JfF2fP_P`~Yiu7W-3OUh4a%Mn*lsXhOaGa4qP$D6hqoqt!;_JM#x!3& zUZKnnlq45MY=a}odP!1u+~X6hc-TUQ`k8x^*)=rFhiFLEtx%W=J=>!(r1^KTDUIMv z8MjF9dNz5tghpcqO5xYdXW!jc4N^H#9g5MZoV|C(%LpkGxSi#HXCOAAJ2F?^&DTb zyvy5C^VsBdm^zEmT+j%M}4&Z;Ih$8(xh5oGIyT(Bemft?l-LlB<0^?hSyCl`lE?04OonT9Gn|;$@T`brR;LtMLPJ;rhfUc|4vw_$6mfP>xI)tSitN}s z0r~R+*T}sF_k5IsJ*n1o4?nHhW4dd>?&|!S*SjDHGfBVCcVuDgC}Wj9%aTAe87G6imbPt_l5n|-hu z_*8aR^#VhU+M$5v2NvD#j;W|U4)B&2jud3&x>g|)Z+S3F+bAp{J=0y;pY<2rhIbzu zs=-<~5Zu8`OJ-*m{r%|kEd^sEYQ^lWd06)f7kQaV!N4)t>%x%{GVm=mP*z`CiyIa!NSuGzM zsL$#Lp=Amy&Mf~Nr#mU*g<9fdIGk8)ze{FUWrvCHO#A^3I!Y=%lwEcKzJU0JK4a2~ zj*4l&!D9tM>Kavm4L25yLVOKRyuR%LSbJ770!{BDswzoC$Zpz@A>X8LG5V zptDyuf#j}esT`6Lm@EK5d<3d^snp7^0P$p%^MJwQ91y_M5b+2@#78i|ssJE`Syp!T z_Ju+Aj9Y3g8dxC9jPjdnXh5ta-#OF+ds^r#zE9-nlpA0j{S!Caql?!{z(GGH7l0{r z-7-vZP3k6oD5Cnwa#L{ig3ST$e(PWhc%M{s`fq&ZU|`>G!d`5D1n2KB-bt(~ZY57<&VHp_L7Ss>qndK3k|Mst>`7PJ(4b66E#dFM-%V zd({7q^=q<9>=l*l4gdyBP5~XJ+VQ)i8n(g1j)euF0|>rUXA3o`_7Wcf;ln6i;C5{u zWLgx%J$gG)YU#%CdkZ40X6+ieioLUUCv6il-3=-^wX?e^WF8%RlZ$&UcWZV@fcJq# z1?=C`=Zm>=kIaZ^Mb$u4Y5wy|&9xD~o*7fH!bfmUSHS2v(6?!Sf<)!ejJCFK-$Do3tj2-X;q z_5bx5iSKY7ElvWmX;EkQTYXUX;fnBZ%cdWy_#v(m-Z=favgY}E+gW_3?OLaqJ8Im3^kkq-#mnxK&(vP+SRIl5_{&s}ag`&Ck?$Fcc z=ifl8#wg*MEeDvV!NyIyWx#AUfEYlh5f4a}qlrsiZZkrv0bwDz-<#r+C--KGCsF&p zg5?CkdEC|A&>0nZj1?uGZZVK^-C^2xw&}(m1_qAVO=SfGq^%DQtkt*|ZB78}>@*{0 zTL=8|Q|ju?6pl<8VroI=5sw=`8UQNccz1ZdaAK7X_LP%h01#-pO}=ksw3|-$WdyQ2 z-M+*?X^acwvfv@k*xVXMe7N8s^YqaxkTr@qy=4vGZuur|%#$P)l+W9*6wWDe^3*W8 zAu@deNfR)w7;<^;Rrfpae2=LLuuOe{j1RbjoeS7=N(ksKSn~o3s+&0)bOJdCf(^MD ze+Wv8GhUkHqb{?@wtZPr`4A^H0p}yJm#r!H{Qdna)2$woZBt^ty(MstGq39gy^JPx zOIET9Xf0eUeX@NK({0_vHX~U!SlQ#_smMbwW|N=Uj2lqhQJdl+g62oiwaYDaBIxp5 zcep{A5!zQj*n;BuPj9_olXo53v2k|8ljkOUp$Tr(lDOHR z!hR~{RkUFhx)^x|w0j&O4USK`c0%hr;BLYtc?t)W1kEfb=t_ek#VEL&Dmz}0rfXOa zOgDN{S7}7-GpdEtirO|=VM^%F``@n# zc!)bQ--C@E7thmOfCBXtzPn@a5r#x{B$G4pJrukb+iXB0@H+*+uwN$m?~Wcc-v0ZN z7vPZZ5T~LNs6ZiYy??%5$paG3lPbKY_OE}2Z>h_`Sesn6T5tss;{La(k^Oj}mFU@a zKK8imfPts1ZUrn5AY9%m83Liw586%)vP;szAdGwsU`xII1tJAKbW;*9HjW*OAh2mJ z{ycKUN;vzw7tM_Mhb+%#%VUZH+~@(f8m#Ywr~S@l4QB?euf|M@jV!rsvQD*;GU?k_ zv{-`k$mK1}!Rf^sT;scbutmYP#f?fWsT`q<5s|M zB3C^=wYtgDd`Z>$OpiMh)eyb_2NodoZJjCqdYixB^;9t^=AET_ z$i{yu0spvcR5S+VmyGv2SO4+;|NZY~5_ov&$yU<;{{?MWVVwQ%$NKx8{g0p4AKb|= WY}?B8DP|b(=cbCba*3i<$o~O{Ddau? diff --git a/src/scala/com/twitter/simclusters_v2/images/knownfor.png b/src/scala/com/twitter/simclusters_v2/images/knownfor.png deleted file mode 100644 index 7625caf3a1381cce5ccc3da25c8815c77f4a0597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26378 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 diff --git a/src/scala/com/twitter/simclusters_v2/images/producer_producer_similarity.png b/src/scala/com/twitter/simclusters_v2/images/producer_producer_similarity.png deleted file mode 100644 index 616ca56c0b2da36cd4c1e899af2bfb8a7c9fa51f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238661 zcmd>mc|6qJ`*)j&gi4Yvts*338%tCwg~}Maq#|QytXV3eWND+UN%k$v*msE%Lzc0x zF}6X*&Y0)=^u4S5_xnA6JpVq=Gq2a(-Nek9bIx_H>wUf7?=w#{)m51p4=`@pw2ArB z#dFs;ZK5Y^+O*{-!*=+W?`V?1rcK_PE}c883o|E zUM2Zow5$2L<%|-?SNuw_H_x@cmS58=xfj2zTwiQm~t~&wygtJA<*S{xR zd3)6>RVhBZ!IbM;I4f#0uE zidKfLl(q=3H=u;mNQ$&9RbJOm@L}%W`T8pBAsv%mq5ViYI#qjdzD1+^+govJ>YovR zoPfRbj(b0V5*BVaW7B7uS-w$Zh-*V@r|U@u1O()4p<~o}e&~GKwYa^LEs4P%8!M!Z zwm*?Fw-;in;@Y+1MPdECjw)X!ah#jcdm&W|S5QxmC~dGF5$=p8&X@X!GrU0YjQeA!W6%5C19Ht~D5n_L-@jY#?c z>)MfJn(nc-sGaJR{)pVgLPt6vCMKqxVIYI;Daa~?mHr>2vB}sDcw6oVi4P1DahiCj1d4sbqzZUGgp&>ugRU)MH=kU}8AjhmT z;j0}wN+U|PZFOOiq?fIF?%an|X_`2SrGWG`R0zu=KObV%mHWkMrtj*)pL1CE^4DwM zH@VX`sCjoA4!AG0VbXPT?rNV%enEF=BTZUye+xyMGktmH&4;?P z?=by6&cEL#Z*r2DnQv3J@_BWB-1M~&CQsRyk!R;ul}D72S%bK9Pj-ryirdeSA-nRG+gV#W39fu5o<4WFjG@k&l?*X+j-WtAU1@G#6YZyUsq3| zLvP;iK{w4EfIw3U)jCmzC5o)|(>BbI&66~5s(8vFYR$&R#`(}*N`mORIWy3`f{{bS zvLQmsd9v}1ST)}3@9JZb71X_~rj`@07KTI*nU6Mhn_W=r1=XpNj-%l6oWH*}UC97y|2z5~X&t)_ zGj=zF`z38Kv0Xf}9miwt-*R7?UMS!8dp=4TNJjOEFKmQ8vZ@ag&F5En+`*19GC?-t z&71uk&k~skEO_%JOcd69C8aH;Gd|47B2G2<*xyX-x*I;&!IKTRGP~gmYm41B>F{RS z>28t%fdTRz8C1>Jg^B_!Qt#itPqQq{c4{;xWJ&eiuf{+4Zwq2V?l12j{r1*0vt;h6 zq3g(N?d;o^n6@czrA+yfU}?2Kn6n`nsC0de`kh6TjF9|Qce6Xs z3JF*D^`EurgM}o$FW2Kw%F1@p4W=AnNmtU~i1cG3Fmb0Th-xK;EKCv!+L=b=(d!uR zzb6!fq|fiyl1g2E-ddZjW+9Jytyc?brI|O2iS6U$yk}=;r(IxcvLx=od+X?CZe47}L#ZEJ)evhS2I#SF`)!dc` z-Zh^;>s`P8qAk<7pQ`mHnqOkcmlVrB&e&7zM84aS;4z*;kW7^Q^JYe8VWzec^sbOZ zu$>Anvp11Ug-+9~ymiY|SWxgQ-n#sQuJ~kodW7V?@1JfB-(v9{;S_3W!P_ZHNX)px zsj`~tU@^F})>rCIE&lz!n?im?c938tF-_Mr=Wau`k#oP*Ye96j&qF%HF~j$_FJbIF zNm0&S@6JA&`pjjM`_Ky&7TeXs@n)@>g3T!WY~-c&DE!C#wzb)V;k&BkHNL;ik#w;bxgV%ai#&z3+`i7u_B6aNGUid zC~veOqI-`9%0&F`w~wu@S~TlF@B0He&UK`{k=STTAeU4ZgpL`}&^d~!9(^KX79}Ru ztcSO_Lr|oZFqL|3teCkk5BjBBc4mvPF8Td<%Z&HbxO6ECmY|!%_`Zpp^Yr`-0>^$m zlrmt$yzfsh^?Ny^2kJwGb2g}J-S-ls?(W#JV;{pdg8{=>WjbPp2c*5cdo9QGOWpAD zlyBnNcndTpYMSLsOJIn_d|ll|BrT~&$#xdl4O`X*@oX6Wj@M0fk`VPFgk-}tC{_k- zuJF_Ji_Z^Vuf8Q1E^%<%C~i`*u#hOcd%R~ana zvLuvQ^1ZYj&H}agPdWazj|cf~)Gwy%=XWK>cusUBOIftmK_)(!5wp4$Lt9V08jb2i zN2OjiRP5*7$TMu8IGuVu{^|K`)eh7vd>`m{F;g@4%~~vEw38vZC%7B_UKsC^hp?G* zCm{L0II3oF6pC(xVSJ&ob;BK_l5=(lFtM5+YtFMBRPHWy&)3(8U3!ycnx;~_OFLCt z*w`gHYp#chz+RV{QhK)`eDSMLW&x|wp#1N*S29w9*j{NZ^H`h8@Au3}zLD6~i$ozL zw1NU@4towE?Qe}~b_oma1u+dViv4&UMX1I48s!?{s4s4Py)AfaOb4$e!87T+dx4;% ze4=LAt(vEcQ#phpV*8nYr;A?$y-H~;Uz?WWI(5?SSiR7j44{ih3do;gLz9C`xf}8n*L#{N>JS7DdYd4pFDIcZ@E- zC*$370hvq_gpL(;bzyP3c&3Y4s^_MpMeE1q0+)bi&vHB7>@S|mF7IR#Ex8FN&fdh; z99PhlPlL2`=5`%xF(k`g*$r*-Mw3A~{Vw0}Cr_R@5#*N&28`0X@uI&6+Ef^bYzimZ z&8DxU6G_6s@{4bF1>_j5SxI!!mVqJ_9z5u%_nbO6cdBKM&-Q zYey%VaYp-bo)6fEx9%5=@b3AwUeBr~e3>}9FH^173Q5t}Qn!WdFE5W5FHQ}bZ%`1B z7_7K4CfFJm7uSm#-v~kFTuajAFCGoYS~k5qd&YU%Kp=)2;=gvCW?2>bX$S@5*u%3O1vKGeW1AdYxlxKABUe z{75@?(51ubEPmRf(J?Ktxv+!|Av8QZ{GKhZ z1?2fNH!C)!YNv;@3u&KxIcvZ^?)6OR!GM2YV9t*pw-*_W!L_L4Yc} z?<Fv?iI*?O`l(nuHK+&%UF^;X{a&5pQuKdv^7uW|mEiUJ^Af zD>;8&)prM>bQ4w6WusOD|0MHzd<7YFvzrAzJU`ce^Rtiq{)N;*?yInYVL`^CPCl&>?U8kH7dY14E+9;h5P z4Kb=Xboelm*xPgO-QYT7`36h-A0w@Np)Hlu3R5T$gZks&;|;xexVW&eEV+<|3R4_> zCySkDoXEX7DuXMkd>*$EP%ev`C~zf|dZSWj4amJrfCm9E4bgpw>yBKf%zC$A+cr;lCPruH3=4 zCOtoY_eO!Bn z_3}7`^;#{68CFaEH1CGD;h_s;R&hi_o9f4+b7=5z|eB>%*Xgn|&`wLeEDME_T$ zeYok~l5lmgQEsMVB+S?vouZYMRCiITzo08s%BHWUK}x}6btgc_2(JapW^9^%eq$MJ z!+o+RK7d{AO74~iSE?N7NM*Anj^p3kvrJXFNHje>=LE!#D^rO$y}R*O@e zi(_%YU7cnzRy9xAnYNP>qnyHVRZSO7iU=8% z6u1ZOWG7WV-}t%v=w%%Ma8|Pem9SzZaeaSQ%zO9&WC3+CB#P*m_I3EP9ZsVLlGAmX zZ|#%bYY=u)_xk|}^P2<|&sn#Z;v;( z3RK8M2D(AU>@Z>dyO0U84Q(q|GQOiupZ*>QEey6LAuz(!;PrTNa`MJiZuSPWg6)9P z+N3efBL4F0Y^39>EUa?$dKaxJP-$_Tm?x6&l(l2eu@2}gsSya7_Uln6_G@=EnQ-`9 ze2ShWNGXI5dKXE(oScKBhch8b0?_a{W7f!xi7K<{SD+mWdYUKhIHrm1%#KH|)*GKZ zbL^Ok%QW3stXFMKt!|qII{j+*nZ-W$nZm`H-vezb^hI`ObBZjco5Cr6w_x9duwL#* z*iQJ{wQJWh;#Xf|jK-Cxag*(Z@2EQZdG5LC%`-uHlQso?zmlwB#Igz{0^3JvV%r^^ zs$6>I?dkS3U2*rx^n6Q*(2c8qH)ubyL3AJD<2#W?_($FI_B<MyeMjky~c=ui0(l-$v z%a7NsPNZa3nZw_YsgXM9dXUw&jU*nS=8_4QnEe>#pY#X3f^mV{5bIi z6);vlpo)T&>9Mi>LdIneqX4=8>i1I6sV5~R+kAU#U*<_++fQ;y+rBgG%8q9j){{`N zon~n%jm?`24={|S0iF(WNB3{y9^E7mex+TmLq1g`%O@=|5PV4m+h?;_~yPP$M-Cpk8~T2HzT_Zc9igxz>NW z;6el!tKX7yn)(P}wJSih%$&o}@%d|E{q_bsUUv37N7X`ektV6(QO4K#J#D)UO_rXr z3t4`L&y%G>zf?57b*`e4t%;z>$FgnLMw(96`(DpA^5S@6Oi|t(MDIV3gHq6*!fZ?^ zVaA^K4DB(<1-YucJcRG zJ{!4{CH3>IqY#?2eAO=A)^o7Rx4qcehGR&mLc`dD_iobMdhj&}58|{3lEDCxL8$)o z2oXYp>PTFZfpCW;aV6@(C9^*=J&qx8_UCI97eB51aTUd@+tN;oG){pG2$rT%Zz=8>M>2R^_oad zOoO(~+6$0{`1Vng3(fD(3j;92zlo8>3I2=9VMp@H?rWOqr`Bs%6uTm9O70O2-J^~k zJ67~gFAiEyEhW9WC0Jg!uHex1UG+p*`@AcxjGA+)&NQCo{q0!qBcK&(&fBaLV3t70Zv7j87g(g zD__j?b3y3*?^WC+gESWEyBQmufvrZ`;4mY%FB5I4W=GXtT_p0#A7V9WzSbNX5_0qC zhD!!O1XcOVVU5dg+)>|54=|F^=XrV3R~p$P>C==3ni!Y~l0?_Ke#UipCoJG!JhXV- z0LVy!Q-9iGdxVdQJkpwBSh<2wUd}yseyOuTfq^)7(#FJeMeLy0ddFiLZr29SB5rTU zn)2MU;ek~~8o;xuu2L3WRLA%4-+Kc8G{gS^|LR*9Uph~9m>7Fe@d)c9Qut#xW`u{0 zpBN8uOyqIcM<-^q`FaB#o zezh_MTj_UoBwUTK1e}pEQ35narLCS-H@i-ZQ`bGD(UxKrbRqD7 zZoYNzR1Jr5u1WRd!k?g3(A9o4@d|PbF2~t+4p3Itnivd43M_3`LU29O%N!vZ+4U%S9zU3Sk`TE+yp-=-@A#}{&vUdb>NnJJ2g}6!Wh*O>qapOHT7RQh4 zS3;X>o77e)SjH~x1zb;tth^MGqCkZ}(04w7AiXCqj*4&lp&R%;UaffH^D|B)RW91_ z{+`%?5Af37sLKvfHbC!t0%?Sl8RW=7>bdg|0Vw9R-nvdYtQwTd=e6E^{l*PyMBOzb z_Z5T&FLELSFbQj94Kb6v480xnH+cvv3q&+E;!m;oXZcn^9I}Erp0Vzc#u!Gwdi5iv z;qakDC;9m+(H2VpQ5x9Fth&!|7?F;VGq4BCs^|O{Q|E;*$s?^^KuKX)ZKD+jXCtZE)~Z#qAj6H+E(I> zVqFPqii>aB(yq0j>##BGK{U=tzBGv?7GeEjr)=Dm%gYEUp5I$@@c6Hpe6W}USk>`} zMcy1Y(V7KvgRYiV?s-+!;>A&`?mRp&1087B)CrU*h#G-Z_liw&Gd&KysL_;HESP)K zfsbO{Du#xJ(kycMy%fhS{v zTvsO`q@4zzR<~t!JttULucXdts^|G6xr@4YorUxCC%rsNU5!7 zlYZ^;Q)WJeo~VElt!saFMcoSWc!-~XbbpRnFjl|sXF?EiYB9Ks5Se4gKBr(5djZjz zsrc=}S@kaQbLJvYr$qhdfKPmf}BYLei_LLzz!pY=`6HqOWck)g( zo;NBM`#qmckwwTsWocd?2^YUVQ1JlhZh4{WAN+x`Dg5d{^=v-R(fLwC;hwR_!fOy2 zS22V=K-%2qyFdG&*KIOAG&0gsEK3ZM(y3o4u2wJhzAM6(6+gKN0+QCBQ|Zl(kkYO` z%0vH%B8IbRp``F(1NP3WtSs%=TXfj|*itC%U+AWwQ-tP6qoW9yiqMb<*#WF_bWKgo zot@vrIT@SO!UXRGE377AX^0~5FXV9e*JL!^?R^JR1TbSg1$L&Gdl^c)gRZx3y>Cm$ z5P9#Wj!P`MZ_a!Qo-;*#^vp&Bxvc03@a0zoIe z{NI_yI}+iz3a`9w12~umun&rr%iKm`MV*y9?#5m}vk*E&AHv@rRMHeUHSk$PMWdV09zp-Seo> z%w&VOTWmp5I(JZ-=nCx4lrM*oZM{HbW4#1Namr`aAntph-$Shy|YEAxL z^OQHdm`aG1X>1`lOb1r*9ge+u7W)s7TO{ZA7e)M457Z@)bbr)>SOz@%+Q!-pIXN*p zy9hT~v{KfVZFn}@6F^X{+x(ab611tZik#*OPI&7WDVykCU=Ttd#?0egLq?k1gn6p}p-r1He|~^*Xj()lRs=iLsid z0}gP9Q|Fzq&dJPjYYK@#puo~OTBd{;XWxE;^o|*B3W9=y-GhaKGXUPwO>2YBm{e`+ zh9gcp`e%$FIb=F?DYE^*HvE!;)~xb%scs7fI@4QzC{+vrjJF^8sv9O^XxWu}FGHDn zJA6%l^D4yCR8}o-jzwDv&DGKbnaGnTh)AvvV2TWdB)_-VdF@|`zXu7kT{k|a3C^7l z;OHJW`zY~4sj0DN}da`4FBJkmm8BNeiP)zD zJQhH-Wj{?s=N2p%+;rjQ;ju!REQAhKpw8dWhx!s9AHO2yaJ>V`&D@gTGm58W9pjO!s!8v#5~iWffI8w}$%e zz2`n!vMLnaO}#Pn*cp#|4Qf;b_fA=+`lV*1~g0b zO@zEfxHzC?vp#+LG zszITB0{bXuZRLog!vn#2(R*F3k4sk)x}!(s6?MBieuuGl$*+cr)wcvW0Ka?_OEWe| z^?QBd#%Hva+0JJyk4el2BtF7q35Yucj=_S>+=qdNnKID++@XP;igakqf&+O+y3h8o zt+@+Hg?$x~lxlh1zm0Azl}|@t?A=S5f-eYp_GeNS;?ISvq5gD>Up$a`S(xXmnt%OEBrz>6fmK3k2j z^c)9kKY!+B^kE57+&cWor0C%gBmv|+PXXV7*gc95>OGkMqQqYwn%zoe$um4(Yo=O3DRlPVe09+eNd|1}+(egn+##Zb1uY|GM4u^Rp}&htUpb6?*UY z1JmhHKx)79~eV z$D&i~7pooUW@^;-=7UwIJIc9le9QdIT@N#WleQ!Shp&_C*qAqa{vcg$VK}YQ+kx>E zsX*7sLrO&u7h>bm%eN+vu4*53wY2Q1^wx>ZVhU>UtEoIQ;)P0FX+qyK%(;8Dc<8B+ zfzJAj7p?n3Fs~I-<{KhqT6`&tLG1fydW)rMt8VoQyc_Ub2$w`;+FxAOL~AnAgm8)7 z^6A##Db{P9?9h-SO9&Yhd^~@SyU6a~%VCyX#!1srVPMF@;Emtk-a%~Ncv_$N(cNt+ zkN**UG1tykUZb__+h2A|9d}dj)BFO2T%u~R~HB~3SHDp0B~7vigXV==$HaG)5> z9Q^D=#sKQzO3dbLrYDaGJlu@UXx|Jg2*$5SGv%?SU`~*iszAI2#N9^Zdh|-VrrhzQ zp>^QDvP2Wq@z3KfbXGjrN`_t;4}hoEx@_fcevBj`h10Ud)7ILVmSr}xtWxbTQ>b*V zqJb01$IKJN{5-2Jou%pCbmMZ*#VRJz0@oq-iPY6UCd7e@P(LfgmRCqIRv;=m)eGnA z#9atXyMFyB@m9&r%7^=S*zY`NW6Q9Yt!Lvjd47P6-jDajEH4L#O-(@9#}6NlaJ(mG z_E$8@Wj>EkHDK?vU@pH|xdr19y+^A}{@(W^#n4)(0}1lW`@=|qoTwLgK(fa(MHVF@ z(g+5S+Lz=0D93fbP^!a9U5MSR4IQb=x^meCc)VP6s$QE#lt&)oUAlh#dK#R&3`S2< zW0Z_`;NLFeKPwLgiWxn;^H@{m^+t`X9Bh<_ZKOvYlau7Ud+2cR2=?9w{W9&ki!>dO zS<`^MJ!AjlBC*QQA%nCHU5ND22w#eAPkVdx`0+%!$F{Ye9m9&b>YqobwKIwwoPLYr zfIghlM|S-2epWn3x@gk@ycO-oON}W24feuqk4)=A24*r#7sI*w`c;&p<-UsnxgK%K z4wGaVBWh2b|{u0pseV;jI(a}at*?Gv1CNpLF-H|IHY{l zb4X1+T4b~aGBwZc6;6 zs$5{iI$(cD&?ZSWf6#!f1We=4?```3%su;O;{VV4g#S-wde9uY>ri-*vw)b90$pXG zU#pDGt1(nN^jDUgZ$$@ZKTIiL3`>(2a{L-1_9d zlX(8FO3ZVBoGlli5k-6wojGRR@UFMOHT6wubGEg_Ta>H)Y~&SyPl%hqc;_#7(?1`f z;@W-}P_OhJY@rLXICt)xj=g<0l@deC{W)A)d{gsvd}0x}u=H=={vbz>*eJn0+*Qt? zewOi}5XjVnvUSq}P=^ff|EyVTy`jxq1Xt)x(=kqJn&l5)S^x^5S|mE%={klxPi+CQnwQ{ zVtAeIQyQd11fs$J5K+AXP!lnM>clGhKAZ&cqLatD#{_cn&+?uVk7iL`bABYqb$H-f z?-ZyjXNF~#t$xLsE<<9q0@4T351j*Dx|{G6FvfO)X?$JO`SL-Os?opf`;oSTD~MOj z_~eZg5#v0|w+K(pxbNito(tej{AJm$(cttUt-Mr35ocf$3!u3cv>p#D|(vtO< z^xi57`)G@UjT|DCDpR%2xdfFUrk8&n(zS{B5FckHc^e~DAe}Z#DMx+&b=d}+Jvc6O*4Nyme^JI{4lv} zZQ5aG#FZ3fhS06x8|Xn8-3Te0#mrFQ)hmdeW?f7^gYC*qUVA11<_ccdA8gLd6Zjmi zXsqju4z71>rurJ!eZ$N?w{U$=MAELQ`mT^9_Zhr#1C4&Nn{z>8+*ru;LTqR~B-+I> zxl5Dd9<3#dNQ0s#QuqmB48bNGU7WGN<09=QS~A0INb6h6p!|f!v>2;NTq<4a!vfG> zN)L=fc*%brk;9zPLIr}*@Y>2*4D%lFKH;LRG%eo`H!3)Gf;6-+KI+x3dCCJwo_MAT zd}cVuD)2gZU{=KqUl)7r6*1`WRV&|E#pZ1hDh(QaztP>l5o)5}*QBsG(N+(qY}k`m z1cjMh0srRFf->dYsr@JyTiYl>bV|oqa~w5b+lfd6=n|OD*S{7DGl?mUbwGn*)O|Qm z%AhWc9mnx`}v$`+Iwq4h(5Qp$2koX)n7ghD!&J02d7&MkA zNJkGAHmV?rq5C^CXRPD!Lu~O_r-B@k!L@UqVj7~If$OU zbJ8aWdY^4JADhf3Z1v_m<~xaj zC;isczvD?BHe;)p0I%MGkXNr>nMABkyOQz5^@s{KzcWC z!=DFEZ_Jhem$pdo+Gv4%^oD=$(|`aqjx*S`6vwi~F03##qy>>xhQ2q!5n_*?(G!&j zLBCE=rl!HanWoIAL2qtrNNx2zq1CF%nq=BC+yzdru8}9R29@bsENxuLF%K2#aB$7V zZY`s{l!TkslF67DvEBQ0V&QV=NlpXR+T;*S@Hk2+X+aq$`U=yO%qk`xJ6Nb-a{w4s zX5S>&Hu%sBZz(Zby>zBn2>tgdSHY2O*Ws-l(|axM0v)l9nYAdWO{P-+*nCdxQa1Fl z(~m=%Jeo+Wa0Q_8bWa=eNwCddE+V{EIJ|0LUR<=Rlx$&)+oLvSCXrv|(7XR#h(7yZ zEa_8mBd~pwjaQ+qoCU{aeK%O|4&-4UVVW~9<9LemgW8GCFRYJzUulvgm6{b}siS%JV{YY&o zXa{sIW9VMJW-Inn$qm_EPle2pi!Qxc0_Kd&KiHpn zKt`^lGQ-pP3j;l!gH8f7ZUkF6D9Zs?DXw?AMMhgx<| zs@L%)xECCz?{2qJ^Aa*x2)&V%=+rwX*n|@)(H@fJV^l8P*PL>wy<`!&+~O{}x6!@3 zbuFF}qnnBqMPWjc`q`_5Y|#Zt9tsfTy{@gps@=+{La_G4OiKU*l+G{r)x_WU$py!m!qTF2UBHQNZ;NL=fxjvOx=fBScMfIPWg%ts*?8Y zPRU)!f7AZ+KKMdJj_i!`GNg$4G2LNT67pV3xw>$mtJZcfT3NWEmRIji%5yFty2HS7 zdcZ(EHdn6^sIwC)-s#@fQyp0%R~ABv>y3;$D#=gVvDN7gX-hZI`0&(Djm)1=4!5b; zG1Ha0(W-VBs&}`qXxpv;t}Ap%T)HAW65~3`NlS743SeNhL~s@z;eqya@4mKBR&K8- zfm&*e$OzjftXJTWxj0-@c}~jt*?zG@`#()ki^kpuJlvdbE#17AaiU_N+$c9l*%U9Z z^w7!oYmwa%1A(;`4Mn^Y1uIMA4R=K`p`@xPVCA7t?Pu?yLQTb) zq|la8vKYp`676oriwkA0XN#jT_%x1!iS3)oHU*p7;)rf=Y0(g0(0(n|!j~LA+$Ac3 zB5KyG!xe_pT77r(Xs$KQJ|x+EsN6Xt^s=e@1$DvE8@KYA2wZOVf;uf zp(Id}pW34zxlcxdjSISr)BOj=PlUALM$+Rf9DVy^XZ$=d1CwYyY&m_ z$tlJGC*5>)YpjC>Hc9Y)L%8Hd*jLu*Nvbx()XYiN%Tj3q<_ij3jL+IOACk+pvaz;K zPqdYuzrbK9XF;8|(vNAdJzEx2blHd3M%|CJ8kx*qod3*vcT?czjhRGE#(3avO^NAe ziAC0ZD+7;M9-hrlS;pn~=OsokOcxCALbPWaAx;knj0_>~d{IDt%tnuRy<9Q|jHHrp zFO&^;{41)Vjma3e^1!7a_Uj$dn-msbixeFX>H@J^J8rew!MBYDBy~<&w3c_OQ%#?2 ziY=z#Rhw)y-0fL%Gpb1zRA6^=)e=i{YU|6B6tyczxu=LuNVO{AI5g_$k}=GfK2N;5 zx$izvw|Ry5GgY`OWu+~IJxq**ytQ0rDvgnMfd!~H%YV1II zYKW8sH|9;+N?WN1@#-F3x+Y#6mLcjpe`2)*E>=J{`?f7-?_Smn!=f1LeN6_W@HwR$ zmy@pd${F?U9ke1$MnC6SHPXVDJ$t*E8R~MwY(P_B!bt#cnNiK&4-W zs$e(t$&nCqa(!^6d1tBFszH)Rae{nZT3fy%3M0TP;<#%8F6n%TNY!tfQ9U$YtRy_d ze!#u8w<03Za3*K8r!fe6KV8ri9(6ZB9<627dqRTc*M zO^c4zAw{C*hB$srq90UZ12m>Y+mxo?~U9=!1K(wmSW)Q+WjI@@P$X)nICqyGSd}pUq`5z^Z^z9 zC5>p5Oz%};z{a2?O&7Bt-}SE!x5}3U>V+L;_U@Uzt5%)aH4U5@g|+O`X4=i%U-_c3 zW%D4ot#GKRqT^D07TaCHc%LKLU#R-JG+bO~Qg9Xv9p$VHI@X=C4-2_n&ZOJSFD`G` zXj5p*U}4wA$?f#=nHBo%-)b*cTARyxq9-P1rgquLGvg^nrEa()vfpER1c zmSbiWe9JsvG>?{)H#nNRY~+_y$^J$3+>P0H>U++pEGYu&zx=viwH`qDQnkn9;83WM zS9dcG=X?jN$$;aQ17KgA7kv>A*B7=C(R9Vu+CRs()7f+v9mDnIs7NvGX)zC{sE>w|?wo5v2+JV8{=e;$z~ywSfz-zB%n zB*q(qXs2-1$mp2pBH9j0uknb&Z9FnbVgOrH6w4ZlkI@SV6nibiXf=qSdYz$_FI%JYrD zi)nbMgapj}Oa{etq_^aK?6}b0y0y$lQ$Zks$4{P9a*3w=i&AXCZMIQUiS0^)7LVpop&Xd8whzjC0v7UyUj= zAD*LoYr!sme|dJGXBfFn2*hlimAHaJANrtKn2~;4KjR4d>BkXL8|NOAWKLxIk;2sn zfB;a>Z+u<=7x5lW0v*zVzTj>IwC&B>t+*3SS9v>Qv6naJ)K<*h~cF8IZ#{6ne~BHDd0dlP4eZ81jKJ|Jv+mIG1$+|8h8(uk8AdcE)pI zfEgQ6c8%hi*}jiu(6tf#-nLZ&6>X79MO(2TBB`S0V@~4F&(TaDJaY_k%$N_xH%2uU zHp=t=b1^XJoDmD$M1}81kS_>QK1w!r8a;+lBLTs5WWRmtgqGESJY!o|p4H?QbNS4b zkenN5Q<^4w90<%AVX%T=GC@Rt+kQ!o<-xH6xEJvViKTeJ6qR?tx@!r|!p8a2@bv(G z5qrAzHQ1>}lUAh{z^CSJusN=(a;oRzJ8GMqg{$wgls;nrhV6^l^*WxbE*XsLK#mN^ z%Fe8o-1QqhC5p)~ur;LXvp6x`yx|gK=CR1GWz(5`^fuGry}pGe^4)#WLXnH1&5n$n z$*eT6N3|H5LJf_|X}aV1NXf~%qS zbl@QO6t+;~;%Ki}chVHy&9>N>;%PKvT!6s&WG!XoqR0B5&%F|8zUlw%`r{B8pWE7x zcfJn!8rdny{`T}Q#_0|+fGVU=sguyyHg&88Yv@vT* zJPjX>C*#`9Jj(iMRbe9-V~;y>t-E+p<{s)^&6tVf{64J848Q((E|6H{(kSC&(+EuD zJSws!`H6qpFFR24?C4(Z_xrD*-rPX=2a~Te;^KpTlwEdjzsRIY=;_aauOr-|Z8} zVl&H7wd?^7^Y?^s0$ua|5+!v*D(zB9?Xf7hitCf{A`++-xi6nN6#CZ{*$i63Ts-HV zyNLMIv6k32s^`MhyyE6KRsBA`uW)1Rx-fTbSOo;9)pa?mRf*z8u$z+WAAQl94UiS8 z<~R|to1u~dmJhuG?qf|;*{0bM-^0p&uQe?AS#{h`ZdNBSMOenZmzjazbQ=B~7$79T ze;)+(zFwE%z-zHA4+3zxrwTqi60x@z7S+u@a@X-n`-pTIcvqSy-NZyfU4q1tz`Ne; zcKG|A?XvCo%~=uxX|8s{@Pn)bxX;;~2bX(V?F(x6G>y9(kQDAqHX5x~%PrsIGRZDw z{bGmWvyZ7w70rYKU70a5sSh_@Zx0>4h|-W7XCpjlTKBPDG7YcW2L6!1V(V`m2Yt#} zzNnkD)Iuh%@+$(T#(AlTSx!Wq+3_W7r{Ob}X?Ljj7c$kL73Y(4I{D>p*y%f8J4n*) zc+Pwv-qcQKAe%CA_S23-YPLJ6Rr}9<2x>dtV}powB2`|E<0_x*j5&PV&(JL^Bxta% zi51nPh~D%W-XFvJpvvsU?CjYi(J}XrL^JW9-gfN66&K{oC*Ynx=Zd}X#2krWL;G^$ z&AB7jk*^*xo?^F28?zuLTkUxWV6F4qgGq-N7h?roy0WRa67%2`>-DT9XTW!IWWbND z!78{f^!W4HQ~#U?=Q88kxb7-La;NH`P8e2~=kADy36#sm#=$(K%Uo*ytyQWi}Va3+p z&0ee@{C~|(*K8(y1~it}-}wg>(uXM!D)}^`ExPupRs1?VLeUhN!}k^LF-o&M2-~Rr zbYUJNx<98q$iFw!Sdq(YLm{#j>$AdA{g_obXw7ux+0VBX@nn^7@zGPRVvC>w^2)b| zxeUpW;HJ_sH|`km&%;AC0aliC3b_7a=gg6Vs;UDNWuEozuXToG4r)3C^>bI5J#*V* zSZU0)T<)_z;^VY*NUGM}`jo}C+MIo$3J_H%>l31ZI(>6NS%+wxyKb@jKw@()T(~eY8-s~0QtiF?w&+3c+78}d~uc^VZ5i|JCwwTa=Y}m z37@m@k=-EE6~FrA;A3f!x>3~1bX;WNNTS3ozAZh7XL*Kyn(aj|6Yazk(!3em+jzf4 zc7gwu1X1OkWn0Q?-_C^K67S%U%f)p#-hE{6u~2`vva(jcjZY)$#;ot7uzNP-_ZLM= z_JJkyGkeX^=)|b`r=*I}XCO}3qoYp)ej8Z6Fo#eO2t+d9fjqO$t+7UCXds~39^K8N(J#9%4Hf=PlG41V z16+0$sP5njESU7gKIIsDSQuP7>${mwMO|l^vC7^5g^$VN`?sP7FR|`+&)2d=q@Wi! zx1NK2TIIN*scF8ez1ujfN>)H7GC4r%c>Iy*t+g-qCp2K(oQ-rerC@V^_ofMLF8oo-VdwIxM?Gj4$$f!8$-tb2YyZQnM+cO*$_&n1- z?;$)etL^Xvq3ESgQeuxmQesZ{Zm344e{t0XH%~FrEE~z&X zgE;LN{^S?UvTxfsTmpZyH9CuX{bT}cDvjf#r}_bg)iaR~A3W^1dYewUC{E?WB8?t* zFnzNu{e`nL4_P?cfBNm@9NNXF5cxij|L6LT!#@oep7XC`P{zAguBR?^hc$ABu0_&% z-YT&PK3?Y^RIWSv6=prP{}|WQ!Smds0bx7%w#X{Jod<5EHK-w_u=LT8jPX#IF+aS~ zpGSk&Wi{&b4HrUEg}{#}}st@IDk$*Ot^aDf<2g^4tm_(M)4I*>Ih@ zZ!c!pmuardsaTTg^APWa(DUB+o!NJs*@gPXAV~t~6pc+|Fz%V^Fm+CcJpKn$B7gIr zN7m;#|EI66o)=_4IXD$$)xQW4^$|7kJ5psk-Q(H=1rdr6dn$P8W(k|k5&;dV%MO& zA`;i&7$JpGuSCL z;+1iepiRG)^LQV(Y!NKZy)s22KDJ+yLI#=h1|r(%3*IZ3}H0S*EmdnhUhwxawAZZ3nmOHKM2neTUsZi0LJ)(of#$%11NR z>z#?RcoLsTa!bL&X3ZYfhDHXyJ8Y9QFDI<4d7g#*6InNv&DqowKDDTwb;4{7-@ujn zHgI+C{KgmQCx3e&P_eTAs^19LDL&Eo!R_SO0H}lo&>D<`<{+f^0+L$-@q79iW*QX5 zPhU=&l@ouA?Mwxs)sF%7Q)fDVi+keq-Q)R<9=3$O1GRmjAI%vPrpyzgz1A%h=%M8G z>;0%*+tVAxcMb<`xY3|>nYg%#I9?QyP8xw+x$#3ncfJ;aWlc=YFgOgvx1~Xrv7&6w5azX`xroXoM$t^N*I1L zw|rVmYxucKb6D*MwpXJmv-LMB)9$W!d<1cAFUV0pEd$Y^?;BX&lF$`0lIDP!4h80MW2C?>A320r)QG^rdXes5UyxeVgEpf`>TRvLtW*Wk?}wcC zWhL*u;--EH9P`nj-}bl@S(v&MQJFK8r_SekV!==uoTfAL+UtI|XJ<-0e*HwIp>ja5 z@f%-~aIzHZ5bk@@v}gC;+7!OiL~MhO;He( zB-8JN*5K3-x$UWP%P(J-`0%>pcURUy*7npS*`W}`(8>!X0mj2g!Sc^~Mm}6Yhu2o+e4n{0hg2lt6>F z7}{H^yMJp?DF;2P*vyBXU^X5B1S7un~tlVAd#fN{kKKC0n{X3iF--UA*JO&2t{yvL* zjopUe81%Avel`bAdcRwfPT5m@e^1*tN{icbrzRTFRsN@7LcWUT`}1}_@eaUR_3!Lp zi!FfTn=t$KPi$o$;WJ`CA7~&_VO|v%9!1QAdD`v3jZr>5o*{4(DwKfGMF(IM%J^K1 z#OUG7sKYX!zQrv0frBS*$vEKt2dPR##h+~oQlOcq4mtT1YPhTb$Ln)e zUutP-QA^Suwa;UYS-`Z{Fz>v&=u*5yBqK>+`534r9b7GT(P}z52iE;)nzh*sv(?^e zmM%kER)*lmGkkUN=o<{n(zo1PPr&K9(qtSba#-F+I0yw4+zk$RK7(UYJ7rg}J9SrI z!u5>}*_;W6?-_HE=x%$=1-hFyx2(oP|8}=xRsLKG^Snu;@+s7!DztX9S(H%#AVo`) z72Hd}EG*pYv-QS%D+3vWAcQ$3@DAzeY8o{xV}JdKAM~fmy!RdcTrvHwMa;$bm*NM# z%UYRdrt6RDqGqxLa|gSh-4(r%PAFZWL<}PA%3vwVDSbTsMblwmo1-n=UQFg0+c(X_KO ziDoYnEKX6Warj>5GkTvo7Rje#T@*goavuDk=AOCDdf&D>K` zTS&WTf;b<^fpS%nokotQ>AF|f>mT0?4+X}w7a+|=IwlH(gIdo||$V^98P zso;DQ*64nDp>`jiZ0o>~IhG~(r2&h##{1FE@f8@_JynbDX)Cb59VpbDeuEjmAk?&| z=ux!v?wpg@Fb5Ev!k@6F1fWU=-1j^S zZdwJ}pYzPf?_Xxk51$VljW@LxJQgfxeN<4cxWg?_NT2dqm_aVbLSjsi6fbJnu7Sr; z{O2i0XP^gOfTc>5%?1DH%(+zhk&&w4KIRHIr<1Wy=6<3|$AnoG@4XV$I1zj*tyqC$ z1Qe&!;@gi6pYnfSyUQT9E#q-|_{CSz=L{3&kgt zNmxG15G%o>h0RJSD(a0?W0^H^DgTxdFP){N`Xz>loTA>ZvwM;@MkC{jV^hb}8o%lH z+jBZ;V1@7R@cDs`2^krgJWb;C5G>i@-?Z%JwCIS=V@#{O-Fp#}H>pZ+P3Po)C-m$q z74?hw6K0_Xva+=lh37XSo^Vv8d@KmRE9HJ=YvZFp&_1@#P`kBi2EHN~>i0G5jsBs6 zeKVC)+Mdn_Bg-!hd*IE6)@J;sAUS>?A5ZED6Ismo8^g-BFANWMDVr1T{MY99|F4!} zr0u7R8loc9_IjNsT>{2|QFt)=zlOI6mex1T* z>8n!}#D6Ci*lO0}Q@u!Q`k*aO9@@=(z&&uKmQQRzMer0i9m?Kd)Aa|&JyrJ0RgJ1e zM^t(HGCG<|j?iw0MPz8QvaS|*gEbEjK?|D}xK)#`gzWjKV+r0?XILY;TyU7VO)b>z zn(k4Y2u{V{U=a1D9e@3fZw*C(Tf+5;bo8f3Cq{v$%w4Q6)Q_!}VH|Du*TGcT1 z{eN3PiI|9g)#49KvE-30YGhqKepX(K=jag{OhHYjx>!q~KT^sp(fSMFcVqUW!;2Ye z6li-Rs61X^iA(Z}zX*g!{O-8gL)B04Z29Q-3Y=a_=_1xNzT8saE@c-CtO6YPo6DOS zV0+n9M7wD|`TiqArp(m`NA_Rf7T}ap0>EO)y{JQp1ql!423TEL@e&JmhHtL6;bvPF z%*OxtZq%`lSGJRIi{1fe9jF>`(a?Of+|a_W?L**-m0`{uA55YfZBhE@{GFaTs~pX? zL&66~v9w^f8p>+$?i~9#VR6GT6{Kg{_`wr!f-}=C3qSC7TBOq-r+ZJFQXof6eGV9! zt(bFhC&cmb6w0nv_wG&;>^+dxq;dN*T76!G92ER?L{@BAs@cR7A1C-=w=xQ3*}u*GC>S0`dW6O35zx2n%? zOc!hqw<}KR;!}l|9xCw&?6+dC9%O!U*z_~OQY2m>2e09aVJbVHnnKO5TTI+OKt^XzY7MMM%~TH2|H8&zd~YO$pDEy?qrUeV4zrpbZW1w6 zq$pX->$^1UyFka*>h=+@N@7eSqkDT#Rk@*B-x%h8^sDo`T7`e6>ROFw<@u4h^X9jA z&lT1;y_q7Yj!ji(VuZ?kBF2R$;zU!{R-(|ujU3!Z4jL@&8reWs>o8U+7s=94wLWEy zcyO0QBDgRocmBQ|-EoV5X*)mzLVo_w9Vfqjaa*d}x#G^Mu3FvhXd^E1u@K>yQ|-T6 z#9QnXveEfyEw@?rzB0#NcMjpCJEMd$7R3TRti|RV@8~9<1}?iEWw$x@@7#t`6bG?+ zPY|gIn`4+#`~+Dr*4$wybMS$w-mZGM%Y-2~0ZJaSt^f<-xVMO$T>3G=H=H-nRCN0* z(bWMva-tKRw7~aEC7k>_E=l0**Y?LNbMI#7Ab*WrqPAyL+zfD#MJ3rN{=UR6l@_as;OLx9sQM(hW0#FNlbnUW+hYaJXn?+jtJ=i(%*aczd8rE4N7Gti8ufFgoMzq)_DMW9!V{{)rGD+hoWoKpib@#+qY@%l4mE`J zjF-XiEvY|65u_9y^nD?nVe1Q4DqJP_}5D>vN#RN5nGq|W&+j{wrU6Uz40WO4m$5W#}8;M z30V$#_B(O>CfT(ojFzCL2js*^)Tn_sK*RjVwM(nW>waTM8@qh3lIL}4b*_HhYP+C$ z3!r9TMi^VR5X)ANZQPF0C^rpfJUzazy=WZ&_@RTvf4YvySCd-MI~P1n6d^%B%ZiiJ z9bj{&px#J-4o;h^8?y+O!gXv+Qwt?LBqJy>W18HXKTt7Ww}{x!+qE9-Rs0r06$qvz z2nYVoZKvT)!C0YpQ24TZjgz2j3N)4yMT_B2;ZK4M1&l$m0&1hyLx3*v1E_{>P(yf3 z!XUUnFuGsqJQ_oXfN#s}7gO3BK|QWWme$5*IibFSs3bmomDB7_{+n%+3U~TR%#WuH zT>6)H^r=7E(Qwdu^Tao2H;-H0ZeX^NDGa<7I9v!oquqF$7bZz-#n#e|6UvD?_Y&Dvmj3xYP8yIbqBS6Dlk~ zP;XoY1HB;r3}!)TFPwVjAamlxDJ=DZbLrcX@_WQXQ)Nc3Cw}S@-RtIBa*Jxr5|j!N zq;l(lC{f;#ctuL4R*R@hDg>7D`;12`O%!x$TJwqbl}~VZYIC^ zx-SJK;;6Lx&F!)DObx|nt7+Nc+v^*f+U*OS&&nf>-M>lzaW%&*OP{xYLQUD9eh<9| z6Gb^U{+MwMVH4a5y#=PFo^L-S&ikjYo&Wp8wSDGa57!(;L4W4iV)DQ!>Mm-O_(8?g zx9s6nc!vo;#$~=o9FR?3d?`(*L{ZQXqYCbb8&x_%QRvpl4*a@rv~OEI&V#!*zhJouh(Q*s9GmS|LtThpwGij4rSxg zz|JS<^${>yrkc9g4)6Ip9@S=b+p6E- zy|?~4D1C#p#<7=$5%Ka54dN?@G8mLa>+THz9$R`jbZ8J1h(ukzYsxQI{de`i#t}o zOvd0w6fOkzX^4B&1=9O!%#3!5T&WIuYogWXS}Hnkvf`gS_da4D9dRNu3ugV#eIoz! zP$akK=?B~2m3f^-^8M5mX{1&C@+1Vrn8dGvWzy#9t&71Q_yk!metE~TY(_1_6dN(CE+C^Nhk^y%EiwB zV`lu;ck{2fbIGl8S1OwIfNrnRnk6jmmyj*Vl`7-#gs~4Xo-(EZtK#Iy)44%nmhK%_ zzR@S+=EPRegPa;sHaA)`I`6`>2s9B%HyU^p+a4rSiQT%d(ecn1p|&eYc(&t7N|-{> zT6WjOP@Cf#2a(-l{5!;{)C6X_4pfIQ41%54F{2t3T8|-8fPMw;?;9&BGOEp@4z0HZ1v}CC>u+?#nbBlOAKMT(-c)lS0`k1^4tb&-S&h+}MoMehfW` zybl@;3TRcIR2lOw9cc$Y=|i${&kn3e;Z7L|T-5m2dZMj|we#w3W+#)eqq@*Myyo08 zeqy9H?rxBeMeVxj)|-XWWa^Li%|}XC*sRftn7bb_*OKzS!@?-t5!ZYZn$Q^nQ|NTG zxto@B;!#~JoiEf3y8O0u1|}Cnbg+VdP-NnK2>2OlJ)VATm~R)bVDug?mfcxp%F&7; z#WGI3f%@?x2N~W^2F$xx(n)Cdaje7(@Ae~6gJsa>K2@lUQF8YZ>Z@EGPh$K<$TVB( z0KLZm=!={d8gr}$HkP3gCYfBR9^$!yNm0JZD& zLFjSl(H44~ine&Rvd! zvd|o|WnzvQF$x_eW_~(!ie(wscFs5yUI?SJSB5OIO_*cZ|6CYvQC6EhNkSwc%@++O zCPVHihbPCJkKsd#$!?(_f#}l%P7-}@=Nzr^cvM6gi0VJq9=N*!qm*|KsKkmTR#i8N zQQ`4}!t$u;>15m^z3U8O!LrNN@izf3FVx*^UuvJxzUURFNOrp>6wnQXGGVKuXCLML zMnWq#NBOod=|!{H>x{7CsXAMF11`B z`?GywBMpWE8weejA+_Apyx{mW@XJF<)k@df8l6s7ONy)E&f{tzws~+If`a8RU|Rh(W)WJ?3{Qs{KocWF^}@|kOYR@ecvFx8nK2y-&nM`%YIM7w^N$-WWC zrlB0WE5-CjS^UM9j^P-(6s8dbYF$4+u8`iw$W zfaS7IbNOuJvA|P^4Vpec_S^vIyqv3Rc8~AS+CftwC&@XC=jeoZx38jx9d-FLRk)8G zj2r8>?tViaJj`sK6}7ahMk$G{Ju=c}Ysc%uT!wdYdaw`r_U!z3M}zov-`?W@MvW

P?zurk0O^T|zb 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 z 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 ~9nZaA?tF2rb3Ckd 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

CQq9*NVtqMiQr( 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�+n)sM24E0ceBrrvTX=4SC* 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ΠND?8 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 z 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 diff --git a/src/scala/com/twitter/simclusters_v2/images/topic_embeddings.png b/src/scala/com/twitter/simclusters_v2/images/topic_embeddings.png deleted file mode 100644 index 758ad1acfacc22f27f127bf4cc1d420662f42813..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71151 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 QrM8iyED=%^#wyupYkV45S6 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 I_1mw%0gzrOPXGV_ literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/BipartiteClusterEvaluation.docx b/src/scala/com/twitter/simclusters_v2/scalding/BipartiteClusterEvaluation.docx new file mode 100644 index 0000000000000000000000000000000000000000..fa635b76eb776e0364efa115b17eae38329da601 GIT binary patch literal 41995 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�A2u;#O*RiA5F?D*1Hdm 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 - clusterArray.map { - case (clusterId, score) => - Map(clusterId -> score * score) - } - } - .sum - .getExecution - .map(_.mapValues { x => math.sqrt(x).toFloat }) - } - - def l2NormalizeKnownFor( - knownFor: TypedPipe[(Long, Array[(Int, Float)])] - ): Execution[TypedPipe[(Long, Array[(Int, Float)])]] = { - getClusterL2Norms(knownFor).map { clusterToNorms => - knownFor.mapValues { clusterScoresArray => - clusterScoresArray.map { - case (clusterId, score) => - (clusterId, score / clusterToNorms(clusterId)) - } - } - } - } - - /** - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:bp_cluster_evaluation && \ - * oscar hdfs --user frigate --host hadoopnest2.atla.twitter.com --bundle bp_cluster_evaluation \ - * --tool com.twitter.simclusters_v2.scalding.BipartiteClusterEvaluation --screen --screen-detached \ - * --tee logs/newBpQuality_updateUnnormalizedScores_interestedInUsing20190329Graph_evaluatedOn20190329Graph_run2 \ - * -- --normsAndCountsDir /user/frigate/your_ldap/producerNormsAndCounts_20190330 \ - * --graphInputDir /user/frigate/your_ldap/user_user_normalized_graph_copiedFromAtlaProc_20190329 \ - * --knownForDir /user/frigate/your_ldap/dirFor_updatedKnownFor20M_145K_dec11_usingSims20190127_unnormalizedInputScores/knownFor \ - * --interestedInDir /user/frigate/your_ldap/dirFor_updatedKnownFor20M_145K_dec11_usingSims20190127_unnormalizedInputScores/interestedInUsing20190329Graph \ - * --outgoingVolumesResultsDir /user/frigate/your_ldap/dirFor_updatedKnownFor20M_145K_dec11_usingSims20190127_unnormalizedInputScores/bpQualityForInterestedInUsing20190329On20190329Graph_outgoingVolumes \ - * --incomingVolumesResultsDir /user/frigate/your_ldap/dirFor_updatedKnownFor20M_145K_dec11_usingSims20190127_unnormalizedInputScores/bpQualityForInterestedInUsing20190329On20190329Graph_incomingVolumes \ - * --outputDir /user/frigate/your_ldap/dirFor_updatedKnownFor20M_145K_dec11_usingSims20190127_unnormalizedInputScores/bpQualityForInterestedInUsing20190329On20190329Graph_perCluster \ - * --toEmailAddress your_ldap@twitter.com --modelVersion 20M_145K_updated - */ - override def job: Execution[Unit] = Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - - val interestedIn = args.optional("interestedInDir") match { - case Some(dir) => - TypedPipe - .from(AdhocKeyValSources.interestedInSource(args("interestedInDir"))) - case None => - DAL - .readMostRecentSnapshotNoOlderThan( - SimclustersV2InterestedInScalaDataset, - Days(20) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { - case KeyVal(key, value) => (key, value) - } - } - - val inputKnownFor = args - .optional("knownForDir") - .map { location => KnownForSources.readKnownFor(location) } - .getOrElse(KnownForSources.knownFor_20M_Dec11_145K) - - val modelVersion = - args.optional("modelVersion").getOrElse("20M_145K_dec11") - - val useLogFavWeights = args.boolean("useLogFavWeights") - - val shouldL2NormalizeKnownFor = args.boolean("l2NormalizeKnownFor") - - val toEmailAddressOpt = args.optional("toEmailAddress") - - val knownForExec = if (shouldL2NormalizeKnownFor) { - l2NormalizeKnownFor(inputKnownFor) - } else { - Execution.from(inputKnownFor) - } - - val finalExec = knownForExec.flatMap { knownFor => - val graph = args.optional("graphInputDir") match { - case Some(dir) => - TypedPipe.from(UserAndNeighborsFixedPathSource(dir)) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(20)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - - val producerNormsAndCounts = args.optional("normsAndCountsDir") match { - case Some(dir) => - TypedPipe.from(NormsAndCountsFixedPathSource(args(dir))) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(ProducerNormsAndCountsScalaDataset, Days(20)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - - val clusterIncomingVolumesExec = loadOrMake( - computeClusterIncomingVolumes(knownFor, producerNormsAndCounts, useLogFavWeights), - modelVersion, - args("incomingVolumesResultsDir") - ) - - val resultsWithOutgoingVolumesExec = loadOrMake( - getResultsWithOutgoingVolumes(graph, interestedIn, useLogFavWeights), - modelVersion, - args("outgoingVolumesResultsDir") - ) - - val finalPerClusterResultsExec = - finalPerClusterResults( - knownFor, - interestedIn, - resultsWithOutgoingVolumesExec, - clusterIncomingVolumesExec) - .flatMap { pipe => loadOrMake(pipe, modelVersion, args("outputDir")) } - - finalPerClusterResultsExec.flatMap { finalPerClusterResults => - val perClusterResults = finalPerClusterResults.values - val distributionResultsExec = getClusterResultsSummary(perClusterResults).map { - case Some(summary) => - "Summary of results across clusters: \n" + - Util.prettyJsonMapper.writeValueAsString(summary) - case _ => - "No summary of results! The cluster level results pipe must be empty!" - } - - val overallResultsExec = perClusterResults.sum.toOptionExecution.map { - case Some(overallQuality) => - "Overall Quality: \n" + - Util.prettyJsonMapper.writeValueAsString( - printableBipartiteQuality(overallQuality) - ) - case _ => - "No overall quality! The cluster level results pipe must be empty!" - } - - Execution.zip(distributionResultsExec, overallResultsExec).map { - case (distResults, overallResults) => - toEmailAddressOpt.foreach { address => - Util.sendEmail( - distResults + "\n" + overallResults, - "Bipartite cluster quality for " + modelVersion, - address - ) - } - println(distResults + "\n" + overallResults) - } - } - } - Util.printCounters(finalExec) - } - } - - def getResultsWithOutgoingVolumes( - graph: TypedPipe[UserAndNeighbors], - interestedIn: TypedPipe[(Long, ClustersUserIsInterestedIn)], - useLogFavWeights: Boolean - ): TypedPipe[(Int, BipartiteClusterQuality)] = { - graph - .map { un => (un.userId, un.neighbors) } - // should this be a leftJoin? For now, leaving it as an inner join. If in the future, - // we want to compare two approaches with very different coverages on interestedIn, this - // could become a problem. - .join(interestedIn) - .withReducers(4000) - .flatMap { - case (userId, (neighbors, clusters)) => - getBIResultsFromSingleUser(userId, neighbors, clusters, useLogFavWeights) - } - .sumByKey - .withReducers(600) - .map { - case (clusterId, bir) => - ( - clusterId, - BipartiteClusterQuality( - inClusterFollowEdges = Some(bir.inClusterWeights.isFollowEdge), - inClusterFavEdges = Some(bir.inClusterWeights.isFavEdge), - favWtSumOfInClusterFollowEdges = Some(bir.inClusterWeights.favWtIfFollowEdge), - favWtSumOfInClusterFavEdges = Some(bir.inClusterWeights.favWtIfFavEdge), - outgoingFollowEdges = Some(bir.totalOutgoingVolumes.isFollowEdge), - outgoingFavEdges = Some(bir.totalOutgoingVolumes.isFavEdge), - favWtSumOfOutgoingFollowEdges = Some(bir.totalOutgoingVolumes.favWtIfFollowEdge), - favWtSumOfOutgoingFavEdges = Some(bir.totalOutgoingVolumes.favWtIfFavEdge), - interestedInSize = Some(bir.interestedInSize), - sampledEdges = Some( - bir.edgeSample - .iterator() - .asScala - .toSeq - .map { - case (edge, data) => makeThriftSampledEdge(edge, data) - } - ) - ) - ) - } - } - - def getBIResultsFromSingleUser( - userId: Long, - neighbors: Seq[NeighborWithWeights], - clusters: ClustersUserIsInterestedIn, - useLogFavScores: Boolean - ): List[(Int, BipartiteIntermediateResults)] = { - val neighborsToWeights = neighbors.map { neighborAndWeights => - val isFollowEdge = neighborAndWeights.isFollowed match { - case Some(true) => 1.0 - case _ => 0.0 - } - val favScore = if (useLogFavScores) { - neighborAndWeights.logFavScore.getOrElse(0.0) - } else neighborAndWeights.favScoreHalfLife100Days.getOrElse(0.0) - val isFavEdge = math.min(1, math.ceil(favScore)) - neighborAndWeights.neighborId -> Weights( - isFollowEdge, - isFavEdge, - favScore * isFollowEdge, - favScore - ) - }.toMap - - val outgoingVolumes = Monoid.sum(neighborsToWeights.values)(WeightsMonoid) - - clusters.clusterIdToScores.toList.map { - case (clusterId, scoresStruct) => - val inClusterNeighbors = - (scoresStruct.usersBeingFollowed.getOrElse(Nil) ++ - scoresStruct.usersThatWereFaved.getOrElse(Nil)).toSet - val edgesForSampling = inClusterNeighbors.flatMap { neighborId => - if (neighborsToWeights.contains(neighborId)) { - Some( - (userId, neighborId), - SampledEdgeData( - neighborsToWeights(neighborId).favWtIfFollowEdge, - neighborsToWeights(neighborId).favWtIfFavEdge, - scoresStruct.followScore.getOrElse(0.0), - scoresStruct.favScore.getOrElse(0.0) - ) - ) - } else { - None - } - } - - val inClusterWeights = - Monoid.sum(neighborsToWeights.filterKeys(inClusterNeighbors).values)(WeightsMonoid) - - ( - clusterId, - BipartiteIntermediateResults( - inClusterWeights, - outgoingVolumes, - 1, - samplerMonoid.build(edgesForSampling) - )) - } - } - - def computeClusterIncomingVolumes( - knownFor: TypedPipe[(Long, Array[(Int, Float)])], - producerNormsAndCounts: TypedPipe[NormsAndCounts], - useLogFavWeights: Boolean - ): TypedPipe[(Int, BipartiteClusterQuality)] = { - producerNormsAndCounts - .map { x => (x.userId, x) } - .join(knownFor) - .withReducers(100) - .flatMap { - case (userId, (normsAndCounts, clusters)) => - clusters.map { - case (clusterId, _) => - val followerCount = - normsAndCounts.followerCount.getOrElse(0L).toDouble - val faverCount = normsAndCounts.faverCount.getOrElse(0L).toDouble - val favWtSumOfIncomingFollows = if (useLogFavWeights) { - normsAndCounts.logFavWeightsOnFollowEdgesSum.getOrElse(0.0) - } else { - normsAndCounts.favWeightsOnFollowEdgesSum.getOrElse(0.0) - } - val favWtSumOfIncomingFavs = if (useLogFavWeights) { - normsAndCounts.logFavWeightsOnFavEdgesSum.getOrElse(0.0) - } else { - normsAndCounts.favWeightsOnFavEdgesSum.getOrElse(0.0) - } - ( - clusterId, - BipartiteClusterQuality( - incomingFollowEdges = Some(followerCount), - incomingFavEdges = Some(faverCount), - favWtSumOfIncomingFollowEdges = Some(favWtSumOfIncomingFollows), - favWtSumOfIncomingFavEdges = Some(favWtSumOfIncomingFavs) - )) - } - } - .sumByKey - .toTypedPipe - } - - def loadOrMake( - pipe: TypedPipe[(Int, BipartiteClusterQuality)], - modelVersion: String, - path: String - ): Execution[TypedPipe[(Int, BipartiteClusterQuality)]] = { - val mapped = pipe.map { - case (clusterId, struct) => ((modelVersion, clusterId), struct) - } - makeForKeyValSource(mapped, AdhocKeyValSources.bipartiteQualitySource(path), path).map { pipe => - // discard model version - pipe.map { case ((_, clusterId), struct) => (clusterId, struct) } - } - } - - def makeForKeyValSource[K, V]( - pipe: TypedPipe[(K, V)], - dest: VersionedKeyValSource[K, V], - path: String - ): Execution[TypedPipe[(K, V)]] = - Execution.getMode.flatMap { mode => - if (dest.resourceExists(mode)) { - println(s"validated path $path") - Execution.from(TypedPipe.from(dest)) - } else { - println(s"Could not load from $path") - pipe.writeThrough(dest) - } - } - - def precisionOfWholeGraph( - knownFor: TypedPipe[(Long, Array[(Int, Float)])], - interestedIn: TypedPipe[(Long, ClustersUserIsInterestedIn)], - clusterIncomingVolumesExec: Execution[TypedPipe[(Int, BipartiteClusterQuality)]] - ): Execution[Option[Double]] = { - val knownForSizeExec = knownFor.aggregate(Aggregator.size).toOptionExecution - val interestedInSizeExec = - interestedIn.aggregate(Aggregator.size).toOptionExecution - val numExec = clusterIncomingVolumesExec.flatMap { volumes => - volumes.values.flatMap(_.favWtSumOfIncomingFavEdges).sum.toOptionExecution - } - Execution.zip(numExec, interestedInSizeExec, knownForSizeExec).map { - case (Some(num), Some(interestedInSize), Some(knownForSize)) => - Some(num / interestedInSize / knownForSize) - case x @ _ => - println("Precision of whole graph zip: " + x) - None - } - } - - def finalPerClusterResults( - knownFor: TypedPipe[(Long, Array[(Int, Float)])], - interestedIn: TypedPipe[(Long, ClustersUserIsInterestedIn)], - resultsWithOutgoingVolumesExec: Execution[TypedPipe[(Int, BipartiteClusterQuality)]], - incomingVolumesExec: Execution[TypedPipe[(Int, BipartiteClusterQuality)]] - ): Execution[TypedPipe[(Int, BipartiteClusterQuality)]] = { - val knownForTranspose = KnownForSources.transpose(knownFor) - - val precisionOfWholeGraphExec = - precisionOfWholeGraph(knownFor, interestedIn, incomingVolumesExec) - - Execution - .zip(resultsWithOutgoingVolumesExec, incomingVolumesExec, precisionOfWholeGraphExec) - .map { - case (resultsWithOutgoingVolumes, clusterIncomingVolumes, precisionOfWholeGraph) => - println("Precision of whole graph " + precisionOfWholeGraph) - resultsWithOutgoingVolumes - .join(knownForTranspose) - .leftJoin(clusterIncomingVolumes) - .withReducers(500) - .map { - case (clusterId, ((outgoingVolumeQuality, knownForList), incomingVolumesOpt)) => - val incomingVolumes = - incomingVolumesOpt.getOrElse(BipartiteClusterQuality()) - val knownForMap = knownForList.toMap - ( - clusterId, - getFullQuality( - outgoingVolumeQuality, - incomingVolumes, - knownForMap, - precisionOfWholeGraph)) - } - } - } - - def getFullQuality( - qualityWithOutgoingVolumes: BipartiteClusterQuality, - incomingVolumes: BipartiteClusterQuality, - knownFor: Map[Long, Float], - precisionOfWholeGraph: Option[Double] - ): BipartiteClusterQuality = { - val newSampledEdges = qualityWithOutgoingVolumes.sampledEdges.map { sampledEdges => - sampledEdges.map { sampledEdge => - val knownForScore = knownFor.getOrElse(sampledEdge.followeeId, 0.0f) - sampledEdge.copy( - predictedFollowScore = sampledEdge.followScoreToCluster.map { x => x * knownForScore }, - predictedFavScore = sampledEdge.favScoreToCluster.map { x => x * knownForScore } - ) - } - } - val correlationOfFavWtIfFollow = newSampledEdges.map { samples => - val pairs = samples.map { s => - (s.predictedFollowScore.getOrElse(0.0), s.favWtIfFollowEdge.getOrElse(0.0)) - } - Util.computeCorrelation(pairs.iterator) - } - val correlationOfFavWtIfFav = newSampledEdges.map { samples => - val pairs = samples.map { s => - (s.predictedFavScore.getOrElse(0.0), s.favWtIfFavEdge.getOrElse(0.0)) - } - Util.computeCorrelation(pairs.iterator) - } - val relativePrecisionNum = { - if (qualityWithOutgoingVolumes.interestedInSize.exists(_ > 0) && knownFor.nonEmpty) { - qualityWithOutgoingVolumes.favWtSumOfInClusterFavEdges - .getOrElse(0.0) / qualityWithOutgoingVolumes.interestedInSize.get / knownFor.size - } else 0.0 - } - val relativePrecision = if (precisionOfWholeGraph.exists(_ > 0.0)) { - Some(relativePrecisionNum / precisionOfWholeGraph.get) - } else None - qualityWithOutgoingVolumes.copy( - incomingFollowEdges = incomingVolumes.incomingFollowEdges, - incomingFavEdges = incomingVolumes.incomingFavEdges, - favWtSumOfIncomingFollowEdges = incomingVolumes.favWtSumOfIncomingFollowEdges, - favWtSumOfIncomingFavEdges = incomingVolumes.favWtSumOfIncomingFavEdges, - knownForSize = Some(knownFor.size), - correlationOfFavWtIfFollowWithPredictedFollow = correlationOfFavWtIfFollow, - correlationOfFavWtIfFavWithPredictedFav = correlationOfFavWtIfFav, - sampledEdges = newSampledEdges, - relativePrecisionUsingFavWtIfFav = relativePrecision, - averagePrecisionOfWholeGraphUsingFavWtIfFav = precisionOfWholeGraph - ) - } -} - -object DumpBpQuality extends TwitterExecutionApp { - def job: Execution[Unit] = Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val inputDir = args("inputDir") - - val clusters = args.list("clusters").map(_.toInt).toSet - val input = - TypedPipe - .from(AdhocKeyValSources.bipartiteQualitySource(inputDir)) - .map { - case ((modelVersion, clusterId), quality) => - ( - (modelVersion, clusterId), - BipartiteClusterEvaluationClasses - .printableBipartiteQuality(quality)) - } - - if (clusters.isEmpty) { - input.printSummary("Bipartite quality") - } else { - input - .collect { - case rec @ ((_, clusterId), quality) if clusters(clusterId) => - Util.prettyJsonMapper - .writeValueAsString(rec) - .replaceAll("\n", " ") - } - .toIterableExecution - .map { strings => println(strings.mkString("\n")) } - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/BipartiteClusterEvaluationClasses.docx b/src/scala/com/twitter/simclusters_v2/scalding/BipartiteClusterEvaluationClasses.docx new file mode 100644 index 0000000000000000000000000000000000000000..1f7438358d4eac52201171fb448c61bdbfd5ab8d GIT binary patch literal 39455 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 tSy&(c (sampledEdge.followerId, sampledEdge.followeeId) } - )(Util.edgeOrdering) - - case class BipartiteIntermediateResults( - inClusterWeights: Weights, - totalOutgoingVolumes: Weights, - interestedInSize: Int, - edgeSample: PriorityQueue[((Long, Long), SampledEdgeData)]) { - override def toString: String = { - "BCR(%s, %s, %d, %s)".format( - inClusterWeights, - totalOutgoingVolumes, - interestedInSize, - edgeSample.iterator().asScala.toSeq.toString() - ) - } - } - - object BIRMonoid extends Monoid[BipartiteIntermediateResults] { - override def zero = - BipartiteIntermediateResults(WeightsMonoid.zero, WeightsMonoid.zero, 0, samplerMonoid.zero) - - override def plus( - l: BipartiteIntermediateResults, - r: BipartiteIntermediateResults - ): BipartiteIntermediateResults = { - BipartiteIntermediateResults( - WeightsMonoid.plus(l.inClusterWeights, r.inClusterWeights), - WeightsMonoid.plus(l.totalOutgoingVolumes, r.totalOutgoingVolumes), - l.interestedInSize + r.interestedInSize, - samplerMonoid.plus(l.edgeSample, r.edgeSample) - ) - } - } - - implicit val bIRMonoid: Monoid[BipartiteIntermediateResults] = BIRMonoid - - def makeThriftSampledEdge(edge: (Long, Long), data: SampledEdgeData): SampledEdge = { - val (followerId, followeeId) = edge - SampledEdge( - followerId = followerId, - followeeId = followeeId, - favWtIfFollowEdge = Some(data.favWtIfFollowEdge), - favWtIfFavEdge = Some(data.favWtIfFavEdge), - followScoreToCluster = Some(data.followScoreToCluster), - favScoreToCluster = Some(data.favScoreToCluster) - ) - } - - object ClusterQualitySemigroup extends Semigroup[BipartiteClusterQuality] { - val doubleOM: Monoid[Option[Double]] = new OptionMonoid[Double] - val intOM: Monoid[Option[Int]] = new OptionMonoid[Int] - val longOM: Monoid[Option[Long]] = new OptionMonoid[Long] - - override def plus(l: BipartiteClusterQuality, r: BipartiteClusterQuality) = - BipartiteClusterQuality( - inClusterFollowEdges = doubleOM.plus(l.inClusterFollowEdges, r.inClusterFollowEdges), - inClusterFavEdges = doubleOM.plus(l.inClusterFavEdges, r.inClusterFavEdges), - favWtSumOfInClusterFollowEdges = doubleOM - .plus(l.favWtSumOfInClusterFollowEdges, r.favWtSumOfInClusterFollowEdges), - favWtSumOfInClusterFavEdges = doubleOM - .plus(l.favWtSumOfInClusterFavEdges, r.favWtSumOfInClusterFavEdges), - outgoingFollowEdges = doubleOM.plus(l.outgoingFollowEdges, r.outgoingFollowEdges), - outgoingFavEdges = doubleOM.plus(l.outgoingFavEdges, r.outgoingFavEdges), - favWtSumOfOutgoingFollowEdges = doubleOM - .plus(l.favWtSumOfOutgoingFollowEdges, r.favWtSumOfOutgoingFollowEdges), - favWtSumOfOutgoingFavEdges = doubleOM - .plus(l.favWtSumOfOutgoingFavEdges, r.favWtSumOfOutgoingFavEdges), - incomingFollowEdges = doubleOM.plus(l.incomingFollowEdges, r.incomingFollowEdges), - incomingFavEdges = doubleOM.plus(l.incomingFavEdges, r.incomingFavEdges), - favWtSumOfIncomingFollowEdges = doubleOM - .plus(l.favWtSumOfIncomingFollowEdges, r.favWtSumOfIncomingFollowEdges), - favWtSumOfIncomingFavEdges = doubleOM - .plus(l.favWtSumOfIncomingFavEdges, r.favWtSumOfIncomingFavEdges), - interestedInSize = None, - sampledEdges = Some( - sampledEdgesMonoid - .plus( - sampledEdgesMonoid.build(l.sampledEdges.getOrElse(Nil)), - sampledEdgesMonoid.build(r.sampledEdges.getOrElse(Nil)) - ) - .iterator() - .asScala - .toSeq), - knownForSize = intOM.plus(l.knownForSize, r.knownForSize), - correlationOfFavWtIfFollowWithPredictedFollow = None, - correlationOfFavWtIfFavWithPredictedFav = None, - relativePrecisionUsingFavWtIfFav = None, - averagePrecisionOfWholeGraphUsingFavWtIfFav = l.averagePrecisionOfWholeGraphUsingFavWtIfFav - ) - } - - implicit val bcqSemigroup: Semigroup[BipartiteClusterQuality] = - ClusterQualitySemigroup - - case class PrintableBipartiteQuality( - incomingFollowUnweightedRecall: String, - incomingFavUnweightedRecall: String, - incomingFollowWeightedRecall: String, - incomingFavWeightedRecall: String, - outgoingFollowUnweightedRecall: String, - outgoingFavUnweightedRecall: String, - outgoingFollowWeightedRecall: String, - outgoingFavWeightedRecall: String, - incomingFollowEdges: String, - incomingFavEdges: String, - favWtSumOfIncomingFollowEdges: String, - favWtSumOfIncomingFavEdges: String, - outgoingFollowEdges: String, - outgoingFavEdges: String, - favWtSumOfOutgoingFollowEdges: String, - favWtSumOfOutgoingFavEdges: String, - correlationOfFavWtIfFollow: String, - correlationOfFavWtIfFav: String, - relativePrecisionUsingFavWt: String, - averagePrecisionOfWholeGraphUsingFavWt: String, - interestedInSize: String, - knownForSize: String) - - def printableBipartiteQuality(in: BipartiteClusterQuality): PrintableBipartiteQuality = { - def getRatio(numOpt: Option[Double], denOpt: Option[Double]): String = { - val r = if (denOpt.exists(_ > 0)) { - numOpt.getOrElse(0.0) / denOpt.get - } else 0.0 - "%.3f".format(r) - } - - val formatter = new java.text.DecimalFormat("###,###.#") - - def denString(denOpt: Option[Double]): String = - formatter.format(denOpt.getOrElse(0.0)) - - val correlationOfFavWtIfFollow = - in.correlationOfFavWtIfFollowWithPredictedFollow match { - case None => - in.sampledEdges.map { samples => - val pairs = samples.map { s => - (s.predictedFollowScore.getOrElse(0.0), s.favWtIfFollowEdge.getOrElse(0.0)) - } - Util.computeCorrelation(pairs.iterator) - } - case x @ _ => x - } - - val correlationOfFavWtIfFav = - in.correlationOfFavWtIfFavWithPredictedFav match { - case None => - in.sampledEdges.map { samples => - val pairs = samples.map { s => - (s.predictedFavScore.getOrElse(0.0), s.favWtIfFavEdge.getOrElse(0.0)) - } - Util.computeCorrelation(pairs.iterator) - } - case x @ _ => x - } - - PrintableBipartiteQuality( - incomingFollowUnweightedRecall = getRatio(in.inClusterFollowEdges, in.incomingFollowEdges), - incomingFavUnweightedRecall = getRatio(in.inClusterFavEdges, in.incomingFavEdges), - incomingFollowWeightedRecall = - getRatio(in.favWtSumOfInClusterFollowEdges, in.favWtSumOfIncomingFollowEdges), - incomingFavWeightedRecall = - getRatio(in.favWtSumOfInClusterFavEdges, in.favWtSumOfIncomingFavEdges), - outgoingFollowUnweightedRecall = getRatio(in.inClusterFollowEdges, in.outgoingFollowEdges), - outgoingFavUnweightedRecall = getRatio(in.inClusterFavEdges, in.outgoingFavEdges), - outgoingFollowWeightedRecall = - getRatio(in.favWtSumOfInClusterFollowEdges, in.favWtSumOfOutgoingFollowEdges), - outgoingFavWeightedRecall = - getRatio(in.favWtSumOfInClusterFavEdges, in.favWtSumOfOutgoingFavEdges), - incomingFollowEdges = denString(in.incomingFollowEdges), - incomingFavEdges = denString(in.incomingFavEdges), - favWtSumOfIncomingFollowEdges = denString(in.favWtSumOfIncomingFollowEdges), - favWtSumOfIncomingFavEdges = denString(in.favWtSumOfIncomingFavEdges), - outgoingFollowEdges = denString(in.outgoingFollowEdges), - outgoingFavEdges = denString(in.outgoingFavEdges), - favWtSumOfOutgoingFollowEdges = denString(in.favWtSumOfOutgoingFollowEdges), - favWtSumOfOutgoingFavEdges = denString(in.favWtSumOfOutgoingFavEdges), - correlationOfFavWtIfFollow = "%.3f" - .format(correlationOfFavWtIfFollow.getOrElse(0.0)), - correlationOfFavWtIfFav = "%.3f" - .format(correlationOfFavWtIfFav.getOrElse(0.0)), - relativePrecisionUsingFavWt = - "%.2g".format(in.relativePrecisionUsingFavWtIfFav.getOrElse(0.0)), - averagePrecisionOfWholeGraphUsingFavWt = - "%.2g".format(in.averagePrecisionOfWholeGraphUsingFavWtIfFav.getOrElse(0.0)), - interestedInSize = in.interestedInSize.getOrElse(0).toString, - knownForSize = in.knownForSize.getOrElse(0).toString - ) - } - - case class ClusterResultsSummary( - numClustersWithZeroInterestedIn: Int, - numClustersWithZeroFollowWtRecall: Int, - numClustersWithZeroFavWtRecall: Int, - numClustersWithZeroFollowAndFavWtRecall: Int, - interestedInSizeDist: Distribution, - outgoingFollowWtRecallDist: Distribution, - outgoingFavWtRecallDist: Distribution, - incomingFollowWtRecallDist: Distribution, - incomingFavWtRecallDist: Distribution, - followCorrelationDist: Distribution, - favCorrelationDist: Distribution, - relativePrecisionDist: Distribution) - - def getClusterResultsSummary( - perClusterResults: TypedPipe[BipartiteClusterQuality] - ): Execution[Option[ClusterResultsSummary]] = { - perClusterResults - .map { clusterQuality => - val printableQuality = printableBipartiteQuality(clusterQuality) - val isFollowRecallZero = - if (!clusterQuality.favWtSumOfInClusterFollowEdges - .exists(_ > 0)) 1 - else 0 - val isFavRecallZero = - if (!clusterQuality.favWtSumOfInClusterFavEdges.exists(_ > 0)) 1 - else 0 - ( - if (!clusterQuality.interestedInSize.exists(_ > 0)) 1 else 0, - isFollowRecallZero, - isFavRecallZero, - isFavRecallZero * isFollowRecallZero, - clusterQuality.interestedInSize.toList.map(_.toDouble), - List(printableQuality.outgoingFollowWeightedRecall.toDouble), - List(printableQuality.outgoingFavWeightedRecall.toDouble), - List(printableQuality.incomingFollowWeightedRecall.toDouble), - List(printableQuality.incomingFavWeightedRecall.toDouble), - List(printableQuality.correlationOfFavWtIfFollow.toDouble), - List(printableQuality.correlationOfFavWtIfFav.toDouble), - List(printableQuality.relativePrecisionUsingFavWt.toDouble) - ) - } - .sum - .toOptionExecution - .map { opt => - opt.map { - case ( - zeroInterestedIn, - zeroFollowRecall, - zeroFavRecall, - zeroFollowAndFavRecall, - interestedInSizeList, - outgoingFollowWtRecallList, - outgoingFavWtRecallList, - incomingFollowWtRecallList, - incomingFavWtRecallList, - followCorrelationList, - favCorrelationList, - relativePrecisionList - ) => - ClusterResultsSummary( - numClustersWithZeroInterestedIn = zeroInterestedIn, - numClustersWithZeroFollowWtRecall = zeroFollowRecall, - numClustersWithZeroFavWtRecall = zeroFavRecall, - numClustersWithZeroFollowAndFavWtRecall = zeroFollowAndFavRecall, - interestedInSizeDist = Util.distributionFromArray(interestedInSizeList.toArray), - outgoingFollowWtRecallDist = Util - .distributionFromArray(outgoingFollowWtRecallList.toArray), - outgoingFavWtRecallDist = Util.distributionFromArray(outgoingFavWtRecallList.toArray), - incomingFollowWtRecallDist = Util - .distributionFromArray(incomingFollowWtRecallList.toArray), - incomingFavWtRecallDist = Util.distributionFromArray(incomingFavWtRecallList.toArray), - followCorrelationDist = Util.distributionFromArray(followCorrelationList.toArray), - favCorrelationDist = Util.distributionFromArray(favCorrelationList.toArray), - relativePrecisionDist = Util.distributionFromArray(relativePrecisionList.toArray) - ) - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/ClusterDetailsJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/ClusterDetailsJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..ffa9c3d9de69153e4ab4085b44993020d82c0d14 GIT binary patch literal 44768 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 z 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

NU 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 - val clusterScoresArray = clusterScoresStruct.clusterIdToScores.toArray - clusterScoresArray.map { - case (clusterId, scoresStruct) => - val followScore = scoresStruct.followScore.getOrElse(0.0) - val favScore = scoresStruct.favScore.getOrElse(0.0) - val logFavScore = scoresStruct.logFavScore.getOrElse(0.0) - ( - clusterId, - IntermediateDetails( - numUsersWithAnyNonZeroScore = 1, - numUsersWithNonZeroFollowScore = if (followScore > 0) 1 else 0, - numUsersWithNonZeroFavScore = if (favScore > 0) 1 else 0, - favQTree = if (favScore > 0) Some(QTree(favScore)) else None, - followQTree = if (followScore > 0) Some(QTree(followScore)) else None, - logFavQTree = if (logFavScore > 0) Some(QTree(logFavScore)) else None, - sumOfSquares = Scores( - followScore * followScore, - favScore * favScore, - logFavScore * logFavScore), - sum = Scores(followScore, favScore, logFavScore), - min = Scores(followScore, favScore, logFavScore), - max = Scores(followScore, favScore, logFavScore) - ) - ) - } - } - .sumByKey - // Uncomment for adhoc job - //.withReducers(100) - .toTypedPipe - } - - private def safeGetDoubleOpt(x: Option[Double]): Double = { - x.map { y => if (y.isNaN) 0 else y }.getOrElse(0) - } - - private def getSimilaritiesForAllPairs( - input: TypedPipe[(Long, ClustersUserIsInterestedIn)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[((Int, Int), Scores)] = { - val allClusterPairsBeforeSumByKey = Stat("all_cluster_pairs_before_sum_by_key") - val clusterPairsWithin10Ratio = Stat("cluster_pairs_within_10_ratio") - val clusterPairsBeforeTopK = Stat("cluster_pairs_before_thresholding") - - input - .flatMap { - case (userId, clusterScoresStruct) => - val clusterScoresArray = clusterScoresStruct.clusterIdToScores.toArray - (0 until clusterScoresArray.length).flatMap { i => - (0 until clusterScoresArray.length).map { j => - val (clusterI, scoresI) = clusterScoresArray(i) - val (clusterJ, scoresJ) = clusterScoresArray(j) - val ratioOfSizes = - scoresI.numUsersInterestedInThisClusterUpperBound.getOrElse(1).toDouble / - scoresJ.numUsersInterestedInThisClusterUpperBound.getOrElse(1).toDouble - allClusterPairsBeforeSumByKey.inc() - if (ratioOfSizes > 0.1 && ratioOfSizes < 10) { - clusterPairsWithin10Ratio.inc() - } - val followI = safeGetDoubleOpt(scoresI.followScoreClusterNormalizedOnly) - val followJ = safeGetDoubleOpt(scoresJ.followScoreClusterNormalizedOnly) - val follow = followI * followJ - val favI = safeGetDoubleOpt(scoresI.favScoreClusterNormalizedOnly) - val favJ = safeGetDoubleOpt(scoresJ.favScoreClusterNormalizedOnly) - val fav = favI * favJ - val logFavI = safeGetDoubleOpt(scoresI.logFavScoreClusterNormalizedOnly) - val logFavJ = safeGetDoubleOpt(scoresJ.logFavScoreClusterNormalizedOnly) - val logFav = logFavI * logFavJ - ((clusterI, clusterJ), (follow, fav, logFav)) - } - } - } - .sumByKey - // Uncomment for adhoc job - //.withReducers(600) - .map { - case (key, (follow, fav, logFav)) => - clusterPairsBeforeTopK.inc() - (key, Scores(follow, fav, logFav)) - } - } - - private def keepTopNeighbors( - allPairs: TypedPipe[((Int, Int), Scores)], - cosineThreshold: Double - )( - implicit uniqueID: UniqueID - ): TypedPipe[(Int, List[ClusterNeighbor])] = { - val clusterPairsMoreThanThreshold = Stat("cluster_pairs_cosine_gt_" + cosineThreshold) - val clusterPairsAfterTopK = Stat("cluster_pairs_after_topk") - val clustersWithFewNeighbors = Stat(s"clusters_with_fewer_than_100_neighbors") - val clustersWithManyNeighbors = Stat(s"clusters_with_more_than_100_neighbors") - - allPairs - .flatMap { - case ((cI, cJ), Scores(followScore, favScore, logFavScore)) => - if (followScore > cosineThreshold || logFavScore > cosineThreshold || favScore > cosineThreshold) { - clusterPairsMoreThanThreshold.inc() - Some((cI, ClusterNeighbor(cJ, Some(followScore), Some(favScore), Some(logFavScore)))) - } else None - } - .group - .toList - // Uncomment for adhoc job - //.withReducers(40) - .map { - case (key, seq) => - val finalSize = seq.size - clusterPairsAfterTopK.incBy(finalSize) - if (finalSize < 100) { - clustersWithFewNeighbors.inc() - } else { - clustersWithManyNeighbors.inc() - } - ( - key, - seq.sortBy { - case cn: ClusterNeighbor => - -(cn.followCosineSimilarity.getOrElse(0.0) + cn.logFavCosineSimilarity.getOrElse( - 0.0)) / 2 - }) - } - } - - def getTopSimilarClustersWithCosine( - input: TypedPipe[(Long, ClustersUserIsInterestedIn)], - cosineThreshold: Double - )( - implicit uniqueID: UniqueID - ): TypedPipe[(Int, List[ClusterNeighbor])] = { - keepTopNeighbors(getSimilaritiesForAllPairs(input), cosineThreshold) - } - - def getDistributionDetails( - qtree: QTree[Double], - sum: Double, - sumOfSquares: Double, - min: Double, - max: Double, - fullSize: Int - ): DistributionDetails = { - val mean = sum / fullSize - // note that the below is the naive calculation, and not the sample standard dev formula - // that divides by n-1. I don't think it makes a difference at our scale whether we use n or n-1 - // and I'd rather use the simpler one. - val stdDev = math.sqrt(sumOfSquares / fullSize - mean * mean) - - def getQB(percentile: Double): QuantileBounds = { - val (lb, ub) = qtree.quantileBounds(percentile) - QuantileBounds(lb, ub) - } - - DistributionDetails( - mean = mean, - standardDeviation = Some(stdDev), - min = Some(min), - p25 = Some(getQB(0.25)), - p50 = Some(getQB(0.5)), - p75 = Some(getQB(0.75)), - p95 = Some(getQB(0.95)), - max = Some(max) - ) - } - - def keepCorrectModel( - input: TypedPipe[(Long, ClustersUserIsInterestedIn)], - modelVersionToKeep: String - )( - implicit uniqId: UniqueID - ): TypedPipe[(Long, ClustersUserIsInterestedIn)] = { - val allRecords = Stat("all_input_records") - val withCorrectVersion = Stat("with_correct_version") - input.filter { - case (_, clusterScoresStruct) => - // allRecords.inc() - val result = clusterScoresStruct.knownForModelVersion == modelVersionToKeep - // if (result) withCorrectVersion.inc() - result - } - } - - def getInfoFromUserSource( - knownFor: TypedPipe[(Int, List[(Long, Float)])], - usersource: TypedPipe[FlatUser], - inferredLanguages: TypedPipe[(Long, Seq[(String, Double)])] - )( - implicit uniqId: UniqueID - ): TypedPipe[(Int, InfoFromUserSource)] = { - val knownForUsers = knownFor.flatMap { - case (clusterId, userScoreList) => - userScoreList.map { - case (userId, _) => - (userId, clusterId) - } - } - - usersource - .collect { - case fuser: FlatUser if fuser.id.isDefined => - ( - fuser.id.get, - ( - fuser.accountCountryCode.getOrElse(""), - fuser.language.getOrElse(""), - fuser.nsfwUser.getOrElse(false) - )) - } - .join(knownForUsers) - .leftJoin(inferredLanguages) - .map { - case (_, (((countryCode, language, nsfw), clusterId), inferredLangsOpt)) => - val nsfwInt = if (nsfw) 1 else 0 - ( - clusterId, - ( - 1, - nsfwInt, - Map(language -> 1), - Map(countryCode -> 1), - inferredLangsOpt.getOrElse(Seq(("", 1.0))).toMap - ) - ) - } - .sumByKey - .mapValues { - case ( - denominator, - nsfwNumerator, - languageNumeratorsMap, - countryNumeratorsMap, - inferredLangsNumeratorsMap) => - InfoFromUserSource( - nsfwNumerator * 1.0 / denominator, - languageNumeratorsMap.mapValues { x => x * 1.0 / denominator }, - countryNumeratorsMap.mapValues { x => x * 1.0 / denominator }, - inferredLangsNumeratorsMap.mapValues { x => x * 1.0 / denominator } - ) - } - } - - /** - * Run the cluster details job and return the details for each cluster - * @param input interestedIn data - * @param qtreeSemigroupKParameter parameter for calculating percentiles using qtree monoid (set to a small number, usually < 7) - * @param modelVersionToKeep which modelVersion to use from interestedIn dataset - * @param knownFor clusterId -> users known for this cluster and their scores - * @param knownForTranspose userId -> clusters this user is known for and their scores - * @param usersource -> user source - * @param simsGraph -> sims graph in the form of userId -> adjacency list - * @param cosineThreshold -> cosine threshold to include a cluster in the list of similar clusters for a given cluster - * @param uniqId - * @return pipe with (modelVersion, clusterId) as the key and ClusterDetails struct as the value. - */ - def run( - input: TypedPipe[(Long, ClustersUserIsInterestedIn)], - qtreeSemigroupKParameter: Int, - modelVersionToKeep: String, - knownFor: TypedPipe[(Int, List[(Long, Float)])], - knownForTranspose: TypedPipe[(Long, Array[(Int, Float)])], - usersource: Option[TypedPipe[FlatUser]], - inferredLanguageSource: Option[TypedPipe[(Long, Seq[(String, Double)])]], - simsGraph: Option[TypedPipe[(Long, Map[Long, Float])]], - cosineThreshold: Double - )( - implicit uniqId: UniqueID - ): Execution[TypedPipe[((String, Int), ClusterDetails)]] = { - val topSimilarClusters = getTopSimilarClustersWithCosine(input, cosineThreshold) - val infoFromUserSource: TypedPipe[(Int, InfoFromUserSource)] = (for { - us <- usersource - inferredLanguages <- inferredLanguageSource - } yield getInfoFromUserSource(knownFor, us, inferredLanguages)).getOrElse(TypedPipe.empty) - - val clusterEvaluationExec = simsGraph match { - case Some(sg) => - ClusterEvaluation.clusterLevelEvaluation(sg, knownForTranspose, "eval") - case None => - val dummyPipe: TypedPipe[(Int, (Int, ClusterQuality))] = TypedPipe.empty - Execution.from(dummyPipe) - } - - clusterEvaluationExec - .map { clusterIdToSizesAndQualities => - val clusterQualities: TypedPipe[(Int, ClusterQuality)] = - clusterIdToSizesAndQualities.mapValues(_._2) - intermediateDetailsPipe( - keepCorrectModel(input, modelVersionToKeep), - qtreeSemigroupKParameter) - .leftJoin(topSimilarClusters) - .leftJoin(infoFromUserSource) - .leftJoin(clusterQualities) - .join(knownFor) - .map { - case ( - clusterId, - ( - ( - ((intermediateDetails, topSimilarNeighborsOpt), userSourceInfoOpt), - qualityOpt), - knownForUsers) - ) => - val knownForSorted = knownForUsers.sortBy(-_._2).map { - case (userId, score) => - UserWithScore(userId, score) - } - (modelVersionToKeep, clusterId) -> - ClusterDetails( - numUsersWithAnyNonZeroScore = intermediateDetails.numUsersWithAnyNonZeroScore, - numUsersWithNonZeroFavScore = intermediateDetails.numUsersWithNonZeroFavScore, - numUsersWithNonZeroFollowScore = - intermediateDetails.numUsersWithNonZeroFollowScore, - favScoreDistributionDetails = intermediateDetails.favQTree.map { qt => - getDistributionDetails( - qtree = qt, - sum = intermediateDetails.sum.favScore, - sumOfSquares = intermediateDetails.sumOfSquares.favScore, - min = intermediateDetails.min.favScore, - max = intermediateDetails.max.favScore, - fullSize = intermediateDetails.numUsersWithNonZeroFavScore - ) - }, - followScoreDistributionDetails = intermediateDetails.followQTree.map { qt => - getDistributionDetails( - qtree = qt, - sum = intermediateDetails.sum.followScore, - sumOfSquares = intermediateDetails.sumOfSquares.followScore, - min = intermediateDetails.min.followScore, - max = intermediateDetails.max.followScore, - fullSize = intermediateDetails.numUsersWithNonZeroFollowScore - ) - }, - logFavScoreDistributionDetails = intermediateDetails.logFavQTree.map { qt => - getDistributionDetails( - qtree = qt, - sum = intermediateDetails.sum.logFavScore, - sumOfSquares = intermediateDetails.sumOfSquares.logFavScore, - min = intermediateDetails.min.logFavScore, - max = intermediateDetails.max.logFavScore, - // note: user has non-zero fav score iff a user has non-zero log-fav score - fullSize = intermediateDetails.numUsersWithNonZeroFavScore - ) - }, - knownForUsersAndScores = Some(knownForSorted), - neighborClusters = topSimilarNeighborsOpt, - fractionKnownForMarkedNSFWUser = userSourceInfoOpt.map(_.fractionMarkedNSFWUser), - languageToFractionDeviceLanguage = - userSourceInfoOpt.map(_.languageToFractionDeviceLanguage), - countryCodeToFractionKnownForWithCountryCode = - userSourceInfoOpt.map(_.countryCodeToFractionKnownForWithCountryCode), - qualityMeasuredOnSimsGraph = qualityOpt, - languageToFractionInferredLanguage = - userSourceInfoOpt.map(_.languageToFractionInferredLanguage), - ) - } - } - } - - def getTruncatedSims( - sims: TypedPipe[Candidates], - maxNeighbors: Int - ): TypedPipe[(Long, Map[Long, Float])] = { - sims.map { cands => - ( - cands.userId, - // These candidates are already sorted, but leaving it in just in case the behavior changes upstream - cands.candidates - .map { c => (c.userId, c.score.toFloat) }.sortBy(-_._2).take(maxNeighbors).toMap - ) - } - } -} - -/** - scalding remote run --main-class com.twitter.simclusters_v2.scalding.ClusterDetailsAdhoc \ - --target src/scala/com/twitter/simclusters_v2/scalding:cluster_details-adhoc \ - --hadoop-properties "scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=4000" \ - --user recos-platform -- \ - --date 2020-06-25 \ - --dateForUserSource 2020-06-25 \ - --includeUserSource \ - --outputDir /user/recos-platform/adhoc/your_ldap/cluster_details_inferred_lang - */ -object ClusterDetailsAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val date = DateRange.parse(args("dateForUserSource")) - val (knownFor, knownForTranspose) = - args - .optional("knownForDir").map { location => - ( - KnownForSources.transpose(KnownForSources.readKnownFor(location)), - KnownForSources.readKnownFor(location) - ) - }.getOrElse( - ( - KnownForSources.clusterToKnownFor_20M_145K_updated, - KnownForSources.knownFor_20M_145K_updated - ) - ) - - val interestedIn = args - .optional("inputDir").map { interestedInInputDir => - TypedPipe.from(AdhocKeyValSources.interestedInSource(interestedInInputDir)) - }.getOrElse( - DAL - .readMostRecentSnapshotNoOlderThan( - SimclustersV2InterestedIn20M145KUpdatedScalaDataset, - Days(14)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - ) - - val userSourceOpt = if (args.boolean("includeUserSource")) { - Some(DAL.readMostRecentSnapshot(UsersourceFlatScalaDataset, date).toTypedPipe) - } else None - - val inferredLanguagesOpt = if (args.boolean("includeUserSource")) { - Some(ExternalDataSources.inferredUserProducedLanguageSource) - } else None - - val simsGraphOpt = args.optional("simsForEvalInputDir").map { sgDir => - ClusterDetailsJob.getTruncatedSims( - TypedPipe.from(WTFCandidatesSource(sgDir)), - args.int("maxSimsNeighborsForEval", 20) - ) - } - - Util.printCounters( - ClusterDetailsJob - .run( - interestedIn, - args.int("qtreeSemigroupKParameter", 3), - args.getOrElse("modelVersion", "20M_145K_updated"), - knownFor, - knownForTranspose, - userSourceOpt, - inferredLanguagesOpt, - simsGraphOpt, - cosineThreshold = args.double("cosineThreshold", 0.01) - ).flatMap( - _.writeExecution(AdhocKeyValSources.clusterDetailsSource(args("outputDir")))) - ) - } - } -} - -trait ClusterDetailsBatchTrait extends TwitterScheduledExecutionApp { - implicit val tz = DateOps.UTC - implicit val parser = DateParser.default - - def firstTime: String - def batchIncrement: Duration - def manhattanOutputPath: String - def clusterDetailsLiteOutputPath: String - def modelVersion: String - def knownForDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] - def interestedInDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsInterestedIn]] - def outputDataset: KeyValDALDataset[KeyVal[(String, Int), ClusterDetails]] - def clusterDetailsLiteOutputDataset: SnapshotDALDataset[ClusterDetailsLite] - - private lazy val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(this.getClass.getName.replace("$", "")), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - override def scheduledJob: Execution[Unit] = AnalyticsBatchExecution(execArgs) { - implicit dateRange => - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val qtreeSemigroupKParameter = args.int("qtreeSemigroupKParameter", 5) - val maxSimsNeighborsForEval = args.int("maxSimsNeighborsForEval", 20) - val knownForTranspose = - KnownForSources.fromKeyVal( - DAL.readMostRecentSnapshot(knownForDataset, dateRange.extend(Days(7))).toTypedPipe, - modelVersion) - val knownFor = KnownForSources.transpose(knownForTranspose) - val cosineThreshold = args.double("cosineThreshold", 0.01) - val interestedIn = - DAL - .readMostRecentSnapshot(interestedInDataset, dateRange.extend(Days(7))) - .toTypedPipe - .map { - case KeyVal(userId, clustersUserIsInterestedIn) => - (userId, clustersUserIsInterestedIn) - } - val sims = if (modelVersion == ModelVersions.Model20M145K2020) { - // The model version 20m_145k_2020 uses approximate_cosine_follow as the input sims graph - // to cluster users. The same graph is used to evaluate the clusters - TypedPipe - .from(FollowingsCosineSimilaritiesManhattanSource()) - .map(_._2) - } else { - TypedPipe.from( - SimsCandidatesSource()( - dateRange = dateRange, - suffixPath = "/classified_candidates_rollup" - )) - } - val resultExec = ClusterDetailsJob - .run( - interestedIn, - qtreeSemigroupKParameter, - modelVersion, - knownFor, - knownForTranspose, - Some(DAL.readMostRecentSnapshot(UsersourceFlatScalaDataset, dateRange).toTypedPipe), - Some(ExternalDataSources.inferredUserProducedLanguageSource), - Some( - ClusterDetailsJob.getTruncatedSims(sims, maxNeighbors = maxSimsNeighborsForEval)), - cosineThreshold - ).flatMap { resultUnmapped => - val clusterDetailsExec = resultUnmapped - .map { - case (clusterKey, details) => - KeyVal(clusterKey, details) - }.writeDALVersionedKeyValExecution( - outputDataset, - D.Suffix(manhattanOutputPath) - ) - - val clusterDetailsLiteExec = - resultUnmapped - .map { - case ((_, clusterId), details) - if modelVersion == ModelVersions.Model20M145KDec11 => - ClusterDetailsLite( - FullClusterId(ModelVersion.Model20m145kDec11, clusterId), - details.numUsersWithAnyNonZeroScore, - details.numUsersWithNonZeroFollowScore, - details.numUsersWithNonZeroFavScore, - details.knownForUsersAndScores.getOrElse(Nil) - ) - case ((_, clusterId), details) - if modelVersion == ModelVersions.Model20M145KUpdated => - ClusterDetailsLite( - FullClusterId(ModelVersion.Model20m145kUpdated, clusterId), - details.numUsersWithAnyNonZeroScore, - details.numUsersWithNonZeroFollowScore, - details.numUsersWithNonZeroFavScore, - details.knownForUsersAndScores.getOrElse(Nil) - ) - case ((_, clusterId), details) - if modelVersion == ModelVersions.Model20M145K2020 => - ClusterDetailsLite( - FullClusterId(ModelVersion.Model20m145k2020, clusterId), - details.numUsersWithAnyNonZeroScore, - details.numUsersWithNonZeroFollowScore, - details.numUsersWithNonZeroFavScore, - details.knownForUsersAndScores.getOrElse(Nil) - ) - }.writeDALSnapshotExecution( - clusterDetailsLiteOutputDataset, - D.Daily, - D.Suffix(clusterDetailsLiteOutputPath), - D.EBLzo(), - dateRange.end) - - Execution.zip(clusterDetailsExec, clusterDetailsLiteExec) - } - - Util.printCounters(resultExec) - } - } - } - -} - -object ClusterDetailsBatch extends ClusterDetailsBatchTrait { - override val firstTime: String = "2018-07-28" - override val batchIncrement: Duration = Days(7) - - override val manhattanOutputPath: String = - "/user/cassowary/manhattan_sequence_files/simclusters_v2_cluster_details" - - override val clusterDetailsLiteOutputPath: String = - "/user/cassowary/processed/simclusters_v2_cluster_details_lite" - - override val modelVersion: String = ModelVersions.Model20M145KDec11 - override val knownForDataset = SimclustersV2KnownFor20M145KDec11ScalaDataset - override val interestedInDataset = SimclustersV2InterestedInScalaDataset - override val outputDataset = SimclustersV2ClusterDetailsScalaDataset - override val clusterDetailsLiteOutputDataset = - SimclustersV2ClusterDetailsLiteScalaDataset -} - -object ClusterDetails20M145KUpdated extends ClusterDetailsBatchTrait { - override val firstTime: String = "2019-06-16" - override val batchIncrement: Duration = Days(7) - - override val manhattanOutputPath: String = - "/user/cassowary/manhattan_sequence_files/simclusters_v2_cluster_details_20m_145k_updated" - - override val clusterDetailsLiteOutputPath: String = - "/user/cassowary/processed/simclusters_v2_cluster_details_lite_20m_145k_updated" - - override val modelVersion: String = ModelVersions.Model20M145KUpdated - override val knownForDataset = SimclustersV2KnownFor20M145KUpdatedScalaDataset - override val interestedInDataset = SimclustersV2InterestedIn20M145KUpdatedScalaDataset - override val outputDataset = SimclustersV2ClusterDetails20M145KUpdatedScalaDataset - override val clusterDetailsLiteOutputDataset = - SimclustersV2ClusterDetailsLite20M145KUpdatedScalaDataset -} - -/** - * capesospy-v2 update --build_locally --start_cron cluster_details_20m_145k_2020 \ - * src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object ClusterDetails20M145K2020 extends ClusterDetailsBatchTrait { - override val firstTime: String = "2020-10-15" - override val batchIncrement: Duration = Days(7) - - override val manhattanOutputPath: String = - "/user/cassowary/manhattan_sequence_files/simclusters_v2_cluster_details_20m_145k_2020" - - override val clusterDetailsLiteOutputPath: String = - "/user/cassowary/processed/simclusters_v2_cluster_details_lite_20m_145k_2020" - - override val modelVersion: String = ModelVersions.Model20M145K2020 - override val knownForDataset = SimclustersV2KnownFor20M145K2020ScalaDataset - override val interestedInDataset = SimclustersV2InterestedIn20M145K2020ScalaDataset - override val outputDataset = SimclustersV2ClusterDetails20M145K2020ScalaDataset - override val clusterDetailsLiteOutputDataset = - SimclustersV2ClusterDetailsLite20M145K2020ScalaDataset -} - -/** -scalding remote run --main-class com.twitter.simclusters_v2.scalding.DumpClusterDetailsAdhoc \ - --target src/scala/com/twitter/simclusters_v2/scalding:cluster_details-dump \ - --user recos-platform -- \ - --date 2020-06-25 \ - --clusterIds 5542 129677 48645 \ - --inputDir /user/recos-platform/adhoc/your_ldap/cluster_details_inferred_lang - */ -object DumpClusterDetailsAdhoc extends TwitterExecutionApp { - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val clusters = args.list("clusterIds").map(_.toInt).toSet //(1 to 2500).toSet // - TypedPipe - .from(AdhocKeyValSources.clusterDetailsSource(args("inputDir"))) - .filter { case ((modelVersion, clusterId), details) => clusters.contains(clusterId) } - .toIterableExecution - .map { iter => - iter.foreach { x => println(Util.prettyJsonMapper.writeValueAsString(x)) } - } - } - } -} - -/** - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:cluster_details && \ - * oscar hdfs --user cassowary --host hadoopnest2.atla.twitter.com --bundle cluster_details \ - * --tool com.twitter.simclusters_v2.scalding.DumpClusterSimilaritiesAdhoc --screen --screen-detached \ - * --tee your_ldap/dumpClusterSimilarities_20200103 -- \ - * --inputDir /user/cassowary/manhattan_sequence_files/simclusters_v2_cluster_details_20m_145k_updated/ \ - * --outputDir adhoc/your_ldap - */ -object DumpClusterSimilaritiesAdhoc extends TwitterExecutionApp { - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - TypedPipe - .from(AdhocKeyValSources.clusterDetailsSource(args("inputDir"))) - .flatMap { - case ((_, clusterId), details) => - details.neighborClusters.getOrElse(Nil).map { neighbor => - val compositeScore = (neighbor.followCosineSimilarity - .getOrElse(0.0) + neighbor.favCosineSimilarity.getOrElse(0.0)) / 2 - ( - clusterId, - neighbor.clusterId, - "%.4f".format(compositeScore) - ) - } - }.writeExecution(TypedTsv(args("outputDir"))) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/ClusterEvaluation.docx b/src/scala/com/twitter/simclusters_v2/scalding/ClusterEvaluation.docx new file mode 100644 index 0000000000000000000000000000000000000000..f4c3d7739ad8caddb6370cf379fe6aafcb1b3eab GIT binary patch literal 43023 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/ClusterEvaluation.scala b/src/scala/com/twitter/simclusters_v2/scalding/ClusterEvaluation.scala deleted file mode 100644 index 7133382eb..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/ClusterEvaluation.scala +++ /dev/null @@ -1,607 +0,0 @@ -package com.twitter.simclusters_v2.scalding - -import com.twitter.algebird.Monoid -import com.twitter.algebird.mutable.PriorityQueueMonoid -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.pluck.source.cassowary.FollowingsCosineSimilaritiesManhattanSource -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.scalding_internal.job.analytics_batch._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.hdfs_sources._ -import com.twitter.simclusters_v2.scalding.common.TypedRichPipe._ -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.scalding.common.Util.Distribution -import com.twitter.simclusters_v2.thriftscala.ClusterQuality -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsKnownFor -import com.twitter.usersource.snapshot.flat.UsersourceFlatScalaDataset -import java.util.PriorityQueue -import scala.collection.JavaConverters._ - -object ClusterEvaluation { - - val samplerMonoid: PriorityQueueMonoid[((Long, Long), (Double, Double))] = - Util.reservoirSamplerMonoidForPairs[(Long, Long), (Double, Double)](5000)(Util.edgeOrdering) - - case class ClusterResults( - numEdgesInsideCluster: Int, - wtOfEdgesInsideCluster: Double, - numEdgesOutsideCluster: Int, - wtOfEdgesOutsideCluster: Double, - originalWtAndProductOfNodeScoresSample: PriorityQueue[((Long, Long), (Double, Double))]) { - def clusterQuality(clusterSize: Int, averagePrecisionWholeGraph: Double): ClusterQuality = { - val unweightedRecallDenominator = numEdgesInsideCluster + numEdgesOutsideCluster - val unweightedRecall = if (unweightedRecallDenominator > 0) { - numEdgesInsideCluster.toDouble / unweightedRecallDenominator.toDouble - } else 0.0 - - val weightedRecallDenominator = wtOfEdgesInsideCluster + wtOfEdgesOutsideCluster - val weightedRecall = if (weightedRecallDenominator > 0) { - wtOfEdgesInsideCluster / weightedRecallDenominator - } else 0.0 - - val precision = if (clusterSize > 1) { - Some(wtOfEdgesInsideCluster / (clusterSize * (clusterSize - 1))) - } else Some(0.0) - - val relativePrecision = if (averagePrecisionWholeGraph > 0) { - precision.flatMap { p => Some(p / averagePrecisionWholeGraph) } - } else Some(0.0) - - ClusterQuality( - unweightedRecall = Some(unweightedRecall), - weightedRecall = Some(weightedRecall), - unweightedRecallDenominator = Some(unweightedRecallDenominator), - weightedRecallDenominator = Some(weightedRecallDenominator), - relativePrecisionNumerator = precision, - relativePrecision = relativePrecision, - weightAndProductOfNodeScoresCorrelation = Some( - Util.computeCorrelation( - originalWtAndProductOfNodeScoresSample.iterator.asScala.map(_._2))) - ) - } - } - - object ClusterResultsMonoid extends Monoid[ClusterResults] { - override def zero = ClusterResults(0, 0, 0, 0, samplerMonoid.zero) - override def plus(l: ClusterResults, r: ClusterResults) = ClusterResults( - l.numEdgesInsideCluster + r.numEdgesInsideCluster, - l.wtOfEdgesInsideCluster + r.wtOfEdgesInsideCluster, - l.numEdgesOutsideCluster + r.numEdgesOutsideCluster, - l.wtOfEdgesOutsideCluster + r.wtOfEdgesOutsideCluster, - samplerMonoid - .plus(l.originalWtAndProductOfNodeScoresSample, r.originalWtAndProductOfNodeScoresSample) - ) - } - - /** - * Evaluate the quality of a cluster. - * @param memberScores A map with the members of the cluster as the keys and their scores - * inside the cluster as values. The more central a member is inside the score, - * the higher it's score is. - * @param membersAdjLists A map that gives the weighted neighbors of each member in the cluster. - */ - def evaluateCluster( - memberScores: Map[Long, Double], - membersAdjLists: Map[Long, Map[Long, Float]] - ): ClusterResults = { - val resultsIter = membersAdjLists.flatMap { - case (fromNodeId, adjList) => - val fromNodeWt = memberScores.getOrElse(fromNodeId, 0.0) - adjList.map { - case (toNodeId, edgeWt) => - if (memberScores.contains(toNodeId)) { - val productOfMembershipScores = fromNodeWt * memberScores(toNodeId) - ClusterResults( - 1, - edgeWt, - 0, - 0, - samplerMonoid.build( - ((fromNodeId, toNodeId), (edgeWt.toDouble, productOfMembershipScores)))) - } else { - ClusterResults(0, 0, 1, edgeWt, samplerMonoid.zero) - } - } - } - Monoid.sum(resultsIter)(ClusterResultsMonoid) - } - - /** - * Evaluate each cluster with respect to the provided graph. - * @param graph graph represented via the adjacency lists of each node, needs to be symmetrized i.e. if u is in v's adjlist, then v needs to be in u's adjlist as well - * @param clusters cluster memberships of each node. - * @param statsPrefix convenience argument to act as prefix for stats counters - * @return key-value pipe with clusterId as key and (size of the cluster, quality struct) as value - */ - def clusterLevelEvaluation( - graph: TypedPipe[(Long, Map[Long, Float])], - clusters: TypedPipe[(Long, Array[(Int, Float)])], - statsPrefix: String = "" - )( - implicit uniqueId: UniqueID - ): Execution[TypedPipe[(Int, (Int, ClusterQuality))]] = { - val numRealClusters = Stat(s"${statsPrefix}/numRealClusters") - val numFakeClusters = Stat(s"${statsPrefix}/numFakeClusters") - - val numNodesAndEdgesExec = graph - .map { - case (nId, nbrMap) => - (1L, nbrMap.size.toLong, nbrMap.values.sum.toDouble) - }.sum.getExecution - - numNodesAndEdgesExec.map { - case (numNodes, numEdges, sumOfAllEdgeWts) => - println("numNodes " + numNodes) - println("numEdges " + numEdges) - println("sumOfAllEdgeWts " + sumOfAllEdgeWts) - - val numFakeClustersForUnassignedNodes = numNodes / 1e4 - - val averagePrecisionWholeGraph = sumOfAllEdgeWts / (numNodes * (numNodes - 1)) - graph - .leftJoin(clusters) - // uncomment for adhoc job - .withReducers(200) - .flatMap { - case (nodeId, (adjList, assignedClustersOpt)) => - val nodeDegree = adjList.size.toLong - val nodeWeightedDegree = adjList.values.sum - assignedClustersOpt match { - case Some(assignedClusters) if assignedClusters.nonEmpty => - assignedClusters.toList.map { - case (clusterId, scoreOfNodeInCluster) => - ( - clusterId, - ( - Map(nodeId -> (scoreOfNodeInCluster.toDouble, adjList)), - 1, - nodeDegree, - nodeWeightedDegree)) - } - case _ => - // For nodes that don't belong to any cluster, create a fake clusterId (0 or lesser) - // and add the node's statistics to that clusterId. We don't need the adjacency lists for - // unassigned nodes, we'll simply track how many edges are incident on those nodes and their weighted sum etc - val fakeClusterId = - (-1 * (math.abs( - Util.hashToLong(nodeId)) % numFakeClustersForUnassignedNodes)).toInt - List( - ( - fakeClusterId, - ( - Map.empty[Long, (Double, Map[Long, Float])], - 1, - nodeDegree, - nodeWeightedDegree))) - } - } - .sumByKey - // uncomment for adhoc job - .withReducers(60) - .map { - case (clusterId, (membersMap, clusterSize, volumeOfCluster, weightedVolumeOfCluster)) => - if (clusterId > 0) { - numRealClusters.inc() - - val scoresMap = - if (clusterId > 0) membersMap.mapValues(_._1) else Map.empty[Long, Double] - val adjListsMap = membersMap.mapValues(_._2) - - val quality = evaluateCluster(scoresMap, adjListsMap) - .clusterQuality(clusterSize, averagePrecisionWholeGraph) - - (clusterId, (clusterSize, quality)) - } else { - // clusterId <= 0 means that this is a fake cluster. - numFakeClusters.inc() - ( - clusterId, - ( - clusterSize, - ClusterQuality( - unweightedRecallDenominator = Some(volumeOfCluster), - weightedRecallDenominator = Some(weightedVolumeOfCluster) - ) - ) - ) - } - } - } - } - - case class OverallResults( - unweightedRecall: Double, - edgesInsideClusters: Long, - allEdges: Long, - allNodes: Int, - weightedRecall: Double, - wtOnEdgesInsideClusters: Double, - wtOnAllEdges: Double, - weightCorrelation: Double, - relativePrecision: Double, - numUnassignedNodes: Int, - numAssignedNodes: Int, - sizeDist: Distribution, - recallDist: Distribution, - weightedRecallDist: Distribution, - relativePrecisionDist: Distribution, - weightCorrelationDist: Distribution, - numClustersWithNegativeCorrelation: Double, - numClustersWithZeroRecall: Double, - numClustersWithLessThanOneRelativePrecision: Double, - numSingletonClusters: Int) - - def summarizePerClusterResults( - perClusterResults: TypedPipe[(Int, (Int, ClusterQuality))] - ): Execution[Option[OverallResults]] = { - perClusterResults - .map { - case (clusterId, (size, quality)) => - val unweightedRecallDen = quality.unweightedRecallDenominator.getOrElse(0.0) - val unweightedRecallNum = quality.unweightedRecall.getOrElse(0.0) * unweightedRecallDen - val weightedRecallDen = quality.weightedRecallDenominator.getOrElse(0.0) - val weightedRecallNum = quality.weightedRecall.getOrElse(0.0) * weightedRecallDen - - val weightCorrelationDen = size - val weightCorrelationNum = - weightCorrelationDen * quality.weightAndProductOfNodeScoresCorrelation - .getOrElse(0.0) - - val relativePrecisionDen = size - val relativePrecisionNum = relativePrecisionDen * quality.relativePrecision.getOrElse(0.0) - - val numClustersWithNegativeCorrelation = - if (weightCorrelationNum < 0 && clusterId > 0) 1 else 0 - val numClustersWithLessThanOneRelativePrecision = - if (quality.relativePrecision.getOrElse(0.0) < 1 && clusterId > 0) 1 else 0 - val numClustersWithZeroRecall = if (weightedRecallNum < 1e-5 && clusterId > 0) 1 else 0 - val numUnassignedNodes = if (clusterId < 1) size else 0 - val numAssignedNodes = if (clusterId > 0) size else 0 - val numSingletonClusters = if (clusterId > 0 && size == 1) 1 else 0 - - ( - unweightedRecallDen, - unweightedRecallNum, - weightedRecallDen, - weightedRecallNum, - weightCorrelationDen, - weightCorrelationNum, - relativePrecisionDen, - relativePrecisionNum, - numClustersWithNegativeCorrelation, - numClustersWithLessThanOneRelativePrecision, - numClustersWithZeroRecall, - List(size.toDouble), - List(quality.unweightedRecall.getOrElse(0.0)), - List(quality.weightedRecall.getOrElse(0.0)), - List(quality.relativePrecision.getOrElse(0.0)), - List(quality.weightAndProductOfNodeScoresCorrelation.getOrElse(0.0)), - numUnassignedNodes, - numAssignedNodes, - numSingletonClusters - ) - } - .sum - .toOptionExecution - .map { opt => - opt.map { - case ( - unweightedRecallDen, - unweightedRecallNum, - weightedRecallDen, - weightedRecallNum, - weightCorrelationDen, - weightCorrelationNum, - relativePrecisionDen, - relativePrecisionNum, - numClustersWithNegativeCorrelation, - numClustersWithLessThanOneRelativePrecision, - numClustersWithZeroRecall, - sizeList, - unweightedRecallList, - weightedRecallList, - relativePrecisionList, - weightCorrelationList, - numUnassignedNodes, - numAssignedNodes, - numSingletonClusters) => - OverallResults( - unweightedRecall = unweightedRecallNum / unweightedRecallDen, - edgesInsideClusters = unweightedRecallNum.toLong, - allEdges = unweightedRecallDen.toLong, - allNodes = numAssignedNodes + numUnassignedNodes, - weightedRecall = weightedRecallNum / weightedRecallDen, - wtOnEdgesInsideClusters = weightedRecallNum, - wtOnAllEdges = weightedRecallDen, - weightCorrelation = weightCorrelationNum / weightCorrelationDen, - relativePrecision = relativePrecisionNum / relativePrecisionDen, - numAssignedNodes = numAssignedNodes, - numUnassignedNodes = numUnassignedNodes, - sizeDist = Util.distributionFromArray(sizeList.toArray), - recallDist = Util.distributionFromArray(unweightedRecallList.toArray), - weightedRecallDist = Util.distributionFromArray(weightedRecallList.toArray), - weightCorrelationDist = Util.distributionFromArray(weightCorrelationList.toArray), - relativePrecisionDist = Util.distributionFromArray(relativePrecisionList.toArray), - numClustersWithNegativeCorrelation = numClustersWithNegativeCorrelation, - numClustersWithLessThanOneRelativePrecision = - numClustersWithLessThanOneRelativePrecision, - numClustersWithZeroRecall = numClustersWithZeroRecall, - numSingletonClusters = numSingletonClusters - ) - } - } - } - - /** - * @param graph Input similarity graph, needs to be symmetrized i.e. if u is in v's adjlist, then v needs to be in u's adjlist as well - * @param clusters cluster assignments to be evaluated - * @return summary of results - */ - def overallEvaluation( - graph: TypedPipe[(Long, Map[Long, Float])], - clusters: TypedPipe[(Long, Array[(Int, Float)])], - statsPrefix: String - )( - implicit uniqueId: UniqueID - ): Execution[Option[OverallResults]] = { - clusterLevelEvaluation(graph, clusters, statsPrefix).flatMap(summarizePerClusterResults) - } -} - -/** - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:cluster_evaluation && \ - * oscar hdfs --user frigate --host hadoopnest1.atla.twitter.com --bundle cluster_evaluation \ - * --tool com.twitter.simclusters_v2.scalding.ClusterEvaluationAdhoc --screen --screen-detached \ - * --tee logs/clusterQualityFor_updatedUnnormalizedInputScores_usingSims20190318 -- \ - * --simsInputDir /user/frigate/your_ldap/commonDirForClusterEvaluation/classifiedSims_20190314_copiedFromAtlaProc \ - * --topK 20000000 --date 2019-03-18 --minActiveFollowers 400 \ - * --topUsersDir /user/frigate/your_ldap/commonDirForClusterEvaluation/top20MUsers_minActiveFollowers400_20190215 \ - * --maxSimsNeighborsForEval 40 \ - * --preparedSimsGraph /user/frigate/your_ldap/commonDirForClusterEvaluation/symmetrized_classifiedSims20190318_top20MUsers \ - * --outputDir /user/frigate/your_ldap/dirFor_updatedKnownFor20M_145K_dec11_usingSims20190127_unnormalizedInputScores/knownForClusterEvaluation \ - * --knownForDir /user/frigate/your_ldap/dirFor_updatedKnownFor20M_145K_dec11_usingSims20190127_unnormalizedInputScores/knownFor - */ -object ClusterEvaluationAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val knownFor = args - .optional("knownForDir").map { location => - KnownForSources.readKnownFor(location) - }.getOrElse(KnownForSources.knownFor_20M_Dec11_145K) - - val minActiveFollowers = args.int("minActiveFollowers", 400) - val topK = args.int("topK") - val date = DateRange.parse(args("date")) - - val topUsersExec = - TopUsersSimilarityGraph - .topUsers( - DAL.readMostRecentSnapshot(UsersourceFlatScalaDataset, date).toTypedPipe, - minActiveFollowers, - topK - ) - .map(_.id) - .count("num_top_users") - .make(TypedTsv(args("topUsersDir"))) - - val simsGraphExec = topUsersExec.flatMap { topUsers => - TopUsersSimilarityGraph.makeGraph( - TopUsersSimilarityGraph.getSubgraphFromUserGroupedInput( - TypedPipe.from(WTFCandidatesSource(args("simsInputDir"))), - topUsers, - args.int("maxSimsNeighborsForEval", 40), - degreeThresholdForStat = 5 - ), - args("preparedSimsGraph") - ) - } - - val fullExec = simsGraphExec.flatMap { sims => - ClusterEvaluation - .clusterLevelEvaluation(sims, knownFor, "eval") - .flatMap { clusterResultsPipe => - val clusterResults = clusterResultsPipe.forceToDiskExecution - val outputExec = clusterResults.flatMap { pipe => - pipe - .map { - case (clusterId, (clusterSize, quality)) => - "%d\t%d\t%.2g\t%.2g\t%.1f\t%.2g\t%.2f\t%.2g\t%.2g" - .format( - clusterId, - clusterSize, - quality.unweightedRecall.getOrElse(0.0), - quality.weightedRecall.getOrElse(0.0), - quality.unweightedRecallDenominator.getOrElse(0.0), - quality.weightedRecallDenominator.getOrElse(0.0), - quality.relativePrecision.getOrElse(0.0), - quality.relativePrecisionNumerator.getOrElse(0.0), - quality.weightAndProductOfNodeScoresCorrelation.getOrElse(0.0) - ) - }.writeExecution(TypedTsv(args("outputDir"))) - } - - val printExec = clusterResults.flatMap { pipe => - ClusterEvaluation.summarizePerClusterResults(pipe).map { - case Some(res) => - println("Overall results: " + Util.prettyJsonMapper.writeValueAsString(res)) - case None => - println("No overall results!!! Probably cluster results pipe is empty.") - } - } - - Execution.zip(outputExec, printExec) - } - } - - Util.printCounters(fullExec) - } - } -} - -trait ClusterEvaluationBatch extends TwitterScheduledExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - - def firstTime: String - - def batchDescription: String - - def batchIncrement: Duration - - private lazy val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(batchDescription), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - val emailAddress: String = "no-reply@twitter.com" - - def knownForDALDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] - - def knownForModelVersion: String - - def baselineKnownForDALDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] - - def baselineKnownForModelVersion: String - - override def scheduledJob: Execution[Unit] = - AnalyticsBatchExecution(execArgs) { implicit dateRange => - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val baselineKnownFor = - KnownForSources.fromKeyVal( - DAL - .readMostRecentSnapshot(baselineKnownForDALDataset, dateRange.prepend(Days(7))) - .toTypedPipe, - baselineKnownForModelVersion - ) - - val knownFor = - KnownForSources.fromKeyVal( - DAL - .readMostRecentSnapshot(knownForDALDataset, dateRange.prepend(Days(7))) - .toTypedPipe, - knownForModelVersion - ) - - val inputSimsGraph = TypedPipe - .from(FollowingsCosineSimilaritiesManhattanSource()) - .map(_._2) - - val minActiveFollowers = args.int("minActiveFollowers") - val topK = args.int("topK") - val maxSimsNeighborsForEval = - args.int("maxSimsNeighborsForEval", 40) - - val topUsers = TopUsersSimilarityGraph - .topUsers( - DAL - .readMostRecentSnapshot(UsersourceFlatScalaDataset, dateRange) - .toTypedPipe, - minActiveFollowers, - topK - ) - .map(_.id) - .count("num_top_users") - - TopUsersSimilarityGraph - .getSubgraphFromUserGroupedInput( - fullGraph = inputSimsGraph, - usersToInclude = topUsers, - maxNeighborsPerNode = maxSimsNeighborsForEval, - degreeThresholdForStat = 2 - ) - .forceToDiskExecution - .flatMap { symmetrizedSims => - val baselineResultsExec = ClusterEvaluation - .overallEvaluation(symmetrizedSims, baselineKnownFor, "baselineKnownForEval") - val newResultsExec = ClusterEvaluation - .overallEvaluation(symmetrizedSims, knownFor, "newKnownForEval") - val minSizeOfBiggerClusterForComparison = 10 - val compareExec = CompareClusters.summarize( - CompareClusters.compare( - KnownForSources.transpose(baselineKnownFor), - KnownForSources.transpose(knownFor), - minSizeOfBiggerCluster = minSizeOfBiggerClusterForComparison - )) - - Execution - .zip(baselineResultsExec, newResultsExec, compareExec) - .map { - case (oldResults, newResults, compareResults) => - val emailText = - s"Evaluation Results for baseline knownFor: $baselineKnownForModelVersion \n" + - Util.prettyJsonMapper.writeValueAsString(oldResults) + - "\n\n-------------------\n\n" + - s"Evaluation Results for new knownFor:$knownForModelVersion\n" + - Util.prettyJsonMapper.writeValueAsString(newResults) + - "\n\n-------------------\n\n" + - s"Cosine similarity distribution between $baselineKnownForModelVersion and " + - s"$knownForModelVersion cluster membership vectors for " + - s"clusters with at least $minSizeOfBiggerClusterForComparison members:\n" + - Util.prettyJsonMapper - .writeValueAsString(compareResults) - - Util - .sendEmail( - emailText, - s"Evaluation results comparing $knownForModelVersion with baseline $baselineKnownForModelVersion", - emailAddress) - () - } - } - } - } - } -} - -/** - * capesospy-v2 update --build_locally --start_cron cluster_evaluation_for_20M_145k \ - * src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object ClusterEvaluationFor20M145K extends ClusterEvaluationBatch { - override val firstTime: String = "2019-06-11" - - override val batchIncrement: Duration = Days(7) - - override val batchDescription = "com.twitter.simclusters_v2.scalding.ClusterEvaluationFor20M145K" - - override val knownForDALDataset = SimclustersV2KnownFor20M145KUpdatedScalaDataset - - override val knownForModelVersion = ModelVersions.Model20M145KUpdated - - override val baselineKnownForDALDataset = SimclustersV2KnownFor20M145KDec11ScalaDataset - - override val baselineKnownForModelVersion = ModelVersions.Model20M145KDec11 -} - -/** - * capesospy-v2 update --build_locally --start_cron cluster_evaluation_for_20M_145k_2020 \ - * src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object ClusterEvaluationFor20M145K2020 extends ClusterEvaluationBatch { - override val firstTime: String = "2021-01-25" - - override val batchIncrement: Duration = Days(7) - - override val batchDescription = - "com.twitter.simclusters_v2.scalding.ClusterEvaluationFor20M145K2020" - - override val knownForDALDataset = SimclustersV2KnownFor20M145K2020ScalaDataset - - override val knownForModelVersion = ModelVersions.Model20M145K2020 - - override val baselineKnownForDALDataset = SimclustersV2KnownFor20M145KUpdatedScalaDataset - - override val baselineKnownForModelVersion = ModelVersions.Model20M145KUpdated -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/CompareClusters.docx b/src/scala/com/twitter/simclusters_v2/scalding/CompareClusters.docx new file mode 100644 index 0000000000000000000000000000000000000000..58bfd2be7d1aa997e1eb6195fae516533aeae372 GIT binary patch literal 38297 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 kUSJ;V4{q`*vA>wuR`1Zvm x * x }.sum).toFloat - } - - def cosine(a: Map[Long, Float], b: Map[Long, Float]): Float = { - val intersect = a.toList.collect { - case (id, score) if b.contains(id) => - score * b(id) - } - val dot = if (intersect.nonEmpty) intersect.sum else 0 - val aNorm = norm(a.values) - val bNorm = norm(b.values) - if (aNorm > 0 && bNorm > 0) { - dot / aNorm / bNorm - } else 0 - } - - /** - * Compare two known-for data set, and generate change in cluster assignment stats - */ - def compareClusterAssignments( - newKnownFor: TypedPipe[(UserId, List[(ClusterId, Float)])], - oldKnownFor: TypedPipe[(UserId, List[(ClusterId, Float)])] - )( - implicit uniqueID: UniqueID - ): Execution[String] = { - - val emptyToSomething = Stat("no_assignment_to_some") - val somethingToEmpty = Stat("some_assignment_to_none") - val emptyToEmpty = Stat("empty_to_empty") - val sameCluster = Stat("same_cluster") - val diffCluster = Stat("diff_cluster") - - val calculateStatExec = newKnownFor - .outerJoin(oldKnownFor) - .map { - case (userId, (newKnownForListOpt, oldKnownForListOpt)) => - val newKnownFor = newKnownForListOpt.getOrElse(Nil) - val oldKnownFor = oldKnownForListOpt.getOrElse(Nil) - - if (newKnownFor.nonEmpty && oldKnownFor.isEmpty) { - emptyToSomething.inc() - } - if (newKnownFor.isEmpty && oldKnownFor.nonEmpty) { - somethingToEmpty.inc() - } - if (newKnownFor.isEmpty && oldKnownFor.isEmpty) { - emptyToEmpty.inc() - } - - if (newKnownFor.nonEmpty && oldKnownFor.nonEmpty) { - val newClusterId = newKnownFor.head._1 - val oldClusterId = oldKnownFor.head._1 - - if (newClusterId == oldClusterId) { - sameCluster.inc() - } else { - diffCluster.inc() - } - } - userId - } - .toIterableExecution - - Util.getCustomCountersString(calculateStatExec) - } - - /** - * Compare two cluster assignments in terms of cosine similarity of corresponding clusters. - * Excludes clusters which are too small - * @param knownForA - * @param knownForB - * @param minSizeOfBiggerCluster Set to 10 or some such. - * @return - */ - def compare( - knownForA: TypedPipe[(Int, List[(Long, Float)])], - knownForB: TypedPipe[(Int, List[(Long, Float)])], - minSizeOfBiggerCluster: Int - ): TypedPipe[(Int, Float)] = { - knownForA - .outerJoin(knownForB) - .collect { - case (clusterId, (membersInAOpt, membersInBOpt)) - if membersInAOpt.exists(_.size >= minSizeOfBiggerCluster) || membersInBOpt - .exists(_.size >= minSizeOfBiggerCluster) => - val membersInA = - membersInAOpt.map(_.toMap).getOrElse(Map.empty[Long, Float]) - val membersInB = - membersInBOpt.map(_.toMap).getOrElse(Map.empty[Long, Float]) - (clusterId, cosine(membersInA, membersInB)) - } - } - - def summarize(clusterToCosines: TypedPipe[(Int, Float)]): Execution[Option[Distribution]] = { - clusterToCosines.values.map(x => List(x)).sum.toOptionExecution.map { listOpt => - listOpt.map { list => Util.distributionFromArray(list.map(_.toDouble).toArray) } - } - } -} - -object CompareClustersAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - - val knownForA = KnownForSources.transpose(KnownForSources.readKnownFor(args("knownForA"))) - val knownForB = KnownForSources.transpose(KnownForSources.readKnownFor(args("knownForB"))) - - CompareClusters - .compare(knownForA, knownForB, minSizeOfBiggerCluster = 10) - .map { case (cId, cos) => "%d\t%.2f".format(cId, cos) } - .writeExecution(TypedTsv(args("outputDir"))) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/EigenVectorsForSparseSymmetric.docx b/src/scala/com/twitter/simclusters_v2/scalding/EigenVectorsForSparseSymmetric.docx new file mode 100644 index 0000000000000000000000000000000000000000..78d911ad79f0731207d1da3bf139078759576892 GIT binary patch literal 40918 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 Qs|Wx_@abWY`RmvJ0A7IbV*mgE literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/EigenVectorsForSparseSymmetric.scala b/src/scala/com/twitter/simclusters_v2/scalding/EigenVectorsForSparseSymmetric.scala deleted file mode 100644 index 7171e0e7a..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/EigenVectorsForSparseSymmetric.scala +++ /dev/null @@ -1,330 +0,0 @@ -package com.twitter.simclusters_v2.scalding - -import com.twitter.algebird.Monoid -import com.twitter.logging.Logger -import com.twitter.scalding.{Execution, TypedPipe, TypedTsv} -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import java.util -import no.uib.cipr.matrix.Matrix -import no.uib.cipr.matrix.sparse.{ArpackSym, LinkedSparseMatrix} -import scala.collection.JavaConverters._ - -object EigenVectorsForSparseSymmetric { - val log: Logger = Logger() - - /** - * Construct matrix from the rows of the matrix, specified as a map. The outer map is indexed by rowId, and the inner maps are indexed by columnId. - * Note that the input matrix is intended to be symmetric. - * - * @param map A map specifying the rows of the matrix. The outer map is indexed by rowId, and the inner maps are indexed by columnId. Both rows and columns are zero-indexed. - * @param nRows number of rows in matrix - * @param nCols number of columns in matrix - * - * @return the constructed matrix - */ - def getMatrix(map: Map[Int, Map[Int, Double]], nRows: Int, nCols: Int): Matrix = { - val nonzeros = map.toSeq.flatMap { - case (i, subMap) => - subMap.toSeq.map { - case (j, value) => - (i, j, value) - } - } - getMatrix(nonzeros, nRows, nCols) - } - - /** - * Construct matrix from iterable of the non-zero entries. Note that the input matrix is intended to be symmetric. - * - * @param nonzeros non-zeros in (i, j, v) format, where i is row, j is column, and v is value. Both rows and columns are zero-indexed. - * @param nRows number of rows in matrix - * @param nCols number of columns in matrix - * - * @return the constructed matrix - */ - def getMatrix(nonzeros: Iterable[(Int, Int, Double)], nRows: Int, nCols: Int): Matrix = { - val matrix = new LinkedSparseMatrix(nRows, nCols) - var numEntries = 0 - var maxRow = 0 - var maxCol = 0 - - nonzeros.foreach { - case (i, j, v) => - if (i > maxRow) { - maxRow = i - } - if (j > maxCol) { - maxCol = j - } - numEntries += 1 - matrix.set(i, j, v) - } - log.info( - "Finished building matrix with %d entries and maxRow %d and maxCol %d" - .format(numEntries, maxRow, maxCol)) - - matrix - } - - /** - * Prints out various diagnostics about how much the given matrix differs from a perfect - * symmetric matrix. If (i,j) and (j,i) are different, it sets both of them to be the max of the two. - * Call this function before invoking EVD. - * - * @param matrix Matrix which is modified (if need be) in place. - */ - def ensureMatrixIsSymmetric(matrix: Matrix): Unit = { - var numUnequalEntries = 0 - var numEntriesDifferentBy1Percent = 0 - var numEqualEntries = 0 - var numUnequalDueToZero = 0 - var maxUnequal = (0, 0, 0.0, 0.0) - matrix.iterator().asScala.foreach { entry => - val curr = entry.get() - val opp = matrix.get(entry.column(), entry.row()) - if (curr == opp) { - numEqualEntries += 1 - } else { - numUnequalEntries += 1 - if (opp == 0) { - numUnequalDueToZero += 1 - } - if (opp != 0 && (math.abs(curr - opp) / math.min(curr, opp)) > 0.01) { - numEntriesDifferentBy1Percent += 1 - } - if (opp != 0 && math.abs(curr - opp) > maxUnequal._4) { - maxUnequal = (entry.row(), entry.column(), curr, math.abs(curr - opp)) - } - val max = math.max(curr, opp) - matrix.set(entry.column(), entry.row(), max) - matrix.set(entry.row(), entry.column(), max) - } - } - - var numUnEqualPrinted = 0 - matrix.iterator().asScala.foreach { entry => - val opp = matrix.get(entry.column(), entry.row()) - if (numUnEqualPrinted < 10 && entry.get() != opp) { - numUnEqualPrinted += 1 - log.info( - "Entries for (%d, %d) are %s and %s" - .format(entry.row(), entry.column(), entry.get(), opp)) - } - } - - log.info( - "Num unequal entries: %d, num unequal due to zero: %d, num unequal by 1percent or more: %d, num equal entries: %d, maxUnequal: %s" - .format( - numUnequalEntries, - numUnequalDueToZero, - numEntriesDifferentBy1Percent, - numEqualEntries, - maxUnequal)) - } - - /** - * Get the top-k eigenvalues (largest magnitude) and eigenvectors for an input matrix. - * Top eigenvalues means they're the largest in magnitude. - * Input matrix needs to be perfectly symmetric; if it's not, this function will fail. - * - * Many of the eigenvectors will have very small values along most of the dimensions. This method also - * only retains the bigger entries in an eigenvector. - * - * @param matrix symmetric input matrix. - * @param k how many of the top eigenvectors to get. - * @param ratioToLargestCutoff An entry needs to be at least 1/ratioToLargestCutoff of the biggest entry in that vector to be retained. - * - * @return seq of (eigenvalue, eigenvector) pairs. - */ - def getTruncatedEVD( - matrix: Matrix, - k: Int, - ratioToLargestCutoff: Float - ): Seq[(Double, Seq[(Int, Double)])] = { - val solver = new ArpackSym(matrix) - val resultsMap = solver.solve(k, ArpackSym.Ritz.LM).asScala.toMap - val results = resultsMap.toIndexedSeq.sortBy { case (eigValue, _) => -eigValue } - results.zipWithIndex.map { - case ((eigValue, denseVectorJava), index) => - val denseVector = new Array[Double](denseVectorJava.size()) - denseVector.indices.foreach { index => denseVector(index) = denseVectorJava.get(index) } - val denseVectorMax = denseVector.maxBy { entry => math.abs(entry) } - val cutOff = math.abs(denseVectorMax) / ratioToLargestCutoff - val significantEntries = denseVector.zipWithIndex - .filter { case (vectorEntry, _) => math.abs(vectorEntry) >= cutOff } - .sortBy { case (vectorEntry, _) => -1 * math.abs(vectorEntry) } - (eigValue.toDouble, significantEntries.toSeq.map(_.swap)) - } - } - - /** - * Compute U*Diag*Ut - where Diag is a diagonal matrix, and U is a sparse matrix. - * This is primarily for testing - to make sure that the computed eigenvectors can be used to - * reconstruct the original matrix up to some reasonable approximation. - * - * @param diagToUColumns seq of (diagonal entries, associated column in U) - * @param cutoff cutoff for including a value in the result. - * - * @return result of multiplication, returned as a map of the rows in the results. - */ - def uTimesDiagTimesUT( - diagToUColumns: Seq[(Double, Seq[(Int, Double)])], - cutoff: Double - ): Map[Int, Map[Int, Double]] = { - val result = new util.HashMap[Int, util.HashMap[Int, Double]]() - diagToUColumns.foreach { - case (diag, uColumn) => - uColumn.foreach { - case (i, iVal) => - uColumn.foreach { - case (j, jVal) => - val prod = diag * iVal * jVal - if (result.containsKey(i)) { - val newVal = if (result.get(i).containsKey(j)) { - result.get(i).get(j) + prod - } else prod - result.get(i).put(j, newVal) - } else { - result.put(i, new util.HashMap[Int, Double]) - result.get(i).put(j, prod) - } - } - } - } - val unfiltered = result.asScala.toMap.mapValues(_.asScala.toMap) - unfiltered - .mapValues { m => m.filter { case (_, value) => math.abs(value) >= cutoff } } - .filter { case (_, vector) => vector.nonEmpty } - } - - /** Note: This requires a full EVD to correctly compute the inverse! :-( */ - def getInverseFromEVD( - evd: Seq[(Double, Seq[(Int, Double)])], - cutoff: Double - ): Map[Int, Map[Int, Double]] = { - val evdInverse = evd.map { - case (eigValue, eigVector) => - (1.0 / eigValue, eigVector) - } - uTimesDiagTimesUT(evdInverse, cutoff) - } -} - -object PCAProjectionMatrixAdhoc extends TwitterExecutionApp { - val log = Logger() - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, _) => - Execution.withId { _ => - val args = config.getArgs - val k = args.int("k", 100) - val ratioToLargestEntryInVectorCutoff = args.int("ratioToLargestEntryInVectorCutoff", 100) - val minClusterFavers = args.int("minClusterFavers", 1000) - val input = TypedPipe.from(AdhocKeyValSources.clusterDetailsSource(args("inputDir"))) - val outputDir = args("outputDir") - - val filteredClustersExec = - input - .collect { - case ((_, clusterId), details) - if details.numUsersWithNonZeroFavScore > minClusterFavers => - clusterId - } - .toIterableExecution - .map { fc => - val fcSet = fc.toSet - log.info("Number of clusters with favers more than %d is %d" - .format(minClusterFavers, fcSet.size)) - fcSet - } - - filteredClustersExec - .flatMap { filteredClusters => - input.flatMap { - case ((_, clusterId), details) => - if (filteredClusters(clusterId)) { - details.neighborClusters.getOrElse(Nil).collect { - case neighbor - if filteredClusters( - neighbor.clusterId) && neighbor.favCosineSimilarity.isDefined => - (clusterId, neighbor.clusterId, neighbor.favCosineSimilarity.get) - } - } else Nil - }.toIterableExecution - } - .flatMap { edgesIter => - val edges = edgesIter.toSeq - val oldIdToNewId = edges - .flatMap { case (i, j, _) => Seq(i, j) } - .distinct - .zipWithIndex - .toMap - - val mapString = oldIdToNewId.toList - .take(5).map { - case (old, nw) => - Seq(old, nw).mkString(" ") - }.mkString("\n") - log.info("A few entries of OldId to NewId map is") - log.info(mapString) - - val newIdToOldId = oldIdToNewId.map(_.swap) - log.info( - "Num clusters after filtering out those with no neighbors with favers more than %d is %d" - .format(minClusterFavers, oldIdToNewId.size)) - val newEdges = edges.map { - case (oldI, oldJ, value) => - (oldIdToNewId(oldI), oldIdToNewId(oldJ), value) - } - log.info("Going to build matrix") - val matrix = EigenVectorsForSparseSymmetric.getMatrix( - newEdges, - oldIdToNewId.size, - oldIdToNewId.size) - EigenVectorsForSparseSymmetric.ensureMatrixIsSymmetric(matrix) - - log.info("Going to solve now for %d eigenvalues".format(k)) - val tic = System.currentTimeMillis() - val results = EigenVectorsForSparseSymmetric.getTruncatedEVD( - matrix, - k, - ratioToLargestEntryInVectorCutoff) - val toc = System.currentTimeMillis() - log.info("Finished solving in %.2f minutes".format((toc - tic) / 1000 / 60.0)) - - val eigValues = results.map(_._1).map { x => "%.3g".format(x) }.mkString(" ") - val eigValueNorm = math.sqrt(results.map(_._1).map(x => x * x).sum) - val matrixNorm = math.sqrt(matrix.iterator().asScala.map(_.get()).map(x => x * x).sum) - - println( - "matrixNorm %s, eigValueNorm %s, explained fraction %s" - .format(matrixNorm, eigValueNorm, eigValueNorm / matrixNorm)) - - log.info("The eigenvalues are:") - log.info(eigValues) - - val nnzInEigenVectors = results.map(_._2.size).sum - log.info("Average nnz per eigenvector using ratioToLargestCutoff %d is %.2g" - .format(ratioToLargestEntryInVectorCutoff, nnzInEigenVectors * 1.0 / results.size)) - val transposedRaw = results.zipWithIndex.flatMap { - case ((_, eigVector), eigIndex) => - eigVector.map { - case (index, vectorEntry) => - val clusterId = newIdToOldId(index) - Map(clusterId -> List((eigIndex, vectorEntry))) - } - } - val transposed = Monoid.sum(transposedRaw).mapValues { rowForCluster => - rowForCluster - .map { - case (dimId, weight) => - "%d:%.2g".format(dimId, weight) - }.mkString(" ") - } - TypedPipe.from(transposed.toSeq).writeExecution(TypedTsv(outputDir)) - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromAggregatableProducerEmbeddings.docx b/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromAggregatableProducerEmbeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..8eb43d21102aa9b48a96d840963354e9bb24cd78 GIT binary patch literal 40258 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 ZC!<3xRbpTT{ajTvAah`Obfy3N^*?7wg+BlQ literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromAggregatableProducerEmbeddings.scala b/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromAggregatableProducerEmbeddings.scala deleted file mode 100644 index a65f2a44f..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromAggregatableProducerEmbeddings.scala +++ /dev/null @@ -1,332 +0,0 @@ -package com.twitter.simclusters_v2.scalding - -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.dal.client.dataset.SnapshotDALDataset -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.DALWrite.WriteExtension -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossClusterSameDC -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossDC -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.ClusterId -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import com.twitter.simclusters_v2.hdfs_sources.AggregatableProducerSimclustersEmbeddingsByLogFavScore2020ScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.SimclustersV2InterestedInFromAggregatableProducerEmbeddings20M145K2020ScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.SimclustersV2UserToInterestedInFromAggregatableProducerEmbeddings20M145K2020ScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.UserAndNeighborsFixedPathSource -import com.twitter.simclusters_v2.hdfs_sources.UserUserNormalizedGraphScalaDataset -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import com.twitter.simclusters_v2.thriftscala.InternalId -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId -import com.twitter.simclusters_v2.thriftscala.UserAndNeighbors -import com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusterScores -import com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusters -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * Production job for computing interestedIn data set from the aggregatable producer embeddings for the model version 20M145K2020. - * It writes the data set in KeyVal format to produce a MH DAL data set. - * - * A high level description of this job: - * - Read the APE dataset - * - Apply log1p to the scores from the above dataset as the scores for producers is high - * - Normalize the scores for each producer (offline benchmarking has shown better results from this step.) - * - Truncate the number of clusters for each producer from the APE dataset to reduce noise - * - Compute interestedIn - * - * To deploy the job: - * - * capesospy-v2 update --build_locally --start_cron interested_in_from_ape_2020 \ - * src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object InterestedInFromAPE2020BatchApp extends InterestedInFromAggregatableProducerEmbeddingsBase { - - override val firstTime: RichDate = RichDate("2021-03-03") - - override val batchIncrement: Duration = Days(7) - - override def modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - - override def producerEmbeddingsInputKVDataset: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, SimClustersEmbedding] - ] = AggregatableProducerSimclustersEmbeddingsByLogFavScore2020ScalaDataset - - override def interestedInFromAPEOutputKVDataset: KeyValDALDataset[ - KeyVal[UserId, ClustersUserIsInterestedIn] - ] = SimclustersV2InterestedInFromAggregatableProducerEmbeddings20M145K2020ScalaDataset - - override def interestedInFromAPEOutputThriftDatset: SnapshotDALDataset[ - UserToInterestedInClusters - ] = SimclustersV2UserToInterestedInFromAggregatableProducerEmbeddings20M145K2020ScalaDataset -} - -trait InterestedInFromAggregatableProducerEmbeddingsBase extends ScheduledExecutionApp { - def modelVersion: ModelVersion - - def interestedInFromAPEOutputKVDataset: KeyValDALDataset[ - KeyVal[UserId, ClustersUserIsInterestedIn] - ] - - def producerEmbeddingsInputKVDataset: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, SimClustersEmbedding] - ] - - def interestedInFromAPEOutputThriftDatset: SnapshotDALDataset[UserToInterestedInClusters] - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - //Input args for the run - val socialProofThreshold = args.int("socialProofThreshold", 2) - val maxClustersFromProducer = args.int("maxClustersPerProducer", 5) - val maxClustersPerUserFinalResult = args.int("maxInterestedInClustersPerUser", 200) - - //Path variables - val interestedInFromProducersPath = - s"/user/cassowary/manhattan_sequence_files/interested_in_from_ape/" + modelVersion - - val interestedInFromProducersThriftPath = - s"/user/cassowary/manhattan_sequence_files/interested_in_from_ape_thrift/" + modelVersion - - val userUserGraph: TypedPipe[UserAndNeighbors] = - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(30)) - .withRemoteReadPolicy(AllowCrossDC) - .toTypedPipe - - val producerEmbeddings = DAL - .readMostRecentSnapshotNoOlderThan( - producerEmbeddingsInputKVDataset, - Days(30)).withRemoteReadPolicy(AllowCrossClusterSameDC).toTypedPipe.map { - case KeyVal(producer, embeddings) => (producer, embeddings) - } - - val result = InterestedInFromAggregatableProducerEmbeddingsBase.run( - userUserGraph, - producerEmbeddings, - maxClustersFromProducer, - socialProofThreshold, - maxClustersPerUserFinalResult, - modelVersion) - - val keyValExec = - result - .map { case (userId, clusters) => KeyVal(userId, clusters) } - .writeDALVersionedKeyValExecution( - interestedInFromAPEOutputKVDataset, - D.Suffix(interestedInFromProducersPath) - ) - val thriftExec = - result - .map { - case (userId, clusters) => - UserToInterestedInClusters( - userId, - ModelVersions.toKnownForModelVersion(modelVersion), - clusters.clusterIdToScores) - } - .writeDALSnapshotExecution( - interestedInFromAPEOutputThriftDatset, - D.Daily, - D.Suffix(interestedInFromProducersThriftPath), - D.EBLzo(), - dateRange.end - ) - Execution.zip(keyValExec, thriftExec).unit - } -} - -/** - * Adhoc job to generate the interestedIn from aggregatable producer embeddings for the model version 20M145K2020 - * - * scalding remote run \ - * --user cassowary \ - * --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - * --principal service_acoount@TWITTER.BIZ \ - * --cluster bluebird-qus1 \ - * --main-class com.twitter.simclusters_v2.scalding.InterestedInFromAPE2020AdhocApp \ - * --target src/scala/com/twitter/simclusters_v2/scalding:interested_in_from_ape_2020-adhoc \ - * --hadoop-properties "mapreduce.map.memory.mb=8192 mapreduce.map.java.opts='-Xmx7618M' mapreduce.reduce.memory.mb=8192 mapreduce.reduce.java.opts='-Xmx7618M'" \ - * -- --outputDir /gcs/user/cassowary/adhoc/your_ldap/interested_in_from_ape_2020_keyval --date 2021-03-05 - */ -object InterestedInFromAPE2020AdhocApp extends AdhocExecutionApp { - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val outputDir = args("outputDir") - val socialProofThreshold = args.int("socialProofThreshold", 2) - val maxClustersPerUserFinalResult = args.int("maxInterestedInClustersPerUser", 200) - val maxClustersFromProducer = args.int("maxClustersFromProducer", 5) - val inputGraph = args.optional("graphInputDir") match { - case Some(inputDir) => TypedPipe.from(UserAndNeighborsFixedPathSource(inputDir)) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(30)) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - } - - val producerEmbeddings = DAL - .readMostRecentSnapshotNoOlderThan( - AggregatableProducerSimclustersEmbeddingsByLogFavScore2020ScalaDataset, - Days(30)).withRemoteReadPolicy(AllowCrossClusterSameDC).toTypedPipe.map { - case KeyVal(producer, embeddings) => (producer, embeddings) - } - - val result = InterestedInFromAggregatableProducerEmbeddingsBase.run( - inputGraph, - producerEmbeddings, - maxClustersFromProducer, - socialProofThreshold, - maxClustersPerUserFinalResult, - ModelVersion.Model20m145k2020) - - result - .writeExecution(AdhocKeyValSources.interestedInSource(outputDir)) - } -} - -/** - * Helper functions - */ -object InterestedInFromAggregatableProducerEmbeddingsBase { - - /** - * Helper function to prune the embeddings - * @param embeddingsWithScore embeddings - * @param maxClusters number of clusters to keep, per userId - * @param uniqueId for stats - * @return - */ - def getPrunedEmbeddings( - embeddingsWithScore: TypedPipe[(UserId, Seq[(ClusterId, Float)])], - maxClusters: Int - )( - implicit uniqueId: UniqueID - ): TypedPipe[(UserId, Array[(ClusterId, Float)])] = { - val numProducerMappings = Stat("num_producer_embeddings_total") - val numProducersWithLargeClusterMappings = Stat( - "num_producers_with_more_clusters_than_threshold") - val numProducersWithSmallClusterMappings = Stat( - "num_producers_with_clusters_less_than_threshold") - val totalClustersCoverageProducerEmbeddings = Stat("num_clusters_total_producer_embeddings") - embeddingsWithScore.map { - case (producerId, clusterArray) => - numProducerMappings.inc() - val clusterSize = clusterArray.size - totalClustersCoverageProducerEmbeddings.incBy(clusterSize) - val prunedList = if (clusterSize > maxClusters) { - numProducersWithLargeClusterMappings.inc() - clusterArray - .sortBy { - case (_, knownForScore) => -knownForScore - }.take(maxClusters) - } else { - numProducersWithSmallClusterMappings.inc() - clusterArray - } - (producerId, prunedList.toArray) - } - } - - /** - * helper function to remove all scores except follow and logFav - * @param interestedInResult interestedIn clusters for a user - * @return - */ - def getInterestedInDiscardScores( - interestedInResult: TypedPipe[(UserId, List[(ClusterId, UserToInterestedInClusterScores)])] - ): TypedPipe[(UserId, List[(ClusterId, UserToInterestedInClusterScores)])] = { - interestedInResult.map { - case (srcId, fullClusterList) => - val fullClusterListWithDiscardedScores = fullClusterList.map { - case (clusterId, clusterDetails) => - val clusterDetailsWithoutSocial = UserToInterestedInClusterScores( - // We are not planning to use the other scores except for logFav and Follow. - // Hence, setting others as None for now, we can add them back when needed - followScore = clusterDetails.followScore, - logFavScore = clusterDetails.logFavScore, - logFavScoreClusterNormalizedOnly = clusterDetails.logFavScoreClusterNormalizedOnly - ) - (clusterId, clusterDetailsWithoutSocial) - } - (srcId, fullClusterListWithDiscardedScores) - } - } - - /** - * Helper function to normalize the embeddings - * @param embeddings cluster embeddings - * @return - */ - def getNormalizedEmbeddings( - embeddings: TypedPipe[(UserId, Seq[(ClusterId, Float)])] - ): TypedPipe[(UserId, Seq[(ClusterId, Float)])] = { - embeddings.map { - case (userId, clustersWithScores) => - val l2norm = math.sqrt(clustersWithScores.map(_._2).map(score => score * score).sum) - ( - userId, - clustersWithScores.map { - case (clusterId, score) => (clusterId, (score / l2norm).toFloat) - }) - } - } - - def run( - userUserGraph: TypedPipe[UserAndNeighbors], - producerEmbeddings: TypedPipe[(SimClustersEmbeddingId, SimClustersEmbedding)], - maxClustersFromProducer: Int, - socialProofThreshold: Int, - maxClustersPerUserFinalResult: Int, - modelVersion: ModelVersion - )( - implicit uniqueId: UniqueID - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - import InterestedInFromKnownFor._ - - val producerEmbeddingsWithScore: TypedPipe[(UserId, Seq[(ClusterId, Float)])] = - producerEmbeddings.map { - case ( - SimClustersEmbeddingId(embeddingType, modelVersion, InternalId.UserId(producerId)), - simclusterEmbedding) => - ( - producerId, - simclusterEmbedding.embedding.map { simclusterWithScore => - // APE dataset has very high producer scores, hence applying log to smoothen them out before - // computing interestedIn - (simclusterWithScore.clusterId, math.log(1.0 + simclusterWithScore.score).toFloat) - }) - } - - val result = keepOnlyTopClusters( - getInterestedInDiscardScores( - attachNormalizedScores( - userClusterPairsWithoutNormalization( - userUserGraph, - getPrunedEmbeddings( - getNormalizedEmbeddings(producerEmbeddingsWithScore), - maxClustersFromProducer), - socialProofThreshold, - ))), - maxClustersPerUserFinalResult, - ModelVersions.toKnownForModelVersion(modelVersion) - ) - result - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownFor.docx b/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownFor.docx new file mode 100644 index 0000000000000000000000000000000000000000..29884e880cb39526f0419b4dbd28dfe6a67ac97f GIT binary patch literal 42488 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 z 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 ZzpX - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val normalizedGraph = - DAL.readMostRecentSnapshot(UserUserNormalizedGraphScalaDataset).toTypedPipe - val knownFor = KnownForSources.fromKeyVal( - DAL.readMostRecentSnapshot(knownForDALDataset, dateRange.extend(Days(30))).toTypedPipe, - knownForModelVersion - ) - - val socialProofThreshold = args.int("socialProofThreshold", 2) - val maxClustersPerUser = args.int("maxClustersPerUser", 50) - - val result = InterestedInFromKnownFor - .run( - normalizedGraph, - knownFor, - socialProofThreshold, - maxClustersPerUser, - knownForModelVersion - ) - - val writeKeyValResultExec = result - .map { case (userId, clusters) => KeyVal(userId, clusters) } - .writeDALVersionedKeyValExecution( - outputKVDataset, - D.Suffix(outputPath) - ) - - // read previous data set for validation purpose - val previousDataset = if (RichDate(firstTime).timestamp != dateRange.start.timestamp) { - DAL - .readMostRecentSnapshot(outputKVDataset, dateRange.prepend(lookBackDays)).toTypedPipe - .map { - case KeyVal(user, interestedIn) => - (user, interestedIn) - } - } else { - TypedPipe.empty - } - - Util.printCounters( - Execution - .zip( - writeKeyValResultExec, - InterestedInFromKnownFor.dataSetStats(result, "NewResult"), - InterestedInFromKnownFor.dataSetStats(previousDataset, "OldResult") - ).unit - ) - } - } - } -} - -/** - * Adhoc job to compute user interestedIn. - * - * scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding:interested_in_adhoc \ - * --user recos-platform \ - * --submitter hadoopnest2.atla.twitter.com \ - * --main-class com.twitter.simclusters_v2.scalding.InterestedInFromKnownForAdhoc -- \ - * --date 2019-08-26 --outputDir /user/recos-platform/adhoc/simclusters_interested_in_log_fav - */ -object InterestedInFromKnownForAdhoc extends TwitterExecutionApp { - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val normalizedGraph = TypedPipe.from( - UserAndNeighborsFixedPathSource(args("graphInputDir")) - ) - val socialProofThreshold = args.int("socialProofThreshold", 2) - val maxClustersPerUser = args.int("maxClustersPerUser", 20) - val knownForModelVersion = args("knownForModelVersion") - val knownFor = KnownForSources.readKnownFor(args("knownForInputDir")) - - val outputSink = AdhocKeyValSources.interestedInSource(args("outputDir")) - Util.printCounters( - InterestedInFromKnownFor - .run( - normalizedGraph, - knownFor, - socialProofThreshold, - maxClustersPerUser, - knownForModelVersion - ).writeExecution(outputSink) - ) - } - } -} - -/** - * Adhoc job to check the output of an adhoc interestedInSource. - */ -object DumpInterestedInAdhoc extends TwitterExecutionApp { - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val users = args.list("users").map(_.toLong).toSet - val input = TypedPipe.from(AdhocKeyValSources.interestedInSource(args("inputDir"))) - input.filter { case (userId, rec) => users.contains(userId) }.toIterableExecution.map { - s => println(s.map(Util.prettyJsonMapper.writeValueAsString).mkString("\n")) - } - } - } -} - -/** - * Helper functions - */ -object InterestedInFromKnownFor { - private def ifNanMake0(x: Double): Double = if (x.isNaN) 0.0 else x - - case class SrcClusterIntermediateInfo( - followScore: Double, - followScoreProducerNormalized: Double, - favScore: Double, - favScoreProducerNormalized: Double, - logFavScore: Double, - logFavScoreProducerNormalized: Double, - followSocialProof: List[Long], - favSocialProof: List[Long]) { - // overriding for the sake of unit tests - override def equals(obj: scala.Any): Boolean = { - obj match { - case that: SrcClusterIntermediateInfo => - math.abs(followScore - that.followScore) < 1e-5 && - math.abs(followScoreProducerNormalized - that.followScoreProducerNormalized) < 1e-5 && - math.abs(favScore - that.favScore) < 1e-5 && - math.abs(favScoreProducerNormalized - that.favScoreProducerNormalized) < 1e-5 && - math.abs(logFavScore - that.logFavScore) < 1e-5 && - math.abs(logFavScoreProducerNormalized - that.logFavScoreProducerNormalized) < 1e-5 && - followSocialProof.toSet == that.followSocialProof.toSet && - favSocialProof.toSet == that.favSocialProof.toSet - case _ => false - } - } - } - - implicit object SrcClusterIntermediateInfoSemigroup - extends Semigroup[SrcClusterIntermediateInfo] { - override def plus( - left: SrcClusterIntermediateInfo, - right: SrcClusterIntermediateInfo - ): SrcClusterIntermediateInfo = { - SrcClusterIntermediateInfo( - followScore = left.followScore + right.followScore, - followScoreProducerNormalized = - left.followScoreProducerNormalized + right.followScoreProducerNormalized, - favScore = left.favScore + right.favScore, - favScoreProducerNormalized = - left.favScoreProducerNormalized + right.favScoreProducerNormalized, - logFavScore = left.logFavScore + right.logFavScore, - logFavScoreProducerNormalized = - left.logFavScoreProducerNormalized + right.logFavScoreProducerNormalized, - followSocialProof = - Semigroup.plus(left.followSocialProof, right.followSocialProof).distinct, - favSocialProof = Semigroup.plus(left.favSocialProof, right.favSocialProof).distinct - ) - } - } - - /** - * @param adjacencyLists User-User follow/fav graph - * @param knownFor KnownFor data set. Each user can be known for several clusters with certain - * knownFor weights. - * @param socialProofThreshold A user will only be interested in a cluster if they follow/fav at - * least certain number of users known for this cluster. - * @param uniqueId required for these Stat - * @return - */ - def userClusterPairsWithoutNormalization( - adjacencyLists: TypedPipe[UserAndNeighbors], - knownFor: TypedPipe[(Long, Array[(Int, Float)])], - socialProofThreshold: Int - )( - implicit uniqueId: UniqueID - ): TypedPipe[((Long, Int), SrcClusterIntermediateInfo)] = { - val edgesToUsersWithKnownFor = Stat("num_edges_to_users_with_known_for") - val srcDestClusterTriples = Stat("num_src_dest_cluster_triples") - val srcClusterPairsBeforeSocialProofThresholding = - Stat("num_src_cluster_pairs_before_social_proof_thresholding") - val srcClusterPairsAfterSocialProofThresholding = - Stat("num_src_cluster_pairs_after_social_proof_thresholding") - - val edges = adjacencyLists.flatMap { - case UserAndNeighbors(srcId, neighborsWithWeights) => - neighborsWithWeights.map { neighborWithWeights => - ( - neighborWithWeights.neighborId, - neighborWithWeights.copy(neighborId = srcId) - ) - } - } - - implicit val l2b: Long => Array[Byte] = Injection.long2BigEndian - - edges - .sketch(4000) - .join(knownFor) - .flatMap { - case (destId, (srcWithWeights, clusterArray)) => - edgesToUsersWithKnownFor.inc() - clusterArray.toList.map { - case (clusterId, knownForScoreF) => - val knownForScore = math.max(0.0, knownForScoreF.toDouble) - - srcDestClusterTriples.inc() - val followScore = - if (srcWithWeights.isFollowed.contains(true)) knownForScore else 0.0 - val followScoreProducerNormalizedOnly = - srcWithWeights.followScoreNormalizedByNeighborFollowersL2.getOrElse( - 0.0) * knownForScore - val favScore = - srcWithWeights.favScoreHalfLife100Days.getOrElse(0.0) * knownForScore - - val favScoreProducerNormalizedOnly = - srcWithWeights.favScoreHalfLife100DaysNormalizedByNeighborFaversL2.getOrElse( - 0.0) * knownForScore - - val logFavScore = srcWithWeights.logFavScore.getOrElse(0.0) * knownForScore - - val logFavScoreProducerNormalizedOnly = srcWithWeights.logFavScoreL2Normalized - .getOrElse(0.0) * knownForScore - - val followSocialProof = if (srcWithWeights.isFollowed.contains(true)) { - List(destId) - } else Nil - val favSocialProof = if (srcWithWeights.favScoreHalfLife100Days.exists(_ > 0)) { - List(destId) - } else Nil - - ( - (srcWithWeights.neighborId, clusterId), - SrcClusterIntermediateInfo( - followScore, - followScoreProducerNormalizedOnly, - favScore, - favScoreProducerNormalizedOnly, - logFavScore, - logFavScoreProducerNormalizedOnly, - followSocialProof, - favSocialProof - ) - ) - } - } - .sumByKey - .withReducers(10000) - .filter { - case ((_, _), SrcClusterIntermediateInfo(_, _, _, _, _, _, followProof, favProof)) => - srcClusterPairsBeforeSocialProofThresholding.inc() - val distinctSocialProof = (followProof ++ favProof).toSet - val result = distinctSocialProof.size >= socialProofThreshold - if (result) { - srcClusterPairsAfterSocialProofThresholding.inc() - } - result - } - } - - /** - * Add the cluster-level l2 norm scores, and use them to normalize follow/fav scores. - */ - def attachNormalizedScores( - intermediate: TypedPipe[((Long, Int), SrcClusterIntermediateInfo)] - )( - implicit uniqueId: UniqueID - ): TypedPipe[(Long, List[(Int, UserToInterestedInClusterScores)])] = { - - def square(x: Double): Double = x * x - - val clusterCountsAndNorms = - intermediate - .map { - case ( - (_, clusterId), - SrcClusterIntermediateInfo( - followScore, - followScoreProducerNormalizedOnly, - favScore, - favScoreProducerNormalizedOnly, - logFavScore, - logFavScoreProducerNormalizedOnly, - _, - _ - ) - ) => - ( - clusterId, - ( - 1, - square(followScore), - square(followScoreProducerNormalizedOnly), - square(favScore), - square(favScoreProducerNormalizedOnly), - square(logFavScore), - square(logFavScoreProducerNormalizedOnly) - ) - ) - } - .sumByKey - // .withReducers(100) - .map { - case ( - clusterId, - ( - cnt, - squareFollowScore, - squareFollowScoreProducerNormalizedOnly, - squareFavScore, - squareFavScoreProducerNormalizedOnly, - squareLogFavScore, - squareLogFavScoreProducerNormalizedOnly - )) => - ( - clusterId, - ( - cnt, - math.sqrt(squareFollowScore), - math.sqrt(squareFollowScoreProducerNormalizedOnly), - math.sqrt(squareFavScore), - math.sqrt(squareFavScoreProducerNormalizedOnly), - math.sqrt(squareLogFavScore), - math.sqrt(squareLogFavScoreProducerNormalizedOnly) - )) - } - - implicit val i2b: Int => Array[Byte] = Injection.int2BigEndian - - intermediate - .map { - case ((srcId, clusterId), clusterScoresTuple) => - (clusterId, (srcId, clusterScoresTuple)) - } - .sketch(reducers = 900) - .join(clusterCountsAndNorms) - .map { - case ( - clusterId, - ( - ( - srcId, - SrcClusterIntermediateInfo( - followScore, - followScoreProducerNormalizedOnly, - favScore, - favScoreProducerNormalizedOnly, - logFavScore, - logFavScoreProducerNormalizedOnly, // not used for now - followProof, - favProof - ) - ), - ( - cnt, - followNorm, - followProducerNormalizedNorm, - favNorm, - favProducerNormalizedNorm, - logFavNorm, - logFavProducerNormalizedNorm // not used for now - ) - ) - ) => - ( - srcId, - List( - ( - clusterId, - UserToInterestedInClusterScores( - followScore = Some(ifNanMake0(followScore)), - followScoreClusterNormalizedOnly = Some(ifNanMake0(followScore / followNorm)), - followScoreProducerNormalizedOnly = - Some(ifNanMake0(followScoreProducerNormalizedOnly)), - followScoreClusterAndProducerNormalized = Some( - ifNanMake0(followScoreProducerNormalizedOnly / followProducerNormalizedNorm)), - favScore = Some(ifNanMake0(favScore)), - favScoreClusterNormalizedOnly = Some(ifNanMake0(favScore / favNorm)), - favScoreProducerNormalizedOnly = Some(ifNanMake0(favScoreProducerNormalizedOnly)), - favScoreClusterAndProducerNormalized = - Some(ifNanMake0(favScoreProducerNormalizedOnly / favProducerNormalizedNorm)), - usersBeingFollowed = Some(followProof), - usersThatWereFaved = Some(favProof), - numUsersInterestedInThisClusterUpperBound = Some(cnt), - logFavScore = Some(ifNanMake0(logFavScore)), - logFavScoreClusterNormalizedOnly = Some(ifNanMake0(logFavScore / logFavNorm)) - )) - ) - ) - } - .sumByKey - // .withReducers(1000) - .toTypedPipe - } - - /** - * aggregate cluster scores for each user, to be used instead of attachNormalizedScores - * when we donot want to compute cluster-level l2 norm scores - */ - def groupClusterScores( - intermediate: TypedPipe[((Long, Int), SrcClusterIntermediateInfo)] - )( - implicit uniqueId: UniqueID - ): TypedPipe[(Long, List[(Int, UserToInterestedInClusterScores)])] = { - - intermediate - .map { - case ( - (srcId, clusterId), - SrcClusterIntermediateInfo( - followScore, - followScoreProducerNormalizedOnly, - favScore, - favScoreProducerNormalizedOnly, - logFavScore, - logFavScoreProducerNormalizedOnly, - followProof, - favProof - ) - ) => - ( - srcId, - List( - ( - clusterId, - UserToInterestedInClusterScores( - followScore = Some(ifNanMake0(followScore)), - followScoreProducerNormalizedOnly = - Some(ifNanMake0(followScoreProducerNormalizedOnly)), - favScore = Some(ifNanMake0(favScore)), - favScoreProducerNormalizedOnly = Some(ifNanMake0(favScoreProducerNormalizedOnly)), - usersBeingFollowed = Some(followProof), - usersThatWereFaved = Some(favProof), - logFavScore = Some(ifNanMake0(logFavScore)), - )) - ) - ) - } - .sumByKey - .withReducers(1000) - .toTypedPipe - } - - /** - * For each user, only keep up to a certain number of clusters. - * @param allInterests user with a list of interestedIn clusters. - * @param maxClustersPerUser number of clusters to keep for each user - * @param knownForModelVersion known for model version - * @param uniqueId required for these Stat - * @return - */ - def keepOnlyTopClusters( - allInterests: TypedPipe[(Long, List[(Int, UserToInterestedInClusterScores)])], - maxClustersPerUser: Int, - knownForModelVersion: String - )( - implicit uniqueId: UniqueID - ): TypedPipe[(Long, ClustersUserIsInterestedIn)] = { - val userClusterPairsBeforeUserTruncation = - Stat("num_user_cluster_pairs_before_user_truncation") - val userClusterPairsAfterUserTruncation = - Stat("num_user_cluster_pairs_after_user_truncation") - val usersWithALotOfClusters = - Stat(s"num_users_with_more_than_${maxClustersPerUser}_clusters") - - allInterests - .map { - case (srcId, fullClusterList) => - userClusterPairsBeforeUserTruncation.incBy(fullClusterList.size) - val truncatedClusters = if (fullClusterList.size > maxClustersPerUser) { - usersWithALotOfClusters.inc() - fullClusterList - .sortBy { - case (_, clusterScores) => - ( - -clusterScores.favScore.getOrElse(0.0), - -clusterScores.logFavScore.getOrElse(0.0), - -clusterScores.followScore.getOrElse(0.0), - -clusterScores.logFavScoreClusterNormalizedOnly.getOrElse(0.0), - -clusterScores.followScoreProducerNormalizedOnly.getOrElse(0.0) - ) - } - .take(maxClustersPerUser) - } else { - fullClusterList - } - userClusterPairsAfterUserTruncation.incBy(truncatedClusters.size) - (srcId, ClustersUserIsInterestedIn(knownForModelVersion, truncatedClusters.toMap)) - } - } - - def run( - adjacencyLists: TypedPipe[UserAndNeighbors], - knownFor: TypedPipe[(UserId, Array[(ClusterId, Float)])], - socialProofThreshold: Int, - maxClustersPerUser: Int, - knownForModelVersion: String - )( - implicit uniqueId: UniqueID - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - keepOnlyTopClusters( - attachNormalizedScores( - userClusterPairsWithoutNormalization( - adjacencyLists, - knownFor, - socialProofThreshold - ) - ), - maxClustersPerUser, - knownForModelVersion - ) - } - - /** - * run the interestedIn job, cluster normalized scores are not attached to user's clusters. - */ - def runWithoutClusterNormalizedScores( - adjacencyLists: TypedPipe[UserAndNeighbors], - knownFor: TypedPipe[(UserId, Array[(ClusterId, Float)])], - socialProofThreshold: Int, - maxClustersPerUser: Int, - knownForModelVersion: String - )( - implicit uniqueId: UniqueID - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - keepOnlyTopClusters( - groupClusterScores( - userClusterPairsWithoutNormalization( - adjacencyLists, - knownFor, - socialProofThreshold - ) - ), - maxClustersPerUser, - knownForModelVersion - ) - } - - /** - * print out some basic stats of the data set to make sure things are not broken - */ - def dataSetStats( - interestedInData: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - dataSetName: String = "" - ): Execution[Unit] = { - - Execution - .zip( - Util.printSummaryOfNumericColumn( - interestedInData.map { - case (user, interestedIn) => - interestedIn.clusterIdToScores.size - }, - Some(s"$dataSetName UserInterestedIn Size") - ), - Util.printSummaryOfNumericColumn( - interestedInData.flatMap { - case (user, interestedIn) => - interestedIn.clusterIdToScores.map { - case (_, scores) => - scores.favScore.getOrElse(0.0) - } - }, - Some(s"$dataSetName UserInterestedIn favScore") - ), - Util.printSummaryOfNumericColumn( - interestedInData.flatMap { - case (user, interestedIn) => - interestedIn.clusterIdToScores.map { - case (_, scores) => - scores.favScoreClusterNormalizedOnly.getOrElse(0.0) - } - }, - Some(s"$dataSetName UserInterestedIn favScoreClusterNormalizedOnly") - ), - Util.printSummaryOfNumericColumn( - interestedInData.flatMap { - case (user, interestedIn) => - interestedIn.clusterIdToScores.map { - case (_, scores) => - scores.logFavScoreClusterNormalizedOnly.getOrElse(0.0) - } - }, - Some(s"$dataSetName UserInterestedIn logFavScoreClusterNormalizedOnly") - ) - ).unit - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownForLite.docx b/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownForLite.docx new file mode 100644 index 0000000000000000000000000000000000000000..9d10c60ce0474983b8cda097f1d648f63de2c022 GIT binary patch literal 40523 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ⅅvlGek#>St6IH&MJCmiA`bOKGblGcn5 z7r+wC)-5>T$o>84^0=E@5_(ifn~^jJbl}v`TV>#u*crLxV`$dj9UNJTn9IqMltr$+ z)u$T_(*{?j$d|7e8 z77?_^DAJ&rRQF#ZEW}1$akpgdrJ=C2QgJ^K3%i_m$FW(LN~)<)Q7TQieRDPk4q{5& z5NQYTmE}I_;CZ+BKQNnxr}%B}`&tzo7V?X99+_~)ZpT)vj%7M-<9mLM(P%5hoKGOz zCFWtRsx_(|hZZB0q(+?0+r%h$Dn>nk97xU9$asqmjg}2@o$;@b)68HeF<(o8u(}J| zm#$otmZ7KD;^lg&Xhiw_$UL)Q9*9+N#2{M2shifxlcB-iS;D3A0?`nBr~Jw32y`fg zYAYd^{^)Mff9LST$yId9r=bMDLIO{G5(D){sH_v<1KdW95x1_MX;vKvc{iUDgrl&msI*>^6E z<+7SH)j_$Nrwl6@lIoM35CvwBZIR)ZL67|Yw6@22Wci@ANGgt*xRSiZV+7T~78@0s zz8kjoX2TiA#leRKQ|DgbHBo()aW4;d3)u>7T^k&xOS*QKbQqo|f zV~-d6R<85Zhw|j(M535BAAq0|riR{S031q!wlg=|tM3^#beq`0{o`ub>#mXXdLh@F z1}nhDyST_hbo&$BR%Xif#j+gjWG^@G^Qe0CBAtSpaOupYvRLriRU{(!P`_%>wiE51 zDya8A$bC=?7hUfZC{ME(3 zXvsxyfw;!Te2`t3#RD-xOx+7_dX@ub7J%_P6Y*d>@{B_}xq znf3~xO|8u8Qww;D3m-FxRvcGBJuO;xB4lFGM%|y>%d6tg0dQQ=Ztq{^yRlMpiH5T^>ZYcF^E?dfAJgk)BJ{?Crab|s%!CCWS znD&|$+T?Min&Q;;aToY^D>$2?G1)GygT!CeR-}Ck9#Lr@)sLsSD@nT(jHJ3U(&k0= z5T+*AE~N!XYn`k7!7`j}V=KRq06R0sIPtNDki*DQj}Zw5_l-IEA+>d)@>12y8Vpi6BPz6>^_&##MdvKhn;sF zr*+JHAZs|q?{`g;EGOxJuN4$iCO=+h?Sb!iCg~amUOQKZe*}2H=jQk%to=j*rsOlB z;H(X-MIm+0Lt@ETmwb;zmJJzCqwB3^r$=XAQ^T*?E68UyrRqNKo=R>nhEMOVdd1Y; zWA^#R!SjiWfylSRVL8~`vWvY%3dYLFU{mz^V)yZ@cyh-LD#~-(X%PBk>Twq6nY5hc z=lb#rsOo5`H$VKIDobXwj5*ipta7YWsiER{Wd z*sIg7KCnDIf0lWpl*f?nO8BG12-HI}ENH#zT<`2^__sLvyVo<25aEd6+p{nucOIjH|hz)54_%I<1Xrz zc(l-)!7lShnZdR!<^%4mWk0u!-Wq$)7&d{vt5v|jJN*u8hb$Zz}kNweaEiJ!UVOx5b*#)RA zai7a~lMHw%RigtOl>Brc=h=mq)hF%8fKaw#FJl zwuipRHTJkGeXMb0~r9S-V3 zwp>#;K%2g7!_Xr{_hLz;_ogr$kUU#Ax7bv7j;7gvEGn46KH44@$6w#W7uDB1fLwa^ zc6R!vqR9RBU=60Yx*dWQ$pZK8KtdY&<2KDlyQ<5J?|iFIdNhYL)rm5r#eq%6HZfUd z$JDp1_+xEvazO{mQ9R`dBV#5qH;7tdN3>33jty9FIXsK3K1G#GEO&cDJ-{t-U^KjFuJ!UOPxI?KG-?rmm)Z#^tN z=0xYy>n)m`MY9#?K|ADokWULaMc|Xm&>!M2Vy%k(J={B^W=qgFmqX>NEq)+%rephc zWNDH)BR(8fq*=ern9WN8(xY4ldYHq_^cS9rb{cb&td-{I>dKX{oCdK663v&dE{R?h z$=5jZ&RdiPl(3sESe5_e%h!c+%k?FnmvRinqf@zS)2+jezEGB@uTECQdg#M8M?6)z z2+4P4rj1=vim0N?+ssg@r!{?z^q|}h0?Lx7pCt5XQSK~BwhA%kHlKg1?mr9*aM?@F zA$Y3mOBJAFr9i}FUb=&Kp5K!HMoK^jP66NRvh*4fl?Z3I2n1IJ4HBYxwqn?R%ZG=F-}3i z`{@-4gl4EDY8=SCjO}UbBkWs#tkOZtyi%QYy2QL1dcg4$mrWb8&8sFe?$ju;bdJsH zYpSTvq71)q<$}t+R@7$Rrfp)l>%1*26IDqlIZu^wq~Z^CDuWc9jdjB;x}8eZ@sj!n zvc&t66^0;T7oT5^9AbmKP+epJewr4RCfs2}k!GHLS9;&3@L*%R%FJ71yz*7bifgAA z)Lx0R=LU{WDS&QQr;8(euOIJ}L1>mUR;QsNp{RhMVyH0-=jpP;@yNchH$#+2xs|K% zo}P=yiVARf`t=cV^B-%9Lv6FkVk(1qVkW#cWWBH%u4MnGe?a5A07~rfAYxg zNuUGn6yL}r*62H)4$(7El|WE@rSx<5L{RyjfwQeuR6wUstMXLgsFy|=M41NY6ayXw zP8nqW`u7_nra79|DjMLZOMFuT1 zGYX)42y)R^R{fBr5b8CYxUwYwVlxQ;FE&o+|4%lG5jQ{f8}g;N`lIi~)fSo{BwODT zPtDIAA5Z~Dk63P6xx#%r>eJ>#1)en~zf80NEUw2Y{}%KBf`Y5&GRK!mDs1v^ltV2K(t+b6Eh-R5M1ZS9`#;G+;Wo;M_C%xePDI(* zAj&6StCo8}1d*cxu2KF!-J}=+$+~h2I2$?fk4$go2Nx{{ zjIY}(xueRC?%L#vHSyDibW89)z1ijQ`?Vuf3i$SFTLX-Isg5R8!7UvvNRyAeB81dbrL4^<_N2(2nGVXF^2l20%mkA!jRfhn6utY^!==XlM7CWH+C0d z*x-aa1C$Krp}VTa3K347A4OWEx`<3R)F_sLY3Cd8)mzww$dZ?MdjAw;0e zNtgm~Ao!LIIM5Sqmy9MtQ$$S@OjMsaQc)e7%DKegxoeWG0mIn_7%fX9wgsGkEvcV| zyHZXXL79a!Zp3(fXB0MwQn$0NOGB0+>&Lc=0u%?7Dn#G_padZT6FN8oO@uawiY6Sl zB5S+|3giIJY!Y*R${a!XjlE|kZ1C7~*GP#*teP3T(U@^C|H_R9%m)CkHbsan11w=B zLut&qMKl(@0#Nrm0Z0 zlq>Nk?-kxZdH05>OWS*27&BhuxUk{;oww-d7v$H0vBsNm)<1O6DQHmMxCuG6@gich zX=sW~=IY;69*X@@sf6F~rLrIVk4g~0+7!d#))Oy=Lt|ldYbZZ)K<78$5x<5{;7~tY zBLdn`b!jzq7*SL1I1O}&k%z|#7w?OIA+E7>l!6qgtyxs6OCMDEJe&FycNYYCYR()y z`i0;YW@Yu%Dd=nT5YPVFPDA;*PQosD#01+|KiMuZ#He^x2FdTTeBWBamEMJ+>^4$S zTGB;T;YcPNz1UBPl4AUTv9(I2Xm3RtUanGEFd=K;V`Qk=4t+!Z--?Hbv!NhG?~(Hw+krru>-c3 z{cAia-k6Osb%`gNgFNXb%n{3s>E4ZWN+ZJJFC}av1XHEimx-Ka2aMQBuZ-CLQkaW- zi0dqnfjs%QLYM!o@HXQvWHN56g3UuASMZ_)(_z%1L>v5eAa|B_WUi_Jllj11c~H0) zuD5Ja8C=84@LjlOD>FK73-`|oef+Yu(M|K&&fk$8q<|rz9fDx)vQ9Hc|2o=u{BU#} zH6d3OT|9sAa%i3(X=+(V&rn>vqRZ-m12*M!UVGW!Cvn*(8pR1-_n`arV4tJ~o3Vup z&bngou57A5Ty0SxI4rUF`C|z0ROc2laN9ptyLe+iSFzH?pjU^J1`x5|FElo&9aeNT zGLx?#5%?h*OoC?(+ACXQVIKBp&Sn`F&Ca9ZR3DNXv57xvOAX0VBqMSJ8qWZA2&uXu z2MuDKU9*8idhMK<_inU(`rn)ZkKocHa}Nn~ShX`hQWo7>|EZbF=+TJxhul0r&r) zzUdl(>=vp9Csi|Gr%q(N zW78kcW>h>~Ga%5p*NgOLmtBb2>^Tqf5AsLnkuP#3@W05L8Cj4c=>8w%Gx`$SFVV?c z>kj`Q@6(rfQB-?|QfpQ~neB6$1wU45jic|>)7|RyYvp}zU~YrT#QkhL9+S*_cwX8~ z=_~>%E_kC+hYLT6vaS6&^EA;o?W_wea`r8PWNDAfep@}w0S4mz zxFj`2kV#m!<13c4k zyXlwYaV3yvj+)YZfl?k6DE?MaO#GG{z#%i~m*P$V(LJHrz7J0cMdN|IZ{Ynm!kg`?jTu zf99z9R5UvHZ(w(xbH;xqdBRfp&^6RH*RcA}B&D=YI}5}9PBJ9%Pm&zaf0FF9{{Kso zL&mauy8V!)(&sBlvA)q{$ zjS)VeJeFGq16&boQ6NCe()h9o{XFK(`oMyG@u$rKK%0X|(73*K9oxX6H~>Pvp@0S; zEd&xj3Fu46IRq;oj6>ppCX67c89J@lvcR)ik{iR&FwHMOmBcX-Y9m04C(9j zdGH=?ZkJuy*uZ4F4R2zV?w0L=TsF_8+yH%7uhu zJ{PR~4WKAsZ2{;&phNJr&2R&x6Gx&Sfj))Ql|O@;G3Wre!{~#SrcVdIBQ$Fy8UL5K zD8WDCFaocIZY)Pe4YxVZYw#KS@fv&p2|)iG!0WyaU`;-NG~zBF{tY=@+n|LPqqsxR z3^9ZqJ-R3iw_<#6TJ%ZDjcq=Fcd855K&~MkX!JdW4l!!`T_fCZFs9w$N81&nb1Ifbb~A zK>|{t0telWA7d0G5V2F17*M$I^7ciKvTawE1gydAcg@%9HN%lDEN+5=349vx4;}3r zk><6jnG1(q@O;3q1wmuzvUvY(7`2XCCq-B|%%4ZOk;JBC#%63buN5x+_0M5QJLMXq z`O2$D>`Q=?j9)IUQr_*{H|=oO+~g@RN9*2A0>R`A6eYZJ4>hqqJPY}KSl6M^)NA&| z7VBAdooG!{&ApEuJy6Tgx1m>vTf|+(QHY^exyys;Z^TpKL>m}-Z`Q2yoY_>8fHBZ6 zv9FCbTzBQqLUNtRH-6@GuZrkq^ z`mO%qp|%w?DQ(UnI$Q!gWY3&FBA(K9!5(`D0RwGpDZxXVoyqf1RtJWju{U{BQI1+e zKV0(SE@w;GqS*I2hax|t40}lhunBu{{sl4cE`N^nfN;HBNN1{P8~4(yPCAfF{_xAZz!yjuXnh}`eE*c}>z4S5 zYKQeKhHf-0tqJjBqK9fs~W^k*ymY3VasrtZh|q%vlH zm7hR(=;s6ve^a3?D%wJSnE*U7ojQ#Mos64HOmT;dfzmKt?V&!x*L|vB@b)e;oVanM z#%iONqIXAYy0&t31g5l8Omb)j&_a5+Bub2MCtMrBe)rLXCU<6id1u-A!P3XaFZze5 zYr5K{GJWcO4BJcV6t?Tj1K$_Wz0xx~qWK^uem_A$*x~Y!pnLRcJk&*5Z71!O%N>=y z$H14yUo;(2SMTpVJ3o6g{<~Du*&gSL=**SPBk!yH;sXEh&knp)=d6gS`}V{8+S+^0 zG&D=0fzon)pwn>?RDrzKPw-yC>N`Xb5;kU1j`2{Ej3SZIQ=n|49Y-G-cre?+wfMYd zILN?2Y%`9qVO9thqKUtsD4b6*F+ir$*~x2}jmR8stB*5np2}ABq^Q)pIBNx#;pWJT zoF4vH7kXP$ZkPxQ^6r^iSal+^y_4YUAviDU3qsNT`Y7@WMh;VU*QV{*&n4`mVxjEPAijH?l4^AM zQuu{s<#T4|R|RL{Nm*v%EsM-a*Xs3<(>)8&?pxtis|VrLlI?Gl{!l)+^v{hBC~0(V zTkko={`h?bS=@FM*ucuyb4zbBska_`@5HWsP9ydmu1zdaDxyV*Uv% z-{xc-jXpU9fck#_;GkT-RTSEQ!-TaMKl*vhHdU*%=;g}Q3Fsu z$q6&1+uuO>VU<8o-!ZCPKRP^huDf0Y58pw|-Jqvrm1EDna`k zbIR+{=X_;dTe@v_dY`}EZ@VAm<+717h+DF~B)E0z@s-c;0+dgcdhc|hKmM0AnJ-I> zIyUut>94&)?qI>rS{$jKPf+ibuZ2_Q18(M>m*0mA{j-PuS<@W4mx) z{^r;^cW!@GlnIpI*8TbR>s1&k<(EA4%Uw0!pw63|)IMD%Z0hNK*hMgI^=-@neok;c ze5Ok6QNaN1r3e#B`_NS6^k8j&)7VM|fnpIA9ViSr_!6zWr~5|u>G5J#h&*EoTV8{n zMUpDPMwVgiO&s&nurXj2R4X4lfC|8a;M18I85N)s`EC_R!S&InGhx2lF0W=ENNfLX zkY2{A5mE$Mf{qA+b%*mF6M7~Bj7>0@<_!e~6Wco?f=wY`7X6st0yjlJSD+c9%cVg% zbb0F90ET;qRgiJ6ka5uYdZV{FdT;3Z?3e0r#t%UNdT-FClnauRNpGM1*M8Su2TvponU4%I8?-=3U*~HSup{kO7^v0CXVLGHz7-qguW_u9CU6N$bpDwb^?oyAnhifHJ*7EpC8`1qjdbC2G`cftx`yFP>&fa- zR=inY_DI+893B-1PaJ0a(OC8C94(Wg9D43AF_kD2sD^wNG*=AXh%1XXU>&w^;P&`kT zXOvI>5z$jq6C8?CtvHEeRzs8dPZm!H8x$~NQVQhlP_z?(_e?D!C8DsEGnca-_y>tJ@e22zjbcz#KvIu|3*W;BACGlyU zL-mn%%HUwg1Wj?&@ZmhMyJPFjA>t>DNmb6bK2BEnZ~a7bcufu4&AdQM$oy@E`!b&k^{IU;Ttq_>t1~Q0LF~$86!WnZ z^FufzATVHPQB;XbiT!%5Py!+E)zK<-mMB$W=X42T#zK3g!fzrktQ zw>v8A6iK47{YdMs8eB``JMs}!sjcNHONA9huu6BHy1CG%zu1UE`e7mnaDp3cS!OHd z7nLaE()QxfqN@IcRyFUI0c_{>ujVr1M^L&oiG^$+n&gS*Ba?|h2Et_sLo)rM%*u8I zlAu+^_5d{#g1l8b3x=bJ5u8^9-8u})6J^R1h0n%&g2Di^vPNDlNoH0bT|vTd_s3tFv^f6_S1h-TY9s42vP_np=_&=6%K^5~3>{g4z7(4!!c?9aFK%*$0u!GsZ@Wi_wola80c968H`9*!clr5@N6o*Zk!B{kp4^0AL$cqDZkGi!}y)$BP7( z21U8_6HVy_rX@1XL*b*bAZGU!fH>qSSCg!W8Tf77bb$0|`AcDfC^&MIo3%4D-pnd| zr6v$a`5z#R4(E$7X zNR_GAVACbxer3l8qr=cFMxrO*!!?DWp9%rAgo^&sfi4-qM$q6^$n2$q9fOYRuF**b zZY4zUbtY&7BSCaba+F=!-!7QENLV@_P?XpFrBncTA8N@H$=?d}k*TJWUz@O<*dpho zfldr*mnc3*ba@goR)(X?-is6`fO!*dvo{be)ehGtl~WTvyJf1`EX?0=DW&Y zy_~!4cYCF`Z%4Jgad97Yx4-Anpxga^G;?^F`TltI{`7X{*72GMHjhIJAGOYh8e!K@YQ|r>l~%Idk)9;mr;?GtDhiAy*A~!cC8BeZ*~ApPT!oXXWC^ zplzLE_$cb`Dr)n!tSt>u&x$E3?DpLSDoEz$kEM^r{(UTG&4i2N&4TH3{VJ88tq@hu zs;`IFE2qV+OP!vNjzG=5U$M<&nyIg!-+S{{KR3($^$DM%o=3*EfGb}=4?(@ovi5uT z!jgBMcf$#%q>}pn))hw%CTi+Zl=rp0kfAGdA-OssNa^3D)TxZDTrG;JjzI1L`V-e*h@yU9=FiIS} z`n|7gey!&huqEt2EE!tA^-Uw>!C!x?7a-sx9;Te_ zZNBNLvd8M*2e*c=kKT@LZ};0o^?%ZNezUMVzWLU@-VdDr=>K!Yx@rGJwxSdfpsu#v zh52Orr`=tHz}EQMqDOAI+4w=FVx|I}eR@^s{ko>bc@op^S^kYtx4|ueE1i%A;dHm{ z&lu_bZYvfA7QN7GqsK$N_e-q;ptDCvLjmdSc|@CvU#qn>dj_5iuJiCfB1_ESsIU=OD_lC{gw!(2a0S2s-Y9Fr3CQgdRBW64-yAcY@ z5i(0N@x@q$#p!RQ*|17{DnqXKnPFtg4K}SRIk}s{u~%kXF#FGIhz zpJqJ%x_6jyTM!G(e5>8IRle6Yns9)zmSCz;h}yJNw~I04_LbM%+T3ob7}4@7Onj{x z?q`~b3Oigl0uB}IdUkmn(JfEN<#Hp6#V_^kh4nlHE~QcO`n5ld$bFcUoYmFTp#lKUT$VM5QhX32tT}IyuIkKcdEvoWMJW z3WpAF*F7jR;r?GL?Z`zi*b zHlAGV;44#P|o3Y;uh{$jUK>&3CQ0?jPB(Ef1|% zteq|Qn45`6sD`ZX&&_KqNycHK?GFxJdev?de1b`gkX}<4MPNY+wcp`1$X2x>D^acM z!Ish8w0%E|uUGqv1iq^G;`T|>>&Mtj9qst2^09`|loO;6pkKsJ8pOLw*$#)H)k^Nj z!D^6gfN@u%+Ja6!Xo4+=H~V{j9@GX26X|F0AHdzk>@|q7hu`@%Ue*kPq@oJEK=T85 zf%pP=As%?4R(16K4q#;>3R>(Xd-QV8CK8GBV9BNa( z)W{@tg7|tb`Y{MGv`pNAkDM`}tIf>N>Zk4@{?>1JbR793FnhfJ&!=cS86o!x-z`^e*QZO~Ht+XitNBx_dycA+eJ=PCw+Upd zw+Ht}mH zp0*yh5F??g<%zHNJ9h(PaT5xeHuFAP2maFwZpmpJm-cr@Ho3myj|*2bX?$%PqL*aj z8!J`YX+G=i4+=vqRVQQfcG^zB_Un2E;k4g+My%0goX6!g(fsSq3w^avWC=6`(GR|J zjH@fGF!?=C?oI3k9-QN7W5L{Pbbzs7PPVbv*`gSnzH52kxj94w8N|`clNrdULN2sZ zp!X_Cyw|lccCZOCQ$V90l0`1&ye&u3*O++MX9$ZDyZGXO5_Loc1u}jC5_er03p3)g zABbyTE|J-G_{&3YrOC3Se8L*c1hbrKo%y*0BNy<`-SHQ|mTI8NYfwvlw*z=tiAp!D ztSX2J)q~tCQ3v2l)Bl{3Dyu3d34;WOAG+ubj+r^kM|?p7Fa z-)ZypdTiauF--XGFd$}|npnqAX`4?dnO=2pJjHXYwpNuhb32XI1o=VooFl_}NzjF8cH4$?xTkUIdPIRUFw?)3(Mg zFe)f)00C2c$4PF1VYz2i5s~25I~a#C)IBhgB^V{=iP#zy7U(;7*&rcT^VVe?Jk#x4 zmGwNmpb`Fs4#kFns|Ebq61VX;*{-6F{nVW9WGC!tqn_L86*mtrdfy!+cbtA$^s~h} z4{iQj_n2#29i-s_hkAi6XPqZ;z~-|1NoyymuVX?B7X8+FR$4Cicle{xxn_M`P+h^g zpK9ZK{8j0)%aut4kf>e+-3KwIq(_cw1D4*l9lj#Px8Kn08Wm*>?>qo%%I zo9nUZgSv6k29)fl^e!1SnV89Lg=u)3Q;2D=~>N752=AtmqpqQ4wf4O>tq#6Ji!#iD}!t{{JzVpYw%I5;l zjly$z@+~0A=h#Me$(Bd1#od(?>X+5U?h$MprQ5HhI&f#`tb&XbA*k*+snsdKJ5Bm| z)1}76{@cAW;pE}hs(w#uL$ae|fw;`iz6=w}%j?7TlA$LjtnJfO-y2Kug#-(ki z!4ph5n=Ne!=o)OGSDz@A91>P#{3s#hunArHUAnFn_vYD+Khr&e67_Su}r{BO%wH8e;b=aWOUhW5sB7vuT6 zQ1^wlj`E||N8EkWZp9MLqG?mUCd*Sj-lfJdro}So@onLnH>2y?&E%*prjrvi*u5JS zfB4c9{V?k9|0$9-L|e{%|g@GDkn$>Gn~$mZ2ZD_+tcQIt>no^sJ+EG$rz8K22WV8Ueth$#>Jzx@VB z2{kc65g%?O#8GiHmU|9B@Jhn3CAfUti+{|BNex?&AuY+guD>dU!t$(l)iF`6L+--S zsB~maR!=Z^lo}Enii@n-20L%btgpFNI5t*?4Q0!XQ7(<3rXZ+U#Y=+&nS5)_qBuuQ zVWMdJjWh(grwZ%`_{OJ>K1(@kVwbO0;-vlbdvW36goe)~o{c8%Rc=!(Bv#BdabIt| zB7HY;3{m>DPIe@~F)0`?8~rSsMJ(yL_1r_VD;~3=bGE8v0MqzsOyAM7qdxYuY#c(O zQT@-2ye3}1&F4ce<%$5Gs!WxT^Rq9`K9}=%kBn>9xt~t;w(@WL%y&|p&EJwvTl#&a z;eKUobu*ZXuWtTmqkU9V^<}Iv%bIToV0cKgn&iSr4cpimkGE@Zq)Z4MAA71y`c7gN z(OyVPvN9?8b!O9Nw45-Otoa^#a-Aez|N2pKlF(@WRVJ;t1X1SvvaWnv5=_MM z>BT85^k9JoD)VCBQQIBsG#*elJcVPtk>$OYNhTslsjX@iymDA>aga4;d#s9a({J5Q9s&s=GMD}m z+)8GZTbE}yPYvQMWM}f0umKfA&p}J#XQW2NR@N$FiTK=EC*e(xv#Nd$qheYn0R(^vh+;4(H%EoJ{Ql#MLCrt9_+ z!7NYH^Bn`mc;I`$XE8WUnKV>dn^CGW)_&0;+0BX=K=0WxXSj?rJW58egue1 zc?;i9pYTA*HZtesf)M@`lkVzsZDiI7xoq%waoKyFZ^;D_ zW6MuGNo;oQS`%F&Zs0kNS{9}ny6NLI1$%)bG{=ava=jic`J#uAQP#LRN$qZF@B+ET z02hNXW{Y#3@4^|{a^^R>f?CM~yl-TV_5LvhX!ewLaAjQ#bOm^cA!*ty{v|cl-tI4{ ze~MQ+d7}qp*bQzhncUDXW4;dv?`%awY-Czx7_=z1^@j2 zvjeb4-R8P&IC8XdVIqSEcX@&T*p@%t<~QJ3bj5=ypgGUd&(W%S^KTF0+>e-S z$x{DgRBy2yE%RX8lGc|S*T&z_+1Hk1SHg}a^Jj^pJ%w;@z;8(Dt=0YE#-qdIb91&A zXV}h0U~Aef*pGS(=9HG196rRj%$B&7lgo-K3eOdhO}hN$CKTIH5?e_ln&AK+`Bf@c zcMuqD5RwbeYvW2lO`)7Rq8`1M=KfgG5LFIIS-A-nA*;avmDM~I-3~);*C$=gPrB*e zspbScd3e*T@?Ags`5NZ=2Jo4kks2?)gJLs)i!Eta$n|F5EmPOqrFmK1>I2)m=%~Mz ze>xdODF}(N+D!li$nQg2mWx`{dbI^{XgZrHJ2@VUR(O@QxU$$YJ?BDNOux5;^63A> zH(%EVXV!uWEpJgvSKvRZQX>Bp){@#)d9Av=w=fegzE`h;>@mJu#c@)F@hf$v3eK(y z)=pk9tR)s<6Y&_NMAvz@O7o=3012BH`p5k;NOWpI{%O^hVyPKVEA+Ox-6|6%D}JZ8 zhu>`EOzr23Vn1Bmt>itefODr*hWfRw`n8i3WU9$_-3Mr<%CNq=Td8?keFG1j4ruP; z04X%lFZHxaS=(yZ!j&j@bGKTXz*QJzye6&3vDh*xA*>%A(6;*B(Zs)XlWqs3xLY-5 zrm>PB)U}Inu^7eJ$wAk}F$pSmEWEyj>p#cJtlHHyesHI07eneK(Ajiu5_6n_mFpX7 zT$PsXDIJMyS0!Ut<=^5>st2U#Zgm5@?@|}vS#SS+k?6XDA=e8KGvsXqNuRpa~ zuNg>N&(CQ?ew^z>rm!gU!)dTzvo6%4&c}W_(+j*O>yEx04%p`M;8zl=50O}G7@R8m z{>)#4Ezpd@kfO=IPg2#+=lE^2S1=BFR3(`*6ni3Ge!Y4GAkoYpV zU;0+$>B^8sTbSN!a~Xe|Kh{&~m8vPi3ji|+%%Z3h?jf_9f9F&$h_J2Ds7n|O?dM2S zF$i=D2~^Ti-O$8>&}4Lz$CGvh7)CBns%iLY}Rf0Ykc+ z{}qz=K6J6p?4OWXP$;Cr;k`)my*bL`-$}rnENQGTu-9qsVo*e)RK78Z>(8JMBiI^1 zk%{YHlLaBIcBDGfii7BzLxtvfo=Pck1J#z7*j}2ui9!hHVP-5)ht+`{*o4A>I6jM1 z^NH_Vhr-l935Y@r2g5u>bxlm#CoG#BwMajsHE0)kl%WK)g7yssEr5tZz@VkVX7BJ zMPYzDOFSv6s?ziHFxHhy90bBLpC`rINv~VT9$z2?`RRQjZ8_Ba(NzYS`htE;tk2yIKtr|Bw&2(pqDs>UPI+y8^*0r zVbW*YtSvCGA6GboVR%_Xc&t!0*g{x>w7>PiplZB~=7HZ=Q)I)Tf?#I^kd)@|&e2a( z8TVw21D}Tf%$g-F2#~fr;uQkYUmju*f}#+Vp)h;bi+^Ni53yb#u5lRW+b3TzE%Xds zqu7}+NKv?mTixw(|0f?=F$hCSXGU!;NXfS*M3TT*IfHJL009+jw$>1wXq14VI0Rn( zE3Nr56j1+s9Bji=3w%jk?$(bC^Zh?(7=VEEVdTc)?*0bY@B3}z1z0QK)^&1g|9MFo zKnDR`pMrpbpZDmiAOA+TXW8>YrsDhBnhNRAXAmC_HIA1Ahd7>@6!B?XJL&mec$}~w z^61Xt3kn$m%X!*y}OmYt5bSBEaWpx z>Fv%hy#QXKE4_3wJPb7EFUcd(=P%KVG@~t~5es-Jstj#uZI8sSBRWU*BheUra;vmj zCt{*8-?PW6js|me@AsXLW@=vgD!Aq=h@cz#I*S~?L-pv6WlgHp7%Li9sMk{+Zcbr4BPR4M*bOg?Y@APR1dnXDj}WyR;7d@z z>)um)``&t@>iYc{i2b&b`znpB+ry&!&QA!vpJ=EGIE12TI-yHXTDwU>khOl0y)WwY z)r|V}w0p<3cQ>IBF^rXtnVNotg=_S4-J2QL-MVI5$;|TC6Hlk_cAkziH`@zn)%FjqO+t@XJxC*8s5%d>dY!#I=yAyfR8T7{T219F% z6~@ofnqX>(bp6P5dtQ>wy%Q`9(k*=RSwg!pXmO7}TMV4p_5V9c`wG$UE_p^Wz580> zucxUq3HR3#R#8#i_wT1DoxVw(Z`a0xFaq~b9OWB%MVvkqPRc}gW!TA&MG8YX8*ZuDJJ&e*%r}+es32!_gA26-!i+>Gk-m;|9Psa@v!M{Ht-PP(9y>pr&t%PrXJ_PEKksf$t_!8N((d+l58!zo2kH@N6x1!&Fn!1#nEvn&m& z9>eHM0HR7@=qWUvxaC*!%$HU4PP=?|p1ugLQ`}=A-^~2hwmh-emj{Y%-l)6l^xDL& zmLk{alLLZIohK|$@TuJXL{Y6ZSSPg$!4cEtrZY@boV$1@~d)9DMlquqjJEssVBY%PN zLD;!T-EX4oLFT5%H!GmhE~5Q&eDf$%lc;IL8B5>@#<&GIiu%ds!|Hl#`IR*YbM#&~ z;%pxnPi_5CEWLyn^&#e_OmZX{BJ2%Lk7po7yd=9n2`s`*kHSBrOr3&4u_DePP&3Q2 z@6#z{Dtw4h*M!P_74$2R{w7iF@xd_pSyJb7Qm7RJBL8mNocxW$a;!0 zbsj?VLCclVkHBA*iX6X-3~_D}-vL<15a<;yCdmMWl#DR#{$}n<;|ApO5g&@3B*P$N zrARWmqYpH zt2DF6-3r3+S}RvlMc2Do7ZbbW5f(-OlOfU~uJCxO*=ZplqVYOkS@L{;+lrZT6K@iT z2g^OAh4edUN_N>1v4_XXkhF();a2dmR|!|~?Ax;@BF7?cLCp&|qGiRu^li2#7jXd% zmi%e^Gt>c{1zfioO*ba42;flx-*!a9B!Qu>xYZw0th6PHQMFOOhoY!EeJ|o6;(-T> zOI<^{uzP7XA&HiZC2SsiBk9nOvbHvOBXyDAiAyAteWR9UFrlIwiEEwL83Hd~*cpP0 z-DWaGk=L1Z5p)xH!wJT&s4G!CusM?&Lr%@)KZ|g9S4fS|@|bT$cewON`ZT$vJzO^D zMp;!6^pHWv9QTmHxOSR>ju7!e4Ak-F^e-K6V;l9Xr2h{RE(MxdenWRpimA%FK7U#9>Dz}D_sai*xGx1-@#+6z z#jwFa$j|}QaaeuQjiooa$N0qc8t%}FWw!xBi-0ePYgPO!eWvAX#-t^WY;>cIO&df< z&-CUMy58j4E5~*nfK&SDOQJb%4lchPsHG*q;MHRXr&>11TFJO~5XHy__rz8C9glU! zN-Bm>?G@W8RBCNB{tR#xW}(Y_FgoYAe%5>-POc=)0`q+V zjaO`!1{2(r#l~-^--D3yL$BK_Io7=S7?v8D5m2nSi5C+!25xT(2~7P%8s8{y`nWO({D43$-pZp>IBe|93W~l@>Ns zI0rt8rA*~+soIXB8lArecwK0bav=8#OA%5KeVb%DbT~&A3bUbNyP0ipTn)s1c-ssL-}qqfmJiPNmCvmSmZ^yQi-B zUcF=}12YuV5D_|93(bm~c916-V~==QxRRs{Ky^LVg41+mJjNk=CQ`X8ZtgLSn@_5% zHalJ&#bGE01q>d8sefm*IE87YD$8tGo`%Fbh#M-aFTXTy8^tk&3_gg91k*&mY`@6q zLT!~P3N%ejS^Z1a8MboMmsFiXYWhK3KyYd#hv6YrRbI+hEUUp#1Vh9@T!!A$kTMOdVp*VG0hvh?bpnctb$#{c|Yqf$KJoV z-GaEGnalKJJ6X!oR1T)b1~Ct-Fw|~B&tI2=y9CPxkRO|*oW2hAmorvz`q2O0@E%c1 zNp^5=LiqPWsNS((bvX{517xwKLOf+~v_jyyq)JAU+MM#2D&Gyr01p2J=B0tJ6 zTD29iF%^kOPwKqLwF&7`!=35lq{PY3ws)k|Vi+ltV~P?KL1?N#$w$ZM&kF-#Z& zX-{WN5X-;yA>({e{brOGDXBckvC2V zs&mri+;|~{;jf|4R)K567#xC$yk9D(#nVb6(bInlV>G1A9oS_;1v!k7{!|B22KEI{ z%9ywVDJK<3{SV5dVE;{-``e7EweC=cKBuBYOdPoa29Kaw{zIh6JTIGgtf3JPqZCnA z1}0VGi_Ju>`r9%^DXrhWa;IvehX~sE5bE@_{}P{HlgRJaj-cuU zpGRHP5GQ28Edm0Ye$ zHs7x5XcBO5QcnZV&Xgvox$1A;Z7c|mV#Ay8IxW3M8J+#@wGJv64~FZBpB9EoRQRm! z3UL=|C!q$NK)f)KYtkmg_Iyl8mUhcN$-(0>H210kydgyCJSKSHHWJZfSVNjS-hTY{ z8s;_9OUcNbz8>C09ER{lo|lkN%Kou>u}_G8Fi>tc*;%zixfNZ0a8WikUFB znLl}e1PhG@@R%P3HZ&+`es6#o#gEd_&bF)KDt#yog##)jR|P5sC<=nd+w&$cY)QkK zp)1I4X&K&Ok>g8qr{!~Pu!IGJ7Xc~pxX;tak?@K49e`s>bKftX5vSOeMfW1xwO7?}pr)%7?hgo7Io(%)>Q0k^Owm^D1T#WOvlrJ&ORyLJkrr<+o{^Sl zKZpn;%bf*9yz5*L8I^z*`)P=U4}0*G>BA{TF}qeHAbsh8;032&;)Tqyt2wMm$Qs1E zt141as{Ol^`!{GvLfh)lrtpQUc(7rGH|b)Uj|gZ;n)q_AnB3>%jDPh601Q*nmJ6!@|D+~{R?#pw$d)SR0OJU2giruZqnjhm1} z;FUeY@(^*R#Absxl<7>wo$C&{z+MaKI9kolCR;!}Pisde0=-|-lPfIn5xZ=#Y0n>-|BRlHcsE>nb(wI8NwqW-(T zV}Hhz&D#4){eG$^B}EG7Cf@T87i%F!%Eud~C|gB!0^t*z>=U;9Qo5d<+Yru6d^-Cz z4bBPEAqUVbn;Q@vkHV6{Y-p$UA1?LXC3OM?rJFM$g+wLUHBu;ml^J ze!W>uX49l^{trQj+!8OK*U$?rkq^KqZyT%E*8E0kSH^9d;X=SbLVpM1k4T-qhBnp_ z1*Q$-8zgGS_4`#wJ*obcn`!ZJo+MnzKbPc9AEGS-N`%?aEQCTDBy+jP zw_4DWa3SJ1eO^gaKalUUM56Em_QQ-igN_}*|Ep2`n2mhPMu_+W9>h4g{Xg#fNIm=g zK@2-A$-G~uRA5*%<^lWxXAhYnsRH;JL^jgT|@5a2YU7&Qpf@x24MbnO!y_g;u@MNW9Tv2{Wyg8{R_n3j$w;bcj|NI zHV82iT;G<`#=tmXUPDi6dL7Y!5L@+E`H;j+PzaQ*{Ilkr8BPk7FL?OBwRi_S1jYSZ z$=rh&u+vK>k9+19P_U5LOCO9QM%+geuE)oh@XL2pgOA+cv6}gia}AAW56q1{EVC$;yqeattLlDx*TE~FJA@_iLJkKT|i$o#y zz+64n83(h&-#shSBxt}dM6+4%t!@Uf*fgb;B5|5muPGgYf3)UeElPZc>|Ik^B*jy!uUA^-5sLaL&IE7^&DV@uYu=z6g zT3l8yY(Qb|u)A3h@3OD6#YY01Wb$wEO49R2c|N2d`YlWk~TzoAlkfezeTedF-G=L;%OEafK9{%z&&N3k?E4*A)D398+d>#XBLI;+02bK6yRlRgbz;)tcNTX&6fcjv{P;SHf)}+eG znZ;>drA4<7b_uVhvPeof_Rh79l*>`e2re&>c0gf5_B&^U$Z zY!-4C1aO@!jRd_@i!nnPq82Yd?stU%x`)r=$mEP(Fy7P|Z~NZFaNm8q32KF$8EC=4$Otc0GQ}p2PBtut1{UM$*Kd?-%qF+$b=dhdRnj9~G(2R+!cT z3AbG$|2BDyI>WYBm^le7q$M}vAPxr+4vUI9bXsAf5Ca9@CLQ(-k z@|>hOqA3(G(^iUL9j6B;vuqC z;;{gCQUn|juZ-W%LkT<6QO!|*gE)r}rw=s=azq<$xQ>4Hpgv2;%lej|mAr^euL7W! zMHJ6; zwb%pu<1z0aZ+9^{0y&wXV}y|$tE`!9K*U=lnR92L4OlXzcn0c4$YA#LvFpF%FO%(F zz_D#rQmV7I$wYWq#CT|EsZ_5zt|JxZyH0XS+TBrPa>{P^Y8T?5zwr0nEPjYH18yYI1D%WS+ zwgdZ!cJV~{EVzhZHPV0yOPMkiqgC;g4qj)3YvJMqKBu)z0XCl%Z`&Ln+Ss@4upJ^(v15+^>As8-0C_R<9(5~8{=_s3EhIP0iOMW|H_7|!0TV(&Nz${uENS-ATK(?y+!Iq*mamg-yq+#0MhO8lc z@JRt8{AEaSDmajj%t~f3n=5}z`s}K>qZTlqc)DchkR0J0%Z-69N!^Sw-^j{l*Kwlb zjauADFC+#!PfA((XTAA!cvg~p5Bt2>RtnFU(GwpZRZp35xiL+JKziZ$+L<;vHwVI& zn$Pz_#6$orYpo;Y!WZe4`O|anzM5;z>t5#2Mt{*%$foua?!`oy;IOh+I03Zt;uO7e zo54!>DsPG_t%H}%icc2-PQEA0WcT91V+C^Ehj7VK&DLh~KqWo$8=B2Qxv{r?sxpcD z7%9xphWJvK(mg*#{8tZ21JhbB35OsWXjJ7ycd|(W`dV5qDG)>AK14#+ti3i{Lb6aF zExL^epME|b(3mO#5Lj_ri_T21s+gg#j{)M44!CpX)b$XWOkv<@6b(y}>L<8ZB-Ya> zlFFlL81IVKj&|2dpCqFbJRIvRPq#o0bf+s%yCendXFYD5~hVTmDU8Q z6tEk-K?Q+1so_3dqInL8WQ+nmkT_$e;WPw=S$3TOqhb7YFP}cDNSYr4Q?nI?zMhF* znRhJcf}Zu)KrMMD{=W$o@nyNI+;@;o>VWu|CfNK=x&K2dwM%W7=C1!A>Tm)-)QO?| zZ*|rPKy}L& zdOhGEAjh!(u{E%hiL!wjMc_YWnTs9OLG3x~JP|a72MA3(++XF~v|2jwx^sM4X0>mh*OQ zrNsKhfSoxtJd&A4Uy#=y$EW@6VqcI$pTRO6)DwmB@X))pN$q=51WikCL|Z%@M4(j} zPu)Wq*C)Vlr>f!a2ay_Dijo%wXpkbT=NqGswacUzI?+4~P3(>~*)p^%R$8Ke_8ETj zIA|w*r?*1t=R~E##XceqSyMLYf@E6gh>6cYM>rCj zG$ z_ADN`A$zzvU625-*T)|m*PFuHGqC;b#S>qo`BzSRcTddetsEO zOA0Y%vy3zT^;#IIzFA6oD;Aa)GuWukuCyl+qZQ0jex@fbUjc3X9zYzSQe^?DP(9Wr zz&u(zoaGyYr?j~;to(Zwp_j?{mo6Bw&cTdyR7p@ELikzwV{RY^Rw_%mnyOXVm3Tz_&><{*a7_q7G-x&p4QZGc#A@}6a@ z-`y8d1>yHHlPWFenh492{V)C8m-J<|$jM%9WlLPgQEo)1MGLV(q4V60he%Fsq#QrYU<-9PdOB?DspPyj#(%dtNNV0Kw;ix`0%M$Z* zzG*U+yUc&881X}Knb?s3BX9FvZ)_8a^TKos4RXSDn~cbW?k6D#+v@jUhILaIf>hvz z=0jufx|S$YS+{^p4zK5!>Vd3!&$E2e)Q8t!!>#ENeusNozre#*xCK=+@DKf8(<|Lf3|0Q)g^!u-vm9VX0Gajb?mtLW**A`65lv*pCg?~OX-2lk zr(kIUPKKI#`opHliQVy=lH`P>Y|9UKig8CK|6{&AE0o$^-ua?2(N)-{(J(a(A508p z#yMQ_#d?u$IphjOtIXqOuQ!3kFq3lgSfdgr& zt_4Q*OEop&e9UzVHFvCRKihZ%DBiNirHB+N!_@d(T=PZ&!%ygAB`~GVk)L)mFeZNK zH*ZA7$-kw!L-`3CY#NmvI_Z~3eG*9E?|DHt zNe&tagX1hF4Nk)IKJ#e!{`-|ctHq7Jo>H8aw)LtP*Pgx~oTbS7fRE^@Ya-N$Cgu@E zD)7^GI_lv@Gn3YWDRrw_YFl;%CA_y+rOSr%SBz-bfpSX2{upeyv0BbF#{*V+A$!3bWVH_C*cy!LxD$`s90#oqtqgk*bg$otz57zSzj5^NN`mjGs{PyIeH77A;&!{5LGFL(|Di6Ar z&D57ktDyfG85^BZ3c6a^H%&X+vg-l4E5YiInUZUC=4DF3aP>A{y@U?n?uKh9xXJi8EUs>^h^_*)0giX+uMVcBwxJX~1t zzDcM#Xx)r)GkE0R+Jlvjj%llPx*YcEm}J@J44s_pt}hHApIzUUj4c%Vd>y5ptSfRa`rtYe10^W%Dk4| zJlj@g7Rh|H2kwXAn-j}>Q)`djWKXW3tsFwc%ghZWnoLCHI3BYHU;L)UO{!3{?vARy z{Xt*qtzfFkNM-Gw9V8gjRNd8~PsFs#OIkPOS&657wPd-^HQs+elF1^Zt;0|tARV+I zAQ=C8B%RGoY)qK`INW~85b*feXA)Jl#=L-Ic;phrj_`MrDe zlz%Oqg%N^2hdao<-fJBydms{T7bD$|Tr_zFy$vnn?tncZkuOSJG|}u?t<-#Ng{y(V z@_>Qnp-E|F2qWnc2S1o-Lp32pze$Msj1&Z&xJ>rlvTcLj1LYa>SAN)! z<;^*mbr=Nn?=BZ$AWm97(8tsPVis$g)VukR_mt(-+9i-VF$4Gm4e`Y8s<7!A0a)G8rpj3iE9|8JfB~=3eu8{Ewe8Fat+qDN)EdkVBe!yX-gaInIwFK z%eYZ=Mk=3TLs|$In-B+~=;Vx?Px=BL&GBw+kf{Wa0^{$^19zw+fp({!{F%9$6q|!N z&L}3^@N?N`HowSzK)$g?%(z`txfPZ)1IxBI!e6&eZI(=C)Q0+hwRP1|QEgv%q)R#_ zq>=6#l~MtvMY_u&hVBrM9AfB{MvxK^WI#GcDd|QA!6BsU0gAwH^!MKLG0XeMy=%_8 z-*;x8yUscL+k4%+KPf!$DjA$&_z+I?N|=@Mh@r=q@T9tJoBnhU#5KRjbB<^_{B1$DLzrZR$-yrYMLR| z{%IG1JC#;zglZpNVUJfi%TvFs4euFQ-S$K4W|etx>bZJ-;`E}-c?WPIqRzsiw&ZMH zL9VI7liPhSa&$sssb^79loNtWC{b7=RH!U{f9yVVHWN6SLk&x@0S+P%otDYsmxi6tm)K_FyHQ_sqc* zVyCFbEcV>c0s=DzFbzB}I;@|U4U6aq?yX{^1@1bRx-TgxW6%r{sPncX?t9F}LRK{V zJM#}lUHTO(YE8Bo=LAY>v*&k?93?9ldzHkwtniFX)oHQHrRwjaSD`lG61%XMC zpZ!L4cw9-1WceL6mIw1Ri~Lj@bm*}k?6fnjV%{>&mqGdxh-NYKzH9?lldQ)L-X=BE z34YB^zB)T zvbNQ$Kr&PH)}8@n@q}+S8Nh4TZ$8489K};tUS6}jlW;F8w=(_0&)r~JV7&u*m+VF5t-YW&_YUSzf;q0jI2o|*SuyOpg?N!Fs z5OfJq0!{)S^dV!C42|Et6PYu&HXu+ZTelz&c&^SM=nrOvk826U@H z|Ck(OR>6g(B4M~5QcTgLqKs%O)W)O}K`>sPxH|@sRJ@btj2|t1Rh}BW?sDWRu>qP1 za!O^ccdg@96xz5}^nK^$-A?;PYuo*(`|_-GjY1{Pm3{oAd^#D-X#-)>`T|zDp0zuc zppmSmi?MI*EX`cn42o=r7T_XUCVWJV>x-69#wLg0UO}F^W^ya3$iFgb#G*S_>1LFN zNiTHObX3clb!E?|&oQn(P*}67+7ilOOO)ZXR}BAYvZkA}i~Fyqnv+oD6e>jdz`L#M zV7X5?AIp{!q72}6n0#cy=o8EVW}CkcEx+(r1BzRH@UHUMnY_&)yAtMP{(6LmYm}26 z?@7h&f{5&vc5yMbUSJha#tvJ$F_hy2tCWY=qU(psaU20+_5-Gs%#Zu)pIShJ^=!&c zl72WV-KO+?IkF!+JQic9c@_l7Q>Y1K7L_c9 zC017`r)vULWP=?7IBDN(@Jrs;)l=3=Etzfd8$ip z=>zAu_GjjlGh@NGp^}iUqqJrHy_9OC<6zlGJzfSj|6%x;7vpDZy{ON^kF?>U;b2_t ziu{*9L?j5l9E^EpYc5#ny0%n9xFBVpqX`L$o2VSZNvr3PimsfR%h;UyOk#SPqg(H% zbl+%ox@u1r2(#&Q*eX5D9Ncs}RER0K4^fF8WD#X@=C%~!9j1nqhDfVON=a`_rKn*` zay;CQ(2!`>2wogI$_(}wXTTTa4$2I@)yG>6!WzPkvyCQjeTeTo&BrVK?DY6!ku;U} zg8IBH_9CZ}#HYCJs8(I$a*7|sdP}2Ur^dYCcbv@&iAkYK8V>KVjY)M9AGeg`DQ}v> zxZWuj2iN>)DsGkZ))=T+vF7H3t5D6$i_{lxiDnqq$BpnOo)XTn9JncKX1=81yp=UH z&aS3Rm+jY)sqsuQJ|TzLTs$SFjFZPYljwkNQi07-O+YJ_o1LnY@VgdV=J~w+MK$UT zTw9LAugI)kg2!ik??sd4a`#%uGamt|r&b3msbw-hjd0`NB zSZ}Bq*5$*~NZE&Z&JTBkE-s1dZbn%`q>{^Y#i2FdsrLi&3Drf`@7sNUiXmE-S3~tA z8s+VVyLxke`Lwz{n59uT8!!iT-PIVeqQ1NM5qJPIkvzj|!{Ib*U9EJ*S=AETT$g(h zaCecec^{?&`hizPtXdTTHOY}q?sztMHbZ6RqZhEq_zbvK9_Mx0MyRGpL{Gm&jC)Pf z)cC~5WZwgJup|pK;S){Hxp4CP0&c8+lWzqwucD)#=(r=gRfTiB^Wm6mb-H6`@QwU+ zKB4ZG8#5h5?hfV!bU60r_e2M!!)LiJ3lNutS68gU-YHNkHUJRD3;@ueRxDKE?qACk zN_nB?r;~*pSis)J2DGi~;6kB8DbwsP$?f=&^cFuQZdbENM-jgQFNTEO+^ZCcBK~UE zh=<8)6fZa}yvNhja}vJ;{))U4a9Kn7#3S2Pb2J3__<@`fE-4`;?R!@HeepY#W|;e* z7K-pS!xGJgwiag3+p-TA+=r$8*PIGJ6q!FdLzWrjRz5w!{eII(?u*&68+8vuLPy!BJAd4NVtNBANWH+S#nvRH=neoUFJXvsJLrV8qa ziL3Lvy@=`DcK1zaV9C=>x31P$wkPiIy+sugvhJN_E68BkyGerg@GGL{S5jP#FYzNY0_3L-P^S~YXA z$Q_Et4}$X!md8`(CN`HB8VW}$ z`5D9O8blL@L*cQ6Sa|Y`G7F?(1Lhc9DIwUxM67--pCbW=SVsi5`=Z`*m~%MO(v+xD zsL_5lUa~pR3Zg14Jt_L}FlB1t zG)}b{-BFZP&O5QP(a#;fR+1IcrVub!HRriQ|Ad*nENL^lY75w;_jQXC&h;Esr! zZDqlp{ixY)vYPMHL$EekU^!Ou-Su4Ik4OS6)o2xws1SCDS_lYdWH;aMzL^Klq9o^` zTom1&t^qDZ{R&y|G)M63Onf8a+$c6vto0WwaS*i{(L9SbKtjtm-;HVy!d$hI z!qFHX)31^k#t2gA#R47F6cMtofw4t=|4gnPcG?Ocq#4t``8Zf;wqtzOXV^-SWRIK^ zm&B#tAQ%?NEbMOs-maZ-rkW*|s4~x8|Gb>7Q#49pUVO>q7)xsGdzjD!yGk6kxI zj>Vg$CN@0nUQNMI+g@PHjvP`OtfrWcEPDDB%8+{3?jR+*`PER1|I}7Um;Y;cebShS zzptm-_A`eB2YoOcgF9vD9*C#%UU!8{n&K6G2K|xYMOUu>m zCg0EFWiJaog*&dN$k>|9U`23*vH2O&bW3PIPu%%GpuXwQriYIoMQt>{FT8;iVYO@&1K~gvBw*dS0Okz zZ1bQ0@pLH)Iqs6xRJn#hiTN`;jtAg-A*o;axHvHt<)QYYVs1ZW$3I6fsto`zx`zq| z+ca;nIkqHaZ?;>d*mpi$T0YwuAM|M&5Kx%TKlNCcs_9qN`* z6p-u+a1GV+@7`nO?Di`XjSfGWpQqVG!NFJn0O=KY5US;0xP^<$pZ+yX;`zEBs#m58 z^v*L-1L5uLW-W-K@N`7k{wKIoFg>{ls`CLUR4fG%`@6G+DWm*7vb7o7`TJO1VpivKUyRV9hef-bdwvnVC}Jt|j(7djr@AN-A9 ePX5mnyXqZks$ipL(9c;#2CzU)kBQ8mzy1euIQpyr literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownForLite.scala b/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownForLite.scala deleted file mode 100644 index e4b23ae52..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromKnownForLite.scala +++ /dev/null @@ -1,354 +0,0 @@ -package com.twitter.simclusters_v2.scalding - -import com.twitter.algebird.Semigroup -import com.twitter.bijection.Injection -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite.{D, WriteExtension} -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.scalding_internal.job.analytics_batch.{ - AnalyticsBatchExecution, - AnalyticsBatchExecutionArgs, - BatchDescription, - BatchFirstTime, - BatchIncrement, - TwitterScheduledExecutionApp -} -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.{ClusterId, ModelVersions, UserId} -import com.twitter.simclusters_v2.hdfs_sources.{ - AdhocKeyValSources, - InternalDataPaths, - SimclustersV2KnownFor20M145K2020ScalaDataset, - SimclustersV2RawInterestedInLite20M145K2020ScalaDataset, - SimclustersV2RawInterestedIn20M145KUpdatedScalaDataset, - UserAndNeighborsFixedPathSource, - UserUserGraphScalaDataset -} -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.thriftscala.{ - ClustersUserIsInterestedIn, - ClustersUserIsKnownFor, - UserAndNeighbors, - UserToInterestedInClusterScores -} -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import java.util.TimeZone - -/** - * This file implements the job for computing users' interestedIn vector from KnownFor data set. - * - * It reads the UserUserGraphScalaDataset to get user-user follow + fav graph, and then - * based on the known-for clusters of each followed/faved user, we calculate how much a user is - * interestedIn a cluster. - * - * The main differences of the InterestedInFromKnownForLite compared to InterestedInFromKnownFor are - * the following: - * - We read the UserUserGraph dataset that doesnot contain the producer normalized scores - * - We donot compute the cluster normalized scores for the clusters per user - * - For social proof thresholding, we donot keep track of the entire list of follow and - * fav social proofs but rather make use of numFollowSocial and numFavSocial (this introduces - * some noise if follow and fav social proof contain the same users) - * - Store 200 clusters per user compared to 50 in IIKF - * - Runs more frequently compared to weekly in IIKF - */ -/** - * Production job for computing interestedIn data set for the model version 20M145K2020. - * - * To deploy the job: - * - * capesospy-v2 update --build_locally --start_cron interested_in_lite_for_20M_145k_2020 \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object InterestedInFromKnownForLite20M145K2020 extends InterestedInFromKnownForLite { - override val firstTime: String = "2021-04-24" - override val outputKVDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsInterestedIn]] = - SimclustersV2RawInterestedInLite20M145K2020ScalaDataset - override val outputPath: String = InternalDataPaths.RawInterestedInLite2020Path - override val knownForModelVersion: String = ModelVersions.Model20M145K2020 - override val knownForDALDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] = - SimclustersV2KnownFor20M145K2020ScalaDataset -} -trait InterestedInFromKnownForLite extends TwitterScheduledExecutionApp { - implicit val tz = DateOps.UTC - implicit val parser = DateParser.default - - def firstTime: String - val batchIncrement: Duration = Days(2) - val lookBackDays: Duration = Days(30) - - def outputKVDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsInterestedIn]] - def outputPath: String - def knownForModelVersion: String - def knownForDALDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] - - private lazy val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(this.getClass.getName.replace("$", "")), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - override def scheduledJob: Execution[Unit] = AnalyticsBatchExecution(execArgs) { - implicit dateRange => - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val userUserGraph = - DAL.readMostRecentSnapshot(UserUserGraphScalaDataset).toTypedPipe - val knownFor = KnownForSources.fromKeyVal( - DAL.readMostRecentSnapshot(knownForDALDataset, dateRange.extend(Days(30))).toTypedPipe, - knownForModelVersion - ) - - val socialProofThreshold = args.int("socialProofThreshold", 2) - val maxClustersPerUser = args.int("maxClustersPerUser", 200) - - val result = InterestedInFromKnownForLite - .run( - userUserGraph, - knownFor, - socialProofThreshold, - maxClustersPerUser, - knownForModelVersion - ) - - val writeKeyValResultExec = result - .map { - case (userId, clusters) => KeyVal(userId, clusters) - }.writeDALVersionedKeyValExecution( - outputKVDataset, - D.Suffix(outputPath) - ) - Util.printCounters(writeKeyValResultExec) - } - } - } -} - -/** - * Adhoc job to compute user interestedIn. - * - * scalding remote run \ - * --target src/scala/com/twitter/simclusters_v2/scalding:interested_in_lite_20m_145k_2020-adhoc \ - * --main-class com.twitter.simclusters_v2.scalding.InterestedInFromKnownForLite20M145K2020Adhoc \ - * --user cassowary --cluster bluebird-qus1 \ - * --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - * --principal service_acoount@TWITTER.BIZ \ - * -- \ - * --outputDir /gcs/user/cassowary/adhoc/interested_in_from_knownfor_lite/ \ - * --date 2020-08-25 - */ -object InterestedInFromKnownForLite20M145K2020Adhoc extends AdhocExecutionApp { - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val userUserGraph = DAL.readMostRecentSnapshot(UserUserGraphScalaDataset).toTypedPipe - val socialProofThreshold = args.int("socialProofThreshold", 2) - val maxClustersPerUser = args.int("maxClustersPerUser", 200) - val knownForModelVersion = ModelVersions.Model20M145K2020 - val knownFor = KnownForSources.fromKeyVal( - DAL - .readMostRecentSnapshotNoOlderThan( - SimclustersV2KnownFor20M145K2020ScalaDataset, - Days(30)).toTypedPipe, - knownForModelVersion - ) - - val outputSink = AdhocKeyValSources.interestedInSource(args("outputDir")) - Util.printCounters( - InterestedInFromKnownForLite - .run( - userUserGraph, - knownFor, - socialProofThreshold, - maxClustersPerUser, - knownForModelVersion - ).writeExecution(outputSink) - ) - } - -} - -object InterestedInFromKnownForLite { - private def ifNanMake0(x: Double): Double = if (x.isNaN) 0.0 else x - - case class SrcClusterIntermediateInfo( - followScore: Double, - favScore: Double, - logFavScore: Double, - numFollowed: Int, - numFaved: Int) { - - // helper function used for test cases - override def equals(obj: scala.Any): Boolean = { - obj match { - case that: SrcClusterIntermediateInfo => - math.abs(followScore - that.followScore) < 1e-5 && - math.abs(favScore - that.favScore) < 1e-5 && - math.abs(logFavScore - that.logFavScore) < 1e-5 && - numFollowed == that.numFollowed && - numFaved == that.numFaved - case _ => false - } - } - } - - implicit object SrcClusterIntermediateInfoSemigroup - extends Semigroup[SrcClusterIntermediateInfo] { - override def plus( - left: SrcClusterIntermediateInfo, - right: SrcClusterIntermediateInfo - ): SrcClusterIntermediateInfo = { - SrcClusterIntermediateInfo( - followScore = left.followScore + right.followScore, - favScore = left.favScore + right.favScore, - logFavScore = left.logFavScore + right.logFavScore, - numFollowed = left.numFollowed + right.numFollowed, - numFaved = left.numFaved + right.numFaved - ) - } - } - - def run( - adjacencyLists: TypedPipe[UserAndNeighbors], - knownFor: TypedPipe[(UserId, Array[(ClusterId, Float)])], - socialProofThreshold: Int, - maxClustersPerUser: Int, - knownForModelVersion: String - )( - implicit uniqueId: UniqueID - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - InterestedInFromKnownFor.keepOnlyTopClusters( - groupClusterScores( - userClusterPairs( - adjacencyLists, - knownFor, - socialProofThreshold - ) - ), - maxClustersPerUser, - knownForModelVersion - ) - } - - def userClusterPairs( - adjacencyLists: TypedPipe[UserAndNeighbors], - knownFor: TypedPipe[(Long, Array[(Int, Float)])], - socialProofThreshold: Int - )( - implicit uniqueId: UniqueID - ): TypedPipe[((Long, Int), SrcClusterIntermediateInfo)] = { - val edgesToUsersWithKnownFor = Stat("num_edges_to_users_with_known_for") - val srcDestClusterTriples = Stat("num_src_dest_cluster_triples") - val srcClusterPairsBeforeSocialProofThresholding = - Stat("num_src_cluster_pairs_before_social_proof_thresholding") - val srcClusterPairsAfterSocialProofThresholding = - Stat("num_src_cluster_pairs_after_social_proof_thresholding") - - val edges = adjacencyLists.flatMap { - case UserAndNeighbors(srcId, neighborsWithWeights) => - neighborsWithWeights.map { neighborWithWeights => - ( - neighborWithWeights.neighborId, - neighborWithWeights.copy(neighborId = srcId) - ) - } - } - - implicit val l2b: Long => Array[Byte] = Injection.long2BigEndian - - edges - .sketch(4000) - .join(knownFor) - .flatMap { - case (destId, (srcWithWeights, clusterArray)) => - edgesToUsersWithKnownFor.inc() - clusterArray.toList.map { - case (clusterId, knownForScoreF) => - val knownForScore = math.max(0.0, knownForScoreF.toDouble) - - srcDestClusterTriples.inc() - val followScore = - if (srcWithWeights.isFollowed.contains(true)) knownForScore else 0.0 - val favScore = - srcWithWeights.favScoreHalfLife100Days.getOrElse(0.0) * knownForScore - val logFavScore = srcWithWeights.logFavScore.getOrElse(0.0) * knownForScore - val numFollowed = if (srcWithWeights.isFollowed.contains(true)) { - 1 - } else 0 - - val numFaved = if (srcWithWeights.favScoreHalfLife100Days.exists(_ > 0)) { - 1 - } else 0 - - ( - (srcWithWeights.neighborId, clusterId), - SrcClusterIntermediateInfo( - followScore, - favScore, - logFavScore, - numFollowed, - numFaved - ) - ) - } - } - .sumByKey - .withReducers(10000) - .filter { - case ((_, _), SrcClusterIntermediateInfo(_, _, _, numFollowed, numFaved)) => - srcClusterPairsBeforeSocialProofThresholding.inc() - // we donot remove duplicates - val socialProofSize = numFollowed + numFaved - val result = socialProofSize >= socialProofThreshold - if (result) { - srcClusterPairsAfterSocialProofThresholding.inc() - } - result - } - } - - def groupClusterScores( - intermediate: TypedPipe[((Long, Int), SrcClusterIntermediateInfo)] - )( - implicit uniqueId: UniqueID - ): TypedPipe[(Long, List[(Int, UserToInterestedInClusterScores)])] = { - - implicit val i2b: Int => Array[Byte] = Injection.int2BigEndian - - intermediate - .map { - case ( - (srcId, clusterId), - SrcClusterIntermediateInfo( - followScore, - favScore, - logFavScore, - numFollowed, - numFaved - )) => - ( - srcId, - List( - ( - clusterId, - UserToInterestedInClusterScores( - followScore = Some(ifNanMake0(followScore)), - favScore = Some(ifNanMake0(favScore)), - logFavScore = Some(ifNanMake0(logFavScore)), - numUsersBeingFollowed = Some(numFollowed), - numUsersThatWereFaved = Some(numFaved) - )) - ) - ) - } - .sumByKey - // .withReducers(1000) - .toTypedPipe - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromProducerEmbeddingsAdhocApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromProducerEmbeddingsAdhocApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..d770e0895bce2bda5bc89645c1b3e3de283528e6 GIT binary patch literal 40008 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromProducerEmbeddingsAdhocApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromProducerEmbeddingsAdhocApp.scala deleted file mode 100644 index d924dd693..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/InterestedInFromProducerEmbeddingsAdhocApp.scala +++ /dev/null @@ -1,290 +0,0 @@ -package com.twitter.simclusters_v2.scalding - -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding.Execution -import com.twitter.scalding.TypedTsv -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.ProcAtla -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources.ProducerEmbeddingSources -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import com.twitter.simclusters_v2.hdfs_sources.DataSources -import com.twitter.simclusters_v2.hdfs_sources.SimclustersV2InterestedInFromProducerEmbeddings20M145KUpdatedScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.UserAndNeighborsFixedPathSource -import com.twitter.simclusters_v2.hdfs_sources.UserUserNormalizedGraphScalaDataset -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import com.twitter.simclusters_v2.thriftscala.EmbeddingType -import com.twitter.simclusters_v2.thriftscala.SimClusterWithScore -import com.twitter.simclusters_v2.thriftscala.TopSimClustersWithScore -import com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusterScores -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone -import scala.util.Random - -/** - * This file implements the job for computing users' interestedIn vector from the producerEmbeddings data set. - * - * It reads the UserUserNormalizedGraphScalaDataset to get user-user follow + fav graph, and then - * based on the producerEmbedding clusters of each followed/faved user, we calculate how much a user is - * interestedIn a cluster. To compute the engagement and determine the clusters for the user, we reuse - * the functions defined in InterestedInKnownFor. - * - * Using producerEmbeddings instead of knownFor to obtain interestedIn increases the coverage (especially - * for medium and light users) and also the density of the cluster embeddings for the user. - */ -/** - * Adhoc job to generate the interestedIn from producer embeddings for the model version 20M145KUpdated - * - scalding remote run \ - --target src/scala/com/twitter/simclusters_v2/scalding:interested_in_from_producer_embeddings \ - --main-class com.twitter.simclusters_v2.scalding.InterestedInFromProducerEmbeddingsAdhocApp \ - --user cassowary --cluster bluebird-qus1 \ - --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - --principal service_acoount@TWITTER.BIZ \ - -- \ - --outputDir /gcs/user/cassowary/adhoc/interested_in_from_prod_embeddings/ \ - --date 2020-08-25 --typedTsv true - */ -object InterestedInFromProducerEmbeddingsAdhocApp extends AdhocExecutionApp { - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val outputDir = args("outputDir") - val inputGraph = args.optional("graphInputDir") match { - case Some(inputDir) => TypedPipe.from(UserAndNeighborsFixedPathSource(inputDir)) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(30)) - .toTypedPipe - } - val socialProofThreshold = args.int("socialProofThreshold", 2) - val maxClustersPerUserFinalResult = args.int("maxInterestedInClustersPerUser", 50) - val maxClustersFromProducer = args.int("maxClustersPerProducer", 25) - val typedTsvTag = args.boolean("typedTsv") - - val embeddingType = - EmbeddingType.ProducerFavBasedSemanticCoreEntity - val modelVersion = ModelVersions.Model20M145KUpdated - val producerEmbeddings = ProducerEmbeddingSources - .producerEmbeddingSourceLegacy(embeddingType, ModelVersions.toModelVersion(modelVersion))( - dateRange.embiggen(Days(7))) - - import InterestedInFromProducerEmbeddingsBatchApp._ - - val numProducerMappings = Stat("num_producer_embeddings_total") - val numProducersWithLargeClusterMappings = Stat( - "num_producers_with_more_clusters_than_threshold") - val numProducersWithSmallClusterMappings = Stat( - "num_producers_with_clusters_less_than_threshold") - val totalClustersCoverageProducerEmbeddings = Stat("num_clusters_total_producer_embeddings") - - val producerEmbeddingsWithScore = producerEmbeddings.map { - case (userId: Long, topSimClusters: TopSimClustersWithScore) => - ( - userId, - topSimClusters.topClusters.toArray - .map { - case (simCluster: SimClusterWithScore) => - (simCluster.clusterId, simCluster.score.toFloat) - } - ) - } - val producerEmbeddingsPruned = producerEmbeddingsWithScore.map { - case (producerId, clusterArray) => - numProducerMappings.inc() - val clusterSize = clusterArray.size - totalClustersCoverageProducerEmbeddings.incBy(clusterSize) - val prunedList = if (clusterSize > maxClustersFromProducer) { - numProducersWithLargeClusterMappings.inc() - clusterArray - .sortBy { - case (_, knownForScore) => -knownForScore - }.take(maxClustersFromProducer) - } else { - numProducersWithSmallClusterMappings.inc() - clusterArray - } - (producerId, prunedList) - } - - val result = InterestedInFromKnownFor - .run( - inputGraph, - producerEmbeddingsPruned, - socialProofThreshold, - maxClustersPerUserFinalResult, - modelVersion - ) - - val resultWithoutSocial = getInterestedInDiscardSocial(result) - - if (typedTsvTag) { - Util.printCounters( - resultWithoutSocial - .map { - case (userId: Long, clusters: ClustersUserIsInterestedIn) => - ( - userId, - clusters.clusterIdToScores.keys.toString() - ) - } - .writeExecution( - TypedTsv(outputDir) - ) - ) - } else { - Util.printCounters( - resultWithoutSocial - .writeExecution( - AdhocKeyValSources.interestedInSource(outputDir) - ) - ) - } - } -} - -/** - * Production job for computing interestedIn data set from the producer embeddings for the model version 20M145KUpdated. - * It writes the data set in KeyVal format to produce a MH DAL data set. - * - * To deploy the job: - * - * capesospy-v2 update --build_locally --start_cron - * --start_cron interested_in_from_producer_embeddings - * src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object InterestedInFromProducerEmbeddingsBatchApp extends ScheduledExecutionApp { - override val firstTime: RichDate = RichDate("2019-11-01") - - override val batchIncrement: Duration = Days(7) - - def getPrunedEmbeddings( - producerEmbeddings: TypedPipe[(Long, TopSimClustersWithScore)], - maxClustersFromProducer: Int - ): TypedPipe[(Long, TopSimClustersWithScore)] = { - producerEmbeddings.map { - case (producerId, producerClusters) => - val prunedProducerClusters = - producerClusters.topClusters - .sortBy { - case simCluster => -simCluster.score.toFloat - }.take(maxClustersFromProducer) - (producerId, TopSimClustersWithScore(prunedProducerClusters, producerClusters.modelVersion)) - } - } - - def getInterestedInDiscardSocial( - interestedInFromProducersResult: TypedPipe[(UserId, ClustersUserIsInterestedIn)] - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - interestedInFromProducersResult.map { - case (srcId, fullClusterList) => - val fullClusterListWithoutSocial = fullClusterList.clusterIdToScores.map { - case (clusterId, clusterDetails) => - val clusterDetailsWithoutSocial = UserToInterestedInClusterScores( - followScore = clusterDetails.followScore, - followScoreClusterNormalizedOnly = clusterDetails.followScoreClusterNormalizedOnly, - followScoreProducerNormalizedOnly = clusterDetails.followScoreProducerNormalizedOnly, - followScoreClusterAndProducerNormalized = - clusterDetails.followScoreClusterAndProducerNormalized, - favScore = clusterDetails.favScore, - favScoreClusterNormalizedOnly = clusterDetails.favScoreClusterNormalizedOnly, - favScoreProducerNormalizedOnly = clusterDetails.favScoreProducerNormalizedOnly, - favScoreClusterAndProducerNormalized = - clusterDetails.favScoreClusterAndProducerNormalized, - // Social proof is currently not being used anywhere else, hence being discarded to reduce space for this dataset - usersBeingFollowed = None, - usersThatWereFaved = None, - numUsersInterestedInThisClusterUpperBound = - clusterDetails.numUsersInterestedInThisClusterUpperBound, - logFavScore = clusterDetails.logFavScore, - logFavScoreClusterNormalizedOnly = clusterDetails.logFavScoreClusterNormalizedOnly, - // Counts of the social proof are maintained - numUsersBeingFollowed = Some(clusterDetails.usersBeingFollowed.getOrElse(Nil).size), - numUsersThatWereFaved = Some(clusterDetails.usersThatWereFaved.getOrElse(Nil).size) - ) - (clusterId, clusterDetailsWithoutSocial) - } - ( - srcId, - ClustersUserIsInterestedIn( - fullClusterList.knownForModelVersion, - fullClusterListWithoutSocial)) - } - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - //Input args for the run - val socialProofThreshold = args.int("socialProofThreshold", 2) - val maxClustersFromProducer = args.int("maxClustersPerProducer", 25) - val maxClustersPerUserFinalResult = args.int("maxInterestedInClustersPerUser", 50) - - //Path variables - val modelVersionUpdated = ModelVersions.toModelVersion(ModelVersions.Model20M145KUpdated) - val rootPath: String = s"/user/cassowary/manhattan_sequence_files" - val interestedInFromProducersPath = - rootPath + "/interested_in_from_producer_embeddings/" + modelVersionUpdated - - //Input adjacency list and producer embeddings - val userUserNormalGraph = - DataSources.userUserNormalizedGraphSource(dateRange.prepend(Days(7))).forceToDisk - val outputKVDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsInterestedIn]] = - SimclustersV2InterestedInFromProducerEmbeddings20M145KUpdatedScalaDataset - val producerEmbeddings = ProducerEmbeddingSources - .producerEmbeddingSourceLegacy( - EmbeddingType.ProducerFavBasedSemanticCoreEntity, - modelVersionUpdated)(dateRange.embiggen(Days(7))) - - val producerEmbeddingsPruned = getPrunedEmbeddings(producerEmbeddings, maxClustersFromProducer) - val producerEmbeddingsWithScore = producerEmbeddingsPruned.map { - case (userId: Long, topSimClusters: TopSimClustersWithScore) => - ( - userId, - topSimClusters.topClusters.toArray - .map { - case (simCluster: SimClusterWithScore) => - (simCluster.clusterId, simCluster.score.toFloat) - } - ) - } - - val interestedInFromProducersResult = - InterestedInFromKnownFor.run( - userUserNormalGraph, - producerEmbeddingsWithScore, - socialProofThreshold, - maxClustersPerUserFinalResult, - modelVersionUpdated.toString - ) - - val interestedInFromProducersWithoutSocial = - getInterestedInDiscardSocial(interestedInFromProducersResult) - - val writeKeyValResultExec = interestedInFromProducersWithoutSocial - .map { case (userId, clusters) => KeyVal(userId, clusters) } - .writeDALVersionedKeyValExecution( - outputKVDataset, - D.Suffix(interestedInFromProducersPath) - ) - writeKeyValResultExec - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/KnownForSources.docx b/src/scala/com/twitter/simclusters_v2/scalding/KnownForSources.docx new file mode 100644 index 0000000000000000000000000000000000000000..d4ea878a8c991fd8edbe2c6a253b7640f568cac6 GIT binary patch literal 39553 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/KnownForSources.scala b/src/scala/com/twitter/simclusters_v2/scalding/KnownForSources.scala deleted file mode 100644 index 217f521ac..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/KnownForSources.scala +++ /dev/null @@ -1,275 +0,0 @@ -package com.twitter.simclusters_v2.scalding - -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.logging.Logger -import com.twitter.scalding._ -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.{ExplicitLocation, ProcAtla} -import com.twitter.scalding_internal.job.analytics_batch.{ - AnalyticsBatchExecution, - AnalyticsBatchExecutionArgs, - BatchDescription, - BatchFirstTime, - BatchIncrement, - TwitterScheduledExecutionApp -} -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.hdfs_sources._ -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.thriftscala.{ClustersUserIsKnownFor, UserToKnownForClusterScores} -import com.twitter.usersource.snapshot.flat.UsersourceFlatScalaDataset -import com.twitter.usersource.snapshot.flat.thriftscala.FlatUser -import java.util.TimeZone - -object KnownForSources { - implicit val tz: TimeZone = DateOps.UTC - implicit val parser: DateParser = DateParser.default - - def readDALDataset( - d: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]], - noOlderThan: Duration, - modelVersionToKeep: String - ): TypedPipe[(Long, Array[(Int, Float)])] = { - fromKeyVal( - DAL - .readMostRecentSnapshotNoOlderThan(d, noOlderThan) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe, - modelVersionToKeep - ) - } - - def fromKeyVal( - in: TypedPipe[KeyVal[Long, ClustersUserIsKnownFor]], - modelVersionToKeep: String - ): TypedPipe[(Long, Array[(Int, Float)])] = { - in.collect { - case KeyVal(userId, knownForClusters) - if knownForClusters.knownForModelVersion == modelVersionToKeep => - ( - userId, - knownForClusters.clusterIdToScores.toArray - .map { - case (clusterId, scores) => - (clusterId, scores.knownForScore.getOrElse(0.0).toFloat) - } - .sortBy(-_._2)) - } - } - - def toKeyVal( - in: TypedPipe[(Long, Array[(Int, Float)])], - modelVersion: String - ): TypedPipe[KeyVal[Long, ClustersUserIsKnownFor]] = { - in.map { - case (userId, clustersArray) => - val mappedClusters = clustersArray.map { - case (clusterId, score) => - (clusterId, UserToKnownForClusterScores(Some(score))) - }.toMap - KeyVal(userId, ClustersUserIsKnownFor(modelVersion, mappedClusters)) - } - } - - val knownFor_20M_Dec11_145K: TypedPipe[(Long, Array[(Int, Float)])] = readDALDataset( - SimclustersV2KnownFor20M145KDec11ScalaDataset, - Days(30), - ModelVersions.Model20M145KDec11 - ) - - val knownFor_20M_145K_updated: TypedPipe[(Long, Array[(Int, Float)])] = readDALDataset( - SimclustersV2KnownFor20M145KUpdatedScalaDataset, - Days(30), - ModelVersions.Model20M145KUpdated - ) - - val clusterToKnownFor_20M_Dec11_145K: TypedPipe[(Int, List[(Long, Float)])] = - transpose( - knownFor_20M_Dec11_145K - ) - - val clusterToKnownFor_20M_145K_updated: TypedPipe[(Int, List[(Long, Float)])] = - transpose( - knownFor_20M_145K_updated - ) - - private val log = Logger() - - def readKnownFor(textFile: String): TypedPipe[(Long, Array[(Int, Float)])] = { - TypedPipe - .from(TextLine(textFile)) - .flatMap { str => - if (!str.startsWith("#")) { - try { - val tokens = str.trim.split("\\s+") - val res = Array.newBuilder[(Int, Float)] - val userId = tokens(0).toLong - for (i <- 1 until tokens.length) { - val Array(cIdStr, scoreStr) = tokens(i).split(":") - val clusterId = cIdStr.toInt - val score = scoreStr.toFloat - val newEntry = (clusterId, score) - res += newEntry - } - val result = res.result - if (result.nonEmpty) { - Some((userId, res.result())) - } else None - } catch { - case ex: Throwable => - log.warning( - s"Error while loading knownFor from $textFile for line <$str>: " + - ex.getMessage - ) - None - } - } else None - } - } - - def stringifyKnownFor( - input: TypedPipe[(Long, Array[(Int, Float)])] - ): TypedPipe[(Long, String)] = { - input.mapValues { arr => - arr.map { case (clusterId, score) => "%d:%.2g".format(clusterId, score) }.mkString("\t") - } - } - - def writeKnownForTypedTsv( - input: TypedPipe[(Long, Array[(Int, Float)])], - outputDir: String - ): Execution[Unit] = { - stringifyKnownFor(input).writeExecution(TypedTsv(outputDir)) - } - - def makeKnownForTypedTsv( - input: TypedPipe[(Long, Array[(Int, Float)])], - outputDir: String - ): Execution[TypedPipe[(Long, Array[(Int, Float)])]] = { - Execution.getMode.flatMap { mode => - try { - val dest = TextLine(outputDir) - dest.validateTaps(mode) - Execution.from(KnownForSources.readKnownFor(outputDir)) - } catch { - case ivs: InvalidSourceException => - writeKnownForTypedTsv(input, outputDir).map { _ => input } - } - } - - } - - def transpose( - userToCluster: TypedPipe[(Long, Array[(Int, Float)])] - ): TypedPipe[(Int, List[(Long, Float)])] = { - userToCluster - .flatMap { - case (userId, clusterWeightPairs) => - clusterWeightPairs.map { - case (clusterId, weight) => - (clusterId, List(userId -> weight)) - } - } - .sumByKey - .toTypedPipe - } -} - -/** -capesospy-v2 update --build_locally --start_cron known_for_to_mh \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object KnownForToMHBatch extends TwitterScheduledExecutionApp { - - import KnownForSources._ - - /** - * A simple update function which updates the source by removing deactivated and suspended users. - * This will be eventually replaced by a regular cluster updating method. - */ - def updateKnownForSource( - knownForSource: TypedPipe[(Long, ClustersUserIsKnownFor)], - userSource: TypedPipe[FlatUser] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(Long, ClustersUserIsKnownFor)] = { - val numValidUsers = Stat("num_valid_users") - val numInvalidUsers = Stat("num_invalid_users") - val numKnownForUsersLeft = Stat("num_known_for_users_left") - val numRemovedKnownForUsers = Stat("num_removed_known_for_users") - - val validUsers = - userSource.flatMap { - case flatUser - if !flatUser.deactivated.contains(true) && !flatUser.suspended - .contains(true) - && flatUser.id.nonEmpty => - numValidUsers.inc() - flatUser.id - case _ => - numInvalidUsers.inc() - None - } - - knownForSource.leftJoin(validUsers.asKeys).flatMap { - case (userId, (clustersWithScore, Some(_))) => - numKnownForUsersLeft.inc() - Some((userId, clustersWithScore)) - case _ => - numRemovedKnownForUsers.inc() - None - } - } - - // this should happen before InterestedInFromKnownForBatch - private val firstTime: String = "2019-03-22" - - private val batchIncrement: Duration = Days(7) - - private val outputPath: String = InternalDataPaths.RawKnownForDec11Path - - private val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(this.getClass.getName.replace("$", "")), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - override def scheduledJob: Execution[Unit] = - AnalyticsBatchExecution(execArgs) { implicit dateRange => - Execution.withId { implicit uniqueId => - val numKnownForUsers = Stat("num_known_for_users") - - val userSource = - DAL - .readMostRecentSnapshotNoOlderThan(UsersourceFlatScalaDataset, Days(7)) - .toTypedPipe - - val knownForData = DAL - .readMostRecentSnapshotNoOlderThan( - SimclustersV2RawKnownFor20M145KDec11ScalaDataset, - Days(30)) - .toTypedPipe - .map { - case KeyVal(userId, knownForClusters) => - numKnownForUsers.inc() - (userId, knownForClusters) - } - - val result = updateKnownForSource(knownForData, userSource).map { - case (userId, knownForClusters) => - KeyVal(userId, knownForClusters) - } - - Util.printCounters( - result.writeDALVersionedKeyValExecution( - dataset = SimclustersV2RawKnownFor20M145KDec11ScalaDataset, - pathLayout = D.Suffix(outputPath) - ) - ) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/ProducerNormsAndCounts.docx b/src/scala/com/twitter/simclusters_v2/scalding/ProducerNormsAndCounts.docx new file mode 100644 index 0000000000000000000000000000000000000000..27054b8770018897b7973fc03a2aa8a3957fc361 GIT binary patch literal 38728 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 BckloJ literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/ProducerNormsAndCounts.scala b/src/scala/com/twitter/simclusters_v2/scalding/ProducerNormsAndCounts.scala deleted file mode 100644 index abaef09e8..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/ProducerNormsAndCounts.scala +++ /dev/null @@ -1,195 +0,0 @@ -package com.twitter.simclusters_v2.scalding - -import com.twitter.logging.Logger -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.{ExplicitLocation, ProcAtla} -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.scalding_internal.job.analytics_batch._ -import com.twitter.simclusters_v2.hdfs_sources.{ - NormsAndCountsFixedPathSource, - ProducerNormsAndCountsScalaDataset -} -import com.twitter.simclusters_v2.scalding.common.TypedRichPipe._ -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.thriftscala.NormsAndCounts - -object ProducerNormsAndCounts { - - def getNormsAndCounts( - input: TypedPipe[Edge] - )( - implicit uniqueID: UniqueID - ): TypedPipe[NormsAndCounts] = { - val numRecordsInNormsAndCounts = Stat("num_records_in_norms_and_counts") - input - .map { - case Edge(srcId, destId, isFollowEdge, favWt) => - val followOrNot = if (isFollowEdge) 1 else 0 - ((srcId, destId), (followOrNot, favWt)) - } - .sumByKey - // Uncomment for adhoc job - //.withReducers(2500) - .map { - case ((srcId, destId), (followOrNot, favWt)) => - val favOrNot = if (favWt > 0) 1 else 0 - val logFavScore = if (favWt > 0) UserUserNormalizedGraph.logTransformation(favWt) else 0.0 - ( - destId, - ( - followOrNot, - favWt * favWt, - favOrNot, - favWt, - favWt * followOrNot.toDouble, - logFavScore * logFavScore, - logFavScore, - logFavScore * followOrNot.toDouble)) - } - .sumByKey - // Uncomment for adhoc job - //.withReducers(500) - .map { - case ( - id, - ( - followCount, - favSumSquare, - favCount, - favSumOnFavEdges, - favSumOnFollowEdges, - logFavSumSquare, - logFavSumOnFavEdges, - logFavSumOnFollowEdges)) => - val followerNorm = math.sqrt(followCount) - val faverNorm = math.sqrt(favSumSquare) - numRecordsInNormsAndCounts.inc() - NormsAndCounts( - userId = id, - followerL2Norm = Some(followerNorm), - faverL2Norm = Some(faverNorm), - followerCount = Some(followCount), - faverCount = Some(favCount), - favWeightsOnFavEdgesSum = Some(favSumOnFavEdges), - favWeightsOnFollowEdgesSum = Some(favSumOnFollowEdges), - logFavL2Norm = Some(math.sqrt(logFavSumSquare)), - logFavWeightsOnFavEdgesSum = Some(logFavSumOnFavEdges), - logFavWeightsOnFollowEdgesSum = Some(logFavSumOnFollowEdges) - ) - } - } - - def run( - halfLifeInDaysForFavScore: Int - )( - implicit uniqueID: UniqueID, - date: DateRange - ): TypedPipe[NormsAndCounts] = { - val input = - UserUserNormalizedGraph.getFollowEdges.map { - case (src, dest) => - Edge(src, dest, isFollowEdge = true, 0.0) - } ++ UserUserNormalizedGraph.getFavEdges(halfLifeInDaysForFavScore).map { - case (src, dest, wt) => - Edge(src, dest, isFollowEdge = false, wt) - } - getNormsAndCounts(input) - } -} - -object ProducerNormsAndCountsBatch extends TwitterScheduledExecutionApp { - private val firstTime: String = "2018-06-16" - implicit val tz = DateOps.UTC - implicit val parser = DateParser.default - private val batchIncrement: Duration = Days(7) - private val firstStartDate = DateRange.parse(firstTime).start - private val halfLifeInDaysForFavScore = 100 - - private val outputPath: String = "/user/cassowary/processed/producer_norms_and_counts" - private val log = Logger() - - private val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(this.getClass.getName.replace("$", "")), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - override def scheduledJob: Execution[Unit] = AnalyticsBatchExecution(execArgs) { - implicit dateRange => - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - Util.printCounters( - ProducerNormsAndCounts - .run(halfLifeInDaysForFavScore) - .writeDALSnapshotExecution( - ProducerNormsAndCountsScalaDataset, - D.Daily, - D.Suffix(outputPath), - D.EBLzo(), - dateRange.end) - ) - } - } - } -} - -object ProducerNormsAndCountsAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - implicit val date = DateRange.parse(args.list("date")) - - Util.printCounters( - ProducerNormsAndCounts - .run(halfLifeInDaysForFavScore = 100) - .forceToDiskExecution.flatMap { result => - Execution.zip( - result.writeExecution(NormsAndCountsFixedPathSource(args("outputDir"))), - result.printSummary("Producer norms and counts") - ) - } - ) - } - } -} - -object DumpNormsAndCountsAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - - val users = args.list("users").map(_.toLong).toSet - val input = args.optional("inputDir") match { - case Some(inputDir) => TypedPipe.from(NormsAndCountsFixedPathSource(inputDir)) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(ProducerNormsAndCountsScalaDataset, Days(30)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - - if (users.isEmpty) { - input.printSummary("Producer norms and counts") - } else { - input - .collect { - case rec if users.contains(rec.userId) => - Util.prettyJsonMapper.writeValueAsString(rec).replaceAll("\n", " ") - } - .toIterableExecution - .map { strings => println(strings.mkString("\n")) } - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/TopUsersSimilarityGraph.docx b/src/scala/com/twitter/simclusters_v2/scalding/TopUsersSimilarityGraph.docx new file mode 100644 index 0000000000000000000000000000000000000000..0e0ceda9363700552b1d4a241cab204034de4057 GIT binary patch literal 47232 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 minActiveFollowers) - && f.followers.isDefined && f.id.isDefined && f.screenName.isDefined - && !f.deactivated.contains(true) && !f.suspended.contains(true) => - TopUser(f.id.get, f.activeFollowers.get.toInt, f.screenName.get) - } - .groupAll - .sortedReverseTake(topK)(Ordering.by(_.activeFollowerCount)) - .values - .flatten - } - - /** - * This function returns the top most followed userIds truncated to topK - * Offers the same functionality as TopUsersSimilarityGraph.topUsers but more efficient - * as we donot store screennames while grouping and sorting the users - */ - def topUserIds( - userSourcePipe: TypedPipe[FlatUser], - minActiveFollowers: Int, - topK: Int - ): TypedPipe[Long] = { - userSourcePipe - .collect { - case f: FlatUser - if f.activeFollowers.exists(_ >= minActiveFollowers) - && f.followers.isDefined && f.id.isDefined && f.screenName.isDefined - && !f.deactivated.contains(true) && !f.suspended.contains(true) => - (f.id.get, f.activeFollowers.get) - } - .groupAll - .sortedReverseTake(topK)(Ordering.by(_._2)) - .values - .flatten - .keys - } - - def topUsersWithMappedIds( - userSourcePipe: TypedPipe[FlatUser], - minActiveFollowers: Int - ): TypedPipe[TopUserWithMappedId] = { - userSourcePipe - .collect { - case f: FlatUser - if f.activeFollowers.exists(_ >= minActiveFollowers) - && f.followers.isDefined && f.id.isDefined && f.screenName.isDefined - && !f.deactivated.contains(true) && !f.suspended.contains(true) => - TopUser(f.id.get, f.activeFollowers.get.toInt, f.screenName.get) - } - .groupAll - .mapGroup { - case (_, topUserIter) => - topUserIter.zipWithIndex.map { - case (topUser, id) => - TopUserWithMappedId(topUser, id) - } - } - .values - } - - def topUsersWithMappedIdsTopK( - userSourcePipe: TypedPipe[FlatUser], - minActiveFollowers: Int, - topK: Int - ): TypedPipe[TopUserWithMappedId] = { - userSourcePipe - .collect { - case f: FlatUser - if f.activeFollowers.exists(_ >= minActiveFollowers) - && f.followers.isDefined && f.id.isDefined && f.screenName.isDefined - && !f.deactivated.contains(true) && !f.suspended.contains(true) => - TopUser(f.id.get, f.activeFollowers.get.toInt, f.screenName.get) - } - .groupAll - .sortedReverseTake(topK)(Ordering.by(_.activeFollowerCount)) - .map { - case (_, topUserIter) => - topUserIter.zipWithIndex.map { - case (topUser, id) => - TopUserWithMappedId(topUser, id) - } - } - .flatten - } - - /** - * This function returns the top most followed and verified userIds truncated to topK - */ - def vits( - userSourcePipe: TypedPipe[FlatUser], - minActiveFollowers: Int, - topK: Int - ): TypedPipe[Long] = { - userSourcePipe - .collect { - case f: FlatUser - if f.verified.contains(true) && f.id.isDefined && - f.screenName.isDefined && !f.deactivated.contains(true) && !f.suspended.contains( - true) && - f.activeFollowers.exists(_ >= minActiveFollowers) => - (f.id.get, f.activeFollowers.get) - } - .groupAll - .sortedReverseTake(topK)(Ordering.by(_._2)) - .values - .flatten - .keys - } - - def topUsersInMemory( - userSourcePipe: TypedPipe[FlatUser], - minActiveFollowers: Int, - topK: Int - ): Execution[List[TopUserWithMappedId]] = { - log.info(s"Will fetch top $topK users with at least $minActiveFollowers many active followers") - topUsers(userSourcePipe, minActiveFollowers, topK).toIterableExecution - .map { idFollowersList => - idFollowersList.toList.sortBy(_.id).zipWithIndex.map { - case (topuser, index) => - TopUserWithMappedId(topuser, index) - } - } - } - - def addSelfLoop( - input: TypedPipe[(Long, Map[Long, Float])], - maxToSelfLoopWeight: Float => Float - ): TypedPipe[(Long, Map[Long, Float])] = { - input - .map { - case (nodeId, neighborMap) if neighborMap.nonEmpty => - val maxEntry = neighborMap.values.max - val selfLoopWeight = maxToSelfLoopWeight(maxEntry) - (nodeId, neighborMap ++ Map(nodeId -> selfLoopWeight)) - case (nodeId, emptyMap) => - (nodeId, emptyMap) - } - } - - def makeGraph( - backfillPipe: TypedPipe[(Long, Map[Long, Float])], - dirToReadFromOrSaveTo: String - ): Execution[TypedPipe[(Long, Map[Long, Float])]] = { - backfillPipe - .map { - case (nodeId, nbrMap) => - val cands = nbrMap.toList.map { case (nId, wt) => Candidate(nId, wt) } - Candidates(nodeId, candidates = cands) - } - .make(new FixedPathLzoScrooge(dirToReadFromOrSaveTo, Candidates)) - .map { tp => - tp.map { - case Candidates(nodeId, cands) => - (nodeId, cands.map { case Candidate(nId, wt, _) => (nId, wt.toFloat) }.toMap) - } - } - } - - def getSubgraphFromUserGroupedInput( - fullGraph: TypedPipe[Candidates], - usersToInclude: TypedPipe[Long], - maxNeighborsPerNode: Int, - degreeThresholdForStat: Int - )( - implicit uniqId: UniqueID - ): TypedPipe[(Long, Map[Long, Float])] = { - val numUsersWithZeroEdges = Stat("num_users_with_zero_edges") - val numUsersWithSmallDegree = Stat("num_users_with_degree_lt_" + degreeThresholdForStat) - val numUsersWithEnoughDegree = Stat("num_users_with_degree_gte_" + degreeThresholdForStat) - - fullGraph - .map { cands => - ( - cands.userId, - // These candidates are already sorted, but leaving it in just in case the behavior changes upstream - cands.candidates - .map { c => (c.userId, c.score) }.sortBy(-_._2).take(maxNeighborsPerNode).toMap - ) - } - .rightJoin(usersToInclude.asKeys) - // uncomment for adhoc job - //.withReducers(110) - .mapValues(_._1) // discard the Unit - .toTypedPipe - .count("num_sims_records_from_top_users") - .flatMap { - case (nodeId, Some(neighborMap)) => - neighborMap.flatMap { - case (neighborId, edgeWt) => - List( - (nodeId, Map(neighborId -> Max(edgeWt.toFloat))), - (neighborId, Map(nodeId -> Max(edgeWt.toFloat))) - ) - } - case (nodeId, None) => List((nodeId, Map.empty[Long, Max[Float]])) - } - .sumByKey - // uncomment for adhoc job - //.withReducers(150) - .toTypedPipe - .mapValues(_.mapValues(_.get)) // get the max for each value in each map - .count("num_sims_records_after_symmetrization_before_keeping_only_top_users") - .join(usersToInclude.asKeys) // only keep records for top users - // uncomment for adhoc job - //.withReducers(100) - .mapValues(_._1) - .toTypedPipe - .map { - case (nodeId, neighborsMap) => - if (neighborsMap.nonEmpty) { - if (neighborsMap.size < degreeThresholdForStat) { - numUsersWithSmallDegree.inc() - } else { - numUsersWithEnoughDegree.inc() - } - } else { - numUsersWithZeroEdges.inc() - } - (nodeId, neighborsMap) - } - .count("num_sims_records_after_symmetrization_only_top_users") - } - - def getSubgraphFromUserGroupedInput( - fullGraph: TypedPipe[Candidates], - usersToInclude: Set[Long], - maxNeighborsPerNode: Int - )( - implicit uniqId: UniqueID - ): TypedPipe[(Long, Map[Long, Float])] = { - val numUsersWithZeroEdges = Stat("num_users_with_zero_edges") - val numUsersWithDegreeLessThan10 = Stat("num_users_with_degree_less_than_10") - - val (intIdsToIncludeSorted: Array[Int], longIdsToIncludeSorted: Array[Long]) = - setToSortedArrays(usersToInclude) - log.info("Size of intArray " + intIdsToIncludeSorted.length) - log.info("Size of longArray " + longIdsToIncludeSorted.length) - - fullGraph - .collect { - case candidates - if isIdInIntOrLongArray( - candidates.userId, - intIdsToIncludeSorted, - longIdsToIncludeSorted) => - val sourceId = candidates.userId - val toKeep = candidates.candidates.collect { - case neighbor - if isIdInIntOrLongArray( - neighbor.userId, - intIdsToIncludeSorted, - longIdsToIncludeSorted) => - (neighbor.userId, neighbor.score.toFloat) - }.toList - - val toKeepLength = toKeep.size - if (toKeep.isEmpty) { - numUsersWithZeroEdges.inc() - } else if (toKeepLength < 10) { - numUsersWithDegreeLessThan10.inc() - } - - val knn = if (toKeepLength > maxNeighborsPerNode) { - toKeep.sortBy(_._2).takeRight(maxNeighborsPerNode) - } else toKeep - - knn.flatMap { - case (nbrId, wt) => - List( - (sourceId, Map(nbrId -> Max(wt))), - (nbrId, Map(sourceId -> Max(wt))) - ) - } - } - .flatten - .sumByKey - .toTypedPipe - .mapValues(_.mapValues(_.get)) // get the max for each value in each map - } - - def getInMemorySubgraphFromUserGroupedInput( - fullGraph: TypedPipe[Candidates], - usersToInclude: Set[Long], - maxNeighborsPerNode: Int - )( - implicit uniqId: UniqueID - ): Execution[Iterable[AdjList]] = { - getSubgraphFromUserGroupedInput(fullGraph, usersToInclude, maxNeighborsPerNode).map { - case (sourceId, weightedNeighbors) => - AdjList( - sourceId, - weightedNeighbors.toList.sortBy(_._1) - ) - }.toIterableExecution - } - - def isIdInIntOrLongArray( - id: Long, - intArraySorted: Array[Int], - longArraySorted: Array[Long] - ): Boolean = { - if (id < Integer.MAX_VALUE) { - util.Arrays.binarySearch(intArraySorted, id.toInt) >= 0 - } else { - util.Arrays.binarySearch(longArraySorted, id.toLong) >= 0 - } - } - - /** - * Creates two sorted arrays out of a set, one with ints and one with longs. - * Sorted arrays are only slightly more expensive to search in, but empirically I've found - * that the MapReduce job runs more reliably using them than using Set directly. - * - * @param inSet - * - * @return - */ - def setToSortedArrays(inSet: Set[Long]): (Array[Int], Array[Long]) = { - val (intArrayUnconvertedSorted, longArraySorted) = - inSet.toArray.sorted.partition { l => l < Integer.MAX_VALUE } - (intArrayUnconvertedSorted.map(_.toInt), longArraySorted) - } - - def getInMemorySubgraph( - fullGraph: TypedPipe[SimilarUserPair], - usersToInclude: Set[Long], - maxNeighborsPerNode: Int - )( - implicit uniqId: UniqueID - ): Execution[Iterable[AdjList]] = { - val numValidEdges = Stat("num_valid_edges") - val numInvalidEdges = Stat("num_invalid_edges") - - val (intIdsToIncludeSorted: Array[Int], longIdsToIncludeSorted: Array[Long]) = - setToSortedArrays(usersToInclude) - log.info("Size of intArray " + intIdsToIncludeSorted.length) - log.info("Size of longArray " + longIdsToIncludeSorted.length) - - fullGraph - .filter { edge => - val res = - isIdInIntOrLongArray(edge.sourceId, intIdsToIncludeSorted, longIdsToIncludeSorted) && - isIdInIntOrLongArray(edge.destinationId, intIdsToIncludeSorted, longIdsToIncludeSorted) - if (res) { - numValidEdges.inc() - } else { - numInvalidEdges.inc() - } - res - } - .map { edge => (edge.sourceId, (edge.destinationId, edge.cosineScore.toFloat)) } - .group - .sortedReverseTake(maxNeighborsPerNode)(Ordering.by(_._2)) - .toTypedPipe - .flatMap { - case (sourceId, weightedNeighbors) => - weightedNeighbors.flatMap { - case (destId, wt) => - /* - By default, a k-nearest neighbor graph need not be symmetric, since if u is in v's - k nearest neighbors, that doesn't guarantee that v is in u's. - This step adds edges in both directions, but having a Map ensures that each neighbor - only appears once and not twice. Using Max() operator from Algebird, we take the max - weight of (u, v) and (v, u) - it is expected that the two will be pretty much the same. - - Example illustrating how Map and Max work together: - Map(1 -> Max(2)) + Map(1 -> Max(3)) = Map(1 -> Max(3)) - */ - List( - (sourceId, Map(destId -> Max(wt))), - (destId, Map(sourceId -> Max(wt))) - ) - } - } - .sumByKey - .map { - case (sourceId, weightedNeighbors) => - AdjList( - sourceId, - weightedNeighbors.toList.map { case (id, maxWt) => (id, maxWt.get) }.sortBy(_._1) - ) - } - .toIterableExecution - } - - def convertIterableToGraph( - adjList: Iterable[AdjList], - verticesMapping: Map[Long, Int], - wtExponent: Float - ): Graph = { - val n = verticesMapping.size - val neighbors: Array[Array[Int]] = new Array[Array[Int]](n) - val wts: Array[Array[Float]] = new Array[Array[Float]](n) - - var numEdges = 0L - var numVertices = 0 - - val iter = adjList.iterator - val verticesWithAtleastOneEdgeBuilder = Set.newBuilder[Long] - - while (iter.hasNext) { - val AdjList(originalId, wtedNeighbors) = iter.next() - val wtedNeighborsSize = wtedNeighbors.size - val newId = verticesMapping(originalId) // throw exception if originalId not in map - if (newId < 0 || newId >= n) { - throw new IllegalStateException( - s"$originalId has been mapped to $newId, which is outside" + - s"the expected range [0, " + (n - 1) + "]") - } - verticesWithAtleastOneEdgeBuilder += originalId - neighbors(newId) = new Array[Int](wtedNeighborsSize) - wts(newId) = new Array[Float](wtedNeighborsSize) - wtedNeighbors.zipWithIndex.foreach { - case ((nbrId, wt), index) => - neighbors(newId)(index) = verticesMapping(nbrId) - wts(newId)(index) = wt - numEdges += 1 - } - - if (math.abs(wtExponent - 1.0) > 1e-5) { - var maxWt = Float.MinValue - for (index <- wts(newId).indices) { - wts(newId)(index) = math.pow(wts(newId)(index), wtExponent).toFloat - if (wts(newId)(index) > maxWt) { - maxWt = wts(newId)(index) - } - } - } - numVertices += 1 - if (numVertices % 100000 == 0) { - log.info(s"Done with $numVertices many vertices.") - } - } - - val verticesWithAtleastOneEdge = verticesWithAtleastOneEdgeBuilder.result() - val verticesWithZeroEdges = verticesMapping.keySet.diff(verticesWithAtleastOneEdge) - - verticesWithZeroEdges.foreach { originalId => - neighbors(verticesMapping(originalId)) = new Array[Int](0) - wts(verticesMapping(originalId)) = new Array[Float](0) - } - - log.info("Number of vertices with zero edges " + verticesWithZeroEdges.size) - log.info("Number of edges " + numEdges) - if (verticesWithZeroEdges.nonEmpty) { - log.info("The vertices with zero edges: " + verticesWithZeroEdges.mkString(",")) - } - - new Graph(n, numEdges / 2, neighbors, wts) - } - - def run( - userSourcePipe: TypedPipe[FlatUser], - minActiveFollowers: Int, - topK: Int, - getSubgraphFn: Set[Long] => Execution[Iterable[AdjList]], - wtExponent: Float - )( - implicit id: UniqueID - ): Execution[(List[TopUserWithMappedId], Graph)] = { - topUsersInMemory( - userSourcePipe, - minActiveFollowers, - topK - ).flatMap { topUsers => - val idMap = topUsers.map { topUser => (topUser.topUser.id, topUser.mappedId) }.toMap - - log.info("Got idMap with " + idMap.size + " entries.") - getSubgraphFn(idMap.keySet) - .map { iterableAdjLists => - log.info("Going to convert iterable to graph") - val tic = System.currentTimeMillis() - val graph = convertIterableToGraph( - iterableAdjLists, - idMap, - wtExponent - ) - val toc = System.currentTimeMillis() - val seconds = (toc - tic) * 1.0 / 1e6 - log.info("Took %.2f seconds to convert iterable to graph".format(seconds)) - (topUsers, graph) - } - } - } - - def runUsingJoin( - mappedUsers: TypedPipe[(Long, Int)], - allEdges: TypedPipe[Candidates], - maxNeighborsPerNode: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[(Int, String)] = { - val numEdgesAfterFirstJoin = Stat("num_edges_after_first_join") - val numEdgesAfterSecondJoin = Stat("num_edges_after_second_join") - val numEdgesLostTopKTruncated = Stat("num_edges_lost_topk_truncated") - val finalNumEdges = Stat("final_num_edges") - - allEdges - .map { cs => (cs.userId, cs.candidates) } - .join(mappedUsers) - .withReducers(6000) - .flatMap { - case (id, (neighbors, mappedId)) => - val before = neighbors.size - val topKNeighbors = neighbors.sortBy(-_.score).take(maxNeighborsPerNode) - val after = topKNeighbors.size - numEdgesLostTopKTruncated.incBy(before - after) - topKNeighbors.map { candidate => - numEdgesAfterFirstJoin.inc() - (candidate.userId, (mappedId, candidate.score.toFloat)) - } - } - .join(mappedUsers) - .withReducers(9000) - .flatMap { - case (id, ((mappedNeighborId, score), mappedId)) => - numEdgesAfterSecondJoin.inc() - List( - (mappedId, Map(mappedNeighborId -> Max(score))), - (mappedNeighborId, Map(mappedId -> Max(score))) - ) - } - .sumByKey - .withReducers(9100) - .map { - case (id, nbrMap) => - val sorted = nbrMap.mapValues(_.get).toList.sortBy(-_._2) - finalNumEdges.incBy(sorted.size) - val str = sorted.map { case (nbrId, wt) => "%d %.2f".format(nbrId, wt) }.mkString(" ") - (id, str) - } - - } - - def writeToHDFSFile(lines: Iterator[String], conf: Configuration, outputFile: String): Unit = { - val fs = FileSystem.newInstance(conf) - val outputStream = fs.create(new Path(outputFile)) - log.info("Will write to " + outputFile) - var numLines = 0 - val tic = System.currentTimeMillis() - try { - val writer = new PrintWriter(outputStream) - while (lines.hasNext) { - writer.println(lines.next()) - numLines += 1 - if (numLines % 1000000 == 0) { - log.info(s"Done writing $numLines lines") - } - } - writer.flush() - writer.close() - } finally { - outputStream.close() - } - val toc = System.currentTimeMillis() - val seconds = (toc - tic) * 1.0 / 1e6 - log.info( - "Finished writing %d lines to %s. Took %.2f seconds".format(numLines, outputFile, seconds)) - } - - def writeToHDFSIfHDFS(lines: Iterator[String], mode: Mode, outputFile: String): Unit = { - mode match { - case Hdfs(_, conf) => - writeToHDFSFile(lines, conf, outputFile) - case _ => () - } - } - - def writeTopUsers(topUsers: List[TopUserWithMappedId], mode: Mode, outputFile: String): Unit = { - val topUsersLines = - topUsers.map { topUser => - // Add 1 to mappedId so as to get 1-indexed ids, which are friendlier to humans. - List( - topUser.topUser.id, - topUser.mappedId + 1, - topUser.topUser.screenName, - topUser.topUser.activeFollowerCount - ).mkString("\t") - }.iterator - writeToHDFSIfHDFS(topUsersLines, mode, outputFile) - } - - def readSimsInput(isKeyValSource: Boolean, inputDir: String): TypedPipe[Candidates] = { - if (isKeyValSource) { - log.info("Will treat " + inputDir + " as SequenceFiles input") - val rawInput = FollowingsCosineSimilaritiesManhattanSource(path = inputDir) - TypedPipe.from(rawInput).map(_._2) - } else { - log.info("Will treat " + inputDir + " as LzoScrooge input") - TypedPipe.from(new FixedPathLzoScrooge(inputDir, Candidates)) - } - } -} - -/** - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:top_users_only && \ - * oscar hdfs --hadoop-client-memory 120000 --user cassowary --host atla-aor-08-sr1 \ - * --bundle top_users_only --tool com.twitter.simclusters_v2.scalding.ClusterHdfsGraphApp \ - * --screen --screen-detached --tee ldap_logs/SBFOnSubGraphOf100MTopusersWithMappedIds_120GB_RAM \ - * -- --inputDir adhoc/ldap_subgraphOf100MTopUsersWithMappedIds --numNodesPerCommunity 200 \ - * --outputDir adhoc/ldap_SBFOnSubGraphOf100MTopusersWithMappedIds_k500K_120GB_RAM --assumedNumberOfNodes 100200000 - */ -object ClusterHdfsGraphApp extends TwitterExecutionApp { - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val inputDir = args("inputDir") - val numNodesPerCommunity = args.int("numNodesPerCommunity", 200) - val outputDir = args("outputDir") - val assumedNumberOfNodes = args.int("assumedNumberOfNodes") - //val useEdgeWeights = args.boolean("useEdgeWeights") - - val input = TypedPipe.from(TypedTsv[(Int, String)](inputDir)).map { - case (id, nbrStr) => - val nbrsWithWeights = nbrStr.split(" ") - val nbrsArray = nbrsWithWeights.zipWithIndex - .collect { - case (str, index) if index % 2 == 0 => - str.toInt - } - (id, nbrsArray.sorted) - } - - println("Gonna assume total number of nodes is " + assumedNumberOfNodes) - - input.toIterableExecution.flatMap { adjListsIter => - val nbrs: Array[Array[Int]] = new Array[Array[Int]](assumedNumberOfNodes) - var numEdges = 0L - var numVertices = 0 - var maxVertexId = 0 - - val tic = System.currentTimeMillis - adjListsIter.foreach { - case (id, nbrArray) => - if (id >= assumedNumberOfNodes) { - throw new IllegalStateException( - s"Yikes! Entry with id $id, >= assumedNumberOfNodes") - } - nbrs(id) = nbrArray - if (id > maxVertexId) { - maxVertexId = id - } - numEdges += nbrArray.length - numVertices += 1 - if (numVertices % 100000 == 0) { - println(s"Done loading $numVertices many vertices. Edges so far: $numEdges") - } - } - (0 until assumedNumberOfNodes).foreach { i => - if (nbrs(i) == null) { - nbrs(i) = Array[Int]() - } - } - val toc = System.currentTimeMillis() - println( - "maxVertexId is " + maxVertexId + ", assumedNumberOfNodes is " + assumedNumberOfNodes) - println( - s"Done loading graph with $assumedNumberOfNodes nodes and $numEdges edges (counting each edge twice)") - println("Number of nodes with at least neighbor is " + numVertices) - println("Time to load the graph " + (toc - tic) / 1000.0 / 60.0 + " minutes") - - val graph = new Graph(assumedNumberOfNodes, numEdges / 2, nbrs, null) - val k = assumedNumberOfNodes / numNodesPerCommunity - println("Will set number of communities to " + k) - val algoConfig = new AlgorithmConfig() - .withCpu(16).withK(k) - .withWtCoeff(10.0).withMaxEpoch(5) - var z = new SparseBinaryMatrix(assumedNumberOfNodes, k) - val err = new PrintWriter(System.err) - - println("Going to initalize from random neighborhoods") - z.initFromBestNeighborhoods( - graph, - (gr: Graph, i: Integer) => algoConfig.rng.nextDouble, - false, - err) - println("Done initializing from random neighborhoods") - - val prec0 = MHAlgorithm.clusterPrecision(graph, z, 0, 1000, algoConfig.rng) - println("Precision of cluster 0:" + prec0.precision) - val prec1 = MHAlgorithm.clusterPrecision(graph, z, 1, 1000, algoConfig.rng) - println("Precision of cluster 1:" + prec1.precision) - println( - "Fraction of empty rows after initializing from random neighborhoods: " + z.emptyRowProportion) - - val tic2 = System.currentTimeMillis - val algo = new MHAlgorithm(algoConfig, graph, z, err) - val optimizedZ = algo.optimize - val toc2 = System.currentTimeMillis - println("Time to optimize: %.2f seconds\n".format((toc2 - tic2) / 1000.0)) - println("Time to initialize & optimize: %.2f seconds\n".format((toc2 - toc) / 1000.0)) - - val srm = MHAlgorithm.heuristicallyScoreClusterAssignments(graph, optimizedZ) - val outputIter = (0 to srm.getNumRows).map { rowId => - val rowWithIndices = srm.getColIdsForRow(rowId) - val rowWithScores = srm.getValuesForRow(rowId) - val str = rowWithIndices - .zip(rowWithScores).map { - case (colId, score) => - "%d:%.2g".format(colId + 1, score) - }.mkString(" ") - "%d %s".format(rowId, str) - } - - TypedPipe.from(outputIter).writeExecution(TypedTsv(outputDir)) - } - } - } -} - -/** - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:top_users_only && \ - * oscar hdfs --hadoop-client-memory 60000 --user cassowary --host atla-aor-08-sr1 \ - * --bundle top_users_only --tool com.twitter.simclusters_v2.scalding.ScalableTopUsersSimilarityGraphApp \ - * --screen --screen-detached --tee ldap_logs/SubGraphOf100MTopusersWithMappedIds \ - * -- --mappedUsersDir adhoc/ldap_top100M_mappedUsers \ - * --inputDir adhoc/ldap_approximate_cosine_similarity_follow \ - * --outputDir adhoc/ldap_subgraphOf100MTopUsersWithMappedIds_correct_topK - */ -object ScalableTopUsersSimilarityGraphApp extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - val log = Logger() - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val inputDir = args("inputDir") - val mappedUsersDir = args("mappedUsersDir") - val maxNeighbors = args.int("maxNeighbors", 100) - val outputDir = args("outputDir") - - val mappedUsers = TypedPipe - .from(TypedTsv[(Long, Int, String, Int)](mappedUsersDir)) - .map { - case (id, _, _, mappedId) => - (id, mappedId) - } - .shard(200) - - val sims = TypedPipe - .from(FollowingsCosineSimilaritiesManhattanSource(path = inputDir)) - .map(_._2) - - TopUsersSimilarityGraph - .runUsingJoin( - mappedUsers, - sims, - maxNeighbors - ).writeExecution(TypedTsv(args("outputDir"))) - } - } -} - -/** - * Scalding app using Executions that does the following: - * - * 1. Get the top N most followed users on Twitter - * (also maps them to ids 1 -> N in int space for easier processing) - * 2. For each user from the step above, get the top K most similar users for this user from the - * list of N users from the step above. - * 3. Construct an undirected graph by setting an edge between (u, v) if - * either v is in u's top-K similar users list, or u is in v's top-K similar user's list. - * 4. The weight for the (u, v) edge is set to be the cosine similarity between u and v's - * follower lists, raised to some exponent > 1. - * This last step is a heuristic reweighting procedure to give more importance to edges involving - * more similar users. - * 5. Write the above graph to HDFS in Metis format, - * i.e. one line per node, with the line for each node specifying the list of neighbors along - * with their weights. The first line specifies the number of nodes and the number of edges. - * - * I've tested this Scalding job for values of topK upto 20M. - * - * Example invocation: - * $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:top_users_similarity_graph && \ - * oscar hdfs --hadoop-client-memory 60000 --host atla-amw-03-sr1 --bundle top_users_similarity_graph \ - * --tool com.twitter.simclusters_v2.scalding.TopUsersSimilarityGraphApp \ - * --hadoop-properties "elephantbird.use.combine.input.format=true;elephantbird.combine.split.size=468435456;mapred.min.split.size=468435456;mapreduce.reduce.memory.mb=5096;mapreduce.reduce.java.opts=-Xmx4400m" \ - * --screen --screen-detached --tee logs/20MSubGraphExecution -- --date 2017-10-24 \ - * --minActiveFollowers 300 --topK 20000000 \ - * --inputUserGroupedDir /user/cassowary/manhattan_sequence_files/approximate_cosine_similarity_follow/ \ - * --groupedInputInSequenceFiles \ - * --maxNeighborsPerNode 100 --wtExponent 2 \ - * --outputTopUsersDir /user/your_ldap/simclusters_graph_prep_q42017/top20MUsers \ - * --outputGraphDir /user/your_ldap/simclusters_graph_prep_q42017/top20Musers_exp2_100neighbors_metis_graph - * - */ -object TopUsersSimilarityGraphApp extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - val log = Logger() - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val minActiveFollowers = args.int("minActiveFollowers", 100000) - val topK = args.int("topK") - val date = DateRange.parse(args("date")) - val inputSimilarPairsDir = args.optional("inputSimilarPairsDir") - val inputUserGroupedDir = args.optional("inputUserGroupedDir") - val isGroupedInputSequenceFiles = args.boolean("groupedInputInSequenceFiles") - val outputTopUsersDir = args("outputTopUsersDir") - val maxNeighborsPerNode = args.int("maxNeighborsPerNode", 300) - val wtExponent = args.float("wtExponent", 3.5f) - val outputGraphDir = args("outputGraphDir") - - val userSource = DAL.readMostRecentSnapshot(UsersourceFlatScalaDataset, date).toTypedPipe - val exception = new IllegalStateException( - "Please specify only one of inputSimilarPairsDir or inputUserGroupedDir" - ) - - (inputSimilarPairsDir, inputUserGroupedDir) match { - case (Some(_), Some(_)) => throw exception - case (None, None) => throw exception - case _ => // no-op - } - - def getSubgraphFn(usersToInclude: Set[Long]) = { - (inputSimilarPairsDir, inputUserGroupedDir) match { - case (Some(similarPairs), None) => - val similarUserPairs: TypedPipe[SimilarUserPair] = - TypedPipe.from( - new FixedPathLzoScrooge( - inputSimilarPairsDir.get, - SimilarUserPair - )) - TopUsersSimilarityGraph.getInMemorySubgraph( - similarUserPairs, - usersToInclude, - maxNeighborsPerNode) - case (None, Some(groupedInput)) => - val candidatesPipe = - TopUsersSimilarityGraph.readSimsInput(isGroupedInputSequenceFiles, groupedInput) - TopUsersSimilarityGraph.getInMemorySubgraphFromUserGroupedInput( - candidatesPipe, - usersToInclude, - maxNeighborsPerNode - ) - case _ => Execution.from(Nil) // we should never get here - } - } - - TopUsersSimilarityGraph - .run( - userSource, - minActiveFollowers, - topK, - getSubgraphFn, - wtExponent - ).flatMap { - case (topUsersList, graph) => - // We're writing to HDFS ourselves, from the submitter node. - // When we use TypedPipe.write, it's failing for large topK, e.g.10M. - // We can make the submitter node have a lot of memory, but it's - // difficult and suboptimal to give this much memory to all mappers. - val topUsersExec = Execution.from( - TopUsersSimilarityGraph - .writeTopUsers(topUsersList, mode, outputTopUsersDir + "/all") - ) - - // We want to make sure the write of the topUsers succeeds, and - // only then write out the graph. A graph without the topUsers is useless. - topUsersExec.map { _ => - // We're writing to HDFS ourselves, from the submitter node. - // When we use TypedPipe.write, it fails due to OOM on the mappers. - // We can make the submitter node have a lot of memory, but it's difficult - // and suboptimal to give this much memory to all mappers. - TopUsersSimilarityGraph.writeToHDFSIfHDFS( - graph - .iterableStringRepresentation(new DecimalFormat("#.###")).iterator().asScala, - mode, - outputGraphDir + "/all" - ) - } - } - } - } - -} - -/** - * App that only outputs the topK users on Twitter by active follower count. Example invocation: - * $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:top_users_only && \ - * oscar hdfs --hadoop-client-memory 60000 --host atla-aor-08-sr1 --bundle top_users_only \ - * --tool com.twitter.simclusters_v2.scalding.TopUsersOnlyApp \ - * #are these hadoop-properties needed for this job? - * #--hadoop-properties "scalding.with.reducers.set.explicitly=true;elephantbird.use.combine.input.format=true;elephantbird.combine.split.size=468435456;mapred.min.split.size=468435456" \ - * --screen --screen-detached --tee logs/10MTopusersOnlyExecution -- --date 2017-10-20 \ - * --minActiveFollowers 500 --topK 10000000 \ - * --outputTopUsersDir /user/your_ldap/simclusters_graph_prep_q42017/top10MUsers - * - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:top_users_only && \ - * oscar hdfs --hadoop-client-memory 60000 --user cassowary --host atla-aor-08-sr1 \ - * --bundle top_users_only --tool com.twitter.simclusters_v2.scalding.TopUsersOnlyApp \ - * --screen --screen-detached --tee ldap_logs/100MTopusersWithMappedIds \ - * -- --date 2019-10-11 --minActiveFollowers 67 --outputTopUsersDir adhoc/ldap_top100M_mappedUsers \ - * --includeMappedIds - */ -object TopUsersOnlyApp extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - val log = Logger() - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val minActiveFollowers = args.int("minActiveFollowers", 100000) - val topK = args.int("topK", 20000000) - val date = DateRange.parse(args("date")) - val outputTopUsersDir = args("outputTopUsersDir") - val includeMappedIds = args.boolean("includeMappedIds") - - if (includeMappedIds) { - println("Going to include mappedIds in output") - TopUsersSimilarityGraph - .topUsersWithMappedIds( - DAL.readMostRecentSnapshot(UsersourceFlatScalaDataset, date).toTypedPipe, - minActiveFollowers - ) - .map { - case TopUserWithMappedId(TopUser(id, activeFollowerCount, screenName), mappedId) => - (id, activeFollowerCount, screenName, mappedId) - } - .writeExecution(TypedTsv(outputTopUsersDir)) - } else { - TopUsersSimilarityGraph - .topUsersInMemory( - DAL.readMostRecentSnapshot(UsersourceFlatScalaDataset, date).toTypedPipe, - minActiveFollowers, - topK - ).map { topUsersList => - TopUsersSimilarityGraph.writeTopUsers( - topUsersList, - mode, - outputTopUsersDir + "/all") - } - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/UpdateKnownFor.docx b/src/scala/com/twitter/simclusters_v2/scalding/UpdateKnownFor.docx new file mode 100644 index 0000000000000000000000000000000000000000..5e77b447dc15fdaf1b6a6340e6cf3fe90ac1b9ca GIT binary patch literal 39914 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 Double, - minNeighborsInCluster: Int - ): Option[(Int, Double)] = { - val clusterToScores = statsOfClustersInNeighborhood.toList.flatMap { - case (clusterId, statsInNeighborhood) => - val clusterOverallStats = clusterOverallStatsMap(clusterId) - if (statsInNeighborhood.nodeCount >= minNeighborsInCluster) { - Some( - ( - clusterId, - clusterScoresToFinalScore( - getScoresForCluster( - overallNeighborhoodStats, - statsInNeighborhood, - clusterOverallStats.nodeCount, - clusterOverallStats.sumOfMembershipWeights, - globalAvgEdgeWeight, - truePositiveWtFactor - ) - ) - ) - ) - } else { - None - } - } - if (clusterToScores.nonEmpty) { - Some(clusterToScores.maxBy(_._2)) - } else None - } - - def updateGeneric( - graph: TypedPipe[(Long, Map[Long, Float])], - inputUserToClusters: TypedPipe[(Long, Array[(Int, Float)])], - clusterOverallStatsMap: Map[Int, NeighborhoodInformation], - minNeighborsInCluster: Int, - globalAvgWeight: Double, - avgMembershipScore: Double, - truePositiveWtFactor: Double, - clusterScoresToFinalScore: ClusterScoresForNode => Double - )( - implicit uniqId: UniqueID - ): TypedPipe[(Long, Array[(Int, Float)])] = { - val emptyToSomething = Stat("no_assignment_to_some") - val somethingToEmpty = Stat("some_assignment_to_none") - val emptyToEmpty = Stat("empty_to_empty") - val sameCluster = Stat("same_cluster") - val diffCluster = Stat("diff_cluster") - val nodesWithSmallDegree = Stat("nodes_with_degree_lt_" + minNeighborsInCluster) - - collectInformationPerNode(graph, inputUserToClusters, avgMembershipScore) - .mapValues { - case NodeInformation(originalClusters, overallStats, statsOfClustersInNeighborhood) => - val newClusterWithScoreOpt = if (overallStats.nodeCount < minNeighborsInCluster) { - nodesWithSmallDegree.inc() - None - } else { - pickBestCluster( - overallStats, - statsOfClustersInNeighborhood, - clusterOverallStatsMap, - globalAvgWeight, - truePositiveWtFactor, - clusterScoresToFinalScore, - minNeighborsInCluster - ) - } - newClusterWithScoreOpt match { - case Some((newClusterId, score)) => - if (originalClusters.isEmpty) { - emptyToSomething.inc() - } else if (originalClusters.contains(newClusterId)) { - sameCluster.inc() - } else { - diffCluster.inc() - } - Array((newClusterId, score.toFloat)) - case None => - if (originalClusters.isEmpty) { - emptyToEmpty.inc() - } else { - somethingToEmpty.inc() - } - Array.empty[(Int, Float)] - } - } - } - - /** - * Assembles the information we need at a node in order to decide what the new cluster should be. - * So this is where we assemble what the overall - * - * This function is where all the crucial steps take place. First get the cluster that each - * node belongs to, and then broadcast information about this node and cluster membership to each - * of it's neighbors. Now bring together all records with the same nodeId as the key and create - * the NodeInformation dataset. - * @param graph symmetric graph i.e. if u is in v's adj list, then v is in u's adj list. - * @param userToClusters current knownFor. - * @param avgMembershipScore avg. membership score of a node in the knownFor we're updating. - * Useful to deal with nodes which don't belong to any knownFor. - * @return pipe with node information for each node - */ - def collectInformationPerNode( - graph: TypedPipe[(Long, Map[Long, Float])], - userToClusters: TypedPipe[(Long, Array[(Int, Float)])], - avgMembershipScore: Double - ): TypedPipe[(Long, NodeInformation)] = { - implicit val nisg: Semigroup[NodeInformation] = NodeInformationSemigroup - graph - .leftJoin(userToClusters) - // uncomment for adhoc job - //.withReducers(200) - .flatMap { - case (nodeId, (adjList, assignedClustersOpt)) => - val assignedClusters = - assignedClustersOpt.map(_.toList).getOrElse(Nil) - val res = adjList.toList.flatMap { - case (neighborId, neighborWeight) => - if (assignedClusters.nonEmpty) { - assignedClusters.map { - case (clusterId, membershipScore) => - val neighborhoodInformationForCluster = NeighborhoodInformation( - 1, - neighborWeight, - membershipScore * neighborWeight, - membershipScore) - val originalClusters = - if (neighborId == nodeId) List(clusterId) - else List.empty[Int] - ( - neighborId, - NodeInformation( - originalClusters, - neighborhoodInformationForCluster, - Map(clusterId -> neighborhoodInformationForCluster))) - } - } else { - List( - ( - neighborId, - NodeInformation( - Nil, - NeighborhoodInformation( - 1, - neighborWeight, - (avgMembershipScore * neighborWeight).toFloat, - avgMembershipScore.toFloat), - Map.empty[Int, NeighborhoodInformation] - ))) - } - } - res - } - .sumByKey - // uncomment for adhoc job - //.withReducers(100) - } - - /** - * Replace incoming knownFor scores with ratioScoreIgnoringMembershipScores - * @param knownFor - * @param simsGraphWithoutSelfLoops - * @param globalAvgWeight - * @param clusterStats - * @param avgMembershipScore - * @return - */ - def newKnownForScores( - knownFor: TypedPipe[(Long, Array[(Int, Float)])], - simsGraphWithoutSelfLoops: TypedPipe[(Long, Map[Long, Float])], - globalAvgWeight: Double, - clusterStats: Map[Int, NeighborhoodInformation], - avgMembershipScore: Double - ): TypedPipe[(Long, Array[(Int, Float)])] = { - collectInformationPerNode(simsGraphWithoutSelfLoops, knownFor, avgMembershipScore) - .mapValues { - case NodeInformation(originalClusters, overallStats, statsOfClustersInNeighborhood) => - originalClusters.map { clusterId => - ( - clusterId, - getScoresForCluster( - overallStats, - statsOfClustersInNeighborhood(clusterId), - clusterStats(clusterId).nodeCount, - clusterStats(clusterId).sumOfMembershipWeights, - globalAvgWeight, - 0 - ).ratioScoreIgnoringMembershipScores.toFloat) - }.toArray - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/UpdateKnownForApps.docx b/src/scala/com/twitter/simclusters_v2/scalding/UpdateKnownForApps.docx new file mode 100644 index 0000000000000000000000000000000000000000..868a83f86a14e91eb8fcd8faf9ec271d301eae8d GIT binary patch literal 41909 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 (x.toDouble, 1L) } - .sum - .toOptionExecution - .map { - case Some((sum, cnt)) => - val res = sum / cnt - println("globalAvgWeight is " + res) - Some(res) - case _ => - println("Input graph to globalAvgWeight seems to be empty") - None - } - } - - /** - * Average membership score for a particular knownFor assignment - * @param knownFor TypedPipe from nodeId to the clusters it's been assigned to along with - * membership scores. We don't care about the keys in this method. - * @return average membership score - */ - def getAvgMembershipScore(knownFor: TypedPipe[(Long, Array[(Int, Float)])]): Execution[Double] = { - knownFor.values - .flatMap(_.map(_._2)) - .map { x => (x, 1L) } - .sum - .map { case (num, den) => num / den.toDouble } - .getExecution - .onComplete { - case Success(x) => println("Avg. membership score is " + x) - case _ => println("Failed to calculate avg. membership score") - } - } - - /** - * For each cluster, get two statistics about it: the number of nodes assigned to it, and the - * sum of the membership scores - * - * @param knownFor TypedPipe from nodeId to the clusters it's been assigned to along with - * membership scores. - * @return Map giving the NeighborhoodInformation for each cluster. The nodeCount and - * sumOfMembershipWeights fields in NeighborhoodInformation are populated, others are 0. - */ - def getClusterStats( - knownFor: TypedPipe[(Long, Array[(Int, Float)])] - ): Execution[Map[Int, NeighborhoodInformation]] = { - knownFor - .flatMap { - case (_, clusterArray) => - clusterArray.map { - case (clusterId, score) => - Map(clusterId -> (1, score)) - } - } - .sum - .getExecution - .map { map => - map.mapValues { - case (count, sum) => - NeighborhoodInformation(count, 0, 0, sum) - } - } - } - - /** - * Adds self-loops and also potentially raises all edge weights to an exponent - * (typically exponent > 1, and has the effect of increasing inequality in edge weights to - * "clarify" structure in the graph - currently we just set exponent to 1). - * @param symmetrizedSims input symmetrized similarity graph - * @param exponentForEdgeWeight exponent to raise all edge weights to. - * Set to 1.0 to make this a no-op - * @param maxWtToSelfLoopWtMultFactor What to multiply the max wt among non-self-loop edges to - * derive the weight on the self-loop edge. - * @return New graph - */ - def simsGraphForUpdateFromSymmetrizedSims( - symmetrizedSims: TypedPipe[(Long, Map[Long, Float])], - exponentForEdgeWeight: Float, - maxWtToSelfLoopWtMultFactor: Float - ): TypedPipe[(Long, Map[Long, Float])] = { - val expWeighted = symmetrizedSims.mapValues { y => - y.mapValues { x => math.pow(x, exponentForEdgeWeight).toFloat } - } - - TopUsersSimilarityGraph.addSelfLoop( - input = expWeighted, - maxToSelfLoopWeight = { x: Float => x * maxWtToSelfLoopWtMultFactor } - ) - } - - /** - * Runs the job - * @param args args which specify many parameters - * @param inputKnownFor - * @param inputSimsGraph - * @param defaultEmailAddress by default, the email address to send an to email to, which has - * a bunch of evaluation metrics - * @param writeKnownForFunction function that takes a knownFor and writes to some - * persistent location - * @param readKnownForFunction function that reads the knownFor which was written to using the - * writeKnownForFunction - * @param dateRange dateRange, used for reading UserSource - * @param uniqueID need for creating stats - * @return Execution[Unit] encapsulating the whole job - */ - def runUpdateKnownForGeneric( - args: Args, - inputKnownFor: TypedPipe[(Long, Array[(Int, Float)])], - inputSimsGraph: TypedPipe[Candidates], - defaultEmailAddress: String, - writeKnownForFunction: TypedPipe[(Long, Array[(Int, Float)])] => Execution[Unit], - readKnownForFunction: => TypedPipe[(Long, Array[(Int, Float)])], - includeEvaluationResultsInEmail: Boolean - )( - implicit dateRange: DateRange, - uniqueID: UniqueID - ): Execution[Unit] = { - val minActiveFollowers = args.int("minActiveFollowers", 400) - val topK = args.int("topK") - val maxSimsNeighborsForUpdate = - args.int("maxSimsNeighborsForUpdate", 40) - val minNeighborsInCluster = args.int("minNeighborsInCluster", 2) - val maxWtToSelfLoopWtMultFactor = - args.float("maxWtToSelfLoopWtMultFactor", 2) - val exponentForEdgeWeight = args.float("exponentForEdgeWeights", 1.0f) - val updateMethod: ClusterScoresForNode => Double = args("updateMethod") match { - case "sumScoreIgnoringMembershipScores" => { x: ClusterScoresForNode => - x.sumScoreIgnoringMembershipScores - } - case "ratioScoreIgnoringMembershipScores" => { x: ClusterScoresForNode => - x.ratioScoreIgnoringMembershipScores - } - case "ratioScoreUsingMembershipScores" => { x: ClusterScoresForNode => - x.ratioScoreUsingMembershipScores - } - case x @ _ => - throw new Exception(s"value for --updateMethod $x is unknown. It must be one of " + - s"[sumScoreIgnoringMembershipScores, ratioScoreIgnoringMembershipScores, ratioScoreUsingMembershipScores]") - } - val truePositiveWtFactor = args.float("truePositiveWtFactor", 10) - val modelVersion = args("outputModelVersion") - val emailAddress = - args.optional("emailAddress").getOrElse(defaultEmailAddress) - - val topUsers = TopUsersSimilarityGraph - .topUserIds( - DAL - .readMostRecentSnapshot(UsersourceFlatScalaDataset, dateRange) - .toTypedPipe, - minActiveFollowers, - topK).count("num_top_users") - - TopUsersSimilarityGraph - .getSubgraphFromUserGroupedInput( - fullGraph = inputSimsGraph, - usersToInclude = topUsers, - maxNeighborsPerNode = maxSimsNeighborsForUpdate, - degreeThresholdForStat = minNeighborsInCluster - ) - .forceToDiskExecution - .flatMap { symmetrizedSims => - val modifiedSims = - UpdateKnownForApps.simsGraphForUpdateFromSymmetrizedSims( - symmetrizedSims = symmetrizedSims, - exponentForEdgeWeight = exponentForEdgeWeight, - maxWtToSelfLoopWtMultFactor = maxWtToSelfLoopWtMultFactor - ) - - val previouslyFamousUsersExec = inputKnownFor - .leftJoin(topUsers.asKeys) - .collect { case (userId, (clusters, None)) => userId } - .getSummaryString( - "Users previously in known for but not in topUsers anymore", - numRecords = 20) - - val clusterStatsExec = UpdateKnownForApps.getClusterStats(inputKnownFor) - - val globalAvgWeightExec = - UpdateKnownForApps.getGlobalAvgWeight(modifiedSims) - - val globalAvgMembershipScoreExec = UpdateKnownForApps.getAvgMembershipScore(inputKnownFor) - - Execution.zip(globalAvgWeightExec, clusterStatsExec, globalAvgMembershipScoreExec).flatMap { - case (Some(globalAvgWeight), clusterStats, globalAvgMembershipScore) => - println("Size of clusterStats: " + clusterStats.size) - println("First few entries from clusterStats: " + clusterStats.take(5)) - println("globalAvgWeight: " + globalAvgWeight) - println("globalAvgMembershipScore: " + globalAvgMembershipScore) - - val knownForWithUnnormalizedScores = UpdateKnownFor - .newKnownForScores( - inputKnownFor, - modifiedSims, - globalAvgWeight, - clusterStats, - globalAvgMembershipScore - ) - val writeNewKnownForExec = writeKnownForFunction( - UpdateKnownFor.updateGeneric( - modifiedSims, - knownForWithUnnormalizedScores, - clusterStats, - minNeighborsInCluster, - globalAvgWeight, - globalAvgMembershipScore, - truePositiveWtFactor, - updateMethod - ) - ) - - writeNewKnownForExec.flatMap { _ => - Util.getCustomCountersString(writeNewKnownForExec).flatMap { customCountersString => - if (includeEvaluationResultsInEmail) { - // It's unfortunate that we're not using the newKnownFor directly, but are instead - // first writing it out and then reading it back in. The reason for doing it in this - // convoluted way is that when we directly use the newKnownFor, the clusterEvaluation - // metrics are being incorrectly computed. - - val newKnownFor = readKnownForFunction - - val newResultsExec = - ClusterEvaluation - .overallEvaluation(symmetrizedSims, newKnownFor, "newKnownForEval") - val oldResultsExec = - ClusterEvaluation - .overallEvaluation(symmetrizedSims, inputKnownFor, "oldKnownForEval") - val minSizeOfBiggerClusterForComparison = 10 - val compareExec = CompareClusters.summarize( - CompareClusters.compare( - KnownForSources.transpose(inputKnownFor), - KnownForSources.transpose(newKnownFor), - minSizeOfBiggerCluster = minSizeOfBiggerClusterForComparison - )) - - Execution - .zip(oldResultsExec, newResultsExec, compareExec, previouslyFamousUsersExec) - .map { - case (oldResults, newResults, compareResults, previouslyFamousUsersString) => - val emailText = "Evaluation Results for existing knownFor:\n" + - Util.prettyJsonMapper.writeValueAsString(oldResults) + - "\n\n-------------------\n\n" + - "Evaluation Results for new knownFor:\n" + - Util.prettyJsonMapper.writeValueAsString(newResults) + - "\n\n-------------------\n\n" + - s"Cosine similarity distribution between cluster membership vectors for " + - s"clusters with at least $minSizeOfBiggerClusterForComparison members\n" + - Util.prettyJsonMapper - .writeValueAsString(compareResults) + - "\n\n-------------------\n\n" + - "Custom counters:\n" + customCountersString + - "\n\n-------------------\n\n" + - previouslyFamousUsersString - - Util - .sendEmail( - emailText, - s"Evaluation results of new knownFor $modelVersion", - emailAddress) - } - } else { - Util - .sendEmail( - customCountersString, - s"Change in cluster assignments for update of knownFor $modelVersion", - emailAddress - ) - Execution.unit - } - - } - } - } - } - } -} - -trait UpdateKnownForBatch extends TwitterScheduledExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - - def firstTime: String - - val batchIncrement: Duration = Days(30) - - def batchDescription: String - - private lazy val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(batchDescription), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - val emailAddress: String = "no-reply@twitter.com" - - def inputDALDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] - - def inputModelVersion: String - - def outputModelVersion: String - - def outputPath: String - - def outputDALDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] - - override def scheduledJob: Execution[Unit] = - AnalyticsBatchExecution(execArgs) { implicit dateRange => - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val inputKnownFor = - KnownForSources.readDALDataset(inputDALDataset, Days(30), inputModelVersion) - - val inputSimsGraph = TypedPipe - .from(FollowingsCosineSimilaritiesManhattanSource()) - .map(_._2) - - def writeKnownFor(knownFor: TypedPipe[(Long, Array[(Int, Float)])]): Execution[Unit] = { - KnownForSources - .toKeyVal(knownFor, outputModelVersion) - .writeDALVersionedKeyValExecution( - outputDALDataset, - D.Suffix(outputPath) - ) - } - - def readKnownFor = - KnownForSources.readDALDataset(outputDALDataset, Days(1), outputModelVersion) - - UpdateKnownForApps.runUpdateKnownForGeneric( - args, - inputKnownFor, - inputSimsGraph, - emailAddress, - writeKnownFor, - readKnownFor, - includeEvaluationResultsInEmail = false - ) - } - } - } -} - -/** -capesospy-v2 update --build_locally --start_cron update_known_for_20M_145k \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object UpdateKnownFor20M145K extends UpdateKnownForBatch { - override val firstTime: String = "2019-06-06" - - override val batchIncrement: Duration = Days(7) - - override val batchDescription: String = - "com.twitter.simclusters_v2.scalding.UpdateKnownFor20M145K" - - override val inputModelVersion: String = ModelVersions.Model20M145KUpdated - - override val inputDALDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] = - SimclustersV2RawKnownFor20M145KUpdatedScalaDataset - - override val outputModelVersion: String = ModelVersions.Model20M145KUpdated - - override val outputDALDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsKnownFor]] = - SimclustersV2RawKnownFor20M145KUpdatedScalaDataset - - override val outputPath: String = InternalDataPaths.RawKnownForUpdatedPath -} - -/** This one's end-to-end, doesn't save any intermediate data etc. **/ -object UpdateKnownForAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - implicit val date: DateRange = DateRange.parse(args("date")) - val defaultEmailAddress = "your_ldap@twitter.com" - - val inputKnownFor = args.optional("inputKnownForDir") match { - case Some(inputKnownForDir) => KnownForSources.readKnownFor(inputKnownForDir) - case None => KnownForSources.knownFor_20M_Dec11_145K - } - - val inputSimsGraph = TopUsersSimilarityGraph.readSimsInput( - args.boolean("simsInputIsKeyValSource"), - args("simsInputDir") - ) - - def readKnownFor() = KnownForSources.readKnownFor(args("outputDir")) - - UpdateKnownForApps.runUpdateKnownForGeneric( - args, - inputKnownFor, - inputSimsGraph, - defaultEmailAddress, - { input: TypedPipe[(Long, Array[(Int, Float)])] => - KnownForSources.writeKnownForTypedTsv(input, args("outputDir")) - }, - readKnownFor, - includeEvaluationResultsInEmail = true - ) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/UserUserFavGraph.docx b/src/scala/com/twitter/simclusters_v2/scalding/UserUserFavGraph.docx new file mode 100644 index 0000000000000000000000000000000000000000..ac2715633d4f26a654eeb91840a3af7641d4950e GIT binary patch literal 41397 zcmafZb9`mZwr$Lg?R4yP&@nse*tTtJ$4)x7ZQHgxwrx9k>F+z|o^$Sf_q~5=|8`Z) zImR4wtyQ&VEg5l8FjOEQASfW36jqgTx%}vOU?89o2p}Mo&t7!_YbyssD+g@_R~tin zO*$7#i~4v;=@mZ2z>7Du1bQAqcL4;nl5HCb8=7cr!OGM-Hq}M?GYOEVhcS*2#c7!! z2)gLBL?Ns%0Xd?$){K!)CjaPXB`bAzIsf0{05CA2|JpvwFnLEvz-9~JqAa^`OzC&%Y zHzMQoHs<9_^d#Udl<~GmN2Zi+o(j|A!wu#54{f$l=+b)JWq?kS`V``l9pqN-a`n1 z-xYbQ(88Xc?oV4DGcE?ofara}BQ!)>Xw{%7n75=Qcqp02)0H%K zUSI|IS+LyEE-R?1g5HgPaIvFrG@qJ_vq)WF;is&pI_I0c(56|743aR4}J9|Lx_sKJl?()fuo?8sJtOs#>1)uNk}mcxrI|ry~72 za{Fn96jcz6xMxmJ;9n4cnfPRr<(!+87&k-D?CoqfCY?YvOTRP*eSuHF%AP(eD&zCb zhFVp3TDR`YuO6J8-Cm`&C-vraFlb_`LV0T#Wg}121*ENI!w))h8wWwB$35I$nKGot ziJ}(rr-6yK{QOPRF`jc+>-8b>jWy9DL)zF&Q%^c9!}G1zxfirb*?3I78uAI9I#oaR zUB=7QFRmxaev=L@1%0bDDRnKHwHX)v3Zin8p4b^i6;weE2tUyqT_b_bpPUiqEQTRMUNJF=rIK_&q$> zGv|-RS9C$DWdTSvyr|fQWE8LJ5$l^%R<FZ=0LC~0Kg`2AiE~L-qOenM(q0Y7d?N& zwn{^xM29zHUhuGUdbYpKpyV*4F-Yd=v`QOEa6g@deLO$q5R4Z6Or8QeCsg<#3Ug9N zDX#?-=H@_)7sJTo@5v2E!xJYv?V9uv&o@W8t}Y$jx9rO&j0RJJ@7@5+@fb^e%XO=^WxkTVh#d%1z0<@jt;@KXLU;J+dkt z66$Olbcz7=nt=p*Gfh#z7%i=+=NoN2#(0wCTh7FdleF4&v`YZep`7(MzHxe)Z|xoy zb&RDZXu7JxP`y|><9H)1#JFVX+>+cJycaRmi`MoW)Ovv6_H8WkvPFRkW2PpN+;4qs zC@^I?e{`~Z5vL2Y0I&jDTk%4r@7np0JjUBcc+7ZGTJVy({f!9uOlNs5pK=m4JHkw#*PPUnl zD_)8cE^_Tv&aCwp(I6Nex;$(5We2veDnvPk>l1Os&seUl6S1w)Xku`?K$WoRNUdyD+X0-iFu#0(aflMR}IMb%=KTw8<2PFUYUo zs&M5P0$N(vAMaHJ8B(f}4%6%;ftL7s^;a=4UEiaHARvITjEIy{L5?JV5EX1{rpVb7 zpUCuA*}Rc#*g}v?Q2AA5QVNn~CmAev|PhUBUe1{{tUgE=We{h zesru;Wp(!4eM=eTjoP^2qt?YPsAR;hUQtce6>^p)UmRferQRfYqz(s1=q*o@s~ z{gelthjQCgxaeu5OblSm`^6MYzlD&v{YDA@l71Q9uANEqewlrSnxum<1p?zZ#z{3$ zCVd=f1ubpD$l=>1gBJ?Q(JKg{{QQY_9qL5Xz5-s%duaD}VGtQ_e_PRlAMjJ@#ACRxbdJjgjR0nlcGQ|3rGiAIo4Gl^BIv1Q>VvRVTqjaX`-sqe`` z?mH>V8dmAZcE#T3)F7`^*3*Su)-4x{4&W6O%r;;4J6?z7A{Mi=Uu-njey35#8L=wI z!w}%V?L!{3Muw79Lsw{SRA1(T-gx6BL7pff`YJZaJ9U}(gZ{p<<)Ki3h!_$h)(R7B z&AxlL$dF>k*uxVFVQ^Zhc4h+UrV-(`J{9FsOIKG(C#;Gew3JigZVchBn$uFh-KLC` z&nwE&u0blowm{Abz4b#+!y>Z(GCAJ-wLxRl69Q}~g}-N%5N#X4*S_ydW;jwh&F3=9 z96MQH`s=#HvD_XQ;|o*UwpP`52xs~L$c5FfKOplpB*BjsXH#Q#S(%ADV@<%|KhQW9 z<$Zv=ppvr>3JDAFQ?$!vD@W)3qB}ugciQPn2cp6#Y&5xbwLy~^7pD2{u7x1Qs}5)5 zc5|5e9>-TaG=wpF%1ItiRdpdDx)OSTho61R& zw8{*-0j2rbSB}KHx}LO&Law|-j5Okn>tb6hJHO}~9gEK|2ug@N*D}c$@2Y^%Y zW8IaZp5WNhU&m+Rw9M!O)!*annDDO(!Xn6oS9S`ABix#ErWdG5C)=xd_ODh*=f7Ug zP%bzPK-~I&SY7G_urzr;PUv6I9LT3_D*ggWUA;WfD6l@W>8bu{WW`-S2&`1Y+;trF zo8bFRYhB*h3&)$fv1hkeH^72k0oSX^udUM0LM3^pmKcRFxPj|bQB#U_@+#Sz4-Q<5 zY1U>Mkquh>kmcK8qt$Fa>U;UOyG<>%Txyb1A>w9$9ZnJ!( zTCpPqcnj{2^O}~L@+OC7)=r@4U%=r_HHR}duN1lQ!X!zcOxYI2)@ze8^_5aVCg_r2 zktV*e-^nzPz_l!p{hm^5a9e0blYj#ILi)W?8T_y#Ts6|K18#idhx$<9>I$8BpvP5H z(=bwSc|=2^u;bd21qAAoBkgocIcx%<-%r!FR5jvir<`j#79yhjWOiwOPjwI{qm*LN z3dRFhRxe6Kv%08qIb{x0c<$Y)t){k~a%{+o@{HVNW2#U>9u1O;_Qr)Z?{*U>7Oup< zjw3vo!1%KZ)goN(m#pn%jdJa27|purE)Xo$!zQcXt~`JmKnpFvLTQ5_vA&Mwhgfa7 zcE_@PYg^QcOS_M`gV%rEQItqn4YHhJy;`G_a_eN*`F#n3L$~S1NGz6IrIS25@;VDsRB!kSX7P$RxUW1BPQU%?$wV-iJopWqGg~5c{+o;sFsx=aA^oAjWKRB zmdJLUi!WsZF^Ft%^fQyt+U+WrTdZrtZ=MBqTAl4UQCO%_**k(4d+%}GNLn@bcu*-0 z`h~^}oh2|n8;iM(&W4^)t1op20&kC-8p-t^*mFt z6D)w;vG1be`%G4&Z1y2;pl3d6f;ir{zlSE4>xA;Q?ZwAgRUClIOt`#gR=gqnKCpvJ z7FMKtBGfX+r(js$Mx4?(jja$-wjogb#kQoq?BjBP1bp6!hXmmwr;S!O*0{%Q*~j>k|GSXG%DEGT!M@Ox!p5^9dqip3;z=OPj*PoCIS6-_>{4 zGE(iOpU^Wy^&Bh9FKt(_p$FByMiNN8Z%!IJh^=D=MEW2(5a`&B!3uo)j$#SW;nX*PJk$?%N@ zR|SF9f^{im<5|s z_VD^=C@4`q6nc+-H3O}+z6VPM>C<%J{B|MAHJZJqPs}1E92zFUr>tp@;337@^9ZMo zu(X!W>!}ygqhtd9@f)^S%0z_++TV^+L!Rf9(W5Y_v9Uf5nodK`Pt{_+%52`o6?Tu? z&&pk0h+RMDy$X*>G8Z~59n?6S#IB5^pF^iN-Rfe{s&d7TdW&FQ9+9hV?aVUOPrTkc z?;-qks-K;(!glnBaRARIJHrqsX{>`$mQawWM6Ef#37e?fWFW6Y5O?B?B7XmiY#V{M z%jZ^lfZQ--Q<1212m7KYyt6ghY9WfC1V&@!C}URdfNquL&ptk-41@h%l}SV9coycg zbdrYZ+qad`RS0z0*1i*Z&+BL@Q>eUHM01>XQzPtT%f3h^w2bugmmXwe(lwNnmAI#1 z^bn_?_{F~Gz%?RvTt-ipJ6Pnz#{_$>nX{``?-Dj|-L}o{lC-!??ezV@ksCvcH$Np2 zv3e|HKuon|FJ6ajUCzFdbyj|HAJigmp7IFqHEf`*;=JGVCSRtOe|CmTlSzpWFhQ#X`xk8?ax)fM%n7G;k<%<9TGdZfTBR2Qp* zp!;FI0~OM0akU$N(^2hBS6=>tt021#AER2xiD*iAp}5*O=rwXkAu9+2xPoLDCk?6z zG$qWeEZIug1J0%t5qev|8B8Me|pLbB3aVv5IJPB2}F62xtQ>HeJ zVA&(jCge&O54^Nf3tJ`Pe8rXYZ2Hl7)y=Wrd;Fs-yU z_zoNf+%?b{I6Ds;O-w!|GeQ@T?CO#D%}2*&qKZC}8#QWdjl@-ByBICKvB*l8*9C=5 z7Uj$0Y1KdhoD}a^iGOe4_dvRfXdNOV>s8<46yI{9`(P75r4)zEcH2=fbv?qlWPqsG zn>(j>R@G%j~b_sh}YV>SXdF{38Z~B=$bT<7e-1sYajd$s#tk4p}-AySOJMz{rPIcM2_p2hI;zQ$);*gy!cVf zRJ=?S_H#%6(E!csPLdyVO{^@K_`_G1c?+HfLGH#u<6D8ea7?EH4jc(x@XVB0daC>n zCHX_@e!m+{pH4HZd)nmndA`9$J{M23v>ydb%yX%bjj+J7p=#l2&5(vb?eF&9#+GBl zsC^*6t9jrn2tb|HoLjux@wU}Hu@7*Lfl@)yNZU2BD02ZCSB{;uFL*yXFSHv=1jyO( zPkAnQJ^-B@Y~BRPxf{Ih>+b7}27`X|Hurjsb1O@(^ZnH1mrp^NoA!fRmw`lhv`lR8 zWe>T{SS4>y%HAc093L4~vOA~#(@DT71kPh;B67zA3%1$g3o*ETV=%uGG`$y+daJ_$ z!>-{E`@ZQmc)%kUna-mSHRZZI8KW*nJYCW-xQKwOkN>Q9T6yCjGkzArM?VYUxSxga zzv`WTALIOc)${Kooj87Jzi*g<7w<4V0kNnBR$*ADIb^L=!j<_R0m92M_X2wx>T3ox z0^2@24=kRU?#6 zxqe7apH;`3lpTo0Nxs5VHw5uTk$ocRYc?+3d_d?*08F9s0vQUB{l`%V9!T1S+kbB56a0ck0M10noVYkLP*3q$+AE6bX(+rl-Tot-(k+ONBoQT{-K z6IMVmPPn@6?HSbaTV`5Z~8krkA$7b zmCV*)kl&*={mRQHDd!EZ^)rOg!L#QzPqwKy-XG)KXUglJr(Krr9Kv4s03H%AGOzv* z*!$L*tMe1*(H*neCrmLoNS7sl{r1eWU#Tyb@psoQDR``-w_yM~TDLcLH{zSv(j7`i z*ACa^RbIg#kzN7x?;Wcht&L@)@%;>5maVIv9UAHv9dCC6&qi{I_`S9pYxD>kfFvOT zkDnQ5UqAXPpE~urD@W(Z5v;yN^vQ>()&+pOBGYQ&1EsGcA-rk1^GxbsCDMBPardKIty4Gyr=vw( znB|G`xr@c^fq|6#{c&aAiS+=Mz4)sCqcs?p>|RgQRf|3svlB-NCS@C{CTT|uPPY_c zs|bNXj-W@8K(CCaPtY@%(j#~V;ONwGJ9uW=PY$D{@D$=ZqX5X+B#zIdXcF8bhryTm z?CPfGm94V={I^f@)@O$Gq4_xWa}koqN@~T?5Cog5poQdY9YA{LH9<1(yTAp_|fm9 zO|xQt^5tyi+2+CaZBX?7hWG4(CrwtkUUP2tvUmUH=IFfFK8=|=pcyw`IpU*t-=zdU z?S?|p4|Zv4?~&B&l3+nPwJ|Zw3~VacoI13sM2L+KDH>Q1UpJ4jqwB4;>xvjBZ1qFM z(8K2?vnbqJIg&ozv@NPJG+;r6!wKW%?EUh{k~$54;5U*7+Shxi-~1kU+7zPU`NV9o zJQqf#ibJb{uL@ry#eT~EEJBuxV=DEh*+ZrNDo(o~1{EXK(pl!UflL3WG}1PRI$zet zkeUlDYjKs?_*RUaq!vo^{<3D;&RKEMm$wvJ#lW;7x~O8g9gCR90xAY2mkL7))_ovo z`}H_B*Po_dRqjXBvIFH;DC2e1E^Vlr0&i4*S9v~|UfgzBVz9 z-h^qpnw*i*hHCa1=F^n$a~|birfQ$w0zUozhw0x?V8!GY zW?xhHrBZwvF*>S|LV%K7pR+XYVAPL%HR-GnUZaV?Ohmi$~IYaxlw-{n8~c%a;ZF;kt+aJ!^dW_iM)oi>IB=}{uO}E4sukq{R zdo=dPi_PcDf$O9WBF$-y+thnFTWNe)d&hjP`@WbfACna?*pkRYkis)O# z+ViQtZ|{AV1=0tjjOz~gA#I`~sd8eYshh7cC9L3-0`nJ=q8tQ_wKJ~f{PE&v^ImC! z$jT%Ivr7gwuGBt23T6pp!_+FddXOGPeXt>Z4{cU zw|UUMqK&%wi?SV(#_)biOvI5`Lw1FMV{bfadfygDh~E*(FYnmZpQ#Nz`X|RssW)CL zmsv;)e!@xk%*TO{?9VPT1L8D;@Dm%tP@CDd-kYp+3)UJEowlu8ti+zL1tbg17ee|K z7!eHZCaZAtb`h6E#)xnG?T4tx+xr3ptg<4x?18Y7O?1rN4%wot8YX3tu#`3xz<%~{ zh#saRclneB^pdSx;wYXT&}myhBTsHYswm^FgoP+bgPwtU=e?a5^0S_WyBRy@ zT=^T~YyH;6C0k0Ik4Ltts51nO8y7?$?+0hxho8`LpMl zqt|1bZ@O*oO}y#%^skeH;BN0g2urE1O*~-Q8?B9rgLhw_#X|c7M>$7yL(IM0x47WcEBs+fCuMd|GHkoCU$uJ)=Z_*6&u1ZVw%R)tP|7X#5C z250dVYwViV zFbMII-LHVIor-rsQ{<`FeUC{kb< zm3E)P%!G%Y@iruHC19}Clkq-~@;e;2M{&L{6jf58p_UtRdS|Wo?L`*3Akp>{C`iB6 zAaHN+zF{>AOz>LY_B6}d&E*zo-ZSEkT#qbS97?ub$8=4N&}hgWh-K$0S<7t(nx!k)$EmTEL_708{0ErHo^@2iX@#vlf+3y>~V2 zy|H^>=O{SlQB{xRj1Znw87misy~oa6YgpCcpa}R9!R5{n+c&9|E_m#Izoqkgs&{gu zVdeYE#YN0Qiehg(OyI}k`|~_5MwvK5+Bde&MHl8OMcwbYFj5L6B_5L9$G4n}UN+{cgFvDJ}Q2C^7*n;Z$tX(M37)hloo3O;(CDJy$HPje64z z^Zj>oMvmQ}D?&PoqaJRqW>RGuT2@?YeY0}n$zkLC z?@AL7k=n=iym}RzfimF}Ckk7S4i!SuosgYdY zOnPobj%<^997@RWo^apMQFU^Mu>8QbsXJLv%852VL%W$f<6~uL|A#2`FR^mAA2r)W zuu5fK<_URct8y#NKO5{@by^EpmqgXVn_$^8cE)TSw)$o#Kzh98F%tvjVz37 zlk>O>^Y7D$mh6|o-OZY|!X%^6hg~0BODkedWMcYMRG9Uar5z78%gczHcJ_}kRWV^A zyT0lp3?bG)?lxFlI4m+X(32+a5rubG&;XH2Qo}y0Ed0uQf^6-`dNq+VKg1$I#ugS8 zmvd_V>OMguy!4f}qU>2`p}w$-e@(t?ebHPJ^KR+$xc4yPfj#4+1m2Px)2Q1h-ztYA z*$B6$hcnN&Q`XT4ozZ$>6)fhWx-3N`a7eLrSSN<&rYPlxKb-19UxORXO@NwQqnH*b zrFo{@i+M29%35YF7H)cmVeD-MF^hq@7Bd_IUW6&}F1dNE{9MVy6OGf3npy%auc#!l zeF;*wSXSEhzMxm3(bn+$@{pN9F?ieF^+uR@?{yo@@9{BJjv*_NM8dCkb@Y@h1jz-q zA$+W1sd72g)5%~$>4KGggJ|CrW2`*7U7uz59;h&B;dVLn$3EY5?zUbv9agb&K`i0r zOl}&+nU7L|pUWsF485Lz+k)P1jnmcjJ-06pdii<2W@iCnSK?4XDR~Sj*sJ}kQAr(h zkeSm~#a_cvq=H6M=(;Oe=`omAlnE+!@^YDss5(zOClXr=5mGxVp0Tucm;fSdTpxIt zNIY9?=KYOL+c+Df5Z@WTSrt4#*}P2^j&HfZM7U2n^ur!a-2Vo7BrRo*TU}fNR~n92 zEYFC_0C7sSv^-0OP~6dhyEyLXfylx4 zWuDbfx)16sM>vQNL)$mThSjdj_ROqAIX7$7!oR*Gd%c-4!a-?2d@#Es>_|!{%{4z* z4#U$h6fHh@d%sk^m;((k+L(y3lcE%C#hn`9xfHZ7gE(X`B2zcW%A~fRdzgU;L z0^SB}>4Xs_R1`rYJ~WPLvc06W`ND1zlgacFz9xf~7rd^bzKMAl(T*Zzf6L-%vEbyg zf#wL+4(&k+A-Wmgi|jUI`wQa|qK;jQ4?UZ;h9;X;zbk~m|8kdwv!Gk_-b{NMr^FX^ z8pphl2eiGK_0;^=`oQ^Y4aO;$firZw!ad^mbjUpGfU!lZ!?{a=%JEZM=YGm!GP*3y2+CcS(^}aXCXeRg) zxJEyF?ZP3P{HL37Gy&_1ki+rDwSI4T_tw39_^d`9E=N460>>@rHanFc)*KU8AnV>N zgRnzHx55dew?<#spt&}#u5qYt?2R)2NR&5?bFex1lVEj+KuAYz4|?Iz)6qdhQI7NF z&Jsdyc{2z*oEiSrj)XMW>pBIXQPJVSbGp$ZF`Px3>_C~;WXB?D9iJ$Ipop^&lO*+i+-d&1lu9izK7TK}p7-YrCE!v&feb`j% z(wCu=;s8kuS?f=8^e>*m?SGjU{lk3rzswK+nET=XXfN?(xwZNYdhKTRHX}5fT5Hze zD3mEn58fuzg>szFE{Kp=f^ipf7G+WB>*m@X@w*6PeKA<3(##9FJr&2NEkljW5$SHf zEXDF^+IUtRm>%`g-^~<$x;Ot=sNH~*WTiMuOG~wvnRfeo9`?+DVG?T#7E2Wc|JTNgV78W zMT~-&masf*yoHG5M#=9r&C1tUri#ugWB46Da9FjVSUsyT;Y|z^OJrFsKPL+T<|TOr z%I6es)g#t()~(}1ooB7#7^#Ya$+;>F!sWbFsC1KX*H-m1=(ft0MvH3i$l`B{mc9iD zI02^W*@XMKVLHhCeALX$4LL)I!j0X1F0@4^@Zq95N=%z0J#rOG3acmQl%I(+XZj9~ zDL}55Ckw;8FYj*@z-SiJmM3AtVW>c0BB`UK>XC$|mm?A~}7Y-Q7KXIgXL@|K33a@04 zs&wp+2k5_16+uyah7|Yvh+pCM8+%K$5T9m`dik;JK{t&8m;w#RF(v{kyaL$l<@*Z* zmMOZ&GCJ_EQ%plFXwb2Ezv$J8J(lcwADj;O${K_~^E zQT0L>L#b4;<4KYH3r#olzoD@^{y)(uhFpADugDjoYY$8cE6vovNH$F3k4;bQ@6dpU z516l-IYPbLYEx!}_#RcqKSi_xF092a6$!WlL&Z~en&C;Ol@vno%T3)tk%_%jvhY>f zsc!!SJcBOM<&t5OL6YfxxfnFaQ@u1*2P0V#U6v{!)PJfaTnRa2v3V{j5aPRzP%6$C z;8E6>=DTL+_Ne$pltnEA)`km^5aRPEBE-|A{jcC)@aiRnx_)7Bk40EnA;~0ODwVoH z1(2fwuTcK4YEle=Wn8%UoeUlMhNm|FUy}DN)SI^=lf{~zAR|$F3lBXKf~V6Xv8}>} z?$Yq$d;EtL=?4F8YNOM=$)!C^66EG`OWhZlVof!eylXmIum*sP+!w{yT`FADj#!E} zy)44_;nH{8=I86DDlb^wSy0^1Coal{1V(h1WSZIgN7~;y(DEY4-R4n z$z&LLddw8|RfM%`I;8*5eOq6iM!1p*vfhB9Klj3g1_A(tU!C-WB@H5WDNTOHcB%j| z7m9k2!gs{mbJDb6YW3f%1x3xr)SI1>n&LP}rFl;I1~kckdH~m!FZ* zRU@mT+C}_(YBL2jZk2?U|9}y$zIMD-bbvwbq6C`PY4NtXh$FQFQ^94ZthlIys?45D z;MaVEMSq>RGAgyBMl2xZl5E;qROx3YGVqk+EtUg(&dS^QJd%bS$5jE-zb&)3o8Kop?-R+7i+U(X`qX zLO-@bK#THz+MKpUNh3A+XJ;&%@q%1TpMj;$sL6KPr_sdUMr{AnD1Lm8_HO^Wk3Ga5 z`QQ&!QW>1ZrDPh)=wlyy1QV898}dP!Q2n2ACmaLBgIVc^k+j-t3Lx<}3ZU(@zxruO zMJ47T8uZC0LJU2&(*}~iaBGFw&*!N98E=JS47NWmbT^z(b+z%!2iSnxO8wQJ5M#i? zki5W^$wr=V6=IKV%y{cUI-we7_7@YDA;O8`%=375<2?qPgl7hve=*F)+sAX{OG6p| zo1xSHWO$u+6Eq&ZQO4pXo6Ub#gk?8uSEK=X-Ix8Fc4(#|4~uEfRiR&?8@{__UI9|o zLhn_eY9swu^akFa75eaLW37|sqm{QUGe8zoR3iw{)M=GwhW>fD{_yVLFk(!);#cA9 z-qXHmZn%+o4gI&m!X>TmZnzK=4yV=Uy*;AmEkY6OkTrK&pAYtNT8L?D_`r;dZ=U51 zwfoCWvV{9ZW^rBv_{W;p(EgjgQ5uD7yV-K(PP*Ni>@>hgy*|NF0j+RC%i-xfy-1*U zzaT`pR$x6cRp(~m;!j7Qz`&!qB<;sDnsV^w?;SYHS*H zMN_M1j8*iq)~9tox8k+j?((MhW-nD>cS>_Q(2Z+G=m}l!mdG^S0i?|U&199jt*=__ zG~LL(x*>m{#s7jv{)C1U|FioZYhIs+OVIfX+R0$_6PlCdZ|L8oC}Hsb3-nb-A9Pzt zruMo=vq-xR^l^DfH?q}C1`Umm^XXR=-?j#l))QWoFk+WrWq9$bJ{uJxgDtDx7#97) z$*MlS_ML9zKfCOFtVZ|QFaH3)cO3czmxufdype$!C5-NW0iV_p-F*6$xUp*Y5AYrx z(I+|OM;PTsS=8S>4!LsM{9G!btlEib#3_M2fOFM#FnjUoU_S=JdQq z-9uL^4>&h3)dz#Ry=`^=#m_7`|2iO0$YGjdu!-bB-xU1C!!S#0>LMaY-(nHHV~myLI|GbGZ{Zk|gMK-SxUpg4+dO zjwxQ2Dad%|?muz!MVxBUMF$tG#uIoZ0; zTn_jQ5~aZOgTo@D2@gLP0}Y$=SE{ZdnJw;TMY$$qWp8`w>;SlFm7EszRw%v>^(UH& z+E2QmIqLmJw|>l#dxM)Yu?=lqyC)Zb*_13hh(NdMG~$f<7`r+YC=`tQq5Tm59EE$j)O^Nj(=rY!daP&58e%S)QZ`8~<7)S5XnkUoZYghc<)^#=**AIIMknqO{m3;IawwTCTNft8?7g}nJ{Tu(CkFLDw5f5>6_ zU;el<9~#!%WIwGUVCcoK0{|0(|7jp=J{yPz05Hu@r#Iiatd33a{Ig-a0oZSmU)#F0 zP`_OZ^Sr3jCnVOl0Dy0l<}N{;gWS;RyPS(qv?$JcQa>&P` z3G6?`v&_`^hj>-(79C0Bi?QGS!4RewcJBmtYZQlkybIJ!N1i;Z*o6Yhtr!;>M3D*- zd^2W*fuB&&MnSYs_RPc68zaKHRY4563ai&SSG(I7S1P}-0p^SUL!WQ(aLVQjq8sy0{uquMc_GS8+pT<`5~V<6IxCn1DRREBsuk7adVUIho^*AA4wTWKe0 z-_RPZEFBy`$Zr*r>>C3$k?t=D5hLCRREM$Nymg^VpIDyXn76+%_weuv{Q>HjtaK_* zop>F=@lZd8>-f~b`w4uf_{4^2Hh_`Who2vAurw&(7NZg$ZC*;lL1XEBOL6Dk|EYe8 zrY+*)^|fm&u1od5r)o0O?Nknfsl0LMb(!}k-#_%Tfh^WMDPZipe)GJv^qesY&XBF6 zG+*s&x1R@>C9n43zZJDGfeJvz!Ai(77)X$mBhr8Hm#Vj6>mh>-WZAp?Ija^5*4G!+ zh%2C%5rmCo=<6c{4=5xCN|!%5dM>dNoWW}bIMU`QZd8s7iNF5*UWTo=KJ+B5P4HQT z-c*wwB!bN;E-j&41J^8&<|>iOn~P@IRV`<7iL0*n6$-|OFFS-zpVu$VoEISF5kpki zK5+@DjAycS;D6qSqtB<#YDVemOk!Wxf*o5V+P)NEwF5HC$Lx@I%_{UI z=*i3Aw4uNORk)m4c#%xLcH4PXxMZr|49Wn#y91$m%*IZI0Tf8_j^HKTa`eS`lsd9( zwEGg2M3$nxQr(}IWR8o1^NJxUT%NdfS4N~59a{*$opzX)E~$M_I`_@!2a63piw#(WcM( zjJmpb)A;x{ceU4gH^RedEvX-`Xmf#osUDBeZWS&Cl4kv`W*rw_2lIV12mYDN|Eo4mxleinsuUyJ@Spl-Sv$6G zerA*roY&g*@%r;q7%GLQ9E|gAW$%FYtE}W6Ek+#b$z8a42u_tvtUg|LNFD;la*bhr zKaGVjLrUA=WR%oE4PT?E@^5^Ff{L0jn9>ME>NyX$^$3%rh2Noa3@EI*b-U(CD){S} z2Q}7lO^-uHKo!v}05(8n!2gG^w}6Uc*}sKxcXti$?(T#P8r!rBCGL-essjZmNfNIIiP)*a7!O_*3oa5kY3S~e7!P3&&TNH#_N+4bYzgs+Q} zSK*msE94-#b@}VtL5BN=zoHXdq7z^X_Qh^<_gypgJ1o}|j2}XP^j%|3Dcb`_{C^;d z+ONBN-9g846;0^&I%u2F_FnG>Btmi{3CbmIyXS7VUOllw48z8{p~muc^EIw~d9YCh zP;u)vhma&Kb(PXGt`4}g=1zX0riy9Mq+40pf`pZ5~Qu57vUR%QY0J57V4 z!OVDbBJhK^TdyB}Arsiirg!=8wT`Ly?+p&%z}XXcqk#8a3-&qeY*zlmKr0BiZr2IS zf7>12YB&ttj2D{=rq5yTe3qDdGnv&3bl4%K3}iT}DiPkEV4X7k@9;Kc^PCZRTN?(@Irsi+nEjy!uu&si27G=ai988}q7g6$NnQ*oyH@ z#~}4NUvG8c=7{Mo`(fR&G29^N*$iKy#}wSlvNlPF{RJdi;pr+L%CqE4$y~c>_SHSbNCjHb~IU_`(_vX(bZv_1IL8-J;EvM4WH12=vPdtZb!V(C9c=z5Ni96hy^r z$hTm0`j>VTl#+6l1#%Ob+)*qY%FqrhUl~)CZEa;+wX4%&IP~>*jd(S{V-hB*qC%J) zYtEhOSKW!+yRWLy=#tD#28W9IRiQ5JWGg2iR4IYKmnoy)6&e*IQYKf4MtM1ke^bdGArtjj0CTPbTCF|PyI*iNXV|dKWb*$Ny0YhUiv)-&`cI?Jq z!fonVnZCuCok^@zYEh_CPLD;t+IUnVY#yenx2_q$^96ZmPLN#fWVcV#K z(4pg`sHaa=T4UU>x^^+FDbzYu%8|H6q_`xf#JpUOnC2pnSQp4t%8_*)CTC`%F{YiG zm>}YOQ%?sh2^*Q@oUS<~Aa$HK)Q22-uw830n34v6R@VZ#A^VVu^7 z$ioco8zJKas_gqUq5sheXev8P44Y!X(U6o!DCR>L(pYgyTjn5yR=Q8?+y7T6W?(3s z=#Nm$QGc8ajqu^OwUo<66h`)gCv zjk~x`A@CX&={6dWdexRoQK%NP(A{?RBCaGUG-H|_sizB{q0yaE(=`lTSWi@su;R}E zi$}VK=isn7c>EyaxBjA?zM%=QAnlM-Pdx;^lv%ArtzD3pM)04k>&M%_8k*cxR<4j_ z4UcX6^hczSHn4&M$fn02w#ojpM8SmYy&rMkhGwK@5zq5Ec*r0$BlTsjW2cw+;yr-%WDG{~xzr-m8F{AWC=4!^L zY`^Pe3+9zw7jHEI_=|?QG^+Ai%Iv1CADsKw=Q`9EqEno>l12DKbdHug6vd~s57dU+ zDT9L{6Ewt8!-w+3?vJc92T7hWCsa7!`Z!tPzx5N(;x~=kVno80t9JHn^6?cjP0eP+NbYEEQG|!7kl??&d<9`f4Kz>4$|NzzJ@&X_>8%Us$4q zN85`}i>mSqTE)Cu2C$Xazmm&H5JBnIBo?xcXp$$Ik4!EC83>ml49RpwnU(DbBtff! z;{j?W1bM4^8VpAfBRHo3x_J{g4K-v8PKeXY4HRW z)xTN5Bmd1Jr1zE(P@$+=ZRt`KcqGq*sGZ&tiG=y)vci8&D*8f;fx8lnFqSd5uq<#u z%2b{iFK%*)0uv8>5ymbZ+8%LV2b8sFTITKnn8Y+ybq{ISRl(uHsMi7n>*N7d&QCAp zU$>>^F~pQXztm>lLAo$zdO>z$MDvC3O-Fv|oMe*1;-heuqT`p^U|S*+P5`T?X7Yw+lv&I21Th9 zou>30%MzL9vEa#A5UcwVKoattt3h7K416|jIzV=~^tB*C6dXCq&Dxn6e|iPJQUeI2 z^bZi`2awjkfowj27W^i%$8tiqBqJ+qWG<`cb)NQ~qMxTY|S6Cr@6P~l%XFeC%m2pilAn7y=dVleRB)jP?-t%L}5 zri0co6GTTPN7$A8?SelQ3QOk$3iF!3mI?s#p_V+8{;fbCnQAKewF$?GEpk>G=)|B_ ziNc?VE>9xH%5V(X2a)0gFmK{dq>!R;E@Y5R*`nvbd~qA|Kn3p;c%+b9uGp-EjM0*C zi2U@s0ckF|WMxMIXZ(rXdaGr+)1jMNZ3Iy-J=k2RmIGanDnwl6n z|2>7@M<=a7vi|(f6K2!NpnOg$2Ms2*7wWT5ISusV0-M+g(1p?%*X@qQb%tDCTG*xUOXsFFHgRqepRDH#qs0EJ-}~~0 zPCdVXEm8kL$>7?pZyFH~!P;BB03ja{FERhS%M0IT0?Y2tmp4Y;2Db#RbRrsrlbyETqht>| zt=JUU^g^$V9*_0jFSYW3&K@Ckd8D^L!+OmXlbjmsTU+uaB|*fgOclhcadG4KfBx(| z_218*I6S@Qq@Ma+rp7Jrz2g%fzLyP#O|E(RdFOqG7PurT5F$#gIsTrdU9Vd>@Z$7b zadb!35nU&SZ&z{3K!}VXM~w9L-mtOLRxlJCGmKoR!KPI?CwD_Q_R@?CX7A4`V&0>#YY=gF?nZA2@X)Vq z;2|8~A-0EmAun};x9+DMX#|d*>WAs^pZ7M>by+zN=^c7lYlBDUyZ6V82asIFCmByy z4-V6A^J0OSZ?#*tN)K8_;|?&^5==GnQ5%+Ob}@$BzF#ypH?~?ThBdtk5?`x^`kAJq z!VcySfl~#${y{_va=8)55|sM(!g?N*EFP7->hy;Zd(b~qfcKf~mn_=q+2!x& zx6<1qR_lRn;K9GE3s!IHP6-V5C3vUx$12+mE7v6M{U^*U#G=nY}R``+*P-2p5~g)JTGZ6yZCBC&vnG)`bZ>c`%^F4zKX%9jVD(t z_|g;^IYMj<++=Z4y*K%!o?buF)CY@MxNSY5hu^*$D{BTpQdR+;p!o?rL2?c} z5f403E7=NZ|8EF_C72eF*9`m~irtSy|H}Q5$bHfVl%Tlu1Eui;{x6jOOz@v5|7R9B z94(Oc-@g9@94{1?}MDE$OGVL-J5CW8egv-&4lubnOYHnT+2 z2hIiZk4^-sv|yIS&7p@z)9@VDYMmo35DLDJm7RLx{H8 z(tkgCxd=Nr$R6wejUJ6JBji5ryXng9`h3CL=KX$THFsk5z)>~4#|2;FHja$__UQfu zbMEMM{JNgqjme+gvH9niu^PI$!#Fahnh0UHO~_^M6p<);VQck37a+iFyft}`-(2w; z7iC=e*2dVibAJ=(b3A&q_&ol!zk2s#Q8%gWNEm(_qTF`Doi*i+n*MTc(&qij)7Ik_ zVkA_xG_LcoeLpZ7H!h!PGv~9p?>{x~mYl|MVSj&Ulj|$~G=Djr#@DtkdO<$6zFf7H z=CjuRC_mUzbv!y}r{x6fzpiBvP5G^5#2Q`1d0bo*&%JKH&{qpZmOw)g|KvNvyu8E? z`?BlFy@4~&gL@QhESQ^(0WcQK$u{;nT@ZuQcP;NbGlys(hd6wBHUk-v&xLjh^j;y2 z_qsO52{s{N3TV_rvdG1nv*jq%iHUdp17T5O7hfDuqJ}6hPtGqu>aHteVMcQL6LIzH z1v1+W{tdpp{FM@Gg<(8kk+5xfnH=_jcJ^amXJqIV$At-%}VpeLIES1o=V!r5br+0u5k}E@Jhn!e1^V7yHb}_Tymbi|-*oF%c`Z*b zXqbP#L!n{da-QI}#BJzL4jO}}}Tm6pq01b;X(+pMn(sw-IcOLc6Q zzbajJsWOQW64i^adq2jM?9fqlz|z~c!&jvE_8XdAqk@d#{e=7F=}Jm^)TGX}xgMK7 zs2ewJK*?T8|NM1hl>^U;N?@vOk&#>wa2;5~iVKv`*#X01Y&EWAx;>3C>4Dy{E$OzW zG2P+`2~}~1-t+Z%UaiRD4QqNg9A}!xJE2aSN&gxd6$*eZ{+ZI>WU|LsqcZYHw^ z18&$Sm-_qx&$w(;pD_V57x_5`g|z&=iopf{>d^GmWNdKy+6TaJ{Ndy6u!%| z?|0ICjxA)D>@Uc*csp`J{j$0^J%WuRbbFOl`|b>#RgjS)gw-9#wc6kDPm+G!bg6Q& z-?>*N96w&I==Y>HBs)5O7nk|fmtjJAaedHUGWhJIIdXsH1};Z&o|0H~s3Kmt!{|gP zl!MgTZhh9cWI|zels_(>I$7Ld&Hb%$$*gbf_O{;8aWk8dx#G92OYHtgT-sI|JmI9X z+2Xo@uE9D+^|4~f0Z~=P&k`aIo6zOE(lyPvH*a^7qVHnz*y@Yf1*shkmSe;<=DuTm z%3Il~=-C-W_gWXTJ`PmM40=i;bg93uVw_Tf#MOM%T3)$x)k3$H!=}yEn>&fr?-B zF0hH++FaOq?B5)I1{||>+q#Z63r$%or>G%?t=c=?7wuV(wBINV6S{Y%0qVtcJ<3jF z+=<6OyDR%@wLN4@t8h(HJT&VNLe_~jo_l_(LDta*^Qn1KgK_jwVHNRd4dw=M$d*d< zTu0pgLWJ<3=~#I?e0H-(^LGF34@IQdKofj?L81k%5X$=XZr_g3Ll|p&uitshjbh$_ zw}XP!a~I!6*0@6d+3~Gc8_|8wJX0nEG5?;ysUpNT`MhnQ! z>=}E)_Uo_D4!=i-H!g=;@soawqM+}2%0-W|us~5}d?qJ_36~Kdq1^ZXb_b3UYGQ&S zKGaBrtL$hj_a^|sD~X_%@ZxDV{wX6SHEdpntR(Zg{<0Jb+q2$P+eD=fxeHgl(vdY; zEy3VPYEW!2F0y6|?5riTzUEr~$XE?Flr1+#sWgI`g0N-38N$dG;VgB)$hR-CPjVA6@ZbK|2R?IbVPj9RueJ61g zQTn7#b~wN>DHuN+<20K^Ea^|{nTJMKJXS^LOjXGMmhtnbzN2SHee6lu7=%Ql+V7h$ z8uKn$za^ct^!rM~U1e-` zGnk66Z2WAaeNs^IWvnsFnrjDOdPuXHZvmN*~tV$YqW22hU4 zKydA6(+vgeX@)K8rA-lHrF|O+iCFy!??SJUln6U`{S$eZtZ>1z$J7A{vB#RJ%3IUM z?GFTSG9l84Tw*^vPn5ya*{ZiwF|$?VZLu({oy<KgLtt(ltgXuQRsS})h)q*X*}Dj3BTujCy1hU!%hT|D z$AmE+C<^#22B%?DsC0%zUyx#N<=@xL0<&DaT*>P^z#R!!**>zky{^uW0CDlf!WTW% zOF7}N5dUIw!O3Tt&TFlp=K}Fai+Qet`BID1-fnwSK};3D38Mpiyp&=cU%%D{p}*^x zqb3&khHE_yja0Rxxc;s>XB?RI%sIIrgx|$vJNjJfnRP-g>pWgu_FiY3azP|GU&fy$ zHoA7Ki7yb>@f}Aj3sMc;^l_Vly}%KgV?{f!t!Kwl|I0 z;#}vta0fS?`He22mh%Ab>zSjyzfA!eJ*6F7S?2>?0bXKA8a4}mNlmr4`%CKY;^j`> z=m8magBwdGH;jvzq5sI?)I^-SH{6Yl8F+HbWLz>?SmmW0y9qd|{??2Q%!y3BniKNm z;ZL!C>H5{r*D%L7K)~#b)OcP5io*adwy0Gh*PDI6L|t!}=4ExO5A5$^pk6Kgax#jN z7ZPK&8wUt{dI)V1?9xtYzNQ7v ztO*rb-lCc=&wpB__z69%CAF*aT4if@emY)!w_X|9V{E62oVQedKA z>S>j-y4kRaCsFR^ZnZj&C;x--nyenzV$-CAsD5NX%j&M9iGTAZ-3~}`r)tzpeK|p> zYX{+cA&Rk+gRYBX0#xiscx@BUf0mV5rK@Rd|6ao`hRjKzv+2wv<|qX_*EiI-DlOYn zIuhBgO2)3rzr~wO4@lA7>IQbtr7*~jdx!u2JG|YbtR13L?+njOa|@JyBLV`A-TCF( zqESkkD|gLBmI-=NFOL}STk8BZF&>l3(aijd9bQJ*XN#QAZ82P@uZ%WcziTyLGmtj_ z{7D=1<6I*)g+-YgN`uwOI#-Q48~x=>FYunMJMwZcV4KTBP)VdVNNTZeaH8by_(~mFIIUkzevRWe0806 zI#3X4NDC!n4BqiiHox!BX_%F0?=zJR#4D^<0H6dgZwvqf421!N&^zQ~V&~qWrb1;> z5D+mo<{udIGl+ZC?JHx;Rg*;L0A>)F1yLuw17=nK&dFX7VOyaQmoOOG&yl8L5Ev8^ zsAMC$p^4u^lQB%5j@uDn7>TGOGqfI2$ZB=aYfH*?EW&%U>RmMKrZeO^po8y_ORJAuu2alf5X)@&nvi z;z?0em7XUDv946&AP|=MJTZ~1TqQ3%RVnBD7z-?B3Y*e?**xQuh{6E9d6dWNo1>`a(s zC|o41?)G^9laH(zgdwFfqn0M5qmk4{+|mBKuGpDeB*Hca049o{kHxBY!z_pI=Qv~x*!XngMhA2 zK|mqMd-Bzff1}&A?0F$q_I+(lg>>jMh!2Mv!%u=k9Lr3KKp)de`tu+>M$`{-7y?Sm ze>o5^;Gf%vO8iEL^k;Z*AZ>bWQma4gHg(ObLEe#*k z059>SUOG8GCK~hCG0~W! z?9r;jAGx{@d(MZ`H7|V?Tyqt~&<%Z^g^oo~J-VY=6RI`F3WgPG^;8ENC%%{Z&DCstsi9{3Oju@qOP8I z?zwjF$K@l2u+yxVpa%xxWVR<;u&Rd~Qv_PhKdlF$S29tFcno?a-|z-8`Ex z^q+<;Z-p;22~ptb8EdMWX6Ttm=iAMbz(}ecQGedjb}5Fc$sIWTTiEhe_wpt14yM(( zs+Zci&s+vFohN$u(fL;S8L4Iqr^XLY-c%%l{`{-0f>LI8B2PMl-e}&B&>Ca;vD36B zm>ObTKXTokmt=GA1Pg<73*UT}&~8jxyra(+1E+TV|BlkWOgyynDI=NQeYN1~dGb`k z{dJgCR8;r9=me$HH>vaO+E@@q-~o!Gd_Av_(}%)IiTJ(@C;6#RelTa8eu^ehU2lnV zT_(Ch5}qAm_e)uyeem-n4qbR{}(+cNC)t` zegCb;&JXu9c{Aea=_k!!_qQh31=5>o_q#j$@H|fg^@ud`YL;$FQ?A=0{Xw7ZN!qTx z!~``yQ-k)ygOqDjDS}s_h98l5|Jhsertwb>>Nrr#BA5P*orSfIiHid>^l z4hRNyp70k!^m6-S1=ZGI?bI#=N8EkZ5tCQ#ok1M^I9XUx<_7FylnIh=t8FhXAWGTs z_II)D;%rVoD8fzeLBP{P&7m-GC^8(nH6=Aju)b?Nu!ftWOp;{WJB45y`3sc)fSsMt z{U*vDWNvzNvkWTjBHBO8H-|Dgftp5=u?UV}jQ1T^K|k4iNKJ1wzp@5lmfj0job3bS zxvf8nrI!e^KE&LVNscr_guTJ(=@g`pmvrYBp+&gqVfbg1$rDg0R>WBZYGzsXJv#Xd zg;c6AbD)Ute_{M1;zU@C{X+zh)&E;W%n$K~&t1BI3t-8EokgJQBr;tqU_C*ZJPV=u zpykTwN9eCY^@*U19C3Dnzya9C5a<;yCd~kal#DR#{$}n<;|ApO5g&@3G{Ycdxll5? zq*;stDiG$Udc<2x?y-(np9uVT#A*#B5GRnVlT>xw8*vi;H2o!d{-#*9J#^R zLB`G^o%wy$wrM0M8ZbO}D}Nj^p(l9ukUr3N;;3}qv^)P6#_ge;M)#qm?SXO6gK-qiWN6SF{{?=cTp5{ryfK+L_F|8@u+La z=65d4#wF2`v4zcpZzLW1QC3%f+(@10cj6JtWZ$T!8H_9IM&eoLb%wxyDd-Hr!)Y@a zq{!>cIuE)Dyx|06SJ0Ix9@v;pjrl~)t=tYrTW5-#60vit_`pA}M-bbbD^0{z>E6%R`Pf_NweT7mxmuwuwy zKV)zp>L{!}>BiFglgHTj^(x-rvSqgcLW_Veh-+2+D}AQrOvZ#Ik8E_KjZGUwN6*y8 zC5GO_>MO@q9e`8%@N1$uZw?;69jK)xz~I$m8@F0E$Xe03_XmoR4c@V<(mOuuw3Sp0 zk?JdsQ>fJHNc<__GR#7kcYkEoZ|$^sU;LAzGz(18>M_k%q;qr+Du+M2Ac;!j7|u9v z6X{4MhjK7%D5lc&u8|D{Vvd1hiI#-~A;JR@GfDxH^lkZ=$@QmbF)Q&Rg#pq9km|2E zE)6DlDGQC?PKtt%@+uZ`4|=(nGsN|xJecg)dy~G5KN}b!Z}c^q;I}NIT4E0 zYm6saeHsr{|3Iyiq-UtXY^*;u{6MV?Q2z&Y5HF?h1%S|W5Ej7#B&xIgg1 zIW+wj;}p5HDivv<1Iu)If1z06&<1c|s8=NZx^=I)-l;s>>o z!3?ZWP(wuMU`;eDZrUF_$(Xw&OTv|;WdN${(H7jMOXE=v*;A3q9dUDyDZG3#UDcVf z>L?CFF(_d07%csJqlHN#s-NSKMwv z+|bNr`mvoXWogR$lcPVd4yrI!Z$i&rmx8+l%LS01nxvd`2K&nyt2lk=@7BGCRa26k zVKoZc#bZdH&JtJMCA?ouL#rGL5(SZd?`I&)`DG?7Nyn)ly3Rh?3NpVVRpkp*L zd*Q+|5PUTD8dWfOSX5Z4#1Mfkuy`>FFQvQq-tQzL$xSekr9C<5(uPn%#-9`oVgo4g zWYEp_NRXbWz9EV$?va-%51vFCdz4EnCLpM=c;S8_tZ^rZ{_IH1yBL+HqJx0xq?FRF zf-shBsaQuPfeA|wrzD{fl^6M3A>&VLdL<@_iFt@q`aMB~CE9E+eOjQ;Ixq60{-RY~ z78_NTi1eh+i(DO-E;ZbqI!a2M_-uPmMlFV!GBK(kK@o(eqBxp^@%2+JwKS#)Lm=(R zv8+d+0Gz8EBYXX;Y_3Rh{c}$x6x*%FprUDvn?2ndO z&)HX|KqW|Rl?j=YLS+_eWo7BX|3)o@{cltfq)-atg<8sQh${bBpj`{JAORlh!-C0< z$fPHdyOpTzQcu)mPc_BCtc8w9S}2pvuPSv^zpKBuOU$}qQvAht5Ap+fqa*Uh2|;C6 zx||z7q#*n?6xu3qRTz^)Fp>9b<&=0@NhC)4FJa7vwAp>TOsF7-QLT$;hsFGgHJ!mHL0Y!nQxA*<@QT^j!qpQ{Pv_iIN`HNwv$ zE~<#*vS1hJXSpdD+Or^_B>2QapOt9oezCr!9}|pCIHOpSEF@Dc#83_7v3n(#tB}vN zt2mkjJebtez_T-@32LnPn|B)vf}_~*CcI8buTn;5e|xQi3dV=wdgiBv;Sv=-t-D0r zf!a=}!5|bbNaUKZNwGZ}6_Tahv`=#IcnZzEtN?EaQ9O$Y9=MG}G#OHt=8m@?yZweF z30`BY=l~ZjLbg~Xe5#ag1Nk#e#+YuVQ+rd>0Q|d!& z_K{$r(EuKEBfyRZ1oxuaszhS#i zt$Z=O$am~j)E%hlDuw$4f|XD9*{vH{XfEJ5B$ij#744yQrz`OS=Gc`S)+A(glART0 zsVJ5H9m>5MG$f%dHE2`#f)#w&u!5U(F^wk#G^9^iH^wv{1G%eFW2L<~pB#5!8W~gI zrSg2zwYkA2#}E2ZIY~0$!=^z#WdT&w*cAIC`d8vg)?XokW=)y=LUfxT-2tJAxA#QK zvBv`L_%;nqA8&tFW+#&gAC?w9{+av5JC_6-aQk;yvNAD^1dPAJ@}}>VU8c~}`UbE_ zCo5r^>y$f|3;$saQG(1!tB9ht7H&kK%>|X_&Mx(|{2q)hRi}nlWc>g2na{o79Isvs zLrzdXAlOKL!$Ju*Ec2hZAm1kA438)XVhOl0%Iu2M=g+A*H|BY6e(_B5Q+gXWA&I~% zd4}a7;!cXq1g|U6nTR{r9dLoY7SM6Ds+nke49XNhDi&-UP^FiAp|@y?%GgUtpY5ua z@x_tYD1?ANRnQ%ANrO!u60!<@tYw!eLdoh+(=<{4ox9jy z@#Hi1zEXG3^<-p7;oKy<{^4RRWJvk=Llk8zs7@e!ViSGBmS0QPvU3~4c}Y%Ybkg9Q zupGj$C{_G+k)D62=JaDEK!0YATmh#JafO*45+S(h*a#N{Sq>Nc#?rH}ha4;XvZM3^ z_Zs>KF^XRvd*EXb=ye!1(nkC%DPct^|1R>jS-4Q6T=iklY_HLuEhM41^0{zkGgQCc ztR}N5vN!+7AVhA77tm|yd6vjWV3fD@m1}E$qqIxowvBKhU?8Et1Mx?sPF+JAYl{NY zhVlI%ZpZVxDxjWF)8S@Xc$y;(7xK>~eba|%%YYJLHZ%*NkOql*1m8ve*5Ep+@xiSY zv?N@Jz~nf**a%1olAB{zD3Rz~cbS-;N2tmScmecQUjYRRiM{l}IAX?qbm4k@e2Kmmp&ERY29MSBhn#C@e0yMN>>?K%0p%#b zy`mr;HYCcstJ`wzBKLCaBAZSy0RdZAe4i|u)*6D4j#oPdEDpE_+~avR09mB+sr%+? zvCg#ff*G)}?I;kiF(4tij}z zPy|+l4UsIc9HB+xlM(%0|C2Y(akl{crn=!CNBkFh4jd<_QN1LY4%4 z1sy2WtL<5tgluXT7jU3TU}3YU%3%R zI345j;FV^dio3UBVYYfNb)B3I0de6ty?(%13li4$85}lkH77vDIfD>TvKlZCyrnox zJOptN`J3m@jKk0YY+0t1@A6=)85v{DiUs_CIu1BQ{nDV^=P{Ju0(t08U}qhl*!khS_|Xdo3=i z=YjiWY_q#rknFIpvBgIMoMiHE@k`S4MtDA?Ao|TuC_*Cr8z{Tad^hg1Dg^iBt7FE- z&W}u}7k!{eosu?0dLY`IaKA;f83|_gVd6;^7l2K~1i(FMpONX3;USyW3nYe6(#FJh z?R*vkZ9)f@b?D18nQ%G{eWnhDj$ohBamwBj0LeY6gD1^B`G8PZI`6FxE!0IQM*&Z> zW+tfT?A9&2VKh~|#W`ifcy%!2JzqN0}$3Aj#N2x-(P0Z{Kx8p^GE-isAZ7-&rM9&*4UJon&SoKZ zP6*e@(n#1lxezm$A!_mR^I=B_pnLE~9QhNY7mPP`#@n7Z30#qHmmCe#@0SBdhZ{!b z_bP9j7gY?2gp)Bt35VeNUL2Lg{ty9W8Mymy$13GtpUBQXQ&W&liqRdXtD+47CID1W zO~H1mVhjPAhPj%%6J1Z=vS+b9BP@{Uw~#b&=K2Nw1lPYC&OsgKrH_bIXUk7%f`r>H ze)=|XggVW(T97#btfVE^;~)-xARH7Hc50_PiYl5Qjmhlv=g?4*RgF_qeT1X}hU7U; zb3~K>&P-cj=H3A-$`jxSb|8*mXG%-8SI6eIa*4=hMJmG6mc{v%hX%pIpo@ptR*}a7 z+(`kjPqIArFb5^aeNfP%rqWRaNY1+NV{NrmQ-?zy>^uHcIVfZ<4DosMZk0GFM4S-eNeI&BgM|LD z;^5OAIoEa>zj>S^D>AT-f0rg3gN>0?P*SRsBhM?Xgo(+s&v(EJ2*;f_WG5iF7KoWrqg zR#TT%XcT8DBrgX$Dz(mV9~3HRl1t&etlu!E%#!P!vo1fE0-KAH$iU_zt0xRQ@p*LKb$z(JRALa zsHq&|t*8p5;6Y|{W(SZ5!n4_825YSq0Hy`@7sMRfU4i#h1hPG46MO_8YX4 zL4H;U!u)5N3Y@@HEJg^1bEB_3D9V3-bRUj>{eW;ZyeUJq2?hMF^eeg!s&dE2khbkstJ zCzhV4sB{q2QL`0gzcH=}RTv;4$*O_t zPK>04q(oLy1mF^Uzh|$MC==F{uPy?RGSE&G_kWU}Oq_35>CkYLO)$gWZ?q>Ju^_(9 z3CxOY!!>eaHj4dpJ8t$Dsq$N7|E$0)T3kq;MG-)@iuwMgf;CCW4t=Cy+TVt(B7E>k z0V4cmNO3ASkdMrAW-yy8e@yz!inyaDu$*|hWay9_;T+42fi6kij56QI%4XMbV&IQh z+(^$S20BkjS^8(a`E+D zdm&~b1lG0Ik#gY+^h*5cx%WEensd4rIkeGVHRQ9Y{e*k55XL#I?B$OE?Yy{!@7!jv z623|s;)-kFWi#Sag@EItWSQ(9xR05_ z{A`FXbt&C*lO%tQkTfu@_L6c4qJc(Lj&~=UBw(zj^^yTGBpyN}WX;-Zvn3=8^wFZ* zhzaQD;sK4R5&(f^x7Fy(^eW({RrN7I9I^p-&YZd)B9lo>eD%U1DKh;87mLJt`b4rX zXzIp0qO~L4wbIAQ7|jhMGjZ$wuZDD|eSKtz$KqBR`zyJ;jPiN`63ugJ?Hc?12m`q9 z+I0aEz+n(DERD2j>Txof8{7a1;ME*;h8UGRNoc?ql{I}7l&IFDfsBM@Ax)(@P9_B$ z25(SCU`}dyNSA1y1tJ-vKo2BNo2feuLSdC%C%~v1>+I&!M-@u*LttsNqR`hf(JS$e z2A$KhUJcZK$|U$Vp+deacjbo;@(FDaAJYVzyOf9DWKuiShH38l|Dg^y@I###%Kuhp zjQ~`~4b$cSdV=|HFysAarv&GczkzJAaG`HkqrbHMixeyU&5d7D_RBlSe=oQy5R%mE z0S5s&g8h$8xSdR#oh@w5{#s|%q`KkwlN+OZt3!5@NR8VElP@@Y3YqC>L09Jxa%eD<^*n*dN0or(nHNI&Y@Y?mG~W>upMimJC^lj0 z9uxgcNkM!zPbhK(iIb_wm&FYdm2kR_1`mS|8O`H~^ce~w`+Pozk|6znBIXOEl@i+@ z@yK=AgN>>0c_HHrvxSX$P7<xKNPrn9jbLLDI6V?&@B=2Jf^zVO4gcx;pfP-ZU((v|zi>OXKUcA9z zjY&K^F^1ye+PN8!$;>tDYDG-^Bp6~GwQrf>(sj(+uiWy7s7Z(?1JT{8j-+!Y89~*S z50E99pKDik*#A^z6aWbX*&egRA5X(*8wQTjf z|4Jq={9a~KrRiJ~VR^jwwV(TfzN{8G*{iKAYF!I<-Cjz8p?sQe;|{p$SFlOC#}t8B zdSF8m`^TfzML6`26@0N#??+_ZEg@HDGhVmK5KP5#6Yo0MBQZ%XEqq?KC_T*Xib<)u z2wr;2+S0)cWTkdP#SXr^`jPS2yJB6=bCbHX!LGBpaYiqVU6Y6;8;2K;>NB$}F+b;< zCS$pa{O5{cKNOeo^)J7_*c9oFZa{IKn{J{(j=OG=6PwWeA_8GsDY`POo5U2P0xvKh z9EI1lM48OG1!Qt~{fVg_$g1}|%_mEJe7zcKO^@(9*xdwW-ph3z!!nKH8aIf|%&FVVfL2URx_n0qlf&Ta1{!8;f z83ecmRWtAp<6p}w-AoLX|Ko;_nd!3}U`7C$@#^m1PgLGBj%E=}WW^!uNET^EwkM!q zX#y^WntcAvrooBRaYspdOj@?-hd0T%EtCJT-kudobvN&9!I=0mY{O`X8io%h1}ozX zF8O?|P`4cN8A&ue<_DQ!8Ed`F5eo2C$)mW@c?5(j>IAd+sD>w0w!uQ#8-VW)WTm+q)-_q$7bW2*S|CTf<96NQ|ui6Wj76D;+KB& zMr@pXC(RwoPt;)3sN~Q|zclhI8CRnVfYtSjgWV!{j?;kNSHV1HeC;~K?#W*YA-lB~ z-NgYB5xR&J%j)fD&E^L3za9I-ljmdv1_JU24g>`4UyhmD**dEj7+RZr>?O64+GqQd znPBMBCz3iXOV&E62?LdOD70}L3Ev9@ouC$LE#X|aZSKz$pLHDbd96&xolU&wIo-r3 z&_EbmXEAATQl9teC&TxrO2hsb9JtY1&NRn;R(c`IYZDUn zXb!@e@RRf?kk)!9e2?%b7%{wfH8N?O9p0|3luxX&ffXzM7*(U8e@*M>%H_0(0TrZPBr zOpD)qhoH!0i&Uanup@;F9 z;r6vN{z*50*BzAqR?Kw&>lIkZ_WjQ@7#Ghj#G2|dZ7%-Sfz#qhHBVT!Tq6$`7W{7# zst%erqudN0`M369r6Z$Ss+}$ez1k*OwmE~x$2)8D1IVY>w8(uM2Ju(Oa0z;#uz;E>T z-t#f*%^&x!x$A!4x%=FE&e`AI>)xH~q&x<+8R*2DH@|cjxPmlwnv8VjOF5|$ME)E- zU?owGtQw-`_r9C3V0(}z-C+FXiK)vS8()Uq;p z2J?(+dAK#ZJzaW}q)|S;{(*r5yC(exbH~kX*RDXbg}1$UTMfN$t7Y)FCN8p^Xd8g* zCX^g=QS6#-Yf#WU3wA%_={>(rlgE2gh;X_a=Mk=|7f1T5kG*fwFO~w2`nMsz!I#kK z+h5SmfXtJM+YpXr`x&rN6CN1nmN$-4(!H_|?jqH(AHCAK zys|`(^rkjuy(ka0&wl(E&bGC!$P&ifGX~FWYfrSYEsZslJmfkh`w>t%p{$&M1{KCk z@)(YFTTn_)ElpE@2jB3xjbP2v4=c@6|HLVVpw=b@-IxEw{uX5Y8s?Z~bDJvbnH1>i zz~`M)u`R2OVbDdp9|<{RL*^4b34hVbGXWKqy86fC;MbE%InP}gM&_w`+;oTk=~r0# zXm_O|pYi>()v2%jV7d!Kj85DOSCY%MbH2-fGmaC)=?mvPKL}tTxoh#|*;b=Tr(qzG zavuVmf3d$jhj5mLQi;)54loeQujaKb|P8ngukbP%6Vf zKljm^XPI$lU%7N@R5@{m_$14$-RAvVj9>(%Ix@b-i%X2h&~W!4EM)wN9wTz)V3w_^ zriga0s{q}#mI2#~ePlg*HaRYjVu)A%(Yy6&|FObimtIgkSl+Tl?r{??W7aLFuE;>+ zTAeW_RVJ0d^PGj@2!4!*Vg(?8Bf)t%3VvJnW&wYhph|ao}&gHFlsZo=g^b_ zn4xo^Vb=SN;kno2HuqMd`HEg~b=u9R#OOuR2vGvj6rgN+O|85H#j507klqaYy1v)+ z1%~i^9)C`gH{V;=ixJNbjY$a1YO^E~a?zS!4I}(zWH~b*X(|b9iZZW!U zIdsG=W3v5E)87V^Ja2gYhQB<0?6|(Dx{ZClC&>BDLe#Vvg~xJma03MXMwHvMx4c-oQ`myD)q{};=9!Dm&rI5Y zUgEi_DJhvTjQ-T~vdi*S`KX{a-`*NpTEMRJ8}}tSCA3=~@zl6F;SW6KVj@=6eY*<| z#$ARKD(j54Y3F&%>T+N^-yOv&X$KTV*eq}ijMXSHD#Yt~hC)=VTJa4Xjx*anWjsmI z0n}x1pabMC_N3*{%il|+vn`K0sH|wKZha9j)e|*a5)5g8j=-;+W*$v>72x2{IwY%x zj?BwFW#`YZjyNKwdSecM;#3!S*I8|@rEF1xRJX=Cfb2j zthWr_P0$enOJen(R!_q1qK|hO?KIx67ri@8V>w<&2^ zlm-wRtF`wHD~TkWT4hMyxOwLhuGlz^n$q$&^Lq*Mk$HW=jyjL-5ta*0DdNQYJavn) z2HN&5$}$D!%F8nr7nvP>D&JbQ{H9blJ0@W7C^1bHz9d5>q?>LL_tYbEwVd-AaFLnM zlnpDBDbA9enSd_$p*dezgGsY`di^+BewyyuCl-sn5I;^}`kw6;bnj>WpmE99LesZ* zua+{oaoys@FTh48*w+`nygV5wvT*{8=uY{Z3lHOgo6SV?V3#pYM=h|VuwFI@W996^_8cZ4O?8XqdV zyWsh5E2!N$K3tPIBnm}@%3|l#5ZP#1D?asX^1@_LN5926I7s%@P=I0*Lnj2y+NJ#F zdUXWu#efTCeGq8{G$`6ZH_ew7B79qsZ_SpabMB=MEu{wW8E*}ixY>3!Pu>DcD7XnP z+tMv$Y7WINsiD=WcBDOQNW18++4cYGu>V;1yEJU;nh*IO|(UEX2cqWYh{rb+1v)Dvc6d z>VULW%UgA%FJ>;#uHR5dt14&-X|OrcaLQ|j|1w#_&Dq8M_g&3RsC5eFCwus!qvv3G zP@n+AhAct}z+pf2$cWY}ki~%s_8_+6(ibEtV$uJi#$#vdE{*hRh?8m67$@5}D>KfM z%DaVOIc=RH!b}5_HIh=cm=evwEd7k)9?utD`>Q`;@dB9-=vFg7?5}@rvmR++QgRaW z!CLJ#rXI|d{?O&I7)`;sz)O;1;Y!I`Wz?n;Fo4UnOM!f=)a|FXm}{1mrX0e3VoY#u zXI&*jN7!-M=xM&XCWNQcm6*O>?QGjG6kf9uSq+CqTmjpn5X|3APwv45e1+@EhOkc# z(-==sR9eDVc%(ftCKHMD?*7pnPM(hDR&L0s%rEcmgWiJEvN&b?Vwp^$f*~X_Sr|jO zzDP#LC{}?9atL6he7l)HAi)25M`hdM16Nh9^qVLlRg&k!v7|2-B`*Eceqx^d+zU>E z10%`YMR$S?$`<9h*HlKPzg`}vud{9)KgOLSA^AAg^isz5YUwh5^qd$rfl0y%E@Rh| zoM+pgoma|?akv{R7SZ!PZCP(G1-#-oQvN}gi-yT}6gu&o_KT%%r02+=unm$@ewo5CJN708P|D+n@hs~Nvp;@f z1}RbH_;h8e`-{aV;b&T=iKiF6|2q45g}Yq*>!QrMX6`zr7U9)9_lSP(iWOD;LzPTJ8ONhJInjiAeN z6Qo~X08Jxe9_73^+Lo^)U;I`->kW46nJmBi zi&U-q5N+$9I5j}kny^@-T#4i^|B>@qauY9IzeQSq$!`^L&#yZ0K?(%a)Js6@8yd!j z$6iMJ9*~12X-Ok)q2%04C!enl&EU5M7S^UUR1}k4_k^};u#R^6kBHZ1x^_n1%HHJW z?`^w1+eP4RZ(2x&WoIfcG$Ii?$97c+zrw#hV-*cdTeo8Z03q}Mz%AsAg)H3tdzwNj zFXZ@iGP8BywR5qu-qx{qA=M_6YV{T4aQr~T&O?UX(<<0i%p=EzCTcrhnj%`v19lBl zP6m-?v6{X3l%|%Ocn0_pe$Vf!mh6c~j;qFakmTcsGK$zl_+*st8SVB(?va_G?|)t> z#?=T(H2Ju-Fn7_BbGYC>D&hOhsi?omq<8Fq#21&J0Nu(<_IrKDuoI-lMZEIS7P+Vg zV7;-qX9-}BWJQj6;b4nG;8`kl{L zV5SeqSrEXA={>;IOr6*W*t_vUFXe`Z^_cM(cX%RV_dyWT=z?LRq(bl_Nr_Gcf;rCLnLF3$VMf%}wyXXXUOw(|0Xp+A6C>*v~`84Pr zX>&gx%-;NH+SJG@RWg0s0f)!sz3}-$61gwd*Tnn-+#@`ZJHUH#wXsL|r<5ke+!Xm- z=~)$y`{LD7_9eH&Np)L>Xb0XUf=T5+a*9~jXyK$tPMv&)zuk&h?fQX@o=R?~YEHyl zq5$PRw;P&lwoHrR)67*#^Sxj>%IM&s(KupUQ)q}Hwsur?A7hz+G$pWND=qh(d-<(b!UgFa-!0ecHZ+1N1SzrFi9#URukBj`o?tpzf*gP1>57zKJlShV!U$CcLP`4Q8h0cwh%~aI%lE3evh4$-R0b83%CQ^?s7kimvElNiL^2JJPR!Gi8S{nj)R-5Fk zKanG%x{9+axF%OOhdAQDm1PHY$ob9J%zN%oKcQzXPeSC>Y)Q80Zfvna*~J8#mca26;a_bkHIWsK7|Rzn&-XVFeFEHA+P=GKe_>6l9Gxwp-xyz{G=dQH=Fa zriYaeBjX%D?MlBQw_efZ= z30;Ps20{Yp1$?a>w(Dk{$>)HgHKuv%UzT&Ui^oY#ORngg?8oREse>bTuq^PRIox81 z^_Y68GS}%Sqni&Z=r7Hz^y2m;{f81Jg~_%k@wj_kxtF~1Ol?Qd*Rjo4!efVdCT^On zOvIa{CN@6nT}#1D+g@PG3I7Nh0h7YQi=RD+K2JUS>J*S)l7S*gXWNtSD)@4{uI~(*>-ILlAVneqT$=@&eZ8zU93vbRV8hHx96Z zRf5}3r(t*D-i`L(YT~8fhl6ncbLoq%;a-y;G!i~l$6kvY&L92G7mhEiUy8q6S_XF- zon6FBUln-@blpsmvN4*)2xAFh^3lK5E2{M>aqp{}XKxh6hEZi${HQ^4lG)r_Z{Ont z+|!TlOq+f3<(Z_`M<7Xc6)nzINYDJ0mKAy^%cdl7gT_gm$vWiJW%Uuz<1Jxn5Y}y* zf>-~!xe|&v>XFt^xq(K8{wq9=1K`dQ)2n`5l9-D0P=}B)w_md3?_VJD7yw`(j|>J| zIeC~o@piFtH~QtBp%Qqrs>qxmPlY4n$oPMwk^8_K?~xS$_wj$b_Nc&!Fnldr=ptEcfbGuh_1n3B9Ht7H*<0Mud6oLQY7j|_QJ>< zYU3Hmj(FkhX32-7@N`7l{$FsXKxz^}WaGogrf9A;9zp#V{Qs8!o8&)xA-0m@ZZsbN zV62S^AiT!(9ZCHALfk#P9jtz*D^dFZ^@Eas;{$J0sa^x4d|ncj2Q^Rnhle)kZ=Qc8 zQBdKiiI+cc{II{^C}|i}2Gm5vABOwke=%H3OQ7OWqsD*mW08O1QDexc6sY?955-`@ zf2wg*0#u> second - case (UnFavWithPriorFav, UnFavWithoutPriorFav) => - TimestampedFavState(UnFavWithPriorFav, second.timestampMillis) - case (Fav, UnFavWithoutPriorFav) => - TimestampedFavState(UnFavWithPriorFav, second.timestampMillis) - case (UnFavWithoutPriorFav, UnFavWithoutPriorFav) => second - case (_, Fav) => second - } - } -} - -object UserUserFavGraph { - implicit val tz: java.util.TimeZone = DateOps.UTC - // setting the prune threshold in the monoid below to 0.0, since we want to do our own pruning - // outside the monoid, primarily to be able to count how many scores are pruned. - implicit val dvMonoid: Monoid[DecayedValue] = DecayedValueMonoid(0.0) - implicit val lfvSemigroup: Semigroup[TimestampedFavState] = TimestampedFavStateSemigroup - - def getSummedFavGraph( - previousGraphOpt: Option[TypedPipe[EdgeWithDecayedWeights]], - newFavsDateRange: DateRange, - halfLivesInDays: List[Int], - minScoreToKeep: Double - )( - implicit uniqueID: UniqueID - ): TypedPipe[EdgeWithDecayedWeights] = { - val newFavs = DAL.read(TimelineServiceFavoritesScalaDataset, newFavsDateRange).toTypedPipe - val endTime = Time.fromMilliseconds(newFavsDateRange.end.timestamp) - val userSource = - DAL.readMostRecentSnapshotNoOlderThan(UsersourceFlatScalaDataset, Days(7)).toTypedPipe - getSummedFavGraphWithValidUsers( - previousGraphOpt, - newFavs, - halfLivesInDays, - endTime, - minScoreToKeep, - userSource - ) - } - - def getSummedFavGraphWithValidUsers( - previousGraphOpt: Option[TypedPipe[EdgeWithDecayedWeights]], - newFavs: TypedPipe[ContextualizedFavoriteEvent], - halfLivesInDays: List[Int], - endTime: Time, - minScoreToKeep: Double, - userSource: TypedPipe[FlatUser] - )( - implicit uniqueID: UniqueID - ): TypedPipe[EdgeWithDecayedWeights] = { - val fullGraph = getSummedFavGraph( - previousGraphOpt, - newFavs, - halfLivesInDays, - endTime, - minScoreToKeep - ) - removeDeactivedOrSuspendedUsers(fullGraph, userSource) - } - - def processRawFavEvents( - favsOrUnfavs: TypedPipe[ContextualizedFavoriteEvent] - )( - implicit uniqueID: UniqueID - ): TypedPipe[((UserId, TweetId, UserId), TimestampedFavState)] = { - val numFavsBeforeUniq = Stat("num_favs_before_uniq") - val numUnFavsBeforeUniq = Stat("num_unfavs_before_uniq") - val numFinalFavs = Stat("num_final_favs") - val numUnFavsWithPriorFavs = Stat("num_unfavs_with_prior_favs") - val numUnFavsWithoutPriorFavs = Stat("num_unfavs_without_prior_favs") - - favsOrUnfavs - .flatMap { cfe: ContextualizedFavoriteEvent => - cfe.event match { - case FavoriteEventUnion.Favorite(fav) => - numFavsBeforeUniq.inc() - Some( - ( - (fav.userId, fav.tweetId, fav.tweetUserId), - TimestampedFavState(Fav, fav.eventTimeMs))) - case FavoriteEventUnion.Unfavorite(unfav) => - numUnFavsBeforeUniq.inc() - Some( - ( - (unfav.userId, unfav.tweetId, unfav.tweetUserId), - TimestampedFavState(UnFavWithoutPriorFav, unfav.eventTimeMs))) - case _ => None - } - } - .sumByKey - .toTypedPipe - .flatMap { - case fav @ (_, TimestampedFavState(Fav, _)) => - numFinalFavs.inc() - Some(fav) - case unfav @ (_, TimestampedFavState(UnFavWithoutPriorFav, _)) => - numUnFavsWithoutPriorFavs.inc() - Some(unfav) - case (_, TimestampedFavState(UnFavWithPriorFav, _)) => - numUnFavsWithPriorFavs.inc() - None - } - } - - private def getGraphFromNewFavsOnly( - newFavs: TypedPipe[ContextualizedFavoriteEvent], - halfLivesInDays: List[Int], - endTime: Time - )( - implicit uniqueID: UniqueID - ): UnsortedGrouped[(UserId, UserId), Map[Int, DecayedValue]] = { - - val numEventsNewerThanEndTime = Stat("num_events_newer_than_endtime") - - processRawFavEvents(newFavs).map { - case ((userId, _, authorId), TimestampedFavState(favOrUnfav, timestampMillis)) => - val halfLifeInDaysToScores = halfLivesInDays.map { halfLifeInDays => - val givenTime = Time.fromMilliseconds(timestampMillis) - if (givenTime > endTime) { - // technically this should never happen, and even if it did happen, - // we shouldn't have to care, but I'm noticing that the weights aren't being computed - // correctly for events that spilled over the edge - numEventsNewerThanEndTime.inc() - } - val timeInSeconds = math.min(givenTime.inSeconds, endTime.inSeconds) - val value = favOrUnfav match { - case Fav => 1.0 - case UnFavWithoutPriorFav => -1.0 - case UnFavWithPriorFav => 0.0 - } - val decayedValue = DecayedValue.build(value, timeInSeconds, halfLifeInDays.days.inSeconds) - halfLifeInDays -> decayedValue - } - ((userId, authorId), halfLifeInDaysToScores.toMap) - }.sumByKey - } - - def getSummedFavGraph( - previousGraphOpt: Option[TypedPipe[EdgeWithDecayedWeights]], - newFavs: TypedPipe[ContextualizedFavoriteEvent], - halfLivesInDays: List[Int], - endTime: Time, - minScoreToKeep: Double - )( - implicit uniqueID: UniqueID - ): TypedPipe[EdgeWithDecayedWeights] = { - val prunedScoresCounter = Stat("num_pruned_scores") - val negativeScoresCounter = Stat("num_negative_scores") - val prunedEdgesCounter = Stat("num_pruned_edges") - val keptEdgesCounter = Stat("num_kept_edges") - val keptScoresCounter = Stat("num_kept_scores") - val numCommonEdges = Stat("num_common_edges") - val numNewEdges = Stat("num_new_edges") - val numOldEdges = Stat("num_old_edges") - - val unprunedOuterJoinedGraph = previousGraphOpt match { - case Some(previousGraph) => - previousGraph - .map { - case EdgeWithDecayedWeights(srcId, destId, decayedSums) => - val ts = decayedSums.lastUpdatedTimestamp.toDouble / 1000 - val map = decayedSums.halfLifeInDaysToDecayedSums.map { - case (halfLifeInDays, value) => - halfLifeInDays -> DecayedValue.build(value, ts, halfLifeInDays.days.inSeconds) - }.toMap - ((srcId, destId), map) - } - .outerJoin(getGraphFromNewFavsOnly(newFavs, halfLivesInDays, endTime)) - .toTypedPipe - case None => - getGraphFromNewFavsOnly(newFavs, halfLivesInDays, endTime).toTypedPipe - .map { - case ((srcId, destId), scoreMap) => - ((srcId, destId), (None, Some(scoreMap))) - } - } - - unprunedOuterJoinedGraph - .flatMap { - case ((srcId, destId), (previousScoreMapOpt, newScoreMapOpt)) => - val latestTimeDecayedValues = halfLivesInDays.map { hlInDays => - hlInDays -> DecayedValue.build(0, endTime.inSeconds, hlInDays.days.inSeconds) - }.toMap - - val updatedDecayedValues = - Monoid.sum( - List(previousScoreMapOpt, newScoreMapOpt, Some(latestTimeDecayedValues)).flatten) - - (previousScoreMapOpt, newScoreMapOpt) match { - case (Some(pm), None) => numOldEdges.inc() - case (None, Some(nm)) => numNewEdges.inc() - case (Some(pm), Some(nm)) => numCommonEdges.inc() - } - - val prunedMap = updatedDecayedValues.flatMap { - case (hlInDays, decayedValue) => - if (decayedValue.value < minScoreToKeep) { - if (decayedValue.value < 0) { - negativeScoresCounter.inc() - } - prunedScoresCounter.inc() - None - } else { - keptScoresCounter.inc() - Some((hlInDays, decayedValue.value)) - } - } - - if (prunedMap.nonEmpty) { - keptEdgesCounter.inc() - Some(EdgeWithDecayedWeights(srcId, destId, DecayedSums(endTime.inMillis, prunedMap))) - } else { - prunedEdgesCounter.inc() - None - } - } - } - - def removeDeactivedOrSuspendedUsers( - full: TypedPipe[EdgeWithDecayedWeights], - userSource: TypedPipe[FlatUser] - )( - implicit uniqueID: UniqueID - ): TypedPipe[EdgeWithDecayedWeights] = { - val numValidUsers = Stat("num_valid_users") - val numInvalidUsers = Stat("num_invalid_users") - val numEdgesBeforeUsersourceJoin = Stat("num_edges_before_join_with_usersource") - val numEdgesWithValidSource = Stat("num_edges_with_valid_source") - val numEdgesWithValidSourceAndDest = Stat("num_edges_with_valid_source_and_dest") - - val validUsers = userSource.flatMap { - case flatUser - if !flatUser.deactivated.contains(true) && !flatUser.suspended.contains(true) - && flatUser.id.nonEmpty => - numValidUsers.inc() - flatUser.id - case _ => - numInvalidUsers.inc() - None - }.forceToDisk // avoid reading in the whole of userSource for both of the joins below - - val toJoin = full.map { edge => - numEdgesBeforeUsersourceJoin.inc() - (edge.sourceId, edge) - } - - toJoin - .join(validUsers.asKeys) - .map { - case (_, (edge, _)) => - numEdgesWithValidSource.inc() - (edge.destinationId, edge) - } - .join(validUsers.asKeys) - .map { - case (_, (edge, _)) => - numEdgesWithValidSourceAndDest.inc() - edge - } - } -} - -/** - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:fav_graph_adhoc && \ - * oscar hdfs --user frigate --host hadoopnest1.atla.twitter.com --bundle fav_graph_adhoc \ - * --tool com.twitter.simclusters_v2.scalding.UserUserFavGraphAdhoc --screen --screen-detached \ - * --tee logs/userUserFavGraphAdhoc_20170101 -- --date 2017-01-01 --halfLivesInDays 14 50 100 \ - * --outputDir /user/frigate/your_ldap/userUserFavGraphAdhoc_20170101_hl14_50_100 - * - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:fav_graph_adhoc && \ - * oscar hdfs --user frigate --host hadoopnest1.atla.twitter.com --bundle fav_graph_adhoc \ - * --tool com.twitter.simclusters_v2.scalding.UserUserFavGraphAdhoc --screen --screen-detached \ - * --tee logs/userUserFavGraphAdhoc_20170102_addPrevious20170101 -- --date 2017-01-02 \ - * --previousGraphDir /user/frigate/your_ldap/userUserFavGraphAdhoc_20170101_hl14_50_100 \ - * --halfLivesInDays 14 50 100 \ - * --outputDir /user/frigate/your_ldap/userUserFavGraphAdhoc_20170102_addPrevious20170101_hl14_50_100 - */ -object UserUserFavGraphAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - val log = Logger() - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val previousGraphOpt = args.optional("previousGraphDir").map { dir => - TypedPipe.from(EdgeWithDecayedWtsFixedPathSource(dir)) - } - val favsDateRange = DateRange.parse(args.list("date")) - val halfLives = args.list("halfLivesInDays").map(_.toInt) - val minScoreToKeep = args.double("minScoreToKeep", 1e-5) - val outputDir = args("outputDir") - Util.printCounters( - UserUserFavGraph - .getSummedFavGraph(previousGraphOpt, favsDateRange, halfLives, minScoreToKeep) - .writeExecution(EdgeWithDecayedWtsFixedPathSource(outputDir)) - ) - } - } -} - -/** - * $ capesospy-v2 update --start_cron fav_graph src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object UserUserFavGraphBatch extends TwitterScheduledExecutionApp { - private val firstTime: String = "2017-01-01" - implicit val tz = DateOps.UTC - implicit val parser = DateParser.default - private val batchIncrement: Duration = Days(2) - private val firstStartDate = DateRange.parse(firstTime).start - - val outputPath: String = "/user/cassowary/processed/user_user_fav_graph" - val log = Logger() - - private val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(this.getClass.getName), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - override def scheduledJob: Execution[Unit] = AnalyticsBatchExecution(execArgs) { dateRange => - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val previousGraph = if (dateRange.start.timestamp == firstStartDate.timestamp) { - log.info("Looks like this is the first time, setting previousGraph to None") - None - } else { - Some( - DAL - .readMostRecentSnapshot(UserUserFavGraphScalaDataset, dateRange - batchIncrement) - .toTypedPipe - ) - } - val halfLives = args.list("halfLivesInDays").map(_.toInt) - val minScoreToKeep = args.double("minScoreToKeep", 1e-5) - Util.printCounters( - UserUserFavGraph - .getSummedFavGraph(previousGraph, dateRange, halfLives, minScoreToKeep) - .writeDALSnapshotExecution( - UserUserFavGraphScalaDataset, - D.Daily, - D.Suffix(outputPath), - D.EBLzo(), - dateRange.end) - ) - } - } - } -} - -object DumpFavGraphAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val favGraph = DAL - .readMostRecentSnapshotNoOlderThan(UserUserFavGraphScalaDataset, Days(10)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .collect { - case edge if edge.weights.halfLifeInDaysToDecayedSums.contains(100) => - (edge.sourceId, edge.destinationId, edge.weights.halfLifeInDaysToDecayedSums(100)) - } - - Execution - .sequence( - Seq( - Util.printSummaryOfNumericColumn( - favGraph.map(_._3), - Some("Weight") - ), - Util.printSummaryOfNumericColumn( - favGraph.map(c => math.log10(10.0 + c._3)), - Some("Weight_Log_P10") - ), - Util.printSummaryOfNumericColumn( - favGraph.map(c => math.log10(1.0 + c._3)), - Some("Weight_Log_P1") - ), - Util.printSummaryOfCategoricalColumn(favGraph.map(_._1), Some("SourceId")), - Util.printSummaryOfCategoricalColumn(favGraph.map(_._2), Some("DestId")) - ) - ).flatMap { summarySeq => - println(summarySeq.mkString("\n")) - Execution.unit - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/UserUserGraph.docx b/src/scala/com/twitter/simclusters_v2/scalding/UserUserGraph.docx new file mode 100644 index 0000000000000000000000000000000000000000..ce4463085f69b06e48d37e68d6adb20450784aa2 GIT binary patch literal 38927 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 - numEdgesBeforeTruncation.inc() - if (edge.isFollowEdge) numFollowEdgesBeforeTruncation.inc() - if (edge.favWeight > 0) numFavEdgesBeforeTruncation.inc() - (edge.srcId, getNeighborWithWeights(edge)) - } - .group - // .withReducers(10000) - .sortedReverseTake(maxNeighborsPerUser)(Ordering.by { x: NeighborWithWeights => - x.favScoreHalfLife100Days.getOrElse(0.0) - }) - .map { - case (srcId, neighborList) => - if (neighborList.size >= maxNeighborsPerUser) numUsersNeedingNeighborTruncation.inc() - neighborList.foreach { neighbor => - numEdgesAfterTruncation.inc() - if (neighbor.favScoreHalfLife100Days.exists(_ > 0)) numFavEdgesAfterTruncation.inc() - if (neighbor.isFollowed.contains(true)) numFollowEdgesAfterTruncation.inc() - } - numRecordsInOutputGraph.inc() - UserAndNeighbors(srcId, neighborList) - } - } - - def run( - followEdges: TypedPipe[(Long, Long)], - favEdges: TypedPipe[(Long, Long, Double)], - maxNeighborsPerUser: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[UserAndNeighbors] = { - val combined = UserUserNormalizedGraph.combineFollowAndFav(followEdges, favEdges) - addWeightsAndAdjListify( - combined, - maxNeighborsPerUser - ) - } -} - -/** - * - * capesospy-v2 update --build_locally --start_cron user_user_follow_fav_graph \ - * src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ - -object UserUserGraphBatch extends TwitterScheduledExecutionApp { - private val firstTime: String = "2021-04-24" - implicit val tz = DateOps.UTC - implicit val parser = DateParser.default - private val batchIncrement: Duration = Days(2) - private val halfLifeInDaysForFavScore = 100 - - private val outputPath: String = "/user/cassowary/processed/user_user_graph" - - private val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(this.getClass.getName.replace("$", "")), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - override def scheduledJob: Execution[Unit] = AnalyticsBatchExecution(execArgs) { - implicit dateRange => - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val maxNeighborsPerUser = args.int("maxNeighborsPerUser", 2000) - - Util.printCounters( - UserUserGraph - .run( - UserUserNormalizedGraph.getFollowEdges, - UserUserNormalizedGraph.getFavEdges(halfLifeInDaysForFavScore), - maxNeighborsPerUser - ) - .writeDALSnapshotExecution( - UserUserGraphScalaDataset, - D.Daily, - D.Suffix(outputPath), - D.EBLzo(), - dateRange.end) - ) - } - } - } -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:user_user_graph-adhoc -scalding remote run \ ---user cassowary \ ---keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ ---principal service_acoount@TWITTER.BIZ \ ---cluster bluebird-qus1 \ ---main-class com.twitter.simclusters_v2.scalding.UserUserGraphAdhoc \ ---target src/scala/com/twitter/simclusters_v2/scalding:user_user_graph-adhoc \ --- --date 2021-04-24 --outputDir "/user/cassowary/adhoc/user_user_graph_adhoc" - */ -object UserUserGraphAdhoc extends AdhocExecutionApp { - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val maxNeighborsPerUser = args.int("maxNeighborsPerUser", 2000) - val halfLifeInDaysForFavScore = 100 - val outputDir = args("outputDir") - val userAndNeighbors = - UserUserGraph - .run( - UserUserNormalizedGraph.getFollowEdges, - UserUserNormalizedGraph.getFavEdges(halfLifeInDaysForFavScore), - maxNeighborsPerUser) - - Execution - .zip( - userAndNeighbors.writeExecution(UserAndNeighborsFixedPathSource(outputDir)), - userAndNeighbors.writeExecution(TypedTsv(outputDir + "_tsv"))).unit - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/UserUserNormalizedGraph.docx b/src/scala/com/twitter/simclusters_v2/scalding/UserUserNormalizedGraph.docx new file mode 100644 index 0000000000000000000000000000000000000000..58087b8f83cc5bbba5ee142cbc355bb33c70d290 GIT binary patch literal 40975 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

#iqdb?d1RdTExBJ5NUpgr}3M1uufa!vUfF zzu=A_Dq;ad=R=6DsBd(>LisoRFXjJF@}Hv+Q%Qb5iWdMd(nJRk++b3r`kTqk-P_*s zce)aJ43Ix4`41j+3q$D!80qtp$UMk-(my<&pnrJ&FNuN-M^3!_fm??B4M$4DATuB* zBK|O>h5pTOBQ1f9M~)i*!E=EB#v{j&ktvY`ibasTO!BNHGyx_<~RZV>#J+l$PF z>^uJ9I*v!anLnN+G7GY+^@jyF@$XT&;dmkAk?p}h_>z?Wn_@SuLvg1tB3%m Li0P4@_3P|^gJ=8x literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/UserUserNormalizedGraph.scala b/src/scala/com/twitter/simclusters_v2/scalding/UserUserNormalizedGraph.scala deleted file mode 100644 index 62d878fc6..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/UserUserNormalizedGraph.scala +++ /dev/null @@ -1,453 +0,0 @@ -package com.twitter.simclusters_v2.scalding - -import com.twitter.bijection.Injection -import com.twitter.frigate.user_sampler.common.EmployeeIds -import com.twitter.hashing.KeyHasher -import com.twitter.logging.Logger -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.ProcAtla -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.scalding_internal.job.analytics_batch.AnalyticsBatchExecution -import com.twitter.scalding_internal.job.analytics_batch.AnalyticsBatchExecutionArgs -import com.twitter.scalding_internal.job.analytics_batch.BatchDescription -import com.twitter.scalding_internal.job.analytics_batch.BatchFirstTime -import com.twitter.scalding_internal.job.analytics_batch.BatchIncrement -import com.twitter.scalding_internal.job.analytics_batch.TwitterScheduledExecutionApp -import com.twitter.simclusters_v2.hdfs_sources._ -import com.twitter.simclusters_v2.scalding.common.TypedRichPipe._ -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.thriftscala.EdgeWithDecayedWeights -import com.twitter.simclusters_v2.thriftscala.NeighborWithWeights -import com.twitter.simclusters_v2.thriftscala.NormsAndCounts -import com.twitter.simclusters_v2.thriftscala.UserAndNeighbors -import com.twitter.usersource.snapshot.flat.UsersourceFlatScalaDataset -import flockdb_tools.datasets.flock.FlockFollowsEdgesScalaDataset - -case class Edge(srcId: Long, destId: Long, isFollowEdge: Boolean, favWeight: Double) - -object UserUserNormalizedGraph { - - // The common function for applying logarithmic transformation - def logTransformation(weight: Double): Double = { - math.max(math.log10(1.0 + weight), 0.0) - } - - def getFollowEdges(implicit dateRange: DateRange, uniqueID: UniqueID): TypedPipe[(Long, Long)] = { - val numInputFollowEdges = Stat("num_input_follow_edges") - DAL - .readMostRecentSnapshot(FlockFollowsEdgesScalaDataset) - .toTypedPipe - .collect { - case edge if edge.state == 0 => - numInputFollowEdges.inc() - (edge.sourceId, edge.destinationId) - } - } - - def transformFavEdges( - input: TypedPipe[EdgeWithDecayedWeights], - halfLifeInDaysForFavScore: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[(Long, Long, Double)] = { - val numEdgesWithSpecifiedHalfLife = Stat( - s"num_edges_with_specified_half_life_${halfLifeInDaysForFavScore}_days") - val numEdgesWithoutSpecifiedHalfLife = Stat( - s"num_edges_without_specified_half_life_${halfLifeInDaysForFavScore}_days") - input - .flatMap { edge => - if (edge.weights.halfLifeInDaysToDecayedSums.contains(halfLifeInDaysForFavScore)) { - numEdgesWithSpecifiedHalfLife.inc() - Some((edge.sourceId, edge.destinationId, edge.weights.halfLifeInDaysToDecayedSums(100))) - } else { - numEdgesWithoutSpecifiedHalfLife.inc() - None - } - } - } - - def getFavEdges( - halfLifeInDaysForFavScore: Int - )( - implicit dateRange: DateRange, - uniqueID: UniqueID - ): TypedPipe[(Long, Long, Double)] = { - implicit val tz: java.util.TimeZone = DateOps.UTC - transformFavEdges( - DAL - .readMostRecentSnapshot(UserUserFavGraphScalaDataset) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe, - halfLifeInDaysForFavScore - ) - } - - def getNeighborWithWeights( - inputEdge: Edge, - followerL2NormOfDest: Double, - faverL2NormOfDest: Double, - logFavL2Norm: Double - ): NeighborWithWeights = { - val normalizedFollowScore = { - val numerator = if (inputEdge.isFollowEdge) 1.0 else 0.0 - if (followerL2NormOfDest > 0) numerator / followerL2NormOfDest else 0.0 - } - val normalizedFavScore = - if (faverL2NormOfDest > 0) inputEdge.favWeight / faverL2NormOfDest else 0.0 - val logFavScore = if (inputEdge.favWeight > 0) logTransformation(inputEdge.favWeight) else 0.0 - val logFavScoreL2Normalized = if (logFavL2Norm > 0) logFavScore / logFavL2Norm else 0.0 - NeighborWithWeights( - inputEdge.destId, - Some(inputEdge.isFollowEdge), - Some(normalizedFollowScore), - Some(inputEdge.favWeight), - Some(normalizedFavScore), - logFavScore = Some(logFavScore), - logFavScoreL2Normalized = Some(logFavScoreL2Normalized) - ) - } - - def addNormalizedWeightsAndAdjListify( - input: TypedPipe[Edge], - maxNeighborsPerUser: Int, - normsAndCountsFull: TypedPipe[NormsAndCounts] - )( - implicit uniqueId: UniqueID - ): TypedPipe[UserAndNeighbors] = { - val numUsersNeedingNeighborTruncation = Stat("num_users_needing_neighbor_truncation") - val numEdgesAfterTruncation = Stat("num_edges_after_truncation") - val numEdgesBeforeTruncation = Stat("num_edges_before_truncation") - val numFollowEdgesBeforeTruncation = Stat("num_follow_edges_before_truncation") - val numFavEdgesBeforeTruncation = Stat("num_fav_edges_before_truncation") - val numFollowEdgesAfterTruncation = Stat("num_follow_edges_after_truncation") - val numFavEdgesAfterTruncation = Stat("num_fav_edges_after_truncation") - val numRecordsInOutputGraph = Stat("num_records_in_output_graph") - - val norms = normsAndCountsFull.map { record => - ( - record.userId, - ( - record.followerL2Norm.getOrElse(0.0), - record.faverL2Norm.getOrElse(0.0), - record.logFavL2Norm.getOrElse(0.0))) - } - - implicit val l2b: Long => Array[Byte] = Injection.long2BigEndian - input - .map { edge => (edge.destId, edge) } - .sketch(reducers = 2000) - .join(norms) - .map { - case (destId, (edge, (followNorm, favNorm, logFavNorm))) => - numEdgesBeforeTruncation.inc() - if (edge.isFollowEdge) numFollowEdgesBeforeTruncation.inc() - if (edge.favWeight > 0) numFavEdgesBeforeTruncation.inc() - (edge.srcId, getNeighborWithWeights(edge, followNorm, favNorm, logFavNorm)) - } - .group - //.withReducers(1000) - .sortedReverseTake(maxNeighborsPerUser)(Ordering.by { x: NeighborWithWeights => - ( - x.favScoreHalfLife100Days.getOrElse(0.0), - x.followScoreNormalizedByNeighborFollowersL2.getOrElse(0.0) - ) - }) - .map { - case (srcId, neighborList) => - if (neighborList.size >= maxNeighborsPerUser) numUsersNeedingNeighborTruncation.inc() - neighborList.foreach { neighbor => - numEdgesAfterTruncation.inc() - if (neighbor.favScoreHalfLife100Days.exists(_ > 0)) numFavEdgesAfterTruncation.inc() - if (neighbor.isFollowed.contains(true)) numFollowEdgesAfterTruncation.inc() - } - numRecordsInOutputGraph.inc() - UserAndNeighbors(srcId, neighborList) - } - } - - def combineFollowAndFav( - followEdges: TypedPipe[(Long, Long)], - favEdges: TypedPipe[(Long, Long, Double)] - ): TypedPipe[Edge] = { - ( - followEdges.map { case (src, dest) => ((src, dest), (1, 0.0)) } ++ - favEdges.map { case (src, dest, wt) => ((src, dest), (0, wt)) } - ).sumByKey - //.withReducers(2500) - .map { - case ((src, dest), (follow, favWt)) => - Edge(src, dest, isFollowEdge = follow > 0, favWt) - } - } - - def run( - followEdges: TypedPipe[(Long, Long)], - favEdges: TypedPipe[(Long, Long, Double)], - normsAndCounts: TypedPipe[NormsAndCounts], - maxNeighborsPerUser: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[UserAndNeighbors] = { - val combined = combineFollowAndFav(followEdges, favEdges) - addNormalizedWeightsAndAdjListify( - combined, - maxNeighborsPerUser, - normsAndCounts - ) - } -} - -object UserUserNormalizedGraphBatch extends TwitterScheduledExecutionApp { - private val firstTime: String = "2018-06-16" - implicit val tz = DateOps.UTC - implicit val parser = DateParser.default - private val batchIncrement: Duration = Days(7) - private val halfLifeInDaysForFavScore = 100 - - private val outputPath: String = "/user/cassowary/processed/user_user_normalized_graph" - - private val execArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(this.getClass.getName.replace("$", "")), - firstTime = BatchFirstTime(RichDate(firstTime)), - lastTime = None, - batchIncrement = BatchIncrement(batchIncrement) - ) - - override def scheduledJob: Execution[Unit] = AnalyticsBatchExecution(execArgs) { - implicit dateRange => - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val maxNeighborsPerUser = args.int("maxNeighborsPerUser", 2000) - - val producerNormsAndCounts = - DAL.readMostRecentSnapshot(ProducerNormsAndCountsScalaDataset).toTypedPipe - - Util.printCounters( - UserUserNormalizedGraph - .run( - UserUserNormalizedGraph.getFollowEdges, - UserUserNormalizedGraph.getFavEdges(halfLifeInDaysForFavScore), - producerNormsAndCounts, - maxNeighborsPerUser - ) - .writeDALSnapshotExecution( - UserUserNormalizedGraphScalaDataset, - D.Daily, - D.Suffix(outputPath), - D.EBLzo(), - dateRange.end) - ) - } - } - } -} - -object UserUserNormalizedGraphAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - val log = Logger() - - def hashToLong(input: Long): Long = { - val bb = java.nio.ByteBuffer.allocate(8) - bb.putLong(input) - Math.abs(KeyHasher.KETAMA.hashKey(bb.array())) - } - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - implicit val dateRange: DateRange = DateRange.parse(args.list("date")) - val halfLifeInDaysForFavScore = 100 - val maxNeighborsPerUser = args.int("maxNeighborsPerUser", 2000) - val producerNormsAndCounts = TypedPipe.from( - NormsAndCountsFixedPathSource(args("normsInputDir")) - ) - val favEdges = args.optional("favGraphInputDir") match { - case Some(favGraphInputDir) => - UserUserNormalizedGraph.transformFavEdges( - TypedPipe.from( - EdgeWithDecayedWtsFixedPathSource(favGraphInputDir) - ), - halfLifeInDaysForFavScore - ) - case None => - UserUserNormalizedGraph.getFavEdges(halfLifeInDaysForFavScore) - } - - val followEdges = UserUserNormalizedGraph.getFollowEdges - - Util.printCounters( - UserUserNormalizedGraph - .run( - followEdges, - favEdges, - producerNormsAndCounts, - maxNeighborsPerUser - ).writeExecution(UserAndNeighborsFixedPathSource(args("outputDir"))) - ) - } - } -} - -object DumpUserUserGraphAdhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val input = args.optional("inputDir") match { - case Some(inputDir) => TypedPipe.from(UserAndNeighborsFixedPathSource(inputDir)) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(30)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - val users = args.list("users").map(_.toLong).toSet - if (users.isEmpty) { - input.printSummary("Producer norms and counts") - } else { - input - .collect { - case rec if users.contains(rec.userId) => - (Seq(rec.userId.toString) ++ rec.neighbors.map { n => - Util.prettyJsonMapper.writeValueAsString(n).replaceAll("\n", " ") - }).mkString("\n") - } - .toIterableExecution - .map { strings => println(strings.mkString("\n")) } - } - } - } -} - -/* - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:user_user_normalized_graph && \ - * oscar hdfs --host hadoopnest2.atla.twitter.com --bundle user_user_normalized_graph \ - * --tool com.twitter.simclusters_v2.scalding.EmployeeGraph --screen --screen-detached \ - * --tee your_ldap/employeeGraph20190809 -- --outputDir adhoc/employeeGraph20190809 - */ -object EmployeeGraph extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val input = args.optional("inputDir") match { - case Some(inputDir) => TypedPipe.from(UserAndNeighborsFixedPathSource(inputDir)) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(30)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - val employeeIds = EmployeeIds.buildMerlinClientAndGetEmployees("frigate-scalding.dev") - input - .collect { - case rec if employeeIds.contains(rec.userId) => - rec.neighbors.collect { - case n if employeeIds.contains(n.neighborId) => - ( - rec.userId, - n.neighborId, - n.favScoreHalfLife100Days.getOrElse(0), - n.isFollowed.getOrElse(false)) - } - } - .flatten - .writeExecution(TypedTsv(args("outputDir"))) - - } - } -} -/* - * scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding:employee_graph_from_user_user - * --main-class com.twitter.simclusters_v2.scalding.EmployeeGraphFromUserUser - * --submitter hadoopnest2.atla.twitter.com --user recos-platform -- --graphOutputDir "/user/recos-platform/adhoc/employee_graph_from_user_user/" - */ - -object EmployeeGraphFromUserUser extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val graphOutputDir = args("graphOutputDir") - val input = args.optional("inputDir") match { - case Some(inputDir) => TypedPipe.from(UserAndNeighborsFixedPathSource(inputDir)) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(30)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - val employeeIds = EmployeeIds.buildMerlinClientAndGetEmployees("frigate-scalding.dev") - input - .collect { - case rec if employeeIds.contains(rec.userId) => - rec - } - .writeExecution(UserAndNeighborsFixedPathSource(graphOutputDir)) - - } - } -} - -/* - * ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding:user_user_normalized_graph && \ - * oscar hdfs --host hadoopnest2.atla.twitter.com --bundle user_user_normalized_graph \ - * --tool com.twitter.simclusters_v2.scalding.VitGraph --screen --screen-detached \ - * --tee your_ldap/vitGraph20190809 -- --outputDir adhoc/vitGraph20190809 - */ -object VitGraph extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - val minActiveFollowers = args.int("minActiveFollowers") - val topK = args.int("topK") - val input = args.optional("inputDir") match { - case Some(inputDir) => TypedPipe.from(UserAndNeighborsFixedPathSource(inputDir)) - case None => - DAL - .readMostRecentSnapshotNoOlderThan(UserUserNormalizedGraphScalaDataset, Days(30)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - val userSource = - DAL.readMostRecentSnapshotNoOlderThan(UsersourceFlatScalaDataset, Days(30)).toTypedPipe - - TopUsersSimilarityGraph - .vits(userSource, minActiveFollowers, topK).toIterableExecution.flatMap { vitsIter => - val vits = vitsIter.toSet - println(s"Found ${vits.size} many vits. First few: " + vits.take(5).mkString(",")) - input - .collect { - case rec if vits.contains(rec.userId) => - rec.neighbors.collect { - case n if vits.contains(n.neighborId) => - ( - rec.userId, - n.neighborId, - n.favScoreHalfLife100Days.getOrElse(0), - n.isFollowed.getOrElse(false)) - } - } - .flatten - .writeExecution(TypedTsv(args("outputDir"))) - } - - } - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/BUILD b/src/scala/com/twitter/simclusters_v2/scalding/common/BUILD deleted file mode 100644 index cbb6e14c0..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/common/BUILD +++ /dev/null @@ -1,14 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "3rdparty/jvm/com/fasterxml/jackson:jackson-module-scala", - "3rdparty/jvm/com/fasterxml/jackson/core:jackson-core", - "3rdparty/jvm/com/fasterxml/jackson/core:jackson-databind", - "3rdparty/jvm/com/fasterxml/jackson/module:jackson-module-scala", - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - "src/scala/com/twitter/simclusters_v2/common", - "strato/src/main/scala/com/twitter/strato/scalding", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..43171b7039d2b618de3cb661322116cbcd4a1001 GIT binary patch literal 36859 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/PersistentTweetEmbeddingSource.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/PersistentTweetEmbeddingSource.docx new file mode 100644 index 0000000000000000000000000000000000000000..e00d9f5cc40c20a8d7bb09dc731d8e708a17974d GIT binary patch literal 37298 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%0A}iOo!mNF* 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 G;sF2{dYH=q literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/QTreeMultiAggregator.scala b/src/scala/com/twitter/simclusters_v2/scalding/common/QTreeMultiAggregator.scala deleted file mode 100644 index 970eb3c8e..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/common/QTreeMultiAggregator.scala +++ /dev/null @@ -1,30 +0,0 @@ -package com.twitter.simclusters_v2.scalding.common - -import com.twitter.algebird._ - -/** - * The reason of creating this class is that we need multiple percentiles and current - * implementations need one QTree per percentile which is unnecessary. This class gets multiple - * percentiles from the same QTree. - */ -case class QTreeMultiAggregator[T](percentiles: Seq[Double])(implicit val num: Numeric[T]) - extends Aggregator[T, QTree[Unit], Map[String, Double]] - with QTreeAggregatorLike[T] { - - require( - percentiles.forall(p => p >= 0.0 && p <= 1.0), - "The given percentile must be of the form 0 <= p <= 1.0" - ) - - override def percentile: Double = 0.0 // Useless but needed for the base class - - override def k: Int = QTreeAggregator.DefaultK - - private def getPercentile(qt: QTree[Unit], p: Double): Double = { - val (lower, upper) = qt.quantileBounds(p) - (lower + upper) / 2 - } - - def present(qt: QTree[Unit]): Map[String, Double] = - percentiles.map { p => p.toString -> getPercentile(qt, p) }.toMap -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/TypedRichPipe.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/TypedRichPipe.docx new file mode 100644 index 0000000000000000000000000000000000000000..b15668125cc4beacd48c090dc72289cf6e2556c4 GIT binary patch literal 37484 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/TypedRichPipe.scala b/src/scala/com/twitter/simclusters_v2/scalding/common/TypedRichPipe.scala deleted file mode 100644 index 6e40ecf80..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/common/TypedRichPipe.scala +++ /dev/null @@ -1,72 +0,0 @@ -package com.twitter.simclusters_v2.scalding.common - -import com.twitter.algebird._ -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding.{Execution, Stat, UniqueID} - -/** - * A richer version of TypedPipe. - */ -class TypedRichPipe[V](pipe: TypedPipe[V]) { - - def count(counterName: String)(implicit uniqueID: UniqueID): TypedPipe[V] = { - val stat = Stat(counterName) - pipe.map { v => - stat.inc() - v - } - } - - /** - * Print a summary of the TypedPipe with total size and some randomly selected records - */ - def getSummary(numRecords: Int = 100): Execution[Option[(Long, String)]] = { - val randomSample = Aggregator.reservoirSample[V](numRecords) - - // more aggregator can be added here - pipe - .aggregate(randomSample.join(Aggregator.size)) - .map { - case (randomSamples, size) => - val samplesStr = randomSamples - .map { sample => - Util.prettyJsonMapper - .writeValueAsString(sample) - .replaceAll("\n", " ") - } - .mkString("\n\t") - - (size, samplesStr) - } - .toOptionExecution - } - - def getSummaryString(name: String, numRecords: Int = 100): Execution[String] = { - getSummary(numRecords) - .map { - case Some((size, string)) => - s"TypedPipeName: $name \nTotal size: $size. \nSample records: \n$string" - case None => s"TypedPipeName: $name is empty" - } - - } - - /** - * Print a summary of the TypedPipe with total size and some randomly selected records - */ - def printSummary(name: String, numRecords: Int = 100): Execution[Unit] = { - getSummaryString(name, numRecords).map { s => println(s) } - } -} - -object TypedRichPipe extends java.io.Serializable { - import scala.language.implicitConversions - - implicit def typedPipeToRichPipe[V]( - pipe: TypedPipe[V] - )( - implicit uniqueID: UniqueID - ): TypedRichPipe[V] = { - new TypedRichPipe(pipe) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/Util.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/Util.docx new file mode 100644 index 0000000000000000000000000000000000000000..13c40d3e8ce1fa4cb1d6df021d3a74624dfeab17 GIT binary patch literal 39904 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%0D*Z_?-#;GTpBHg4E2R)KzjAahyR+1)7_b(=$SRYT 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 lq - counters.toMap.collect { - case (key, value) if key.group == "Scalding Custom" => - key.counter -> value - } - } - } - - def getCustomCountersString[T](exec: Execution[T]): Execution[String] = { - getCustomCounters(exec).map { map => - val customCounterStrings = map.toList.map { - case (key, value) => - s"$key:${formatter.format(value)}" - } - if (customCounterStrings.nonEmpty) { - "Printing all custom counters:\n" + customCounterStrings.mkString("\n") - } else { - "No custom counters to print" - } - } - } - - // Note ideally this should not allow T that is itself Execution[U] i.e. don't accept - // nested executions - def printCounters[T](exec: Execution[T]): Execution[Unit] = { - getCustomCountersString(exec).map { s => println(s) } - } - - /** - * Print some basic stats of a numeric column. - */ - def printSummaryOfNumericColumn[V]( - input: TypedPipe[V], - columnName: Option[String] = None - )( - implicit num: Numeric[V] - ): Execution[String] = { - lazy val randomSampler = Aggregator.reservoirSample[V](100) - - lazy val percentiles = QTreeMultiAggregator(Seq(0.05, 0.25, 0.50, 0.75, 0.95)) - - lazy val moments = Moments.numericAggregator - - val multiAggregator = MultiAggregator( - Aggregator.size, - percentiles, - Aggregator.max, - Aggregator.min, - Aggregator.numericSum, - moments, - randomSampler - ).andThenPresent { - case (size_, percentiles_, max_, min_, sum_, moments_, samples_) => - percentiles_.mapValues(_.toString) ++ Map( - "size" -> size_.toString, - "max" -> max_.toString, - "min" -> min_.toString, - "sum" -> sum_.toString, - "avg" -> moments_.mean.toString, - "stddev" -> moments_.stddev.toString, - "skewness" -> moments_.skewness.toString, - "samples" -> samples_.mkString(",") - ) - } - - input - .aggregate(multiAggregator) - .toIterableExecution - .map { m => - val summary = - s"Column Name: $columnName\nSummary:\n${Util.prettyJsonMapper.writeValueAsString(m)}" - println(summary) - summary - } - } - - /** - * Output some basic stats of a categorical column. - * - * Note that HeavyHitters only work when the distribution is skewed. - */ - def printSummaryOfCategoricalColumn[V]( - input: TypedPipe[V], - columnName: Option[String] = None - )( - implicit injection: Injection[V, Array[Byte]] - ): Execution[String] = { - - lazy val randomSampler = Aggregator.reservoirSample[V](100) - - lazy val uniqueCounter = new SetSizeAggregator[V](hllBits = 13, maxSetSize = 1000)(injection) - - lazy val sketchMapParams = - SketchMapParams[V](seed = 1618, eps = 0.001, delta = 0.05, heavyHittersCount = 20)(injection) - - lazy val heavyHitter = - SketchMap.aggregator[V, Long](sketchMapParams).composePrepare[V](v => v -> 1L) - - val multiAggregator = MultiAggregator( - Aggregator.size, - uniqueCounter, - heavyHitter, - randomSampler - ).andThenPresent { - case (size_, uniqueSize_, heavyHitter_, sampler_) => - Map( - "size" -> size_.toString, - "unique" -> uniqueSize_.toString, - "samples" -> sampler_.mkString(","), - "heavyHitter" -> heavyHitter_.heavyHitterKeys - .map { key => - val freq = sketchMapParams.frequency(key, heavyHitter_.valuesTable) - key -> freq - } - .sortBy(-_._2).mkString(",") - ) - } - - input - .aggregate(multiAggregator) - .toIterableExecution - .map { m => - val summary = - s"Column Name: $columnName\nSummary:\n${Util.prettyJsonMapper.writeValueAsString(m)}" - println(summary) - summary - } - } - - val edgeOrdering: Ordering[(Long, Long)] = Ordering.by { - case (fromNodeId, toNodeId) => hashToLong(fromNodeId, toNodeId) - } - - def reservoirSamplerMonoidForPairs[K, V]( - sampleSize: Int - )( - implicit ord: Ordering[K] - ): PriorityQueueMonoid[(K, V)] = { - implicit val fullOrdering: Ordering[(K, V)] = Ordering.by(_._1) - new PriorityQueueMonoid[(K, V)](sampleSize) - } - - def reservoirSamplerMonoid[T, U]( - sampleSize: Int, - convert: T => U - )( - implicit ord: Ordering[U] - ): PriorityQueueMonoid[T] = { - new PriorityQueueMonoid[T](sampleSize)(Ordering.by(convert)) - } - - def hashToLong(a: Long, b: Long): Long = { - val bb = java.nio.ByteBuffer.allocate(16) - bb.putLong(a) - bb.putLong(b) - KeyHasher.KETAMA.hashKey(bb.array()) - } - - def hashToLong(a: Long): Long = { - val bb = java.nio.ByteBuffer.allocate(8) - bb.putLong(a) - KeyHasher.KETAMA.hashKey(bb.array()) - } - - // https://en.wikipedia.org/wiki/Pearson_correlation_coefficient - def computeCorrelation(pairedIter: Iterator[(Double, Double)]): Double = { - val (len, xSum, ySum, x2Sum, y2Sum, xySum) = - pairedIter.foldLeft((0.0, 0.0, 0.0, 0.0, 0.0, 0.0)) { - case ((l, xs, ys, x2s, y2s, xys), (x, y)) => - (l + 1, xs + x, ys + y, x2s + x * x, y2s + y * y, xys + x * y) - } - val den = math.sqrt(len * x2Sum - xSum * xSum) * math.sqrt(len * y2Sum - ySum * ySum) - if (den > 0) { - (len * xySum - xSum * ySum) / den - } else 0.0 - } - - // https://en.wikipedia.org/wiki/Cosine_similarity - def cosineSimilarity(pairedIter: Iterator[(Double, Double)]): Double = { - val (xySum, x2Sum, y2Sum) = pairedIter.foldLeft(0.0, 0.0, 0.0) { - case ((xy, x2, y2), (x, y)) => - (xy + x * y, x2 + x * x, y2 + y * y) - } - val den = math.sqrt(x2Sum) * math.sqrt(y2Sum) - if (den > 0) { - xySum / den - } else 0.0 - } - - case class Distribution( - avg: Double, - stdDev: Double, - p1: Double, - p10: Double, - p50: Double, - p90: Double, - p99: Double) - - val emptyDist: Distribution = Distribution(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) - - def distributionFromArray(l: Array[Double]): Distribution = { - val s = l.sorted - val len = l.length - - if (len < 1) { - emptyDist - } else { - def pctToIndex(p: Double): Int = { - val idx = math.round(l.length * p).toInt - if (idx < 0) { - 0 - } else if (idx >= len) { - len - 1 - } else { - idx - } - } - - val (sum, sumSquared) = l.foldLeft((0.0, 0.0)) { - case ((curSum, curSumSquared), x) => - (curSum + x, curSumSquared + x * x) - } - - val avg = sum / len - val stdDev = math.sqrt(sumSquared / len - avg * avg) - Distribution( - avg, - stdDev, - p1 = s(pctToIndex(0.01)), - p10 = s(pctToIndex(0.1)), - p50 = s(pctToIndex(0.5)), - p90 = s(pctToIndex(0.9)), - p99 = s(pctToIndex(0.99))) - } - } - - // Calculate cumulative frequency using Scalding Custom Counters. - // Increment all buckets by 1 where value <= bucket_threshold. - case class CumulativeStat( - key: String, - buckets: Seq[Double] - )( - implicit uniqueID: UniqueID) { - - val counters = buckets.map { bucket => - bucket -> Stat(key + "_<=" + bucket.toString) - } - - def incForValue(value: Double): Unit = { - counters.foreach { - case (bucket, stat) => - if (value <= bucket) stat.inc() - } - } - } - - def sendEmail(text: String, subject: String, toAddress: String): String = { - val file = File.createTempFile("somePrefix_", "_someSuffix") - println(s"Email body is at ${file.getPath}") - val writer = new PrintWriter(file) - writer.write(text) - writer.close() - - val mailCmd = s"cat ${file.getPath}" #| Seq("mail", "-s", subject, toAddress) - mailCmd.!! - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/BUILD b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/BUILD deleted file mode 100644 index 962a53de0..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/BUILD +++ /dev/null @@ -1,8 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..f0c6ea478cbb3387ba2336344c7e3f2e958981b7 GIT binary patch literal 36765 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 JL#-Rc0|51in{xmF literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/DenseRowMatrix.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/DenseRowMatrix.docx new file mode 100644 index 0000000000000000000000000000000000000000..3420bdbc0568aeb2793734df3a5dd683c562887e GIT binary patch literal 37637 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/DenseRowMatrix.scala b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/DenseRowMatrix.scala deleted file mode 100644 index eb72e8708..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/DenseRowMatrix.scala +++ /dev/null @@ -1,73 +0,0 @@ -package com.twitter.simclusters_v2.scalding.common.matrix - -import com.twitter.algebird.{ArrayMonoid, BloomFilterMonoid, Monoid, Semigroup} -import com.twitter.algebird.Semigroup._ -import com.twitter.bijection.Injection -import com.twitter.scalding.{TypedPipe, ValuePipe} - -/** - * A class that represents a row-indexed dense matrix, backed by a TypedPipe[(R, Array[Double])]. - * For each row of the TypedPipe, we save an array of values. - * Only use this class when the number of columns is small (say, <100K). - * - * @param pipe underlying pipe - * @param rowOrd ordering function for row type - * @param rowInj injection function for the row type - * @tparam R Type for rows - */ -case class DenseRowMatrix[R]( - pipe: TypedPipe[(R, Array[Double])], -)( - implicit val rowOrd: Ordering[R], - val rowInj: Injection[R, Array[Byte]]) { - - lazy val semigroupArrayV: Semigroup[Array[Double]] = new ArrayMonoid[Double]() - - // convert to a SparseMatrix - lazy val toSparseMatrix: SparseMatrix[R, Int, Double] = { - this.toSparseRowMatrix.toSparseMatrix - } - - // convert to a SparseRowMatrix - lazy val toSparseRowMatrix: SparseRowMatrix[R, Int, Double] = { - SparseRowMatrix( - this.pipe.map { - case (i, values) => - (i, values.zipWithIndex.collect { case (value, j) if value != 0.0 => (j, value) }.toMap) - }, - isSkinnyMatrix = true) - } - - // convert to a TypedPipe - lazy val toTypedPipe: TypedPipe[(R, Array[Double])] = { - this.pipe - } - - // filter the matrix based on a subset of rows - def filterRows(rows: TypedPipe[R]): DenseRowMatrix[R] = { - DenseRowMatrix(this.pipe.join(rows.asKeys).mapValues(_._1)) - } - - // get the l2 norms for all rows. this does not trigger a shuffle. - lazy val rowL2Norms: TypedPipe[(R, Double)] = { - this.pipe.map { - case (row, values) => - row -> math.sqrt(values.map(a => a * a).sum) - } - } - - // normalize the matrix to make sure each row has unit norm - lazy val rowL2Normalize: DenseRowMatrix[R] = { - - DenseRowMatrix(this.pipe.map { - case (row, values) => - val norm = math.sqrt(values.map(v => v * v).sum) - if (norm == 0.0) { - row -> values - } else { - row -> values.map(v => v / norm) - } - }) - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseMatrix.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseMatrix.docx new file mode 100644 index 0000000000000000000000000000000000000000..3cf5f584db85b155008c2eaf8e88e5e29d6c98d2 GIT binary patch literal 40868 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 V0Tn)ievK*ufC+qfaAy5F`yc5-cBlXV literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseMatrix.scala b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseMatrix.scala deleted file mode 100644 index 55514c350..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseMatrix.scala +++ /dev/null @@ -1,423 +0,0 @@ -package com.twitter.simclusters_v2.scalding.common.matrix - -import com.twitter.algebird.Semigroup -import com.twitter.bijection.Injection -import com.twitter.scalding.{TypedPipe, ValuePipe} - -/** - * A case class that represents a sparse matrix backed by a TypedPipe[(R, C, V)]. - * - * We assume the input does not have more than one value per (row, col), and all the input values - * are non-zero. - * - * We do not except the input pipe are indexed from 0 to numRows or numCols. - * The input can be any type (for example, userId/TweetId/Hashtag). - * We do not convert them to indices, but just use the input as a key to represent the rowId/colId. - * - * Example: - * - * val a = SparseMatrix(TypedPipe.from(Seq((1,1,1.0), (2,2,2.0), (3,3,3.0)))) - * - * val b = a.rowL2Normalize // get a new matrix that has unit-norm each row. - * - * val c = a.multiplySparseMatrix(b) // multiply another matrix - * - * val d = a.transpose // transpose the matrix - * - * @param pipe underlying pipe. We assume the input does not have more than one value per (row, col), - * and all the values are non-zero. - * @param rowOrd ordering function for row type - * @param colOrd ordering function for col type - * @param numericV numeric operations for value type - * @param semigroupV semigroup for the value type - * @param rowInj injection function for the row type - * @param colInj injection function for the col type - * @tparam R Type for rows - * @tparam C Type for columns - * @tparam V Type for elements of the matrix - */ -case class SparseMatrix[R, C, V]( - pipe: TypedPipe[(R, C, V)] -)( - implicit override val rowOrd: Ordering[R], - override val colOrd: Ordering[C], - override val numericV: Numeric[V], - override val semigroupV: Semigroup[V], - override val rowInj: Injection[R, Array[Byte]], - override val colInj: Injection[C, Array[Byte]]) - extends TypedPipeMatrix[R, C, V] { - - // number of non-zero values in the matrix - override lazy val nnz: ValuePipe[Long] = { - this.filter((_, _, v) => v != numericV.zero).pipe.map(_ => 1L).sum - } - - // number of non-zero values in each row - lazy val rowNnz: TypedPipe[(R, Long)] = { - this.pipe.collect { - case (row, _, v) if v != numericV.zero => - row -> 1L - }.sumByKey - } - - // get the num of non-zero values for each col. - lazy val colNnz: TypedPipe[(C, Long)] = { - this.transpose.rowNnz - } - - override lazy val uniqueRowIds: TypedPipe[R] = { - this.pipe.map(t => t._1).distinct - } - - override lazy val uniqueColIds: TypedPipe[C] = { - this.pipe.map(t => t._2).distinct - } - - override def getRow(rowId: R): TypedPipe[(C, V)] = { - this.pipe.collect { - case (i, j, value) if i == rowId => - j -> value - } - } - - override def getCol(colId: C): TypedPipe[(R, V)] = { - this.pipe.collect { - case (i, j, value) if j == colId => - i -> value - } - } - - override def get(rowId: R, colId: C): ValuePipe[V] = { - this.pipe.collect { - case (i, j, value) if i == rowId && j == colId => - value - }.sum // this assumes the matrix does not have any duplicates - } - - // filter the matrix based on (row, col, value) - def filter(fn: (R, C, V) => Boolean): SparseMatrix[R, C, V] = { - SparseMatrix(this.pipe.filter { - case (row, col, value) => fn(row, col, value) - }) - } - - // filter the matrix based on a subset of rows - def filterRows(rows: TypedPipe[R]): SparseMatrix[R, C, V] = { - SparseMatrix(this.rowAsKeys.join(rows.asKeys).map { - case (row, ((col, value), _)) => (row, col, value) - }) - } - - // filter the matrix based on a subset of cols - def filterCols(cols: TypedPipe[C]): SparseMatrix[R, C, V] = { - this.transpose.filterRows(cols).transpose - } - - // convert the triplet (row, col, value) to a new (row1, col1, value1) - def tripleApply[R1, C1, V1]( - fn: (R, C, V) => (R1, C1, V1) - )( - implicit rowOrd1: Ordering[R1], - colOrd1: Ordering[C1], - numericV1: Numeric[V1], - semigroupV1: Semigroup[V1], - rowInj: Injection[R1, Array[Byte]], - colInj: Injection[C1, Array[Byte]] - ): SparseMatrix[R1, C1, V1] = { - SparseMatrix(this.pipe.map { - case (row, col, value) => fn(row, col, value) - }) - } - - // get the l1 norms for all rows - lazy val rowL1Norms: TypedPipe[(R, Double)] = { - this.pipe.map { - case (row, _, value) => - row -> numericV.toDouble(value).abs - }.sumByKey - } - - // get the l2 norms for all rows - lazy val rowL2Norms: TypedPipe[(R, Double)] = { - this.pipe - .map { - case (row, _, value) => - row -> numericV.toDouble(value) * numericV.toDouble(value) - } - .sumByKey - .mapValues(math.sqrt) - } - - // normalize the matrix to make sure each row has unit norm - lazy val rowL2Normalize: SparseMatrix[R, C, Double] = { - val result = this.rowAsKeys - .join(this.rowL2Norms) - .collect { - case (row, ((col, value), l2norm)) if l2norm > 0.0 => - (row, col, numericV.toDouble(value) / l2norm) - } - - SparseMatrix(result) - } - - // get the l2 norms for all cols - lazy val colL2Norms: TypedPipe[(C, Double)] = { - this.transpose.rowL2Norms - } - - // normalize the matrix to make sure each column has unit norm - lazy val colL2Normalize: SparseMatrix[R, C, Double] = { - this.transpose.rowL2Normalize.transpose - } - - /** - * Take topK non-zero elements from each row. Cols are ordered by the `ordering` function - */ - def sortWithTakePerRow(k: Int)(ordering: Ordering[(C, V)]): TypedPipe[(R, Seq[(C, V)])] = { - this.rowAsKeys.group.sortedTake(k)(ordering) - } - - /** - * Take topK non-zero elements from each column. Rows are ordered by the `ordering` function. - * - */ - def sortWithTakePerCol(k: Int)(ordering: Ordering[(R, V)]): TypedPipe[(C, Seq[(R, V)])] = { - this.transpose.sortWithTakePerRow(k)(ordering) - } - - /** - * Multiply another SparseMatrix. The only requirement is that the col type of current matrix should - * be same with the row type of the other matrix. - * - * @param sparseMatrix another matrix to multiply - * @param numReducersOpt optional parameter to set number of reducers. It uses 1000 by default. - * you can change it based on your applications. - * @param ordering2 ordering function for the column type of another matrix - * @param injection2 injection function for the column type of another matrix - * @tparam C2 col type of another matrix - * - * @return - */ - def multiplySparseMatrix[C2]( - sparseMatrix: SparseMatrix[C, C2, V], - numReducersOpt: Option[Int] = None - )( - implicit ordering2: Ordering[C2], - injection2: Injection[C2, Array[Byte]] - ): SparseMatrix[R, C2, V] = { - implicit val colInjectionFunction: C => Array[Byte] = colInj.toFunction - - val result = - // 1000 is the reducer number used for sketchJoin; 1000 is a number that works well empirically. - // feel free to change this or make this as a param if you find this does not work for your case. - this.transpose.rowAsKeys - .sketch(numReducersOpt.getOrElse(1000)) - .join(sparseMatrix.rowAsKeys) - .map { - case (_, ((row1, value1), (col2, value2))) => - (row1, col2) -> numericV.times(value1, value2) - } - .sumByKey - .map { - case ((row, col), value) => - (row, col, value) - } - - SparseMatrix(result) - } - - /** - * Multiply a SparseRowMatrix. The implementation of this function assume the input SparseRowMatrix - * is a skinny matrix, i.e., with a small number of unique columns. Based on our experience, you can - * think 100K is a small number here. - * - * @param skinnyMatrix another matrix to multiply - * @param numReducersOpt optional parameter to set number of reducers. It uses 1000 by default. - * you can change it based on your applications. - * @param ordering2 ordering function for the column type of another matrix - * @param injection2 injection function for the column type of another matrix - * @tparam C2 col type of another matrix - * - * @return - */ - def multiplySkinnySparseRowMatrix[C2]( - skinnyMatrix: SparseRowMatrix[C, C2, V], - numReducersOpt: Option[Int] = None - )( - implicit ordering2: Ordering[C2], - injection2: Injection[C2, Array[Byte]] - ): SparseRowMatrix[R, C2, V] = { - - assert( - skinnyMatrix.isSkinnyMatrix, - "this function only works for skinny sparse row matrix, otherwise you will get out-of-memory problem") - - implicit val colInjectionFunction: C => Array[Byte] = colInj.toFunction - - val result = - // 1000 is the reducer number used for sketchJoin; 1000 is a number that works well empirically. - // feel free to change this or make this as a param if you find this does not work for your case. - this.transpose.rowAsKeys - .sketch(numReducersOpt.getOrElse(1000)) - .join(skinnyMatrix.pipe) - .map { - case (_, ((row1, value1), colMap)) => - row1 -> colMap.mapValues(v => numericV.times(value1, v)) - } - .sumByKey - - SparseRowMatrix(result, skinnyMatrix.isSkinnyMatrix) - } - - /*** - * Multiply a DenseRowMatrix. The result will be also a DenseRowMatrix. - * - * @param denseRowMatrix matrix to multiply - * @param numReducersOpt optional parameter to set number of reducers. It uses 1000 by default. - * you can change it based on your applications - * @return - */ - def multiplyDenseRowMatrix( - denseRowMatrix: DenseRowMatrix[C], - numReducersOpt: Option[Int] = None - ): DenseRowMatrix[R] = { - - implicit val colInjectionFunction: C => Array[Byte] = colInj.toFunction - implicit val arrayVSemiGroup: Semigroup[Array[Double]] = denseRowMatrix.semigroupArrayV - - val result = - // 1000 is the reducer number used for sketchJoin; 1000 is a number that works well empirically. - // feel free to change this or make this as a param if you find this does not work for your case. - this.transpose.rowAsKeys - .sketch(numReducersOpt.getOrElse(1000)) - .join(denseRowMatrix.pipe) - .map { - case (_, ((row1, value1), array)) => - row1 -> array.map(v => numericV.toDouble(value1) * v) - } - .sumByKey - - DenseRowMatrix(result) - } - - // Transpose the matrix. - lazy val transpose: SparseMatrix[C, R, V] = { - SparseMatrix( - this.pipe - .map { - case (row, col, value) => - (col, row, value) - }) - } - - // Create a Key-Val TypedPipe for .join() and other use cases. - lazy val rowAsKeys: TypedPipe[(R, (C, V))] = { - this.pipe - .map { - case (row, col, value) => - (row, (col, value)) - } - } - - // convert to a TypedPipe - lazy val toTypedPipe: TypedPipe[(R, C, V)] = { - this.pipe - } - - lazy val forceToDisk: SparseMatrix[R, C, V] = { - SparseMatrix(this.pipe.forceToDisk) - } - - /** - * Convert the matrix to a SparseRowMatrix. Do this only when the max number of non-zero values per row is - * small (say, not more than 200K). - * - * @isSkinnyMatrix is the resulted matrix skinny, i.e., number of unique colIds is small (<200K). - * Note the difference between `number of unique colIds` and `max number of non-zero values per row`. - * @return - */ - def toSparseRowMatrix(isSkinnyMatrix: Boolean = false): SparseRowMatrix[R, C, V] = { - SparseRowMatrix( - this.pipe.map { - case (i, j, v) => - i -> Map(j -> v) - }.sumByKey, - isSkinnyMatrix) - } - - /** - * Convert the matrix to a DenseRowMatrix - * - * @param numCols the number of columns in the DenseRowMatrix. - * @param colToIndexFunction the function to convert colId to the column index in the dense matrix - * @return - */ - def toDenseRowMatrix(numCols: Int, colToIndexFunction: C => Int): DenseRowMatrix[R] = { - this.toSparseRowMatrix(isSkinnyMatrix = true).toDenseRowMatrix(numCols, colToIndexFunction) - } - - /** - * Determines whether we should return a given Iterator given a threshold for the sum of values - * across a row and whether we are looking to stay under or above that value. - * Note that Iterators are mutable/destructive, and even calling .size on it will 'use it up' - * i.e. it no longer hasNext and we no longer have any reference to the head of the collection. - * - * @param columnValueIterator Iterator over column-value pairs. - * @param threshold The threshold for the sum of values - * @param ifMin True if we want to stay at least above that given value - * @return A new SparseMatrix after we have filtered the ineligible rows - */ - private[this] def filterIter( - columnValueIterator: Iterator[(C, V)], - threshold: V, - ifMin: Boolean - ): Iterator[(C, V)] = { - var sum: V = numericV.zero - var it: Iterator[(C, V)] = Iterator.empty - var exceeded = false - while (columnValueIterator.hasNext && !exceeded) { - val (c, v) = columnValueIterator.next - val nextSum = semigroupV.plus(sum, v) - val cmp = numericV.compare(nextSum, threshold) - if ((ifMin && cmp < 0) || (!ifMin && cmp <= 0)) { - it = it ++ Iterator((c, v)) - sum = nextSum - } else { - it = it ++ Iterator((c, v)) - exceeded = true - } - } - (ifMin, exceeded) match { - case (true, true) => it ++ columnValueIterator - case (true, false) => Iterator.empty - case (false, true) => Iterator.empty - case (false, false) => it ++ columnValueIterator - } - } - - /** - * removes entries whose sum over rows do not meet the minimum sum (minSum) - * @param minSum minimum sum for which we want to enforce across all rows - */ - def filterRowsByMinSum(minSum: V): SparseMatrix[R, C, V] = { - val filteredPipe = this.rowAsKeys.group - .mapValueStream(filterIter(_, threshold = minSum, ifMin = true)).map { - case (r, (c, v)) => - (r, c, v) - } - SparseMatrix(filteredPipe) - } - - /** - * removes entries whose sum over rows exceed the maximum sum (maxSum) - * @param maxSum maximum sum for which we want to enforce across all rows - */ - def filterRowsByMaxSum(maxSum: V): SparseMatrix[R, C, V] = { - val filteredPipe = this.rowAsKeys.group - .mapValueStream(filterIter(_, threshold = maxSum, ifMin = false)).map { - case (r, (c, v)) => - (r, c, v) - } - SparseMatrix(filteredPipe) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseRowMatrix.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/SparseRowMatrix.docx new file mode 100644 index 0000000000000000000000000000000000000000..448d920e4081a39493a62fc7f3473a2630c68665 GIT binary patch literal 40373 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

GLxhGw%+ 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 v != numericV.zero) - .pipe - .values - .map(_.size.toLong) - .sum - } - - override def get(rowId: R, colId: C): ValuePipe[V] = { - this.pipe - .collect { - case (i, values) if i == rowId => - values.collect { - case (j, value) if j == colId => value - } - } - .flatten - .sum - } - - override def getRow(rowId: R): TypedPipe[(C, V)] = { - this.pipe.flatMap { - case (i, values) if i == rowId => - values.toSeq - case _ => - Nil - } - } - - override def getCol(colId: C): TypedPipe[(R, V)] = { - this.pipe.flatMap { - case (i, values) => - values.collect { - case (j, value) if j == colId => - i -> value - } - } - } - - override lazy val uniqueRowIds: TypedPipe[R] = { - this.pipe.map(_._1).distinct - } - - override lazy val uniqueColIds: TypedPipe[C] = { - this.pipe.flatMapValues(_.keys).values.distinct - } - - // convert to a SparseMatrix - lazy val toSparseMatrix: SparseMatrix[R, C, V] = { - SparseMatrix(this.pipe.flatMap { - case (i, values) => - values.map { case (j, value) => (i, j, value) } - }) - } - - // convert to a TypedPipe - lazy val toTypedPipe: TypedPipe[(R, Map[C, V])] = { - this.pipe - } - - def filter(fn: (R, C, V) => Boolean): SparseRowMatrix[R, C, V] = { - SparseRowMatrix( - this.pipe - .map { - case (i, values) => - i -> values.filter { case (j, v) => fn(i, j, v) } - } - .filter(_._2.nonEmpty), - isSkinnyMatrix = this.isSkinnyMatrix - ) - } - - // sample the rows in the matrix as defined by samplingRatio - def sampleRows(samplingRatio: Double): SparseRowMatrix[R, C, V] = { - SparseRowMatrix(this.pipe.filter(_ => Random.nextDouble < samplingRatio), this.isSkinnyMatrix) - } - - // filter the matrix based on a subset of rows - def filterRows(rows: TypedPipe[R]): SparseRowMatrix[R, C, V] = { - SparseRowMatrix(this.pipe.join(rows.asKeys).mapValues(_._1), this.isSkinnyMatrix) - } - - // filter the matrix based on a subset of cols - def filterCols(cols: TypedPipe[C]): SparseRowMatrix[R, C, V] = { - this.toSparseMatrix.filterCols(cols).toSparseRowMatrix(this.isSkinnyMatrix) - } - - // convert the triplet (row, col, value) to a new (row1, col1, value1) - def tripleApply[R1, C1, V1]( - fn: (R, C, V) => (R1, C1, V1) - )( - implicit rowOrd1: Ordering[R1], - colOrd1: Ordering[C1], - numericV1: Numeric[V1], - semigroupV1: Semigroup[V1], - rowInj: Injection[R1, Array[Byte]], - colInj: Injection[C1, Array[Byte]] - ): SparseRowMatrix[R1, C1, V1] = { - SparseRowMatrix( - this.pipe.flatMap { - case (i, values) => - values - .map { - case (j, v) => fn(i, j, v) - } - .groupBy(_._1) - .mapValues { _.map { case (_, j1, v1) => (j1, v1) }.toMap } - }, - isSkinnyMatrix = this.isSkinnyMatrix - ) - } - - // get the l2 norms for all rows. this does not trigger a shuffle. - lazy val rowL2Norms: TypedPipe[(R, Double)] = { - this.pipe.map { - case (row, values) => - row -> math.sqrt( - values.values - .map(a => numericV.toDouble(a) * numericV.toDouble(a)) - .sum) - } - } - - // normalize the matrix to make sure each row has unit norm - lazy val rowL2Normalize: SparseRowMatrix[R, C, Double] = { - val result = this.pipe.flatMap { - case (row, values) => - val norm = - math.sqrt( - values.values - .map(v => numericV.toDouble(v) * numericV.toDouble(v)) - .sum) - if (norm == 0.0) { - None - } else { - Some(row -> values.mapValues(v => numericV.toDouble(v) / norm)) - } - } - - SparseRowMatrix(result, isSkinnyMatrix = this.isSkinnyMatrix) - } - - // get the l2 norms for all cols - lazy val colL2Norms: TypedPipe[(C, Double)] = { - this.pipe - .flatMap { - case (_, values) => - values.map { - case (col, v) => - col -> numericV.toDouble(v) * numericV.toDouble(v) - } - } - .sumByKey - .mapValues(math.sqrt) - } - - // normalize the matrix to make sure each column has unit norm - lazy val colL2Normalize: SparseRowMatrix[R, C, Double] = { - val result = if (this.isSkinnyMatrix) { - // if this is a skinny matrix, we first put the norm of all columns into a Map, and then use - // this Map inside the mappers without shuffling the whole matrix (which is expensive, see the - // `else` part of this function). - val colL2NormsValuePipe = this.colL2Norms.map { - case (col, norm) => Map(col -> norm) - }.sum - - this.pipe.flatMapWithValue(colL2NormsValuePipe) { - case ((row, values), Some(colNorms)) => - Some(row -> values.flatMap { - case (col, value) => - val colNorm = colNorms.getOrElse(col, 0.0) - if (colNorm == 0.0) { - None - } else { - Some(col -> numericV.toDouble(value) / colNorm) - } - }) - case _ => - None - } - } else { - this.toSparseMatrix.transpose.rowAsKeys - .join(this.colL2Norms) - .collect { - case (col, ((row, value), colNorm)) if colNorm > 0.0 => - row -> Map(col -> numericV.toDouble(value) / colNorm) - } - .sumByKey - .toTypedPipe - } - - SparseRowMatrix(result, isSkinnyMatrix = this.isSkinnyMatrix) - } - - /** - * Take topK non-zero elements from each row. Cols are ordered by the `ordering` function - */ - def sortWithTakePerRow( - k: Int - )( - ordering: Ordering[(C, V)] - ): TypedPipe[(R, Seq[(C, V)])] = { - this.pipe.map { - case (row, values) => - row -> values.toSeq.sorted(ordering).take(k) - } - } - - /** - * Take topK non-zero elements from each column. Rows are ordered by the `ordering` function. - */ - def sortWithTakePerCol( - k: Int - )( - ordering: Ordering[(R, V)] - ): TypedPipe[(C, Seq[(R, V)])] = { - this.toSparseMatrix.sortWithTakePerCol(k)(ordering) - } - - /** - * Similar to .forceToDisk function in TypedPipe, but with an option to specify how many partitions - * to save, which is useful if you want to consolidate the data set or want to tune the number - * of mappers for the next step. - * - * @param numShardsOpt number of shards to save the data. - * - * @return - */ - def forceToDisk( - numShardsOpt: Option[Int] = None - ): SparseRowMatrix[R, C, V] = { - numShardsOpt - .map { numShards => - SparseRowMatrix(this.pipe.shard(numShards), this.isSkinnyMatrix) - } - .getOrElse { - SparseRowMatrix(this.pipe.forceToDisk, this.isSkinnyMatrix) - } - } - - /** - * transpose current matrix and multiple another Skinny SparseRowMatrix. - * The difference between this and .transpose.multiplySkinnySparseRowMatrix(anotherSparseRowMatrix), - * is that we do not need to do flatten and group again. - * - * One use case is to when we need to compute the column-wise covariance matrix, then we only need - * a.transposeAndMultiplySkinnySparseRowMatrix(a) to get it. - * - * @param anotherSparseRowMatrix it needs to be a skinny SparseRowMatrix - * @numReducersOpt Number of reducers. - */ - def transposeAndMultiplySkinnySparseRowMatrix[C2]( - anotherSparseRowMatrix: SparseRowMatrix[R, C2, V], - numReducersOpt: Option[Int] = None - )( - implicit ordering2: Ordering[C2], - injection2: Injection[C2, Array[Byte]] - ): SparseRowMatrix[C, C2, V] = { - - // it needs to be a skinny SparseRowMatrix, otherwise we will have out-of-memory issue - require(anotherSparseRowMatrix.isSkinnyMatrix) - - SparseRowMatrix( - numReducersOpt - .map { numReducers => - this.pipe - .join(anotherSparseRowMatrix.pipe).withReducers(numReducers) - }.getOrElse(this.pipe - .join(anotherSparseRowMatrix.pipe)) - .flatMap { - case (_, (row1, row2)) => - row1.map { - case (col1, val1) => - col1 -> row2.mapValues(val2 => numericV.times(val1, val2)) - } - } - .sumByKey, - isSkinnyMatrix = true - ) - - } - - /*** - * Multiply a DenseRowMatrix. The result will be also a DenseRowMatrix. - * - * @param denseRowMatrix matrix to multiply - * @param numReducersOpt optional parameter to set number of reducers. It uses 1000 by default. - * you can change it based on your applications - * @return - */ - def multiplyDenseRowMatrix( - denseRowMatrix: DenseRowMatrix[C], - numReducersOpt: Option[Int] = None - ): DenseRowMatrix[R] = { - this.toSparseMatrix.multiplyDenseRowMatrix(denseRowMatrix, numReducersOpt) - } - - /** - * Convert the matrix to a DenseRowMatrix - * - * @param numCols the number of columns in the DenseRowMatrix. - * @param colToIndexFunction the function to convert colId to the column index in the dense matrix - * @return - */ - def toDenseRowMatrix(numCols: Int, colToIndexFunction: C => Int): DenseRowMatrix[R] = { - DenseRowMatrix(this.pipe.map { - case (row, colMap) => - val array = new Array[Double](numCols) - colMap.foreach { - case (col, value) => - val index = colToIndexFunction(col) - assert(index < numCols && index >= 0, "The converted index is out of range!") - array(index) = numericV.toDouble(value) - } - row -> array - }) - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/TypedPipeMatrix.docx b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/TypedPipeMatrix.docx new file mode 100644 index 0000000000000000000000000000000000000000..4fd2b2480a553f3c881aff04e59c1caca812b4b3 GIT binary patch literal 37245 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/TypedPipeMatrix.scala b/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/TypedPipeMatrix.scala deleted file mode 100644 index 24e3fb3ad..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/common/matrix/TypedPipeMatrix.scala +++ /dev/null @@ -1,49 +0,0 @@ -package com.twitter.simclusters_v2.scalding.common.matrix - -import com.twitter.algebird.{Aggregator, Semigroup} -import com.twitter.bijection.Injection -import com.twitter.scalding.{TypedPipe, ValuePipe} - -/** - * A matrix trait for representing a matrix backed by TypedPipe - * - * @tparam R Type for rows - * @tparam C Type for columns - * @tparam V Type for elements of the matrix - */ -abstract class TypedPipeMatrix[R, C, @specialized(Double, Int, Float, Long, Short) V] { - implicit val semigroupV: Semigroup[V] - implicit val numericV: Numeric[V] - implicit val rowOrd: Ordering[R] - implicit val colOrd: Ordering[C] - implicit val rowInj: Injection[R, Array[Byte]] - implicit val colInj: Injection[C, Array[Byte]] - - // num of non-zero elements in the matrix - val nnz: ValuePipe[Long] - - // list of unique rowIds in the matrix - val uniqueRowIds: TypedPipe[R] - - // list of unique unique in the matrix - val uniqueColIds: TypedPipe[C] - - // get a specific row of the matrix - def getRow(rowId: R): TypedPipe[(C, V)] - - // get a specific column of the matrix - def getCol(colId: C): TypedPipe[(R, V)] - - // get the value of an element - def get(rowId: R, colId: C): ValuePipe[V] - - // number of unique rowIds - lazy val numUniqueRows: ValuePipe[Long] = { - this.uniqueRowIds.aggregate(Aggregator.size) - } - - // number of unique unique - lazy val numUniqueCols: ValuePipe[Long] = { - this.uniqueColIds.aggregate(Aggregator.size) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/BUILD b/src/scala/com/twitter/simclusters_v2/scalding/embedding/BUILD deleted file mode 100644 index 399d64417..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/BUILD +++ /dev/null @@ -1,311 +0,0 @@ -scala_library( - sources = [ - "*.scala", - "common/*.scala", - ], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "escherbird/src/scala/com/twitter/escherbird/scalding/source", - "flockdb-tools/datasets/flock:flock-blocks-edges-scala", - "flockdb-tools/datasets/flock:flock-follows-edges-scala", - "flockdb-tools/datasets/flock:flock-report-as-abuse-edges-scala", - "flockdb-tools/datasets/flock:flock-report-as-spam-edges-scala", - "iesource/processing/events/src/main/scala/com/twitter/iesource/processing/events/batch:server_engagements-scala", - "interests-ds/src/main/scala/com/twitter/interests_ds/jobs/interests_service", - "interests-ds/src/main/scala/com/twitter/interests_ds/jobs/interests_service:user_topic_relation_snapshot-scala", - "src/java/com/twitter/common/text/language:locale-util", - "src/scala/com/twitter/frigate/data_pipeline/scalding/magicrecs/magicrecs_notification_lite:magicrecs_notification_lite_1day_lag-scala", - "src/scala/com/twitter/onboarding/relevance/source:utt_account_recommendations-scala", - "src/scala/com/twitter/penguin/scalding/datasets:penguin_user_languages-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:simclusters_v2_embeddings_lite-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/scalding/common/matrix", - "src/scala/com/twitter/wtf/entity_real_graph/common", - "src/scala/com/twitter/wtf/entity_real_graph/scalding/common", - "src/scala/com/twitter/wtf/scalding/jobs/common:execution_app", - "src/scala/com/twitter/wtf/scalding/jobs/common:sources", - "src/scala/com/twitter/wtf/scalding/jobs/common:stats_util", - "src/thrift/com/twitter/hermit/candidate:hermit-candidate-scala", - "src/thrift/com/twitter/onboarding/relevance/candidates:candidates-scala", - "src/thrift/com/twitter/recos/entities:entities-thrift-scala", - "src/thrift/com/twitter/search/adaptive/scribing:adaptive-scribing-scala", - "src/thrift/com/twitter/wtf/entity_real_graph:entity_real_graph-thrift-scala", - "twadoop_config/configuration/log_categories/group/search:adaptive_search-scala", - "usersource/snapshot/src/main/scala/com/twitter/usersource/snapshot/flat:usersource_flat-scala", - "usersource/snapshot/src/main/thrift/com/twitter/usersource/snapshot/flat:flat-scala", - ], -) - -hadoop_binary( - name = "entity_embeddings_job-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.EntityToSimClustersEmbeddingAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "entity_per_language_embeddings_job-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.LocaleEntitySimClustersEmbeddingAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "semantic_core_entity_embeddings_dec11_model_job", - main = "com.twitter.simclusters_v2.scalding.embedding.SemanticCoreEntityEmbeddingsDec11ModelApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "semantic_core_entity_embeddings_2020_job", - main = "com.twitter.simclusters_v2.scalding.embedding.SemanticCoreEntityEmbeddings2020App", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "semantic_core_entity_embeddings_per_language_job", - main = "com.twitter.simclusters_v2.scalding.embedding.LocaleEntitySimClustersEmbeddingScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "locale_entity_simclusters_embedding_v2", - main = "com.twitter.simclusters_v2.scalding.embedding.LocaleEntitySimClustersEmbeddingV2ScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "locale_entity_simclusters_embedding_v2-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.LocaleEntitySimClustersEmbeddingV2AdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "producer_embeddings_from_interested_in-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.ProducerEmbeddingsFromInterestedInAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "producer_embeddings_from_interested_in_by_fav_score", - main = "com.twitter.simclusters_v2.scalding.embedding.ProducerEmbeddingsFromInterestedInByFavScoreBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "producer_embeddings_from_interested_in_by_fav_score_2020", - main = "com.twitter.simclusters_v2.scalding.embedding.ProducerEmbeddingsFromInterestedInByFavScore2020BatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "producer_embeddings_from_interested_in_by_fav_score_dec11", - main = "com.twitter.simclusters_v2.scalding.embedding.ProducerEmbeddingsFromInterestedInByFavScoreDec11BatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "producer_embeddings_from_interested_in_by_follow_score", - main = "com.twitter.simclusters_v2.scalding.embedding.ProducerEmbeddingsFromInterestedInByFollowScoreBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "producer_embeddings_from_interested_in_by_follow_score_2020", - main = "com.twitter.simclusters_v2.scalding.embedding.ProducerEmbeddingsFromInterestedInByFollowScore2020BatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "producer_embeddings_from_interested_in_by_follow_score_dec11", - main = "com.twitter.simclusters_v2.scalding.embedding.ProducerEmbeddingsFromInterestedInByFollowScoreDec11BatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "similar_users_by_simclusters_embeddings-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.SimilarUsersBySimClustersEmbeddingAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "similar_users_by_simclusters_embeddings", - main = "com.twitter.simclusters_v2.scalding.embedding.SimilarUsersBySimClustersEmbeddingBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "entity_embedding_from_producer_embedding-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.EntityEmbeddingFromProducerEmbeddingAdhocJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "entity_embedding_from_producer_embedding_job", - main = "com.twitter.simclusters_v2.scalding.embedding.EntityEmbeddingFromProducerEmbeddingScheduledJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -# Generated with `capesospy-v2 create_target similar_users_by_simclusters_embeddings_job src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml`, config hash b8cf4d. -scalding_job( - name = "similar_users_by_simclusters_embeddings_job", - main = "com.twitter.simclusters_v2.scalding.embedding.SimiliarUsersBySimClustersEmbeddingBatchApp", - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.queue", "cassowary.default"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - cron = "15 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) - -hadoop_binary( - name = "global_simclusters_language_embedding_job", - main = "com.twitter.simclusters_v2.scalding.embedding.GlobalSimClustersLanguageEmbeddingBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":embedding"], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..e45e9f88d8cca8a27465bd3982dc8620a225c98e GIT binary patch literal 38226 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

I^OKt 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 ZG1S&!fHx~J2Z3^xAVVTBd*pV5cmQGWy2$_l literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/KnownForInjection.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/KnownForInjection.scala deleted file mode 100644 index 9aca921ee..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/KnownForInjection.scala +++ /dev/null @@ -1,12 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources.injections - -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection.{ - Long2BigEndian, - ScalaCompactThrift -} -import com.twitter.simclusters_v2.thriftscala._ - -object KnownForInjection { - val injection = KeyValInjection(Long2BigEndian, ScalaCompactThrift(ClustersUserIsKnownFor)) -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/MultiTypeGraphInjections.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/MultiTypeGraphInjections.docx new file mode 100644 index 0000000000000000000000000000000000000000..d4e2f97e58c6697576c5d528e780228e40eb71ec GIT binary patch literal 37030 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 bA!RYt)?t7*D=-Iva+M%MA~1XC_kef+=IkTv literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/MultiTypeGraphInjections.scala b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/MultiTypeGraphInjections.scala deleted file mode 100644 index f674324c6..000000000 --- a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/MultiTypeGraphInjections.scala +++ /dev/null @@ -1,31 +0,0 @@ -package com.twitter.simclusters_v2.hdfs_sources.injections - -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection.ScalaCompactThrift -import com.twitter.simclusters_v2.thriftscala.LeftNode -import com.twitter.simclusters_v2.thriftscala.NounWithFrequencyList -import com.twitter.simclusters_v2.thriftscala.RightNode -import com.twitter.simclusters_v2.thriftscala.RightNodeTypeStruct -import com.twitter.simclusters_v2.thriftscala.RightNodeWithEdgeWeightList -import com.twitter.simclusters_v2.thriftscala.SimilarRightNodes -import com.twitter.simclusters_v2.thriftscala.CandidateTweetsList -import com.twitter.scalding_internal.multiformat.format.keyval.KeyValInjection.Long2BigEndian - -object MultiTypeGraphInjections { - final val truncatedMultiTypeGraphInjection = - KeyValInjection(ScalaCompactThrift(LeftNode), ScalaCompactThrift(RightNodeWithEdgeWeightList)) - final val topKRightNounListInjection = - KeyValInjection( - ScalaCompactThrift(RightNodeTypeStruct), - ScalaCompactThrift(NounWithFrequencyList)) - final val similarRightNodesInjection = - KeyValInjection[RightNode, SimilarRightNodes]( - ScalaCompactThrift(RightNode), - ScalaCompactThrift(SimilarRightNodes) - ) - final val tweetRecommendationsInjection = - KeyValInjection[Long, CandidateTweetsList]( - Long2BigEndian, - ScalaCompactThrift(CandidateTweetsList) - ) -} diff --git a/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ProducerEmbeddingsInjections.docx b/src/scala/com/twitter/simclusters_v2/hdfs_sources/injections/ProducerEmbeddingsInjections.docx new file mode 100644 index 0000000000000000000000000000000000000000..a423d7f0ffeb7c3a03bb9c419d43100bd96445dc GIT binary patch literal 37077 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

a^>#gCmV-EA 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 (producerId, (entityId, score)) - } - - // step 2: read in producer to simclusters embeddings - - val producersEmbeddingsFollowBased = - ProducerEmbeddingSources.producerEmbeddingSourceLegacy( - EmbeddingType.ProducerFollowBasedSemanticCoreEntity, - modelVersion)(dateRange.embiggen(Days(7))) - - val producersEmbeddingsFavBased = - ProducerEmbeddingSources.producerEmbeddingSourceLegacy( - EmbeddingType.ProducerFavBasedSemanticCoreEntity, - modelVersion)(dateRange.embiggen(Days(7))) - - // step 3: join producer embedding with entity, producer pairs and reformat result into format [SimClustersEmbeddingId, SimClustersEmbedding] - val producerBasedEntityEmbeddingsFollowBased = - EntityEmbeddingFromProducerEmbeddingJob - .computeEmbedding( - producersEmbeddingsFollowBased, - entityKnownForProducers, - topK, - modelVersion, - EmbeddingType.ProducerFollowBasedSemanticCoreEntity).toTypedPipe.count( - "follow_based_entity_count") - - val producerBasedEntityEmbeddingsFavBased = - EntityEmbeddingFromProducerEmbeddingJob - .computeEmbedding( - producersEmbeddingsFavBased, - entityKnownForProducers, - topK, - modelVersion, - EmbeddingType.ProducerFavBasedSemanticCoreEntity).toTypedPipe.count( - "fav_based_entity_count") - - val producerBasedEntityEmbeddings = - producerBasedEntityEmbeddingsFollowBased ++ producerBasedEntityEmbeddingsFavBased - - // step 4 write results to file - producerBasedEntityEmbeddings - .count("total_count").writeExecution( - AdhocKeyValSources.entityToClustersSource( - getHdfsPath(isAdhoc = true, isManhattanKeyVal = true, modelVersion, "producer"))) - } - -} - -/* - $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:entity_embedding_from_producer_embedding_job - $ capesospy-v2 update \ - --build_locally \ - --start_cron entity_embedding_from_producer_embedding_job src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object EntityEmbeddingFromProducerEmbeddingScheduledJob extends ScheduledExecutionApp { - override def firstTime: RichDate = RichDate("2019-10-16") - - override def batchIncrement: Duration = Days(7) - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - // parse args: modelVersion, topK - val topK = args.getOrElse("top_k", "100").toInt - // only support dec11 now since updated model is not productionized for producer embedding - val modelVersion = - ModelVersions.toModelVersion( - args.getOrElse("model_version", ModelVersions.Model20M145KUpdated)) - - val entityKnownForProducers = - EntityEmbeddingFromProducerEmbeddingJob - .getNormalizedEntityProducerMatrix(dateRange.embiggen(Days(7))) - .count("num unique entity producer pairs").map { - case (entityId, producerId, score) => (producerId, (entityId, score)) - } - - val favBasedEmbeddings = EntityEmbeddingFromProducerEmbeddingJob - .computeEmbedding( - ProducerEmbeddingSources.producerEmbeddingSourceLegacy( - EmbeddingType.ProducerFavBasedSemanticCoreEntity, - modelVersion)(dateRange.embiggen(Days(7))), - entityKnownForProducers, - topK, - modelVersion, - EmbeddingType.ProducerFavBasedSemanticCoreEntity - ).toTypedPipe.count("follow_based_entity_count") - - val followBasedEmbeddings = EntityEmbeddingFromProducerEmbeddingJob - .computeEmbedding( - ProducerEmbeddingSources.producerEmbeddingSourceLegacy( - EmbeddingType.ProducerFollowBasedSemanticCoreEntity, - modelVersion)(dateRange.embiggen(Days(7))), - entityKnownForProducers, - topK, - modelVersion, - EmbeddingType.ProducerFollowBasedSemanticCoreEntity - ).toTypedPipe.count("fav_based_entity_count") - - val embedding = favBasedEmbeddings ++ followBasedEmbeddings - - embedding - .count("total_count") - .map { - case (embeddingId, embedding) => KeyVal(embeddingId, embedding) - }.writeDALVersionedKeyValExecution( - SemanticCoreEmbeddingsFromProducerScalaDataset, - D.Suffix(getHdfsPath(isAdhoc = false, isManhattanKeyVal = true, modelVersion, "producer")) - ) - - } - -} - -private object EntityEmbeddingFromProducerEmbeddingJob { - def computeEmbedding( - producersEmbeddings: TypedPipe[(Long, TopSimClustersWithScore)], - entityKnownForProducers: TypedPipe[(Long, (Long, Double))], - topK: Int, - modelVersion: ModelVersion, - embeddingType: EmbeddingType - ): UnsortedGrouped[SimClustersEmbeddingId, thriftscala.SimClustersEmbedding] = { - producersEmbeddings - .hashJoin(entityKnownForProducers).flatMap { - case (_, (topSimClustersWithScore, (entityId, producerScore))) => { - val entityEmbedding = topSimClustersWithScore.topClusters - entityEmbedding.map { - case SimClusterWithScore(clusterId, score) => - ( - ( - SimClustersEmbeddingId( - embeddingType, - modelVersion, - InternalId.EntityId(entityId)), - clusterId), - score * producerScore) - } - } - }.sumByKey.map { - case ((embeddingId, clusterId), clusterScore) => - (embeddingId, (clusterId, clusterScore)) - }.group.sortedReverseTake(topK)(Ordering.by(_._2)).mapValues(SimClustersEmbedding - .apply(_).toThrift) - } - - def getNormalizedEntityProducerMatrix( - implicit dateRange: DateRange - ): TypedPipe[(Long, Long, Double)] = { - val uttRecs: TypedPipe[(UTTInterest, InterestBasedUserRecommendations)] = - DAL - .readMostRecentSnapshot(UttAccountRecommendationsScalaDataset).withRemoteReadPolicy( - ExplicitLocation(ProcAtla)).toTypedPipe.map { - case KeyVal(interest, candidates) => (interest, candidates) - } - - uttRecs - .flatMap { - case (interest, candidates) => { - // current populated features - val top20Producers = candidates.recommendations.sortBy(-_.score.getOrElse(0.0d)).take(20) - val producerScorePairs = top20Producers.map { producer => - (producer.candidateUserID, producer.score.getOrElse(0.0)) - } - val scoreSum = producerScorePairs.map(_._2).sum - producerScorePairs.map { - case (producerId, score) => (interest.uttID, producerId, score / scoreSum) - } - } - } - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityToSimClustersEmbeddingsJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityToSimClustersEmbeddingsJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..9eaa0edf63735db9209df7c2d6f411846129b907 GIT binary patch literal 39997 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 acG5f4*CGRE(2rR~53&NL$J>k_|NaLj<=V;s literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityToSimClustersEmbeddingsJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityToSimClustersEmbeddingsJob.scala deleted file mode 100644 index 21d68ee22..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/EntityToSimClustersEmbeddingsJob.scala +++ /dev/null @@ -1,354 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding - -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.recos.entities.thriftscala.Entity -import com.twitter.recos.entities.thriftscala.Hashtag -import com.twitter.recos.entities.thriftscala.SemanticCoreEntity -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.common.SimClustersEmbedding -import com.twitter.simclusters_v2.hdfs_sources._ -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil._ -import com.twitter.simclusters_v2.scalding.embedding.common.EntityEmbeddingUtil -import com.twitter.simclusters_v2.scalding.embedding.common.SimClustersEmbeddingJob -import com.twitter.simclusters_v2.thriftscala.{ - SimClustersEmbedding => ThriftSimClustersEmbedding, - _ -} -import com.twitter.wtf.entity_real_graph.common.EntityUtil -import com.twitter.wtf.entity_real_graph.thriftscala.EntityType -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.DataSources -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:entity_embeddings_job-adhoc - * - * ---------------------- Deploy to atla ---------------------- - * $ scalding remote run \ - --main-class com.twitter.simclusters_v2.scalding.embedding.EntityToSimClustersEmbeddingAdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/embedding:entity_embeddings_job-adhoc \ - --user recos-platform \ - -- --date 2019-09-09 --model-version 20M_145K_updated --entity-type SemanticCore - */ -object EntityToSimClustersEmbeddingAdhocApp extends AdhocExecutionApp { - - import EmbeddingUtil._ - import EntityEmbeddingUtil._ - import EntityToSimClustersEmbeddingsJob._ - import EntityUtil._ - import SimClustersEmbeddingJob._ - - def writeOutput( - embeddings: TypedPipe[(SimClustersEmbeddingId, (ClusterId, EmbeddingScore))], - topKEmbeddings: TypedPipe[(SimClustersEmbeddingId, Seq[(ClusterId, EmbeddingScore)])], - jobConfig: EntityEmbeddingsJobConfig - ): Execution[Unit] = { - - val toSimClusterEmbeddingExec = topKEmbeddings - .mapValues(SimClustersEmbedding.apply(_).toThrift) - .writeExecution( - AdhocKeyValSources.entityToClustersSource( - EntityToSimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = true, - isReverseIndex = false, - jobConfig.modelVersion, - jobConfig.entityType))) - - val fromSimClusterEmbeddingExec = - toReverseIndexSimClusterEmbedding(embeddings, jobConfig.topK) - .writeExecution( - AdhocKeyValSources.clusterToEntitiesSource( - EntityToSimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = true, - isReverseIndex = true, - jobConfig.modelVersion, - jobConfig.entityType))) - - Execution.zip(toSimClusterEmbeddingExec, fromSimClusterEmbeddingExec).unit - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val jobConfig = EntityEmbeddingsJobConfig(args, isAdhoc = true) - - val numReducers = args.getOrElse("m", "1000").toInt - - /* - Using the ERG daily dataset in the adhoc job for quick prototyping, note that there may be - issues with scaling the job when productionizing on ERG aggregated dataset. - */ - val entityRealGraphSource = DataSources.entityRealGraphDailyDataSetSource - - val entityUserMatrix: TypedPipe[(Entity, (UserId, Double))] = - (jobConfig.entityType match { - case EntityType.SemanticCore => - getEntityUserMatrix(entityRealGraphSource, jobConfig.halfLife, EntityType.SemanticCore) - case EntityType.Hashtag => - getEntityUserMatrix(entityRealGraphSource, jobConfig.halfLife, EntityType.Hashtag) - case _ => - throw new IllegalArgumentException( - s"Argument [--entity-type] must be provided. Supported options [${EntityType.SemanticCore.name}, ${EntityType.Hashtag.name}]") - }).forceToDisk - - val normalizedUserEntityMatrix = - getNormalizedTransposeInputMatrix(entityUserMatrix, numReducers = Some(numReducers)) - - //determine which data source to use based on model version - val simClustersSource = jobConfig.modelVersion match { - case ModelVersion.Model20m145kUpdated => - InterestedInSources.simClustersInterestedInUpdatedSource(dateRange, timeZone) - case _ => - InterestedInSources.simClustersInterestedInDec11Source(dateRange, timeZone) - } - - val embeddings = computeEmbeddings( - simClustersSource, - normalizedUserEntityMatrix, - scoreExtractors, - ModelVersion.Model20m145kUpdated, - toSimClustersEmbeddingId(jobConfig.modelVersion), - numReducers = Some(numReducers * 2) - ) - - val topKEmbeddings = - embeddings.group - .sortedReverseTake(jobConfig.topK)(Ordering.by(_._2)) - .withReducers(numReducers) - - writeOutput(embeddings, topKEmbeddings, jobConfig) - } -} - -/** - * $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:semantic_core_entity_embeddings_2020_job - * $ capesospy-v2 update \ - --build_locally \ - --start_cron semantic_core_entity_embeddings_2020_job src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object SemanticCoreEntityEmbeddings2020App extends EntityToSimClustersEmbeddingApp - -trait EntityToSimClustersEmbeddingApp extends ScheduledExecutionApp { - - import EmbeddingUtil._ - import EntityEmbeddingUtil._ - import EntityToSimClustersEmbeddingsJob._ - import EntityUtil._ - import SimClustersEmbeddingJob._ - - override val firstTime: RichDate = RichDate("2023-01-01") - - override val batchIncrement: Duration = Days(7) - - private def writeOutput( - embeddings: TypedPipe[(SimClustersEmbeddingId, (ClusterId, EmbeddingScore))], - topKEmbeddings: TypedPipe[(SimClustersEmbeddingId, Seq[(ClusterId, EmbeddingScore)])], - jobConfig: EntityEmbeddingsJobConfig, - clusterEmbeddingsDataset: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ], - entityEmbeddingsDataset: KeyValDALDataset[KeyVal[SimClustersEmbeddingId, InternalIdEmbedding]] - ): Execution[Unit] = { - - val toSimClustersEmbeddings = - topKEmbeddings - .mapValues(SimClustersEmbedding.apply(_).toThrift) - .map { - case (entityId, topSimClusters) => KeyVal(entityId, topSimClusters) - } - .writeDALVersionedKeyValExecution( - clusterEmbeddingsDataset, - D.Suffix( - EntityToSimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - isReverseIndex = false, - jobConfig.modelVersion, - jobConfig.entityType)) - ) - - val fromSimClustersEmbeddings = - toReverseIndexSimClusterEmbedding(embeddings, jobConfig.topK) - .map { - case (embeddingId, internalIdsWithScore) => - KeyVal(embeddingId, internalIdsWithScore) - } - .writeDALVersionedKeyValExecution( - entityEmbeddingsDataset, - D.Suffix( - EntityToSimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - isReverseIndex = true, - jobConfig.modelVersion, - jobConfig.entityType)) - ) - - Execution.zip(toSimClustersEmbeddings, fromSimClustersEmbeddings).unit - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val jobConfig = EntityEmbeddingsJobConfig(args, isAdhoc = false) - - val embeddingsDataset = EntityEmbeddingsSources.getEntityEmbeddingsDataset( - jobConfig.entityType, - ModelVersions.toKnownForModelVersion(jobConfig.modelVersion) - ) - - val reverseIndexEmbeddingsDataset = - EntityEmbeddingsSources.getReverseIndexedEntityEmbeddingsDataset( - jobConfig.entityType, - ModelVersions.toKnownForModelVersion(jobConfig.modelVersion) - ) - - val entityRealGraphSource = - DataSources.entityRealGraphAggregationDataSetSource(dateRange.embiggen(Days(7))) - - val entityUserMatrix: TypedPipe[(Entity, (UserId, Double))] = - getEntityUserMatrix( - entityRealGraphSource, - jobConfig.halfLife, - jobConfig.entityType).forceToDisk - - val normalizedUserEntityMatrix = getNormalizedTransposeInputMatrix(entityUserMatrix) - - val simClustersEmbedding = jobConfig.modelVersion match { - case ModelVersion.Model20m145k2020 => - val simClustersSource2020 = - InterestedInSources.simClustersInterestedIn2020Source(dateRange, timeZone) - computeEmbeddings( - simClustersSource2020, - normalizedUserEntityMatrix, - scoreExtractors, - ModelVersion.Model20m145k2020, - toSimClustersEmbeddingId(ModelVersion.Model20m145k2020) - ) - case modelVersion => - throw new IllegalArgumentException(s"Model Version ${modelVersion.name} not supported") - } - - val topKEmbeddings = - simClustersEmbedding.group.sortedReverseTake(jobConfig.topK)(Ordering.by(_._2)) - - val simClustersEmbeddingsExec = - writeOutput( - simClustersEmbedding, - topKEmbeddings, - jobConfig, - embeddingsDataset, - reverseIndexEmbeddingsDataset) - - // We don't support embeddingsLite for the 2020 model version. - val embeddingsLiteExec = if (jobConfig.modelVersion == ModelVersion.Model20m145kUpdated) { - topKEmbeddings - .collect { - case ( - SimClustersEmbeddingId( - EmbeddingType.FavBasedSematicCoreEntity, - ModelVersion.Model20m145kUpdated, - InternalId.EntityId(entityId)), - clustersWithScores) => - entityId -> clustersWithScores - } - .flatMap { - case (entityId, clustersWithScores) => - clustersWithScores.map { - case (clusterId, score) => EmbeddingsLite(entityId, clusterId, score) - } - case _ => Nil - }.writeDALSnapshotExecution( - SimclustersV2EmbeddingsLiteScalaDataset, - D.Daily, - D.Suffix(embeddingsLitePath(ModelVersion.Model20m145kUpdated, "fav_based")), - D.EBLzo(), - dateRange.end) - } else { - Execution.unit - } - - Execution - .zip(simClustersEmbeddingsExec, embeddingsLiteExec).unit - } -} - -object EntityToSimClustersEmbeddingsJob { - - def toSimClustersEmbeddingId( - modelVersion: ModelVersion - ): (Entity, ScoreType.ScoreType) => SimClustersEmbeddingId = { - case (Entity.SemanticCore(SemanticCoreEntity(entityId, _)), ScoreType.FavScore) => - SimClustersEmbeddingId( - EmbeddingType.FavBasedSematicCoreEntity, - modelVersion, - InternalId.EntityId(entityId)) - case (Entity.SemanticCore(SemanticCoreEntity(entityId, _)), ScoreType.FollowScore) => - SimClustersEmbeddingId( - EmbeddingType.FollowBasedSematicCoreEntity, - modelVersion, - InternalId.EntityId(entityId)) - case (Entity.Hashtag(Hashtag(hashtag)), ScoreType.FavScore) => - SimClustersEmbeddingId( - EmbeddingType.FavBasedHashtagEntity, - modelVersion, - InternalId.Hashtag(hashtag)) - case (Entity.Hashtag(Hashtag(hashtag)), ScoreType.FollowScore) => - SimClustersEmbeddingId( - EmbeddingType.FollowBasedHashtagEntity, - modelVersion, - InternalId.Hashtag(hashtag)) - case (scoreType, entity) => - throw new IllegalArgumentException( - s"(ScoreType, Entity) ($scoreType, ${entity.toString}) not supported") - } - - /** - * Generates the output path for the Entity Embeddings Job. - * - * Example Adhoc: /user/recos-platform/processed/adhoc/simclusters_embeddings/hashtag/model_20m_145k_updated - * Example Prod: /atla/proc/user/cassowary/processed/simclusters_embeddings/semantic_core/model_20m_145k_dec11 - * - */ - def getHdfsPath( - isAdhoc: Boolean, - isManhattanKeyVal: Boolean, - isReverseIndex: Boolean, - modelVersion: ModelVersion, - entityType: EntityType - ): String = { - - val reverseIndex = if (isReverseIndex) "reverse_index/" else "" - - val entityTypeSuffix = entityType match { - case EntityType.SemanticCore => "semantic_core" - case EntityType.Hashtag => "hashtag" - case _ => "unknown" - } - - val pathSuffix = s"$reverseIndex$entityTypeSuffix" - - EmbeddingUtil.getHdfsPath(isAdhoc, isManhattanKeyVal, modelVersion, pathSuffix) - } - - def embeddingsLitePath(modelVersion: ModelVersion, pathSuffix: String): String = { - s"/user/cassowary/processed/entity_real_graph/simclusters_embedding/lite/$modelVersion/$pathSuffix/" - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/GlobalSimClustersLanguageEmbedding.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/GlobalSimClustersLanguageEmbedding.docx new file mode 100644 index 0000000000000000000000000000000000000000..03346f40bf09cee43d62f713eb69911e1c7fc867 GIT binary patch literal 38863 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 jY5l={y&L+cDR$61G&N)bX3)1;#SL- TypedPipe[(UserId, ClustersUserIsInterestedIn)] = - InterestedInSources.simClustersInterestedIn2020Source - - def flattenAndFilterUserInterestedIn( - interestedIn: TypedPipe[(UserId, ClustersUserIsInterestedIn)] - ): TypedPipe[(UserId, (Int, Double))] = { - interestedIn - // Get (userId, Seq[(clusterId, scores)] - .map { - case (user, clusterUserIsInterestedIn) => { - (user, clusterUserIsInterestedIn.clusterIdToScores) - } - } - // Flatten it into (UserId, ClusterId, LogFavScore) - .flatMap { - case (userId, clusterUserIsInterestedIn) => { - clusterUserIsInterestedIn.toSeq.map { - case (clusterId, scores) => { - (userId, (clusterId, scores.logFavScore.getOrElse(0.0))) - } - } - } - }.filter(_._2._2 > 0.0) // Filter out zero scores - } - - def getGlobalSimClustersEmbeddingPerLanguage( - interestedIn: TypedPipe[(UserId, (Int, Double))], - favEdges: TypedPipe[(UserId, TweetId, Timestamp)], - language: TypedPipe[(UserId, (Country, Language))] - ): TypedPipe[(Language, ClustersUserIsInterestedIn)] = { - // Engagement fav edges - val edges = favEdges.map { case (userId, tweetId, ts) => (userId, (tweetId, ts)) } - - // Language information for users - val userLanguage = language.map { - case (userId, (country, lang)) => (userId, lang) - } - val numUsersPerLanguage = userLanguage.map { - case (_, lang) => (lang, 1L) - }.sumByKey - - val embeddings = - interestedIn - .join(edges) // Join InterestedIn and user-tweet engagements - .map { - case (userId, ((clusterId, score), (_, _))) => { - (userId, (clusterId, score)) - } - } - .join(userLanguage) // Join and get cluster scores per language - .map { - case (userId, ((clusterId, score), lang)) => { - ((lang, clusterId), score) - } - } - .sumByKey // Sum the user embeddings per language based on the engagements - .map { case ((lang, clusterId), score) => (lang, (clusterId, score)) } - .join(numUsersPerLanguage) - // We compute the average cluster scores per language - .map { - case (lang, ((clusterId, score), count)) => (lang, (clusterId -> score / count)) - } - .group - .sortedReverseTake(numOfClustersPerLanguage)(Ordering - .by(_._2)) // Take top 400 clusters per language - .flatMap { - case (lang, clusterScores) => { - clusterScores.map { - case (clusterId, score) => (lang, (clusterId, score)) - } - } - }.mapValues { case (clusterId, score) => Map(clusterId -> score) } - - // Build the final SimClusters embeddings per language - embeddings.sumByKey.map { - case (lang, clusterToScore) => { - val clusterScores = clusterToScore.map { - case (clusterId, score) => - clusterId -> UserToInterestedInClusterScores(logFavScore = Some(score)) - } - (lang, ClustersUserIsInterestedIn(ModelVersion.Model20m145k2020.name, clusterScores)) - } - } - } - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - // Read the most recent InterestedIn snapshot from the past 21 days - val interestedIn = - InterestedInSources - .simClustersInterestedIn2020Source(dateRange.prepend(Days(21)), timeZone).forceToDisk - - // Get the user tweet fav engagement history from the past 2 days - val userTweetFavEdges = ExternalDataSources.userTweetFavoritesSource - - // Read user language from UserSource - val userLanguages = ExternalDataSources.userSource - - val globalEmbeddings = getGlobalSimClustersEmbeddingPerLanguage( - flattenAndFilterUserInterestedIn(interestedIn), - userTweetFavEdges, - userLanguages) - - // Write results as a key-val dataset - globalEmbeddings - .map { - case (lang, embeddings) => - KeyVal(lang, embeddings) - } - .writeDALVersionedKeyValExecution( - globalLanguageEmbeddingsKeyValDataset, - D.Suffix(outputHdfsDirectory) - ) - - // Write results as a thrift dataset - globalEmbeddings - .map { - case (lang, clusterUserIsInterestedIn) => - LanguageToClusters( - lang, - clusterUserIsInterestedIn.knownForModelVersion, - clusterUserIsInterestedIn.clusterIdToScores - ) - } - .writeDALSnapshotExecution( - globalLanguageEmbeddingsThriftDataset, - D.Daily, - D.Suffix(outputThriftHdfsDirectory), - D.Parquet, - dateRange.`end` - ) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingV2Job.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingV2Job.docx new file mode 100644 index 0000000000000000000000000000000000000000..347a8a7027e576e5d05e5e76b354155425a2618c GIT binary patch literal 38958 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 Uc3=j5n^giJS73V7Wq$ki4++ih!vFvP literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingV2Job.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingV2Job.scala deleted file mode 100644 index baf604cba..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingV2Job.scala +++ /dev/null @@ -1,248 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding - -import com.twitter.bijection.{Bufferable, Injection} -import com.twitter.recos.entities.thriftscala.{Entity, SemanticCoreEntity} -import com.twitter.scalding.{DateRange, Days, Duration, Execution, RichDate, TypedPipe, UniqueID} -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common._ -import com.twitter.simclusters_v2.hdfs_sources.{AdhocKeyValSources, EntityEmbeddingsSources} -import com.twitter.simclusters_v2.scalding.common.matrix.{SparseMatrix, SparseRowMatrix} -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.ClusterId -import com.twitter.simclusters_v2.scalding.embedding.common.{ - EmbeddingUtil, - ExternalDataSources, - SimClustersEmbeddingBaseJob -} -import com.twitter.simclusters_v2.thriftscala.{ - EmbeddingType, - InternalId, - InternalIdEmbedding, - InternalIdWithScore, - LocaleEntityId, - ModelVersion, - SimClustersEmbeddingId -} -import com.twitter.wtf.entity_real_graph.thriftscala.{Edge, FeatureName} -import com.twitter.wtf.scalding.jobs.common.{AdhocExecutionApp, DataSources, ScheduledExecutionApp} -import java.util.TimeZone - -/** - * Scheduled production job which generates topic embeddings per locale based on Entity Real Graph. - * - * V2 Uses the log transform of the ERG favScores and the SimCluster InterestedIn scores. - * - * $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:locale_entity_simclusters_embedding_v2 - * $ capesospy-v2 update \ - --build_locally \ - --start_cron locale_entity_simclusters_embedding_v2 src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object LocaleEntitySimClustersEmbeddingV2ScheduledApp - extends LocaleEntitySimClustersEmbeddingV2Job - with ScheduledExecutionApp { - - override val firstTime: RichDate = RichDate("2020-04-08") - - override val batchIncrement: Duration = Days(1) - - override def writeNounToClustersIndex( - output: TypedPipe[(LocaleEntity, Seq[(ClusterId, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - output - .map { - case ((entityId, lang), clustersWithScores) => - KeyVal( - SimClustersEmbeddingId( - EmbeddingType.LogFavBasedLocaleSemanticCoreEntity, - ModelVersion.Model20m145kUpdated, - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang)) - ), - SimClustersEmbedding(clustersWithScores).toThrift - ) - } - .writeDALVersionedKeyValExecution( - EntityEmbeddingsSources.LogFavSemanticCorePerLanguageSimClustersEmbeddingsDataset, - D.Suffix( - EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - ModelVersion.Model20m145kUpdated, - pathSuffix = "log_fav_erg_based_embeddings")) - ) - } - - override def writeClusterToNounsIndex( - output: TypedPipe[(ClusterId, Seq[(LocaleEntity, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .map { - case (clusterId, nounsWithScore) => - KeyVal( - SimClustersEmbeddingId( - EmbeddingType.LogFavBasedLocaleSemanticCoreEntity, - ModelVersion.Model20m145kUpdated, - InternalId.ClusterId(clusterId) - ), - InternalIdEmbedding(nounsWithScore.map { - case ((entityId, lang), score) => - InternalIdWithScore( - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang)), - score) - }) - ) - } - .writeDALVersionedKeyValExecution( - EntityEmbeddingsSources.LogFavReverseIndexSemanticCorePerLanguageSimClustersEmbeddingsDataset, - D.Suffix( - EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - ModelVersion.Model20m145kUpdated, - pathSuffix = "reverse_index_log_fav_erg_based_embeddings")) - ) - } -} - -/** - * $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:locale_entity_simclusters_embedding_v2-adhoc - * - * $ scalding remote run \ - --main-class com.twitter.simclusters_v2.scalding.embedding.LocaleEntitySimClustersEmbeddingV2AdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/embedding:locale_entity_simclusters_embedding_v2-adhoc \ - --user recos-platform --reducers 2000\ - -- --date 2020-04-06 - */ -object LocaleEntitySimClustersEmbeddingV2AdhocApp - extends LocaleEntitySimClustersEmbeddingV2Job - with AdhocExecutionApp { - - override def writeNounToClustersIndex( - output: TypedPipe[(LocaleEntity, Seq[(ClusterId, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - output - .map { - case ((entityId, lang), clustersWithScores) => - SimClustersEmbeddingId( - EmbeddingType.LogFavBasedLocaleSemanticCoreEntity, - ModelVersion.Model20m145kUpdated, - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang)) - ) -> SimClustersEmbedding(clustersWithScores).toThrift - - }.writeExecution( - AdhocKeyValSources.entityToClustersSource( - EmbeddingUtil.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = true, - ModelVersion.Model20m145kUpdated, - pathSuffix = "log_fav_erg_based_embeddings"))) - } - - override def writeClusterToNounsIndex( - output: TypedPipe[(ClusterId, Seq[(LocaleEntity, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - output - .map { - case (clusterId, nounsWithScore) => - SimClustersEmbeddingId( - EmbeddingType.LogFavBasedLocaleSemanticCoreEntity, - ModelVersion.Model20m145kUpdated, - InternalId.ClusterId(clusterId) - ) -> - InternalIdEmbedding(nounsWithScore.map { - case ((entityId, lang), score) => - InternalIdWithScore( - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang)), - score) - }) - } - .writeExecution( - AdhocKeyValSources.clusterToEntitiesSource( - EmbeddingUtil.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = true, - ModelVersion.Model20m145kUpdated, - pathSuffix = "reverse_index_log_fav_erg_based_embeddings"))) - } -} - -trait LocaleEntitySimClustersEmbeddingV2Job extends SimClustersEmbeddingBaseJob[LocaleEntity] { - - override val numClustersPerNoun = 100 - - override val numNounsPerClusters = 100 - - override val thresholdForEmbeddingScores: Double = 0.001 - - override val numReducersOpt: Option[Int] = Some(8000) - - private val DefaultERGHalfLifeInDays = 14 - - private val MinInterestedInLogFavScore = 0.0 - - implicit val inj: Injection[LocaleEntity, Array[Byte]] = Bufferable.injectionOf[LocaleEntity] - - override def prepareNounToUserMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseMatrix[LocaleEntity, UserId, Double] = { - - val erg: TypedPipe[(SemanticCoreEntityId, (UserId, Double))] = - DataSources.entityRealGraphAggregationDataSetSource(dateRange.embiggen(Days(7))).flatMap { - case Edge( - userId, - Entity.SemanticCore(SemanticCoreEntity(entityId, _)), - consumerFeatures, - _, - _) if consumerFeatures.exists(_.exists(_.featureName == FeatureName.Favorites)) => - for { - features <- consumerFeatures - favFeatures <- features.find(_.featureName == FeatureName.Favorites) - ewmaMap <- favFeatures.featureValues.ewmaMap - favScore <- ewmaMap.get(DefaultERGHalfLifeInDays) - } yield (entityId, (userId, Math.log(favScore + 1))) - - case _ => None - } - - SparseMatrix[LocaleEntity, UserId, Double]( - erg - .hashJoin(ExternalDataSources.uttEntitiesSource().asKeys).map { - case (entityId, ((userId, score), _)) => (userId, (entityId, score)) - }.join(ExternalDataSources.userSource).map { - case (userId, ((entityId, score), (_, language))) => - ((entityId, language), userId, score) - } - ) - } - - override def prepareUserToClusterMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseRowMatrix[UserId, ClusterId, Double] = { - SparseRowMatrix( - ExternalDataSources.simClustersInterestInLogFavSource(MinInterestedInLogFavScore), - isSkinnyMatrix = true - ) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingsJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingsJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..37a3065934604da912adb0fa289a19d00969a802 GIT binary patch literal 40408 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

EI8(myf78l(x)3gf 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 - keyVal.value.embedding.map { simClusterWithScore => - ( - keyVal.key.embeddingType, - keyVal.key.modelVersion, - keyVal.key.internalId, - simClusterWithScore.clusterId, - simClusterWithScore.score - ) - } - } - .writeExecution( - // Write to TSV for easier debugging of the adhoc job. - TypedTsv(outputPath) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeExecution( - new FixedPathLzoScrooge(outputPathThrift, SimClustersEmbeddingWithId) - ) - } -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/producer:aggregatable_fav_based_producer_embeddings_job_2020-adhoc -scalding remote run \ ---user cassowary \ ---keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ ---principal service_acoount@TWITTER.BIZ \ ---cluster bluebird-qus1 \ ---main-class com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFavBasedProducerEmbeddings2020AdhocApp \ ---target src/scala/com/twitter/simclusters_v2/scalding/embedding/producer:aggregatable_fav_based_producer_embeddings_job_2020-adhoc \ ---hadoop-properties "scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=4000" \ --- --date 2020-06-28 - */ -object AggregatableFavBasedProducerEmbeddings2020AdhocApp - extends AggregatableFavBasedProducerEmbeddingsBaseApp - with AdhocExecutionApp { - - override val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - private val outputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_fav_score" - ) - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_fav_score_thrift" - ) - - override def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .flatMap { keyVal => - keyVal.value.embedding.map { simClusterWithScore => - ( - keyVal.key.embeddingType, - keyVal.key.modelVersion, - keyVal.key.internalId, - simClusterWithScore.clusterId, - simClusterWithScore.score - ) - } - } - .writeExecution( - // Write to TSV for easier debugging of the adhoc job. - TypedTsv(outputPath) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeExecution( - new FixedPathLzoScrooge(outputPathThrift, SimClustersEmbeddingWithId) - ) - } -} - -trait AggregatableFavBasedProducerEmbeddingsBaseApp extends AggregatableProducerEmbeddingsBaseApp { - override val userToProducerScoringFn: NeighborWithWeights => Double = - _.favScoreHalfLife100Days.getOrElse(0.0) - override val userToClusterScoringFn: UserToInterestedInClusterScores => Double = - _.favScore.getOrElse(0.0) - override val embeddingType: EmbeddingType = EmbeddingType.AggregatableFavBasedProducer -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFollowBasedProducerEmbeddings.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFollowBasedProducerEmbeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..405a99eecc2c5d82ed4763280e83e201e141f471 GIT binary patch literal 38517 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 JtP+15{U6dP0*wFw literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFollowBasedProducerEmbeddings.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFollowBasedProducerEmbeddings.scala deleted file mode 100644 index d18b66a7f..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFollowBasedProducerEmbeddings.scala +++ /dev/null @@ -1,165 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.producer - -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.scalding_internal.source.lzo_scrooge.FixedPathLzoScrooge -import com.twitter.simclusters_v2.hdfs_sources.AggregatableProducerSimclustersEmbeddingsByFollowScore2020ScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.AggregatableProducerSimclustersEmbeddingsByFollowScore2020ThriftScalaDataset -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil -import com.twitter.simclusters_v2.thriftscala.EmbeddingType -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.simclusters_v2.thriftscala.NeighborWithWeights -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingId -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingWithId -import com.twitter.simclusters_v2.thriftscala.UserToInterestedInClusterScores -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * This file implements a new Producer SimClusters Embeddings. - * The differences with existing producer embeddings are: - * - * 1) the embedding scores are not normalized, so that one can aggregate multiple producer embeddings by adding them. - * 2) we use follow scores in the user-producer graph and user-simclusters graph. - */ - -/** - * Production job: -capesospy-v2 update --build_locally --start_cron aggregatable_producer_embeddings_by_follow_score_2020 src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object AggregatableFollowBasedProducerEmbeddings2020ScheduledApp - extends AggregatableFollowBasedProducerEmbeddingsBaseApp - with ScheduledExecutionApp { - - override val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - // Not using the EmbeddingUtil.getHdfsPath to preserve the previous functionality. - private val outputPath: String = - "/user/cassowary/manhattan_sequence_files/producer_simclusters_aggregatable_embeddings_by_follow_score_20m145k2020" - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_follow_score_thrift" - ) - - override def batchIncrement: Duration = Days(7) - - override def firstTime: RichDate = RichDate("2021-11-10") - - override def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeDALVersionedKeyValExecution( - AggregatableProducerSimclustersEmbeddingsByFollowScore2020ScalaDataset, - D.Suffix(outputPath), - version = ExplicitEndTime(dateRange.end) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeDALSnapshotExecution( - dataset = AggregatableProducerSimclustersEmbeddingsByFollowScore2020ThriftScalaDataset, - updateStep = D.Daily, - pathLayout = D.Suffix(outputPathThrift), - fmt = D.Parquet, - endDate = dateRange.end - ) - } -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/producer:aggregatable_follow_based_producer_embeddings_job_2020-adhoc -scalding remote run \ ---user cassowary \ ---keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ ---principal service_acoount@TWITTER.BIZ \ ---cluster bluebird-qus1 \ ---main-class com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFollowBasedProducerEmbeddings2020AdhocApp \ ---target src/scala/com/twitter/simclusters_v2/scalding/embedding/producer:aggregatable_follow_based_producer_embeddings_job_2020-adhoc \ ---hadoop-properties "scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=4000" \ --- --date 2021-11-10 - */ - -object AggregatableFollowBasedProducerEmbeddings2020AdhocApp - extends AggregatableFollowBasedProducerEmbeddingsBaseApp - with AdhocExecutionApp { - - override val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - - private val outputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = true, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_follow_score" - ) - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_follow_score_thrift" - ) - - override def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .flatMap { keyVal => - keyVal.value.embedding.map { simClusterWithScore => - ( - keyVal.key.embeddingType, - keyVal.key.modelVersion, - keyVal.key.internalId, - simClusterWithScore.clusterId, - simClusterWithScore.score - ) - } - } - .writeExecution( - // Write to TSV for easier debugging of the adhoc job. - TypedTsv(outputPath) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeExecution( - new FixedPathLzoScrooge(outputPathThrift, SimClustersEmbeddingWithId) - ) - } -} - -trait AggregatableFollowBasedProducerEmbeddingsBaseApp - extends AggregatableProducerEmbeddingsBaseApp { - override val userToProducerScoringFn: NeighborWithWeights => Double = - _.followScoreNormalizedByNeighborFollowersL2.getOrElse(0.0) - override val userToClusterScoringFn: UserToInterestedInClusterScores => Double = - _.followScoreClusterNormalizedOnly.getOrElse(0.0) - override val embeddingType: EmbeddingType = EmbeddingType.AggregatableFollowBasedProducer -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableLogFavBasedProducerEmbeddings.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableLogFavBasedProducerEmbeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..fe9e707174dae6a7a301cb5d8ccb6fd764ea8c7a GIT binary patch literal 39194 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableLogFavBasedProducerEmbeddings.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableLogFavBasedProducerEmbeddings.scala deleted file mode 100644 index 8344043b5..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableLogFavBasedProducerEmbeddings.scala +++ /dev/null @@ -1,368 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.producer - -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.scalding_internal.source.lzo_scrooge.FixedPathLzoScrooge -import com.twitter.simclusters_v2.hdfs_sources.{ - AggregatableProducerSimclustersEmbeddingsByLogFavScoreScalaDataset, - AggregatableProducerSimclustersEmbeddingsByLogFavScoreThriftScalaDataset, - AggregatableProducerSimclustersEmbeddingsByLogFavScore2020ScalaDataset, - AggregatableProducerSimclustersEmbeddingsByLogFavScore2020ThriftScalaDataset, - AggregatableProducerSimclustersEmbeddingsByLogFavScoreRelaxedFavEngagementThreshold2020ScalaDataset, - AggregatableProducerSimclustersEmbeddingsByLogFavScoreRelaxedFavEngagementThreshold2020ThriftScalaDataset -} -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil -import com.twitter.simclusters_v2.thriftscala.{ - EmbeddingType, - ModelVersion, - NeighborWithWeights, - SimClustersEmbedding, - SimClustersEmbeddingId, - SimClustersEmbeddingWithId, - UserToInterestedInClusterScores -} -import com.twitter.wtf.scalding.jobs.common.{AdhocExecutionApp, ScheduledExecutionApp} -import java.util.TimeZone - -/** - * This file implements a new Producer SimClusters Embeddings. - * The differences with existing producer embeddings are: - * - * 1) the embedding scores are not normalized, so that one can aggregate multiple producer embeddings by adding them. - * 2) we use log-fav scores in the user-producer graph and user-simclusters graph. - * LogFav scores are smoother than fav scores we previously used and they are less sensitive to outliers - * - * - * - * The main difference with other normalized embeddings is the `convertEmbeddingToAggregatableEmbeddings` function - * where we multiply the normalized embedding with producer's norms. The resulted embeddings are then - * unnormalized and aggregatable. - * - */ -/** - * Production job: -capesospy-v2 update aggregatable_producer_embeddings_by_logfav_score src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object AggregatableLogFavBasedProducerEmbeddingsScheduledApp - extends AggregatableLogFavBasedProducerEmbeddingsBaseApp - with ScheduledExecutionApp { - - override val modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - // Not using the EmbeddingUtil.getHdfsPath to preserve the previous functionality. - private val outputPath: String = - "/user/cassowary/manhattan_sequence_files/producer_simclusters_aggregatable_embeddings_by_logfav_score" - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_logfav_score_thrift" - ) - - override def batchIncrement: Duration = Days(7) - - override def firstTime: RichDate = RichDate("2020-04-05") - - override def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeDALVersionedKeyValExecution( - AggregatableProducerSimclustersEmbeddingsByLogFavScoreScalaDataset, - D.Suffix(outputPath), - version = ExplicitEndTime(dateRange.end) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeDALSnapshotExecution( - dataset = AggregatableProducerSimclustersEmbeddingsByLogFavScoreThriftScalaDataset, - updateStep = D.Daily, - pathLayout = D.Suffix(outputPathThrift), - fmt = D.Parquet, - endDate = dateRange.end - ) - } -} - -/** - * Production job: -capesospy-v2 update --build_locally --start_cron aggregatable_producer_embeddings_by_logfav_score_2020 src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object AggregatableLogFavBasedProducerEmbeddings2020ScheduledApp - extends AggregatableLogFavBasedProducerEmbeddingsBaseApp - with ScheduledExecutionApp { - - override val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - // Not using the EmbeddingUtil.getHdfsPath to preserve the previous functionality. - private val outputPath: String = - "/user/cassowary/manhattan_sequence_files/producer_simclusters_aggregatable_embeddings_by_logfav_score_20m145k2020" - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_logfav_score_thrift" - ) - - override def batchIncrement: Duration = Days(7) - - override def firstTime: RichDate = RichDate("2021-03-05") - - override def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeDALVersionedKeyValExecution( - AggregatableProducerSimclustersEmbeddingsByLogFavScore2020ScalaDataset, - D.Suffix(outputPath), - version = ExplicitEndTime(dateRange.end) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeDALSnapshotExecution( - dataset = AggregatableProducerSimclustersEmbeddingsByLogFavScore2020ThriftScalaDataset, - updateStep = D.Daily, - pathLayout = D.Suffix(outputPathThrift), - fmt = D.Parquet, - endDate = dateRange.end - ) - } -} - -/** - * Production job: -capesospy-v2 update --build_locally --start_cron aggregatable_producer_embeddings_by_logfav_score_relaxed_fav_engagement_threshold_2020 src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object AggregatableLogFavBasedProducerEmbeddingsRelaxedFavEngagementThreshold2020ScheduledApp - extends AggregatableLogFavBasedProducerEmbeddingsBaseApp - with ScheduledExecutionApp { - - override val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - - override val embeddingType: EmbeddingType = EmbeddingType.RelaxedAggregatableLogFavBasedProducer - - // Relax fav engagement threshold - override val minNumFavers = 15 - - // Not using the EmbeddingUtil.getHdfsPath to preserve the previous functionality. - private val outputPath: String = - "/user/cassowary/manhattan_sequence_files/producer_simclusters_aggregatable_embeddings_by_logfav_score_relaxed_fav_engagement_threshold_20m145k2020" - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = - "producer_simclusters_aggregatable_embeddings_by_logfav_score_relaxed_fav_score_threshold_thrift" - ) - - override def batchIncrement: Duration = Days(7) - - override def firstTime: RichDate = RichDate("2021-07-26") - - override def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeDALVersionedKeyValExecution( - AggregatableProducerSimclustersEmbeddingsByLogFavScoreRelaxedFavEngagementThreshold2020ScalaDataset, - D.Suffix(outputPath), - version = ExplicitEndTime(dateRange.end) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeDALSnapshotExecution( - dataset = - AggregatableProducerSimclustersEmbeddingsByLogFavScoreRelaxedFavEngagementThreshold2020ThriftScalaDataset, - updateStep = D.Daily, - pathLayout = D.Suffix(outputPathThrift), - fmt = D.Parquet, - endDate = dateRange.end - ) - } -} - -/*** - * Adhoc job: - -scalding remote run --user recos-platform \ ---main-class com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableLogFavBasedProducerEmbeddingsAdhocApp \ ---target src/scala/com/twitter/simclusters_v2/scalding/embedding/producer:aggregatable_logfav_based_producer_embeddings_job-adhoc \ --- --date 2020-04-08 - - */ -object AggregatableLogFavBasedProducerEmbeddingsAdhocApp - extends AggregatableLogFavBasedProducerEmbeddingsBaseApp - with AdhocExecutionApp { - - override val modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - - private val outputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_log_fav_score" - ) - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_log_fav_score_thrift" - ) - - override def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .flatMap { keyVal => - keyVal.value.embedding.map { simClusterWithScore => - ( - keyVal.key.embeddingType, - keyVal.key.modelVersion, - keyVal.key.internalId, - simClusterWithScore.clusterId, - simClusterWithScore.score - ) - } - } - .writeExecution( - // Write to TSV for easier debugging of the adhoc job. - TypedTsv(outputPath) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeExecution( - new FixedPathLzoScrooge(outputPathThrift, SimClustersEmbeddingWithId) - ) - } -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/producer:aggregatable_logfav_based_producer_embeddings_job_2020-adhoc -scalding remote run \ ---user cassowary \ ---keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ ---principal service_acoount@TWITTER.BIZ \ ---cluster bluebird-qus1 \ ---main-class com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableLogFavBasedProducerEmbeddings2020AdhocApp \ ---target src/scala/com/twitter/simclusters_v2/scalding/embedding/producer:aggregatable_logfav_based_producer_embeddings_job_2020-adhoc \ ---hadoop-properties "scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=4000" \ --- --date 2020-06-28 - */ - -object AggregatableLogFavBasedProducerEmbeddings2020AdhocApp - extends AggregatableLogFavBasedProducerEmbeddingsBaseApp - with AdhocExecutionApp { - - override val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - - private val outputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_log_fav_score" - ) - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = "producer_simclusters_aggregatable_embeddings_by_log_fav_score_thrift" - ) - - override def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .flatMap { keyVal => - keyVal.value.embedding.map { simClusterWithScore => - ( - keyVal.key.embeddingType, - keyVal.key.modelVersion, - keyVal.key.internalId, - simClusterWithScore.clusterId, - simClusterWithScore.score - ) - } - } - .writeExecution( - // Write to TSV for easier debugging of the adhoc job. - TypedTsv(outputPath) - ) - } - - override def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - output - .writeExecution( - new FixedPathLzoScrooge(outputPathThrift, SimClustersEmbeddingWithId) - ) - } -} - -trait AggregatableLogFavBasedProducerEmbeddingsBaseApp - extends AggregatableProducerEmbeddingsBaseApp { - override val userToProducerScoringFn: NeighborWithWeights => Double = _.logFavScore.getOrElse(0.0) - override val userToClusterScoringFn: UserToInterestedInClusterScores => Double = - _.logFavScore.getOrElse(0.0) - override val embeddingType: EmbeddingType = EmbeddingType.AggregatableLogFavBasedProducer -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableProducerEmbeddings.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableProducerEmbeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..b666166607251fbaecc168362b9161860550b04a GIT binary patch literal 38555 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 Double - val userToClusterScoringFn: UserToInterestedInClusterScores => Double - val modelVersion: ModelVersion - - // Minimum engagement threshold - val minNumFavers: Int = ProducerEmbeddingsFromInterestedIn.minNumFaversForProducer - - override def numClustersPerNoun: Int = 60 - - override def numNounsPerClusters: Int = 500 // this is not used for now - - override def thresholdForEmbeddingScores: Double = 0.01 - - override def prepareNounToUserMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseMatrix[ProducerId, UserId, Double] = { - - SparseMatrix( - ProducerEmbeddingsFromInterestedIn - .getFilteredUserUserNormalizedGraph( - DataSources.userUserNormalizedGraphSource, - DataSources.userNormsAndCounts, - userToProducerScoringFn, - _.faverCount.exists( - _ > minNumFavers - ) - ) - .map { - case (userId, (producerId, score)) => - (producerId, userId, score) - }) - } - - override def prepareUserToClusterMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseRowMatrix[UserId, ClusterId, Double] = { - SparseRowMatrix( - ProducerEmbeddingsFromInterestedIn - .getUserSimClustersMatrix( - InterestedInSources - .simClustersInterestedInSource(modelVersion, dateRange.embiggen(Days(5)), timeZone), - userToClusterScoringFn, - modelVersion - ) - .mapValues(_.toMap), - isSkinnyMatrix = true - ) - } - - // in order to make the embeddings aggregatable, we need to revert the normalization - // (multiply the norms) we did when computing embeddings in the base job. - def convertEmbeddingToAggregatableEmbeddings( - embeddings: TypedPipe[(ProducerId, Seq[(ClusterId, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[(ProducerId, Seq[(ClusterId, Double)])] = { - embeddings.join(prepareNounToUserMatrix.rowL2Norms).map { - case (producerId, (embeddingVec, norm)) => - producerId -> embeddingVec.map { - case (id, score) => (id, score * norm) - } - } - } - - override final def writeClusterToNounsIndex( - output: TypedPipe[(ClusterId, Seq[(ProducerId, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { Execution.unit } // we do not need this for now - - /** - * Override this method to write the manhattan dataset. - */ - def writeToManhattan( - output: TypedPipe[KeyVal[SimClustersEmbeddingId, SimClustersEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] - - /** - * Override this method to writethrough the thrift dataset. - */ - def writeToThrift( - output: TypedPipe[SimClustersEmbeddingWithId] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] - - val embeddingType: EmbeddingType - - override final def writeNounToClustersIndex( - output: TypedPipe[(ProducerId, Seq[(ClusterId, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val convertedEmbeddings = convertEmbeddingToAggregatableEmbeddings(output) - .map { - case (producerId, topSimClustersWithScore) => - val id = SimClustersEmbeddingId( - embeddingType = embeddingType, - modelVersion = modelVersion, - internalId = InternalId.UserId(producerId)) - - val embeddings = SimClustersEmbedding(topSimClustersWithScore.map { - case (clusterId, score) => SimClusterWithScore(clusterId, score) - }) - - SimClustersEmbeddingWithId(id, embeddings) - } - - val keyValuePairs = convertedEmbeddings.map { simClustersEmbeddingWithId => - KeyVal(simClustersEmbeddingWithId.embeddingId, simClustersEmbeddingWithId.embedding) - } - val manhattanExecution = writeToManhattan(keyValuePairs) - - val thriftExecution = writeToThrift(convertedEmbeddings) - - Execution.zip(manhattanExecution, thriftExecution).unit - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/BUILD.bazel deleted file mode 100644 index d6ff0d162..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/BUILD.bazel +++ /dev/null @@ -1,223 +0,0 @@ -scala_library( - sources = [ - "*.scala", - ], - platform = "java8", - tags = [ - "bazel-compatible", - "bazel-only", - ], - dependencies = [ - "escherbird/src/scala/com/twitter/escherbird/scalding/source", - "src/scala/com/twitter/onboarding/relevance/source:utt_account_recommendations-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:aggregatable_producer_simclusters_embeddings_by_fav_score-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:aggregatable_producer_simclusters_embeddings_by_log_fav_score-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/scalding/common/matrix", - "src/scala/com/twitter/simclusters_v2/scalding/embedding", - "src/scala/com/twitter/wtf/entity_real_graph/common", - "src/scala/com/twitter/wtf/entity_real_graph/scalding/common", - "src/scala/com/twitter/wtf/scalding/jobs/common:execution_app", - "src/scala/com/twitter/wtf/scalding/jobs/common:sources", - "src/scala/com/twitter/wtf/scalding/jobs/common:stats_util", - "src/thrift/com/twitter/hermit/candidate:hermit-candidate-scala", - "src/thrift/com/twitter/onboarding/relevance/candidates:candidates-scala", - "src/thrift/com/twitter/recos/entities:entities-thrift-scala", - "src/thrift/com/twitter/wtf/entity_real_graph:entity_real_graph-thrift-scala", - "usersource/snapshot/src/main/scala/com/twitter/usersource/snapshot/flat:usersource_flat-scala", - "usersource/snapshot/src/main/thrift/com/twitter/usersource/snapshot/flat:flat-scala", - ], -) - -hadoop_binary( - name = "aggregatable_logfav_based_producer_embeddings_job-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableLogFavBasedProducerEmbeddingsAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_logfav_based_producer_embeddings_job_2020-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableLogFavBasedProducerEmbeddings2020AdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_follow_based_producer_embeddings_job_2020-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFollowBasedProducerEmbeddings2020AdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_logfav_based_producer_embeddings_job", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableLogFavBasedProducerEmbeddingsScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_logfav_based_producer_embeddings_job_2020", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableLogFavBasedProducerEmbeddings2020ScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_follow_based_producer_embeddings_job_2020", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFollowBasedProducerEmbeddings2020ScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_logfav_based_producer_embeddings_job_relaxed_fav_engagement_threshold_2020", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableLogFavBasedProducerEmbeddingsRelaxedFavEngagementThreshold2020ScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_fav_based_producer_embeddings_job-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFavBasedProducerEmbeddingsAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_fav_based_producer_embeddings_job", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFavBasedProducerEmbeddingsScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_fav_based_producer_embeddings_job_2020-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFavBasedProducerEmbeddings2020AdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -hadoop_binary( - name = "aggregatable_fav_based_producer_embeddings_job_2020", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFavBasedProducerEmbeddings2020ScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -# Generated with `capesospy-v2 create_target aggregatable_producer_embeddings_by_logfav_score src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml`, config hash f8229a. -scalding_job( - name = "aggregatable_producer_embeddings_by_logfav_score", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableLogFavBasedProducerEmbeddingsScheduledApp", - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.queue", "cassowary.default"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - cron = "17 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) - -# Generated with `capesospy-v2 create_target aggregatable_producer_embeddings_by_fav_score src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml`, config hash bc0103. -scalding_job( - name = "aggregatable_producer_embeddings_by_fav_score", - main = "com.twitter.simclusters_v2.scalding.embedding.producer.AggregatableFavBasedProducerEmbeddingsScheduledApp", - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.queue", "cassowary.default"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - cron = "17 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":producer"], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..1a9de19d9651046ad600dc6596fabb8d2b2a1884 GIT binary patch literal 37738 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 UH!Cm)fpV1~Ln1JHJn94S07%4kHUIzs literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/EngagementWeightedTfgBasedTopicEmbeddingsJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/EngagementWeightedTfgBasedTopicEmbeddingsJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..59ec2ff0f5e658f7a327e62b567b768054dc9708 GIT binary patch literal 40531 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 z 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 -v }.take(keysToKeep).toMap - } - - case class UserTopicEngagement( - userId: Long, - topicId: Long, - language: String, - country: String, //field is not used - favCount: Double) { - val userLanguageGroup: (Long, String) = (userId, language) - } - - def prepareUserToTopicEmbedding( - favTfgTopicEmbeddings: TypedPipe[(Long, String, SimClustersEmbedding)], - userTopicEngagementCount: TypedPipe[UserTopicEngagement] - )( - implicit uniqueID: UniqueID - ): TypedPipe[((Long, String), Map[Int, Double])] = { - val userTfgEmbeddingsStat = Stat("User Tfg Embeddings Count") - val userTopicTopKEngagementStat = Stat("User Topic Top K engagement count") - val userEngagementStat = Stat("User engagement count") - val tfgEmbeddingsStat = Stat("TFG Embedding Map count") - - //get only top K topics - val userTopKTopicEngagementCount: TypedPipe[UserTopicEngagement] = userTopicEngagementCount - .groupBy(_.userLanguageGroup) - .withReducers(499) - .withDescription("select topK topics") - .sortedReverseTake(topKTopicsToKeep)(Ordering.by(_.favCount)) - .values - .flatten - - //(userId, language), totalCount - val userLanguageEngagementCount: UnsortedGrouped[(Long, String), Double] = - userTopKTopicEngagementCount - .collect { - case UserTopicEngagement(userId, topicId, language, country, favCount) => - userTopicTopKEngagementStat.inc() - ((userId, language), favCount) - }.sumByKey - .withReducers(499) - .withDescription("fav count by user") - - //(topicId, language), (userId, favWeight) - val topicUserWithNormalizedWeights: TypedPipe[((Long, String), (Long, Double))] = - userTopKTopicEngagementCount - .groupBy(_.userLanguageGroup) - .join(userLanguageEngagementCount) - .withReducers(499) - .withDescription("join userTopic and user EngagementCount") - .collect { - case ((userId, language), (engagementData, totalCount)) => - userEngagementStat.inc() - ( - (engagementData.topicId, engagementData.language), - (userId, engagementData.favCount / totalCount) - ) - } - - // (topicId, language), embeddingMap - val tfgEmbeddingsMap: TypedPipe[((Long, String), Map[Int, Double])] = favTfgTopicEmbeddings - .map { - case (topicId, language, embedding) => - tfgEmbeddingsStat.inc() - ((topicId, language), embedding.embedding.map(a => a.clusterId -> a.score).toMap) - } - .withDescription("covert sim cluster embedding to map") - - // (userId, language), clusters - val newUserTfgEmbedding = topicUserWithNormalizedWeights - .join(tfgEmbeddingsMap) - .withReducers(799) - .withDescription("join user | topic | favWeight * embedding") - .collect { - case ((topicId, language), ((userId, favWeight), embeddingMap)) => - userTfgEmbeddingsStat.inc() - ((userId, language), embeddingMap.mapValues(_ * favWeight)) - } - .sumByKey - .withReducers(799) - .withDescription("aggregate embedding by user") - - newUserTfgEmbedding.toTypedPipe - } - - def writeOutput( - newUserTfgEmbedding: TypedPipe[((Long, String), Map[Int, Double])], - outputPath: String, - parquetOutputPath: String, - modelVersion: String - )( - implicit uniqueID: UniqueID, - dateRange: DateRange - ): Execution[Unit] = { - val outputRecordStat = Stat("output record count") - val output = newUserTfgEmbedding - .map { - //language has been purposely ignored because the entire logic is based on the fact that - //user is mapped to a language. In future if a user is mapped to multiple languages then - //the final output needs to be keyed on (userId, language) - case ((userId, language), embeddingMap) => - outputRecordStat.inc() - val clusterScores = embeddingMap.map { - case (clusterId, score) => - clusterId -> UserToInterestedInClusterScores(favScore = Some(score)) - } - KeyVal(userId, ClustersUserIsInterestedIn(modelVersion, clusterScores)) - } - - val keyValExec = output - .withDescription("write output keyval dataset") - .writeDALVersionedKeyValExecution( - UserTopicWeightedEmbeddingScalaDataset, - D.Suffix(outputPath)) - - val parquetExec = newUserTfgEmbedding - .map { - case ((userId, language), embeddingMap) => - val clusterScores = embeddingMap.map { - case (clusterId, score) => ClustersScore(clusterId, score) - } - UserTopicWeightedEmbedding(userId, clusterScores.toSeq) - } - .withDescription("write output parquet dataset") - .writeDALSnapshotExecution( - parquetDataSource, - D.Daily, - D.Suffix(parquetOutputPath), - D.Parquet, - dateRange.end - ) - Execution.zip(keyValExec, parquetExec).unit - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val end = dateRange.start - val start = end - Days(21) - val featureDateRange = DateRange(start, end - Millisecs(1)) - val outputPath = args.getOrElse("output_path", outputByFav) - val parquetOutputPath = args.getOrElse("parquet_output_path", parquetOutputByFav) - val modelVersion = ModelVersions.Model20M145K2020 - - //define stats counter - val favTfgTopicEmbeddingsStat = Stat("FavTfgTopicEmbeddings") - val userTopicEngagementStat = Stat("UserTopicEngagement") - val userTopicsStat = Stat("UserTopics") - val userLangStat = Stat("UserLanguage") - - //get fav based tfg embeddings - //topic can have different languages and the clusters will be different - //current logic is to filter based on user language - // topicId, lang, embedding - val favTfgTopicEmbeddings: TypedPipe[(Long, String, SimClustersEmbedding)] = DAL - .readMostRecentSnapshot(FavTfgTopicEmbeddings2020ScalaDataset, featureDateRange) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .collect { - case KeyVal( - SimClustersEmbeddingId( - embedType, - modelVersion, - InternalId.LocaleEntityId(LocaleEntityId(entityId, language))), - embedding) => - favTfgTopicEmbeddingsStat.inc() - (entityId, language, embedding) - } - - /* - Ideally, if the timeline aggregate framework provided data with breakdown by language, - it could have been joined with (topic, language) embedding. Since, it is not possible - we fetch the language of the user from other sources. - This returns language for the user so that it could be joined with (topic, language) embedding. - `userSource` returns 1 language per user - `inferredUserConsumedLanguageSource` returns multiple languages with confidence values - */ - val userLangSource = ExternalDataSources.userSource - .map { - case (userId, (country, language)) => - userLangStat.inc() - (userId, (language, country)) - } - - //get userid, topicid, favcount as aggregated dataset - //currently there is no way to get language breakdown from the timeline aggregate framework. - val userTopicEngagementPipe: DataSetPipe = AggregatesV2MostRecentFeatureSource( - rootPath = aggregateFeatureRootPath, - storeName = "user_topic_aggregates", - aggregates = - Set(TimelinesAggregationConfig.userTopicAggregates).flatMap(_.buildTypedAggregateGroups()), - ).read - - val userTopicEngagementCount = userTopicEngagementPipe.records - .flatMap { record => - val sRichDataRecord = SRichDataRecord(record) - val userId: Long = sRichDataRecord.getFeatureValue(SharedFeatures.USER_ID) - val topicId: Long = sRichDataRecord.getFeatureValue(TimelinesSharedFeatures.TOPIC_ID) - val favCount: Double = sRichDataRecord - .getFeatureValueOpt(favContinuousFeature).map(_.toDouble).getOrElse(0.0) - userTopicEngagementStat.inc() - if (favCount > 0) { - List((userId, (topicId, favCount))) - } else None - }.join(userLangSource) - .collect { - case (userId, ((topicId, favCount), (language, country))) => - userTopicsStat.inc() - UserTopicEngagement(userId, topicId, language, country, favCount) - } - .withDescription("User Topic aggregated favcount") - - // combine user, topics, topic_embeddings - // and take weighted aggregate of the tfg embedding - val newUserTfgEmbedding = - prepareUserToTopicEmbedding(favTfgTopicEmbeddings, userTopicEngagementCount) - - writeOutput(newUserTfgEmbedding, outputPath, parquetOutputPath, modelVersion) - - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavInferredLanguageTfgBasedTopicEmbeddings.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavInferredLanguageTfgBasedTopicEmbeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..0d13e1e01e2923d5f63b4431b3e2a350b5c259cc GIT binary patch literal 37692 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavInferredLanguageTfgBasedTopicEmbeddings.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavInferredLanguageTfgBasedTopicEmbeddings.scala deleted file mode 100644 index 14604af6a..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavInferredLanguageTfgBasedTopicEmbeddings.scala +++ /dev/null @@ -1,66 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.tfg - -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.hdfs_sources.EntityEmbeddingsSources -import com.twitter.simclusters_v2.thriftscala.{ - EmbeddingType, - ModelVersion, - SimClustersEmbeddingId, - UserToInterestedInClusterScores, - SimClustersEmbedding => ThriftSimClustersEmbedding -} -import com.twitter.wtf.scalding.jobs.common.{AdhocExecutionApp, ScheduledExecutionApp} - -/** - * Apps to generate fav-based Topic-Follow-Graph (TFG) topic embeddings from inferred languages - * The fav-based embeddings are built from topic followers' fav-based InterestedIn - */ - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_inferred_lang_tfg_topic_embeddings-adhoc - scalding remote run \ - --user cassowary \ - --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - --principal service_acoount@TWITTER.BIZ \ - --cluster bluebird-qus1 \ - --main-class com.twitter.simclusters_v2.scalding.embedding.tfg.FavInferredLanguageTfgBasedTopicEmbeddingsAdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_inferred_lang_tfg_topic_embeddings-adhoc \ - --hadoop-properties "scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=4000" \ - -- --date 2020-06-28 - */ -object FavInferredLanguageTfgBasedTopicEmbeddingsAdhocApp - extends InferredLanguageTfgBasedTopicEmbeddingsBaseApp - with AdhocExecutionApp { - override val isAdhoc: Boolean = true - override val embeddingType: EmbeddingType = EmbeddingType.FavInferredLanguageTfgTopic - override val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.FavInferredLanguageTfgTopicEmbeddingsDataset - override val pathSuffix: String = "fav_inferred_lang_tfg_topic_embeddings" - override val modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - override def scoreExtractor: UserToInterestedInClusterScores => Double = scores => - scores.favScore.getOrElse(0.0) -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_inferred_lang_tfg_topic_embeddings -capesospy-v2 update --build_locally --start_cron fav_inferred_lang_tfg_topic_embeddings src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object FavInferredLanguageTfgBasedTopicEmbeddingsScheduledApp - extends InferredLanguageTfgBasedTopicEmbeddingsBaseApp - with ScheduledExecutionApp { - override val isAdhoc: Boolean = false - override val embeddingType: EmbeddingType = EmbeddingType.FavInferredLanguageTfgTopic - override val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.FavInferredLanguageTfgTopicEmbeddingsDataset - override val pathSuffix: String = "fav_inferred_lang_tfg_topic_embeddings" - override val modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - override def scoreExtractor: UserToInterestedInClusterScores => Double = scores => - scores.favScore.getOrElse(0.0) - - override val firstTime: RichDate = RichDate("2020-07-04") - override val batchIncrement: Duration = Days(1) -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavTfgBasedTopicEmbeddings.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/FavTfgBasedTopicEmbeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..eaacc2c1f321ada209f37bea2a5689be75bc8321 GIT binary patch literal 38533 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 eRMKxlY-4n2Zo&hMpl_pUGsFoP9`Mv}NB;-&C ThriftSimClustersEmbedding} -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * Jobs to generate Fav-based Topic-Follow-Graph (TFG) topic embeddings - * A topic's fav-based TFG embedding is the sum of its followers' fav-based InterestedIn - */ - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_tfg_topic_embeddings-adhoc - scalding remote run \ - --user cassowary \ - --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - --principal service_acoount@TWITTER.BIZ \ - --cluster bluebird-qus1 \ - --main-class com.twitter.simclusters_v2.scalding.embedding.tfg.FavTfgTopicEmbeddingsAdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_tfg_topic_embeddings-adhoc \ - --hadoop-properties "scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=4000" \ - -- --date 2020-12-08 - */ -object FavTfgTopicEmbeddingsAdhocApp extends TfgBasedTopicEmbeddingsBaseApp with AdhocExecutionApp { - override val isAdhoc: Boolean = true - override val embeddingType: EmbeddingType = EmbeddingType.FavTfgTopic - override val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.FavTfgTopicEmbeddingsDataset - override val pathSuffix: String = "fav_tfg_topic_embedding" - override val modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - override val parquetDataSource: SnapshotDALDatasetBase[TfgTopicEmbeddings] = - EntityEmbeddingsSources.FavTfgTopicEmbeddingsParquetDataset - override def scoreExtractor: UserToInterestedInClusterScores => Double = scores => - scores.favScore.getOrElse(0.0) -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_tfg_topic_embeddings -capesospy-v2 update --build_locally --start_cron fav_tfg_topic_embeddings src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object FavTfgTopicEmbeddingsScheduledApp - extends TfgBasedTopicEmbeddingsBaseApp - with ScheduledExecutionApp { - override val isAdhoc: Boolean = false - override val embeddingType: EmbeddingType = EmbeddingType.FavTfgTopic - override val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.FavTfgTopicEmbeddingsDataset - override val pathSuffix: String = "fav_tfg_topic_embedding" - override val modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - override val parquetDataSource: SnapshotDALDatasetBase[TfgTopicEmbeddings] = - EntityEmbeddingsSources.FavTfgTopicEmbeddingsParquetDataset - override def scoreExtractor: UserToInterestedInClusterScores => Double = scores => - scores.favScore.getOrElse(0.0) - - override val firstTime: RichDate = RichDate("2020-05-25") - override val batchIncrement: Duration = Days(1) -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_tfg_topic_embeddings_2020-adhoc - scalding remote run \ - --user cassowary \ - --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - --principal service_acoount@TWITTER.BIZ \ - --cluster bluebird-qus1 \ - --main-class com.twitter.simclusters_v2.scalding.embedding.tfg.FavTfgTopicEmbeddings2020AdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_tfg_topic_embeddings_2020-adhoc \ - --hadoop-properties "scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=4000" \ - -- --date 2020-12-08 - */ -object FavTfgTopicEmbeddings2020AdhocApp - extends TfgBasedTopicEmbeddingsBaseApp - with AdhocExecutionApp { - override val isAdhoc: Boolean = true - override val embeddingType: EmbeddingType = EmbeddingType.FavTfgTopic - override val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.FavTfgTopicEmbeddings2020Dataset - override val pathSuffix: String = "fav_tfg_topic_embedding" - override val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - override val parquetDataSource: SnapshotDALDatasetBase[TfgTopicEmbeddings] = - EntityEmbeddingsSources.FavTfgTopicEmbeddings2020ParquetDataset - override def scoreExtractor: UserToInterestedInClusterScores => Double = scores => - scores.favScore.getOrElse(0.0) -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_tfg_topic_embeddings_2020 -capesospy-v2 update --build_locally --start_cron fav_tfg_topic_embeddings_2020 src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object FavTfgTopicEmbeddings2020ScheduledApp - extends TfgBasedTopicEmbeddingsBaseApp - with ScheduledExecutionApp { - override val isAdhoc: Boolean = false - override val embeddingType: EmbeddingType = EmbeddingType.FavTfgTopic - override val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.FavTfgTopicEmbeddings2020Dataset - override val pathSuffix: String = "fav_tfg_topic_embedding" - override val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - override val parquetDataSource: SnapshotDALDatasetBase[TfgTopicEmbeddings] = - EntityEmbeddingsSources.FavTfgTopicEmbeddings2020ParquetDataset - override def scoreExtractor: UserToInterestedInClusterScores => Double = scores => - scores.favScore.getOrElse(0.0) - - override val firstTime: RichDate = RichDate("2021-03-10") - override val batchIncrement: Duration = Days(1) -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_tfg_topic_embeddings_2020_copy -scalding scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:fav_tfg_topic_embeddings_2020_copy - */ - -/** - * This is a copy job where we copy the previous version of TFG and write to a new one. - * The dependent dataset for TFG has been deleted. - * Instead of restarting the entire job, we create this temp hacky solution to keep TFG dataset alive until we deprecate topics. - * Having a table TFG doesn't lead to a big quality concern b/c TFG is built from topic follows, which is relative stable - * and we don't have new topics anymore. - */ -object FavTfgTopicEmbeddings2020CopyScheduledApp extends ScheduledExecutionApp { - val isAdhoc: Boolean = false - val embeddingType: EmbeddingType = EmbeddingType.FavTfgTopic - val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.FavTfgTopicEmbeddings2020Dataset - val pathSuffix: String = "fav_tfg_topic_embedding" - val modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - - override val firstTime: RichDate = RichDate("2023-01-20") - override val batchIncrement: Duration = Days(3) - - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - DAL - .readMostRecentSnapshotNoOlderThan( - EntityEmbeddingsSources.FavTfgTopicEmbeddings2020Dataset, - Days(21)) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .writeDALVersionedKeyValExecution( - EntityEmbeddingsSources.FavTfgTopicEmbeddings2020Dataset, - D.Suffix( - EmbeddingUtil - .getHdfsPath(isAdhoc = isAdhoc, isManhattanKeyVal = true, modelVersion, pathSuffix)) - ) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/InferredLanguageTfgBasedTopicEmbeddingsBaseApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/InferredLanguageTfgBasedTopicEmbeddingsBaseApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..588f9ae5cf1b4428fc9d3171f87d7482bcbc2657 GIT binary patch literal 39097 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 CxH}2} literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/InferredLanguageTfgBasedTopicEmbeddingsBaseApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/InferredLanguageTfgBasedTopicEmbeddingsBaseApp.scala deleted file mode 100644 index 2ee09cc8f..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/InferredLanguageTfgBasedTopicEmbeddingsBaseApp.scala +++ /dev/null @@ -1,194 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.tfg - -import com.twitter.bijection.{Bufferable, Injection} -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite.{D, _} -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.{Country, Language, SimClustersEmbedding, TopicId} -import com.twitter.simclusters_v2.hdfs_sources.InterestedInSources -import com.twitter.simclusters_v2.scalding.common.matrix.{SparseMatrix, SparseRowMatrix} -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.{UserId, _} -import com.twitter.simclusters_v2.scalding.embedding.common.{ - EmbeddingUtil, - ExternalDataSources, - SimClustersEmbeddingBaseJob -} -import com.twitter.simclusters_v2.thriftscala.{ - EmbeddingType, - InternalId, - ModelVersion, - SimClustersEmbeddingId, - UserToInterestedInClusterScores, - SimClustersEmbedding => ThriftSimClustersEmbedding, - TopicId => ThriftTopicId -} -import com.twitter.wtf.scalding.jobs.common.DateRangeExecutionApp -import java.util.TimeZone - -/** - * Base app to generate Topic-Follow-Graph (TFG) topic embeddings from inferred languages. - * In this app, topic embeddings are keyed by (topic, language, country). - * Given a (topic t, country c, language l) tuple, the embedding is the sum of the - * InterestedIn of the topic followers whose inferred language has l and account country is c - * The language and the country fields in the keys are optional. - * The app will generate 1) country-language-based 2) language-based 3) global embeddings in one dataset. - * It's up to the clients to decide which embeddings to use - */ -trait InferredLanguageTfgBasedTopicEmbeddingsBaseApp - extends SimClustersEmbeddingBaseJob[(TopicId, Option[Language], Option[Country])] - with DateRangeExecutionApp { - - val isAdhoc: Boolean - val embeddingType: EmbeddingType - val embeddingSource: KeyValDALDataset[KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding]] - val pathSuffix: String - val modelVersion: ModelVersion - def scoreExtractor: UserToInterestedInClusterScores => Double - - override def numClustersPerNoun: Int = 50 - override def numNounsPerClusters: Int = 1 // not used for now. Set to an arbitrary number - override def thresholdForEmbeddingScores: Double = 0.001 - - implicit val inj: Injection[(TopicId, Option[Language], Option[Country]), Array[Byte]] = - Bufferable.injectionOf[(TopicId, Option[Language], Option[Country])] - - // Default to 10K, top 1% for (topic, country, language) follows - // Child classes may want to tune this number for their own use cases. - val minPerCountryFollowers = 10000 - val minFollowers = 100 - - def getTopicUsers( - topicFollowGraph: TypedPipe[(TopicId, UserId)], - userSource: TypedPipe[(UserId, (Country, Language))], - userLanguages: TypedPipe[(UserId, Seq[(Language, Double)])] - ): TypedPipe[((TopicId, Option[Language], Option[Country]), UserId, Double)] = { - topicFollowGraph - .map { case (topic, user) => (user, topic) } - .join(userSource) - .join(userLanguages) - .flatMap { - case (user, ((topic, (country, _)), scoredLangs)) => - scoredLangs.flatMap { - case (lang, score) => - Seq( - ((topic, Some(lang), Some(country)), user, score), // with language and country - ((topic, Some(lang), None), user, score) // with language - ) - } ++ Seq(((topic, None, None), user, 1.0)) // non-language - }.forceToDisk - } - - def getValidTopics( - topicUsers: TypedPipe[((TopicId, Option[Language], Option[Country]), UserId, Double)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(TopicId, Option[Language], Option[Country])] = { - val countryBasedTopics = Stat("country_based_topics") - val nonCountryBasedTopics = Stat("non_country_based_topics") - - val (countryBased, nonCountryBased) = topicUsers.partition { - case ((_, lang, country), _, _) => lang.isDefined && country.isDefined - } - - SparseMatrix(countryBased).rowL1Norms.collect { - case (key, l1Norm) if l1Norm >= minPerCountryFollowers => - countryBasedTopics.inc() - key - } ++ - SparseMatrix(nonCountryBased).rowL1Norms.collect { - case (key, l1Norm) if l1Norm >= minFollowers => - nonCountryBasedTopics.inc() - key - } - } - - override def prepareNounToUserMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseMatrix[(TopicId, Option[Language], Option[Country]), UserId, Double] = { - val topicUsers = getTopicUsers( - ExternalDataSources.topicFollowGraphSource, - ExternalDataSources.userSource, - ExternalDataSources.inferredUserConsumedLanguageSource) - - SparseMatrix[(TopicId, Option[Language], Option[Country]), UserId, Double](topicUsers) - .filterRows(getValidTopics(topicUsers)) - } - - override def prepareUserToClusterMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseRowMatrix[UserId, ClusterId, Double] = - SparseRowMatrix( - InterestedInSources - .simClustersInterestedInSource(modelVersion, dateRange, timeZone) - .map { - case (userId, clustersUserIsInterestedIn) => - userId -> clustersUserIsInterestedIn.clusterIdToScores - .map { - case (clusterId, scores) => - clusterId -> scoreExtractor(scores) - } - .filter(_._2 > 0.0) - .toMap - }, - isSkinnyMatrix = true - ) - - override def writeNounToClustersIndex( - output: TypedPipe[((TopicId, Option[Language], Option[Country]), Seq[(ClusterId, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val topicEmbeddingCount = Stat(s"topic_embedding_count") - - val tsvExec = - output - .map { - case ((entityId, language, country), clustersWithScores) => - (entityId, language, country, clustersWithScores.take(5).mkString(",")) - } - .shard(5) - .writeExecution(TypedTsv[(TopicId, Option[Language], Option[Country], String)]( - s"/user/recos-platform/adhoc/topic_embedding/$pathSuffix/$ModelVersionPathMap($modelVersion)")) - - val keyValExec = output - .map { - case ((entityId, lang, country), clustersWithScores) => - topicEmbeddingCount.inc() - KeyVal( - SimClustersEmbeddingId( - embeddingType, - modelVersion, - InternalId.TopicId(ThriftTopicId(entityId, lang, country)) - ), - SimClustersEmbedding(clustersWithScores).toThrift - ) - } - .writeDALVersionedKeyValExecution( - embeddingSource, - D.Suffix( - EmbeddingUtil - .getHdfsPath(isAdhoc = isAdhoc, isManhattanKeyVal = true, modelVersion, pathSuffix)) - ) - if (isAdhoc) - Execution.zip(tsvExec, keyValExec).unit - else - keyValExec - } - - override def writeClusterToNounsIndex( - output: TypedPipe[(ClusterId, Seq[((TopicId, Option[Language], Option[Country]), Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - Execution.unit // do not need this - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/LogFavTfgBasedTopicEmbeddings.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/LogFavTfgBasedTopicEmbeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..3f145720d89d65464a75b9d9ed8839eed2b60d78 GIT binary patch literal 37728 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/LogFavTfgBasedTopicEmbeddings.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/LogFavTfgBasedTopicEmbeddings.scala deleted file mode 100644 index 1869b5c64..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/LogFavTfgBasedTopicEmbeddings.scala +++ /dev/null @@ -1,70 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.tfg - -import com.twitter.dal.client.dataset.{KeyValDALDataset, SnapshotDALDatasetBase} -import com.twitter.scalding._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.hdfs_sources.EntityEmbeddingsSources -import com.twitter.simclusters_v2.thriftscala.{ - EmbeddingType, - ModelVersion, - SimClustersEmbeddingId, - TfgTopicEmbeddings, - UserToInterestedInClusterScores, - SimClustersEmbedding => ThriftSimClustersEmbedding -} -import com.twitter.wtf.scalding.jobs.common.{AdhocExecutionApp, ScheduledExecutionApp} - -/** - * Jobs to generate Logfav-based Topic-Follow-Graph (TFG) topic embeddings - * A topic's logfav-based TFG embedding is the sum of its followers' logfav-based InterestedIn - */ - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:logfav_tfg_topic_embeddings-adhoc - scalding remote run \ - --user cassowary \ - --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - --principal service_acoount@TWITTER.BIZ \ - --cluster bluebird-qus1 \ - --main-class com.twitter.simclusters_v2.scalding.embedding.tfg.LogFavTfgTopicEmbeddingsAdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:logfav_tfg_topic_embeddings-adhoc \ - --hadoop-properties "scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=4000" \ - -- --date 2020-12-08 - */ -object LogFavTfgTopicEmbeddingsAdhocApp - extends TfgBasedTopicEmbeddingsBaseApp - with AdhocExecutionApp { - override val isAdhoc: Boolean = true - override val embeddingType: EmbeddingType = EmbeddingType.LogFavTfgTopic - override val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.LogFavTfgTopicEmbeddingsDataset - override val pathSuffix: String = "logfav_tfg_topic_embedding" - override val modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - override val parquetDataSource: SnapshotDALDatasetBase[TfgTopicEmbeddings] = - EntityEmbeddingsSources.LogFavTfgTopicEmbeddingsParquetDataset - override def scoreExtractor: UserToInterestedInClusterScores => Double = scores => - scores.logFavScore.getOrElse(0.0) -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg:logfav_tfg_topic_embeddings -capesospy-v2 update --build_locally --start_cron logfav_tfg_topic_embeddings src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object LogFavTfgTopicEmbeddingsScheduledApp - extends TfgBasedTopicEmbeddingsBaseApp - with ScheduledExecutionApp { - override val isAdhoc: Boolean = false - override val embeddingType: EmbeddingType = EmbeddingType.LogFavTfgTopic - override val embeddingSource: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ] = EntityEmbeddingsSources.LogFavTfgTopicEmbeddingsDataset - override val pathSuffix: String = "logfav_tfg_topic_embedding" - override val modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - override def scoreExtractor: UserToInterestedInClusterScores => Double = scores => - scores.logFavScore.getOrElse(0.0) - override val parquetDataSource: SnapshotDALDatasetBase[TfgTopicEmbeddings] = - EntityEmbeddingsSources.LogFavTfgTopicEmbeddingsParquetDataset - override val firstTime: RichDate = RichDate("2020-05-25") - override val batchIncrement: Duration = Days(1) -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/README b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/README deleted file mode 100644 index d08ff73f1..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/README +++ /dev/null @@ -1,7 +0,0 @@ -TFG stands for Topic Follow Graph -The TFG topic embeddings are embeddings built from Topic Follow Graph. -Each topic is represented by the sum of its followers' user InterestedIn embeddings. - -There are two types of embeddings: -logfav - topic embeddings built from followers' logfav-based InterestedIn -fav - topic embeddings built from followers' fav-based InterestedIn diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/README.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/README.docx new file mode 100644 index 0000000000000000000000000000000000000000..c75c068f25c16007d2850da0288f0cb3cc1bc087 GIT binary patch literal 36776 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

$C+6IS#PKXW#`$zL>yEO0EC|#F!o=` z-BEnUWq{6mfUfwDbPffEav=YAhu(tjT!9HV~e#wh`mM)we)8vQfiSGJduMd=+6 zS&A_~vyM7RN(!abI;7~uexH>i#*0!<84n)nmlJ+kVn?Gx16?{`1$|pp>>wLpc@R>+ GefvMkCVy7| literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/TfgBasedTopicEmbeddingsBaseApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/TfgBasedTopicEmbeddingsBaseApp.scala deleted file mode 100644 index 2725bafb5..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/tfg/TfgBasedTopicEmbeddingsBaseApp.scala +++ /dev/null @@ -1,191 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.tfg - -import com.twitter.bijection.{Bufferable, Injection} -import com.twitter.dal.client.dataset.{KeyValDALDataset, SnapshotDALDatasetBase} -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite.{D, _} -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.{Language, SimClustersEmbedding, TopicId} -import com.twitter.simclusters_v2.hdfs_sources.InterestedInSources -import com.twitter.simclusters_v2.scalding.common.matrix.{SparseMatrix, SparseRowMatrix} -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.{UserId, _} -import com.twitter.simclusters_v2.scalding.embedding.common.{ - EmbeddingUtil, - ExternalDataSources, - SimClustersEmbeddingBaseJob -} -import com.twitter.simclusters_v2.thriftscala.{ - ClustersScore, - EmbeddingType, - TfgTopicEmbeddings, - InternalId, - LocaleEntityId, - ModelVersion, - SimClustersEmbeddingId, - UserToInterestedInClusterScores, - SimClustersEmbedding => ThriftSimClustersEmbedding, - TopicId => TID -} -import com.twitter.wtf.scalding.jobs.common.DateRangeExecutionApp - -import java.util.TimeZone - -/** - * Base app for the Topic-Follow-Graph (TFG) topic embeddings - * A topic's TFG embedding is represented by the sum of all the users who followed the topic - */ -trait TfgBasedTopicEmbeddingsBaseApp - extends SimClustersEmbeddingBaseJob[(TopicId, Language)] - with DateRangeExecutionApp { - - val isAdhoc: Boolean - val embeddingType: EmbeddingType - val embeddingSource: KeyValDALDataset[KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding]] - val pathSuffix: String - val modelVersion: ModelVersion - val parquetDataSource: SnapshotDALDatasetBase[TfgTopicEmbeddings] - def scoreExtractor: UserToInterestedInClusterScores => Double - - override def numClustersPerNoun: Int = 50 - override def numNounsPerClusters: Int = 1 // not used for now. Set to an arbitrary number - override def thresholdForEmbeddingScores: Double = 0.001 - - val minNumFollowers = 100 - - override def prepareNounToUserMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseMatrix[(TopicId, Language), UserId, Double] = { - implicit val inj: Injection[(TopicId, Language), Array[Byte]] = - Bufferable.injectionOf[(TopicId, Language)] - - val topicLangUsers = ExternalDataSources.topicFollowGraphSource - .map { case (topic, user) => (user, topic) } - .join(ExternalDataSources.userSource) - .map { - case (user, (topic, (_, language))) => - ((topic, language), user, 1.0) - } - .forceToDisk - - val validTopicLang = - SparseMatrix(topicLangUsers).rowNnz.filter { - case (_, nzCount) => nzCount >= minNumFollowers - }.keys - - SparseMatrix[(TopicId, Language), UserId, Double](topicLangUsers).filterRows(validTopicLang) - } - - override def prepareUserToClusterMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseRowMatrix[UserId, ClusterId, Double] = - SparseRowMatrix( - InterestedInSources - .simClustersInterestedInSource(modelVersion, dateRange, timeZone) - .map { - case (userId, clustersUserIsInterestedIn) => - userId -> clustersUserIsInterestedIn.clusterIdToScores - .map { - case (clusterId, scores) => - clusterId -> scoreExtractor(scores) - } - .filter(_._2 > 0.0) - .toMap - }, - isSkinnyMatrix = true - ) - - override def writeNounToClustersIndex( - output: TypedPipe[((TopicId, Language), Seq[(ClusterId, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val topicEmbeddingCount = Stat(s"topic_embedding_count") - val user = System.getenv("USER") - val parquetExec = output - .map { - case ((entityId, language), clustersWithScores) => - TfgTopicEmbeddings( - TID( - entityId = entityId, - language = Some(language), - ), - clusterScore = clustersWithScores.map { - case (clusterId, score) => ClustersScore(clusterId, score) - } - ) - } - .writeDALSnapshotExecution( - parquetDataSource, - D.Daily, - D.Suffix( - EmbeddingUtil.getHdfsPath( - isAdhoc = isAdhoc, - isManhattanKeyVal = false, - modelVersion, - pathSuffix + "/snapshot")), - D.Parquet, - dateRange.end - ) - - val tsvExec = - output - .map { - case ((entityId, language), clustersWithScores) => - (entityId, language, clustersWithScores.mkString(";")) - } - .shard(10) - .writeExecution(TypedTsv[(TopicId, Language, String)]( - s"/user/$user/adhoc/topic_embedding/$pathSuffix/$ModelVersionPathMap($modelVersion)")) - - val keyValExec = output - .flatMap { - case ((entityId, lang), clustersWithScores) => - topicEmbeddingCount.inc() - val embedding = SimClustersEmbedding(clustersWithScores).toThrift - Seq( - KeyVal( - SimClustersEmbeddingId( - embeddingType, - modelVersion, - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang)) - ), - embedding - ), - KeyVal( - SimClustersEmbeddingId( - embeddingType, - modelVersion, - InternalId.TopicId(TID(entityId, Some(lang), country = None)) - ), - embedding - ), - ) - } - .writeDALVersionedKeyValExecution( - embeddingSource, - D.Suffix( - EmbeddingUtil - .getHdfsPath(isAdhoc = isAdhoc, isManhattanKeyVal = true, modelVersion, pathSuffix)) - ) - if (isAdhoc) - Execution.zip(tsvExec, keyValExec, parquetExec).unit - else - Execution.zip(keyValExec, parquetExec).unit - } - - override def writeClusterToNounsIndex( - output: TypedPipe[(ClusterId, Seq[((TopicId, Language), Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - Execution.unit // do not need this - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/BUILD.bazel deleted file mode 100644 index 86124f1ff..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/BUILD.bazel +++ /dev/null @@ -1,166 +0,0 @@ -scala_library( - sources = [ - "*.scala", - "common/*.scala", - ], - compiler_option_sets = ["fatal_warnings"], - platform = "java8", - tags = [ - "bazel-compatible", - "bazel-only", - ], - dependencies = [ - "src/scala/com/twitter/simclusters_v2/common/clustering", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:aggregatable_producer_simclusters_embeddings_by_log_fav_score-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:clusters_members_connected_components_ape_similarity-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:clusters_members_largest_dim_ape_similarity-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:clusters_members_largest_dim_ape_similarity_2_day_update-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:clusters_members_louvain_ape_similarity-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:interested_in_twice_by_largest_dim-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:interested_in_twice_by_largest_dim_2_day_update-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:interested_in_twice_by_largest_dim_fav_score-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:interested_in_twice_connected_components-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:interested_in_twice_louvain-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:user_user_normalized_graph-scala", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/scalding/embedding", - "src/scala/com/twitter/wtf/scalding/jobs/common:execution_app", - "src/scala/com/twitter/wtf/scalding/jobs/common:sources", - "src/scala/com/twitter/wtf/scalding/jobs/common:stats_util", - ], -) - -# ======================== -# ADHOC JOB CONFIGURATIONS -# Note: Please change mapreduce.job.reduces and --num-reducers together. -# ======================== -scalding_job( - name = "interested_in_twice_largest_dim-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.twice.InterestedInTwiceLargestDimAdhocApp", - args = [ - "--date 2021-08-31", - "--num-reducers 4000", - ], - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - hadoop_cluster = "qus1-bluebird", - hadoop_properties = [ - ("mapreduce.job.reduce.slowstart.completedmaps", "1.0"), - ("scalding.with.reducers.set.explicitly", "true"), - ("mapreduce.job.reduces", "4000"), - ("mapreduce.task.timeout", "0"), - ], - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":twice"], -) - -scalding_job( - name = "interested_in_twice_largest_dim_fav_score-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.twice.InterestedInTwiceLargestDimMaxFavScoreAdhocApp", - args = [ - "--date 2022-07-01", - "--num-reducers 4000", - ], - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - hadoop_cluster = "qus1-bluebird", - hadoop_properties = [ - ("mapreduce.job.reduce.slowstart.completedmaps", "1.0"), - ("scalding.with.reducers.set.explicitly", "true"), - ("mapreduce.job.reduces", "4000"), - ("mapreduce.task.timeout", "0"), - ], - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":twice"], -) - -scalding_job( - name = "interested_in_twice_louvain-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.twice.InterestedInTwiceLouvainAdhocApp", - args = [ - "--date 2021-08-31", - "--num-reducers 4000", - "--cosine_similarity_threshold 0.5", - ], - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - hadoop_cluster = "qus1-bluebird", - hadoop_properties = [ - ("mapreduce.job.reduce.slowstart.completedmaps", "1.0"), - ("scalding.with.reducers.set.explicitly", "true"), - ("mapreduce.job.reduces", "4000"), - ("mapreduce.task.timeout", "0"), - ], - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":twice"], -) - -scalding_job( - name = "interested_in_twice_connected_components-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.twice.InterestedInTwiceConnectedComponentsAdhocApp", - args = [ - "--date 2021-08-31", - "--num-reducers 4000", - "--cosine_similarity_threshold 0.5", - ], - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - hadoop_cluster = "qus1-bluebird", - hadoop_properties = [ - ("mapreduce.job.reduce.slowstart.completedmaps", "1.0"), - ("scalding.with.reducers.set.explicitly", "true"), - ("mapreduce.job.reduces", "4000"), - ("mapreduce.task.timeout", "0"), - ], - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":twice"], -) - -# ============================ -# SCHEDULED JOB CONFIGURATIONS -# Twice jobs have been descheduled -# ============================ diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..9ab63490de55483bd961f850f1fa2cc8fe3132a8 GIT binary patch literal 37713 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 See workflow here: https://workflows.twitter.biz/workflow/cassowary/interested_in_twice-batch - - (Use `scalding workflow upload --help` for a breakdown of the different flags) - */*/ - -object InterestedInTwiceLargestDimScheduledApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with ScheduledExecutionApp { - - override def firstTime: RichDate = RichDate("2021-09-02") - override def batchIncrement: Duration = Days(7) - - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersMatchingLargestDimension - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runScheduledApp( - new LargestDimensionClusteringMethod(), - new MedoidRepresentativeSelectionMethod[SimClustersEmbedding]( - producerProducerSimilarityFnForClusterRepresentative), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_by_largest_dim", - "clusters_members_largest_dim_ape_similarity", - InterestedInTwiceByLargestDimScalaDataset, - ClustersMembersLargestDimApeSimilarityScalaDataset, - args.getOrElse("num-reducers", "4000").toInt - ) - - } - -} - -object InterestedInTwiceLargestDimMaxFavScoreScheduledApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with ScheduledExecutionApp { - - override def firstTime: RichDate = RichDate("2022-06-30") - override def batchIncrement: Duration = Days(7) - - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersMatchingLargestDimension - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runScheduledApp( - new LargestDimensionClusteringMethod(), - new MaxFavScoreRepresentativeSelectionMethod[SimClustersEmbedding](), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_by_largest_dim_fav_score", - "clusters_members_largest_dim_ape_similarity", - InterestedInTwiceByLargestDimFavScoreScalaDataset, - ClustersMembersLargestDimApeSimilarityScalaDataset, - args.getOrElse("num-reducers", "4000").toInt - ) - - } - -} - -object InterestedInTwiceLouvainScheduledApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with ScheduledExecutionApp { - - override def firstTime: RichDate = RichDate("2021-09-02") - override def batchIncrement: Duration = Days(7) - - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runScheduledApp( - new LouvainClusteringMethod( - args.required("cosine_similarity_threshold").toDouble, - args.optional("resolution_factor").map(_.toDouble)), - new MedoidRepresentativeSelectionMethod[SimClustersEmbedding]( - producerProducerSimilarityFnForClusterRepresentative), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_louvain", - "clusters_members_louvain_ape_similarity", - InterestedInTwiceLouvainScalaDataset, - ClustersMembersLouvainApeSimilarityScalaDataset, - args.getOrElse("num-reducers", "4000").toInt - ) - - } - -} - -object InterestedInTwiceConnectedComponentsScheduledApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with ScheduledExecutionApp { - - override def firstTime: RichDate = RichDate("2021-09-02") - override def batchIncrement: Duration = Days(7) - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runScheduledApp( - new ConnectedComponentsClusteringMethod( - args.required("cosine_similarity_threshold").toDouble), - new MedoidRepresentativeSelectionMethod[SimClustersEmbedding]( - producerProducerSimilarityFnForClusterRepresentative), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_connected_components", - "clusters_members_connected_components_ape_similarity", - InterestedInTwiceConnectedComponentsScalaDataset, - ClustersMembersConnectedComponentsApeSimilarityScalaDataset, - args.getOrElse("num-reducers", "4000").toInt - ) - - } - -} - -/** Production Scalding job that calculates TWICE embeddings in a shorter period (every two days). - * - * Given that the input sources of TWICE are updated more frequently (e.g., user_user_graph is - * updated every 2 day), updating TWICE embedding every 2 day will better capture interests of new - * users and the interest shift of existing users. - * - * To build & deploy the scheduled job via workflows: - * {{{ - * scalding workflow upload \ - * --workflow interested_in_twice_2_day_update-batch \ - * --jobs src/scala/com/twitter/simclusters_v2/scalding/embedding/twice:interested_in_twice_largest_dim_2_day_update-batch \ - * --scm-paths "src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/*" \ - * --autoplay - * }}} - * - */*/ -object InterestedInTwiceLargestDim2DayUpdateScheduledApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with ScheduledExecutionApp { - - override def firstTime: RichDate = RichDate("2022-04-06") - override def batchIncrement: Duration = Days(2) - - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersMatchingLargestDimension - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runScheduledApp( - new LargestDimensionClusteringMethod(), - new MedoidRepresentativeSelectionMethod[SimClustersEmbedding]( - producerProducerSimilarityFnForClusterRepresentative), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_by_largest_dim_2_day_update", - "clusters_members_largest_dim_ape_similarity_2_day_update", - InterestedInTwiceByLargestDim2DayUpdateScalaDataset, - ClustersMembersLargestDimApeSimilarity2DayUpdateScalaDataset, - args.getOrElse("num-reducers", "4000").toInt - ) - } -} - -/** - -[Preferred way] To run a locally built adhoc job: - ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding/twice:interested_in_twice_-adhoc - scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/embedding/twice:interested_in_twice_-adhoc - -To build and run a adhoc job with workflows: - scalding workflow upload \ - --workflow interested_in_twice-adhoc \ - --jobs src/scala/com/twitter/simclusters_v2/scalding/embedding/twice:interested_in_twice_largest_dim-adhoc,src/scala/com/twitter/simclusters_v2/scalding/embedding/twice:interested_in_twice_louvain-adhoc,src/scala/com/twitter/simclusters_v2/scalding/embedding/twice:interested_in_twice_connected_components-adhoc \ - --scm-paths "src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/*" \ - --autoplay \ - - */*/ -object InterestedInTwiceLargestDimAdhocApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with AdhocExecutionApp { - - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersMatchingLargestDimension - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runAdhocApp( - new LargestDimensionClusteringMethod(), - new MedoidRepresentativeSelectionMethod[SimClustersEmbedding]( - producerProducerSimilarityFnForClusterRepresentative), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_by_largest_dim", - "clusters_members_largest_dim_ape_similarity", - args.getOrElse("num-reducers", "4000").toInt - ) - - } -} - -object InterestedInTwiceLargestDimMaxFavScoreAdhocApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with AdhocExecutionApp { - - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersMatchingLargestDimension - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runAdhocApp( - new LargestDimensionClusteringMethod(), - new MaxFavScoreRepresentativeSelectionMethod[SimClustersEmbedding](), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_by_largest_dim_fav_score", - "clusters_members_largest_dim_ape_similarity", - args.getOrElse("num-reducers", "4000").toInt - ) - - } -} - -object InterestedInTwiceLouvainAdhocApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with AdhocExecutionApp { - - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runAdhocApp( - new LouvainClusteringMethod( - args.required("cosine_similarity_threshold").toDouble, - args.optional("resolution_factor").map(_.toDouble)), - new MedoidRepresentativeSelectionMethod[SimClustersEmbedding]( - producerProducerSimilarityFnForClusterRepresentative), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_louvain", - "clusters_members_louvain_ape_similarity", - args.getOrElse("num-reducers", "4000").toInt - ) - - } -} - -object InterestedInTwiceConnectedComponentsAdhocApp - extends InterestedInTwiceBaseApp[SimClustersEmbedding] - with AdhocExecutionApp { - - override def producerProducerSimilarityFnForClustering: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - override def producerProducerSimilarityFnForClusterRepresentative: ( - SimClustersEmbedding, - SimClustersEmbedding - ) => Double = - SimilarityFunctions.simClustersCosineSimilarity - - /** - * Top-level method of this application. - */ - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - runAdhocApp( - new ConnectedComponentsClusteringMethod( - args.required("cosine_similarity_threshold").toDouble), - new MedoidRepresentativeSelectionMethod[SimClustersEmbedding]( - producerProducerSimilarityFnForClusterRepresentative), - ProducerEmbeddingSource.getAggregatableProducerEmbeddings, - "interested_in_twice_connected_components", - "clusters_members_connected_components_ape_similarity", - args.getOrElse("num-reducers", "4000").toInt - ) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwiceBaseApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwiceBaseApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..92a7a6b076274bd7643578cae05f58f444ae5c59 GIT binary patch literal 41595 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 O0l)+?JWz6f9sLhG-XtIZ literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwiceBaseApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwiceBaseApp.scala deleted file mode 100644 index 585f23630..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/twice/InterestedInTwiceBaseApp.scala +++ /dev/null @@ -1,495 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.twice - -import com.twitter.bijection.Injection -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding.DateRange -import com.twitter.scalding.Days -import com.twitter.scalding.Execution -import com.twitter.scalding.Stat -import com.twitter.scalding.TypedTsv -import com.twitter.scalding.UniqueID -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossDC -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.SimClustersEmbedding -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.common.clustering.ClusteringMethod -import com.twitter.simclusters_v2.common.clustering.ClusteringStatistics._ -import com.twitter.simclusters_v2.common.clustering.ClusterRepresentativeSelectionMethod -import com.twitter.simclusters_v2.common.clustering.ClusterRepresentativeSelectionStatistics._ -import com.twitter.simclusters_v2.hdfs_sources.ProducerEmbeddingSources -import com.twitter.simclusters_v2.hdfs_sources.UserUserGraphScalaDataset -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil -import com.twitter.simclusters_v2.thriftscala.EmbeddingType -import com.twitter.simclusters_v2.thriftscala.InternalId -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.simclusters_v2.thriftscala.MultiEmbeddingType -import com.twitter.simclusters_v2.thriftscala.NeighborWithWeights -import com.twitter.simclusters_v2.thriftscala.OrderedClustersAndMembers -import com.twitter.simclusters_v2.thriftscala.ClusterMembers -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbeddingIdWithScore -import com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbedding -import com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbedding.Ids -import com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbeddingByIds -import com.twitter.simclusters_v2.thriftscala.SimClustersMultiEmbeddingId -import com.twitter.simclusters_v2.thriftscala.UserAndNeighbors -import com.twitter.simclusters_v2.thriftscala.{ - SimClustersEmbeddingId => SimClustersEmbeddingIdThrift -} -import com.twitter.util.Stopwatch -import java.util.TimeZone -import scala.util.Random.shuffle - -/** - * Base app for computing User InterestedIn multi-embedding representation. - * TWICE: Capturing users’ long-term interests using multiple SimClusters embeddings. - * This job will - * - Randomly select K follow/fav actions for each user, - * - cluster the follow/fav actions for each user, - * - for each cluster, construct a representation (e.g. average or medoid). - * - * @tparam T type of producer embedding. e.g. SimClustersEmbedding - */ -trait InterestedInTwiceBaseApp[T] { - - import InterestedInTwiceBaseApp._ - - def modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - - /** - * function to output similarity (>=0, the larger, more similar), given two producer embeddings. - */ - def producerProducerSimilarityFnForClustering: (T, T) => Double - def producerProducerSimilarityFnForClusterRepresentative: (T, T) => Double - - // Sort clusters by decreasing size, fall back to entity ID to break tie - val clusterOrdering: Ordering[Set[Long]] = math.Ordering.by(c => (-c.size, c.min)) - - /** - * Read user-user graph. - */ - def getUserUserGraph( - implicit dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[UserAndNeighbors] = { - DAL - .readMostRecentSnapshot( - UserUserGraphScalaDataset - ) - .withRemoteReadPolicy(AllowCrossDC) - .toTypedPipe - } - - /** - * Randomly select up to maxNeighborsByUser neighbors for each user. - * Attempts to equally sample both follow and fav edges (e.g. maxNeighborsByUser/2 for each). - * However, if one type of edge is insufficient, backfill with other type up to maxNeighborsByUser neighbours. - * @param userUserGraph User-User follow/fav graph. - * @param maxNeighborsByUser How many neighbors to keep for each user. - */ - def selectMaxProducersPerUser( - userUserGraph: TypedPipe[UserAndNeighbors], - maxNeighborsByUser: Int = MaxNeighborsByUser - )( - implicit uniqueID: UniqueID - ): TypedPipe[UserAndNeighbors] = { - - val numOfFollowEdgesStat = Stat(StatNumOfFollowEdges) - val numOfFavEdgesStat = Stat(StatNumOfFavEdges) - val numOfEdgesCumulativeFrequencyBeforeFilter = Util.CumulativeStat( - StatCFNumProducersPerConsumerBeforeFilter, - StatCFNumProducersPerConsumerBeforeFilterBuckets) - - userUserGraph.map { userAndNeighbors: UserAndNeighbors => - numOfEdgesCumulativeFrequencyBeforeFilter.incForValue(userAndNeighbors.neighbors.size) - - val (followEdges, favEdges) = - userAndNeighbors.neighbors.partition(_.isFollowed.contains(true)) - val randomFollowEdges = shuffle(followEdges) - val randomFavEdges = shuffle(favEdges) - - // interleave follow and fav edges, and select top k - val interleavedTopKEdges: Seq[NeighborWithWeights] = randomFollowEdges - .map(Some(_)) - .zipAll( - randomFavEdges.map(Some(_)), - None, - None - ) // default None value when one edge Seq is shorter than another - .flatMap { - case (followEdgeOpt, favEdgeOpt) => - Seq(followEdgeOpt, favEdgeOpt) - }.flatten - .take(maxNeighborsByUser) - - // edge stats - interleavedTopKEdges - .foreach { edge => - if (edge.isFollowed.contains(true)) numOfFollowEdgesStat.inc() - else numOfFavEdgesStat.inc() - } - - userAndNeighbors.copy(neighbors = interleavedTopKEdges) - } - } - - /** - * Get multi embedding for each user: - * - For each user, join their follow / fav - based neighbors to producer embeddings, - * - Group these neighbors into clusters using the specified clusteringMethod, - * - For each cluster, select the medoid as the representation. - * - * @param userUserGraph User-User follow/fav graph. - * @param producerEmbedding producer embedding dataset. e.g. simclusters embeddings, simhash, etc. - * @param clusteringMethod A method to group embeddings together. - * @param maxClustersPerUser How many clusters to keep per user. - * @param clusterRepresentativeSelectionMethod A method to select a cluster representative. - * @param numReducers How many reducers to use for sketch operation. - */ - def getMultiEmbeddingPerUser( - userUserGraph: TypedPipe[UserAndNeighbors], - producerEmbedding: TypedPipe[(UserId, T)], - clusteringMethod: ClusteringMethod, - maxClustersPerUser: Int = MaxClustersPerUser, - clusterRepresentativeSelectionMethod: ClusterRepresentativeSelectionMethod[T], - numReducers: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[(UserId, Seq[Set[UserId]], SimClustersMultiEmbedding)] = { - - val truncatedUserUserGraph: TypedPipe[UserAndNeighbors] = selectMaxProducersPerUser( - userUserGraph) - val validEdges: TypedPipe[(UserId, NeighborWithWeights)] = - truncatedUserUserGraph.flatMap { - case UserAndNeighbors(srcId, neighborsWithWeights) => - neighborsWithWeights.map { neighborWithWeights => - ( - neighborWithWeights.neighborId, // producerId - neighborWithWeights.copy(neighborId = srcId)) - } - } - - implicit val l2b: UserId => Array[Byte] = Injection.long2BigEndian - - val totalEdgesNonEmptyProducerEmbeddingsStat = Stat(StatTotalEdgesNonEmptyProducerEmbeddings) - val userClusterPairsBeforeTruncation = Stat(StatNumUserClusterPairsBeforeTruncation) - val userClusterPairsAfterTruncation = Stat(StatNumUserClusterPairsAfterTruncation) - val numUsers = Stat(StatNumUsers) - val numOfClustersCumulativeFrequencyBeforeFilter = - Util.CumulativeStat(StatCFNumOfClustersBeforeFilter, StatCFNumOfClustersBeforeFilterBuckets) - - // map each clustering statistic to a scalding.Stat - val clusteringStatsMap: Map[String, Stat] = Map( - StatSimilarityGraphTotalBuildTime -> Stat(StatSimilarityGraphTotalBuildTime), - StatClusteringAlgorithmRunTime -> Stat(StatClusteringAlgorithmRunTime), - StatMedoidSelectionTime -> Stat(StatMedoidSelectionTime) - ) - val cosineSimilarityCumulativeFrequencyBeforeFilter = Util.CumulativeStat( - StatCFCosineSimilarityBeforeFilter, - StatCFCosineSimilarityBeforeFilterBuckets) - - val clusterRepresentativeSelectionTime = Stat(StatClusterRepresentativeSelectionTime) - - validEdges - .sketch(numReducers) - .join(producerEmbedding) - .map { - case (producerId: UserId, (srcWithWeights: NeighborWithWeights, embedding)) => - totalEdgesNonEmptyProducerEmbeddingsStat.inc() - (srcWithWeights.neighborId, (srcWithWeights.copy(neighborId = producerId), embedding)) - } - .group - .toList - .map { - case (userId: UserId, embeddings: Seq[(NeighborWithWeights, T)]) => - numUsers.inc() - val embeddingsMap: Map[Long, T] = embeddings.map { - case (n: NeighborWithWeights, e) => (n.neighborId, e) - }.toMap - val weightsMap: Map[Long, NeighborWithWeights] = embeddings.map { - case (n: NeighborWithWeights, _) => (n.neighborId, n) - }.toMap - // 1. Cluster embeddings - val clusters: Set[Set[UserId]] = - clusteringMethod - .cluster[T]( - embeddingsMap, - producerProducerSimilarityFnForClustering, - // Map.get() returns an Option, so will not throw. - // Use .foreach() to filter out potential Nones. - (name, incr) => { - clusteringStatsMap.get(name).foreach(ctr => ctr.incBy(incr)) - if (name == StatComputedSimilarityBeforeFilter) - cosineSimilarityCumulativeFrequencyBeforeFilter.incForValue(incr) - } - ) - - // 2. Sort clusters - val sortedClusters: Seq[Set[UserId]] = clusters.toSeq.sorted(clusterOrdering) - - // 3. Keep only a max number of clusters (avoid OOM) - userClusterPairsBeforeTruncation.incBy(sortedClusters.size) - numOfClustersCumulativeFrequencyBeforeFilter.incForValue(sortedClusters.size) - val truncatedClusters = sortedClusters.take(maxClustersPerUser) - userClusterPairsAfterTruncation.incBy(truncatedClusters.size) - - // 4. Get list of cluster representatives - val truncatedIdWithScoreList: Seq[SimClustersEmbeddingIdWithScore] = - truncatedClusters.map { members: Set[UserId] => - val clusterRepresentationSelectionElapsed = Stopwatch.start() - val medoid: UserId = clusterRepresentativeSelectionMethod.selectClusterRepresentative( - members.map(id => weightsMap(id)), - embeddingsMap) - clusterRepresentativeSelectionTime.incBy( - clusterRepresentationSelectionElapsed().inMilliseconds) - - SimClustersEmbeddingIdWithScore( - id = SimClustersEmbeddingIdThrift( - EmbeddingType.TwiceUserInterestedIn, - modelVersion, - InternalId.UserId(medoid)), - score = members.size) - } - - ( - userId, - sortedClusters, - SimClustersMultiEmbedding.Ids( - SimClustersMultiEmbeddingByIds(ids = truncatedIdWithScoreList))) - } - } - - /** - * Write the output to disk as a TypedTsv. - */ - def writeOutputToTypedTSV( - output: TypedPipe[(UserId, Seq[Set[UserId]], SimClustersMultiEmbedding)], - userToClusterRepresentativesIndexOutputPath: String, - userToClusterMembersIndexOutputPath: String - ): Execution[(Unit, Unit)] = { - - // write the user -> cluster representatives index - val writeClusterRepresentatives = output - .collect { - case (userId: Long, _, Ids(ids)) => (userId, ids.ids) - } - //.shard(partitions = 1) - .writeExecution(TypedTsv[(UserId, Seq[SimClustersEmbeddingIdWithScore])]( - userToClusterRepresentativesIndexOutputPath)) - - // write the user -> cluster members index - val writeClusterMembers = output - .collect { - case (userId: Long, clusters: Seq[Set[UserId]], _) => (userId, clusters) - } - //.shard(partitions = 1) - .writeExecution(TypedTsv[(UserId, Seq[Set[UserId]])](userToClusterMembersIndexOutputPath)) - - Execution.zip(writeClusterRepresentatives, writeClusterMembers) - - } - - /** - * Write the output to disk as a KeyValDataset. - */ - def writeOutputToKeyValDataset( - output: TypedPipe[(UserId, Seq[Set[UserId]], SimClustersMultiEmbedding)], - embeddingType: MultiEmbeddingType, - userToClusterRepresentativesIndexDataset: KeyValDALDataset[ - KeyVal[SimClustersMultiEmbeddingId, SimClustersMultiEmbedding] - ], - userToClusterMembersIndexDataset: KeyValDALDataset[KeyVal[UserId, OrderedClustersAndMembers]], - userToClusterRepresentativesIndexOutputPath: String, - userToClusterMembersIndexOutputPath: String - )( - implicit dateRange: DateRange - ): Execution[(Unit, Unit)] = { - // write the user -> cluster representatives index - val writeClusterRepresentatives = output - .map { - case (userId: UserId, _, embeddings: SimClustersMultiEmbedding) => - KeyVal( - key = SimClustersMultiEmbeddingId( - embeddingType = embeddingType, - modelVersion = modelVersion, - internalId = InternalId.UserId(userId) - ), - value = embeddings - ) - } - .writeDALVersionedKeyValExecution( - userToClusterRepresentativesIndexDataset, - D.Suffix(userToClusterRepresentativesIndexOutputPath), - ExplicitEndTime(dateRange.end) - ) - - // write the user -> cluster members index - val writeClusterMembers = output - .map { - case (userId: UserId, clusters: Seq[Set[UserId]], _) => - KeyVal( - key = userId, - value = OrderedClustersAndMembers(clusters, Some(clusters.map(ClusterMembers(_))))) - } - .writeDALVersionedKeyValExecution( - userToClusterMembersIndexDataset, - D.Suffix(userToClusterMembersIndexOutputPath), - ExplicitEndTime(dateRange.end) - ) - - Execution.zip(writeClusterRepresentatives, writeClusterMembers) - } - - /** - * Main method for scheduled jobs. - */ - def runScheduledApp( - clusteringMethod: ClusteringMethod, - clusterRepresentativeSelectionMethod: ClusterRepresentativeSelectionMethod[T], - producerEmbedding: TypedPipe[(UserId, T)], - userToClusterRepresentativesIndexPathSuffix: String, - userToClusterMembersIndexPathSuffix: String, - userToClusterRepresentativesIndexDataset: KeyValDALDataset[ - KeyVal[SimClustersMultiEmbeddingId, SimClustersMultiEmbedding] - ], - userToClusterMembersIndexDataset: KeyValDALDataset[KeyVal[UserId, OrderedClustersAndMembers]], - numReducers: Int - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - val userToClusterRepresentativesIndexOutputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - modelVersion = modelVersion, - pathSuffix = userToClusterRepresentativesIndexPathSuffix - ) - - val userToClusterMembersIndexOutputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - modelVersion = modelVersion, - pathSuffix = userToClusterMembersIndexPathSuffix - ) - - val execution = Execution.withId { implicit uniqueId => - val output: TypedPipe[(UserId, Seq[Set[UserId]], SimClustersMultiEmbedding)] = - getMultiEmbeddingPerUser( - userUserGraph = getUserUserGraph(dateRange.prepend(Days(30)), implicitly), - producerEmbedding = producerEmbedding, - clusteringMethod = clusteringMethod, - clusterRepresentativeSelectionMethod = clusterRepresentativeSelectionMethod, - numReducers = numReducers - ) - - writeOutputToKeyValDataset( - output = output, - embeddingType = MultiEmbeddingType.TwiceUserInterestedIn, - userToClusterRepresentativesIndexDataset = userToClusterRepresentativesIndexDataset, - userToClusterMembersIndexDataset = userToClusterMembersIndexDataset, - userToClusterRepresentativesIndexOutputPath = userToClusterRepresentativesIndexOutputPath, - userToClusterMembersIndexOutputPath = userToClusterMembersIndexOutputPath - ) - - } - - execution.unit - } - - /** - * Main method for adhoc jobs. - */ - def runAdhocApp( - clusteringMethod: ClusteringMethod, - clusterRepresentativeSelectionMethod: ClusterRepresentativeSelectionMethod[T], - producerEmbedding: TypedPipe[(UserId, T)], - userToClusterRepresentativesIndexPathSuffix: String, - userToClusterMembersIndexPathSuffix: String, - numReducers: Int - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueId: UniqueID - ): Execution[Unit] = { - - val userToClusterRepresentativesIndexOutputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = userToClusterRepresentativesIndexPathSuffix - ) - - val userToClusterMembersIndexOutputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = false, - modelVersion = modelVersion, - pathSuffix = userToClusterMembersIndexPathSuffix - ) - - val execution = Execution.withId { implicit uniqueId => - val output: TypedPipe[(UserId, Seq[Set[UserId]], SimClustersMultiEmbedding)] = - getMultiEmbeddingPerUser( - userUserGraph = getUserUserGraph(dateRange.prepend(Days(30)), implicitly), - producerEmbedding = producerEmbedding, - clusteringMethod = clusteringMethod, - clusterRepresentativeSelectionMethod = clusterRepresentativeSelectionMethod, - numReducers = numReducers - ) - - writeOutputToTypedTSV( - output, - userToClusterRepresentativesIndexOutputPath, - userToClusterMembersIndexOutputPath) - } - - execution.unit - } - -} - -object InterestedInTwiceBaseApp { - - // Statistics - val StatNumOfFollowEdges = "num_of_follow_edges" - val StatNumOfFavEdges = "num_of_fav_edges" - val StatTotalEdgesNonEmptyProducerEmbeddings = "total_edges_with_non_empty_producer_embeddings" - val StatNumUserClusterPairsBeforeTruncation = "num_user_cluster_pairs_before_truncation" - val StatNumUserClusterPairsAfterTruncation = "num_user_cluster_pairs_after_truncation" - val StatNumUsers = "num_users" - // Cumulative Frequency - val StatCFNumProducersPerConsumerBeforeFilter = "num_producers_per_consumer_cf_before_filter" - val StatCFNumProducersPerConsumerBeforeFilterBuckets: Seq[Double] = - Seq(0, 10, 20, 50, 100, 500, 1000) - val StatCFCosineSimilarityBeforeFilter = "cosine_similarity_cf_before_filter" - val StatCFCosineSimilarityBeforeFilterBuckets: Seq[Double] = - Seq(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100) - val StatCFNumOfClustersBeforeFilter = "num_of_clusters_cf_before_filter" - val StatCFNumOfClustersBeforeFilterBuckets: Seq[Double] = - Seq(1, 3, 5, 10, 15, 20, 50, 100, 200, 300, 500) - - val MaxClustersPerUser: Int = 10 - val MaxNeighborsByUser: Int = 500 - - object ProducerEmbeddingSource { - - /** - * Read log-fav based Aggregatable Producer embeddings dataset. - */ - def getAggregatableProducerEmbeddings( - implicit dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, SimClustersEmbedding)] = - ProducerEmbeddingSources - .producerEmbeddingSource( - EmbeddingType.AggregatableLogFavBasedProducer, - ModelVersion.Model20m145k2020)(dateRange.prepend(Days(30))) - .mapValues(s => SimClustersEmbedding(s)) - - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/BUILD.bazel deleted file mode 100644 index 7615fcf43..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/BUILD.bazel +++ /dev/null @@ -1,72 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = [ - "bazel-compatible", - "bazel-only", - ], - dependencies = [ - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/scalding/offline_job", - ], -) - -hadoop_binary( - name = "tweet_evaluation_dummy_candidate_adhoc", - main = "com.twitter.simclusters_v2.scalding.DummyCandidateGenerationAdhocJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":evaluation", - ], -) - -hadoop_binary( - name = "tweet_evaluation_timelines_reference_adhoc", - main = "com.twitter.simclusters_v2.scalding.evaluation.AdhocTimelinesDataExtraction", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":evaluation", - ], -) - -hadoop_binary( - name = "tweet_evaluation_timelines_reference_batch", - main = "com.twitter.simclusters_v2.scalding.evaluation.ScheduledTimelinesDataExtractionBatch", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":evaluation", - ], -) - -hadoop_binary( - name = "simcluster_offline_eval_adhoc", - main = "com.twitter.simclusters_v2.scalding.evaluation.SimClustersEvaluationAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":evaluation", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..d795ae2a5ba01dc935c82e3b7a8369888042621d GIT binary patch literal 37031 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/CandidateEvaluationBase.scala b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/CandidateEvaluationBase.scala deleted file mode 100644 index 24195fff7..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/CandidateEvaluationBase.scala +++ /dev/null @@ -1,163 +0,0 @@ -package com.twitter.simclusters_v2.scalding.evaluation - -import com.twitter.core_workflows.user_model.thriftscala.CondensedUserState -import com.twitter.core_workflows.user_model.thriftscala.UserState -import com.twitter.pluck.source.core_workflows.user_model.CondensedUserStateScalaDataset -import com.twitter.scalding._ -import com.twitter.scalding.source.TypedText -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.simclusters_v2.thriftscala.CandidateTweets -import com.twitter.simclusters_v2.thriftscala.ReferenceTweets -import scala.util.Random - -/** - * Helper functions to provide user samples by sampling across user states. - */ -object UserStateUserSampler { - def getSampleUsersByUserState( - userStateSource: TypedPipe[CondensedUserState], - validStates: Seq[UserState], - samplePercentage: Double - ): TypedPipe[(UserState, Long)] = { - assert(samplePercentage >= 0 && samplePercentage <= 1) - val validStateSet = validStates.toSet - - userStateSource - .collect { - case data if data.userState.isDefined && validStateSet.contains(data.userState.get) => - (data.userState.get, data.uid) - } - .filter(_ => Random.nextDouble() <= samplePercentage) - .forceToDisk - } - - /** - * Given a list of string corresponding to user states, convert them to the UserState type. - * If the input is empty, default to return all available user states - */ - def parseUserStates(strStates: Seq[String]): Seq[UserState] = { - if (strStates.isEmpty) { - UserState.list - } else { - strStates.map { str => - UserState - .valueOf(str).getOrElse( - throw new IllegalArgumentException( - s"Input user_states $str is invalid. Valid states are: " + UserState.list - ) - ) - } - } - } -} - -/** - * A variation of the evaluation base where target users are sampled by user states. - * For each user state of interest (e.x. HEAVY_TWEETER), we run a separate evaluation call, and - * output the evaluation results per user state. This is helpful when we want to horizontally - * compare how users in different user states respond to the candidate tweets. - */ -trait UserStateBasedEvaluationExecutionBase - extends CandidateEvaluationBase - with TwitterExecutionApp { - - def referenceTweets: TypedPipe[ReferenceTweets] - def candidateTweets: TypedPipe[CandidateTweets] - - override def job: Execution[Unit] = { - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - implicit val dateRange: DateRange = - DateRange.parse(args.list("date"))(DateOps.UTC, DateParser.default) - - val outputRootDir = args("outputDir") - val userStates: Seq[UserState] = - UserStateUserSampler.parseUserStates(args.list("user_states")) - val sampleRate = args.double("sample_rate") - - // For each user state we are interested in, run separate executions and write - // the output into individual sub directories - val userStateSource = DAL.read(CondensedUserStateScalaDataset).toTypedPipe - val userIdsByState = - UserStateUserSampler.getSampleUsersByUserState(userStateSource, userStates, sampleRate) - val executionsPerUserState = userStates.map { userState => - val sampleUsers = userIdsByState.collect { case data if data._1 == userState => data._2 } - val outputPath = outputRootDir + "/" + userState + "/" - - super - .runSampledEvaluation(sampleUsers, referenceTweets, candidateTweets) - .writeExecution(TypedText.csv(outputPath)) - } - // Run evaluation for each user state in parallel - Execution.sequence(executionsPerUserState).unit - } - } - } -} - -/** - * A basic flow for evaluating the quality of a set of candidate tweets, typically generated by an - * algorithm (ex. SimClusters), by comparing its engagement rates against a set of reference tweets - * The job goes through the following steps: - * 1. Generate a group of target users on which we measure tweet engagements - * 2. Collect tweets impressed by these users and their engagements on tweets from a labeled - * tweet source (ex. Home Timeline engagement data), and form a reference set - * 3. For each candidate tweet, collect the engagement rates from the reference set - * 4. Run evaluation calculations (ex. percentage of intersection, engagement rate, etc) - * - * Each sub class is expected to provide 3 sets of data sources, which are the sample users, - * candidate tweet sources, and reference tweet sources. - */ -trait CandidateEvaluationBase { - private def getSampledReferenceTweets( - referenceTweetEngagements: TypedPipe[ReferenceTweets], - sampleUsers: TypedPipe[Long] - ): TypedPipe[ReferenceTweets] = { - referenceTweetEngagements - .groupBy(_.targetUserId) - .join(sampleUsers.asKeys) - .map { case (targetUserId, (referenceEngagements, _)) => referenceEngagements } - } - - private def getSampledCandidateTweets( - candidateTweets: TypedPipe[CandidateTweets], - sampleUsers: TypedPipe[Long] - ): TypedPipe[CandidateTweets] = { - candidateTweets - .groupBy(_.targetUserId) - .join(sampleUsers.asKeys) - .map { case (_, (tweets, _)) => tweets } - } - - /** - * Evaluation function, should be overridden by implementing sub classes to suit individual - * objectives, such as like engagement rates, CRT, etc. - * @param sampledReference - * @param sampledCandidate - */ - def evaluateResults( - sampledReference: TypedPipe[ReferenceTweets], - sampledCandidate: TypedPipe[CandidateTweets] - ): TypedPipe[String] - - /** - * Given a list of target users, the reference tweet set, and the candidate tweet set, - * calculate the engagement rates on the reference set and the candidate set by these users. - * The evaluation result should be converted into an itemized format - * these users. - * @param referenceTweets - * @param candidateTweets - * @return - */ - def runSampledEvaluation( - targetUserSamples: TypedPipe[Long], - referenceTweets: TypedPipe[ReferenceTweets], - candidateTweets: TypedPipe[CandidateTweets] - ): TypedPipe[String] = { - val sampledCandidate = getSampledCandidateTweets(candidateTweets, targetUserSamples) - val referencePerUser = getSampledReferenceTweets(referenceTweets, targetUserSamples) - - evaluateResults(referencePerUser, sampledCandidate) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/EvaluationMetricHelper.docx b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/EvaluationMetricHelper.docx new file mode 100644 index 0000000000000000000000000000000000000000..3d4ed8532819083e03df89ce69078d45882ff529 GIT binary patch literal 41884 zcmagEV|ZrG)-@X2wrzFTv2EM7ZQHh;j%_;~+eyc^PWsue_WPahoIiD6cU8?f#vD~^ z73PwY1O`C?004jhpvz!Wt5ztEPX+`47zYCYK>n`P6tuN*GPZHjRdTm8cGRYGv$kqV zmX=-TLkPM0Kuw|NA@CH0N3Gbiqp+ii#}cZ|d|+2!p}&v|$#5?BUPXKb}s(9^)v6J>EM3D3()n9kF}ytMVCvfn6t$PZ=SUkV-k zu_D2;t?JtEwyP@7AjiR5&9!t#M7HLd0ArPBUZB3 z-6b!it%lZzcYL*PXtI=9h`mBxVil-rpuQN8zuc#`O?lJUp}PT*0@>+L=%%z6q;8cF z`9KWEXH53QYNA5GL%oGOq)FLuImcfkAf!uWEe2N>RGx@<5A8&u>g-KBZwqECBGvpO zqO`j0z{)k^nYY{f-6{67MUh|;SeDtrkP?ZmJIhbWXM{{DF3iNpyFh~+IMcmP?5W%+>NDTDe_ z(>fsYE0vIe4!c$$E?6}hvU`8FG#Rnhn_<_T>e^ooZy9}ka5Z3q&P9jx6ppftDeAzO za4uY4Kw;nknfc_?6}}9GlKSyF8MQLkA%8Sau#>0i`($nA!;QFdn}$MWCq3QYm@{T3iKCSAXMu>f zi~XkQo+|j$;QJ-|iMfJ9{mga)f^ljJr$agKD){-{e~bO^<8r^gj(+w%E><7_00{qc zT=ebi{uvgf37d5Wgw8i=5N)Rjb8vonjD&zC{yD)-th$7(mW6R5iFlAU#yubJmoQY0 z5c-F3t_H5R#__jheiQIU88c9A~v1k;Hp?jz{>{L|vuC z9$gh7cg-+4Neb?p0X{ahA?2m&@v-2thPI4mG-~b-EJPR5-C&WubRb^-Z00H2D|2(j+whl)0 z-%qWx_4nfRcV=8@TRX0^Cw%(!0F{p0lvPQMrLUe>xn$ACW>3D*(d(=;zY&TTn;|8z zmq5S*O57OTZP(t21fY;o{{j$iR!&wcpeO*mpO}vp*&p%s!6G+{V8%+k-?{1D_KdQ_ zN}!Ml1&{S@b8CAVFceac6X6$7@Vb7+njiV{`qbr}eno`5W0b)RATMg<%?tvsMl?+H zX^|X2!~5}M^1-6CePW^NtPkq3&5fN#Ifmq|(-O^b{V zF^YW;XVn94?Ib~H`Ta`h-8JKew(_B2K_^rQ1|Td? z=1|n`Wa$mNlmnFQ$;gRfZU}$>VqxsAd|MpfCk|Oo%9yE-^2Da?b950ao~+n##h}G0 zPtSAEK$hY%Kl(B~vU50@HKg8*EUp-BO!l4v<`3GKn#QZM%1^%9Zls+vtYiHCXp*`JE_>tZf z`rvF$L&F}>dA?=`6cUU)qh`wBRqxwDJWF2wW0*-mV|y`qJ8_4Q6^KF>eBC{mc);;p znFtf&0Fgcv;Ay;o@^FNxcL+v8H?;7x8bg5rzW{3~Ac;Bp>jU%x@KwYyMG@{u3E<)D zGIEIkFn%n>-_km4ayFiyfMKsFzT3};j8azXoqE(^u`h8HNChSHDLyCGDAiN^LP6XTxA-s%V(E#$lhwcEya*KYp zumTRXyV8JHB^F4@3LfQ*!9H5*ws%jD`U?ApC5DRsu>?_s-oKrEkdE2KR>(Dv# zUTZI=(p_880OD@(8f_kc*Y`dn2#N;c%i)g@AqhwDZ4B!*;%pB`vU!Iw5|HPcg8{DW z(`{WO+r@+%bDJE{-8cvGg$E@6HTTRYoWzB^fbNZb5WeHv)eg{p%Z5~1U&|Gg4>H{w z@29}}gOPfVpFG~XR~7R(fkatybwO*^>EMP9u@yKZi~J@G{7jWlPUs;!k$gm!ECl4F3A0Yk z|7iU8fJu=6&2uXv6x@s|5~TlruuvYkSP>3a@&Uh9v6$2VM{s*Y{g5XAtUp4JHrZqQ`&i30q zqML5)q|92@-Db=h_DwC(fci)`8c11+$sxB8MT*M~p}-A7ejQf6TbQVo=1+sronckX z74XdV)#PiYyJNV5PldH#7j!_;YeHS68S=8u#`-xeF()o zfy>HW%iTj6PL|=`Awppmcu_C;oFhXzj}Y(;#I3`PA#E{0^3)#v*%11O%WkwTW#khe z2K$XZ2ynA4QbKY350I~Y0&B?y6I{DNU=l2w!Vgu5Ko6lV)%8l=CAhaL3lI<_mqBS| z(jHJA$27kHxpsFZ(GbxHKSUFLG7=?LH{-yzIvL z03NWI@YjNc)X+g!+wtcch=4wGzgo?2lGPaO7T0x_z_i$ zE-Ew|%qwjt(KmtUq((YmgTLL`s)rfTxiZpif|aPh z#^ZsjrEizSM?CN>#6C{`su`JC!+zL*0>hq*VuWZzY{CfOnJXK)96~9DGv!6L|BXO11QI>xUA7Trfdd)IE1}$OV?AgGuHkIXMi|C#(wz7o4@xkd_%dY=K0Sy z2Baw1PX-AiC6|z3=9FFT>;53(UefpGLr_~H4KSblLy}2nIt1`XilyHb4HR1Y6lp=CWpPn+c1eLNT=H;LowYpBrU4 z?XuV=XCFD_qcM^ckAo(RA9Z{?S+lvPWo!vs?h^ooUxDp`rHYjOjdKc05eaL{XTN}w zW44f)3C2qz-mhrYiap85BFm2Hwzk%^2=ObTPe}Lj*MgY|t)tMfs57CXEj_;2qS^GV zw@UQSN$ctBarrmv^c|=^_{4RRKB~ZWB4{r1&f$9t-$Nbg>IaBqi66KJ5yWF2C|I_)8DH;uv)W>d}&Z|B8gj96w@T?NvHQ3s@TOqh~|( zHzcc+R4)!PWlc?b=g|LR=j&n}RT43w7-Dt;8g;@T30;-TYQNu83=8h~(jMGKN z2klr86`?l=!lOU;vSL8KMLNbq5(rzRD0LArOOfo#k5*l;j9B0HPhPJn^u!q9grmcz zcy`QEDkD;d^PAGNezWMiprOQ|(zOPf;g+e?#-woM^vrx&QtU9k9t|E4+sl2$izamQ z%2(Ah*m=#<0x?U}{-Rft^x)zhH5(A|n7dmwqq@bzzSUDIe7#=*9yzhXE{5E{$`6R` zH8Up?fZIFWCD=n>9e|BX^Hv|n6E21n!3R!~a-jjNq~e)PwrF|lQ24Y*06^;Ega=aX z_Jye1n91Z4o7R~gD|rUyn$uv#klY;~TMbv}JA&OU4AdwSf1Bs1xfVe7Qj=Doh5t09 zlQHgsyJWU+DZ7Npx9rHoSgZ^>J%X5u#h+O`$#Y~H*5UAK1}&6gpzwm8A!vQ72z=%h z&m1N5u)A13W@KxBba>*~HkM3-@v8{n8jjh}e%fEuP^JyB-j1!UBBj^*>3BN0y#M_8 z@iI=p?jMp&hN}*O3lh4k^g~{X=-r|XyD(H`n!1H(y4oiJJC0*OEsOssD^8>`Tn z-vzpCel;YScQ5>cXx=P;be#@23Js!ez~#(Azs>lJt3rz&3o_&+4@$`;bp2SW$Xi{0 zV_uFD2gZnlsOE$rwq);E;rhi+TJXY&@)wLdFQ%e$(Hr( z{wh@Hi1TZUNGHsfwsUpxWoj{7(xtmT8|#Jf_$c<{J4hVPWjV#w;;)cOxais z@)bxHVUtSWPZi0g`$sMaunLE@mNwPRtEP2pa{nV~Q*9gcY1ADW;WK9+&nliB_3pTjJZ2Kw3e zfT_56Xk#nFKZk4gNx~m?^SwcC`?8*=m;j&EY^uA`zE6iyz6qjX9@Um^7hOJG=)z_! zr?Dg6rv|nzP_xGXxS)_Sg#^s-Ob?GzwGvrM46M->i9&mR#1dL~$l2yd?9>ijXT zh*kNSNFJ4z*-J}bX1xh_{mQ>(12k9V*Ga|D=B4OkypVMe$5Q1oJu;D+BGqv$W9l4& zo(=4Kj5A%o9@&0AU0W6TNHxgK9_Kn4p}O?rsu8l5hRk+Mpnfw7r3?5n%m`CugelEb z5-uQUEs939QZQqnM_bQ;XG(8Ma-A9>{Y=OemnkTFiaWpu5y$!VUx039#}d7B-u@20;c$+F=Q*{KMW z>jzFUJp^z?9nWFUsRc!jTEDf%4yx{TRyO)RWJgMxsucqCU_JfvOWS7fgS8_E>-jz# zU#JY~v(r)3b@s!jWnezN(P<(FoGm$=D}oYZ4i!3=?x%;is@B0Yi#xJSGbaYF>u;T4 zTAXGzhmw5};e1_k>m}n!hr%byR^wsA`k&lVNO%dW!@(#WRVrDz8sq~Vn}qw;rqFyk z+)^9q&^WdGqj%WD@`Lssvy(4BjNQ&dIl^o#iU8d-u@q+oA42L9?@2&y^3=|6;(yrC zR%SuHsV|owj;T+-bJw=(?+~Mt7WQkqOEpd}3pVLy?Qc(YxNN*2HRQEWuh@#K9-*zc z@W)$mU;gOoIPd`%WFf#TQ**$XudG(YcC{q`n0i53RJMN`y`rYDP+Dtt7Fs74UMqZ( z7nc>}G_pjjv1sAcqrOt+F9^1q&-&Rh*_|mibD4%>3O?}xLOw!7uG;AcrkhCwnmzo? zf4A5HV54fr%L-CVBLvK%{Je(QZz<&J0Z$7N&*%Dje)}lUXu6rEG_7D;)U1djXp57p zqxGA-485pw9w2E78;~euZY6K&(1JCo#dA&{Bt`8JS77ZWq{$4!p##B*m~X-KG>Sy>jK5 zP^3d7&Qo@$YTSvk!~(j%7Ot=`(y-8ZgXXD+OH)e+C>2`lUAa|#);9h6B4pwTp+0%6 zB-qOnRrB{28bxCQ)|!lyk)NMuSad}ig=(AU6CkYh5ZoXaeo9g?^d$gVgWg=b_I(1j zR!}K>hY2wTh0X&J(AmUSOrY!y`zP>wiXSM!56`wmX&Tq5ewBr&aH|NLwU+F~yX;J} zIvb=#`?~2~H^%eMOs0ONsDSPRxKQ*MaeYm=`7*idO2m$Ecf|k&DV@auhqR4a*)@gz zqU+qXAB_;AKVU3_ebB=jGMt#t+k##tqO1%DLz;pb$RskCt}db)KoeEFHzX3c8Wg)T zf`+BLYrSZ9yi!S6ZWh4p<-^eo8lxltUkQ84gbBjC(k{oD;O%F#)aWu1EH-XfFF>5v}IWv67LpuN{pj( zvUiZzyfXu`MQTK`n05eu$~AnFqFTFYzm0Z9h(6=f-5u;@Ga|#>%2sIaLq8cyR)HrHo+-!*3EL)X{u zN!xwk%&%o&6r{$t=Zo#8?)$uVC`ynVZ~wy42fV+I2uB37@P1M5_U?yZ;)Qc0<)t(g zOpEDg{jsud&l?1(1%zG@#KYlsGvyv==94wz6#xTTZuN2Aj}H*CNv=Zp8>ueELb zu#uR)^Boi4`3{`#e8)f6+W*Sd{m;woe`W5H_+rQ}=cgVOm$tYts2e2$*rR~pQRai?jFEnt!l$0~ zHi#+nTUHZ5a@O^+cCGvrke<8vm26gZERiJr4)v>zbg&+Zq$%HquMM>(y6BIHVnRqg zn+A}&&|E^AerRrvlSc>9%~Vb6ZC91$4)11$W8aQUgGxX@BFL|mMLlieAEbJFSI4st z&qg@DAK*GrCXI_Yf+dIk@6uY)NV*^@Pg%eN%+Gq}ib0mam{XSQ7WZ>WgB~)FPM+XEy!$*+r8s*WxN4U26RM(T-2K;SNd5%m z)@Y7vWhzH{8t>Hl5p=t?xMNO}MO9c54e`2W<}(aGJ)*zsQp1ntB< zk$Uf*o`OQ%_XF#=Ab^o+8-N5C9R2UD!mlf4Y3BL!*;#b6*b7}>QbIm_Wd&swiHd}J zuKpY}Im$!T>_jEwkB?m6POB>)UHq8LkIPNAfgafIHq9%Qx6-N0yAE5Q4-7A^m!nHJ zjmw;r^$(km%S_(o5!=s~*sqtj<*S%d-j=g{?dO-xn~v1Qj<@6alZTGb(EU^QkNTgV z)?e*g!Sp_B_&O=2*E0jhp{a+v6YFO!l^+vlw~g)_R&1rb_*H$qU9uq@VNvy8_vQ^6 zo^Olm6CSP+ykB-|wgZSy9s74j4{n$jm7`|5PobsD13pbWcmt+Bt2rZ{>NYOR`XMs< zd8t#Ub-b6n*`H`UQVyawa=Rm;fzP`1>u=wrT(^CVY#CM66`;^Y^-R^4}yg~x8zQOdL-5cE(Ccs z^kAz%W$Z!Jr|nC?>Q}<=mccVB;P)%z8&vTO3VDZ7dWFsVIJky&>(2Ew8$X(zeZ z{^-)^L8=+YWHOSF(UqW$9r+blO-?Gq`kOsJ#ch)cXB!4 zn8iXJ+=f%E8vQkJ-TTqedqa#Jx$&iD?B)NKTNY)j8cUyT-Wk^t5xlI%>4N@t@p*k>O`U}|{2S2= zmGBYbH@_FIE`@khF)@20&y`7~^5}-pyAolngqXZo8InR0b7c_CAqq92B<->UM1o9v zPnGXB4*j#rc;^VpQdK8oW+9-w)lF{8M>$rSMg-00+opLJSIyO6(P~5;BlEWSikkIa zB0>=>umprcCKM@1-?5NA;b~%F5KWW1f zTtHkWXi?tZMzilmwEt`b*(I?BA#>r%E_-R2;Ke{z?D4lcMa4(EK)i_jq?8wivR5@&f~TQEgOg4`V%;vd!viLOluoqv1%S5=XtVB@q)M>n!g4yTaD zB0)EvinI6C3!tyMuLk~7M{=(Ol(2s)c~V?iYqMMTwr?A<=8Cl=j*!~Ik$uPN$b{7= zO%yksX3G23(B|8NbDOr!kSG89!1AO^zS)Y~o#ylKd~WToTkXjrkL>Z`(OALmbM!W^ zcFThhevHi?-6~(QR?O9pc&x8CI~YM)_Zd9|nvHVYtnHxYyGDqPS30;Pzhx?2#Ux(iE<4{+O?|06=UanWIi6rpFTaICMOAoY) z>$oK2?NO>LiD(@b^~6(cpM9J0!}5<*N&^nb8(XIrZfiY*F)2@ZNxyH&*n6B@70ssM z#?ZpfDjMB@K}M*Q(RRyqmofuBJ_oN$WREA9ww&<7JH^K{6(lAycis~!*gz=-m#(D6 zIq{hq=G`s%lO->fe6xg*R7pw}R*mZ2_l$Ix&X#ipUf{pqpAgc%UZbyL`>*q#2o}BR zgIo5_na|d5Es6(pyzkvzP!e2HL&JNAzLKnHqVx`IXr?^w>uNaK-PSZdKfhekt#*W$(qE956^J|Qp2a-{;2X{Hc15Zd| z{1P|BGMjk}&rX>$?|j#<^AMK^pYZh`rxSNS0Zygbi!ZqZzx*Hel%;qOXZe5k8K({-B)h9SP#I$%__pgg{HT(y{b8 z<%_dvnN`I?Q`*%420Fqbc$tqs6jPSaOLy!_B71v5GUDoUXp|I>x_F&Gc|Wyd(C_?g<;{Mif1eov_4ovUU(IxH*2PAB)YDr24V zPX)|6JU9TynX~tkxIWMu&BBtIF@@qDA{;N*oT36-b;G9IWU_+siRWOBX}qvWhxjV( zAmiX7CZcE=wL1Ag8<9;C)cRTM*VEe2qb*=IJ)gK_eX7(~lB^)uQ9(lq$H%eYitAnN?@ zlt~YA}!(IPWylhxwTk65{z%^P~06u~gjKRp=} z2WND$g-$&mclCbH4$N#fum4!Tx=L8iP##Ez3i*2ed|kppuabn%VqouCabu}d*8fom zC8I=AVaCb6Qc-uNG9-KRlw~DNQhSmYD$ne(BQ)|dNK>a?%jPKOQgkZJg)n50$BZl8Iv5eE@>Xm>T<50B|S?+Rxl$bC?Ymt61UDNl1At63Mv;5zT-=-i95YgLNz<7>zE;>QgZ64uzW zDe4Zm!oSxJ9lD59mlkqE3)#hW1+pFLDF|WXM}i|~XZ4wVg6d=Y*1mKh85i2(9NjkV zoUirKBLQ*h7>R0jf%?5NXq75o%ao#v4TbeKv1Z2(y^a#LRdEdmEsHV61kw@Q7Lrd9 zHgRSdi79q|ru`yl6D!k(^dj!k;>RqaRmU|@Pm9*wNa;AVG506;%9?~Txr9MAH5P+4 zS?A-O>MG*a{i9P1bquK3UP43oQG|N%gJ!EMrxoUAdeYQGqNu(a8URvhYUo$B<(Q%u z@Q&`hcQXacKbRy)SR&$*3NCGgp3^iUtAw;QRj+!>O{Km3n~J?#E0)q253A+4Pk*AH zIC8!!;HpY_xrzdMm~59fKoYKgRb_~Vj4F4G=_SzIm1W%V zM^RlFYH_1_2vU=4mD2)bw9QxhvW(=~*vc&?!p_YzPJXN-?r4}8BnMb|j^+O;;~8|eL>pXZaf zo`eES$zx2x@hj*T3aN7e5=+*G#CsI7Oz1=gU0*F5Jv#HcDt^s=Q6aMlRnK|PbZSQ_ zd}dG0E2hpqvyUkI&o5jIM4nxC%b}LmJ?w2#upf*JHYKkwb|15)Q@d_Z(VjC-L(nJF zkH3MQNh?{BHdan}kFD*KB@NTck-tXp3 zu#vm|JXt&tbf;yL7Fr&!MdE51iaR$WRJ(;LHy5Tnjl?f&F1L zA=5y9UV}+!7asQuT4~H&2kiv3c0rF5E{mp-9G${2+gsJydE+ok$Yp+u+LS{r3fofC z+`;%0-GwaUc+cu=wd~@yjp_{11?fczCccwAfaEc6AA^1k*2tm5hnCM)Pm|AP*c*-? zbbY|eRnjN^XrViYT@ipXhizHP1KjnC?c6eEYxr`Z9{n7|$Q80n`uOg}Y}`}M4yYC< zWi~U$vD1$&Z|Vl99-=GW7_uuJSVn96Nkq!dz_jKOtxKOu46zG!X2qm{?a_Zdqp(GO zM{0!G1*kpwfYWb_40t(Ry%QXi{CZp;vg?F>1lkRF4Tqi}au!?t+c)FRAarLquYLeB zxnoo9A6RAnh(FdOAzLD31#F(|_9c$re*BN&^4LsyG-iAR!I&z0L5^s_FLPIp6M=8p|V1ccRQ{ zbzqgYO-_~GHSwz`{aD|hTGWPe6ia);$eN4F52hC16|PsGX9eb8iO8Y6;fNfERfL$Y zc;ue#FozmFE=QF_|7AU0v8n>(Ez*K=EdVG>k$Qx{tyQ7ZDA_DnpAB_-_>du9sN+_M zNp`9|30`w{kNP0-7&+Uq3Nw0E9xRP6Z~JYI2IDQ#^^bYkf0!@)m-(N+=7D$uT@~J} z_cp(QZ#^tN=7kqB8!Vcgg>&WUK|AGokxz>`gy2&v&>s>m;;c#oJlwmYf0vh^4HTaWcNuY!te5BM=*X6_oCdQ6 z5iL}%Eel_j$kjP>FIZFrma&;GT2&_T6zV{^<@=E@NIHh$(J9}x>(t}MTqw!W*QTmq zJ@jLnBc3W>gciCo)5a|;M%K_3Y-K4o(3-qPc~I^I1LerkPZ4^wDs`2mT7?>MnJ>K6 z4jhFCy6mUs5j@rRr}NSMpg_cAUcQ5OUf7lsB_*H(r-1MCape>V#8J(h8WAhLy3|ei z+Qi?Q5x5g7tP+f393hZ)mP%&`N88;3ZUDynbJtV>&H7K5So>&wHc@=C@LVRSZd7T1-je_JTg(X z7Kk!Qw@PL1({mviVLnbz|9(O)-ai^bg+v6Px`};!z<=poL@OU zr3OlvG2e4^MgepWMK1Y{Y5=kvLamMiSBB)j(exw!7aE82|0f#7sGC3A4f%3>!?9Uu zt%U{%$+lVYsrk9%11jLyG0ROGXM|s8L&m%?-?RGEw}>`?r43k>qQMU!D7dOF^E}zK z(!%h8g_+yPa*5X}Rskyezq-BwFCfeGf6B4TA<7NBU5ywOsb8CGf{?6>ugR1U7``+R ztcPE)+Pzkk2=m=WtCZ&q^Qaoi^4)T9d)34cy-ajH7Q0xa<1G0&qhxIqB7h5Uj~mM!jHEmm-YK| zmYh`CU0k$SFrFT-)Xo|^x@+UBAIV=fq}%-WnJq4lX4j5TY2Z6+?Ts*U<=PrhMYnXc zAk98<3NXs=2UIxb-H8+*26+UZW0jxwZLha4b-vL03*KGOq!f7A(V{x`#BFfHs)5hs zp|#Ubq|ikfl&{|@p4bgd-6xfrF2a<)JV9k;{vcpC#xS3Bz^v{i7*bmb^B*^p{YiCj zvLT5HM(zSXINE3w2vPz@6^8Ft_4>H0kSzE7#Qddj5jgzDfQi5cRSrNAbx)vl^GB`7 zna%so&kup&`qX@n>B_0g4Ao7a(u|P=pYI2^$)P zCPJG>MH7r)l`&cZ1#$pqHjX_%WsW2iW$T>_ANu3DXQ)UcQp*h9WW+dBc;!X|<^zED zD@}kk3oLOpOL5+Qwge#zW!66tfFll>0?>euMnnhUS6WRSM#Q8GQ3D-99G5zg=aJa| z;7DAVp&?(goG<=2?p5x;arcF)N!fc}7%^VsxUk~8t<2@<`+_OGW&~Z_40b^y~Mv~cQR0tHb~g`kC|Yb8m2nLhZz;FDj<1XR_@!% zI5WF3l-x$E%FDW`svOA#W0sn&h8iVRQK+4@5`8kR$>wauRm6Ib0B4==F`eKF);}(n z5VaIIZ%UZ21!U}XYau4XqRt8zat&!HxH6#+$t&DY$4fZnChRM6l zv&LrklQB$bD@dosvl`Y30@+J_+EtIT7Im#ETBymtD-+pGmlYBQjjZ)1%=WUrji&!) z#QuL8B~KmFJ{;W+a)dh~9sh+&tAe$)^Iuuw@$d@Qh~+{KJHGlwi6%_cEEo^pFud z<&_cpzZvG^9^pFkWg$=fi=oT^$?!JoE_5n>yNcCAKA-=h4AWuEp-c<>b};`p?dW_> z5hnAYyV8(gA6#F>k`lPOmBG7U-F9|N{5J0275dN1_GS;wR|jurZm>LtxK=2FxyuI4 zJpJof)1QaqKhcx2H8G_Nhc8Fwg;6G!_4Ev-rK>tWJaE9Koz8z<4)lv(whKpdfY(3h ze81SIXu;-e;X-n*7`&^S8;;gmnaHw>78ty%lfZ_Ea=~w0Nrnc~Du@gKXI}K}+fN zv__)o3np#z(N0%u+$GfEpy@*z&=3C$E%^^L(l<1?M7L&@M(3-_TsF z|APKaiW~{|e}TT~9)#=+&(+=XY7_0!gFLOS=tHuZ&!M65cReRm3+QYn={Vy>jwE&q zQ-zbP8?;j+GTOBnNMJQAov9n->)P)_`n$_6#%%FifcX#bN9WORa7FNcz*`tukR$2- zFW_@};yW)fsoNV4{{h~wC;p%X?{EB_O3mZ!~If5hu~MzmkT%SMvC&);Lt=3w@=#va3&TT$_*LXiO`% z<^eS1FPfxeah+WU)>WIj;C1UWW`8^swR4x-5nGk=q-?4Lj}5xf#`!}&2-Gcj5+abE z0gxiEOw#b4H8lxhfw;VGQuh;BkXicd>nmm-NHJZ8=X`(J1Y%`cafD57_FGX|RC~)V zV#!ArX-Zt<1BxgEtiT*qH?90BgfL?XFoSG%gWu=UveFO);{LwFHHM!>dg*;wu$0q0 z!)OCpdOoZKa%Ea+icMy|sI(%cy>pkP`h!P0W4`efRfq*vXnx$&SpBrCKCHyquLP2% zBR=32d49wX6Md4(Uo=exZ3jmg>&bisCKFWHSwLvkX3Fq27S6 z6i%9c7mxe)<*NUTQRAs(Z0LVDyYrkk`X|T}mg_F zk{$YQkX_dQe?hWKTlUO!9I;gUd^#TApOZ%k&7^L?XSAHIIL zw|a35*t$VZ3w$q}+=wEEs-_`E7rID&)Z#IOG5%}cN<+);n@B!tq(mE9AieQTZ0a}s4lS}CDF>l%r7VL*VV;TtB5=?@|`MvAd z0S?0f5bz5F)CXxL5KkhYFC%B?uYNEJjR%@EgrH{VvSQ5v&uL9<3P+Q(RfeUv>xebE z0qT6C*bO$IZ_xXR@5nl)IavqpECu{`nFJa2XPE~M1Kb7u_SX5=n;U;MxJKyBUvKnw zk6=^7%&IFBYlF~bEfpc?t=8A|Zh%{0vDX5G=f{r*jJxMcjp_REeb5M$2%P}&z`f82 zj0Bwk=p^Cj2cQq2^b|k#PZ)Ik++lV>A6v9@j;GN2b(Y9<__~yTboO41Bn?4d`$z?$ zM@T;hj9E?RL&7ni^H+ZYDDYWZ06Gw86MSzo+yLpskmyIDPa$>W&YI|1%6`k|%h zGr{i&O`Aw2{+nDh|6g(#LDvE|mZM_^I~?bA_>2R1jXr<`pnnVS`tJg)*$0qD%;h7X zF|T_EwD@8ScNm%>mawx|2ZiBQgy&6@J|(rO-3RbaW$_xwHPi!*zSp%3S%>1%HFFx= zP-dm$TfB>kZ}Bc5z(@V9T0#C@JnLMo{}8XP%c?tVY9*23KNvy{Kp&pr>`q{lPxS&@ z=qZxtmAg?uc$DKH0Vz{~gYG1ZGx8G%*(r$+%3pYS`=LkMb|^^z)?p5~7V7qy;>Z-2 zHbcP#Jq-qgjrEU8aog0*N5C$6K492_pfPk?ynh-*Z=lvo5*Cl}7Eo@cuqv9e8ksI= zMo4`phav5h>I@gEuO6{40Zy`JU0fx-JGgE-;I6sI(_oG_yqoz#$QdZgxMd&e;(UHC z7WQLZhs98@+m~8wzt%U)cStZCa62R`Re=SU9-*DJ+zCK|T! zFHPI0GTATX1t{08*TTI`mYYsTs#{XC3btfoleNH;woG=}3pVpoL7Z|&-{J+mK*B)l z`2ZCLq~%_>CQQ~kY~(QXpkX05_r25bLad<5EGZ)0F#~KM-JKO6hP~`E^u(h-Tj|Y6 zozXJ&JZ7d;F!L%W0pX#a6FmG23T;Wj7W!KR;K`Zv88qlr+PQQ<1dug7+c7JQ&_X4_Ker89s5X{8u&(9A#QW+Y2k6w$1 zx+J6Jq_ujvtGxdh^wKm-(;0pB{@%Nr)T{o#hiWF*<6Hrqxw>WaeT`R)??3dj125M; zD`D!n{qVlF_MSHh%aL!SwA>i%a$EwHC;#Qoe=lxj1`&*ejhT{XG@K%>KxFt7B-3Qa z-cJS|!g_cuwxAIKGB_C5f+J{<6N-gs9N;eu=Tk}ykga%j@>*ddG>_Zn<4jwiyj?pb zEcq_>qYBGlYxG4{7ytVfdPhTcgb2Ezyt0CF6I8oI_Gg7m(PBL7fqFHwThgzl0O2q^ zxT-&p*-M6%xl4kiJQ4^>duMLpwaLu(PW-P&;M}M$2qpI$W5}x*c}%(8Tejm#%h<=I z0=ebEJoh+dwdiu?@QW)-=giKp^3KFlGR(x=7THs-wf_%cZvj=ulBkX1?!jGxYjAfD zY&5tB3GVLh?he7--QC@TdvGT>Z*$I>xik0u?|+NMUW@MP&uVv3U0v0^7JR&G2HABj z^2_2*Q1hpTW7Xjl#gB^MrgUjYiPLUr`Z+;e!4HX`^^5xvpvux_M+wP0Cr za2EL89T?3+E^a!US0O-Plpy7nyFbpO%#nSw!;h#mx(wrm=Kj1idqN6QKpIu~^2DvD zD)JMPW6$%4;1?8%yEQI*pkTlM5$u;;0x9sf;GPe`mmh*F@lG6_zC5a&SaiBW3Mdn) z(mo^-jaZZsjmZ21?9x+}=pX$rVEI-D!ziqYK@g0W+dD6%!uAbL0gM+J`iI;@LC+2! zIIrTtLLkvxbSa*xlOf-K0Y~=3c_qislx#^r3Lq*$V7y>gIls2MYhQLg3dunVM6esL zC>7Lw5rh=*?AT18uHu*kZdHQ!`pqS;%a{XnT~o4Ua(tV&)@QvJ>EX1VGC)wgwIsB8 z><08Rv;gN-sn#=9;70_MCJT(@d;5l7596gr@C_o=NwYo8!x6@<@})@1y#Lj_S_(I!whc-BlpdtzXB<<(Bv>T+O&bnd z4!KzK=bzgK()|W{4r! zC}-3to=%?nW!Za66#yltPMy%lSie}5EeYoa#{UMemHPlV4*d(j=8v=AF2qn9%+Ogk zVbt=b3wL=2z^2{UKLX5zJ1Z0~V5|A+{x>qdwRCES&u;Umvd`{7A8^4iz6T0;&lP`< z?e<3bKMFMcXZi{3!F;w{;LV4EKbdf2alrK0?w-vMac(3qyMqqdCYFE!<% zZj2PX8ZWeDTtcGwXZl>5g7b@(j<^w}0`{*-1IK zxO@pl10%1w=6u3vR}j=TZHlsiTxx*?ZI8*XVv|%P)>?~7a@{G|SdPO^fkmKOie+Xg z27~^DjoIA`Ax=(M$bx(WMyq#WO->;$Q=TU?uE81prA-Oi_RBYhBqb{=>1M6U zy`Ase>fn*F6O`eBjCNIL_O&Z6gf5+z6=<~aCPo8;g}f?I7uM3{;}9wo!2g$tBR}Qq z6+#nD$4C7_FCN<&ng_-KM?&}u6#7W8!YxY)+;q6S82M{GrFT6)?HOJk$BOiVS* zndQENqc1Za%qG^XhO!}+waknuktU~N%jKHnDil+rVXv01

)GNoqLEv}1RbqcVa> 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 - refTweets.impressedTweets.map { refTweet => - ((refTweets.targetUserId, refTweet.tweetId), refTweet) - } - } - - val candidates = candidatePipe - .flatMap { candTweets => - candTweets.recommendedTweets.map { candTweet => - ((candTweets.targetUserId, candTweet.tweetId), candTweet) - } - } - - references.outerJoin(candidates).withReducers(50) - } - - /** - * Convert reference tweets to labeled tweets. We do this so that we can re-use the common - * metric calculations for labeled tweets on reference tweets - */ - def getLabeledReference(referencePipe: TypedPipe[ReferenceTweets]): TypedPipe[LabeledTweet] = { - referencePipe - .flatMap { refTweets => - refTweets.impressedTweets.map { tweet => - // Reference tweets do not have scores - LabeledTweet(refTweets.targetUserId, tweet.tweetId, tweet.authorId, tweet.labels, None) - } - } - } - - def getUniqueCount[T](pipe: TypedPipe[T])(implicit ord: scala.Ordering[T]): Execution[Long] = { - pipe.distinct - .aggregate(size) - .toOptionExecution - .map(_.getOrElse(0L)) - } - - def countUniqueEngagedUsersBy( - labeledTweetsPipe: TypedPipe[LabeledTweet], - f: TweetLabels => Boolean - ): Execution[Long] = { - getUniqueCount[Long](labeledTweetsPipe.collect { case t if f(t.labels) => t.targetUserId }) - } - - def countUniqueLabeledTargetUsers(labeledTweetsPipe: TypedPipe[LabeledTweet]): Execution[Long] = { - getUniqueCount[Long](labeledTweetsPipe.map(_.targetUserId)) - } - - def countUniqueCandTargetUsers(candidatePipe: TypedPipe[CandidateTweets]): Execution[Long] = { - getUniqueCount[Long](candidatePipe.map(_.targetUserId)) - } - - def countUniqueLabeledAuthors(labeledTweetPipe: TypedPipe[LabeledTweet]): Execution[Long] = { - getUniqueCount[Long](labeledTweetPipe.map(_.authorId)) - } - - /** - * Helper function to calculate the basic engagement rates - */ - def getEngagementRate( - basicStats: TweetStats, - engagementCount: TweetEngagementCounts - ): TweetEngagementRates = { - val numTweets = basicStats.numTweets.toDouble - if (numTweets <= 0) throw new IllegalArgumentException("Invalid tweet counts") - val likeRate = engagementCount.like / numTweets - val rtRate = engagementCount.retweet / numTweets - val clickRate = engagementCount.click / numTweets - val engagementRate = engagementCount.hasEngagement / numTweets - TweetEngagementRates(likeRate, rtRate, clickRate, engagementRate) - } - - /** - * Helper function to calculate the basic stats for a pipe of candidate tweets - */ - def getTweetStatsForCandidateExec( - candidatePipe: TypedPipe[CandidateTweets] - ): Execution[TweetStats] = { - val pipe = candidatePipe.map { candTweets => - (candTweets.targetUserId, candTweets.recommendedTweets) - }.sumByKey // Dedup by targetId, in case there exists multiple entries. - - val distinctTweetPipe = pipe.flatMap(_._2.map(_.tweetId)).distinct.aggregate(size) - - val otherStats = pipe - .map { - case (uid, recommendedTweets) => - val scoreSum = recommendedTweets.flatMap(_.score).sum - (recommendedTweets.size.toLong, scoreSum) - } - .sum - .map { - case (numTweets, scoreSum) => - if (numTweets <= 0) throw new IllegalArgumentException("Invalid tweet counts") - val avgScore = scoreSum / numTweets.toDouble - (numTweets, avgScore) - } - ValuePipe - .fold(distinctTweetPipe, otherStats) { - case (numDistinctTweet, (numTweets, avgScore)) => - // no author side information for candidate tweets yet - TweetStats(numTweets, numDistinctTweet, None, Some(avgScore)) - }.getOrElseExecution(TweetStats(0L, 0L, None, None)) - } - - /** - * Helper function to count the total number of engagements - */ - def getLabeledEngagementCountExec( - labeledTweets: TypedPipe[LabeledTweet] - ): Execution[TweetEngagementCounts] = { - labeledTweets - .map { labeledTweet => - val like = toLong(labeledTweet.labels.isLiked) - val retweet = toLong(labeledTweet.labels.isRetweeted) - val click = toLong(labeledTweet.labels.isClicked) - val hasEngagement = toLong(hasCoreEngagementsOrClick(labeledTweet.labels)) - - (like, retweet, click, hasEngagement) - } - .sum - .map { - case (like, retweet, click, hasEngagement) => - TweetEngagementCounts(like, retweet, click, hasEngagement) - } - .getOrElseExecution(TweetEngagementCounts(0L, 0L, 0L, 0L)) - } - - /** - * Count the total number of unique users who have engaged with tweets - */ - def getTargetUserStatsForLabeledTweetsExec( - labeledTweetsPipe: TypedPipe[LabeledTweet] - ): Execution[UserEngagerCounts] = { - val numUniqueTargetUsersExec = countUniqueLabeledTargetUsers(labeledTweetsPipe) - val numUniqueLikeUsersExec = - countUniqueEngagedUsersBy(labeledTweetsPipe, labels => labels.isLiked) - val numUniqueRetweetUsersExec = - countUniqueEngagedUsersBy(labeledTweetsPipe, labels => labels.isRetweeted) - - Execution - .zip( - numUniqueTargetUsersExec, - numUniqueLikeUsersExec, - numUniqueRetweetUsersExec - ) - .map { - case (numTarget, like, retweet) => - UserEngagerCounts( - numDistinctTargetUsers = numTarget, - numDistinctLikeEngagers = like, - numDistinctRetweetEngagers = retweet - ) - } - } - - /** - * Helper function to calculate the basic stats for a pipe of labeled tweets. - */ - def getTweetStatsForLabeledTweetsExec( - labeledTweetPipe: TypedPipe[LabeledTweet] - ): Execution[TweetStats] = { - val uniqueAuthorsExec = countUniqueLabeledAuthors(labeledTweetPipe) - - val uniqueTweetExec = - labeledTweetPipe.map(_.tweetId).distinct.aggregate(size).getOrElseExecution(0L) - val scoresExec = labeledTweetPipe - .map { t => (t.targetUserId, (1, t.algorithmScore.getOrElse(0.0))) } - .sumByKey // Dedup by targetId, in case there exists multiple entries. - .map { - case (uid, (c1, c2)) => - (c1.toLong, c2) - } - .sum - .map { - case (numTweets, scoreSum) => - if (numTweets <= 0) throw new IllegalArgumentException("Invalid tweet counts") - val avgScore = scoreSum / numTweets.toDouble - (numTweets, Option(avgScore)) - } - .getOrElseExecution((0L, None)) - - Execution - .zip(uniqueAuthorsExec, uniqueTweetExec, scoresExec) - .map { - case (numDistinctAuthors, numUniqueTweets, (numTweets, avgScores)) => - TweetStats(numTweets, numUniqueTweets, Some(numDistinctAuthors), avgScores) - } - } - - /** - * Print a update message to the stdout when a step is done. - */ - private def printOnCompleteMsg(stepDescription: String, startTimeMillis: Long): Unit = { - val formatDate = TwitterDateFormat("yyyy-MM-dd hh:mm:ss") - val now = Calendar.getInstance().getTime - - val secondsSpent = (now.getTime - startTimeMillis) / 1000 - println( - s"- ${formatDate.format(now)}\tStep complete: $stepDescription\t " + - s"Time spent: ${secondsSpent / 60}m${secondsSpent % 60}s" - ) - } - - /** - * Calculate the metrics of a pipe of [[CandidateTweets]] - */ - private def getEvaluationResultsForCandidates( - candidatePipe: TypedPipe[CandidateTweets] - ): Execution[CandidateResults] = { - val tweetStatsExec = getTweetStatsForCandidateExec(candidatePipe) - val numDistinctTargetUsersExec = countUniqueCandTargetUsers(candidatePipe) - - Execution - .zip(tweetStatsExec, numDistinctTargetUsersExec) - .map { - case (tweetStats, numDistinctTargetUsers) => - CandidateResults(tweetStats, numDistinctTargetUsers) - } - } - - /** - * Calculate the metrics of a pipe of [[LabeledTweet]] - */ - private def getEvaluationResultsForLabeledTweets( - labeledTweetPipe: TypedPipe[LabeledTweet], - getLabelCorrelations: Boolean = false - ): Execution[LabeledTweetsResults] = { - val tweetStatsExec = getTweetStatsForLabeledTweetsExec(labeledTweetPipe) - val userStatsExec = getTargetUserStatsForLabeledTweetsExec(labeledTweetPipe) - val engagementCountExec = getLabeledEngagementCountExec(labeledTweetPipe) - - val correlationsExec = if (getLabelCorrelations) { - Execution - .zip( - LabelCorrelationsHelper.pearsonCoefficientForLike(labeledTweetPipe), - LabelCorrelationsHelper.cosineSimilarityForLike(labeledTweetPipe), - LabelCorrelationsHelper.cosineSimilarityForLikePerUser(labeledTweetPipe) - ).map { - case (pearsonCoeff, globalCos, avgCos) => - Some(LabelCorrelations(pearsonCoeff, globalCos, avgCos)) - } - } else { - ValuePipe(None).getOrElseExecution(None) // Empty pipe with a None value - } - - Execution - .zip(tweetStatsExec, engagementCountExec, userStatsExec, correlationsExec) - .map { - case (tweetStats, engagementCount, engagerCount, correlationsOpt) => - val engagementRate = getEngagementRate(tweetStats, engagementCount) - LabeledTweetsResults( - tweetStats, - engagerCount, - engagementCount, - engagementRate, - correlationsOpt) - } - } - - private def runAllEvalForCandidates( - candidatePipe: TypedPipe[CandidateTweets], - outerJoinPipe: TypedPipe[((Long, Long), (Option[ReferenceTweet], Option[CandidateTweet]))] - ): Execution[(CandidateResults, CandidateResults)] = { - val t0 = System.currentTimeMillis() - - val candidateNotInIntersectionPipe = - outerJoinPipe - .collect { - case ((targetUserId, _), (None, Some(candTweet))) => (targetUserId, Seq(candTweet)) - } - .sumByKey - .map { case (targetUserId, candTweets) => CandidateTweets(targetUserId, candTweets) } - .forceToDisk - - Execution - .zip( - getEvaluationResultsForCandidates(candidatePipe), - getEvaluationResultsForCandidates(candidateNotInIntersectionPipe) - ).onComplete(_ => printOnCompleteMsg("runAllEvalForCandidates()", t0)) - } - - private def runAllEvalForIntersection( - outerJoinPipe: TypedPipe[((Long, Long), (Option[ReferenceTweet], Option[CandidateTweet]))] - )( - implicit uniqueID: UniqueID - ): Execution[(LabeledTweetsResults, LabeledTweetsResults, LabeledTweetsResults)] = { - val t0 = System.currentTimeMillis() - val intersectionTweetsPipe = outerJoinPipe.collect { - case ((targetUserId, tweetId), (Some(refTweet), Some(candTweet))) => - LabeledTweet(targetUserId, tweetId, refTweet.authorId, refTweet.labels, candTweet.score) - }.forceToDisk - - val likedTweetsPipe = intersectionTweetsPipe.filter(_.labels.isLiked) - val notLikedTweetsPipe = intersectionTweetsPipe.filter(!_.labels.isLiked) - - Execution - .zip( - getEvaluationResultsForLabeledTweets(intersectionTweetsPipe, getLabelCorrelations = true), - getEvaluationResultsForLabeledTweets(likedTweetsPipe), - getEvaluationResultsForLabeledTweets(notLikedTweetsPipe) - ).onComplete(_ => printOnCompleteMsg("runAllEvalForIntersection()", t0)) - } - - private def runAllEvalForReferences( - referencePipe: TypedPipe[ReferenceTweets], - outerJoinPipe: TypedPipe[((Long, Long), (Option[ReferenceTweet], Option[CandidateTweet]))] - ): Execution[(LabeledTweetsResults, LabeledTweetsResults)] = { - val t0 = System.currentTimeMillis() - val labeledReferenceNotInIntersectionPipe = - outerJoinPipe.collect { - case ((targetUserId, _), (Some(refTweet), None)) => - LabeledTweet(targetUserId, refTweet.tweetId, refTweet.authorId, refTweet.labels, None) - }.forceToDisk - - Execution - .zip( - getEvaluationResultsForLabeledTweets(getLabeledReference(referencePipe)), - getEvaluationResultsForLabeledTweets(labeledReferenceNotInIntersectionPipe) - ).onComplete(_ => printOnCompleteMsg("runAllEvalForReferences()", t0)) - } - - def runAllEvaluations( - referencePipe: TypedPipe[ReferenceTweets], - candidatePipe: TypedPipe[CandidateTweets] - )( - implicit uniqueID: UniqueID - ): Execution[String] = { - val t0 = System.currentTimeMillis() - - // Force everything to disk to maximize data re-use - Execution - .zip( - referencePipe.forceToDiskExecution, - candidatePipe.forceToDiskExecution - ).flatMap { - case (referenceDiskPipe, candidateDiskPipe) => - outerJoinReferenceAndCandidate(referenceDiskPipe, candidateDiskPipe).forceToDiskExecution - .flatMap { outerJoinPipe => - val referenceResultsExec = runAllEvalForReferences(referenceDiskPipe, outerJoinPipe) - val intersectionResultsExec = runAllEvalForIntersection(outerJoinPipe) - val candidateResultsExec = runAllEvalForCandidates(candidateDiskPipe, outerJoinPipe) - - Execution - .zip( - referenceResultsExec, - intersectionResultsExec, - candidateResultsExec - ).map { - case ( - (allReference, referenceNotInIntersection), - (allIntersection, intersectionLiked, intersectionNotLiked), - (allCandidate, candidateNotInIntersection)) => - val timeSpent = (System.currentTimeMillis() - t0) / 1000 - val resultStr = Seq( - "===================================================", - s"Evaluation complete. Took ${timeSpent / 60}m${timeSpent % 60}s ", - allReference.format("-----Metrics for all Reference Tweets-----"), - referenceNotInIntersection.format( - "-----Metrics for Reference Tweets that are not in the intersection-----" - ), - allIntersection.format("-----Metrics for all Intersection Tweets-----"), - intersectionLiked.format("-----Metrics for Liked Intersection Tweets-----"), - intersectionNotLiked.format( - "-----Metrics for not Liked Intersection Tweets-----"), - allCandidate.format("-----Metrics for all Candidate Tweets-----"), - candidateNotInIntersection.format( - "-----Metrics for Candidate Tweets that are not in the intersection-----" - ), - "===================================================\n" - ).mkString("\n") - println(resultStr) - resultStr - } - .onComplete(_ => - printOnCompleteMsg( - "Evaluation complete. Check stdout or output logs for results.", - t0)) - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/EvaluationReferenceDataExtraction.docx b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/EvaluationReferenceDataExtraction.docx new file mode 100644 index 0000000000000000000000000000000000000000..b92c9151c9ed4924899b617cd8f4a5fdb8a186f2 GIT binary patch literal 39850 zcmagEV|ZoF)-D{|wr#Uxbdrv3yJOqw*tTukwr!_l8z=odd%qj+Ip6nZu4`4zF>Z`G zS5=Kf_6INs3IG5A1OQzsyK04eK}-T50Kh01008pWsD_ZWm4lI$gN~xBjgh?;or|SK zLxPmd8b89X%Xid7dR_u|A$Zi%T^kA;niwqMsOL+Vq`*tTY<0f`)n|Z6@`@;BB>cfZ2zj1S(BP`P8TOoZVjD&IlVS2bYSV*JS*Q1L zZ)c)sAs>;<_hmXV<&2+cP_4ck$sxK|N}|7X>tp-vYn&#i>+DRFY-`tg3gBD@p{)^S z_bt2WoX1p{PrzzR!tWH+H<8Q(_s^|=29QBxdv$+-E-J$m=Iwb~D%v>U8+|0oeMOPd29W)aD!P*W;D7q6 z-X;(L0QA?Vj-8Q(Jw4r@YenpY1TZ6l&n2(OFlmuhqmpp`inj2vR6cKa^7uuem6urI zYG;R>u$C%X58lz`o`LaVS|0W?b)kj7ioV){U(QmG>K5g7eVfiYL?UFnFQJR#Zh)Fa zYS=w79KR9SBb%`@0Wb9?@_+_q-NlSRrJ%45m8BS5aX?8N;vKXDg^Hsm?VL53wWwqx zYiLnL%f5wk=o4R~gP5)l|4FnBqC$$aAtO3RKAgBM@|}?Q(Nttr0!gsYcl~ z-Lb!rjDofc$sO24J5oP~N&UB?ndZIkhqNTb6Dn?##*Ul*a^5ymcxMbXNtfykQOlkX zBQqLom;Y%{@Gocuv#-Z|=F1?&FM|xN4P@=CZS3g{tnG~cJmeX%W72&L2qKRjBJ)zp zA-4z+BH~nlC!rEzD89=r4=k)w7Gs%g6I*-vmg?EmPIz0~L$@}(8|)2Dzy^V_f%ri& zm%fIf&}yh3Yx-#GubCoLoD~THy_elDb2nrrTn3}vVRBe7P}P~h;%SUpl8eDy#Qn9b zEc3r62{W4I3v-SI6%eIXekt?EQnV7o5*(mV{`U373yC9+twStnD#QawM=Z_(3`y+Q zlbqBBnOiP{^taow0CB>qRF~O3-qc{kT5E(|bEs~8F}Pv$_QF+%4LJKgpeuivZbVTH z#)Nb3^b86E56H|fmm=@ntjx3>dTwuLyEWwmtW^fn6a)j8h?z5UUR=)amjkh`;k0Sp zUr;kNKfk+9YftLK=U~{(T#fwRIL1Mqr012skpnm6%wrM+nGyeZcWuU)7B7xcB#;gw z-YPar(>alQT<87y{R49uhx&>A8U*9S1WucB&ROW=t@j4|KkIV0wuXNCRTm2o004x4 zuZy0I&0l3v9J5+uKxluZ2GMc|H3Jur!-(};6qpg(z^aZ-Z<-$^l86CmVchldd=5tC z{6&8s!d=JxT0i=_Bw!3)FKw!XI`*79ENi;~)ld~WbhtKgL}U+A3R;4yJbeL3>5!r#TRG}ZRHr|FjR$UHFGD@$unNb&S?^xhCT-&}{bs~3a^_U?)PI#A+pxTu zEXN=dS_b@HWm@K1JjKKMeeeE6EinNWP83M*of%}zwakoSC0G<)iU6BYx8rKu6vQ0b z-Qm90@Hb+%iKPbmw>e_|Q#=}*n>m=LeyDwPgZyoNujzYHo3e}xiZuZA(E8Il0)^TV zmEfC*^XM*BfuU?pR^WFbitv$H;skR&>z+HrELGoi+vw(px)SbaxE~L2ATQj4%Wr7H zRI5VZ>bTKyjVZ|9HKW$IXY3p>aTPbfs(_(4`>%%?)yVPuW;iRYh$NnqGrS@-W7TC6 zyL9D*Je7mwB#F4M`uNz?29y^nM@K?S>RQqo5vWFl4_w zsqf-Hnqs{p&|OB@*FoYXokLo@kA#om`8Hc@B_;4qsBDpN2c@Gc zxm(D@B=xU}^A*T^?`Th>f1}5{f=qk9#r|BlKg0je2O})K!=Mok06;(F?-$nD+Rl*v z>#cRP{92s;JQ?R&md;r0Xdj(jf;(qs1gyXuC26xCsNGdmTmp@zB@)n~^;=mY;}%5Mjdg7%!1b{?~-MR5LQu zKyQkC5_6B}tnEtupeXT4>}tAgRilpe{Jqj}%8vj5+aZo*JvoWcwAy=#G=27t^{S<; zJ|5Uwrb;4xLdfl%;A_f6o3WuQFmL=oB?{*LShy0I1HlBxXjEoy8j)|NWJZe2I42oo z0H%|LUN1&YbIu0YBUyK_op8fX332%&tnFCjya2|&$K!_@Z@HM?8?ouE3V5f zPF>P`J1%hEH$Y3imjm=t?-p6Bgk%O^g5$*9*(@qe7LCAA#r6wh_Rl=PetD0QX#ufr(6Q^I2-|fR@dM+XG*) zPjrqn-(8P#UG0Cp_svH8)-Gwk$&O|I*0~W0-gtD8M9{U_PnQsHCO)3OCk9N?XIOI% z2=f$)g7eKK;sH|PlusJmW3nb~aSC$QuXn&=qD$(Q_5=??S!Iwdr^Pj;lx|n>GwKhq ziKKg};@S{+-S>*Vr0U%A+Bmt7($3v{_LUhp81(#{fsR6E<*3OW1j+XQ4`$O zU#}SAE}S_xU7bzmNG_q8)XWd@%g~6}Lszxi2h0XrcMI?qs`z04_>8tFRu$zf5;nu@ zt=>_5U2JAW4nsX5YDb^2gc?kUW+TKtezQxl3A5a?-=TkKSHRYcgIu^d{TKYE7}hxD zf#AdMc@*SzAPH_8PC2p*e?jqID)2D4^fw_U2I;hEG|1K@V1iS?43L6LPb>tXq8drD z1}aQm67(U?aCAO1E4yT>gA~?kh3Ph2v88*}_JShEdjpvE?79ORp!`YU5a7;fcSivj z3bT#}*u=G`fTk@bE@B=Ey+*m`y^uXsb3Q#zr}|xCQg-mmOd}%w_DKCjkBCjkNeFSM zOM(f-hz??O68tUsayr-+L<*D?(ghJ5kEjO&#|vIu$~Tg8e0oQi0g&J!gNAm|N! z9Qnz=RLKUT1*aLuJjWO2X1kYQt_V=(nX8c|dfQ40*-UCc66w8+_STX%h8v*CL3oIj z#`BwO42p?wQD+Zbsik1W$`!6H>8M3fIXCnobbU68C9g zo{=6GWu?t3_Rg}!Eafb=3rJ5|41NG!$C7!M{U9=l7Nl$+?HFl_^stW_OOn)T7X=}X zr6tJBr@`xCi0>a{`XUFUW1DVNgmV@*v={C110oMTD5R>A6c+;Qf$d|~kFo!Z=hf?;AJJOTevdK?& z8eqY&2!|fP!id!MCMIxKcs&TXK0ouYzKhbVv4vt_D5SfA0IuzmE%L2Yht$^Gu8Hs; zTrNdb*m1p4J!V+)%|&2(QW=zn`7@eMsTe$W$mLL2Lx96Xh_4CZ+mp!ge+EN%7y}Pe zp-8#nBQB1chlbgDj(ru!|u^ z#E^MT3}=9}WiTHCK5Sk$@XAjkm{}v(hHta$n$*<3JjX-lsnM8xrNscy zsd^)8A-FxFS*BhZgg+UVOcqKF$GZ-&6pzGuTFLnI(P-Zk>R?x^*fUkIBh2@(pGY!w z!0`@DS#xRtxShA%Im*R}_H~KgeX)>PEtyKJW*7JQqcU0*tdm8uBm%oyU+vH2$6@4$ z$ZieTAKoR@Ez0WjK95PRzx&(Qgj#gII`Gd~G~ej?JN{@X9Onw3lM+9hZ-z`7v2&;` zE2p}AQXIAuC!|uMIuHc1x

7vb=k|LAiib;^bB;v!f*Mjx}53h&(g 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 - Execution.withId { implicit uniqueId => - Execution.withArgs { args => - val defaultSampleRate = 1.0 - val recaps = - TimelinesEngagementDataExtractor.readTimelinesRecapTweets( - recapTweets = - DailySuffixFeatureSource(TimelinesEngagementDataExtractor.RecapTweetHdfsPath).read, - sampleRate = defaultSampleRate - )(dateRange) - val recTweets = - TimelinesEngagementDataExtractor.readTimelinesRecTweets( - recTweets = - DailySuffixFeatureSource(TimelinesEngagementDataExtractor.RecTweetHdfsPath).read, - sampleRate = defaultSampleRate - )(dateRange) - - (recaps ++ recTweets).writeDALSnapshotExecution( - TweetEvaluationTimelinesReferenceSetScalaDataset, - D.Daily, - D.Suffix(outputPath), - D.EBLzo(), - dateRange.end - ) - } - } - } -} - -/** - * Ad-hoc version of the job to process a subset of the Timeline data, either to catch up with data - * on a particular day, or to generate human readable data for debugging. - ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/evaluation:tweet_evaluation_timelines_reference_adhoc - - oscar hdfs --screen --user cassowary --bundle tweet_evaluation_timelines_reference_adhoc \ - --tool com.twitter.simclusters_v2.scalding.evaluation.AdhocTimelinesDataExtraction \ - -- --date 2018-11-15 --output_dir /user/cassowary/your_ldap/test_htl_data/recap --sample_rate 0.01 \ - --recap --rectweet --output_tsv - */ -object AdhocTimelinesDataExtraction extends TwitterExecutionApp { - - @Override - def job: Execution[Unit] = { - Execution.withArgs { args => - implicit val dateRange: DateRange = - DateRange.parse(args.list("date"))(DateOps.UTC, DateParser.default) - - val outputDir = args("output_dir") - val readRecTweet = args.boolean("rectweet") - val readRecap = args.boolean("recap") - val sampleRate = args.double("sample_rate") - val useTsv = args.boolean("output_tsv") - - if (!readRecTweet && !readRecap) { - throw new IllegalArgumentException("Must read at least some data!") - } - val recTweets = if (readRecTweet) { - println("RecTweets are included in the dataset") - TimelinesEngagementDataExtractor.readTimelinesRecTweets( - recTweets = - DailySuffixFeatureSource(TimelinesEngagementDataExtractor.RecTweetHdfsPath).read, - sampleRate = sampleRate)(dateRange) - } else { - TypedPipe.empty - } - - val recaps = if (readRecap) { - println("Recaps are included in the dataset") - TimelinesEngagementDataExtractor.readTimelinesRecapTweets( - recapTweets = - DailySuffixFeatureSource(TimelinesEngagementDataExtractor.RecapTweetHdfsPath).read, - sampleRate = sampleRate - )(dateRange) - } else { - TypedPipe.empty - } - - val referenceTweets = recaps ++ recTweets - - if (useTsv) { - // Write in plain text in tsv format for human readability - referenceTweets - .map(t => (t.targetUserId, t.impressedTweets)) - .writeExecution(TypedTsv[(Long, Seq[ReferenceTweet])](outputDir)) - } else { - // Write in compact thrift lzo format - referenceTweets - .writeExecution(TimelineDataExtractorFixedPathSource(outputDir)) - } - } - } -} - -/** - * Base class to provide functions to parse tweet engagement data from Home Timeline's data. - * We are mainly interested in 2 tweet data sets from Home Timeline: - * 1. Recap tweet: Tweets + RTs from user's follow graph. We are interested in out of network RTs. - * 2. RecTweet: Out of network tweets not from user's follow graph. - */ -object TimelinesEngagementDataExtractor { - - val RecapTweetHdfsPath = "/atla/proc2/user/timelines/processed/suggests/recap/data_records" - val RecTweetHdfsPath = "/atla/proc2/user/timelines/processed/injections/rectweet/data_records" - - // Timelines name the same feature differently depending on the surface area (ex. recap vs rectweet). - // For each data source we extract the features with different feature names. Detail: - def toRecapTweetLabels(record: RichDataRecord): TweetLabels = { - val isClicked = record.getFeatureValue(RecapFeatures.IS_CLICKED) - val isFav = record.getFeatureValue(RecapFeatures.IS_FAVORITED) - val isRT = record.getFeatureValue(RecapFeatures.IS_RETWEETED) - val isQuoted = record.getFeatureValue(RecapFeatures.IS_QUOTED) - val isReplied = record.getFeatureValue(RecapFeatures.IS_REPLIED) - TweetLabels(isClicked, isFav, isRT, isQuoted, isReplied) - } - - def toRecTweetLabels(record: RichDataRecord): TweetLabels = { - // Refer to ITLFeatures for more labels - val isClicked = record.getFeatureValue(ITLFeatures.IS_CLICKED) - val isFav = record.getFeatureValue(ITLFeatures.IS_FAVORITED) - val isRT = record.getFeatureValue(ITLFeatures.IS_RETWEETED) - val isQuoted = record.getFeatureValue(ITLFeatures.IS_QUOTED) - val isReplied = record.getFeatureValue(ITLFeatures.IS_REPLIED) - TweetLabels(isClicked, isFav, isRT, isQuoted, isReplied) - } - - /** - * Return Recap tweets, which are in-network tweets. Here we only filter for Retweets of tweets - * that are outside the user's follow graph. - */ - def readTimelinesRecapTweets( - recapTweets: DataSetPipe, - sampleRate: Double - )( - implicit dateRange: DateRange - ): TypedPipe[ReferenceTweets] = { - // recapTweets are in network tweets. We want to discover RTs of OON tweets. - // For Retweets, we check IS_RETWEET and use SOURCE_TWEET_ID, and then check - // PROBABLY_FROM_FOLLOWED_AUTHOR, which filters in network tweet from user's top 1000 follow graph. - - recapTweets.richRecords - .sample(sampleRate) - .filter { record => - val isInDateRange = dateRange.contains(RichDate(record.getFeatureValue(TIMESTAMP).toLong)) - val isLingeredImpression = record.getFeatureValue(IS_LINGER_IMPRESSION) - val isInNetwork = - record.getFeatureValue(RecapFeatures.PROBABLY_FROM_FOLLOWED_AUTHOR) // approximate - val isRetweet = record.getFeatureValue(RecapFeatures.IS_RETWEET) - isRetweet && (!isInNetwork) && isInDateRange && isLingeredImpression - } - .flatMap { record => - for { - userId <- Option(record.getFeatureValue(USER_ID)).map(_.toLong) - sourceTweetId <- Option(record.getFeatureValue(SOURCE_TWEET_ID)).map( - _.toLong - ) // source tweetId is the RT id - sourceAuthorId <- Option(record.getFeatureValue(SOURCE_AUTHOR_ID)).map(_.toLong) - timestamp <- Option(record.getFeatureValue(TIMESTAMP)).map(_.toLong) - labels = toRecapTweetLabels(record) - } yield { - ( - userId, - Seq( - ReferenceTweet( - sourceTweetId, - sourceAuthorId, - timestamp, - DisplayLocation.TimelinesRecap, - labels)) - ) - } - } - .sumByKey - .map { case (uid, tweetSeq) => ReferenceTweets(uid, tweetSeq) } - } - - /** - * Return RecTweets, which are out of network tweets served in the Timeline. - */ - def readTimelinesRecTweets( - recTweets: DataSetPipe, - sampleRate: Double - )( - implicit dateRange: DateRange - ): TypedPipe[ReferenceTweets] = { - // recTweets contain strictly out of network injection tweets - - recTweets.richRecords - .sample(sampleRate) - .filter { record => - val isInDateRange = dateRange.contains(RichDate(record.getFeatureValue(TIMESTAMP).toLong)) - val isLingeredImpression = record.getFeatureValue(IS_LINGER_IMPRESSION) - - isInDateRange && isLingeredImpression - } - .flatMap { record => - for { - userId <- Option(record.getFeatureValue(USER_ID)).map(_.toLong) - tweetId <- Option(record.getFeatureValue(TWEET_ID)).map(_.toLong) - authorId <- Option(record.getFeatureValue(AUTHOR_ID)).map(_.toLong) - timestamp <- Option(record.getFeatureValue(TIMESTAMP)).map(_.toLong) - labels = toRecTweetLabels(record) - } yield { - ( - userId, - Seq( - ReferenceTweet( - tweetId, - authorId, - timestamp, - DisplayLocation.TimelinesRectweet, - labels)) - ) - } - } - .sumByKey - .map { case (uid, tweetSeq) => ReferenceTweets(uid, tweetSeq) } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/LabelCorrelationsHelper.docx b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/LabelCorrelationsHelper.docx new file mode 100644 index 0000000000000000000000000000000000000000..ff3516462fb305a796483728f49569151388c7cd GIT binary patch literal 37477 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 Zp|%bKyjg)c2$ZV?84`in<6SR^2LJ_I3c~;Z literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/LabelCorrelationsHelper.scala b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/LabelCorrelationsHelper.scala deleted file mode 100644 index 8d86f5a6a..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/LabelCorrelationsHelper.scala +++ /dev/null @@ -1,61 +0,0 @@ -package com.twitter.simclusters_v2.scalding.evaluation - -import com.twitter.algebird.AveragedValue -import com.twitter.scalding.Execution -import com.twitter.scalding.typed.TypedPipe -import com.twitter.simclusters_v2.scalding.common.Util - -/** - * Utility object for correlation measures between the algorithm scores and the user engagements, - * such as the number of Likes. - */ -object LabelCorrelationsHelper { - - private def toDouble(bool: Boolean): Double = { - if (bool) 1.0 else 0.0 - } - - /** - * Given a pipe of labeled tweets, calculate the cosine similarity between the algorithm scores - * and users' favorite engagements. - */ - def cosineSimilarityForLike(labeledTweets: TypedPipe[LabeledTweet]): Execution[Double] = { - labeledTweets - .map { tweet => (toDouble(tweet.labels.isLiked), tweet.algorithmScore.getOrElse(0.0)) } - .toIterableExecution.map { iter => Util.cosineSimilarity(iter.iterator) } - } - - /** - * Given a pipe of labeled tweets, calculate cosine similarity between algorithm score and users' - * favorites engagements, on a per user basis, and return the average of all cosine - * similarities across all users. - */ - def cosineSimilarityForLikePerUser(labeledTweets: TypedPipe[LabeledTweet]): Execution[Double] = { - val avg = AveragedValue.aggregator.composePrepare[(Unit, Double)](_._2) - - labeledTweets - .map { tweet => - ( - tweet.targetUserId, - Seq((toDouble(tweet.labels.isLiked), tweet.algorithmScore.getOrElse(0.0))) - ) - } - .sumByKey - .map { - case (userId, seq) => - ((), Util.cosineSimilarity(seq.iterator)) - } - .aggregate(avg) - .getOrElseExecution(0.0) - } - - /** - * Calculates the Pearson correlation coefficient for the algorithm scores and user's favorite - * engagement. Note this function call triggers a writeToDisk execution. - */ - def pearsonCoefficientForLike(labeledTweets: TypedPipe[LabeledTweet]): Execution[Double] = { - labeledTweets - .map { tweet => (toDouble(tweet.labels.isLiked), tweet.algorithmScore.getOrElse(0.0)) } - .toIterableExecution.map { iter => Util.computeCorrelation(iter.iterator) } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/SimClustersEvaluationAdhocApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/SimClustersEvaluationAdhocApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..6f0a6446598c1fe89eb40dce673a22a9bfdf64ca GIT binary patch literal 39693 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/SimClustersEvaluationAdhocApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/evaluation/SimClustersEvaluationAdhocApp.scala deleted file mode 100644 index 3ddded4cf..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/evaluation/SimClustersEvaluationAdhocApp.scala +++ /dev/null @@ -1,210 +0,0 @@ -package com.twitter.simclusters_v2.scalding.evaluation - -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.ProcAtla -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.candidate_source.ClusterRanker -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import com.twitter.simclusters_v2.hdfs_sources.ClusterTopKTweetsHourlySuffixSource -import com.twitter.simclusters_v2.hdfs_sources.SimclustersV2InterestedInScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.TweetEvaluationTimelinesReferenceSetScalaDataset -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.thriftscala.CandidateTweet -import com.twitter.simclusters_v2.thriftscala.CandidateTweets -import com.twitter.simclusters_v2.thriftscala.ClusterTopKTweetsWithScores -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import com.twitter.simclusters_v2.thriftscala.DisplayLocation -import com.twitter.simclusters_v2.thriftscala.ReferenceTweets -import com.twitter.simclusters_v2.scalding.offline_job.OfflineRecConfig -import com.twitter.simclusters_v2.scalding.offline_job.OfflineTweetRecommendation -import java.util.TimeZone - -/** - * Do evaluations for SimClusters' tweet recommendations by using offline datasets. - * The job does the following: - * 1. Take in a test date range, for which the offline simclusters rec will be evaluated - * 2. For all users that had tweet impressions in timelines during the period, generate offline - * SimClusters candidate tweets for these users - * 3. Run offline evaluation and return metrics - -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/evaluation:simcluster_offline_eval_adhoc - -Note: Never specify reference date range across more than 1 day! -oscar hdfs --user cassowary --screen --screen-detached --tee your_ldap/prod_percentile \ - --bundle simcluster_offline_eval_adhoc \ - --tool com.twitter.simclusters_v2.scalding.evaluation.SimClustersEvaluationAdhocApp \ - -- --cand_tweet_date 2019-03-04T00 2019-03-04T23 \ - --ref_tweet_date 2019-03-05T00 2019-03-05T01 \ - --timeline_tweet rectweet \ - --sample_rate 0.05 \ - --max_cand_tweets 16000000 \ - --min_tweet_score 0.0 \ - --user_interested_in_dir /user/frigate/your_ldap/interested_in_copiedFromAtlaProc_20190228 \ - --cluster_top_k_dir /user/cassowary/your_ldap/offline_simcluster_20190304/cluster_top_k_tweets \ - --output_dir /user/cassowary/your_ldap/prod_percentile \ - --toEmailAddress your_ldap@twitter.com \ - --testRunName TestingProdOn0305Data - */ -object SimClustersEvaluationAdhocApp extends TwitterExecutionApp { - private val maxTweetResults = 40 - private val maxClustersToQuery = 20 - - @Override - def job: Execution[Unit] = { - Execution.withArgs { args => - Execution.withId { implicit uniqueId => - implicit val tz: TimeZone = DateOps.UTC - implicit val dateParser: DateParser = DateParser.default - - val candTweetDateRange = DateRange.parse(args.list("cand_tweet_date")) - val refTweetDateRange = DateRange.parse(args.list("ref_tweet_date")) - val toEmailAddressOpt = args.optional("toEmailAddress") - val testRunName = args.optional("testRunName") - - println( - s"Using SimClusters tweets from ${candTweetDateRange.start} to ${candTweetDateRange.end}") - println(s"Using Timelines tweets on the day of ${refTweetDateRange.start}") - - // separate tweets from different display locations for now - val tweetType = args("timeline_tweet") match { - case "rectweet" => DisplayLocation.TimelinesRectweet - case "recap" => DisplayLocation.TimelinesRecap - case e => - throw new IllegalArgumentException(s"$e isn't a valid timeline display location") - } - - val sampleRate = args.double("sample_rate", 1.0) - val validRefPipe = getProdTimelineReference(tweetType, refTweetDateRange, sampleRate) - val targetUserPipe = validRefPipe.map { _.targetUserId } - - // Read a fixed-path in atla if provided, otherwise read prod data from atla for date range - val userInterestInPipe = args.optional("user_interested_in_dir") match { - case Some(fixedPath) => - println(s"user_interested_in_dir is provided at: $fixedPath. Reading fixed path data.") - TypedPipe.from(AdhocKeyValSources.interestedInSource(fixedPath)) - case _ => - println(s"user_interested_in_dir isn't provided. Reading prod data.") - interestedInProdSource(candTweetDateRange) - } - - // Offline simulation of this dataset - val clusterTopKDir = args("cluster_top_k_dir") - println(s"cluster_top_k_dir is defined at: $clusterTopKDir") - val clusterTopKPipe = TypedPipe.from( - ClusterTopKTweetsHourlySuffixSource(clusterTopKDir, candTweetDateRange) - ) - - // Configs for offline simcluster tweet recommendation - val maxTweetRecs = args.int("max_cand_tweets", 30000000) - val minTweetScoreThreshold = args.double("min_tweet_score", 0.0) - - val offlineRecConfig = OfflineRecConfig( - maxTweetRecs, - maxTweetResults, - maxClustersToQuery, - minTweetScoreThreshold, - ClusterRanker.RankByNormalizedFavScore - ) - println("SimClusters offline config: " + offlineRecConfig) - - getValidCandidate( - targetUserPipe, - userInterestInPipe, - clusterTopKPipe, - offlineRecConfig, - candTweetDateRange - ).flatMap { validCandPipe => - val outputDir = args("output_dir") - EvaluationMetricHelper.runAllEvaluations(validRefPipe, validCandPipe).map { results => - toEmailAddressOpt.foreach { address => - Util.sendEmail( - results, - "Results from tweet evaluation test bed " + testRunName.getOrElse(""), - address) - } - TypedPipe.from(Seq((results, ""))).writeExecution(TypedTsv[(String, String)](outputDir)) - } - } - } - } - } - - /** - * Given a pipe of raw timelines reference engagement data, collect the engagements that took - * place during the given date range, then sample these engagements - */ - private def getProdTimelineReference( - displayLocation: DisplayLocation, - batchDateRange: DateRange, - sampleRate: Double - )( - implicit tz: TimeZone - ): TypedPipe[ReferenceTweets] = { - // Snapshot data timestamps itself with the last possible time of the day. +1 day to cover it - val snapshotRange = DateRange(batchDateRange.start, batchDateRange.start + Days(1)) - val timelinesRefPipe = DAL - .readMostRecentSnapshot(TweetEvaluationTimelinesReferenceSetScalaDataset, snapshotRange) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - - timelinesRefPipe - .flatMap { refTweets => - val tweets = refTweets.impressedTweets - .filter { refTweet => - refTweet.timestamp >= batchDateRange.start.timestamp && - refTweet.timestamp <= batchDateRange.end.timestamp && - refTweet.displayLocation == displayLocation - } - if (tweets.nonEmpty) { - Some(ReferenceTweets(refTweets.targetUserId, tweets)) - } else { - None - } - } - .sample(sampleRate) - } - - /** - * Given a list of target users, simulate SimCluster's online serving logic offline for these - * users, then convert them into [[CandidateTweets]] - */ - private def getValidCandidate( - targetUserPipe: TypedPipe[Long], - userIsInterestedInPipe: TypedPipe[(Long, ClustersUserIsInterestedIn)], - clusterTopKTweetsPipe: TypedPipe[ClusterTopKTweetsWithScores], - offlineConfig: OfflineRecConfig, - batchDateRange: DateRange - )( - implicit uniqueID: UniqueID - ): Execution[TypedPipe[CandidateTweets]] = { - OfflineTweetRecommendation - .getTopTweets(offlineConfig, targetUserPipe, userIsInterestedInPipe, clusterTopKTweetsPipe) - .map(_.map { - case (userId, scoredTweets) => - val tweets = scoredTweets.map { tweet => - CandidateTweet(tweet.tweetId, Some(tweet.score), Some(batchDateRange.start.timestamp)) - } - CandidateTweets(userId, tweets) - }) - } - - /** - * Read interested in key-val store from atla-proc from the given date range - */ - private def interestedInProdSource( - dateRange: DateRange - ): TypedPipe[(Long, ClustersUserIsInterestedIn)] = { - implicit val timeZone: TimeZone = DateOps.UTC - - DAL - .readMostRecentSnapshot(SimclustersV2InterestedInScalaDataset, dateRange.embiggen(Weeks(1))) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { - case KeyVal(key, value) => (key, value) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/BUILD.bazel deleted file mode 100644 index ed5c9d6b8..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/BUILD.bazel +++ /dev/null @@ -1,74 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = [ - "bazel-compatible", - "bazel-only", - ], - dependencies = [ - "src/scala/com/twitter/onboarding/relevance/source:utt_account_recommendations-scala", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/scala/com/twitter/wtf/entity_real_graph/common", - ], -) - -hadoop_binary( - name = "inferred_entities_from_known_for-adhoc", - main = "com.twitter.simclusters_v2.scalding.inferred_entities.InferredKnownForSemanticCoreEntitiesAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":inferred_entities", - ], -) - -hadoop_binary( - name = "inferred_entities_from_known_for", - main = "com.twitter.simclusters_v2.scalding.inferred_entities.InferredKnownForSemanticCoreEntitiesBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":inferred_entities", - ], -) - -hadoop_binary( - name = "inferred_entities_from_interested_in-adhoc", - main = "com.twitter.simclusters_v2.scalding.inferred_entities.InferredInterestedInSemanticCoreEntitiesAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":inferred_entities", - ], -) - -hadoop_binary( - name = "inferred_entities_from_interested_in", - main = "com.twitter.simclusters_v2.scalding.inferred_entities.InferredInterestedInSemanticCoreEntitiesBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":inferred_entities", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..a80afdd74cb7d52224a4e84b581d14d23424fec6 GIT binary patch literal 37055 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntities.scala b/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntities.scala deleted file mode 100644 index 67b1574b7..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntities.scala +++ /dev/null @@ -1,92 +0,0 @@ -package com.twitter.simclusters_v2.scalding.inferred_entities - -import com.twitter.scalding.DateRange -import com.twitter.scalding.Days -import com.twitter.scalding.typed.TypedPipe -import com.twitter.simclusters_v2.common.ClusterId -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources.EntityEmbeddingsSources -import com.twitter.simclusters_v2.thriftscala.ClusterType -import com.twitter.simclusters_v2.thriftscala.EmbeddingType -import com.twitter.simclusters_v2.thriftscala.InferredEntity -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.simclusters_v2.thriftscala.SemanticCoreEntityWithScore -import com.twitter.simclusters_v2.thriftscala.SimClustersInferredEntities -import com.twitter.simclusters_v2.thriftscala.SimClustersSource -import java.util.TimeZone - -/** - * Opt-out compliance for SimClusters means offering users an option to opt out of clusters that - * have inferred legible meanings. This file sets some of the data sources & thresholds from which - * the inferred entities are considered legible. One should always refer to the sources & constants - * here for SimClusters' inferred entity compliance work - */ -object InferredEntities { - val MHRootPath: String = - "/user/cassowary/manhattan_sequence_files/simclusters_v2_inferred_entities" - - // Convenience objects for defining cluster sources - val InterestedIn2020 = - SimClustersSource(ClusterType.InterestedIn, ModelVersion.Model20m145k2020) - - val Dec11KnownFor = SimClustersSource(ClusterType.KnownFor, ModelVersion.Model20m145kDec11) - - val UpdatedKnownFor = SimClustersSource(ClusterType.KnownFor, ModelVersion.Model20m145kUpdated) - - val KnownFor2020 = SimClustersSource(ClusterType.KnownFor, ModelVersion.Model20m145k2020) - - /** - * This is the threshold at which we consider a simcluster "legible" through an entity - */ - val MinLegibleEntityScore = 0.6 - - /** - * Query for the entity embeddings that are used for SimClusters compliance. We will use these - * entity embeddings for a cluster to allow a user to opt out of a cluster - */ - def getLegibleEntityEmbeddings( - dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] = { - val entityEmbeddings = EntityEmbeddingsSources - .getReverseIndexedSemanticCoreEntityEmbeddingsSource( - EmbeddingType.FavBasedSematicCoreEntity, - ModelVersions.Model20M145K2020, // only support the latest 2020 model - dateRange.embiggen(Days(7)(timeZone)) // read 7 days before & after to give buffer - ) - filterEntityEmbeddingsByScore(entityEmbeddings, MinLegibleEntityScore) - } - - // Return entities whose score are above threshold - def filterEntityEmbeddingsByScore( - entityEmbeddings: TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])], - minEntityScore: Double - ): TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] = { - entityEmbeddings.flatMap { - case (clusterId, entities) => - val validEntities = entities.filter { entity => entity.score >= minEntityScore } - if (validEntities.nonEmpty) { - Some((clusterId, validEntities)) - } else { - None - } - - } - } - - /** - * Given inferred entities from different sources, combine the results into job's output format - */ - def combineResults( - results: TypedPipe[(UserId, Seq[InferredEntity])]* - ): TypedPipe[(UserId, SimClustersInferredEntities)] = { - results - .reduceLeft(_ ++ _) - .sumByKey - .map { - case (userId, inferredEntities) => - (userId, SimClustersInferredEntities(inferredEntities)) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntitiesFromInterestedIn.docx b/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntitiesFromInterestedIn.docx new file mode 100644 index 0000000000000000000000000000000000000000..6612172325b61bf979dccd5e2fb3823d0863a57a GIT binary patch literal 40593 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntitiesFromInterestedIn.scala b/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntitiesFromInterestedIn.scala deleted file mode 100644 index 212d851e1..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredEntitiesFromInterestedIn.scala +++ /dev/null @@ -1,377 +0,0 @@ -package com.twitter.simclusters_v2.scalding.inferred_entities - -import com.twitter.algebird.Max -import com.twitter.scalding.Args -import com.twitter.scalding.DateRange -import com.twitter.scalding.Days -import com.twitter.scalding.Duration -import com.twitter.scalding.Execution -import com.twitter.scalding.RichDate -import com.twitter.scalding.TypedPipe -import com.twitter.scalding.TypedTsv -import com.twitter.scalding.UniqueID -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.ProcAtla -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.ClusterId -import com.twitter.simclusters_v2.common.UTTEntityId -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources._ -import com.twitter.simclusters_v2.scalding.common.TypedRichPipe._ -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import com.twitter.simclusters_v2.thriftscala.EntitySource -import com.twitter.simclusters_v2.thriftscala.InferredEntity -import com.twitter.simclusters_v2.thriftscala.SemanticCoreEntityWithScore -import com.twitter.simclusters_v2.thriftscala.SimClustersInferredEntities -import com.twitter.simclusters_v2.thriftscala.SimClustersSource -import com.twitter.simclusters_v2.thriftscala.UserAndNeighbors -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone -import com.twitter.onboarding.relevance.source.UttAccountRecommendationsScalaDataset -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.wtf.entity_real_graph.scalding.common.SemanticCoreFilters.getValidSemanticCoreEntities -import com.twitter.wtf.entity_real_graph.scalding.common.DataSources - -/** - * Infer interested-in entities for a given user. Depending on how and where the entity source comes - * from, this can be achieve a number of ways. For example, we can use user->interested-in clusters - * and cluster-> semanticcore entity embeddings to derive user->entity. Or, we can use a producers' - * UTT embeddings and user-user engagement graph to aggregate UTT engagement history. - */ -object InferredEntitiesFromInterestedIn { - - def getUserToKnownForUttEntities( - dateRange: DateRange, - maxUttEntitiesPerUser: Int - )( - implicit timeZone: TimeZone - ): TypedPipe[(UserId, Seq[(Long, Double)])] = { - - val validEntities = getValidSemanticCoreEntities( - DataSources.semanticCoreMetadataSource(dateRange, timeZone)).distinct.map { entityId => - Set(entityId) - }.sum - - DAL - .readMostRecentSnapshot(UttAccountRecommendationsScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .flatMapWithValue(validEntities) { - // Keep only valid Entities - case (KeyVal(interest, candidates), Some(validUTTEntities)) - if validUTTEntities.contains(interest.uttID) => - candidates.recommendations.map { rec => - (rec.candidateUserID, (interest.uttID, rec.score.getOrElse(0.0))) - } - case _ => None - } - .group - .sortedReverseTake(maxUttEntitiesPerUser)(Ordering.by(_._2)) - .toTypedPipe - } - - def filterUTTEntities( - interestedInEntities: TypedPipe[(UserId, Seq[(UTTEntityId, Int)])], - minSocialProofThreshold: Int, - maxInterestsPerUser: Int - ): TypedPipe[(UserId, Seq[UTTEntityId])] = { - - interestedInEntities - .map { - case (userId, entities) => - val topEntities = entities - .filter(_._2 >= minSocialProofThreshold) - .sortBy(-_._2) - .take(maxInterestsPerUser) - .map(_._1) - - (userId, topEntities) - } - .filter(_._2.nonEmpty) - } - - def getUserToUTTEntities( - userUserGraph: TypedPipe[UserAndNeighbors], - knownForEntities: TypedPipe[(UserId, Seq[UTTEntityId])] - )( - implicit uniqueId: UniqueID - ): TypedPipe[(UserId, Seq[(UTTEntityId, Int)])] = { - val flatEngagementGraph = - userUserGraph - .count("num_user_user_graph_records") - .flatMap { userAndNeighbors => - userAndNeighbors.neighbors.flatMap { neighbor => - val producerId = neighbor.neighborId - val hasFav = neighbor.favScoreHalfLife100Days.exists(_ > 0) - val hasFollow = neighbor.isFollowed.contains(true) - - if (hasFav || hasFollow) { - Some((producerId, userAndNeighbors.userId)) - } else { - None - } - } - } - .count("num_flat_user_user_graph_edges") - - flatEngagementGraph - .join(knownForEntities.count("num_producer_to_entities")) - .withReducers(3000) - .flatMap { - case (producerId, (userId, entities)) => - entities.map { entityId => ((userId, entityId), 1) } - } - .count("num_flat_user_to_entity") - .sumByKey - .withReducers(2999) - .toTypedPipe - .count("num_user_with_entities") - .collect { - case ((userId, uttEntityId), numEngagements) => - (userId, Seq((uttEntityId, numEngagements))) - } - .sumByKey - } - - /** - * Infer entities using user-interestedIn clusters and entity embeddings for those clusters, - * based on a threshold - */ - def getInterestedInFromEntityEmbeddings( - userToInterestedIn: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - clusterToEntities: TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])], - inferredFromCluster: Option[SimClustersSource], - inferredFromEntity: Option[EntitySource] - )( - implicit uniqueId: UniqueID - ): TypedPipe[(UserId, Seq[InferredEntity])] = { - val clusterToUsers = userToInterestedIn - .flatMap { - case (userId, clusters) => - clusters.clusterIdToScores.map { - case (clusterId, score) => - (clusterId, (userId, score)) - } - } - .count("num_flat_user_to_interested_in_cluster") - - clusterToUsers - .join(clusterToEntities) - .withReducers(3000) - .map { - case (clusterId, ((userId, interestedInScore), entitiesWithScores)) => - (userId, entitiesWithScores) - } - .flatMap { - case (userId, entitiesWithScore) => - // Dedup by entityIds in case user is associated with an entity from different clusters - entitiesWithScore.map { entity => (userId, Map(entity.entityId -> Max(entity.score))) } - } - .sumByKey - .map { - case (userId, entitiesWithMaxScore) => - val inferredEntities = entitiesWithMaxScore.map { entityWithScore => - InferredEntity( - entityId = entityWithScore._1, - score = entityWithScore._2.get, - simclusterSource = inferredFromCluster, - entitySource = inferredFromEntity - ) - }.toSeq - (userId, inferredEntities) - } - .count("num_user_with_inferred_entities") - } -} - -/** -capesospy-v2 update --build_locally --start_cron \ - --start_cron inferred_entities_from_interested_in \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object InferredInterestedInSemanticCoreEntitiesBatchApp extends ScheduledExecutionApp { - - override def firstTime: RichDate = RichDate("2023-01-01") - - override def batchIncrement: Duration = Days(1) - - private val outputPath = InferredEntities.MHRootPath + "/interested_in" - - private val outputPathKeyedByCluster = - InferredEntities.MHRootPath + "/interested_in_keyed_by_cluster" - - import InferredEntitiesFromInterestedIn._ - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - Execution.unit - - val clusterToEntities = InferredEntities - .getLegibleEntityEmbeddings(dateRange, timeZone) - .count("num_legible_cluster_to_entities") - .forceToDisk - - // inferred interests. Only support 2020 model version - val userToClusters2020 = - InterestedInSources.simClustersInterestedIn2020Source(dateRange, timeZone) - - val inferredEntities2020 = getInterestedInFromEntityEmbeddings( - userToInterestedIn = userToClusters2020, - clusterToEntities = clusterToEntities, - inferredFromCluster = Some(InferredEntities.InterestedIn2020), - inferredFromEntity = Some(EntitySource.SimClusters20M145K2020EntityEmbeddingsByFavScore) - )(uniqueID) - .count("num_user_with_inferred_entities_2020") - - val combinedInferredInterests = - InferredEntities.combineResults(inferredEntities2020) - - // output cluster -> entity mapping - val clusterToEntityExec = clusterToEntities - .map { - case (clusterId, entities) => - val inferredEntities = SimClustersInferredEntities( - entities.map(entity => InferredEntity(entity.entityId, entity.score)) - ) - KeyVal(clusterId, inferredEntities) - } - .writeDALVersionedKeyValExecution( - SimclustersInferredEntitiesFromInterestedInKeyedByClusterScalaDataset, - D.Suffix(outputPathKeyedByCluster) - ) - - // output user -> entity mapping - val userToEntityExec = combinedInferredInterests - .map { case (userId, entities) => KeyVal(userId, entities) } - .writeDALVersionedKeyValExecution( - SimclustersInferredEntitiesFromInterestedInScalaDataset, - D.Suffix(outputPath) - ) - - Execution.zip(clusterToEntityExec, userToEntityExec).unit - } -} - -/** -Adhob debugging job. Uses Entity Embeddings dataset to infer user interests - -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ &&\ -scalding remote run \ - --main-class com.twitter.simclusters_v2.scalding.inferred_entities.InferredInterestedInSemanticCoreEntitiesAdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/inferred_entities:inferred_entities_from_interested_in-adhoc \ - --user recos-platform \ - -- --date 2019-11-11 --email your_ldap@twitter.com - */ -object InferredInterestedInSemanticCoreEntitiesAdhocApp extends AdhocExecutionApp { - import InferredEntitiesFromInterestedIn._ - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val interestedIn = InterestedInSources.simClustersInterestedIn2020Source(dateRange, timeZone) - - val clusterToEntities = InferredEntities - .getLegibleEntityEmbeddings(dateRange, timeZone) - .count("num_legible_cluster_to_entities") - - // Debugging InterestedIn -> EntityEmbeddings approach - val interestedInFromEntityEmbeddings = getInterestedInFromEntityEmbeddings( - interestedIn, - clusterToEntities, - None, - None - )(uniqueID) - - val distribution = Util - .printSummaryOfNumericColumn( - interestedInFromEntityEmbeddings.map { case (k, v) => v.size }, - Some("# of interestedIn entities per user") - ).map { results => - Util.sendEmail(results, "# of interestedIn entities per user", args.getOrElse("email", "")) - } - - Execution - .zip( - distribution, - interestedInFromEntityEmbeddings - .writeExecution( - TypedTsv("/user/recos-platform/adhoc/debug/interested_in_from_entity_embeddings")) - ).unit - } -} - -/** - Adhob debuggingjob. Runs through the UTT interest inference, analyze the size & distribution of - interests per user. - -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ &&\ -scalding remote run \ - --main-class com.twitter.simclusters_v2.scalding.inferred_entities.InferredUTTEntitiesFromInterestedInAdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/inferred_entities:inferred_entities_from_interested_in-adhoc \ - --user recos-platform \ - -- --date 2019-11-03 --email your_ldap@twitter.com - */ -object InferredUTTEntitiesFromInterestedInAdhocApp extends AdhocExecutionApp { - import InferredEntitiesFromInterestedIn._ - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val employeeGraphPath = "/user/recos-platform/adhoc/employee_graph_from_user_user/" - val employeeGraph = TypedPipe.from(UserAndNeighborsFixedPathSource(employeeGraphPath)) - - val maxKnownForUttsPerProducer = 100 - val minSocialProofThreshold = 10 - val maxInferredInterestsPerUser = 500 - - // KnownFor UTT entities - val userToUttEntities = getUserToKnownForUttEntities( - dateRange.embiggen(Days(7)), - maxKnownForUttsPerProducer - ).map { case (userId, entities) => (userId, entities.map(_._1)) } - - val userToInterestsEngagementCounts = getUserToUTTEntities(employeeGraph, userToUttEntities) - - val topInterests = filterUTTEntities( - userToInterestsEngagementCounts, - minSocialProofThreshold, - maxInferredInterestsPerUser - ).count("num_users_with_inferred_interests") - - // Debugging UTT entities - val analysis = Util - .printSummaryOfNumericColumn( - topInterests.map { case (k, v) => v.size }, - Some( - "# of UTT entities per user, maxKnownForUtt=100, minSocialProof=10, maxInferredPerUser=500") - ).map { results => - Util.sendEmail(results, "# of UTT entities per user", args.getOrElse("email", "")) - } - - val outputPath = "/user/recos-platform/adhoc/inferred_utt_interests" - - Execution - .zip( - topInterests.writeExecution(TypedTsv(outputPath)), - analysis - ).unit - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredSemanticCoreEntitiesFromKnownFor.docx b/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/InferredSemanticCoreEntitiesFromKnownFor.docx new file mode 100644 index 0000000000000000000000000000000000000000..cfa5ef85ad8ae56ca398b2680d84cf369c7a9570 GIT binary patch literal 39374 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 z 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 Wp&l);f_| ERGDataSources} -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * Infer Known-For entities based on users' different variations of SimClusters Known-Fors. - * The basic idea is to look at the Known-For datasets (User, Cluster) and the entity embeddings - * (Cluster, Entities) to derive the (User, Entities). - */ -object InferredSemanticCoreEntitiesFromKnownFor { - - /** - * Given a (user, cluster) and (cluster, entity) mappings, generate (user, entity) mappings - */ - def getUserToEntities( - userToClusters: TypedPipe[(UserId, Seq[SimClusterWithScore])], - clusterToEntities: TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])], - inferredFromCluster: Option[SimClustersSource], - inferredFromEntity: Option[EntitySource], - minEntityScore: Double - ): TypedPipe[(UserId, Seq[InferredEntity])] = { - - val validClusterToEntities = clusterToEntities.flatMap { - case (clusterId, entities) => - entities.collect { - case entity if entity.score >= minEntityScore => - (clusterId, (entity.entityId, entity.score)) - } - } - - userToClusters - .flatMap { - case (userId, clusters) => - clusters.map { cluster => (cluster.clusterId, userId) } - } - .join(validClusterToEntities) - .map { - case (clusterId, (userId, (entityId, score))) => - ((userId, entityId), score) - } - // If a user is known for the same entity through multiple cluster-entity mappings, sum the scores - .sumByKey - .map { - case ((userId, entityId), score) => - (userId, Seq(InferredEntity(entityId, score, inferredFromCluster, inferredFromEntity))) - } - .sumByKey - } - -} - -/** -capesospy-v2 update --build_locally --start_cron \ - inferred_entities_from_known_for \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object InferredKnownForSemanticCoreEntitiesBatchApp extends ScheduledExecutionApp { - - import InferredSemanticCoreEntitiesFromKnownFor._ - - override def firstTime: RichDate = RichDate("2023-01-23") - - override def batchIncrement: Duration = Days(1) - - private val outputPath = InferredEntities.MHRootPath + "/known_for" - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val clusterToEntities = EntityEmbeddingsSources - .getReverseIndexedSemanticCoreEntityEmbeddingsSource( - EmbeddingType.FavBasedSematicCoreEntity, - ModelVersions.Model20M145K2020, - dateRange.embiggen(Days(7)) // read 7 days before & after to give buffer - ) - .forceToDisk - - val userToEntities2020 = getUserToEntities( - ProdSources.getUpdatedKnownFor, - clusterToEntities, - Some(InferredEntities.KnownFor2020), - Some(EntitySource.SimClusters20M145K2020EntityEmbeddingsByFavScore), - InferredEntities.MinLegibleEntityScore - ) - - val userToEntities = InferredEntities.combineResults(userToEntities2020) - - userToEntities - .map { case (userId, entities) => KeyVal(userId, entities) } - .writeDALVersionedKeyValExecution( - SimclustersInferredEntitiesFromKnownForScalaDataset, - D.Suffix(outputPath) - ) - } -} - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/inferred_entities:inferred_entities_from_known_for-adhoc && \ - oscar hdfs --user recos-platform --screen --tee your_ldap-logs/ \ - --bundle inferred_entities_from_known_for-adhoc \ - --tool com.twitter.simclusters_v2.scalding.inferred_entities.InferredSemanticCoreEntitiesFromKnownForAdhocApp \ - -- --date 2019-11-02 --email your_ldap@twitter.com - */ -object InferredSemanticCoreEntitiesFromKnownForAdhocApp extends AdhocExecutionApp { - - private def readEntityEmbeddingsFromPath( - path: String - ): TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] = { - TypedPipe - .from(AdhocKeyValSources.clusterToEntitiesSource(path)) - .map { - case (embeddingId, embedding) => - embeddingId.internalId match { - case InternalId.ClusterId(clusterId) => - val semanticCoreEntities = embedding.embedding.map { - case InternalIdWithScore(InternalId.EntityId(entityId), score) => - SemanticCoreEntityWithScore(entityId, score) - case _ => - throw new IllegalArgumentException( - "The value to the entity embeddings dataset isn't entityId" - ) - } - (clusterId, semanticCoreEntities) - case _ => - throw new IllegalArgumentException( - "The key to the entity embeddings dataset isn't clusterId" - ) - } - } - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - import InferredSemanticCoreEntitiesFromKnownFor._ - - val entityIdToString: TypedPipe[(Long, String)] = - ERGDataSources.semanticCoreMetadataSource - .collect { - case FullMetadata(domainId, entityId, Some(basicMetadata), _, _, _) - if domainId == 131L && !basicMetadata.indexableFields.exists( - _.tags.exists(_.contains("utt:sensitive_interest"))) => - entityId -> basicMetadata.name - }.distinctBy(_._1) - - val clusterToEntitiesUpdated = EntityEmbeddingsSources - .getReverseIndexedSemanticCoreEntityEmbeddingsSource( - EmbeddingType.FavBasedSematicCoreEntity, - ModelVersions.Model20M145KUpdated, - dateRange.embiggen(Days(4)) // read 4 days before & after to give buffer - ) - .forceToDisk - - // Inferred entities based on Updated version's entity embeddings - val dec11UserToUpdatedEntities = getUserToEntities( - ProdSources.getDec11KnownFor, - clusterToEntitiesUpdated, - Some(InferredEntities.Dec11KnownFor), - Some(EntitySource.SimClusters20M145KUpdatedEntityEmbeddingsByFavScore), - InferredEntities.MinLegibleEntityScore - ) - - val updatedUserToUpdatedEntities = getUserToEntities( - ProdSources.getUpdatedKnownFor, - clusterToEntitiesUpdated, - Some(InferredEntities.UpdatedKnownFor), - Some(EntitySource.SimClusters20M145KUpdatedEntityEmbeddingsByFavScore), - InferredEntities.MinLegibleEntityScore - ) - - // Updated entities data - val entitiesPipe = ( - dec11UserToUpdatedEntities ++ updatedUserToUpdatedEntities - ).sumByKey - - val userToEntitiesWithString = entitiesPipe - .flatMap { - case (userId, entities) => - entities.map { entity => (entity.entityId, (userId, entity)) } - } - .hashJoin(entityIdToString) - .map { - case (entityId, ((userId, inferredEntity), entityStr)) => - (userId, Seq((entityStr, inferredEntity))) - } - .sumByKey - - val outputPath = "/user/recos-platform/adhoc/known_for_inferred_entities_updated" - - val scoreDistribution = Util - .printSummaryOfNumericColumn( - entitiesPipe.flatMap { case (k, v) => v.map(_.score) }, - Some("Distributions of scores, Updated version") - ).map { results => - Util.sendEmail( - results, - "Distributions of scores, Updated version", - args.getOrElse("email", "") - ) - } - - val coverageDistribution = Util - .printSummaryOfNumericColumn( - entitiesPipe.map { case (k, v) => v.size }, - Some("# of knownFor entities per user, Updated version") - ).map { results => - Util.sendEmail( - results, - "# of knownFor entities per user, Updated version", - args.getOrElse("email", "") - ) - } - - Execution - .zip( - userToEntitiesWithString.writeExecution(TypedTsv(outputPath)), - scoreDistribution, - coverageDistribution - ).unit - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ProdSources.docx b/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ProdSources.docx new file mode 100644 index 0000000000000000000000000000000000000000..b0652c653b813cc20e00f1ed7c4dbe1ec13644a1 GIT binary patch literal 37665 zcmagEWmsIvwm*z(a1HM6?hb(jcXtWeNN{L8xVyW%LvVKs?iM5v-2LB~nRCv}x%a;B zm(4@fT0dE9_pa*QrT7UF3KI+r3=WJrja#!)xiB^n91Ls}1`G@XG^!&Gu=`?W_r*Zf z-QLVekIBu}rZG`YVO0e6>)8ud60;DAr#K2$*^WJpJwq&>M0NTNkJb|Ni7dp!-8f&U z+Kgf_3{z}I>YX>yYMo%GR}+^qlzvs<36rr58}R(SuaaWRO*@5=?LHacv3XQPXFIOu zJB;#`Q%$&5xlJ@WX@s4Z`_17k(ivb-luIejq2 ze{|8E>XXPlsCyd_U|@)#zXpzGHcre;zps^X6CWX2QGL&ZB!?-B?V8ji3YPUH4&@4j zx>Lqai|l~XMJt^hN)mdS*gZrCXS*im3+egzOY}uH0UE|y^ZvPuJ(`=e7Y%I&Yj8>M z?S7Lfz+8yEvRwDqSmqE%uN26VR4$R&ZL@o3kGUuZO( zy%}c#FaRmpCeE}cnXkZ95AlMWe%pI%3@kG zu)jUFDSp-|zhF8H5LZyqccZw5nP^Av=doxID4uEA{jkqSK|Z13F=_6+5uoH_KSlJ5 zr8fCYyD@sn8*XGqhwJR01q%6!sA37a&1XObLIV}Z6kww02(WizHUT)A{l3XFx3)I+aO;Us0~z>mT{N@Myhwcc`Y%Gr!%aZPOQ7T9X%(7OTyee&lox=?sR=m|Fq}4Aq-yTgaS$%+n+DL)F zJ`5Nt?`N3N)WEP2oVYwdze53M7g0)8c5P8-+X_2za&*|7a)Hzad~x)rkW#C#W*$ zQY`fWG(87{snN=L7)JOnsTzt^qn>2-#^V=6u=Y+0^iy9}kVQ5cJd4`o?Y*X-%|s-B zxzyhGpC>9dE^VYJu_%OPqZ8hTOAyMS#ptMA_n`**?0H-2tRO43bsUm(>GG~<(a26 zt6(@`4afB)Ds`nAA(xRSFWbo31i}$QZamLM*&yAxOv{iS6)JDf`?uHc-qgb!AKCXBv}52 zM&Ug8uxgN+B8l+Hm>8elg!WY9;6Qv)TTfmm5-Xb%56y*gI|$ec zz6YR&POuilRs7(hy+eHW8Se#^>B5%vVC%tI5b?+rh6mVE4^NbQ0&nv&5-~>P*J87o zoG3J*u}Q%noPnd}X`>LE+`lR#T&VD&qdlGZnVIMuKKUO7N_5L#)-}eV3r5>4d@dzk5VB?F4LyeA`gsgK^Wo?dX5M?WILC!$OYKQy zvhiIZGf|6!mxqz~1Ab|`aW4W#DL#HgGFN@V=L^Tv$F+2+Kw2owlrIOhi=}c2VS1}c z8-Ws<+GsaW$zBx<(I2>oqf0;h;>GD)cT9_F4THW5N$5U>tAC%=n4sIgn2&A5+-Ac& z>GWA8X|^RSWGJwwj}-?^eHs(|8Wm^u9)3EaHjf-nxpBH-g*R2JmkIxSZwCr6&l55Wb$no)M~IvcO6)lhS-mLBsuZ^nBLrjnV7 zlA9$-c|?ew>gkWp4FVjk?^Al9hPFgv4{jj_p^1Wg;V7aSBo~lL_##`nrVo~$uY-iV zZ>QHXw`)}J9avnRwhA+a*@cft1~;IQ;UL~6rKuE#)KEmW+tY0;BU>ceH@}L{F@u8>&ycg6)=17 z$EvxT�&Ldye&ECw>L6ztuH`zC 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 Pa+M%MA~1Wb>I3lrL@;5( literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ProdSources.scala b/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ProdSources.scala deleted file mode 100644 index a1dc71ac8..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/inferred_entities/ProdSources.scala +++ /dev/null @@ -1,94 +0,0 @@ -package com.twitter.simclusters_v2.scalding.inferred_entities - -import com.twitter.scalding.{DateRange, Days, TypedPipe} -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.{ExplicitLocation, ProcAtla} -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.{ModelVersions, SemanticCoreEntityId, UserId} -import com.twitter.simclusters_v2.hdfs_sources.{ - SimclustersInferredEntitiesFromKnownForScalaDataset, - SimclustersV2InterestedIn20M145KUpdatedScalaDataset, - SimclustersV2InterestedInScalaDataset, - SimclustersV2KnownFor20M145KDec11ScalaDataset, - SimclustersV2KnownFor20M145KUpdatedScalaDataset, - UserUserNormalizedGraphScalaDataset -} -import com.twitter.simclusters_v2.scalding.KnownForSources -import com.twitter.simclusters_v2.thriftscala.{ - EntitySource, - SimClusterWithScore, - SimClustersSource, - TopSimClustersWithScore, - UserAndNeighbors -} -import java.util.TimeZone - -/** - * Convenience functions to read data from prod. - */ -object ProdSources { - - // Returns the Dec11 KnownFor from production - def getDec11KnownFor(implicit tz: TimeZone): TypedPipe[(UserId, Seq[SimClusterWithScore])] = - KnownForSources - .readDALDataset( - SimclustersV2KnownFor20M145KDec11ScalaDataset, - Days(30), - ModelVersions.Model20M145KDec11) - .map { - case (userId, clustersArray) => - val clusters = clustersArray.map { - case (clusterId, score) => SimClusterWithScore(clusterId, score) - }.toSeq - (userId, clusters) - } - - // Returns the Updated KnownFor from production - def getUpdatedKnownFor(implicit tz: TimeZone): TypedPipe[(UserId, Seq[SimClusterWithScore])] = - KnownForSources - .readDALDataset( - SimclustersV2KnownFor20M145KUpdatedScalaDataset, - Days(30), - ModelVersions.Model20M145KUpdated - ) - .map { - case (userId, clustersArray) => - val clusters = clustersArray.map { - case (clusterId, score) => SimClusterWithScore(clusterId, score) - }.toSeq - (userId, clusters) - } - - def getInferredEntitiesFromKnownFor( - inferredFromCluster: SimClustersSource, - inferredFromEntity: EntitySource, - dateRange: DateRange - ): TypedPipe[(UserId, Seq[(SemanticCoreEntityId, Double)])] = { - DAL - .readMostRecentSnapshot(SimclustersInferredEntitiesFromKnownForScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { - case KeyVal(userId, entities) => - val validEntities = - entities.entities - .collect { - case entity - if entity.entitySource.contains(inferredFromEntity) && - entity.simclusterSource.contains(inferredFromCluster) => - (entity.entityId, entity.score) - } - .groupBy(_._1) - .map { case (entityId, scores) => (entityId, scores.map(_._2).max) } - .toSeq - (userId, validEntities) - } - } - - def getUserUserEngagementGraph(dateRange: DateRange): TypedPipe[UserAndNeighbors] = { - DAL - .readMostRecentSnapshot(UserUserNormalizedGraphScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/AllFeatures.docx b/src/scala/com/twitter/simclusters_v2/scalding/mbcg/AllFeatures.docx new file mode 100644 index 0000000000000000000000000000000000000000..b722495464243ebd3df44c7d1c147a14f000cb00 GIT binary patch literal 37265 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 NAVVTBdr0+ycmR^+lbiqm literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/AllFeatures.scala b/src/scala/com/twitter/simclusters_v2/scalding/mbcg/AllFeatures.scala deleted file mode 100644 index 902c981bd..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/AllFeatures.scala +++ /dev/null @@ -1,58 +0,0 @@ -package com.twitter.simclusters_v2.scalding.mbcg - -import com.google.common.collect.ImmutableSet -import com.twitter.dal.personal_data.thriftjava.PersonalDataType._ -import com.twitter.ml.api.DataType -import com.twitter.ml.api.Feature -import com.twitter.ml.api.Feature.SparseContinuous -import com.twitter.ml.api.Feature.Tensor -import com.twitter.ml.api.FeatureContext -import com.twitter.ml.api.constant.SharedFeatures -import java.util.{Map => JMap} - -/* -Features used for model-based candidate generation - */ -object TweetAllFeatures { - val tweetId = SharedFeatures.TWEET_ID - val tweetSimclusters = - new SparseContinuous( - "tweet.simcluster.log_fav_based_embedding.20m_145k_2020", - ImmutableSet.of(InferredInterests)) - .asInstanceOf[Feature[JMap[String, Double]]] - val authorF2vProducerEmbedding = - new Tensor( - "tweet.author_follow2vec.producer_embedding_200", - DataType.FLOAT - ) - - private val allFeatures: Seq[Feature[_]] = Seq( - tweetId, - tweetSimclusters, - authorF2vProducerEmbedding - ) - - val featureContext = new FeatureContext(allFeatures: _*) -} - -object UserAllFeatures { - val userId = SharedFeatures.USER_ID - val userSimclusters = - new SparseContinuous( - "user.iiape.log_fav_based_embedding.20m_145k_2020", - ImmutableSet.of(InferredInterests)) - .asInstanceOf[Feature[JMap[String, Double]]] - val userF2vConsumerEmbedding = - new Tensor( - "user.follow2vec.consumer_avg_fol_emb_200", - DataType.FLOAT - ) - - private val allFeatures: Seq[Feature[_]] = Seq( - userId, - userSimclusters, - userF2vConsumerEmbedding - ) - - val featureContext = new FeatureContext(allFeatures: _*) -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/mbcg/BUILD.bazel deleted file mode 100644 index 469a917be..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/BUILD.bazel +++ /dev/null @@ -1,314 +0,0 @@ -scala_library( - sources = [ - "*.scala", - ], - platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - "3rdparty/jvm/com/twitter/algebird:core", - "3rdparty/jvm/com/twitter/algebird:util", - "3rdparty/jvm/com/twitter/storehaus:algebra", - "3rdparty/jvm/com/twitter/storehaus:core", - "3rdparty/src/jvm/com/twitter/scalding:args", - "3rdparty/src/jvm/com/twitter/scalding:commons", - "3rdparty/src/jvm/com/twitter/scalding:core", - "3rdparty/src/jvm/com/twitter/scalding:date", - "3rdparty/src/jvm/com/twitter/scalding:db", - "3rdparty/src/jvm/com/twitter/scalding:parquet", - "ann/src/main/scala/com/twitter/ann/hnsw", - "ann/src/main/scala/com/twitter/ann/scalding/offline", - "ann/src/main/scala/com/twitter/ann/util", - "geoduck/hadoop/scalding/datasets:userlocation-scala", - "iesource/common/src/main/scala/com/twitter/iesource/common/util", - "iesource/processing/events/src/main/scala/com/twitter/iesource/processing/events/batch" + - ":server_engagements-scala", - "iesource/thrift", - "src/java/com/twitter/ml/api/constant", - "src/scala/com/twitter/ml/api/util", - "src/scala/com/twitter/ml/featurestore/catalog/entities/core", - "src/scala/com/twitter/ml/featurestore/catalog/features/geo", - "src/scala/com/twitter/ml/featurestore/lib/batch", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/dalv2/dataset", - "src/scala/com/twitter/scalding_internal/db", - "src/scala/com/twitter/scalding_internal/db/jdbc", - "src/scala/com/twitter/scalding_internal/error_handling", - "src/scala/com/twitter/scalding_internal/job", - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - "src/scala/com/twitter/scalding_internal/multiformat", - "src/scala/com/twitter/scalding_internal/source", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/scalding_internal/typed", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/thrift/com/twitter/ml/api:data-java", - "src/thrift/com/twitter/ml/api:interpretable-model-java", - "tweetsource/public_tweets/src/main/scala/com/twitter/tweetsource/public_tweets:public_tweets-scala", - "twml/runtime/src/main/scala/com/twitter/twml/runtime/scalding", - "util/util-core:scala", - "util/util-stats/src/main/scala", - ], -) - -scalding_job( - name = "tweet-embedding-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scalding.mbcg.TweetEmbeddingGenerationAdhocJob", - args = [ - "--dateRange 2021-10-30T00 2021-10-30T01", - "--model_name model", - "--model_path hdfs:///atla/proc/user/cassowary/explore_mbcg/models/tfx_model_1104/1635973177/tweet_tower_with_signature", - "--concurrency_level 60", - "--embedding_dimension 128", - "--expected_elements 30000000", - "--max_M 20", - "--ef_construction 200", - "--tweet_embedding_name output", - "--ann_output_path hdfs:///atla/proc/user/cassowary/explore_mbcg/ann_index/test_11_04_adhoc", - ], - config = [ - ("hadoop.submitter.cpu", 60), - ("hadoop.submitter.jvm.total-memory", "256g"), - ("submitter.tier", "preemptible"), - ("hadoop.map.jvm.total-memory", "6144m"), - ], - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":mbcg"], -) - -scalding_job( - name = "tweet-embedding-generation-batch-job", - main = "com.twitter.simclusters_v2.scalding.mbcg.TweetEmbeddingGenerationBatchJob", - args = [ - "--model_name model", - "--model_path hdfs:///atla/proc/user/cassowary/explore_mbcg/models/tfx_0119_1day_0110_3l_5e_f2v_gpu_resave/tweet_tower_with_signature", - "--concurrency_level 60", - "--embedding_dimension 128", - "--expected_elements 5000000", - "--max_M 40", - "--ef_construction 800", - "--tweet_embedding_name output", - "--f2v_input.feature_store_embedding Follow2VecProducerEmbedding200Dataset", - "--f2v_input.feature_store_major_version 20210708", - "--minFavCount 32", - "--ann_output_path hdfs:///atla/proc/user/cassowary/explore_mbcg/ann_index/0125_batch_index_f2v_minfav", - ], - config = [ - ("hadoop.submitter.cpu", 60), - ("hadoop.submitter.jvm.total-memory", "256g"), - ("hadoop.map.jvm.total-memory", "6144m"), - ("hadoop.submitter.disk", "100g"), - ], - cron = "*/5 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":mbcg"], -) - -scalding_job( - name = "tweet-embedding-generation-batch-job-alternate", - main = "com.twitter.simclusters_v2.scalding.mbcg.TweetEmbeddingGenerationBatchJobAlternate", - args = [ - "--model_name model", - "--model_path hdfs:///atla/proc/user/cassowary/explore_mbcg/models/tfx_331_329_1e_128em_b128_hn10_all_gpu/tweet_tower_with_signature", - "--concurrency_level 60", - "--embedding_dimension 128", - "--expected_elements 5000000", - "--max_M 40", - "--ef_construction 800", - "--tweet_embedding_name output", - "--f2v_input.feature_store_embedding Follow2VecProducerEmbedding200Dataset", - "--f2v_input.feature_store_major_version 20210708", - "--minFavCount 100", - "--indexAllTweets", - "--ann_output_path hdfs:///atla/proc/user/cassowary/explore_mbcg/ann_index/0401_batch_index_f2v_cosine_all_tweets", - ], - config = [ - ("hadoop.submitter.cpu", 60), - ("hadoop.submitter.jvm.total-memory", "256g"), - ("hadoop.map.jvm.total-memory", "6144m"), - ("hadoop.submitter.disk", "100g"), - ], - contact = "no-reply@twitter.com", - cron = "*/5 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":mbcg"], -) - -scalding_job( - name = "tweet-embedding-generation-batch-job-experimental", - main = "com.twitter.simclusters_v2.scalding.mbcg.TweetEmbeddingGenerationBatchJobExperimental", - args = [ - "--model_name model", - "--model_path hdfs:///atla/proc/user/cassowary/explore_mbcg/models/tfx_0127_1day_0110_3l_10e_128e_normf2v_nocosine_gpu/tweet_tower_with_signature", - "--concurrency_level 60", - "--embedding_dimension 128", - "--expected_elements 5000000", - "--max_M 40", - "--ef_construction 800", - "--tweet_embedding_name output", - "--f2v_input.feature_store_embedding Follow2VecProducerEmbedding200Dataset", - "--f2v_input.feature_store_major_version 20210708", - "--minFavCount 32", - "--ann_output_path hdfs:///atla/proc/user/cassowary/explore_mbcg/ann_index/0128_f2v_1week_batch_index", - ], - config = [ - ("hadoop.submitter.cpu", 60), - ("hadoop.submitter.jvm.total-memory", "256g"), - ("hadoop.map.jvm.total-memory", "6144m"), - ("hadoop.submitter.disk", "100g"), - ], - contact = "no-reply@twitter.com", - cron = "*/5 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":mbcg"], -) - -scalding_job( - name = "user-embedding-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scalding.mbcg.UserEmbeddingGenerationAdhocJob", - args = [ - "--dateRange 2021-12-01T00 2021-12-01T01", - "--model_path hdfs:///atla/proc/user/cassowary/explore_mbcg/models/tfx_1202_logs_100m_b64_hn10_1127_video_persistent/user_tower_with_signature", - "--embedding_dimension 128", - "--user_embedding_name output", - "--kvs_output_path /user/cassowary/explore_mbcg/user_kvs_store/1207_adhoc_model_store", - ], - config = [ - ("hadoop.submitter.cpu", 60), - ("hadoop.submitter.jvm.total-memory", "256g"), - ("submitter.tier", "preemptible"), - ("hadoop.map.jvm.total-memory", "6144m"), - ], - contact = "no-reply@twitter.com", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - "known-to-fail-jira:SD-20253", - ], - dependencies = [":mbcg"], -) - -scalding_job( - name = "user-embedding-generation-batch-job", - main = "com.twitter.simclusters_v2.scalding.mbcg.UserEmbeddingGenerationBatchJob", - args = [ - "--model_path hdfs:///atla/proc/user/cassowary/explore_mbcg/models/tfx_0119_1day_0110_3l_5e_f2v_gpu_resave/user_tower_with_signature", - "--embedding_dimension 128", - "--user_embedding_name output", - "--f2v_input.feature_store_embedding FollowBasedConsumerFollow2VecAvgEmbedding200Dataset", - "--f2v_input.feature_store_major_version 20210708", - "--kvs_output_path /user/cassowary/explore_mbcg/user_kvs_store/0125_refreshed_model_store_f2v", - ], - config = [ - ("hadoop.submitter.cpu", 60), - ("hadoop.submitter.jvm.total-memory", "256g"), - ("submitter.tier", "preemptible"), - ("hadoop.map.jvm.total-memory", "6144m"), - ], - contact = "no-reply@twitter.com", - cron = "*/30 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":mbcg"], -) - -scalding_job( - name = "user-embedding-generation-batch-job-alternate", - main = "com.twitter.simclusters_v2.scalding.mbcg.UserEmbeddingGenerationBatchJobAlternate", - args = [ - "--model_path hdfs:///atla/proc/user/cassowary/explore_mbcg/models/tfx_331_329_1e_128em_b128_hn10_all_gpu/user_tower_with_signature", - "--embedding_dimension 128", - "--user_embedding_name output", - "--f2v_input.feature_store_embedding FollowBasedConsumerFollow2VecAvgEmbedding200Dataset", - "--f2v_input.feature_store_major_version 20210708", - "--kvs_output_path /user/cassowary/explore_mbcg/user_kvs_store/0401_refreshed_model_store_all", - ], - config = [ - ("hadoop.submitter.cpu", 60), - ("hadoop.submitter.jvm.total-memory", "256g"), - ("submitter.tier", "preemptible"), - ("hadoop.map.jvm.total-memory", "6144m"), - ], - contact = "no-reply@twitter.com", - cron = "*/30 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":mbcg"], -) - -scalding_job( - name = "user-embedding-generation-batch-job-experimental", - main = "com.twitter.simclusters_v2.scalding.mbcg.UserEmbeddingGenerationBatchJobExperimental", - args = [ - "--model_path hdfs:///atla/proc/user/cassowary/explore_mbcg/models/tfx_0127_1day_0110_3l_10e_128e_normf2v_nocosine_gpu/user_tower_with_signature", - "--embedding_dimension 128", - "--user_embedding_name output", - "--f2v_input.feature_store_embedding FollowBasedConsumerFollow2VecAvgEmbedding200Dataset", - "--f2v_input.feature_store_major_version 20210708", - "--kvs_output_path /user/cassowary/explore_mbcg/user_kvs_store/0328_f2v_cosine_all_tweets_model_store", - ], - config = [ - ("hadoop.submitter.cpu", 60), - ("hadoop.submitter.jvm.total-memory", "256g"), - ("submitter.tier", "preemptible"), - ("hadoop.map.jvm.total-memory", "6144m"), - ], - contact = "no-reply@twitter.com", - cron = "*/30 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":mbcg"], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/mbcg/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..eda14fa4a59fabc4fd6a48f8eec40b491c63bca8 GIT binary patch literal 38494 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/RecordAdapters.docx b/src/scala/com/twitter/simclusters_v2/scalding/mbcg/RecordAdapters.docx new file mode 100644 index 0000000000000000000000000000000000000000..7d87a5e8c7efc06526394bb85697eca87d0ebc80 GIT binary patch literal 37494 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

OZIIowrSvm`&XxzE1^5 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%0DU;R@B!*Dd!OVZ_dKm+4Mh}*K?8`fo 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/RecordAdapters.scala b/src/scala/com/twitter/simclusters_v2/scalding/mbcg/RecordAdapters.scala deleted file mode 100644 index e972a24ae..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/RecordAdapters.scala +++ /dev/null @@ -1,79 +0,0 @@ -package com.twitter.simclusters_v2.scalding.mbcg - -import com.twitter.ml.api.DataRecord -import com.twitter.ml.api.embedding.Embedding -import com.twitter.ml.api.FeatureContext -import com.twitter.ml.api.FloatTensor -import com.twitter.ml.api.GeneralTensor -import com.twitter.ml.api.IRecordOneToOneAdapter -import com.twitter.ml.api.util.FDsl._ -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import com.twitter.simclusters_v2.thriftscala.PersistentSimClustersEmbedding -import scala.collection.JavaConverters._ - -/* -Adapters to convert data from MBCG input sources into DataRecords - */ -object TweetSimclusterRecordAdapter - extends IRecordOneToOneAdapter[(Long, PersistentSimClustersEmbedding, Embedding[Float])] { - override def getFeatureContext: FeatureContext = TweetAllFeatures.featureContext - - override def adaptToDataRecord( - tweetFeatures: (Long, PersistentSimClustersEmbedding, Embedding[Float]) - ) = { - val dataRecord = new DataRecord() - val tweetId = tweetFeatures._1 - val tweetEmbedding = tweetFeatures._2 - val f2vEmbedding = tweetFeatures._3 - val simclusterWithScores = tweetEmbedding.embedding.embedding - .map { simclusterWithScore => - // Cluster ID and score for that cluster - (simclusterWithScore._1.toString, simclusterWithScore._2) - }.toMap.asJava - - dataRecord.setFeatureValue(TweetAllFeatures.tweetId, tweetId) - dataRecord.setFeatureValue(TweetAllFeatures.tweetSimclusters, simclusterWithScores) - dataRecord.setFeatureValue( - TweetAllFeatures.authorF2vProducerEmbedding, - GeneralTensor.floatTensor( - new FloatTensor(f2vEmbedding.map(Double.box(_)).asJava) - ) - ) - - dataRecord - } -} - -object UserSimclusterRecordAdapter - extends IRecordOneToOneAdapter[(Long, ClustersUserIsInterestedIn, Embedding[Float])] { - override def getFeatureContext: FeatureContext = TweetAllFeatures.featureContext - - override def adaptToDataRecord( - userSimclusterEmbedding: (Long, ClustersUserIsInterestedIn, Embedding[Float]) - ) = { - val dataRecord = new DataRecord() - val userId = userSimclusterEmbedding._1 - val userEmbedding = userSimclusterEmbedding._2 - val simclusterWithScores = userEmbedding.clusterIdToScores - .filter { - case (_, score) => - score.logFavScore.map(_ >= 0.0).getOrElse(false) - } - .map { - case (clusterId, score) => - (clusterId.toString, score.logFavScore.get) - }.toMap.asJava - val f2vEmbedding = userSimclusterEmbedding._3 - - dataRecord.setFeatureValue(UserAllFeatures.userId, userId) - dataRecord.setFeatureValue(UserAllFeatures.userSimclusters, simclusterWithScores) - dataRecord.setFeatureValue( - UserAllFeatures.userF2vConsumerEmbedding, - GeneralTensor.floatTensor( - new FloatTensor(f2vEmbedding.map(Double.box(_)).asJava) - ) - ) - - dataRecord - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/TweetEmbeddingGenerationJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/mbcg/TweetEmbeddingGenerationJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..a9e5ca9b2606b7d45ccdbb6bc8810bf4f8ec7c91 GIT binary patch literal 41037 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 ThriftGeneralTensor} -import com.twitter.ml.api.util.FDsl._ -import com.twitter.ml.api.util.ScalaToJavaDataRecordConversions -import com.twitter.ml.featurestore.lib.TweetId -import com.twitter.ml.featurestore.lib.embedding.EmbeddingWithEntity -import com.twitter.scalding.Args -import com.twitter.scalding.DateParser -import com.twitter.scalding.DateRange -import com.twitter.scalding.Execution -import com.twitter.scalding.UniqueID -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossDC -import com.twitter.scalding_internal.job.FutureHelper -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.scalding_internal.job.analytics_batch.AnalyticsBatchExecution -import com.twitter.scalding_internal.job.analytics_batch.AnalyticsBatchExecutionArgs -import com.twitter.scalding_internal.job.analytics_batch.BatchDescription -import com.twitter.scalding_internal.job.analytics_batch.BatchFirstTime -import com.twitter.scalding_internal.job.analytics_batch.BatchIncrement -import com.twitter.scalding_internal.job.analytics_batch.BatchWidth -import com.twitter.scalding_internal.job.analytics_batch.TwitterScheduledExecutionApp -import com.twitter.search.common.file.FileUtils -import com.twitter.simclusters_v2.scalding.common.LogFavBasedPersistentTweetEmbeddingMhExportSource -import com.twitter.simclusters_v2.thriftscala.PersistentSimClustersEmbedding -import com.twitter.tweetsource.common.thriftscala.MediaType -import com.twitter.tweetsource.public_tweets.PublicTweetsScalaDataset -import com.twitter.tweetsource.public_tweets.thriftscala.PublicTweet -import com.twitter.twml.runtime.scalding.TensorflowBatchPredictor -import com.twitter.twml.runtime.scalding.TensorflowBatchPredictor.ScaldingThreadingConfig -import com.twitter.util.FuturePool -import com.twitter.util.logging.Logger -import java.util.TimeZone -import java.util.concurrent.Executors - -/* -This class does the following: -1) Get tweet simcluster features from LogFavBasedPersistentTweetEmbeddingMhExportSource -2) Filter them down to English media tweets that aren't replies or quote tweets using TweetSource -3) Convert the remaining tweets into DataRecords using TweetSimclusterRecordAdapter -4) Run inference using a TF model exported with a DataRecord compatible serving signature -5) Create an ANN index from the generated tweet embeddings - */ -trait TweetEmbeddingGenerationTrait { - implicit val tz: TimeZone = DateOps.UTC - implicit val dp: DateParser = DateParser.default - implicit val updateHours = 4 - - private val inputNodeName = "request:0" - private val outputNodeName = "response:0" - private val functionSignatureName = "serve" - private val predictionRequestTimeout = 5.seconds - private val SupportedLanguages = Set("en") - private val tweetSourceLookback = Days(2) - - private val DEFAULT_F2V_VECTOR: Embedding[Float] = Embedding(Array.fill[Float](200)(0.0f)) - - def getPredictionEngine(modelName: String, modelPath: String): TensorflowBatchPredictor = { - val config = TensorflowPredictionEngineConfig( - modelName = modelName, - modelSource = modelPath, - threadingConfig = Some(ScaldingThreadingConfig), - defaultInputNode = inputNodeName, - defaultOutputNode = outputNodeName, - functionSignatureName = functionSignatureName, - statsReceiver = NullStatsReceiver - ) - TensorflowBatchPredictor(config, predictionRequestTimeout) - } - - def getEmbeddingWithEntity(tweetEmbeddingTensor: ThriftGeneralTensor, tweetId: Long) = { - tweetEmbeddingTensor match { - case ThriftGeneralTensor.RawTypedTensor(rawTensor) => - val embedding = EmbeddingSerDe.floatEmbeddingSerDe.fromThrift( - thriftscala.Embedding(Some(rawTensor)) - ) - EmbeddingWithEntity[TweetId](TweetId(tweetId), embedding) - case _ => throw new IllegalArgumentException("tensor is wrong type!") - } - } - - def buildAnnIndex( - pipe: TypedPipe[EmbeddingWithEntity[TweetId]], - args: Args - ): Execution[Unit] = { - def embeddingDimension: Int = args.int("embedding_dimension", 128) - def efConstruction: Int = args.int("ef_construction", 800) - def maxM: Int = args.int("max_M", 40) - val log: Logger = Logger(getClass) - val annOutputPath: String = args("ann_output_path") - - val embeddingWithEntity = pipe.map { - case EmbeddingWithEntity(tweetId, embedding) => - EntityEmbedding[TweetId](tweetId, embedding) - } - val concurrencyLevel = args.int("concurrency_level", 60) - val expectedElements = args.int("expected_elements", 30000000) - val threadPool = Executors.newFixedThreadPool(concurrencyLevel) - val hnswIndex = TypedHnswIndex.serializableIndex[TweetId, InnerProductDistance]( - embeddingDimension, - InnerProduct, - efConstruction, - maxM, - expectedElements, - TweetKind.byteInjection, - ReadWriteFuturePool(FuturePool.apply(threadPool)) - ) - - // Create a timestamped directory to use for recovery in case of index corruption - val timeStampedAnnOutputPath: String = annOutputPath + "/" + (System.currentTimeMillis() / 1000) - val timeStampedAnnOutputDirectory = FileUtils.getFileHandle(timeStampedAnnOutputPath) - - embeddingWithEntity.toIterableExecution - .flatMap { annEmbeddings => - val future = - IndexBuilderUtils.addToIndex(hnswIndex, annEmbeddings.toStream, concurrencyLevel) - val result = future.map { numberUpdates => - log.info(s"Performed $numberUpdates updates") - hnswIndex.toDirectory(timeStampedAnnOutputDirectory) - log.info(s"Finished writing to timestamped index directory - " + - s"$timeStampedAnnOutputDirectory") - } - FutureHelper.executionFrom(result).unit - }.onComplete { _ => - threadPool.shutdown() - Unit - } - } - - def getTweetSimclusterFeatures( - args: Args - )( - implicit dateRange: DateRange - ): TypedPipe[(Long, PersistentSimClustersEmbedding)] = { - val serviceIdEnv = args.getOrElse("sIdEnv", "prod") - val serviceIdRole = args.getOrElse("sIdRole", "cassowary") - val serviceIdZone = args.getOrElse("sIdZone", "atla") - val serviceIdName = args - .getOrElse("sIdName", "tweet-embedding-generation-batch-job") - val serviceId = ServiceIdentifier( - role = serviceIdRole, - service = serviceIdName, - environment = serviceIdEnv, - zone = serviceIdZone) - - val logFavBasedPersistentTweetEmbeddingSource = - new LogFavBasedPersistentTweetEmbeddingMhExportSource( - range = dateRange.prepend(Hours(24)), - serviceIdentifier = serviceId) - val tweetSimclusterEmbeddingTypedPipe = TypedPipe - .from(logFavBasedPersistentTweetEmbeddingSource) - .collect { - case ( - (tweetId, timestamp), - simclusterEmbedding: PersistentSimClustersEmbedding - ) if timestamp == 1L => // 1L corresponds to the LongestL2Norm simcluster embedding - (tweetId.toLong, simclusterEmbedding) - } - - tweetSimclusterEmbeddingTypedPipe - } - - def getTweetSource()(implicit dateRange: DateRange): TypedPipe[PublicTweet] = { - val recentTweets = DAL - .read(PublicTweetsScalaDataset, dateRange.prepend(tweetSourceLookback)) - .toTypedPipe - - recentTweets - } - - def isVideoTweet(tweet: PublicTweet): Boolean = { - tweet.media.exists { mediaSeq => - mediaSeq.exists { e => - e.mediaType.contains(MediaType.Video) - } - } - } - - def getEngagementFilteredTweets( - minFavCount: Long - )( - implicit dateRange: DateRange - ): TypedPipe[(Long, Int)] = { - val engagementFilteredTweetsPipe = DAL - .read(ServerEngagementsScalaDataset, dateRange.prepend(Days(2))).withRemoteReadPolicy( - AllowCrossDC).toTypedPipe - .collect { - case event if InteractionEventUtils.isTweetType(event) => - val targetTweetId = event.targetId - event.details match { - case InteractionDetails.Favorite(_) => (targetTweetId, 1) - case _ => (targetTweetId, 0) - } - } - .sumByKey - .map { - case (tweetId, count) => (tweetId, count) - } - .filter(_._2 >= minFavCount) - - engagementFilteredTweetsPipe - } - - def run(args: Args)(implicit dateRange: DateRange, idx: UniqueID) = { - val minFavCount = args.int("minFavCount", 32) - val indexAllTweets = args.boolean("indexAllTweets") - - val tweetSimclusterDataset = getTweetSimclusterFeatures(args) - val tweetSourceDataset = getTweetSource() - val engagementFilteredTweetsPipe = getEngagementFilteredTweets(minFavCount) - val inputEmbeddingFormat = UserKind.parser - .getEmbeddingFormat(args, "f2v_input", Some(dateRange.prepend(Days(14)))) - val f2vProducerEmbeddings = inputEmbeddingFormat.getEmbeddings - .map { - case EmbeddingWithEntity(userId, embedding) => (userId.userId, embedding) - } - - val engagementFilteredTweetInfoPipe = tweetSourceDataset - .groupBy(_.tweetId) - .join(engagementFilteredTweetsPipe.groupBy(_._1)) - .map { - case (tweetId, (tweetInfo, tweetFavCount)) => - (tweetId, tweetInfo) - } - - val filteredSimclustersPipe = tweetSimclusterDataset - .groupBy(_._1) - .join(engagementFilteredTweetInfoPipe.groupBy(_._1)) - .map { - case (tweetId, ((_, simclusterEmbedding), (_, tweetInfo))) => - (tweetId, simclusterEmbedding, tweetInfo) - } - .filter { - case (_, _, tweetInfo) => - tweetInfo.quotedTweetTweetId.isEmpty && - tweetInfo.inReplyToTweetId.isEmpty && - tweetInfo.language.exists(SupportedLanguages.contains) && - (indexAllTweets || (!tweetInfo.media.exists(_.isEmpty) && isVideoTweet(tweetInfo))) && - !tweetInfo.nsfwAdmin && - !tweetInfo.nsfwUser - } - .map { - case (tweetId, simclusterEmbedding, tweetInfo) => - (tweetInfo.userId, tweetId, simclusterEmbedding) - } - - val dataRecordsPipe = filteredSimclustersPipe - .groupBy(_._1) - .leftJoin(f2vProducerEmbeddings.groupBy(_._1)) - .values - .map { - case ((authorId1, tweetId, simclusterEmbedding), Some((authorId2, f2vEmbedding))) => - TweetSimclusterRecordAdapter.adaptToDataRecord( - (tweetId, simclusterEmbedding, f2vEmbedding)) - case ((authorId, tweetId, simclusterEmbedding), None) => - TweetSimclusterRecordAdapter.adaptToDataRecord( - (tweetId, simclusterEmbedding, DEFAULT_F2V_VECTOR)) - } - - val modelPath = args.getOrElse("model_path", "") - val batchPredictor = getPredictionEngine(modelName = "tweet_model", modelPath = modelPath) - val tweetIdFeature = SharedFeatures.TWEET_ID - val tweetEmbeddingName = args.getOrElse("tweet_embedding_name", "output") - - val outputPipe = batchPredictor.predict(dataRecordsPipe).map { - case (originalDataRecord, predictedDataRecord) => - val tweetId = originalDataRecord.getFeatureValue(tweetIdFeature) - val scalaPredictedDataRecord = - ScalaToJavaDataRecordConversions.javaDataRecord2ScalaDataRecord(predictedDataRecord) - val tweetEmbeddingTensor = - scalaPredictedDataRecord.tensors.get(FeatureUtil.featureIdForName(tweetEmbeddingName)) - val tweetEmbeddingWithEntity = getEmbeddingWithEntity(tweetEmbeddingTensor, tweetId) - tweetEmbeddingWithEntity - } - - buildAnnIndex(outputPipe, args) - } -} - -object TweetEmbeddingGenerationAdhocJob - extends TwitterExecutionApp - with TweetEmbeddingGenerationTrait { - - override def job: Execution[Unit] = - Execution.withId { implicit uid => - Execution.withArgs { args => - implicit val dateRange: DateRange = DateRange.parse(args.list("dateRange")) - run(args) - } - } -} - -object TweetEmbeddingGenerationBatchJob - extends TwitterScheduledExecutionApp - with TweetEmbeddingGenerationTrait { - - override def scheduledJob: Execution[Unit] = - Execution.withId { implicit uid => - Execution.withArgs { args => - implicit val tz: TimeZone = DateOps.UTC - val batchFirstTime = BatchFirstTime(RichDate("2021-10-28")(tz, DateParser.default)) - val analyticsArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(getClass.getName), - firstTime = batchFirstTime, - batchIncrement = BatchIncrement(Hours(updateHours)), - batchWidth = Some(BatchWidth(Hours(updateHours))) - ) - - AnalyticsBatchExecution(analyticsArgs) { implicit dateRange => - run(args) - } - } - } -} - -object TweetEmbeddingGenerationBatchJobAlternate - extends TwitterScheduledExecutionApp - with TweetEmbeddingGenerationTrait { - - override def scheduledJob: Execution[Unit] = - Execution.withId { implicit uid => - Execution.withArgs { args => - implicit val tz: TimeZone = DateOps.UTC - val batchFirstTime = BatchFirstTime(RichDate("2022-03-28")(tz, DateParser.default)) - val analyticsArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(getClass.getName), - firstTime = batchFirstTime, - batchIncrement = BatchIncrement(Hours(updateHours)), - batchWidth = Some(BatchWidth(Hours(updateHours))) - ) - - AnalyticsBatchExecution(analyticsArgs) { implicit dateRange => - run(args) - } - } - } -} - -object TweetEmbeddingGenerationBatchJobExperimental - extends TwitterScheduledExecutionApp - with TweetEmbeddingGenerationTrait { - - override def scheduledJob: Execution[Unit] = - Execution.withId { implicit uid => - Execution.withArgs { args => - implicit val tz: TimeZone = DateOps.UTC - val batchFirstTime = BatchFirstTime(RichDate("2021-12-12")(tz, DateParser.default)) - val analyticsArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(getClass.getName), - firstTime = batchFirstTime, - batchIncrement = BatchIncrement(Hours(updateHours)), - batchWidth = Some(BatchWidth(Hours(updateHours))) - ) - - AnalyticsBatchExecution(analyticsArgs) { implicit dateRange => - run(args) - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/mbcg/UserEmbeddingGenerationJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/mbcg/UserEmbeddingGenerationJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..f7fecd5cfd6a51906623dfdf07fa0cbfd02eb0d8 GIT binary patch literal 39599 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 ThriftGeneralTensor} -import com.twitter.ml.api.util.FDsl._ -import com.twitter.ml.api.util.ScalaToJavaDataRecordConversions -import com.twitter.ml.featurestore.lib.embedding.EmbeddingWithEntity -import com.twitter.scalding.Args -import com.twitter.scalding.DateParser -import com.twitter.scalding.DateRange -import com.twitter.scalding.Execution -import com.twitter.scalding.UniqueID -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossDC -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.scalding_internal.job.analytics_batch.AnalyticsBatchExecution -import com.twitter.scalding_internal.job.analytics_batch.AnalyticsBatchExecutionArgs -import com.twitter.scalding_internal.job.analytics_batch.BatchDescription -import com.twitter.scalding_internal.job.analytics_batch.BatchFirstTime -import com.twitter.scalding_internal.job.analytics_batch.BatchIncrement -import com.twitter.scalding_internal.job.analytics_batch.BatchWidth -import com.twitter.scalding_internal.job.analytics_batch.TwitterScheduledExecutionApp -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import com.twitter.simclusters_v2.hdfs_sources.ExploreMbcgUserEmbeddingsKvScalaDataset -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import com.twitter.twml.runtime.scalding.TensorflowBatchPredictor -import com.twitter.twml.runtime.scalding.TensorflowBatchPredictor.ScaldingThreadingConfig -import com.twitter.usersource.snapshot.flat.UsersourceFlatScalaDataset -import com.twitter.usersource.snapshot.flat.thriftscala.FlatUser -import java.util.TimeZone - -/* -This class does the following: -1) Get user IIAPE Simcluster features that use LogFav scores -2) Filter them down to users whose accounts are not deactivated or suspended -3) Convert the remaining user Simclusters into DataRecords using UserSimclusterRecordAdapter -4) Run inference using a TF model exported with a DataRecord compatible serving signature -5) Write to MH using a KeyVal format - */ -trait UserEmbeddingGenerationTrait { - implicit val tz: TimeZone = DateOps.UTC - implicit val dp: DateParser = DateParser.default - implicit val updateHours = 12 - - private val inputNodeName = "request:0" - private val outputNodeName = "response:0" - private val functionSignatureName = "serve" - private val predictionRequestTimeout = 5.seconds - private val IIAPEHdfsPath: String = - "/atla/proc3/user/cassowary/manhattan_sequence_files/interested_in_from_ape/Model20m145k2020" - - private val DEFAULT_F2V_VECTOR: Embedding[Float] = Embedding(Array.fill[Float](200)(0.0f)) - - def getPredictionEngine(modelName: String, modelPath: String): TensorflowBatchPredictor = { - val config = TensorflowPredictionEngineConfig( - modelName = modelName, - modelSource = modelPath, - threadingConfig = Some(ScaldingThreadingConfig), - defaultInputNode = inputNodeName, - defaultOutputNode = outputNodeName, - functionSignatureName = functionSignatureName, - statsReceiver = NullStatsReceiver - ) - TensorflowBatchPredictor(config, predictionRequestTimeout) - } - - def getEmbeddingWithEntity(userEmbeddingTensor: ThriftGeneralTensor, userId: Long) = { - userEmbeddingTensor match { - case ThriftGeneralTensor.RawTypedTensor(rawTensor) => - val embedding = - thriftscala.Embedding(Some(rawTensor)) - KeyVal(userId, embedding) - case _ => throw new IllegalArgumentException("tensor is wrong type!") - } - } - - def writeUserEmbedding( - result: TypedPipe[KeyVal[Long, thriftscala.Embedding]], - args: Args - ): Execution[Unit] = { - result.writeDALVersionedKeyValExecution( - ExploreMbcgUserEmbeddingsKvScalaDataset, - D.Suffix( - args.getOrElse("kvs_output_path", "/user/cassowary/explore_mbcg/user_kvs_store/test") - ) - ) - } - - def getUserSimclusterFeatures( - args: Args - )( - implicit dateRange: DateRange - ): TypedPipe[(Long, ClustersUserIsInterestedIn)] = { - val userSimclusterEmbeddingTypedPipe = TypedPipe - .from(AdhocKeyValSources.interestedInSource(IIAPEHdfsPath)) - .collect { - case ( - userId, - iIAPE: ClustersUserIsInterestedIn - ) => - (userId.toLong, iIAPE) - } - - userSimclusterEmbeddingTypedPipe - } - - def getUserSource()(implicit dateRange: DateRange): TypedPipe[FlatUser] = { - val userSource = - DAL - .readMostRecentSnapshotNoOlderThan(UsersourceFlatScalaDataset, Days(7)) - .withRemoteReadPolicy(AllowCrossDC) - .toTypedPipe - - userSource - } - - def run(args: Args)(implicit dateRange: DateRange, id: UniqueID) = { - val userSimclusterDataset = getUserSimclusterFeatures(args) - val userSourceDataset = getUserSource() - - val inputEmbeddingFormat = UserKind.parser - .getEmbeddingFormat(args, "f2v_input", Some(dateRange.prepend(Days(14)))) - val f2vConsumerEmbeddings = inputEmbeddingFormat.getEmbeddings - .map { - case EmbeddingWithEntity(userId, embedding) => (userId.userId, embedding) - } - - val filteredUserPipe = userSimclusterDataset - .groupBy(_._1) - .join(userSourceDataset.groupBy(_.id.getOrElse(-1L))) - .map { - case (userId, ((_, simclusterEmbedding), userInfo)) => - (userId, simclusterEmbedding, userInfo) - } - .filter { - case (_, _, userInfo) => - !userInfo.deactivated.contains(true) && !userInfo.suspended - .contains(true) - } - .map { - case (userId, simclusterEmbedding, _) => - (userId, simclusterEmbedding) - } - - val dataRecordsPipe = filteredUserPipe - .groupBy(_._1) - .leftJoin(f2vConsumerEmbeddings.groupBy(_._1)) - .values - .map { - case ((userId1, simclusterEmbedding), Some((userId2, f2vEmbedding))) => - UserSimclusterRecordAdapter.adaptToDataRecord( - (userId1, simclusterEmbedding, f2vEmbedding)) - case ((userId, simclusterEmbedding), None) => - UserSimclusterRecordAdapter.adaptToDataRecord( - (userId, simclusterEmbedding, DEFAULT_F2V_VECTOR)) - } - - val modelPath = args.getOrElse("model_path", "") - val batchPredictor = getPredictionEngine(modelName = "tweet_model", modelPath = modelPath) - val userIdFeature = SharedFeatures.USER_ID - val userEmbeddingName = args.getOrElse("user_embedding_name", "output") - - val outputPipe = batchPredictor.predict(dataRecordsPipe).map { - case (originalDataRecord, predictedDataRecord) => - val userId = originalDataRecord.getFeatureValue(userIdFeature) - val scalaPredictedDataRecord = - ScalaToJavaDataRecordConversions.javaDataRecord2ScalaDataRecord(predictedDataRecord) - val userEmbeddingTensor = - scalaPredictedDataRecord.tensors.get(FeatureUtil.featureIdForName(userEmbeddingName)) - val userEmbeddingWithEntity = getEmbeddingWithEntity(userEmbeddingTensor, userId) - userEmbeddingWithEntity - } - - Util.printCounters(writeUserEmbedding(outputPipe, args)) - } -} - -object UserEmbeddingGenerationAdhocJob - extends TwitterExecutionApp - with UserEmbeddingGenerationTrait { - - override def job: Execution[Unit] = - Execution.withId { implicit uid => - Execution.withArgs { args => - implicit val dateRange: DateRange = DateRange.parse(args.list("dateRange")) - run(args) - } - } -} - -object UserEmbeddingGenerationBatchJob - extends TwitterScheduledExecutionApp - with UserEmbeddingGenerationTrait { - - override def scheduledJob: Execution[Unit] = - Execution.withId { implicit uid => - Execution.withArgs { args => - implicit val tz: TimeZone = DateOps.UTC - val batchFirstTime = BatchFirstTime(RichDate("2021-12-04")(tz, DateParser.default)) - val analyticsArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(getClass.getName), - firstTime = batchFirstTime, - batchIncrement = BatchIncrement(Hours(updateHours)), - batchWidth = Some(BatchWidth(Hours(updateHours))) - ) - - AnalyticsBatchExecution(analyticsArgs) { implicit dateRange => - run(args) - } - } - } -} - -object UserEmbeddingGenerationBatchJobAlternate - extends TwitterScheduledExecutionApp - with UserEmbeddingGenerationTrait { - - override def scheduledJob: Execution[Unit] = - Execution.withId { implicit uid => - Execution.withArgs { args => - implicit val tz: TimeZone = DateOps.UTC - val batchFirstTime = BatchFirstTime(RichDate("2022-03-28")(tz, DateParser.default)) - val analyticsArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(getClass.getName), - firstTime = batchFirstTime, - batchIncrement = BatchIncrement(Hours(updateHours)), - batchWidth = Some(BatchWidth(Hours(updateHours))) - ) - - AnalyticsBatchExecution(analyticsArgs) { implicit dateRange => - run(args) - } - } - } -} - -object UserEmbeddingGenerationBatchJobExperimental - extends TwitterScheduledExecutionApp - with UserEmbeddingGenerationTrait { - - override def scheduledJob: Execution[Unit] = - Execution.withId { implicit uid => - Execution.withArgs { args => - implicit val tz: TimeZone = DateOps.UTC - val batchFirstTime = BatchFirstTime(RichDate("2021-12-12")(tz, DateParser.default)) - val analyticsArgs = AnalyticsBatchExecutionArgs( - batchDesc = BatchDescription(getClass.getName), - firstTime = batchFirstTime, - batchIncrement = BatchIncrement(Hours(updateHours)), - batchWidth = Some(BatchWidth(Hours(updateHours))) - ) - - AnalyticsBatchExecution(analyticsArgs) { implicit dateRange => - run(args) - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraph.docx b/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraph.docx new file mode 100644 index 0000000000000000000000000000000000000000..07369b9bcb7166af6baad2183ee3353ebbf7937d GIT binary patch literal 41186 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 ZdWWhC$gmmoYgXX_jA7HmCi~Z~{{fk*GKc^G literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraph.scala b/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraph.scala deleted file mode 100644 index 5e289c6b8..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraph.scala +++ /dev/null @@ -1,514 +0,0 @@ -package com.twitter.simclusters_v2.scalding -package multi_type_graph.assemble_multi_type_graph - -import com.twitter.bijection.scrooge.BinaryScalaCodec -import com.twitter.scalding_internal.job.RequiredBinaryComparators.ordSer -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding.{DateRange, Days, Stat, UniqueID} -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import com.twitter.simclusters_v2.thriftscala.{ - LeftNode, - Noun, - RightNode, - RightNodeType, - RightNodeWithEdgeWeight -} -import java.util.TimeZone -import com.twitter.iesource.thriftscala.{InteractionEvent, InteractionType, ReferenceTweet} -import com.twitter.simclusters_v2.common.{Country, Language, TopicId, TweetId, UserId} -import com.twitter.usersource.snapshot.combined.UsersourceScalaDataset -import com.twitter.frigate.data_pipeline.magicrecs.magicrecs_notifications_lite.thriftscala.MagicRecsNotificationLite -import com.twitter.twadoop.user.gen.thriftscala.CombinedUser - -object AssembleMultiTypeGraph { - import Config._ - - implicit val nounOrdering: Ordering[Noun] = new Ordering[Noun] { - // We define an ordering for each noun type as specified in simclusters_v2/multi_type_graph.thrift - // Please make sure we don't remove anything here that's still a part of the union Noun thrift and - // vice versa, if we add a new noun type to thrift, an ordering for it needs to added here as well. - def nounTypeOrder(noun: Noun): Int = noun match { - case _: Noun.UserId => 0 - case _: Noun.Country => 1 - case _: Noun.Language => 2 - case _: Noun.Query => 3 - case _: Noun.TopicId => 4 - case _: Noun.TweetId => 5 - } - - override def compare(x: Noun, y: Noun): Int = (x, y) match { - case (Noun.UserId(a), Noun.UserId(b)) => a compare b - case (Noun.Country(a), Noun.Country(b)) => a compare b - case (Noun.Language(a), Noun.Language(b)) => a compare b - case (Noun.Query(a), Noun.Query(b)) => a compare b - case (Noun.TopicId(a), Noun.TopicId(b)) => a compare b - case (Noun.TweetId(a), Noun.TweetId(b)) => a compare b - case (nounA, nounB) => nounTypeOrder(nounA) compare nounTypeOrder(nounB) - } - } - implicit val rightNodeTypeOrdering: Ordering[RightNodeType] = ordSer[RightNodeType] - - implicit val rightNodeTypeWithNounOrdering: Ordering[RightNode] = - new Ordering[RightNode] { - override def compare(x: RightNode, y: RightNode): Int = { - Ordering - .Tuple2(rightNodeTypeOrdering, nounOrdering) - .compare((x.rightNodeType, x.noun), (y.rightNodeType, y.noun)) - } - } - - def getUserTweetInteractionGraph( - tweetInteractionEvents: TypedPipe[InteractionEvent], - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numUserTweetInteractionEntries = Stat("num_user_tweet_interaction_entries") - val numDistinctUserTweetInteractionEntries = Stat("num_distinct_user_tweet_interaction_entries") - val numFavedTweets = Stat("num_faved_tweets") - val numRepliedTweets = Stat("num_replied_tweets") - val numRetweetedTweets = Stat("num_retweeted_tweets") - val userTweetInteractionsByType: TypedPipe[((UserId, RightNodeType), TweetId)] = - tweetInteractionEvents - .flatMap { event => - val referenceTweet: Option[ReferenceTweet] = event.referenceTweet - val targetId: Long = event.targetId - val userId: Long = event.engagingUserId - - // To find the id of the tweet that was interacted with - // For likes, this is the targetId; for retweet or reply, it is the referenceTweet's id - // One thing to note is that for likes, referenceTweet is empty - val (tweetIdOpt, rightNodeTypeOpt) = { - event.interactionType match { - case Some(InteractionType.Favorite) => - // Only allow favorites on original tweets, not retweets, to avoid double-counting - // because we have retweet-type tweets in the data source as well - ( - if (referenceTweet.isEmpty) { - numFavedTweets.inc() - Some(targetId) - } else None, - Some(RightNodeType.FavTweet)) - case Some(InteractionType.Reply) => - numRepliedTweets.inc() - (referenceTweet.map(_.tweetId), Some(RightNodeType.ReplyTweet)) - case Some(InteractionType.Retweet) => - numRetweetedTweets.inc() - (referenceTweet.map(_.tweetId), Some(RightNodeType.RetweetTweet)) - case _ => (None, None) - } - } - for { - tweetId <- tweetIdOpt - rightNodeType <- rightNodeTypeOpt - } yield { - numUserTweetInteractionEntries.inc() - ((userId, rightNodeType), tweetId) - } - } - - userTweetInteractionsByType - .mapValues(Set(_)) - .sumByKey - .flatMap { - case ((userId, rightNodeType), tweetIdSet) => - tweetIdSet.map { tweetId => - numDistinctUserTweetInteractionEntries.inc() - ( - LeftNode.UserId(userId), - RightNodeWithEdgeWeight( - rightNode = RightNode(rightNodeType = rightNodeType, noun = Noun.TweetId(tweetId)), - weight = 1.0)) - } - } - } - - def getUserFavGraph( - userUserFavEdges: TypedPipe[(UserId, UserId, Double)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numInputFavEdges = Stat("num_input_fav_edges") - userUserFavEdges.map { - case (srcId, destId, edgeWt) => - numInputFavEdges.inc() - ( - LeftNode.UserId(srcId), - RightNodeWithEdgeWeight( - rightNode = - RightNode(rightNodeType = RightNodeType.FavUser, noun = Noun.UserId(destId)), - weight = edgeWt)) - } - } - - def getUserFollowGraph( - userUserFollowEdges: TypedPipe[(UserId, UserId)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numFlockFollowEdges = Stat("num_flock_follow_edges") - userUserFollowEdges.map { - case (srcId, destId) => - numFlockFollowEdges.inc() - ( - LeftNode.UserId(srcId), - RightNodeWithEdgeWeight( - rightNode = - RightNode(rightNodeType = RightNodeType.FollowUser, noun = Noun.UserId(destId)), - weight = 1.0)) - } - } - - def getUserBlockGraph( - userUserBlockEdges: TypedPipe[(UserId, UserId)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numFlockBlockEdges = Stat("num_flock_block_edges") - userUserBlockEdges.map { - case (srcId, destId) => - numFlockBlockEdges.inc() - ( - LeftNode.UserId(srcId), - RightNodeWithEdgeWeight( - rightNode = - RightNode(rightNodeType = RightNodeType.BlockUser, noun = Noun.UserId(destId)), - weight = 1.0)) - } - } - - def getUserAbuseReportGraph( - userUserAbuseReportEdges: TypedPipe[(UserId, UserId)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numFlockAbuseEdges = Stat("num_flock_abuse_edges") - userUserAbuseReportEdges.map { - case (srcId, destId) => - numFlockAbuseEdges.inc() - ( - LeftNode.UserId(srcId), - RightNodeWithEdgeWeight( - rightNode = - RightNode(rightNodeType = RightNodeType.AbuseReportUser, noun = Noun.UserId(destId)), - weight = 1.0)) - } - } - - def filterInvalidUsers( - flockEdges: TypedPipe[(UserId, UserId)], - validUsers: TypedPipe[UserId] - ): TypedPipe[(UserId, UserId)] = { - flockEdges - .join(validUsers.asKeys) - // .withReducers(10000) - .map { - case (srcId, (destId, _)) => - (destId, srcId) - } - .join(validUsers.asKeys) - // .withReducers(10000) - .map { - case (destId, (srcId, _)) => - (srcId, destId) - } - } - - def getUserSpamReportGraph( - userUserSpamReportEdges: TypedPipe[(UserId, UserId)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numFlockSpamEdges = Stat("num_flock_spam_edges") - userUserSpamReportEdges.map { - case (srcId, destId) => - numFlockSpamEdges.inc() - ( - LeftNode.UserId(srcId), - RightNodeWithEdgeWeight( - rightNode = - RightNode(rightNodeType = RightNodeType.SpamReportUser, noun = Noun.UserId(destId)), - weight = 1.0)) - } - } - - def getUserTopicFollowGraph( - topicUserFollowedByEdges: TypedPipe[(TopicId, UserId)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numTFGEdges = Stat("num_tfg_edges") - topicUserFollowedByEdges.map { - case (topicId, userId) => - numTFGEdges.inc() - ( - LeftNode.UserId(userId), - RightNodeWithEdgeWeight( - rightNode = - RightNode(rightNodeType = RightNodeType.FollowTopic, noun = Noun.TopicId(topicId)), - weight = 1.0) - ) - } - } - - def getUserSignUpCountryGraph( - userSignUpCountryEdges: TypedPipe[(UserId, (Country, Language))] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numUserSourceEntriesRead = Stat("num_user_source_entries") - userSignUpCountryEdges.map { - case (userId, (country, lang)) => - numUserSourceEntriesRead.inc() - ( - LeftNode.UserId(userId), - RightNodeWithEdgeWeight( - rightNode = - RightNode(rightNodeType = RightNodeType.SignUpCountry, noun = Noun.Country(country)), - weight = 1.0)) - } - } - - def getMagicRecsNotifOpenOrClickTweetsGraph( - userMRNotifOpenOrClickEvents: TypedPipe[MagicRecsNotificationLite] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numNotifOpenOrClickEntries = Stat("num_notif_open_or_click") - userMRNotifOpenOrClickEvents.flatMap { entry => - numNotifOpenOrClickEntries.inc() - for { - userId <- entry.targetUserId - tweetId <- entry.tweetId - } yield { - ( - LeftNode.UserId(userId), - RightNodeWithEdgeWeight( - rightNode = RightNode( - rightNodeType = RightNodeType.NotifOpenOrClickTweet, - noun = Noun.TweetId(tweetId)), - weight = 1.0)) - } - } - } - - def getUserConsumedLanguagesGraph( - userConsumedLanguageEdges: TypedPipe[(UserId, Seq[(Language, Double)])] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numPenguinSourceEntriesRead = Stat("num_penguin_source_entries") - userConsumedLanguageEdges.flatMap { - case (userId, langWithWeights) => - numPenguinSourceEntriesRead.inc() - langWithWeights.map { - case (lang, weight) => - ( - LeftNode.UserId(userId), - RightNodeWithEdgeWeight( - rightNode = RightNode( - rightNodeType = RightNodeType.ConsumedLanguage, - noun = Noun.Language(lang)), - weight = weight)) - } - } - } - - def getSearchGraph( - userSearchQueryEdges: TypedPipe[(UserId, String)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numSearchQueries = Stat("num_search_queries") - userSearchQueryEdges.map { - case (userId, query) => - numSearchQueries.inc() - ( - LeftNode.UserId(userId), - RightNodeWithEdgeWeight( - rightNode = - RightNode(rightNodeType = RightNodeType.SearchQuery, noun = Noun.Query(query)), - weight = 1.0)) - } - } - - def buildEmployeeGraph( - fullGraph: TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numEmployeeEdges = Stat("num_employee_edges") - val employeeIds = Config.SampledEmployeeIds - fullGraph - .collect { - case (LeftNode.UserId(userId), rightNodeWithWeight) if employeeIds.contains(userId) => - numEmployeeEdges.inc() - (LeftNode.UserId(userId), rightNodeWithWeight) - } - } - - def getTruncatedGraph( - fullGraph: TypedPipe[(LeftNode, RightNodeWithEdgeWeight)], - topKWithFrequency: TypedPipe[(RightNodeType, Seq[(Noun, Double)])] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - val numEntriesTruncatedGraph = Stat("num_entries_truncated_graph") - val numTopKTruncatedNouns = Stat("num_topk_truncated_nouns") - - implicit val rightNodeSer: RightNode => Array[Byte] = BinaryScalaCodec(RightNode) - val topNouns: TypedPipe[RightNode] = topKWithFrequency - .flatMap { - case (rightNodeType, nounsList) => - nounsList - .map { - case (nounVal, aggregatedFrequency) => - numTopKTruncatedNouns.inc() - RightNode(rightNodeType, nounVal) - } - } - - fullGraph - .map { - case (leftNode, rightNodeWithWeight) => - (rightNodeWithWeight.rightNode, (leftNode, rightNodeWithWeight)) - } - .sketch(reducers = 5000) - .join(topNouns.asKeys.toTypedPipe) - .map { - case (rightNode, ((left, rightNodeWithWeight), _)) => - numEntriesTruncatedGraph.inc() - (left, rightNodeWithWeight) - } - } - - def getTopKRightNounsWithFrequencies( - fullGraph: TypedPipe[(LeftNode, RightNodeWithEdgeWeight)], - topKConfig: Map[RightNodeType, Int], - minFrequency: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[(RightNodeType, Seq[(Noun, Double)])] = { - val maxAcrossRightNounType: Int = topKConfig.valuesIterator.max - fullGraph - .map { - case (leftNode, rightNodeWithWeight) => - (rightNodeWithWeight.rightNode, 1.0) - } - .sumByKey - // .withReducers(20000) - .toTypedPipe - .filter(_._2 >= minFrequency) - .map { - case (rightNode, freq) => - (rightNode.rightNodeType, (rightNode.noun, freq)) - } - .group(rightNodeTypeOrdering) - // Note: if maxAcrossRightNounType is >15M, it might result in OOM on reducer - .sortedReverseTake(maxAcrossRightNounType)(Ordering.by(_._2)) - // An alternative to using group followed by sortedReverseTake is to define TopKMonoids, - // one for each RightNodeType to get the most frequent rightNouns - .map { - case (rightNodeType, nounsListWithFreq) => - val truncatedList = nounsListWithFreq - .sortBy(-_._2) - .take(topKConfig.getOrElse(rightNodeType, NumTopNounsForUnknownRightNodeType)) - (rightNodeType, truncatedList) - } - } - - def getValidUsers( - userSource: TypedPipe[CombinedUser] - )( - implicit uniqueID: UniqueID - ): TypedPipe[UserId] = { - val numValidUsers = Stat("num_valid_users") - userSource - .flatMap { u => - for { - user <- u.user - if user.id != 0 - safety <- user.safety - if !(safety.suspended || safety.deactivated) - } yield { - numValidUsers.inc() - user.id - } - } - } - - def getFullGraph( - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = { - - // list of valid UserIds - to filter out deactivated or suspended user accounts - val userSource: TypedPipe[CombinedUser] = - DAL - .readMostRecentSnapshotNoOlderThan(UsersourceScalaDataset, Days(7)).toTypedPipe - val validUsers: TypedPipe[UserId] = getValidUsers(userSource).forceToDisk - - //Dataset read operations - - // ieSource tweet engagements data for tweet favs, replies, retweets - from last 14 days - val tweetSource: TypedPipe[InteractionEvent] = - ExternalDataSources.ieSourceTweetEngagementsSource(dateRange = - DateRange(dateRange.end - Days(14), dateRange.end)) - - // user-user fav edges - val userUserFavEdges: TypedPipe[(UserId, UserId, Double)] = - ExternalDataSources.getFavEdges(HalfLifeInDaysForFavScore) - - // user-user follow edges - val userUserFollowEdges: TypedPipe[(UserId, UserId)] = - filterInvalidUsers(ExternalDataSources.flockFollowsSource, validUsers) - - // user-user block edges - val userUserBlockEdges: TypedPipe[(UserId, UserId)] = - filterInvalidUsers(ExternalDataSources.flockBlocksSource, validUsers) - - // user-user abuse report edges - val userUserAbuseReportEdges: TypedPipe[(UserId, UserId)] = - filterInvalidUsers(ExternalDataSources.flockReportAsAbuseSource, validUsers) - - // user-user spam report edges - val userUserSpamReportEdges: TypedPipe[(UserId, UserId)] = - filterInvalidUsers(ExternalDataSources.flockReportAsSpamSource, validUsers) - - // user-signup country edges - val userSignUpCountryEdges: TypedPipe[(UserId, (Country, Language))] = - ExternalDataSources.userSource - - // user-consumed language edges - val userConsumedLanguageEdges: TypedPipe[(UserId, Seq[(Language, Double)])] = - ExternalDataSources.inferredUserConsumedLanguageSource - - // user-topic follow edges - val topicUserFollowedByEdges: TypedPipe[(TopicId, UserId)] = - ExternalDataSources.topicFollowGraphSource - - // user-MRNotifOpenOrClick events from last 7 days - val userMRNotifOpenOrClickEvents: TypedPipe[MagicRecsNotificationLite] = - ExternalDataSources.magicRecsNotficationOpenOrClickEventsSource(dateRange = - DateRange(dateRange.end - Days(7), dateRange.end)) - - // user-searchQuery strings from last 7 days - val userSearchQueryEdges: TypedPipe[(UserId, String)] = - ExternalDataSources.adaptiveSearchScribeLogsSource(dateRange = - DateRange(dateRange.end - Days(7), dateRange.end)) - - getUserTweetInteractionGraph(tweetSource) ++ - getUserFavGraph(userUserFavEdges) ++ - getUserFollowGraph(userUserFollowEdges) ++ - getUserBlockGraph(userUserBlockEdges) ++ - getUserAbuseReportGraph(userUserAbuseReportEdges) ++ - getUserSpamReportGraph(userUserSpamReportEdges) ++ - getUserSignUpCountryGraph(userSignUpCountryEdges) ++ - getUserConsumedLanguagesGraph(userConsumedLanguageEdges) ++ - getUserTopicFollowGraph(topicUserFollowedByEdges) ++ - getMagicRecsNotifOpenOrClickTweetsGraph(userMRNotifOpenOrClickEvents) ++ - getSearchGraph(userSearchQueryEdges) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..a5995a2bf494174b5d5c2dc38013f70d4d4badf9 GIT binary patch literal 37729 zcmagEWmsL=vNeoraCdiicL@Y{m!Ls65*#)j+}+*XA-Fq);BG+z!QJ1T?mp*qpL_53 z{aHNBSvAI}splbK^02WPC6{CqxG87D_Dl`TiT2nB?lh;Avpsso} zLbJ>8X>Ux~^<~1>jr>8vPb&LmiJ4k6%O(Tit3PjQnDM!W^cUmC_yOlS*GYy3Crb^- z`qkbdWcMLN0P6Q2c0J5)<60a?F!g1T*J`>O=+?nMP5?GR)U~sRkl9*q_5!)btC|d- zI&^iS)qSjv0%h<$?<9~jk9z{>Xd1{25@FKWJ7TK5gYNq8?&ykQD1{%ELJjZcW)T5%kx{$=ueNh57fjDt__R*?#A&fTP^NgLt5ZeNKpVT4_~2~U)M6o{fMAKC*fvnhL}xxAZ?RW-(RbVjUNT+)c%P6oL&s4M~P8u2r& zmWvP5EC2=|E#J%)UQ*Te!`3bQUZnZ6jIp2SQLF=+TAHF68xC(FvaBPy8V zf3eo3oar{jEcw8V&ggNU{WC$KUl7%-K)3k}C_!kT1epO$m7M?%&Mc+?C-dJoc~<F-Y*mOv5TfL7L0 zObnKZR+X`84JzKXguFve#><;I zDXkO@$b(zcbKL+86x9vS&F!o)IaB$Gd^T(4sKt0`9_OV=`3THh&qE$|6S53}&q}B_u)+83{VU!QA;Ue-1r+X)C9)yiteeE^bKfPwKkIV6 zx{7lQs*5cY7#Ql`>+;dT;g7PYkK3=ZqINtnKpA`vw}KT@!Ho}C5Sx)$$FGggY?&J) z{}2b&#m2p{XW(cz<>BfZQ3X z9J&lka}dqI(P(W`M4loBxoZ?zf&Yxe+2YiqvdG(uQ|rH-Zqp8 z#3IYxB11h2h%Y^3OVY1M!0HmkCN!sE_|}a9u72_GzDuaOgwzHPzx?sEpH+*IC~8Hx z{1uJTXKF@Rs&2ft;=>MeC7Dq55DjHA(US=Y0fQ;ssn)@P#G3wHM2Fo)G@i~0P!xh2X{LL?tf8H2sK~iIO zpf%}={?8w*8^Fno1@x&nmzwe9_T|2-kH|lGbk=S8Gdp^23jk9W=VhXncPUFvj z0lg5HKvA{E!60;v`1)Psr!#>M^+X3%_T+;^vEH?`U28%e0>mWjo)?#bXrCq$_t{UH zR@YS*D z_|+A&$%WpcD<;i3eG;U{U<{E^#LJe!+K%45jZiJ7G}jIMx=2ZcaiYG1-j?1N^i8L3 z_i6QfYPK!1BGhb1^%LQTBvi;6Ybc62o$NMJ4vH@*ty>n><}L>&LqarKR?4Fe2fV*h z!N8z)B`5gDS09r_D~4@@bfL}o%xc&@z)={e!D{7QCK`g*PwA2Hchh3^XuLnxCscNN zh?JbsvHK5;Z_%F@I4P5V_|YO~`^4Zr5S|*N4c%8ig%=;u%hQ%&#fHmh+CPdo}^QJWI0yRO9oBAcFqH5)W~y>b%l^$KlyTxD4VG zW3^D_qFk?1Ij4{ApNjDi--nyky>GODpP=tpa}ue#pOW#2mo-oR1)&%49y;V5gp>p) z$A$p+OIB#-`kj}#6cM+s!jVh&j13g9}1W7L}7pBVXfIxQux#H6Frwk#%xy)kjhpK8aHBFC&u z>)IhgW7Y-$`Djlgwv%4fi(vbK6KWBrMs?GC-)4S#8WXONHYs}8aMW;pkiez3Xw{A= zamqa*P92$BjWUtl%;ZR4WvtCGM?u0t0g418>i z{^{v1+QsS*BeT^C5e`jq^WzjGIlbhLC+SzQ(wWuyG=r`8syhXIUOwFPoz%VTl7vM2VV_R9K61Q zBN>-y9M-k)m)y8kB<}_3QHsd$xNP%CMx}ZjHfiBJrb?<>pej1xYkc8|$_z3?sOK;@ zypb`s5(lFR+;DyJfMr_A`|Pz#hljy?fWL0j=1X~?w|;y35z#>9yvbg)V_L8ugW7p^ z_3-g_x@;U`#Kr%FW9~x0ZgJCTRd~)XpOME)pG+_xe^tF+d#v>wEW3{yJv`J5r^6$! zwYsW^C4w@26_P1k&1}g>1+Pp@&C1I_F7M035@L{Oe;wY`6Y6K~B6dqyp}}LPe8Nn2 z>u*}@xB@(kQP)W8hP{sSw-8UmhX{KTZ=9Aql*96L#B5LnXp6y@V4d-*tnvB80kbkh zg>F#xP_sY7^awqy4 zl$U`Ytp$WB2Rp=(bf{>|nqR;EI#?ZM{T!#w!6flzaC#kep$2v2tLAN4W z8;O)IYc@QR{#v;WHKBQqLU+DAmcdD-P6coX_`s9F1KqOwSh$ywL6Ww63Y@p8)_V%1 zw`{9>3dlEXm@aG^$0CIs8b;BEGt{1lh8>KOjg}F7~1^G|;y1L)KK6#sNrfCq->HTzjIUPFI*@J&aZ_UHq zeqw*Itj^8<08y2YJ$w3@+h>*I%cat)@{oCmgvpI4M8MOg<2cpbI zL`!O1D0q66A{mgjsO_A8OyNSetU&csY1Nwf6XtweA)r@FlUr#S4c77|GpgDMue4EG zg|Qp5KVn+L?G^H$Ym>bn0XjRVX&DDKErg(^<&U-L&zAe|E7YIuccPe5AS>>dvsZ+^ z-~`NK`v|;W`PA+7(ltfi!O|=7w-S4sdh2G45=Uiv?3K zNw;o^6bbgC+Dx@=$jcIr2r*u&`gFA*n_#?28(!<{nZyB4MflHNun;188TGuKfS*a8tOU|@zC&|oP4 z%C+-n4_kBRKe_+|gM=OFdY|s@`~surA9k@pV8c`PVDYYmAH6!W>&`e7IA(u+`-bx= z=ETUCicFM5LsdibLwS6?KwmbtGTok5R)V_u%S(=LhwT~Ah$K4W<#e5=zZsvQ7)!Sxn+*gtjGJfjm+&`>ew5QCs zKOM~eylD>!**)@jsTX{;d;7W(%mQ2?F-$HwpYA^hN!i;TUp;QAco{#wZ1h;OlIsA-s$~?^7e2@;Jp#c>Jvzm+otcv3Cj5J z$>X{Y@3$8b@kyZ*tqstdiJcd}v@bDGn9`Tpckm7Iwte>E^w@2D*Sg^W_X85F`*M(J zXU<7<#?yJy&82%f5zqK_1kj1e^M%io;wqtHm(Inb%VT9tL{dD)H<;zMYptujrE)xJ zkj>Ywea)v!U+=8zZPHsaK2M$8@cdaf z1c;VSh5xx7zVmzozdc0+=n(SjN|+AdeCp-3-@xp{_;6p|G5^p+_5PrRONPd8j`|un$4qh{N`hL1{A8! zv0r?{80bolY+dO-Q9M|U0qorWc&pRxmd+;V`l=_*{XqBF!|i#;Mn&^_zq;?rbAZTK zb}{(Y9!f}kYa;7m$WnmYO`wU8z5`dEy88j?V+G1~DGHk^NuLIZNu}_Bq)#ZFcjzq8 z#kK2t_{3_E2EkDMAuM249hkpGk(5K*D!E64K&%WJ>SYj7sRe-k+h=?ku*Q2cxSx<& zf)%z`Ty-&rz^5<%N_n#R(jmwwLXuoF?KZQf8>`CR7t%7EuvCRSZ-3MOvv$*`8q-wA z+T=N9@nFx;B#TNJEh!P! zP~Spr7{Y7IrFccr;=m<|KNhlg^}MwATu=~1ti5TQd;34-ltu!yVpy`QI$~SGgBP{= zU2&dHUeABpF=P@CeMj@gBD;nAF6K>SL@OIvM8TUNd}dLhF|sE4tWFm5K}JQU6kRou zqauiL50imRj%o1&T)g7f?n>WHLY8~Yv5sNPg~|@Li~?{K+l!o*moofR-EhX&r**4N zf$Fn?!sYN> z^+Zt>FR@XB5;~wqn8Yu!V*_G4pbK+n9VP#J5Sn0tm)!&_5kjy znNU)DZr`zed3fCRl`&F?SugqdY;gVQ#-+``e$Y$oxqorOHSg1s`<34P&}>f4wtLOb zd10l4z5UVr?fa-r5rdW+Ns?&$9p+`xB>m_!t~mU+Cx>?uOdiw5sEli6M46j|YoxcQ zK-Z;AH>APUE@t2192vV~r}%@mUjyNQnjQb@7}PRbA6mh_s|P2>BS*ZI^G$(;Sv#I~ zmXzazIPB^1AErEr`WtKtuEb`YfqD3wM2h=i*72RDC40MU4{v)uDq{#|Y|mFNzTR$U ztqGJUMH|kcwF@^)YO6$)V_ze+mJ+brt?MZ!+g^LuDBw4lGZkkPTW_z2cnbj zaudH_QuB6yc2oN_g*=KKdR*S<4hc0(uYtW?X0(tI@bWrvUaWL5&c5-PIIKfb${Eib9Dzp+dC~MH2u;2ukleoKQ!l6 zo4NESVP*|%^M?igq>T1USd+fu2T|Li5TMU#=CFVT(0?YU4t~?~iIE*~C zDGj%k=jgY^!@LO4m+y9L-{zt4c`l}0-@Ba#NrfnPHu_%vfp`#d9<@H zLBgZ*zJTuwqCzV(XYc1cSswjQl`)8P4%Og+&Pb@g)uL{4LT|V1!hC>^X;V%T zb^h4+eK6k?ap;6oT%|#f`DXH}+5S9Cg5{buFEUL)0CT=TOKU=p22~5X?tlTZ7EYT2 z@*)o#zj6%Y+Ov~0XE8?wb+WqTxsUdAqe=SUa@f&I3m0JH7!mj95xch4P(bcptWxG% z-7QCyVQ@15M}{Ye~dOAkzMo0Lxi>T$Rp9F!nHgCzFr#98(LA9 z%g#6f*J5c6Jr-t_xqx5p#=u@osXH3eAc?xtOFfFvrpOCki^P-&;JU9(#c95v*x;6( zaO`qy+4fMO<1)VI+Zdz1TFkEr42PtA{1vSxt;5g~)Y7zw<2m~n^-k5O8>l_G@3jg( zQbVKVL;S}g%QTEL1j!uda!_0z5{_ldCuQY08Fj>Y-Wobl{=Qkq_8bGTD$cm%i-h&l z2Kfq%B-@Kb^xjZ9V$XDme9jR2a##RarHoq-^ZqNRJ3jv6BVirA7=bA1Y3+$BS;SlX zob~24V}9D;cTs{~YzYI?hFOwFUboxE-@o-wZ#J)Tt)895FQ#ksCn0=!yMKLLAjGMZ zL&;?2?Ot-{tkw9)Re+$VPFenmpLeOe_E>XJ>EbTaR)MnSXKsiJhv$~$@WY^IL4W$! z+c^y7;MGWa-kG@4{DnhQ&B0cC4aU9;?)Daw8McMNn|TYDUdUA`V~ufdPY-LwN_|6n zLEV8lRk<|kDs06y{rT^oe}tA%eK9@sd~j^z|CM%Ak#d+s9`h9l7F^2S*t-NqNJskh z*d1{8DYKS&gWya5xE8^hTO^B7$oa;{Wyq2pB8(yC9}@z$mgb^$YDRbB#!TkoS9r5%YkvrYfz}Q~=I|re78+A)rTJA=>Me#zI4Sd6(tQ^fo#|cD zssqQ?-ZV)?SEizDqc)-Jx7Cq-aao4w4^_P4^*g1Anw7pb$%Q9ts;g}>&Ccz{?ZrIH zvbs+C)}w6kRKr9ql&{h}vK)#ZCV9o!cMB0MY%Lqo3WZ9FZZpZ3omZf}tXsDu6k@SQ zJ?=azs^gE9;|H|0IZalSTn@IXDk)lb_m6OOa1mm9$V^d2Q0rlTG~1qiUgBtGp-R~! zkL;~x1fx=5Kz!6*j4phDZSTr`{-kPih)0QzFD)yl>e@!;HN_~sOvY4Q`Dnb@RMI21 zuGX`$WTSw4vs^}WcNlfYm;F|bY$t?k(Q8p;pUP#Dmy;$nf#4p>}+ia)EX zOn?7nM5BGwIG*vUH2q2}lK#w8UkJ-nf`LZAj0r5gZMMpnb2!Hypgf;|G&9RK@v@4V z%f{J&8wrE_o+ITZt!<*}RMXoBOTdYNK_08Hv^=JB8CIoCMal8DxL>`+(VS~##M-P3 zx?}HhGeWNavIF7!|7c44fJ`=%LOK^CSpR;37gaM)dkgIQn}=#b7ro6c#gzS3>i;n?yccr!Qoid zBB|ajEa0%9@BY<2mC{~a@!pt%4_=bAmY!d+wTzfR27_wYfH<}nxjb?RoSuG5Uv?^cBgT24_Yd1`q}NT zdZ&*P(j+K2OhSc7qin~nvYIE^8oS0wXGdLqFraNF&N&aD=c`!@0*ubXJL?=7`maYw}pEc)rq0#e9i4*yXfk^iRA*<3GYn@BfFK#od z)5vEiik-((&zQ$!+7m_+bpC@|ptx7|*4k)>pgaI`hQOvo7_zgD=a)_N#?a|pJft)$%;7uJAQkmD@1*4&Of0K!u{%G~ z%b;~)O)pvG^W6HcrWdrRY{?IExI%nQ`oZtFK@GW>rqclnO>;i>5x(;$?=Ye}xRAnnNTFvG7AX$}bzz)cHJKypF}rARPY#~OMW zeb7(Mt9`EsIk&}F(1l2`*kv2O!%15lz&~{XvEj!(j5tDmEuBntZSjs5UU2i`l7Rlo z*&^q6iV9~44z`A6NY-{qq>Od<;1}cp)8NJ>%Iw(u)2d0E|^oHsylmPx(C&76tM3uchrma5m8 z<%Sen3eTpy;ENbTQiGc zDAz1epM`L=catt#VCY_eM}1^40b6~1jdkUS*f{<2J2=QsT>s+=nmx`jH4nxNtBdwoSXQQ zSlf~SPmj*1@1-~!OQFg&*1qVS83g_v*}Bv&XgB+n>2?n@mUD98ESTp(o>s^+{Y6Jo zon``*t7W-{hDxQJN5MQnzBC475H!?LEm@FP6J?XZBA+nWO zCdoWo)jLa5Y(vZhtmd9-`uD>EU3XJ*N$=|W(nOiLXwmRE7OzlT<~EhzQ;{;m(xUVN z-T0*g3AHjNhh>V+PK}b^)=4&|#jhj_DkUP>1niT4;=KIOy?%7Qmfok)8df{H^uB78 z#ViXonT$NlnyaX7cHrQM7UFVcx+KEy{Ps#6ig77(Wf~z8 zfgS=Oh5@f=jyWfsnEE|W3tXw3dxeJ3(Jx6wDN%ke|2{GSkwaa{0&-Glql8{jn#fNe zs(?rm_vYc#?6l5uE40{u^FUGli$`%+76*JA^l<~N*4X)Ih=rBD6pj`YQsVcYV(Qnd zd|%t7L=F1%s*Y3+dKuNB)EOa;a8WRk)uHCjU!U0UtgyXTu)#-N5&@9F^9DFLNvDSs6-29YuWcADW1`B-jfb*h_KisdQA$?X#^j>EYltg>* zk_P;W_rW(%m_%Bxv%*6Zq1Pg37$gXv+OhXTxTN zI_Fk;P?W2(D~iRWrVkCIt6?YH4v*!Xv6OoIi!O80+elXe6u`^-J?c;sh5 zWJcTnQasjhKauJjZU75Oc8bzA5q1oWaJP3#N3{dTtn^)4TWkTr*5QCLzQ~gS4|2hB*qv^D>Q3*m zAU323FiTsWjDR`d!h6E1(I!uU43#c7VG7KN^nDKaKu@$o3brI;F$3cl@`kLD%9_|T zzC~8A9rGNWcYI&LqZJvYHz5-UJ{YGHEmu%Q&}9>jo3fo>nT8Ew)^D#FGE!$M`g5;f zLc~F&iIX~ksliFU3mqImB*&h`!j_0zRy13HhH!%AFpv3l#1TREo~LIfZ1B))$5f3` zx`qR`$&78V;LM#71_(x6mnzPk36rp#sW$8Qtr#^F^P7JH7+)*~Ex3s&qqHGvU21hL zZuo>Nc>^#7tl=E?q!ds*mr+`S>%@{T?yW^Ct#uH1xw#w|4p zf&^XIYJJ$g2ZRoO4jxoCYsN@xI*Ax<9-87-IQyH*ed*sS)kqpaD*Iu7tAqltOEnp8 z`{~WPZzh3bhu|**?(zgV;@|iN8R}1DO3D6nRYlssYw>_|-w zlkKuYY^rDF@FK2D*KMWz8C|&Q?jx0DrCs!u&eRgo3(dBJjdEI;3@-W!!1QzK8Gx*& zOgB3CH||&U(R5j5j(*!s!nI^7r<#(@Y*-}?TnP*%^<2+Q|etP5tS_`#+tMCij?b_Adwc!kp0$ep97ZBH5lRWMYip5Aa2C;CXhS zA5=;;{hoIvFhf0*X~qPIuX`? zDB&IG!aSmVA{Wt2jLAP0y8cgvmzh@~lX07s+@30VVkf0| zPNPnx`mmP+dEc2vW~&SFIQBf$2PJxud&?KpVRdXxo+WBGv!dfRiGHuphYy?U-HdPT zA{{xwD!8)xA*fcaYmBojkE2b8HwTAN6H3+5C3AZZ`&I>!7B=-PtR*GOhFqS6FjJp@ z)t&bD$)0|disFNt3s+t@2S6Wp__e-r4eTRsT3@+h=wgO`H zOV)qnsaCmu>^0zH1V`)l4~-3ON0M5J%o6TLgS?4`kriA;^v=K_-6+Rr+`d(v z>O*&@Fb|+=t)*OyWW$KS793y*q0%ntZuEJ zYN2j4=Z)c8)-AA;d%Wz>8GD1N+JFXW+Kt;}hJ1{@==~qVepAc+L5&WghL!u>eNVJ) zEFdKt|3U3)HV&c|;Qo{PI~7I*^8Z17(KP_y5td`L;obJW(-{7!s=OE7em0wt(ckSC znRY-&GiCd+2u1{jd#Dz&TKge6yI58ra{}1vRW7(~T=#e!@S$8E*BSaqt*LE*yC2oEe#o<*hGknxPD9yR zmhThLeEP1Y@!nv=A$$R7ggz;&`+`884wG+%Wt3WW_k}Ed0X&`h+nN~g)TY7|3hw&4 z-7Q*-Q(@tGNTP(_D&1@iLt!?w7=CF=eUe9Uwy>l;`fJBFXVr_aLi%juBbFp5lH}}| zm$}YSXMJd~i(fH3XM0@E)5=jUB!tk*DU}7PLIPL!#kVrWbZWdi$yv^PD~M(ejjO0x z&YxxF1Rw{nP|QhQLYulWcQDQu4evle^I4wF9v+c zS+hxi;OFv$V%Z^~8P2Fr>3%2j^WM9h3ZCUhrQ-yOvnyx2Wqb-1Mq-k)qMTJ7Ddj~Q za!H?bVLzpda!B?Bye0E9_PKgqe_gEnSB$!M#iN6N1H1B?HTxsTpPW@UT|-}I8(01n zq@3PSXHnRnL53v#4w4t~caWWS|9?U9D%f;Sx9@XS0YO1x6kEOV+h(^C5f|WK;R{4( zd^D$aBn0g!*N3g{?JS=hfVZyEFhO2RB{gEoU}@{hFo(=D?6-Ih;*Q;#T~&VAH2UcD z;10C@rosmy(W^6qI;%Iqrw0cKhv2njhWdiwxzsus=!Ocwgo7?m7tSH`_nfutg9-K{ znYIjsZV9Hu<_C2hTaclIVB&tE;2)t{No5mBSxRYm#j0-1LgFAMOyL+P^0UAgw4(%}(7Z4p!wA;ZZEDgqjB+lHUdK0y;K^8@+@nuV5Y_b02NpU1mx=-U>9?1M?{KEnlSL(xtR zu8y9Q;lx42bD(?>PPoE-z^Lt19y~I~FR`juFjY}IYj7u015!|%;SSC$gU&L7cm!{# ze2g&ju>(IF=QP*hM26E(!x)AEXgTNUxDCPn)BxnZXur7 zEIn?e7>2Z`ZW&Xsrix4LpyZvDgOYaw2Rq_#+Y0s1`Xembufyd6p5PLuk;$LT|;7v5ApNI;hJIsGNBF_~AqW+SNaR z*W&fN6&Uqe5-JvzG$XtVx*G@x9qk*D7qYLN4M&>yy1@lNVY7BwKfjtptzp&6krfS# z!&KHdvYi+J*0uzhdsD_gBy5O z{)K*ndcIV|Y@rK?duZA`Qp|cN%f~!#J(ucfvRVJUueBlnO%*^bGf@LM0bqB?nzNsk z58_we2PH4)0sbALF%Y64AT{T_HGZPTX)T+z8yg>^x%Zh-1a1jSaX}6JiUVv7{pvU$ zE%afVwL1>y-qv_p{+Nlq`!*xFoI^w-5rP=!7wOHPRM-ou07Os{ASb5Nrm+!Ii1H|C zuP|^i8>eeLwMT@zk5oQBJxdNJtsiJ{*&C%AT`^g#E*~7gsBM=}?puPjQtdBFQJ`K) z)J5=Iz4Tx!9owB=*>t{e_6dtf{U+*~u5qo(n0g)~@YXv*>H_7!?*V$Z?AU>PE|^`! zUrY>XxFRI@8mERBYe7-}v;Okww#M#l&_mNV#*V17=jWd7#2%ghF4c67=Py+pj;fZC z=M@nd(ZBNN09$5oT+H5m`QmeK=QC>&nyu1EXR|iY>AV1~LR052b}eiB2`(6&053V$ zY$#blmE80$NU_O*w~re33-{i+%$#mG)WAS&3!#Kbb_hP2d4RtZGO&aKEKBY9=VQ6O z#Rw)nzfLlU2Ev> zONkZR8;O=iHJ2lD@)h0S8(FNcHpC#V3WdOV8bB^>dD< zt&nWUn;QuF`#k&%1YohE$QV)THUB`ocZCc0W@i9Nc}xY?GyUypdCsIPw8#fE_48xT z-kK;3R+rwV--4e}sc+W!oI!#E{v$Xbrwm%;Pr<#v1)u*GTupH7;>z}*d2HL|1uddZ zqQ!8ZL^5hyK{6`;7qEM8O;TXYzkrp$em0B7nH&PcdcM8^s)0@~@`_+R%QM~Q9f}thZaFngTi{ot#Nzl@G>~>dJt2B7K!Ax zSXL`)U=xKF@#)-5q^seX0*$I60uT9=jaYI)QP-7iSsq;%tn~waM0vZerw$U8ZY_#! z9(jV|8JV%o7`+{<$A9dd;PbKL4ofBzHfTK!xibuRE?&SmL& zxF{fJ=wHSBUvuMH@L)2eLp!#E49agVz@>8wR8e+l5rD`2CFm#&z4}8w&gqVpUvTF| zZd#uqI|0M=52OVc0qrfk0TDh}VG{N#{ZX+%{ly4#I>*p7jEpb(0T!`UtfD278U_fs zN+_jz`FGb%DAVI5TyXhjv;d)xJqwi8VojXG`Wu8+M`2@-8d$bK2e3-;y)Q>IGYT3I zrOMqJ@M3GDcgGUKmtEd1KzO@=EvR0$sSzqvMbeH4(lw`FJ?1Rzq_`U}?^@PXSj_=f zxkJN^Sm;tp%>Ue~bEJVg_RJ&yY3^gS0l{_)Vf$injRTkbhqt>+KyP{Z)i zZfMa0T>_0u3b%HeiZr~24Pw9d`lX^B$#^%g{u{ti={LYp*dG86cWwc@P{ZwT!zVq& z(My}|{FRxC4jmSOkr0;r*6V;u;j<#f$MeLJ((fl-AH8j0v~ovDgzsisES8)AY7wP z`;-2F^Dp`mQ%k`uXi)I`+pU212=Mm(LC*hnr-K~cy??pJMj@p3gTU|Z0J?cVVn!In z$|7nD!pg)aCP`B=t&VHX~LTu>|$7txhuFD1b#OKb+^m zc$O%XeE({Zb^a~V^B7Y9D4}=HM7oBFX9yBE#nC?SXR}@2DudJI2L0c8*dA zSPWe3o<1mPD&k@elq(1Z<1+viwX}R?f&7FnZvxWp`rtuJbB%h6GFV!J%S7O_(#lhsp^kO={43nKYWO+^7~71%c#Dr~@g`|vj{cLYWKG}LfO&Cz44;*?jyE#@V=YbVpHa;}HzD$B)Tre)_Zw<1VgK@AyrM3>!a^dDWJ`r_wBDW4P+sZpN}a&`uNmh0btH z%g``%YCBOq!cOoFR34cczPYyO#I2}o}(4kz3n*-a7LDEO833cw*UT${8)IO3Kf~IkM%y9T} z0^E{mryw^L>ez26vERJk>juC>VZc$N%EvaBT6%$(Q25!4_GUa47}EkPT*QOptJAGY z!2o5l%6T}-dBNOaP*`yEsOqGpq`o~ir~%NoTIiMf^VI5ajDXY0K|qsYsq*(DCM2va zpA9(rYe;&|&Grg_GFc?9FL~WrgKKGQd)_;BT3ZF`Qc-0woYJkwE*|tL4LfmYU+i~6 z+>oXl)>+DVg(a%^^gRUhXzGWs>Yut~6*qJHmU5U0!>HYwB!btF%yY%_P$(3wQ2B)3DHs4n*z+-)I%_+%)@IK}f3pNxD#%{*A zL!w`r8px8G`XBV)a~ED2tai9ge0 z;w=Te8%zH_wNN+&KDkGez2c>Icvbo-iiA4wQ0v#&LXdK|&v1!a5%i8KRj6E# z!ybjXAU+`cijNNsnNE-Z@qeD^13i>u~(NDg=pivMf4v7-s zX8W0yV0sC$QU?U2`WFz^Zy>#Y1KIrsn)99L1j^*SS}wrRMXr~bM+n;D#QuRGSOI#r zII`Gc(1G^-$W>{V;nSoM&a+~JFyZLt!Z8zX5t>3Uk32T zmnK|ij_?^7P$mZTN|c|%Iz5S*D?>3q+=>;)L3oo;l0l0jxR66PWr?4F{9@K;K@q%7 z;FCdby5g`CF-J-xAPF+=_@}t!ke40!r|=XyJS<+2yrKN_+`h3#z$_mZ7?^Vn3>f}D z&+Thjef}h6VPS6i`OhQ#J_acT()A}#4_Hk{gG$-SU}U4?K2zurLx$tK7iqWm!W9*B z2I+ge>Alm8w}-R0$Jb-G_LrRL@pXgC zr<>FEni`a|vz%Md(f*CjRUttpBkcC>&Pw9ujP?E5R{%;zid%+KjwZ^un-S0Iu-lX| zFYj~r;>rHUwpFU3{fL{hi1nAUwiF~I8`t=YiW&3bor+^4Ynfw|594Cw12 zY}8Tq_13+h$LZFSGtsXyc9)au6bglBmnK0)a~nx2IB zs@BLTBzq+{WOZ=yhi^5~<=X4+#e0_NVSyTZN8T;mxW=$?7I%9xz?C*@^vVfA`g0o5(j7NbHyaL&f4atQb|c5Nis_X ziDpd9_|4PP_Cw#z?2+TcTXyoX?^$xp;_e#($^Ki}V94aEr>}Re9IVh8ae)YNa?Q{D zO#OPp!v1IH$BKh%n)b*#2?9XHF%uCAraTGq>s!P6c3Z)iybu%4&uSl@$|i2A#(h=- z9KbM@^)Q9CrQ}?+(%e*PX%@VSfZCwzZAJ)%YJ**?T6WI5X!MyS58Uq4GE(k6&^3^x zD`&kY7&LUa1scKy4RPGwh?2uD+cfU%9c9smsj1O=~y8UL8C**}3`2 zya&xwe3brhe(N~xHY*X3@mjlSuX?LzI_?N(E5%Zy6tQlt1&A`?1uE!ltZ%kd4C{Io z#J^Mx^|4GxgzU}kgN_PzKDj&$830rGz2wK6&&RU1L9<0HOl3s-L#P6-Y6#(AgoMXLdZ)#?(E5vKbi6Qdji!)i<@ ziM+FE@E8cT-Q&aR(ONb_*XXgBn~m=GceL%Br+KC`PD)xVPc_ULc@9`y?}?@DSBxSZ zs+dgM_;U1u&MZ(+!X(BZ&FAN}dlHZ88I8j&e6U$%8k7-nDYfgMD@U2u-*jKQRRp4^9Ks%)7uR!q1&)9<#!dSI{AqNJ5z_|XQ^)E>)5JyaC0FW6x$js(1vmSsw z;ufn^({G%02;O(!f8+e!;BPV4N;g8!>5*@M%+Nt*ze7W|ajKAgM83VcjD8BVQNlK(;Fx6AYB_bJU9*C$@=L95VCny#7tLAZWon` z0NzE~Y#P5EJfDW_?PZPi-C;x$$cng+12R+q~ZnY`!1a+;UY7@A4p)xQ(OW zyxzM%z@0dG{d`%=`hSGI19WBE)-4>X;)-qCs@T}EZ5tI;Y}>YN+jc6pQ*l*N!P|At zz4zVo{qMcM?Ut36)^_^nz0bAg9&@Zc*XTj#%kJF%ea27&-O_0ikyAqezuzw4dT@b2 z5Vf?kexwKZ!ep{D{fOIA`4$^#QuW@>(7pF~7yIpO{ABrM^7(N6;nlK!TE_`L>^@kz z{hBLl#v3L5_0hE5`;EK3_iM1RK=sO`?$hq$;CSq$e5UQfx9vl}nZ>V3sqEJdkH@yT zKBCWyKW0;T+c$-;NhdZ}t9MerZFKySA8xHa8(*;3b_T9rH!=ujd^a*;jIU!ou5Sq! z-gaN% zu5j|gce1Z$&$gbiGjWAcMrH+kF~f73;`%Zo`x`|_D5&ib#&H~FAB=bzM$u(5rdF95 z`q5oFP{7TiZ3P?GZ0BBiBTqkYly9+9p>goXBHn%J*NJ!O?xN0vl$@RKD&tS*aNU=7fbaX+I+e0(YJOwh$DlJ4PUlhbY4UOTPyBoZCxZjPVudnblaC% zskvOmpN_}oTMYC-_4w;g)h71&s?()csuJ-bQM~Yb4x`OTj-Av7t-S3zeS}Kx(@^c3 z6r_wEr`&&BtR<&MPV3%U=(8Gte&wR^FFi;eSiEhjcH~}D2}rRkHkJ(p?gMLFbA=MP zJfdHYslgUccc3;QKGHw4Bi{8ip$N*X6@S1u z?)fSuhKEG}LwEYF zYRCv7{F=_QI-LUC^TgA;ZZ%G}2luM@vtKuB2E8ebNls1$qEe^*8KxB1w?`eN!!OQS zV~;mq!DY#>k`t0AU*7zpXSj)0bEa5&L{Oday_A66He~goY(p#d-P_%? zxIjc6Q)4;1Fr~B6YJ#xV!e@e4c_%yNb9M&7qxSWD1-0+_{77k+R&0#+#k|MDgVmcF zDkQhd*%4}EN7IC>$--lZ`(k@%#qrxS&VgBvLMcblj2UmU)ww>;a??2DQaSX*j$rM( z@on8!Qsg${*%>PA{+%*@fTEoKH74QLc2_oThj+*C{%5Q`c5dS>0y8$s$?Axq>kiJ3 z#RoQH9d}Bj`0ib)fCdpgkMfIXcfv^-cV!>#_NQz~70zk$rxsm&$a;~cD^IdoBwZb_ zZ?(_rFisvSEJEMfg1A5&vn3KdHxYK_2;iTzoT~0eFYgYh-yhR{lShaQHh+pMOt7R8 zK;FFF@81)63T5f&^Sz3`Q_LImc2ux_>E_+anp7CLJiGU5CwTU1*Lws@hFbHig$@9^ha`(>E{w#8t-Z-a zhX#A{q`=9Er}C7~6h;xvm83WeqoQwDHeE*R8AIv1&ygqRS;Fnj_tLZYCJSAu)RIyp zv8xF$woHopiXCwf%xw#jCe_kJd+5I=>signQH zQHAAkR*7PD@-h$h_ah|HtJji+8R~B)hL=4*Ons&{%6-dPy=X=?pK{Dgmg-)>c0c`c z&A{+`9T|BGn0(%q1Iw9;QETbL!@Kph?STTWG((s5Q)looQqu;5!`Huma;4KuOn@D} z{f;zBQncjRYvzcE&}+k3?X6||^*03Y%Y=wyvIzrh+>wUQm+RinB}~>4_a%a`_ELMD z`)s^?+K5?5!N*TXoCeEqtC`hbyFGijYZ2xkyOOpA4Jqk+4_gyt5c_D{u5Nc3Jub87 z)FAs#Aa9^wn?rjC!P5BVzJSsVDeSb($HIbRy|-*$|BzD9fo@9ibI@VQVW7L&^Jrhg zX!pK5DP6u7+Lijyjl(BIJYLuIyrd%TbTk}I?%Oa#_F1#}7$7<&gh1ap+E|zBulZ?s z9h0h-d~hAYN}68VeSZyao~P;gfevFbSnMw&0;g$Pq;!c$SD5Tz?bqMJ46|CYTE*is z$Q1!s)iJibyQ#qk4{GL_nOF90y2={t=$@$wVt=C3j?=`}SHq$~U(+_P92m9S^ z1raseX0%T5$ujayT!T7W_<`;-_SzWW)5!ESHB;12Vh6hGU9ey_GZ$n7;eVEp>=|%w zX4VV1ZgP8ZI(S`f%LWo*$xXh9ZFTS25MCo};yR646{Z+{HNb8T@&bo%i56<(d^=wD zK?^3OsC9Fe*xT0N0dk9`+}$=|jdfe-#va~w;WPdLwVDU`*vuU7`)LNy>@Dl$%(@!v z_V*G&)U;jtOKOUP{a;dlmaKO1L=8%@8Qxhjenq>EE*=!z-Hw9T%(UTH1axp-JM7DW zKiN6BD*Qg#cJH_0|M~yV4!{<9pZj&wiM@>z0}0&U>)=xx=Q^BXwu?Q(Mnj)ciz#yRNJz_god)qRn4v zMz#wfwi7p|9`XMsw?^sa4g#YMLVV?UYf=TMEtFM9(5Lg#JQyz;rpzHOuP~(~U@;t| zv|ga3-KEd%{;a3@Sufo?#R8u@4|j$|uKRR=w{d}Y5Rb_PvFWN96pJ2QWLdjXwlDi} zg{r|m)yw+c0Jz>oL%CTwbvBNa7Z72wp9Fj%dkSe?DQZ>g)8@yf?rNs!Vt+1L=ewv@B>NoNn$lf$tFp7dI2$Lr-=K`- zF|k+8epZcslQLTkXI~9#FUKF+8Uw$DZ~{`Q=dxF=c~)(Rh{Xf_{b>axD#btlyjrzH zV%F0dt$lv4+LY0n&$<2A11lM0$K{g9cUO07IZtcg-YMnb0d4C6?L>L08qz)YLF(yp zOkHCLQ{h>PwV9M?Z#~!v5K$m*6Wiv@+oq)i4P%4a z)(@S{eA{>F_CShz)#K(GtMLNed+=9FkqlkzwB77epdu%N8{0U3^DIm%-OUq+kDB(; zB+g&DnlDYGPm(cneL_sCQ?orKBarN?rR=NyTD?j1ffU`X?_dvHivsPr_V^wPKG{!8 z+aoyl&2i7Qv_cs)!NXJAU;WrvHcn1;p7?XQCCiYqw)- zFIU<^r;o&Fv1bHC*Fgi4_d+i}jHtB*>Aa@a3bOiiJ5@@Aa*ROh@Ii3iKOe8CnUrWAGnEZRD{a;Qpm;Fv z^Z-LNg+cg`2c$DXm%fqaB4uI_5D`|UA+*IggafLMwTad0X@V;N69~+burtmPlbT=G zbRUSIoxqrDC=88Egqa8g8o3w>$(UY9LP1Cpn(6ad2RsY|0aZkX_Ag|TI^EB8r4_oC zVSQN*Zd#BdZWRn9qI3Ib;>&td20<{$Bp~>8j`U|LVIX~T@bJu!Y!M=yCYUbcgjayD z{|<=^`tOhzYv#a^u9ts>c?ng zp-AO4Mp1)Vv=MkaLnu;FgIm%-#I?>87aCCz0}H5-JkN6pMJ}M)ic-64i?6~Ef_WGj zi&UZYV28FLFd$C9g=%<3cW*;r8eYB#LyQE${EFJ`+gjGIwv=bJs;I>&92vIBHVTT9= z={9md3^CYe5ePk|%vl*LwOBZx08tud|CM6YaM&isL~+?Xk9IAH0VvVNq+4vkFc4xe zUN+Ec>_V^M3f;yDYZRFDxpo^%bgbu9jvyEwmSApc6b;s3=0NSVei#&u*ReeCryBBX zI1~`941eOX9G-c)8A_Ahj0xb`@ZUqTtOWtm{z$ZnPjcfS0>Li~K@kG8f4lTkdhQ7G z72+0~VWDH{6~j{B$SsnM5uF5?lc>$z0q1}6krsh4qHtl*)`Ap&Z$=;vh>Y4@#qUrCjH-r7wXDwAr`Xw>Cv)DrbrD@phwZn6q}dusbL z(c7rbal>d7dcW)%jn^5!$z z^u+bMWO!+tU(!!ST|SzTH!pjSocoWH^5G+x=@=>L$Cx zK2y`%Q*!Qa)n0FkS?*PU@qpAXaJ4&KdO@qXPj$4%kLF+8+}}pr-~4%V<)zPM+LCdT zmP%?(0A`cwEL8P-wCjm?FQ)VZ7on>=VXKS+CLewZ&$Q0x_(c|{!G$eoo4 zAIq_lo{Qv%b2h)eC1C750`Z0}QgczG8CmG*Sf?4;M&??D;|IK5W!>L^uBBymr)S>0 zZ2WwwuJy1TXfgCvG>zYY&w^JYY_YOaCKMyt_ zP|K@ZeN~!q+Z7rJBzq)kzx5K~*OZ|G9ry%Np;@g6UX2oVLgfAXV8xr-FDbC|NIi>G zQU)^%V-x)|rqqfgsCqPm4?c(rzLBTEOv1Kr>2Kbwq7Ryti_7$-PdX*NmU1mj@9is- zOZ|DESQbrsd(LmoTx!X(P2X}r(5UhR3dMpj4^PD;&2~U5f31*08EOF(QScYWzeJo1im?3=0c7?677;xp+9=bl_qPD% zJlJ`7+AadKjY5`lOZvH7<}>lR4B>tx=9h{r|=wsImVYh!4l#OP)PA`vz{~y zH|noIK7Zmvu@Pq&2Co*0N0s)BK9RqIO%Z2=@1qr9WB)D2>HjLmLY?imWpgEUdb*yF z5(VpTEiK-24T1*l8_Wu=+`e2|>um7uX)SH+@7ynb#w^s$h`Kehsk97R8}5zUKNh&_ zy)>$Q&Ah<+vTNu51 zvtb`uL2u?s$V12j7Ziu8mSl17+I&(RH3?JDBIr)saR7OJedtc&D!&VdP%8UQE!A*R zSuX;|Ca){_lU!j}Fb-C`=`eX-SJqYFUBDd&7@LBgSjphlY)Uj46{FuA{Ly0}6&~|* zzBTR9@=wY0q}Glw>6|+y6$Q{EdL0X#BYKm%8G2d*(4!+8!X(V3KPv8MSn&T=;Q<2rt~iz%6TV19q-Qn*6}{R*}y{b{~+O7pqb@6{P?1fqNMljFDpK$ z{juUn>E94fWk4%F|39o4F+2<&K7=|6ZAiSc@+R|`n7m!b8D6#OF@$gZ;sfGV9rs3; zX*HKIWyLKW)nsei4$;{=v-JZ_e`@`WeWxD4A$hEtV8N4v!)Fg_Wd$&N^Vr3%kq)#` zH0c{cHnzn%b5r`jWtp{>h$c{b!*ULhSRaeK0Q?BG)Z;lEoA=$gXgL%mQ_O@Hdmki0X%fu^>wPL6(ezjrh85XNvcWB)5l_S^U?Rb)2rpQ0FnmtQU!1Nz zA3dqz0yTOqPN>LVvJg_^4a>FB6eoG9Deb&C5HUaGwxf!D-J6$wxrqrL*_w-JDM4fK z{tn)B#ypH2*;?{WF47raq(O5s!J2F`MB@)?y*M3xEqYVKh0!0>Du0cCp$_9D7oGow zS|1YMzmUQAkd0xjg#{JHj)!a|Rkc^9wyU5<>!$%;A5x?gz_rR;gcwNIE}jk@#-0U3 zk8VALI-xB@+sUvJhJZbU6UMIPw;Zd;sa>T=4INOf$8(BojYZ?nj;_){zrrT)AFhh# zqxn^h;Pp^O2vX66jy1-Tki?o!(O_agF(_IzD`CmP^#N*bx>YE+EPoU=fm9L}+O=pD zDviM@ce~6HuQ2uW)|Wh~mkwuOgn$|$KnH1|T6571aVMeg6RikV5tjofZ^v7)n}3*$ zvrAtHRqcsdc+BABljy0QfgLB(J7>&8^Qqur9`kB9Z^>2CF^2Z z4~4)RAq?Tr_nnWHWzw&dp&^Z^Fygy}u}A5(mTWuyZ?ZUO*6%&KU)0q7rE7_(-`VVR zGtaUL_7E0)ZB$RZZ@9h&azQhd8^m-mm!~QpPLB^^995&M-GyAftps)RSA0QwZkBM? z9UiD)sOI=a_ps?bs+OGO0;^frAsS8me3`KBF6RAe7EdNZeW z?j4-EPOv5;Pl7{I^D|l#lNUBDJ>H*WuSo@sn^}d0QUn2*fyIfCdnrA{^%W2aB{joD zl=bF(mNbGAFdvC5diIA3$?HYl={j){lg(s*+}$7a^`R?12^1$o&(d(Vqr56S!7rWJiCI zN2hM652P_;ETrbb{FABmUaB$%C_(C|Oi3jdDKk?kD@zXl6SWBTpQuELA>@Qhbrfj` zD*v)Trw(XA{3nb*7EE_WBt8>8tVQmYd7>nFsw)m>EpNLl)6-!JcLjumie&Ep`ETI>8+fi6b~Wi z4++if5lYVwg`&T3t_ANGZ76CB+F{s{DXR6Q7epFj%;89GZt54^v;|`#qj8Q{*Szmj z`;~sXnL_%wbpln#ml<SZ@|u2zH!UmS`$S_xF{i#7$+O&1gB8cN^y3_e_H;tF9Y*m`5#zvMOMmP-4iLfrdiH}vjrroyFGY@L$HKt4 zcXR&@%(njdubA=UTlrImh_KM80FQ++;6j6(`e75yIBtxVX0Ag8NAZu+5ICSxG8Ldw zfC4{woC8lh{k9~mIhwrmwwBQ&CK;Y2S86`zCUa;IcoC2ixBCKJEHSTW{~h@?TZx27x+sWPxfad3xeQg3L&*jHIyL8h zuZ~)5^8fXj*L}bOr$GcwmfyfX$XI^MQVBLR^Ivg6(xzjLPRQ|M@VL;*?Mu=Zuc$b- z7P;?Exu^LkyiJ-Bg+3{HhUOt)Pm9b2Z7R{4in`Pvae}=S(z3Uyo9cKBOBF&Y7H%C; zrkBdmSvE&z9K@&3ch^XHV)CeIxRPi%z&En4K$KTIv!)=Q*vf12(5BUgOliQ)FRV~+ z47pT*@azp31l$#S>7P+cLYk=B-kgVVRDRA+AhC&k_B|Pg_~J(y_&`|NXq$(Kq=Fk` z)olh}y8hiPRoHLuA?7rWbk4y?;^C!%gak2+i)i03Or(_rF&}q?ynGGC8H874s$bAb zwQM6hw=s-|=zLB$70wyMF%*MB#dja^3{%7!I90G4%X-KI7FaH|6?4HF=GH{cOR@dYWKBNYBL=rF>dGvw3>{JRFlm&w?te3X#S z|Ca~{m*1cN{PXU);$I?Ip@|j)I%Qu*grk3f|H9r!qED;@-UgA5@b!4*tB@ug$O6)L zUdiG9D;~!#+8-}uN2&Ia^3c8$;|=vQ;W+?3`!6Y^{=Wuc{&r08HNWx}nlfYfIm!Jb znCC+k;%~>Wglf7BIC2{W81QfJ%V?ruoH1^pr!>8e>HZK~^HcsKi3z_DC|l{Y_Javd z0);nd9R;Fp-pl`5di~f84EJBG{avOQV43B2MIIWZ$)3JwId@);#MkF{;P&BOX zN}sF{_L!cW6!QcF_#sRERY3>K^y~VVtgys2dw)GBZP$$m@b|`jb*0~>8dPix={tcrGD1BC%#Q*bu+F8ez$Pk6p&fD$ldqF^GY=ASNn-Sw( zC}QV8{p9!XJ+`lFmIS|*N3-w$&tP8wrQ8?u1C}9+Ho=Qi$_kkOqO%^pwT2(F_QTtw zDjN&n9GZQscquo^>ciA$d0n%(35BuC_SKSTk8OiBE&|{zm4A<0nw~et{YMId@8Xmq zB;tR7vimLeV`bDJxTfEnGPd@HGNE1#fFgBE+Y#u1XbXY^mM!K)=-I~!=UJQpRv}XW z*R(@MrfY_WbZQ@v7<_3vBk!%tWi+%YEm+pE5BGHZ#Vqut2GnPGhm6h(wpM>gu4!Ey zNv`Q9_@c5!Zw+XHZhTqtPt+Uc{Q53md!)CFXG(TBW{eqbP8RhXmE*=#^wS{$w+TzZ zO`4?us>5j`*-h_z(`siIX6FUvR=s}MW!&1TA_=9KN4ItoPA4s6xV!+GL9Mm72g1c4 zGX%UVaCiXXr8!3Nr#im@G`@ghZ>R-H_5#(0qaYJo_sPOxN=>2W30rs$&g_a=-~`u%h&HudjbHxqu-)PWDH&~-c%Xy z2i`<*#XjA#)Qmr0kDMIu7??h)y=`CB(8S`;Cyc}#gBtp@`qD(XYh(?(&zXma^T@O zKkGr38+$l044;2&b=cpDq$Wy)0>7Srtrl zo~T@6YY6*3EsKkz0D@Nho|<5_~jrHI!UeD~U!GzSyJ4t6azPJjv>okxq~ z&-oR+x5~Yif(J2r_jOK-EnpxH{Rt_w5ud5;)%)hWyet@6%FW1xFH0B`QtC;c%`az1E@7}6 zVepa?CoPqe6aU4DgVnRikDH3pDbAX*P~sEFe9rtJ(qLFNYxHoPjRL@|&;hL;l3|5Z zh?`l2o0_^t3rJ~6BlvGhqM~@n>Htv}Z0sY^qHnOkg9jDmn-XB3>WPFyeY`guc$R2z z@98C7=C>#SItsEN-p2^*V81k?68)0}Msgz1nIqBvIOBv0osU`PoZo_4-G(j#4E<8w$#DCICs$AK4O*FZa#|8dYuq2+>c|G$B z>$g>JyPU6@?jd+bJyHeg-XK>!W@ifbEAcHtOuLRW9%2+qtpVF*WU9fliqC*wz*{8k z*=;K1w5~qvKEGmr`s=(yD;efz1;a1OP*-9Fq+l>W&|ev=aw9AM{n8Z|l4VE!a|<&e zDZWK%ktt04Htr)ngS^zWxuD@NsXzg3%yLgSZjm438k8IIuh+6E+MxhU)XUnN>E(CB5dOUDYN{|X|&esqENEqrQi26NCPA4pO zsB~&NNynRG9yU1;k69Al=LBR$v|}58WipN-yPq`wi&Vuul3!Lp77aEe_p%TmTgBpV zTfv5?bdN5=DD`hc*5Uu~Nd_YPWk^X1IFOIjYGx3t8((z#+?uG97I2)nyQOFmo#31* zOn@#)+>JBcNlRzfbD-glS>8!5CIq-lNm%)1y?^WUtRgNBm04;p`^1pZ8y6SZK#_61 zIYS9ga^>{al{z&)55k&~&-+Tqh!31=Z6ajDmgtoD(sLhmEwmQ&u5)OjR5j(ZseA?d zFyJTItsUgg03AHoMIT(|uwp(+TcU~^;N^3oGev;2;v}i;KHN{30h~|4oYItYb=lld ziO+mS=JQZr+1fr=o5ue6rZ68X!fSnU&%!j(Ulo!@#`Qj8c79aQ$g0VnB-41b_0&ER zAcojeu$Z)YM_smsjw}=JKZJ^Sv)q-RI!UK=K)#v9+dd>e{Unjt zqcTc$H~24g*a3gki6H-PbvE!obzCsresAaK{{b^Od~uFLL)xC}J-W05H{_vok>3Ub2BMSP(XNUTgn-YhPV$oPv*)K4(DkWt*8h%!(R z*;k9v6nN=J$KT_QM>6X`q zRtDnm`K;Cy*8~<8R&cZ=5R$jbIpW@K1rZxsBqXodK1vwz^vqEdt>wE zQ8%6dMB&QSmXPu_=arK#aRM z!oe~IYI=LYh1VpUE#INBL?>LHn?P}L?%fSaW#*c9w;?2u@dukk9$IC%cAxPKD7XG5 zXcpkkKybINC+eC@f>*QS1!Rfm=h~OwxP!Ja?qZE!3D^O*-g&L2kN>z-bP0 zbvC0d;OyQ3h~y^iTebNEXUd``f@e zh3`E$qKAix$>Ex?~Y&3ylALG{(tNcq1m_~^NQt3f7skU6iOfx`sl z1CuCb;RF^e{LUny79W~k|xpRAf3Se*|P#An3i+rBu{47*bKfA-t6K&kEL zT`rjr{s`SN9-)Hag^9+9_mNgg5fzTLe{Vmb6V`Ga3rbNJ!HpBCZ$6XS_O$jrc3U_J!Xw zyf(2+S9MaI54LfhSF}@PpaC%0E+UfP#M~dV&qf~)Z}?iRU+EesL}_T+e)Qou&<%hy z7kMA@625d#h8R;vKO;*7eBMb%IofPt)LJy7YEw&T&#t8SaGZ&P ziHbzBzcDgqr>~(lGn2u=ZC3K`GXg~-U91wtj2R(VDDQB%k#}g^d9mJ)B_sCW$w6a5 zY{r&RO_pV$h-_RDcq^T0AeCB4cN!5Bl~D$|R@Fa4GuOK326;7AZm%A&R9dg=AIyCg zsBJe=0D#~qaKUc~HB^#-hT_woBBjH_oiLTydC4kusR z;6+J*&oQ||dwlt-)T_U$3T7^mxh9DNI)aeYngp|~jZl&cZ1_;&k0 zn%^b~k+h8fdz^Lxdz_;G`;>ICFts&h{Oid4cb`)^V4qX0o}cQ-9fwOV8?F%@VwY=I zD>xH*#&z+BwLcW zYNp<|Uai$_gR6zX^nj6Uo2~6@If6scp-yh24<+su1wWi@M=>QpyNi#OK@5aWSRpO8 zYTu;uK>m$!lOOthWosU00|p+g*!2nw#QB{dp0H=viVm+CcB6SPJ5iE014*6BEBRUZ z*Hmej4Axp`k?r^!z9*Al=l~dm6EWp?HSX6&X=Vv2(s(pcx&qm`$3cN?1|ei=jpeg7 zcdUEWm&eD+OiRm(3^vFcz1r0))rC&Vy}6cRG1_OeN1w_CDXBQHVK&GFm&s_SEy={> zk`(#I?K2mg3yKV_kdhqvMHg3D|H*7O3aIiDX_~kzCJR9wbEGaB> z0^Yj4QPG>v1Q&@=nFOc#{dW!SxR%EM-mKpCoDcZNNhp*nYzk)HI4&>G}42u#r03Un#+;_vPhi z`Czn`;7tdj7xv8&_5Jua@v#sJ&Mrv#B(LC6>>oCUnTh}jFuuM#aL0OL zXm_fq)6BKRm>i4=1`+AT)0J;?`9%(ca!s`&CLO{`ZLlO6n09^PetPw4bEHyZwp5$K zVs52VD|n;9@FmP7Xb*Tp9>l*GGOcK~5}F-_Ol;%JOGVQ9yn^F4;ugqE60co#Pa%gr z4R_=M`1ie7l!?|#3N-jDPU<{UVuIiI!#ZN)H5!Ds28~zoqO8mY;GEGFyF+BhVG4%a zDu~TIGta-S38?knn{>)-*d)IJTH;rC_}}_?wnCZ=4I4^-ZwL!^RJu|---OODaqJE4 zh_m?5dVTkh=lx-6URFw9C0+T$#B(*`+V{S5YuCRnX1^S!%cn?E%QfOyQZ}NZ9+ol5K|b?k%{oP?J7p1|bj%5jYNpot z6uY$)mNAv5&i!mEsP3ZrJ`iAEwiU6$iQ%#z7}(OhUB*FYFqmf>eTXmN^9a^Xs9ued zP`}e+)4wopbqP88Gv4mEt8+mqc(sjIiuF@g&F2NEs7Sf7tuQW~w2&ttGAGpQ@3kn0RoOu#v|-I5#7pqc-?}7~jZ1t`^Z?yMlalOl z&!%ZSpa_K0u$=QS0LlFmBfdD1@SLGQTQzAuq;l3}37A+h`p^2;NW6Um0PIc95H?iK9NJwa?%^;F{+O_%heavC$l9Wq7(N~mgF4=iy>vQQr&zAHTHRmJ z|IEd5{CHMNfggBK!0h!i@VBw6vx~j0hOG^wrHiTUUmttbQT1>GOlTlKeZu1s0D$UJCq}wR)@j9jX7X71$?d; z4v4f-Pw}E?X2X$SJhmk7UH4VP$5KFfVW@%PGQ6s$&)Fgmu5E+MG;s=AUjHAu_$Q8* zyMcNrfw~C(q3iGNu>Vo_S8Lel*?M4pjtsTiEl=EJQDJIMm9O!H3bronKwKF&+Y(m% zxkE;ByQe@I9Ghhu|Kq2#tuIn#n-E3pd|63Fvfru0gCobe`I@g?GEs|T6RkMYIcU+# zb>WwOt9BEM+i+1K66|)SQv2$0dSp7)G@_KrAZ`r?;~dw9Ya{cy%#Qbk=U(DYN@YB8 z(tAUjA}j*f?Rv+Iu0Z?_Yrio@nx;-vW3JH0w0gFP{$uPl$ywxgH91w;@=i5@x79bW ze-3DKr>xu_P_PkDIMzRe|BDLKns%up|)O@ z*2Q=CBex;l5RI;Q_mbmbHy-_3<8r;sizjdtWM@z{M?*PJK?b8z$(tXN)z!<+Mmok* z!^3Y0$=x1EK1#yn;BTD=IxfJk;naFjlMd%D?WKGi}hX~*dabu_4lJDx2t-RH6s zi9xf)fSP3Nh(%GQ+a=>O221(_1GuZy=~b1}F~d|*_`-Q%j%EG&R3=T0&30c`Ggn@* znZDN%g{TSea^)SoU2_;-y*(WEf!GysLH1zqi*K9Ri>;w_0{Yi|3dyhku}X`Z3k|mh z)?~tg+1-EE9Cog@My5`{s?4A4Zdzl@Zl4RQd#6+|URrG(7HexuMGsktHcIl1? z-LcHn%E9~3)KiMfpGvUnsHih@ZN7q*AA9eyv%gU`79de+YD=j!c)nBKu6>tGkFw#7 z<_sHnNZHr8Nvb`xohqMJr^O@nnjKzn!{0Sg58q{$Rvu;zwt-fz%qx6l;eb21TX4-% z*fLgg?5Yi;3@hJ__ykwnfo>g)T)S~7?nt4q4@sdxz^1M+e>t+ER;SqSsJxudOsd*v zAt9AMb>Va`9GNc~CKEA5%t~NSZNx%5ixE~9z%9ec#eKe#BnQb!E_D?m&(SIGw=?sQ z?&rmh2g^w9n;u9tPFrgZF#{Q65dr5Y1#7=bN6Y=~*VA+nH~QBtz=ik&vDWYu`3uF_n|3%zE_HpybY`qz%)ZqBdr zll4a?)O5o#=o>;TEd`gXX<98YbM*1QK7A*?bCOg@FT|vv%A8pwlas{G^6X2O|Hc^` zmyKw^o)lS5L1U5*e@C}0OsXZvpcq9>hTi|_MRAzlf5Ym%7Pte~g8csMFmnt}={Ma7 zi$t|y`9%=zu+S+N&knztQ3?5+sF=ocY+nky}K%@H9b=9s}BRP*4=Y^ z*WEX=dZN+YH^Mv6{krP9BZt9WVvJCB+2}mqyFd5zhayf-?ypXYv}s!>fSr}-*`?cV%$D@KFNv0HKupy>)56+Y{i? zrDILZez)^HuxYQY%QH4NsKLfq>f>X*tbuyE9(_VNUhTV{suMz>V;bzjS?hy$wl>Je zhO#mcVV&X*UZ?!X-~RaY&l#&=Y{k4A5(FfO2m}NZIAZ}DcmFj_0asqY>(kEA(uTpx z!PNXp&D!C!DjI*M7bmstG%^)E8uUOXOJ5PaFfAB|<@b^#jw1S6#}KJRxz8CChF=#` z0NL>`AdjJZ-XHa7DlS=$3iAOxN@9W%(8!p20AoA;}YNe$Zfqrju4HyVCA>k{MOm*a5Uo8Ik>0&K_~C z#JOt!tF1GSW-AK=cr3M6(4e-esfMA8tu56NMq6X5hBkF;!kj4vqNH1CtW{Di#3;oIDUJ6TeS=PDapiI$$-28ICdHpJcPpNzy%%-k=&(jC# zRM^Q*jiYD^QYg#d)zTaK-Rbzzrq6qdgLT)p1W?IgI|HO z@){2*TCw(xnbssqqW#VWy?_s%d8N-FN>rxM7{A~y(*CT~P3wxLC5!S4{k#V;EJ5mU z;Z@5b?$F-34_Er0&$NyKYjH^i84P@w;~6mS%3A`W%M=z2=UPRcnOeTA1KGa2p7 zu=?>d5uIGAG!w1#Wd=egRq9rC+H<))rkQ;a1#?BYQzPExLb=1voX-R4g>AT*5s}C2 zrp$3l{+_zS=pV?Ifr7>@(6;QCnasEStktKdl9hTeYwtgW`&nTgtS+FJA{qsY8vc7m zA{sRpwN>m+)T$+9oKvAkz{ScAU!x-Z>(bw2;F_#oULRvXPG3_Y6}K?uTX3z%aF1`Bw4&%zrj6lPPSLa4n8 z)Et}uvl_w^P173GYPRx~^~v-2!>mo$LoQGZ6{|iWXE;aC=r^a(#5?BXW~biyl+^(T zUlrSx8J{;$B)#gNUVH7U6U*4eKKiJJ@Nx7n6ZA`IW@1xGLHU8+(W!Rz)bTq7#72{_ zLCPTJqrwH{{bd=NG@Kx7 z|HBaBKbvT-lR(@bZ$U&0yqLX#JLMd#@m5cD(YQrblRu9wO12Y()r?9K`r(AiYr+mt za)OEz|3v=i)p(10x<#&ykhJ<`>=ZRvlx%V5W_MDk)1)5nMY=@F>abjj6P-A3$vX`_ z#Wt>~UTT1d?(RYEJx|aYXnHvi+U0I4KDSF%P&}aBj!+$;tc^$c&fI@}S$Y6^jN(F` zcsEjLUD6G6DP2?Y_j#dQs}P;=QNUd!Nj)%G(pIHa?%ITsY|_Jpa^+Q5llIA>;9r7*73;yD#I z6j$QunWC6&cxfT4@X_tgdVJqBu?1gAtI6om!DBHNGb8XN+^|x!!|Wn8i(!Tg>X_<_ zQ;J}8S2LCHVIOYaAxDf2jFTgagF5}71W01zM&IzY^~2YB^5zmd`1sv8?8)t zv^sxQJdUgU68d)Xa%UKO_{$19Qa|$j2=%e!zbmOmYd104O=4LHFUQyXv2c%d(s{!5zha%YgrRNKk2YcMp+!oboTsqv_~WpE9N z;){V#89*l${q;0Tkc%_+Pj7U@$&b6nP1_r5gYxxxjIt<@>Y8{c_;fOf(q(G&HoE3E;l`5Qqd9 z9tpI3$6W&gw)@ve(&=_TV91L=nvuKnJfQV!-0 zYyXCb9R=0uVv1ma}910v34x&hrV1qEY$QD4iI;5h)lP;!$e@Yo`_V9@I& z!5(m(l;e38wCUMWL;>UA!V3ql4cWj!Wf-slT!`QpCPOz2TxAI`56&8M_%Qqi56&Tj z72x=rqrecijmE(OaG=W(SVV6XY!~)|UEtV}<1!^}b#X_MU<)|Z;#eGGHfDt@@B;JT h{UC>5ir=!txOazE<~x8Dw7#k&A+Eskn7X=t^*;sre_H?m literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphApp.scala deleted file mode 100644 index c341113fb..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphApp.scala +++ /dev/null @@ -1,74 +0,0 @@ -package com.twitter.simclusters_v2.scalding -package multi_type_graph.assemble_multi_type_graph - -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.dal.client.dataset.SnapshotDALDataset -import com.twitter.scalding.Days -import com.twitter.scalding.Duration -import com.twitter.scalding.RichDate -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.thriftscala.LeftNode -import com.twitter.simclusters_v2.thriftscala.RightNodeTypeStruct -import com.twitter.simclusters_v2.thriftscala.RightNodeWithEdgeWeightList -import com.twitter.simclusters_v2.thriftscala.NounWithFrequencyList -import com.twitter.simclusters_v2.thriftscala.MultiTypeGraphEdge -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import com.twitter.simclusters_v2.hdfs_sources._ - -/** -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph:multi_type_graph-adhoc -scalding remote run \ ---user cassowary \ ---keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ ---principal service_acoount@TWITTER.BIZ \ ---cluster bluebird-qus1 \ ---main-class com.twitter.simclusters_v2.scalding.multi_type_graph.assemble_multi_type_graph.AssembleMultiTypeGraphAdhocApp \ ---target src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph:multi_type_graph-adhoc \ ---hadoop-properties "mapreduce.reduce.memory.mb=8192 mapreduce.map.memory.mb=8192 mapreduce.map.java.opts='-Xmx7618M' mapreduce.reduce.java.opts='-Xmx7618M' mapreduce.task.timeout=3600000" \ --- --date 2021-07-10 --outputDir /gcs/user/cassowary/adhoc/your_ldap/multi_type/multi_type - -To run using scalding_job target: -scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph:multi_type_graph-adhoc - */ - -object AssembleMultiTypeGraphAdhocApp extends AssembleMultiTypeGraphBaseApp with AdhocExecutionApp { - override val isAdhoc: Boolean = true - override val truncatedMultiTypeGraphMHOutputPath: String = "truncated_graph_mh" - override val topKRightNounsMHOutputPath: String = "top_k_right_nouns_mh" - override val fullMultiTypeGraphThriftOutputPath: String = "full_graph_thrift" - override val truncatedMultiTypeGraphKeyValDataset: KeyValDALDataset[ - KeyVal[LeftNode, RightNodeWithEdgeWeightList] - ] = TruncatedMultiTypeGraphAdhocScalaDataset - override val topKRightNounsKeyValDataset: KeyValDALDataset[ - KeyVal[RightNodeTypeStruct, NounWithFrequencyList] - ] = TopKRightNounsAdhocScalaDataset - override val fullMultiTypeGraphSnapshotDataset: SnapshotDALDataset[MultiTypeGraphEdge] = - FullMultiTypeGraphAdhocScalaDataset -} - -/** -To deploy the job: - -capesospy-v2 update --build_locally \ - --start_cron assemble_multi_type_graph \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object AssembleMultiTypeGraphBatchApp - extends AssembleMultiTypeGraphBaseApp - with ScheduledExecutionApp { - override val isAdhoc: Boolean = false - override val truncatedMultiTypeGraphMHOutputPath: String = "truncated_graph_mh" - override val topKRightNounsMHOutputPath: String = "top_k_right_nouns_mh" - override val fullMultiTypeGraphThriftOutputPath: String = "full_graph_thrift" - override val truncatedMultiTypeGraphKeyValDataset: KeyValDALDataset[ - KeyVal[LeftNode, RightNodeWithEdgeWeightList] - ] = TruncatedMultiTypeGraphScalaDataset - override val topKRightNounsKeyValDataset: KeyValDALDataset[ - KeyVal[RightNodeTypeStruct, NounWithFrequencyList] - ] = TopKRightNounsScalaDataset - override val fullMultiTypeGraphSnapshotDataset: SnapshotDALDataset[MultiTypeGraphEdge] = - FullMultiTypeGraphScalaDataset - override val firstTime: RichDate = RichDate("2021-08-21") - override val batchIncrement: Duration = Days(7) -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphBaseApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/AssembleMultiTypeGraphBaseApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..06ff67e7847f3d40158a4077658255bf5844613e GIT binary patch literal 38664 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 lUSK`gAKcTIrT)*v_IrosCM RightNode edges, capturing a user's engagement with varied entity types - * - * 2. TruncatedGraph (truncatedMultiTypeGraphKeyValDataset): a truncated version of the FullGraph - * where we only store the topK most frequently occurring RightNodes in the bipartite graph LeftNode -> RightNode - * - * 3. TopKNouns (topKRightNounsKeyValDataset): this stores the topK most frequent Nouns for each engagement type - * Please note that this dataset is currently only being used for the debugger to find which nodes we consider as the - * most frequently occurring, in FullGraph - */ - -trait AssembleMultiTypeGraphBaseApp extends DateRangeExecutionApp { - val truncatedMultiTypeGraphKeyValDataset: KeyValDALDataset[ - KeyVal[LeftNode, RightNodeWithEdgeWeightList] - ] - val topKRightNounsKeyValDataset: KeyValDALDataset[ - KeyVal[RightNodeTypeStruct, NounWithFrequencyList] - ] - val fullMultiTypeGraphSnapshotDataset: SnapshotDALDataset[MultiTypeGraphEdge] - val isAdhoc: Boolean - val truncatedMultiTypeGraphMHOutputPath: String - val topKRightNounsMHOutputPath: String - val fullMultiTypeGraphThriftOutputPath: String - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - import Config._ - import AssembleMultiTypeGraph._ - - val numKeysInTruncatedGraph = Stat("num_keys_truncated_mts") - val numKeysInTopKNounsGraph = Stat("num_keys_topk_nouns_mts") - - val fullGraph: TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = - getFullGraph().count("num_entries_full_graph") - - val topKRightNodes: TypedPipe[(RightNodeType, Seq[(Noun, Double)])] = - getTopKRightNounsWithFrequencies( - fullGraph, - TopKConfig, - GlobalDefaultMinFrequencyOfRightNodeType) - - val truncatedGraph: TypedPipe[(LeftNode, RightNodeWithEdgeWeight)] = - getTruncatedGraph(fullGraph, topKRightNodes).count("num_entries_truncated_graph") - - // key transformations - truncated graph, keyed by LeftNode - val truncatedGraphKeyedBySrc: TypedPipe[(LeftNode, RightNodeWithEdgeWeightList)] = - truncatedGraph - .map { - case (LeftNode.UserId(userId), rightNodeWithWeight) => - userId -> List(rightNodeWithWeight) - } - .sumByKey - .map { - case (userId, rightNodeWithWeightList) => - (LeftNode.UserId(userId), RightNodeWithEdgeWeightList(rightNodeWithWeightList)) - } - - // key transformation - topK nouns, keyed by the RightNodeNounType - val topKNounsKeyedByType: TypedPipe[(RightNodeTypeStruct, NounWithFrequencyList)] = - topKRightNodes - .map { - case (rightNodeType, rightNounsWithScoresList) => - val nounsListWithFrequency: Seq[NounWithFrequency] = rightNounsWithScoresList - .map { - case (noun, aggregatedFrequency) => - NounWithFrequency(noun, aggregatedFrequency) - } - (RightNodeTypeStruct(rightNodeType), NounWithFrequencyList(nounsListWithFrequency)) - } - - //WriteExecs - truncated graph - val truncatedGraphTsvExec: Execution[Unit] = - truncatedGraphKeyedBySrc.writeExecution( - TypedTsv[(LeftNode, RightNodeWithEdgeWeightList)](AdhocRootPrefix + "truncated_graph_tsv")) - - val truncatedGraphDALExec: Execution[Unit] = truncatedGraphKeyedBySrc - .map { - case (leftNode, rightNodeWithWeightList) => - numKeysInTruncatedGraph.inc() - KeyVal(leftNode, rightNodeWithWeightList) - } - .writeDALVersionedKeyValExecution( - truncatedMultiTypeGraphKeyValDataset, - D.Suffix( - (if (!isAdhoc) - RootPath - else - AdhocRootPrefix) - + truncatedMultiTypeGraphMHOutputPath), - ExplicitEndTime(dateRange.`end`) - ) - - //WriteExec - topK rightnouns - val topKNounsTsvExec: Execution[Unit] = - topKNounsKeyedByType.writeExecution( - TypedTsv[(RightNodeTypeStruct, NounWithFrequencyList)]( - AdhocRootPrefix + "top_k_right_nouns_tsv")) - - // writing topKNouns MH dataset for debugger - val topKNounsDALExec: Execution[Unit] = topKNounsKeyedByType - .map { - case (engagementType, rightList) => - val rightListMH = - NounWithFrequencyList(rightList.nounWithFrequencyList.take(TopKRightNounsForMHDump)) - numKeysInTopKNounsGraph.inc() - KeyVal(engagementType, rightListMH) - } - .writeDALVersionedKeyValExecution( - topKRightNounsKeyValDataset, - D.Suffix( - (if (!isAdhoc) - RootPath - else - AdhocRootPrefix) - + topKRightNounsMHOutputPath), - ExplicitEndTime(dateRange.`end`) - ) - - //WriteExec - fullGraph - val fullGraphDALExec: Execution[Unit] = fullGraph - .map { - case (leftNode, rightNodeWithWeight) => - MultiTypeGraphEdge(leftNode, rightNodeWithWeight) - }.writeDALSnapshotExecution( - fullMultiTypeGraphSnapshotDataset, - D.Daily, - D.Suffix( - (if (!isAdhoc) - RootThriftPath - else - AdhocRootPrefix) - + fullMultiTypeGraphThriftOutputPath), - D.Parquet, - dateRange.`end` - ) - - if (isAdhoc) { - Util.printCounters( - Execution - .zip( - truncatedGraphTsvExec, - topKNounsTsvExec, - truncatedGraphDALExec, - topKNounsDALExec, - fullGraphDALExec).unit) - } else { - Util.printCounters( - Execution.zip(truncatedGraphDALExec, topKNounsDALExec, fullGraphDALExec).unit) - } - - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/BUILD b/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/BUILD deleted file mode 100644 index 5afed4a7a..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/BUILD +++ /dev/null @@ -1,91 +0,0 @@ -scala_library( - sources = [ - "*.scala", - ], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - ":full_multi_type_graph_adhoc-scala", - ":top_k_right_nouns_adhoc-scala", - ":truncated_multi_type_graph_adhoc-scala", - "3rdparty/src/jvm/com/twitter/scalding:commons", - "3rdparty/src/jvm/com/twitter/scalding:core", - "src/scala/com/twitter/scalding_internal/job", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/thrift/com/twitter/twadoop/user/gen:gen-scala", - "usersource/snapshot/src/main/scala/com/twitter/usersource/snapshot/flat:usersource_flat-scala", - "usersource/snapshot/src/main/thrift/com/twitter/usersource/snapshot/flat:flat-scala", - ], -) - -scalding_job( - name = "multi_type_graph-adhoc", - main = "com.twitter.simclusters_v2.scalding.multi_type_graph.assemble_multi_type_graph.AssembleMultiTypeGraphAdhocApp", - config = [ - ("hadoop.map.jvm.total-memory", "8192m"), - ("hadoop.reduce.jvm.total-memory", "8192m"), - ("hadoop.submitter.jvm.total-memory", "8192m"), - ("hadoop.am.jvm.total-memory", "8192m"), - ( - "job.args", - [ - "--date 2021-07-14", - ], - ), - ], - hadoop_cluster = "qus1-bluebird", - hadoop_properties = [("mapreduce.task.timeout", "3600000")], - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":assemble_multi_type_graph"], -) - -create_datasets( - base_name = "truncated_multi_type_graph_adhoc", - key_type = "com.twitter.simclusters_v2.thriftscala.LeftNode", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.truncatedMultiTypeGraphInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.RightNodeWithEdgeWeightList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "top_k_right_nouns_adhoc", - key_type = "com.twitter.simclusters_v2.thriftscala.RightNodeTypeStruct", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.topKRightNounListInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.NounWithFrequencyList", - scala_dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "full_multi_type_graph_adhoc", - java_schema = "com.twitter.simclusters_v2.thriftjava.MultiTypeGraphEdge", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.MultiTypeGraphEdge", - segment_type = "snapshot", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..a16585d6c172ba7328801d6a44c03bed0d514817 GIT binary patch literal 37489 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 L^YY; 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/Config.docx b/src/scala/com/twitter/simclusters_v2/scalding/multi_type_graph/assemble_multi_type_graph/Config.docx new file mode 100644 index 0000000000000000000000000000000000000000..cfac1c547c22a0a9e7e6a3ed4782b1317362a8c4 GIT binary patch literal 37250 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 w-qk{wQr8R(6_kz_x_ 10000000, // 10M, current simclusters_v2 has this value set to 20M, providing this the most weight - RightNodeType.FavUser -> 5000000, - RightNodeType.BlockUser -> 1000000, - RightNodeType.AbuseReportUser -> 1000000, - RightNodeType.SpamReportUser -> 1000000, - RightNodeType.FollowTopic -> 5000, - RightNodeType.SignUpCountry -> 200, - RightNodeType.ConsumedLanguage -> 50, - RightNodeType.FavTweet -> 500000, - RightNodeType.ReplyTweet -> 500000, - RightNodeType.RetweetTweet -> 500000, - RightNodeType.NotifOpenOrClickTweet -> 500000, - RightNodeType.SearchQuery -> 500000 - ) - val SampledEmployeeIds: Set[Long] = - Set() -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/BUILD.bazel deleted file mode 100644 index 95ccf5027..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/BUILD.bazel +++ /dev/null @@ -1,126 +0,0 @@ -scala_library( - platform = "java8", - tags = [ - "bazel-compatible", - "bazel-only", - ], - dependencies = [ - "3rdparty/jvm/com/twitter/storehaus:algebra", - "3rdparty/jvm/com/twitter/storehaus:core", - "3rdparty/src/jvm/com/twitter/storehaus:algebra", - "3rdparty/src/jvm/com/twitter/storehaus:core", - "graphstore/common:flock_follows-java", - "snowflake:id", - "src/java/com/twitter/ml/api/constant", - "src/java/com/twitter/sbf/graph", - "src/scala/com/twitter/ml/api:api-base", - "src/scala/com/twitter/pluck/source/core_workflows/user_model:condensed_user_state-scala", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/job", - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - "src/scala/com/twitter/scalding_internal/source", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/simclusters_v2/candidate_source", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/summingbird/common", - "src/scala/com/twitter/timelines/prediction/features/common", - "src/scala/com/twitter/timelines/prediction/features/itl", - "src/scala/com/twitter/timelines/prediction/features/recap", - "src/scala/com/twitter/wtf/scalding/jobs/common:execution_app", - "src/thrift/com/twitter/hermit/candidate:hermit-candidate-scala", - "src/thrift/com/twitter/wtf/scalding/sims:sims-thrift-scala", - "twadoop_config/configuration/log_categories/group/timeline:timeline_service_favorites-scala", - "usersource/snapshot/src/main/scala/com/twitter/usersource/snapshot/flat:usersource_flat-scala", - "usersource/snapshot/src/main/thrift/com/twitter/usersource/snapshot/flat:flat-scala", - ], -) - -hadoop_binary( - name = "simclusters_offline_job-adhoc", - main = "com.twitter.simclusters_v2.scalding.offline_job.SimClustersOfflineJobAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":offline_job", - ], -) - -hadoop_binary( - name = "simclusters_offline_job", - main = "com.twitter.simclusters_v2.scalding.offline_job.SimClustersOfflineJobScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":offline_job", - ], -) - -hadoop_binary( - name = "simclusters_offline_job-repl", - main = "com.twitter.scalding_internal.repl.TwitterScaldingShell", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":offline_job", - "science/scalding/scripts:scalding-repl-deps", - ], -) - -hadoop_binary( - name = "dump_cluster_topk_job-adhoc", - main = "com.twitter.simclusters_v2.scalding.offline_job.DumpClusterTopKTweetsAdhoc", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":offline_job", - ], -) - -# Generated with `capesospy-v2 create_target offline_tweet_job src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml`, config hash bb0831. -scalding_job( - name = "offline_tweet_job", - main = "com.twitter.simclusters_v2.scalding.offline_job.SimClustersOfflineJobScheduledApp", - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.queue", "cassowary.default"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - contact = "no-reply@twitter.com", - cron = "14 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":offline_job", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..9731677eaaeb08c0a695986f21418c3281d5d13f GIT binary patch literal 37709 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%0A7|<= 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 L1ZIzGeIOnHD`9Iv literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/OfflineTweetRecommendation.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/OfflineTweetRecommendation.docx new file mode 100644 index 0000000000000000000000000000000000000000..196f6c48bb1a623d0f23538719a3c4c17c0e90aa GIT binary patch literal 38975 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

4Z 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�Mrv7-KxP<$(w1MC%lK{U7ha_Sf6 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 p*(-aD7p { - Ordering.Double.compare(x.score, y.score) - } - } - - def getTopTweets( - config: OfflineRecConfig, - targetUsersPipe: TypedPipe[Long], - userIsInterestedInPipe: TypedPipe[(Long, ClustersUserIsInterestedIn)], - clusterTopKTweetsPipe: TypedPipe[ClusterTopKTweetsWithScores] - )( - implicit uniqueID: UniqueID - ): Execution[TypedPipe[(Long, Seq[ScoredTweet])]] = { - val tweetRecommendedCount = Stat("NumTweetsRecomended") - val targetUserCount = Stat("NumTargetUsers") - val userWithRecsCount = Stat("NumUsersWithAtLeastTweetRec") - - // For every user, read the user's interested-in clusters and cluster's weights - val userClusterWeightPipe: TypedPipe[(Int, (Long, Double))] = - targetUsersPipe.asKeys - .join(userIsInterestedInPipe) - .flatMap { - case (userId, (_, clustersWithScores)) => - targetUserCount.inc() - val topClusters = ClusterRanker - .getTopKClustersByScore( - clustersWithScores.clusterIdToScores.toMap, - ClusterRanker.RankByNormalizedFavScore, - config.maxClustersToQuery - ).toList - topClusters.map { - case (clusterId, clusterWeightForUser) => - (clusterId, (userId, clusterWeightForUser)) - } - } - - // For every cluster, read the top tweets in the cluster, and their weights - val clusterTweetWeightPipe: TypedPipe[(Int, List[(Long, Double)])] = - clusterTopKTweetsPipe - .flatMap { cluster => - val tweets = - cluster.topKTweets.toList // Convert to a List, otherwise .flatMap dedups by clusterIds - .flatMap { - case (tid, persistedScores) => - val tweetWeight = persistedScores.score.map(_.value).getOrElse(0.0) - if (tweetWeight > 0) { - Some((tid, tweetWeight)) - } else { - None - } - } - if (tweets.nonEmpty) { - Some((cluster.clusterId, tweets)) - } else { - None - } - } - - // Collect all the tweets from clusters user is interested in - val recommendedTweetsPipe = userClusterWeightPipe - .sketch(4000)(cid => ByteBuffer.allocate(4).putInt(cid).array(), Ordering.Int) - .join(clusterTweetWeightPipe) - .flatMap { - case (_, ((userId, clusterWeight), tweetsPerCluster)) => - tweetsPerCluster.map { - case (tid, tweetWeight) => - val contribution = clusterWeight * tweetWeight - ((userId, tid), contribution) - } - } - .sumByKey - .withReducers(5000) - - // Filter by minimum score threshold - val scoreFilteredTweetsPipe = recommendedTweetsPipe - .collect { - case ((userId, tid), score) if score >= config.minTweetScoreThreshold => - (userId, ScoredTweet(tid, score)) - } - - // Rank top tweets for each user - val topTweetsPerUserPipe = scoreFilteredTweetsPipe.group - .sortedReverseTake(config.maxTweetsPerUser)(ScoredTweet.scoredOrdering) - .flatMap { - case (userId, tweets) => - userWithRecsCount.inc() - tweetRecommendedCount.incBy(tweets.size) - - tweets.map { t => (userId, t) } - } - .forceToDiskExecution - - val topTweetsPipe = topTweetsPerUserPipe - .flatMap { tweets => - approximateScoreAtTopK(tweets.map(_._2.score), config.maxTweetRecs).map { threshold => - tweets - .collect { - case (userId, tweet) if tweet.score >= threshold => - (userId, List(tweet)) - } - .sumByKey - .toTypedPipe - } - } - topTweetsPipe - } - - /** - * Returns the approximate score at the k'th top ranked record using sampling. - * This score can then be used to filter for the top K elements in a big pipe where - * K is too big to fit in memory. - * - */ - def approximateScoreAtTopK(pipe: TypedPipe[Double], topK: Int): Execution[Double] = { - val defaultScore = 0.0 - println("approximateScoreAtTopK: topK=" + topK) - pipe - .aggregate(size) - .getOrElseExecution(0L) - .flatMap { len => - println("approximateScoreAtTopK: len=" + len) - val topKPercentile = if (len == 0 || topK > len) 0 else 1 - topK.toDouble / len.toDouble - val randomSample = Aggregator.reservoirSample[Double](Math.max(100000, topK / 100)) - pipe - .aggregate(randomSample) - .getOrElseExecution(List.empty) - .flatMap { sample => - TypedPipe - .from(sample) - .aggregate(QTreeAggregatorLowerBound[Double](topKPercentile)) - .getOrElseExecution(defaultScore) - } - } - .map { score => - println("approximateScoreAtTopK: topK percentile score=" + score) - score - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..d35663ef31e60167987c208a84e469d5215a2905 GIT binary patch literal 38433 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 z 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 Y9U2?#17^_Htm1+=0Mny9b?evv0rr93q5uE@ literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJob.scala deleted file mode 100644 index 66b458b2a..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJob.scala +++ /dev/null @@ -1,176 +0,0 @@ -package com.twitter.simclusters_v2.scalding.offline_job - -import com.twitter.scalding._ -import com.twitter.simclusters_v2.common._ -import com.twitter.simclusters_v2.summingbird.common.{Configs, SimClustersInterestedInUtil} -import com.twitter.simclusters_v2.thriftscala._ -import java.util.TimeZone - -object SimClustersOfflineJob { - import SimClustersOfflineJobUtil._ - import com.twitter.simclusters_v2.scalding.common.TypedRichPipe._ - - val modelVersionMap: Map[String, PersistedModelVersion] = Map( - ModelVersions.Model20M145KDec11 -> PersistedModelVersion.Model20m145kDec11, - ModelVersions.Model20M145KUpdated -> PersistedModelVersion.Model20m145kUpdated - ) - - /** - * Get a list of tweets that received at least one fav in the last tweetTtl Duration - */ - def getSubsetOfValidTweets(tweetTtl: Duration)(implicit dateRange: DateRange): TypedPipe[Long] = { - readTimelineFavoriteData(DateRange(dateRange.end - tweetTtl, dateRange.end)).map(_._2).distinct - } - - /** - * Note that this job will write several types of scores into the same data set. Please use filter - * to take the score types you need. - */ - def computeAggregatedTweetClusterScores( - dateRange: DateRange, - userInterestsData: TypedPipe[(Long, ClustersUserIsInterestedIn)], - favoriteData: TypedPipe[(UserId, TweetId, Timestamp)], - previousTweetClusterScores: TypedPipe[TweetAndClusterScores] - )( - implicit timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[TweetAndClusterScores] = { - - val latestTimeStamp = dateRange.end.timestamp - - val currentScores: TypedPipe[ - ((Long, Int, PersistedModelVersion, Option[PersistedScoreType]), PersistedScores) - ] = - favoriteData - .map { - case (userId, tweetId, timestamp) => - (userId, (tweetId, timestamp)) - } - .count("NumFavEvents") - .leftJoin(userInterestsData) - .withReducers(600) - .flatMap { - case (_, ((tweetId, timestamp), Some(userInterests))) => - val clustersWithScores = - SimClustersInterestedInUtil.topClustersWithScores(userInterests) - ( - for { - (clusterId, scores) <- clustersWithScores - if scores.favScore >= Configs.favScoreThresholdForUserInterest( - userInterests.knownForModelVersion) - } yield { - // write several types of scores - Seq( - ( - tweetId, - clusterId, - modelVersionMap(userInterests.knownForModelVersion), - Some(PersistedScoreType.NormalizedFav8HrHalfLife)) -> - // let the score decay to latestTimeStamp - persistedScoresMonoid.plus( - persistedScoresMonoid - .build(scores.clusterNormalizedFavScore, timestamp), - persistedScoresMonoid.build(0.0, latestTimeStamp) - ), - ( - tweetId, - clusterId, - modelVersionMap(userInterests.knownForModelVersion), - Some(PersistedScoreType.NormalizedFollow8HrHalfLife)) -> - // let the score decay to latestTimeStamp - persistedScoresMonoid.plus( - persistedScoresMonoid - .build(scores.clusterNormalizedFollowScore, timestamp), - persistedScoresMonoid.build(0.0, latestTimeStamp) - ), - ( - tweetId, - clusterId, - modelVersionMap(userInterests.knownForModelVersion), - Some(PersistedScoreType.NormalizedLogFav8HrHalfLife)) -> - // let the score decay to latestTimeStamp - persistedScoresMonoid.plus( - persistedScoresMonoid - .build(scores.clusterNormalizedLogFavScore, timestamp), - persistedScoresMonoid.build(0.0, latestTimeStamp) - ) - ) - } - ).flatten - case _ => - Nil - } - .count("NumTweetClusterScoreUpdates") - .sumByLocalKeys // there is a .sumByKey later, so just doing a local sum here. - - val previousScores: TypedPipe[ - ((Long, Int, PersistedModelVersion, Option[PersistedScoreType]), PersistedScores) - ] = - previousTweetClusterScores.map { v => - (v.tweetId, v.clusterId, v.modelVersion, v.scoreType) -> v.scores - } - - // add current scores and previous scores - (currentScores ++ previousScores).sumByKey - .withReducers(1000) - .map { - case ((tweetId, clusterId, modelVersion, scoreType), scores) => - TweetAndClusterScores(tweetId, clusterId, modelVersion, scores, scoreType) - } - .count("NumAggregatedTweetClusterScores") - } - - def computeTweetTopKClusters( - latestTweetClusterScores: TypedPipe[TweetAndClusterScores], - topK: Int = Configs.topKClustersPerTweet, - scoreThreshold: Double = Configs.scoreThresholdForEntityTopKClustersCache - )( - implicit timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[TweetTopKClustersWithScores] = { - latestTweetClusterScores - .flatMap { v => - val score = v.scores.score.map(_.value).getOrElse(0.0) - if (score < scoreThreshold) { - None - } else { - Some((v.tweetId, v.modelVersion, v.scoreType) -> (v.clusterId, v.scores)) - } - } - .count("NumAggregatedTweetClusterScoresAfterFilteringInTweetTopK") - .group - .sortedReverseTake(topK)(Ordering.by(_._2)) - .map { - case ((tweetId, modelVersion, scoreType), topKClusters) => - TweetTopKClustersWithScores(tweetId, modelVersion, topKClusters.toMap, scoreType) - } - .count("NumTweetTopK") - } - - def computeClusterTopKTweets( - latestTweetClusterScores: TypedPipe[TweetAndClusterScores], - topK: Int = Configs.topKTweetsPerCluster, - scoreThreshold: Double = Configs.scoreThresholdForClusterTopKTweetsCache - )( - implicit timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[ClusterTopKTweetsWithScores] = { - latestTweetClusterScores - .flatMap { v => - val score = v.scores.score.map(_.value).getOrElse(0.0) - if (score < scoreThreshold) { - None - } else { - Some((v.clusterId, v.modelVersion, v.scoreType) -> (v.tweetId, v.scores)) - } - } - .count("NumAggregatedTweetClusterScoresAfterFilteringInClusterTopK") - .group - .sortedReverseTake(topK)(Ordering.by(_._2)) - .map { - case ((clusterId, modelVersion, scoreType), topKTweets) => - ClusterTopKTweetsWithScores(clusterId, modelVersion, topKTweets.toMap, scoreType) - } - .count("NumClusterTopK") - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobAdhocApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobAdhocApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..69ba315bc14268e42f917122f4ef5215d2b090dc GIT binary patch literal 38894 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobAdhocApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobAdhocApp.scala deleted file mode 100644 index 32acbe020..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobAdhocApp.scala +++ /dev/null @@ -1,197 +0,0 @@ -package com.twitter.simclusters_v2.scalding.offline_job - -import com.twitter.scalding._ -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import com.twitter.simclusters_v2.hdfs_sources.ClusterTopKTweetsHourlySuffixSource -import com.twitter.simclusters_v2.hdfs_sources.TweetClusterScoresHourlySuffixSource -import com.twitter.simclusters_v2.hdfs_sources.TweetTopKClustersHourlySuffixSource -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.scalding.offline_job.SimClustersOfflineJob._ -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import java.util.TimeZone - -/** -scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/offline_job:simclusters_offline_job-adhoc \ ---user cassowary \ ---submitter hadoopnest2.atla.twitter.com \ ---main-class com.twitter.simclusters_v2.scalding.offline_job.SimClustersOfflineJobAdhocApp -- \ ---date 2019-08-10 --batch_hours 24 \ ---output_dir /user/cassowary/your_ldap/offline_simcluster_20190810 ---model_version 20M_145K_updated - */ -object SimClustersOfflineJobAdhocApp extends TwitterExecutionApp { - - import SimClustersOfflineJobUtil._ - import com.twitter.simclusters_v2.scalding.common.TypedRichPipe._ - - override def job: Execution[Unit] = - Execution.withId { implicit uniqueId => - Execution.withArgs { args: Args => - // required - val wholeDateRange: DateRange = DateRange.parse(args.list("date")) - val batchSize: Duration = Hours(args.int("batch_hours")) - - val outputDir = args("output_dir") - - val modelVersion = args.getOrElse("model_version", ModelVersions.Model20M145KUpdated) - - val scoringMethod = args.getOrElse("score", "logFav") - - val tweetClusterScoreOutputPath: String = outputDir + "/tweet_cluster_scores" - - val tweetTopKClustersOutputPath: String = outputDir + "/tweet_top_k_clusters" - - val clusterTopKTweetsOutputPath: String = outputDir + "/cluster_top_k_tweets" - - val fullInterestedInData: TypedPipe[(Long, ClustersUserIsInterestedIn)] = - args.optional("interested_in_path") match { - case Some(dir) => - println("Loading InterestedIn from supplied path " + dir) - TypedPipe.from(AdhocKeyValSources.interestedInSource(dir)) - case None => - println("Loading production InterestedIn data") - readInterestedInScalaDataset(wholeDateRange) - } - - val interestedInData: TypedPipe[(Long, ClustersUserIsInterestedIn)] = - fullInterestedInData.filter(_._2.knownForModelVersion == modelVersion) - - val debugExec = Execution.zip( - fullInterestedInData.printSummary("fullInterestedIn", numRecords = 20), - interestedInData.printSummary("interestedIn", numRecords = 20) - ) - - // recursive function to calculate batches one by one - def runBatch(batchDateRange: DateRange): Execution[Unit] = { - if (batchDateRange.start.timestamp > wholeDateRange.end.timestamp) { - Execution.unit // stops here - } else { - - val previousScores = if (batchDateRange.start == wholeDateRange.start) { - TypedPipe.from(Nil) - } else { - TypedPipe.from( - TweetClusterScoresHourlySuffixSource( - tweetClusterScoreOutputPath, - batchDateRange - batchSize - ) - ) - } - - val latestScores = computeAggregatedTweetClusterScores( - batchDateRange, - interestedInData, - readTimelineFavoriteData(batchDateRange), - previousScores - ) - - val writeLatestScoresExecution = { - Execution.zip( - latestScores.printSummary(name = "TweetEntityScores"), - latestScores - .writeExecution( - TweetClusterScoresHourlySuffixSource( - tweetClusterScoreOutputPath, - batchDateRange - ) - ) - ) - } - - val computeTweetTopKExecution = { - val tweetTopK = computeTweetTopKClusters(latestScores) - Execution.zip( - tweetTopK.printSummary(name = "TweetTopK"), - tweetTopK.writeExecution( - TweetTopKClustersHourlySuffixSource(tweetTopKClustersOutputPath, batchDateRange) - ) - ) - } - - val computeClusterTopKExecution = { - val clusterTopK = computeClusterTopKTweets(latestScores) - Execution.zip( - clusterTopK.printSummary(name = "ClusterTopK"), - clusterTopK.writeExecution( - ClusterTopKTweetsHourlySuffixSource(clusterTopKTweetsOutputPath, batchDateRange) - ) - ) - } - - Execution - .zip( - writeLatestScoresExecution, - computeTweetTopKExecution, - computeClusterTopKExecution - ).flatMap { _ => - // run next batch - runBatch(batchDateRange + batchSize) - } - } - } - - // start from the first batch - Util.printCounters( - Execution.zip( - debugExec, - runBatch( - DateRange(wholeDateRange.start, wholeDateRange.start + batchSize - Millisecs(1))) - ) - ) - } - } -} - -/** -For example: -scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/offline_job:dump_cluster_topk_job-adhoc \ ---user cassowary ---main-class com.twitter.simclusters_v2.scalding.offline_job.DumpClusterTopKTweetsAdhoc \ ---submitter hadoopnest2.atla.twitter.com -- \ ---date 2019-08-03 \ ---clusterTopKTweetsPath /atla/proc3/user/cassowary/processed/simclusters/cluster_top_k_tweets/ \ ---clusters 4446 - - */ -object DumpClusterTopKTweetsAdhoc extends TwitterExecutionApp { - - implicit val timeZone: TimeZone = DateOps.UTC - implicit val dateParser: DateParser = DateParser.default - - import com.twitter.simclusters_v2.scalding.common.TypedRichPipe._ - import com.twitter.simclusters_v2.summingbird.common.ThriftDecayedValueMonoid._ - - override def job: Execution[Unit] = - Execution.withId { implicit uniqueId => - Execution.withArgs { args: Args => - val date = DateRange.parse(args.list("date")) - val path = args("clusterTopKTweetsPath") - val input = TypedPipe.from(ClusterTopKTweetsHourlySuffixSource(path, date)) - val clusters = args.list("clusters").map(_.toInt).toSet - - val dvm = SimClustersOfflineJobUtil.thriftDecayedValueMonoid - if (clusters.isEmpty) { - input.printSummary("Cluster top k tweets") - } else { - input - .collect { - case rec if clusters.contains(rec.clusterId) => - val res = rec.topKTweets - .mapValues { x => - x.score - .map { y => - val enriched = new EnrichedThriftDecayedValue(y)(dvm) - enriched.decayToTimestamp(date.end.timestamp).value - }.getOrElse(0.0) - }.toList.sortBy(-_._2) - rec.clusterId + "\t" + Util.prettyJsonMapper - .writeValueAsString(res).replaceAll("\n", " ") - } - .toIterableExecution - .map { strings => println(strings.mkString("\n")) } - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobScheduledApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobScheduledApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..288e6cb9d94499ba1830ae0afac85c5636552d41 GIT binary patch literal 38119 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 - tweetClusterScore.tweetId -> tweetClusterScore - } - .count("NumUpdatedTweetClusterScoresBeforeFiltering") - .join(tweetsToKeep.asKeys) // filter out invalid tweets - .map { - case (_, (tweetClusterScore, _)) => tweetClusterScore - } - .count("NumUpdatedTweetClusterScores") - .forceToDisk - - val tweetTopKClusters = computeTweetTopKClusters(updatedTweetClusterScores) - .count("NumTweetTopKSaved") - val clusterTopKTweets = computeClusterTopKTweets(updatedTweetClusterScores) - .count("NumClusterTopKSaved") - - val writeTweetClusterScoresExec = updatedTweetClusterScores - .writeDALSnapshotExecution( - SimclustersOfflineTweetClusterScoresScalaDataset, - D.Hourly, // note that we use hourly in order to make it flexible for hourly batch size - D.Suffix(tweetClusterScoresDatasetPath), - D.EBLzo(), - dateRange.end - ) - - val writeTweetTopKClustersExec = tweetTopKClusters - .writeDALSnapshotExecution( - SimclustersOfflineTweetTopKClustersScalaDataset, - D.Hourly, // note that we use hourly in order to make it flexible for hourly batch size - D.Suffix(tweetTopKClustersDatasetPath), - D.EBLzo(), - dateRange.end - ) - - val writeClusterTopKTweetsExec = clusterTopKTweets - .writeDALSnapshotExecution( - SimclustersOfflineClusterTopKTweetsScalaDataset, - D.Hourly, // note that we use hourly in order to make it flexible for hourly batch size - D.Suffix(clusterTopKTweetsDatasetPath), - D.EBLzo(), - dateRange.end - ) - - Execution - .zip(writeTweetClusterScoresExec, writeTweetTopKClustersExec, writeClusterTopKTweetsExec) - .unit - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobUtil.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/SimClustersOfflineJobUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..8adb2691d97d0723fe65f12651d721ca0630de92 GIT binary patch literal 37856 zcmagEWmsIvwm*z(a1HM6?he7--3i*by99T4cXxO95Zo<50>Rz?otZi3%$$4g`+nIx zRIT-swRZ2S-d&0^;1K8_ARsUxj2WDo)yl>3$)F%06Hp)^Xuwe&QGlJZnVqwNs)xOq zlOBV+txa>XoWi;g@|W{hj1)!zA}>)SjEX&bDto$k9I@KWTQ02?##33a$NMRsaJ4zb zP$-7@tn_;yg7pUe9`6`CX*;s>;V>l>4-w z4<-~{U#I-sNFGJ~#dBU)7%0@Utux^|0=Uw`4KLIrz8E$o3^~=iPSZ9zTBtcRtoIiq zx{tsEkiUJm?PGA8)L=b^YABDoQPJK)wF>!u3a}2QsGI)*o}=+@$D4Puu1@>8OIs^O z)yMKUND{~MUKBCwq%V+~vXNLX2`Yo7E4JD@_h2;Y|1z*H|M*Dz})tPnVbhKUILxkk`W{;`5;q+Nx|PKAG%@=Lj?VW@%$G6?aaU+dY=Sh5wH5>Om-{uhsV|#44K`p>V7mf{ z-BtI3wQMpXZ%Gk_%qZ?T%+-kmXt&UYb*LN9=7eiR#0+R`B@xSl%M(#<;GL;7Tzu%~ z0Z;%5*%tPQ((3l_Hf|9Qf-TOHhWGGz`SX@PjQVwW0qEbh*F%@y`S(qJ9 zor<4zDlZv+1c@rB=)05MKuvd{4slsD@s-ZC?SDF?CnKHK@SHJs*$Ptfv!5mS#Z;eq zuH78F;sY~2r^9jn&jN*gfmg8v-sW?_0-*p4WC}1*bOhKtF`57z&3@nH*$I>KgG|Wc z_uk?Qa_ZsN$S~qkG@!>3(vs)_EA4k|>~c1fIULj5`$e|ed9bVI;xydV$-x8XeNXdO6c#)t6Md0NI3M8Za=@iBne}9s z!gxrB8razuzRVD3w<(w8{}53@kz4(uE|fskL5e_hfKL50Ab=n|ku;$ZrM$I-03-{g zEFUyHWynZ&Mjv8+r4lyCan}aI6{kj9VeiM54l~Yr3&Of{UB{Ej6||ALwjwR4D&xvm0)FouKE=-U}$3wI; z@A>*XhGB4jVZ06JZRCA!ns{CoHivGK|Ez{F`B*Tf=&%XbTpKZZxITSE;sj9vS&pGT zjH2gYFgsDb2t^O;oUWl*GvP(jXgqaE0B!H2Ks)QahA6bvw!M7Yd` z-4|1zA*|rNoNpUUf1>1B*y>>M&65h95YX9Q&3||pg8PnTQnVxF`}J1BzB2oaY8?bC zqUofONTs1%BkU^rG_F@ucr=fj9sE_4Dr)>2X|k0Op#KIXS2JM4A+GJNv79#!QRWU2 z;)z#e~%${P4$aP+Y!kjj#l%r?57!<580Y0c|$hsmTJ< z8rx*Np;=gJUN#ExsYB~hg2f7-y1OzNUl<84U^5@Dao-nje-Zxk#&|J;%J~IclW>{; z{J^>a98DR4pIR4N;NtZA&N$Vvbz0*>e)H`W84Qg~&)*}rT-%rC;gp)6WVcLiCeeBPR1%S23O*`L&zGH%$t(phPt(OEg{ar;E^{j*rHG0E{SHU|^v zxiJia$iSJI#e>VnR9;C-RFB}uFjrR!)zdD4hl9noQ&>(|%OVuTFjX(S&g==rlQz9t zS~p420{byt>ZA*HS8+|Oo>^UOLinGHI??8XEymQk73g)mWOHF<(h>~l3Wb=coPZXb z=+v(kb4eowVk9LfvQHvk#6&fqE`qz{_bh~1DKZeSEj*1spDK(;@g$2$oJNf_mg60! zbHIEh2;uA1;&TSje0CkrjZ;8j@%c^_v=O0^niSMWqAZFzYyYfn#l$@o&eygxU_9#J z1Yj>Flw$cZ8MUJ_bpI_>BuDy+%1yDi z80c9t}P1 z`}Bdu5p(X%f|)6}iJVfUz+kxJ4PmxuuYn0uc~(lsT?ks%^WiS6!&IajDVXv`RxHqi zJ;`9!WS{%nmSCmSdl{JzrZ6W7-bub`4+lts$ED)Yve0`B!>PAJ0o`hebXRxQ(85VW z+LB_gjU6i)QC1)|{;NZWQB1-Yk$C}!X^DYWfSvJ-ZizyOwWt(=i&5-rKKCjfy3qi; zj1TP$!?H72@Fgz~C@Gap+@l_XN`6=$o~9)6Htar52cAlWf?=aBHI0JwI)xj=N6(&P z+IY#Y$Y+2rrP2e)&c>S(h(q~d-k4=;{Fx29tqz}B3TCO`5fP+0Yw&LP0_#}MOF>}d z0L~&@&m!F>ET{>VPv#KmDhSgqwInMdC&34-A5pSCkJK|y_7Z~{kUH>F&l#`0YJhxba1L2hOdgdz#jq z2TtibY7nhI>ZUK{xa`@ydYqw91*(j-b(5n%a@pXMA%p^H_Rscc$LK;tFtMK=RTql~ zyEr%RWZZm)tK_H@>nT2KGp16!D}@4}+uhUlUj_6)WP@|Z!9mGJRmBxM=$yaavD0%=VC6{u8?BD%TlKW%25NnpWh+tR|)ZZzR4r5xN zWo?)^y!7*)|FP5K7usVsdlPYc!tcF{5!aZg1Q)^ZCL^Q_A8J5b6AGsil4`oyR%tyn zJ~?+KH7A-CJSYsjsvOQI{*YD67Js#2|L*o86ytW^vy0&G!)Q=?OxGA?JBaCsL`Hon zKSiC85t1b~{Hsy7m3y&DDv?1F{VSVH!!!#%h0WJ4-OD*{3?)TTj}&X9@`|uei@^yP zjhmnR%a)^2BgQ#sqzx~a*A$E4>T_r&9G_r}8YfuuZy;TEvz8+ztG*PNlCtJ*{i1ux zR}*Vlt?ccJPa%!pt20P=&*X&)n19$l4Su z@2bY%R>0v*eLSm6QvJ!Z9&;YSfP;1nROSxza6d4*psDUicU}siSjs{jgaI*`Zi45S zZSqI0WM|Xo^kv(tz-Wh$f+9t-@NFRxXH65G0od*N7vK4csWdWw=EL>lc0+$!{<06E z0`mrg6Crj5D?K?Y=woYHkE0)$xj4}p^G_^ zFPGhi@G?=5qWmX;W!k}w0;Rr2u9D%Ogfp<{Wwx+HusVbbY&lJi;A#xnR5IE}5xoX{ z-~;BqnxmYuaILx0bUsIa$U{e1m)*vynSHC?-7)y*(rD+8i^>ArGfe{bOnAUO(;rLY zpF94)FOYxk{*#0if|#(soWH>hge0Pu*hPN)RY1{6BT-xI9U`%oa3^}Ot+Q!LC%PA~ zf6w8QOKCeleW$Xt#fwebBpt{V1%`w^AEIc6%4dO;deYY@sU~b)O$5tR*U!nsiG{!by+IA;8&%rk-}W$4H+uI)*&CKt+}jj z=8}dyjJ&#Y>d#r_Sm%Fz{fhND_SC?SoLGoZO<7G{x+0;0cOVB-k@`R*J5kl_^)=V8 z%jVqIfG{TW^=y-Kuot1HUFTf=xpeyMx)b30itWw&czEWneU_85{%ZGnmMOSA3V3^r zeSdsjK94CCY(3f6dwATu>`Yzkd_J20dD|Hpx_|8P+Q9c_``)n?!sxq3sGm}LF*|q^ zntHH1xqi}G`8s)W)#R~Z!&xdwSk>Rxt?-3AEUMxC#v?f~($g(M@ZDY$Fo<&B zxqp3l>;Cbya_qCgeQ4?Opl`DP!JvijYR;&amYwUe(HD86ywvIAI>9r+>^DpSS;tS8 zio2tsK@SFu>(4+@Zrgrar%02dr%#(cTwh-WMW*>rHMW3XjBLGlB>V_`1<3p;{D$A* z?>gr%&raMX_pKTqv8559-B*K6x^qusGM_J!Z?D`l@Hr=MB7Gg{Jzu#!Nv{(t_o-bx zdOX%P1jR&R{X!VudNz7GTdO9Mhnf9sJ2!lKbal>qUT;O8%#~9K1|7CH8IiVq)5HnA zC38-R--l`+dyV^RCl@JF8eg2XLw!*)$Z?!IVY@H3a5_^3eLW&oJH2^N(THoq<8JDZ zAd5rKPe}{ChLslQ(^&X}qSD*##=79U%U9|1PN1WXWiyDwBwXn z20~j$6IZGc7wv8bf7WgL)S#PaSsA~iE*~8@I8|X5l|99xT(mzg8(phXTMeaKJOsUW z>D4UFKA+A%+21?7j!NBK3!a_}WGP8B>n$!^3?5!z|2!LX%3`ApX~!$ph<+bDbgv-D zx~5VKf?xf5@IdZ&LAb1t*_s+@1@Se^nl_@YLYzwoB_33az^I6&r|-41?~)WZa^qdo z%sb#Yw=4>v5zClu*%j9s5wfhw?i!Jm%1DNX)fAnAv6(P8_E@~op+pVhXLP;29Qd-nN`-E11 zqO9+Fys`1fMLAuSAv@#%P%W-;9U)}-D@^3z#4gA&dXX#4xWKqB$fCU8lb?Z;nE#rD z*d+si3jY;f(~LvT0Kw=1KQ1@+PDiJV_`j1p?AX*3z_aCW$QbCkco?8*S z{};iz5-D&5?hh3yU67{v|3l(`pyE8QYA^#+fl+@K=86l{ql^snir(~{o(P`)za-KV z!BBd@!~CIoAj` zw*MeX?=fqLOt(>vpS3-_L3DTK>$;NVhA_O|!{9fXD`|V;m~hnoYbXLxyBAOsi(GEw zL&Z06{pd({?C^2zVw-nq-j=hIG4i`y9p<}?iRD0D}iZuP(IE!zWiahRYJE( z>A^npbRRigC`&<8J z{D{&Wjq0Fd^2XNjsry>*P)y2wUedQK3a(yfHJupZD0)`2N%U8?sej`p}kxOXh>^bF0dC2Emt}Za8UP z+2N7B13wuK%ukGtoR}5@9_yNTdOfyuzI^X)4!#9y!IX?{mYs!$IGyG%bJ*5j-Ux!G z)(>FhKe75Mrp-~L(w0Y0pe<@KEVK^alEKd>(t#=%n^r$%(XLwP9q5XZW=+CU47QIt z)pXIef6#D5(H%eRNQnL^-I8Bp>N1#&o;|e76CU)FEXF@^Lo%~Pz~tnZHS^kU{UQ%# zIY=UnfbIATH20Ic;)o30DB{ev1k6spgZ~aE!!kfuw%4I^my^`zrG#vm?OfcX1}mDm z`|}0@qhs_1i3RfOVfPR8#a>N`;PHtb`;X{4FqX5)1yrQ!eG0zHFfls_)$6jncZ+BxUlTZ$q7+hZjxd$ z_bwGtG77h&OZ6;Axm_j*@U>>~`30@F*IUW|l3n{nP3*CW=n(<%j8TV4dz%2&B8^}} z{Bh+tBLKHDMJ8jOfxR@^RKC;gFj(Z*^>I!Y|BME6oeQ5b@Ld2Rh|}!J%g?xe$V;8V zlG$@m0qyfcFMZx;UZL`#fB9ZB4uD8 zLjiAVTVkIYc`K^+kRGB2R=XVHGAA>SVl3Upi=z`;32P-qimKR!kLGNXamMg!`0-jR zJ7DVs9{cApi>BpBVBSHTLe_izDrT>{g8l-jaGCdsntjS{nLj%o)Dp7p1XTt+i~9G+ zNGpl4C;V->8(BCUopk(nl;R$jy-8g5<+55D4D@OQKIVT3&&bSx=Df zt)>+n;Fo=3$2t_J`r5Y6YsoH#VApDlLmb+>Ey?d#y|cFQ{Z z`uTana)#PqGTfKFV3@X%8(Z%cN6OW6E#nE`D?V9#&5N#pH+QqeDB-uk_o> z)E~(tu^ql3A!RI0{VO1N)I=R8?tt^pS#=CsxL*b*HE=iFq8JTAFSd+U!Atk>(MA}) zPx0DVs5+F&b9GWYUcM|~7%+-;3vVH2vX;x^AnDeSiQT|`t;5_&w!g2U{r*bni&4Df zcCAExoO4&ru{e&{bv?)6QJh_?UQ8HYJH8h`VZ4yA#+6M~_nkK!xOV6>L>#-eQkqyP zEUqh4?9fibh@0IJ9lE$^&F&LbA33!3r;EwE(ii6#wDae@ua6yyNYTbfS96Ip?3KZ* zSNU0|6rFA;ueVFKICUC!mT<00X*=p#jWZ{ZkK(tIy-9FNvC2zNa|yHT7r~p`STv>= z@s}3gWs$5ptwDNOwe3dA#bJ(n+aU>#A(x|tf6`ozDSCwN?8$ritZe<`BN-}=gp`c3 zYdf*m44uR(F?~(dli_l6X`k?>O5fIswH)^CYB~P>kLY{uoc9VuTYhZwe)D3x0-khp zyoLeZqQG7y7jsM&!14w}!g+mF#-}f1YMtYT33S(G8P~#5H0LI|{1~31w3NE#^dK4S z^VNQAqq%kf#l=K~xq0TP*LCDPX0}G`C@92Ftf{x@?Nilf>fSyWypFWAvKU2W6|vo` z&`RY>3J!NAgQ~3#X6$QYR;J~UT?bd&kurl^`Lu5#Kg3QgaZdmpFtA zaYkk;7tqe7Lx^XK)eenfFsUWjdG~ufDIMI?VACUf=P{WAe$%<#ebIB?_*e*Li>Unh zx@DT}XC~-V71fNH-_th-@SELfhNhvX?zK_BAfK1~Jm19iBy@0U0W&J@`rvwWa+d;B zwyX{5mnby((8&yj{#s5(EY@`m!kYb}LRNE{-e0{lshy=rnY}enANBWHeLr#Wz2jq} z2<&oM54X1M;ck;du`@H-l{`J#zkV&9-gSqI_L_AbhW|Np_YLfUypk2_AFlJQA4R+H>dMW=j=&Tf)ELdp1%lTocY96O8qoPZQl^#{J3WTs(>Jn zZNVh%F0{8A=_ol8($C$|>u%&JqL;Oc_n<$B&67p?opz11yIPg*v4q4m*P zB)+bhRQb{C+l9vYB6x`T_Dq7KJhfOS-q#U<3o)lEs2|Mc6xwJHYabFi#3%fNSDG@{ zA-h0rU9sZC%cALI#-_19@2%?ZJad0e$Yp(w+Em0S3ft1u*}?u1-Hj&ibi?6dv+U}= zjo|{*4eLz}CAE`0i0V1-5QB9A)x@nYgqhFTK$p*H(ict`eDR%wx1?X{&dOj8w;~XI z4%fO=0KB`N^OtqZ*2vjH1J*AHQ#aUdxufgH&l6sX_F%PmDPJ>VoVxru^QJGs8eqEP z&0xFJ!R2+g??G$IPU`1GYVUkc4S9cUBNn%zw`KSQGhR} zYjr_GQeI3L!FK=T8ijWUU&CW0iu{VJ1;l3F8G`Q$7c>e)qjYMn{ehq+9Pz`J?8}w} zMFFQ5mqUpY5GUXWF^|(iK!;9uD<}}n{h%&*%Qu*(lVF3z9SlzE?T zZK0Icc0zHY*brYF$;iX}t}=XeYkIr|er*rPj^~l5J5y)1IdaGWl2he&&HXD%U)T4i z7xmzrB-8G(v*x1mLujRT#T&HdIlzTiB66rNxg#eKRAA;S?)blUTEdMTm1D?Y)!WWg ztg3_gNVK9~h=3|kr5+;l>sIJD$+U>bn?vT{NN+e{YQG)U+D|~PXF;cJ%~W0yTXU##_k*Vm8aF~y!b+9qg9KG zc&-v7WS3$e+Hoe_3}J@eT6c%;}FhZl7-5(W%2V8#X1-M1*?jn zGER#{o601CLVY;*e1FOX8K*D;2DR%B{RaG)Q&mOA+EjI%+W}lllw-Bi&_Xv>`nYA4 z$Qp)%tt_=hdh@3!PwJfzupC9kX=2Yd)$X!Xn^03;%Z2CK!Nc$%*ZtHyqWgw{bRhP591o#?HCEkJUF+X4WAg{CZwlCQ=zO4(17#wZPMbHg}?VYga+vaIozBKf9ll_^Bj z)%R;Nm&7nXTn|N1fVP#j8E-gAl!aHoxxuFy0))7p3d{Cb??SbT()!s&jVIFF`Jtm@ zDzK}y+0sb=i@R%82)dQ5wOP0*I2tgxSlW-p3kI|KZM;MuC%3!E~mXf~x6jr@q;_he{7t$NhsXkUZ>ZenMP^AMq#zsO%RE1c$czb64 zXo=~)h6y_En$VI+J=WH99$iCfffOTau-F76*)vD8IKOgqObeDUYq{s-f)45tidF)2 zH3(Y{qgls|FHiO#Hlv9DV&iuC|74>Ya}VIWq+E_~Jo;Q(Yo!fAw*5Kz*z%XtEe7cL z5!+=uPlSJ0W5&F=(1X@Au!we`rHwe1pF(aS(D5}~=LNFq<;0PK3NyFS6caDhZ35Nz z>$`!3r?6#4e2QF(D2jv6=cA@YS{If&5M=98Yw{&TCXbCo>*1#y_D>Zh;zC!^>g72j z0vaX?LRZ}U-Ze2Kd9;cUU3k8-;zGeBMEH92|27AQ-z+EI7lXw=6>VpSqL_N2Ug-%F zLWu#oPW^vYlWGhi=iEK$Wb9{PRA&4C(mbXJf5Dnu4ge!zPO8E#K4vVGK(BXdSB*Wx zh1ofK^1B`Rw(w16tLxq83n#cV=$*BWrVoncdfISBR}AzJExwA%AJksH)8JY5BvQQ^ z=MlY)SH3y4KV3c6`N114_;kaQQxV`sf6{j#ZATo@2zsClt)00ihcC*YeqwKeiQUjK zxL2>~CQj+k6ID|a4hDB;4)aY1&FWeDKn|d?WWSsmNUB3r_>!1l>LJ3;-A<=WloB|m zJaWBi*w0^uYQ5(#86b;~%mr2Y=bA_N*iY2uU3*rQs>}J znlN8nn}iReH|%cc(@|u}2XL&RgT;fTix4>ie_s;&5H>spPl7p*fhiilDsQ?33FZjR zY8LzJm^G646KCIC`0x*}Jrfl=iCR|ZW>e(grLup_2iNg5fD<9M}5ybdM*rjfKVLtCk2IbZ6x?^XWa zzWYNpWgUD@O_?w7TsiRm^esLPgalrg>wK8M1%?efhYTy4wxFdqpGJMDuhiym4nc~RYHK)rx}m7|MX@$G!@0Ng$s}bb$JFK3ut-=4-3FIA)*h{l-1Du zAa2eZuZ0COc6&GF>T~)Z#C5i=a)=U*b*pMk*@GJ22Xo)j-l7mM?YV=yfKdG6oSeP} zB}1(~(r;gPGSHJY$T)?MSP+^Ur#q!an3c~fUdeCXkb&(N=peGOysgyR!$f)wKbglyq5(`n)x${>whLCPan|V9$pP`hdZGj z{iaH*La@1z%R-xc7~+m*{pi_+dQ>Ie{CnON*A)3^LE(NPtMQ5oMCO$WWH0NFae8to z*(InJ6Uv!zGw;2uk@OGz`r%GX1=_#oI}upIoQ_Mq%x1Ja?1PGZ?ZF-7{}@k6Fy&xQ zU*^l@qD;9Acfzq?xp60-(TcSCLkY(i(M);nSu(f90W)sO6Ep6A6z1a};=2fCp-um( z(Di>Ryvn)`osQqG;_y_;7d|cf=s50JrVD*Fl>d!>Y`&)GBkO^O>ab`(Vt>VwDzui3 z@r!8Pc6LnsHvaDw`p4t;W-r})r(joZh!VDxZYZ*)>jvFCP8*cT15B6z#s5t=Qmz;AZpX!#z z!?iXgqQf$)B)<`YW4$Zb;GMuY-O|nP`O4L!vwoN}rc4DqVjFdAqM(x@OZZu|79l zKkA@S_-|^NKd4cG)X*}&ci&U(TT2KjhJR4Inoa_#c{%>1{zi@#iTHm|U-k^ac7^8} zYNbQuuCC}uwVThOqYH5RMXVXv)k4;JB8V1A>K>+nC{s6NuSsIMYd4s{VNyC< zHzd@(-;erxmtFj^)obCyU*vZ#V?c5h=s(C?nc2`H8U7FQIYX(P$C%XZ4adL82Mnbi zl{FsVG+LF=zYRElgZ`n?9?#fqpugQ6(9ZwR#M%LujsM>9V?w&%_F;K1t-A!GwCI^m z6EWgvG@w3d#AhW>m}ZSzeZJ67t~_|mQAFpkcmVrw2mTj{h}Rsr9|ZE#(qxf{u# zA>%9iZBYk*xjm^(sX)r6ddT>YJAGUL?5#-Mf)_C|`3VR)+R7B2;7N0{C=P_{(B%Fo|a)IRBL*+(q-8lX-~X}`jeWIz>IVi=^A z-+v*_SOU$U__`tNduCl}0s(V#)9Dr?%qF+=G9p^aW0_&PfhIQ}Rsy>+qdLtgKVMW@ z5!2DN%U1m=AeS-U^n@YCh9EXS;bo?E+}#jX;^JQd%hnm6`@D9X2M)&ndPZ)JESJdM zd-=6oK7-=pz1TckfhAZAtJ-z+JloImib4hekDPTkAp4B1+7%K-4t%cZYAYbc^IWLF z5XrGc>6ybxP;S87G^mQ3?1?+m>niDO10%;rcVDZoO59+g{aSO#^Ey-9Ixyfca9%5>$ggmoD{aF; zZpZ+17|4nYfn4GM&v}ahs1Sd`S&JaZ)(|pG9^kHH2RsZ9M8rP~)Ci)DNGgelv5b;S zxcb&KG#+fq1csKW+lC_tI;SnQIUG|FpoYL`-x+Iu3D)&YwHsp0*l5T{=)^IuGgSxe zA`AX|nS>Y%V4DXI1KouLqILa7a~H0L)(*Y=jmBty2Q@vysZ&60Uv&Q5Leb z0(B(PBLZ$S+(8*6Q5nbJk74x{PvGW^x#=d;9qwOsgv^5kO}?N+kiRd`4ZsUji!Ughr0Z*7Q(n&wWbx@Z{s=r%EOA$#K04Et zgut^7V@hgshcD>0`r-wcTc{@{W1m|Ynm*N;TjmV3iTp|@uz05xz~Y_4K#v93v_br{ zc(%E^e-*E;+omUNdL@zRFNJV}@CPS&yOX$-(|zDphANbKr57^&+l;0Kz?R@ zb#;^R>EylaM7-doO#5)O;nO1Yg_4P?j9=llF3y*4v2XzAA}oe>-J#TKBgeiQvt_2W z|E{YKZUz1->>OpAw5K#0CG0$ZWjOPhbS8pi6Wid~mVJRcmqr>i7Tz`Pso9R_y7ECp zq1yqLxfhYCci524o(siFI6b#7FHeGIaZu!`L^T%9I+28@#zrHl!oh3cMf-E$H?V7X zik>5{0R^e4SrB`fsoF>hqQg)VtjSC-r^}`-l56W;;RK#*6>;hvhuz|Uwck9n0AaK8 z);yBKWza*;?AasI8GTpWi5Cbc$mX^(0?co71)i#!;P7(}X3uJ>(d$@;%ig?|9BJEB z-+h0$%0?2>Suv&=;&QFfI3@En%wGaU+MR7ZV4q zrT>La5M~8Ken|!OniXUN_4=d$CG2sRsW%?$!Nzb__Jp3L_bxM~f>ls035)>i7t!sX zRG3T30C->#z^7)@XEEVZ@$*TkuFmxa@U;8i>PHfMvt-D{@1_T7fe-ri0*1A?_&b&osZZ;_TQ!^O`AZp#wYqieWld00=&$bfh6zE%{g{$xI+7x%Ok#2$EZ=O;H9!IVh2!8tazQ%+VrVF?6;ISS zClm+8EHFSE(YKToBwOX==Tn89*gSr_uM2&F+IH=SE6e+x1wuhJD;cn;e7EKADSJ}GZ@^rU-C)=2?vUD zci!1Y^`iV`C7o?ynp$6?kGU2#QCE>X2U%>ADwaG!T{{mL*a5jy>njQhc zc)7XtRVnG(;u6Gok)?mgKN9lk_J{K=8z})2&Bs>YTDqF@{{uLB2+lV(ajtyl6Qm%5 z3IxUrcCFiMmzUl}&!eycq+k?>`Kn5BBeM{spilR95_K)-3~*Eh-uDN$q5)$b&~<(J zj>Yj!;l?1~d$hOfX4)`*+0L@?_OU0>&*&nYZ;fXEY;hnVP?{XDBqm*3hW(5e-l5kB zP$z9pG!H*9Zd5Ns(-wj*7hG0eMvDV;NB-5!|Ft%*g^$J~T2vEzh`{>h0bIIwfE{Il z6a;uYTmg^5(5OBZV4dx0_=j{~=A{qlv*6Osen(h>;?>;wI3&moEkMXptvfCpq`Mqx zM(q%mj+XgFH_$w;nn|csOid3CTLGy|r{Mmk8EJO1lpUtPlnTIa)VD-dBizh3s=I|} zc^p0gu7+XbYY$Qddhq3VZca`OtW2?24OVz#{Qg8#;Ht;F)fd(_a0jBFd1j0pS)QmX zl4!&6SDzUp3la7f)Q8qhB_=b#H3`v{h(DWQ?3>VKNzy7jQ%t2SB$qy4LkGxc|EL-o z-Z>f`mOy{Z4p;vr!+^tb1K#8z1W5lS=8TFx@Qwcvf{6WwyVnhL3}^9_exHM`8BO2i zUO)mQ7ovb{!j60HPTR#J3&bdFj2lV}Zx3(Nirk&8x;!P9exva3cm3iq4#Zqr82=66 zpzs^uIQ$O)`+K**eTdOcn9M%?;r@f%)&a!&{GrqFL}@al-UF?4QmN za&0BCc!7>OB$tDXMph@l+v9Cer2k2O#P%0`sfh*O4kXb0;cgqCGZM7(aG34C)2YEn z_a9zwFp=;m{K0T~yL{a|z|kWO;-ug;`Jg2el9DCJ==1H1&(7Ps6UJ4FIb>3b-L~>D zDri1c?+DA3cwVFxPb(_n_&H_d(?q{2UPQ_}vTsNGrlS-4oNlzaaIr`Cln>c-ZjLqz zc(%Y-8ZZX;F|SY4V#$F-DL!80LwT0Um453m&%XE?<#__Gdz{#RU@TEf&p85)o$6p0 z^s~h_|BVcxSeQ(q%NXq)Mm~t);w2OnjJ*De>j|SvNl4GKHO3xtxg8R;E3T-PT~e7y zcOxdnW3PB?B>_7P_5t>HOjTAyBOMrr{t@mG_{~LSKV#s>F#i_&ELh0 z%}{@`mu~19>M<-&PT(*x)w5(*1&mC*%z3j|0N70B!fYE@7}KIHeu=MC>5!{a%uYnS z+Im!d*g8zn{K!H(d0R6fD}Y9tB}>wMn3S1`%8+_uW`=;BrkO6kBxGWibF%IfkJx$I z*bs8$!Fs7fZ((-)p=1R$ZPailJ0QHDh!q?3g<;kZA`c_De~g3!=(7LEl;Q7PKy&%8 zgwPpgY%K|e4<)=GMzmI(QkU8Bp_Ok_`@jE-iU~-C9rc@vDRS6&r+${x1Za~b&4Y>1 z)5dtLL+wdlDkm9(SM*x*W0x>nJ&UP&%E?noy1yU$QD1w6_CujsM(4@`eAFDg~Wq3Oe=K~enyt@^n~N`55b|36Bp8l7THu=^=+;3{ zo(N-}2z)l~6BGuRwGGlrX%dsh*fJu9Bd2Olcu*dgFr;2yAV$2)uI}Qoc1Zd;bjw5a z5-f(aYi?;inD+^{aEQK82xbe~Jp#?j%ur_iNy!u@<-b+HBmJo&r0*JEzEVlO#>%BS z@JN9hK{vfM0ukfQWrgpOSmcEU{o_jThlz}D3(Ncm#Ecc0abjlY$S`q9a&~*PsQZNd zolrI+shN8RVB)isHNC{47lnrl<6a98EYk;+Icr`jKd#F@M-x&6{m}UO4$_VOwGU)3 zS|nfS)_m-T-f<=|EG{xf85(YxEtVA${uJ=>G;60kujQ@y&T1WuY~zM5D~{I)kDVV7 zDlQ7!c*#e$KcK%tArJhHDqf`6fW;DxzT-sifM&J{ZRO5DuCH@E>9Hl zl&eKr#030p+h_h) zf3sMEp^n-tH;d%6!HW9>fv*zyY;j<;L8At~_ajlJT7^xQfV;?!3r2^bUWhQ zU%n`>MXihBW&CShBoc}z+@1vJmDA92G{D{$fJgktD z0zy1K=`({0Hljbdf0=&wAW&JkpqEjTa4b#J3OvOxlZ@6Fw#=h>%yvzp`Ne*42a$HSpryYC8L%~I~R-}Sk{K7ew2iPDpv$huL{51M#WKI%4O$i?;2yL@_R)V@wWau|7g9=Z8i-kyqJV9gjAdj0MK z6(n_aZ{=gTe;311JL%$hHE;ghutMo)CrH`5;_Kn{%3*o!Qg7g+%U^rvS7Q5^YVPaj z_uiuC=VrCPKIv1``^eB9aPI5pAz;u|-f`z%So+TWZanFfIGP)r8QPk9;OW=a?Y4g4 z?m)oodeen zc6?L#B%`|>G2q&pQtQGe`6R>U$XESjy%)dDscvBFs(XmG*pL5dZ$__rAQT*TBbbM=)?uI=p`En@YfqxBk|^ zkIzfML&*2;^1{1Sb>G=pyG`$kRJm9?{z_imTZJkrIJMNd=;LVKzH(~Oxk%#0!h-KAro9 znfdX}xBm5R@YmYF{W;5~{S)c3Qh0!d`gS+wlihuXyC%M!>7`|_>{5&AgG%LWB|6*8 zis1WYZL9MXCg54_jX}TBEuJ%-fcnGnZu|W>$=z-n7C9E3;A@k|LxcBAoq~KDxJ8_Le8dQn_Js@9jsdA%j zn@UdZrclhe1t-k@^D08#gRg54VNdR6UkGsM#}04^8#u&zcPr?niTBp?xGVXAy|?CW zc5?03R~wj>)70jEy*B ztwQ9cl?EW%n9EmAYio16wQ^M3t1#iUdSrlcHZt^J{t$Rnu>0BNaa6w|K9|#tFb1#8 zw-46ypmg!5^i^*ll+c6ji5$G&?0e~=odF>Kdwv_8JwlBE*d`AAyQVOhPNU{s|(5fN^7Fe)k9o-e%Cm<-=Lhw>vW?yh@6cmqo7R@ep&21AR%!{MH$UCS)z zZ02cctHqg`86D>lqw52Kgx#7!lzlb5NjrD0PVl)o5>mM61i0DaqGn&xaRZ%Ugt-qU zlVqbJJT{qTJ!I85{pP#&ThCfHZ0keYIZIdT9p+{NB8oA~`*X|ca-wOdNXLUiw?U2D zB(Fds1EkmVX%SeELR~SOCh3X}WEF}{1K1L}n~txH*m{k>aNw&(A5Omnonf^7r^6i| zRbG}*>I(eyLG;s@DWf>oPj(}rsC5!Mvap(@8(>^jD0ZOJ4_aVLVJ-fiGDA8bp~3_7 z{)0HXn0-dk_V7Cw6Xh)+h$^bU3FQ(t{2wTP5BNLE|E>a?y%o|vtzZp|OLoo<6c5U>6$CLT7zoDx z53PSmS_3<#M*#rCV1Z%Qe}(k{?BI8p#G8NPY=Uup`1Tv;?*V`FTqn^4xu8R`1q?$4 zhW)mNXzf@j_5TQa2k6SSty?%&#kOs`f{L|c+cqky*tTukw(V4Gr{b!lg176Od+)pF z``>$i+bt_Ct?l&Dd!K8~J?2<@uJMBSbblA~JNSs?NSpGtRw}Uz#K(KdmqC!Bb@CB> z^nw9hZFZK{AY~un!JzTkY4oR*pLPH~i&tgrY~}P`ahae!e3bQ$!N&mCj_T0^u1}?3Cy}t;f4M)yTse82y=`XqVDM*m zZvQ@GtbuOnG>OQmA%x#=7j!+iKp>1-+F3u+1AJyS*_nRCYpHyTjWnrxZ)fb@d%TPN zb~b*p{4)7`xc=~JSwF4gL=bi#tlWOhoi*c)lK%Q=+V1_v)86|v*jTW7Wm5NP_i=DM zc2YjmcH!Ihq2J8n*Q8XAYlp{U+gu;f=fxkhseJ95U#`g}Hdm{6Qon6<{E{DTtv(xH zu-A45u3tAY2xojZGGdIcV?C~Ki5A{=U+HTEBTAtmh`#e(V*L1l6)Lyy$-RZW$b)kd zWg?K9jSeso$jLVGx>yo{GjOZuzqEj8B!f79eK7|alh1{A4)9(hiSxQO!45JdX7X>+ zN3_hvT(ILP(v6OD`wd}PY9CkPU#gBEFHgq*nZ#XB%F>+p;yc2+>NOJEE`LSHy(C$d z#JA8!bAc@9Iv0K}frv%?OLzQ5u;p5)idvL1pB;Z*R-&>^YwJp4LiIrRDwLsvp1`#q z$YI^WFSRiH-xi|PVLm#f??oYpU~*K*+zU|p6MM+qZ3F_AgF}S(M8z$z=e~GoAsm&9 zQ_KHGJPLnSSn0sF7JCx`s~HwyMa1w=SB@#4EPV=vSDt!SNQkb0>k@IiQ4^dOkn2~u zWe-J{d#o?%9CTg22e|ED2@0I#Wxl>0@Me4H%lG#jB=W!4k0H1^t$RPezQ&3PWFGn4 zYrQQVOfj;%T_SHwypo*V!~&zL$ZHbVo#4zz3q`7b>D6G@p^9C%rS~Db{rJ3 zOG&8br?kr_6i=@{JelS>QCqLhnZ2LEYKDBJ{B&;EB+sMJJxSEcqri4i*SCLn(<0;G z8is-;!Hjih;x>bH5_X|$$VGqIGF4pR6S4xZW0z4At$e&8toVy8mm;EzT8 z`_iuy@6z2xod+p7JxR{kGseC5Gpk=cyy$&)5#4bHV9_s@>OHjibKRqF?Q{@F1|1td zZ@cKchyu1&+|Sy&NPV2*Te0Z3FSAl}xr;v?kIlCj=z;19)Ss$N?DJQrORrQV5 z+f?nyv!)V|VpnV|8wlJ7*0|;hC3tznupCo^BcAR+V?uJIe`ZIr>uEx_d`?VNlA-@{ zJDFD}ynM%+-UG)O>r05bz}89g*=tIDc1L8L$HlH&0DIv6yJ-)Td7~jW?6Ye_{-9@U zw%NCd&*rZ33k(XW`3Ki)cZe$ffN{L@RVqvmiR?!|{2%#T;JJ}_t}i|XB>5aWNUqs( zNOib-vVsHBdf2@JO=ENiRaA%W3|-Zb5yAvDoo97A1$gI)r+3|ITONOh&-0Ya&}=#XQR~wQLTl~1fTLwb_!Z{2H~Uj z^?U`5@A>>lX_r=PjP}L6$HIfvn;I%4kIUH+YGX&!gsaKIV~G1=duPS*+cWNgS&u>~ zXVHuqU$fP@KJRkVIMY%&^u&%(?Yr@9-BwcMHq+S|D(wE9GC_c%oc=Wy(bslYb{>a! z$M61UY&~{v<1K{8@k)|t8@>(Qa9k6e;&+0Hv9xAND-`aw>K^(Is5}yGFEn04a$(On5OUajdvW|Z zKDzZ|v<)xu=NDwO15eqgaTXRR$_yDY5|}Wl&%~66erXTj$RVbt$f6@nggDAhCbGZ% z;k^>^>jzBBr{R8KOhc6?yCUn0BL;c z=yQ~FruO-2rOw(f4@--`&S>~d!nBiof3oa zve7THSws?lw_SQ@cE@2>cFk3n4q}?Tj2k$4b~ePEmrp>5HL3r+lhec-u$4LTQmXX- zR-LIFe0ibj^6h%z@tJYmCKv5oe>?xa-(ok}#o|5jymi1w67D8ryNAI{bZzTxlajAy|8aX3NJv_AtbC6w0 z+d_s^484b~2{MR%v~E|oyG$OJ*>h@;eJ7AN(67y*y@OzB{Bxf{>4y|{+U8?n!Li?4 zHm`q3Dd<2qrT97Mu;wt*-|Ts`uVJ=(-<^~$-wW?bedxv!5Fs9~YkFQ%lXN;7jwbhQ z7$W>O>ZOZC_MG`x;URZBj&4q+opukF6ShBwdC^!&hpF&QlOml1)} zv@KG)M5HfFcChyAZ()I1Em^JNbs6N2fUD{lTi)H&;D?8}mb3Ih3-MBpKQ6+%o?deP zwo2!Hmo72I5cUwV34X+u!6MV9aViV7x&K7>4`;4PD2KX>EeND|2 z^^@3v?s^w&n9a-u*+BT8C8T=>T$`Eog07o9UR(}dm)o*|#Mp9^FJfEWdp1PZ2%C6L zV^)PJMqdqZnuEN+;aj4G+qmA2mwnKK$tY{xoF(?QHF$yCqN#SbP1s`H7P@hUw_W&+ ze?YC~0X{Y}$NPSo0W^EdI=Qm02D|;eL=ZJ?m;REP;$Z)m)So4*UA$3)QtXCzR!m>f zucM0xg?6{2AT~2?I2QpOT-Of!a^O#P4z3EnPqy9rZ3KS)|FZ+IN8aat-E`t;wzsappxw(VDXoHYkdES~-0cs0n z)e-dRy)+NTi-xIkNXjcrsR&sO2dS(VsOWYXa=X#=G|}|Zy;Cd*c=GUOSmnA;2lyHn z_y+NrT@ahDib1g%z(tm|D`oq#A6KXw>{Gq0?+t+KU38S2l~ZTqNO?gKR{Kf7XY!|z z)|H}GwLWbD9Gb3X$}W!QqE%icEv_u~Owak?R99SbI5v(AF6EErb)0QazWw zYR$81Lqu#|=qpa~wH#{TNZ#5aV}4cg`M;8zi<50hAK8lEfpoaV2?7HCFdNYLazC8}uW zb3EAY7fe7NSBobP$DD~)+^*e@t-V}n3!grcpvRsO5?==mNZt#-{4k=?7NYl>S}Vxv z)9q9#5za9Jts?-z>!aKmC{FgyIR~7%CM{q0@KA}*CqFnGs3 z+x~pKqG48|eauug6s@#b1AyYgyfXj{(G>>aLmrUMh+O(cnv0Z4KtM#;n1|38=MWC4 zJJu#vtEUOC0L&mTOJAIEkC@f`x~BU;gzN;zTti`KWg^T(AkZnqP)Nu0LJ|r>lF&_` z&pO~?7zwE(GPHjolh)~?)s%gkV%EY z`Vi&%a+D^DNx+<~Xsj`?H)tNCk%c3b)0jjJX3|L}joL*X<;ebRp#8&viy&VhU{KcbVI5|%x9HTaGE{L%k=gQ{*B5A+ z?`myfP+Uyl?t@`2(+AS}8UA=c?_)9t>b05x2!;WHpYB6emLKHK5>1S(uJSxTigBY7 z1%a^2=ZSX0rW4vW3j-l;B|7X7fgsyP?uQ`(Llc3}W6qqFu~LhL^9c~8W$|ArMh%B; zVoDU3>s2f*61jZA`kw5efq#0pnu_y~Zi@8m`c7oUlfLNuO)CvBbcBUgZpe;bjfx zu}0Bg3uXz_PV0w3(Rdxp1AnTa$c94!!Orj}Da+xVr=OuR>CKn`o(=y!G|O5LAnlLD zs|2Js9wHC|Umz$$VD@j9eoD_BVZB1!;xI0BOub@S>KnO5vNK_jB6AV9xjW$gPd?Hj z5Jr?PjM`d|;_uA}Bmpt9hCRsspOvxM+JbSSko|{a;du>yXf2c@gZky;U>luV;*0BX zxBVF~pa1iK0SHKcjovvvKHUN9zG<7Uz^s5<&-rV|={2c89RzekGCVSV-m{NE+&kUA zRqrdAvd>#v3Z!GdVO$v01YRN>!bE0bINF4E;_oM+3Bm!8<6ux){vU(>gMPXFC`9jc zh`&dN2UBM^rnLt`?^8Cs8s(jM*}Iz9d)nB$yCf$Kr$WMq%{JuF-0piF}DJ&K|Em9?I2wI&e9j zt$ppUeU<1no_GZQ821hZ=gEbn$!yNMf&JL`Ox!`X73qms+(f( zox>K{?s8{^uZfLAi0@ytA6XpTyqw+)8r|s_CF(H57o+&3_eAaObMJ|w=lgvyCT%tM zO%h43mqqV`pAh;W!AJ#g1Vzz&MwgzrewPd{ZSza|si@0GGxFwT?~!Z&aZ)~f1S=gg zCH)u+*Z6e9n;F;Lrglfs-0J3qr^{z*dV5OF{jJ*TO)<;83NRj!`Wdcvr%NwrHTS8G z?)cICvzzLHr0#7=F{&?O{NUe$d#6@Z|Of8X~FPUENYm$X` zyrp5frB6OfNDl@r?um@$;D!Cbf1-4(5{>MUXC%?PuNU6DOkaq(zm2kf`J(qxe2(1Z zli2lsYa#&i`3Z`nVl%IZ^BaY;647HhcG7c^{BX|Z*S7@By+zDWeZ&z9OH=t{2nceA`H!mAMU#e?8YzJBleHBe3yWbNQx=r;2#X$Al-_|EB z;C=xD``b(c@94Ow%jNXPvsAtzVg#}t@v2;oV}PbK{a^H)BOZOy>;I=7dtV$GvKEAk z3v#W~$9vP;Ldosa$Njy-Pdv|q4G1*y>Q-NsX54m#2Lj0-iQ8|zL^xG>B9oNC%EH{lK*N$+kpxwbX7nKdQ6Vt$6r4%e_AUL* zmsRvZyK-@vzVu0_q}Nieh55aGWpb%M4;0&?NpH{jt(jXbS+?n04hTARo{$^?T7|=z zf?8XUPD(et6V4&)nCY9&-Y~X7tTgNw=0>a%DK#O081Y1JUm?&q1i?u>pAlDWiZVjT5gQK1b!-10@o(5EBKRKVOKCNcDv~?MP66dRp4E~9VZyO zf}U8(;MQzPG&wbs-yHnWV<9y@%X7Xp-O=(-$@8Svjxgz*J0%qb&?5#N3)~|Hle!rO zIzrH+BO9V5tfW6G?r2#F{#M}u8f2zt6E-NN^7?-Fs^F&dFCEHxCqNzV&i~f&KEBz& zO8WmG;aZ@XD$HAp~E<`U>Gp0hfpW9h3PsOSHci*hH%3;wEUK16}hyl6ltIX z%Jq0pk*%?5{W&mHIv7^i1^>fU(R?(&su8>%$_PO!n#i%nSQ3&%(kG6{(24L%1Q*26D?2c99&@NZ>=bh%n9MD-KJXuGH3{s`HX{v8;ze;EfQ5a2fi}N6Ru9R?5(kMpT#xT*5e_^jb@{ zo&GmjTy*RA9^KDs>i*KT#5C{hcDk8oSp|Ct3%)k0C*C*QUjw(9nl@F)K zhcJ(-G1TrtF5gyyx&T@_0l(mzm1w=0(>nJKPE#jTlaVLEDXEEu-o)&M1IvK_C)sOKLFZvn zVWkp50A^ruA{1Uq4{?13#KK9)#rYO5mS%3=|o)Oiu>laggd zyE7+=2~#q5kEGNh7|B!P3Stz2s49x%Iq0h7b<~m=rVIhJ=d-2=6>0rQII1dX#(5Fq zO2Z!5A&opgAsYQ@fir?o&a*;9% zwX(A0@IO(DVE>6qj2J>ev{Xl#hM@8<3v}v$7Q}zT{A0m%XGG#N@xxl=ZkZ=alBc@j zaMn_11TB>5wyH`!)z6xO4zc;K7!-f;J%Id!yww?T=M1khFImBj7hD+j76NS@ur7qb zA&|hUS~Vk@S{i|#ekz2~m^y!Gp9vM{I8J)14x|jM1y4ztx&tXE7D)UL%A{cbq|BW* zYi6T2oMFJJAQl}Hn1@k{wC({O+PwY&o0-9@n z7Cj~c;K;VT@ozJd>y%O1X>avVL3l7+FZ{GHTwjDP>VF{YLG8xZq7#S~CU8yJCfi+( z3rf>&J0v=KJcs1|s042eR=kW38oZA{Fdfm52D zh5Vi>WkLsh{_?h#A$WnM)ib=%z?rC;78*sCJ8H1v*p_~r1M!|t$hN~MJ}P1y7;Nc} zUB>}p_+QU{kf<@AJ^H06@aJSkY8WrHNFa}&`P|!SV zf*Hq+(b3LzsNgF8Q5pgVR7$P_R0>cK0FQIvjc3@Fgf&N(m)_Pgdc-2fm*h^(=h|cm z4FWF$QsQx6ppPZt6YW0)$CTuLTDl-kc4!-K>k1m2{R!K1VeNzNMYiXlqTxtQS0yyy zAEbPKAP?1(Dg~LWt@tcge(#CvPX5|Jtcdz1%vsEC3)>d*LQNnWThapG2k%Tl+wY@nHPaw64 zefB*WhxqJA75G3@+Gv}Hh@^rSW7Ta2U%LL?EcJ`u-b2i39NC*vJoB{NB zXc^{+HE`-+H<;NGVf?$!tuO(Q)i8lHmfocUq!^*sJ*6R>Tj(JoWZyjYfM0>2x1rRC zTXAnB1eIm{`$)UyVS-JvHOGPTea63c5Cvl^7Q&d#QGENdn$2fO-~E0CB5;eng5E+e zvPAp>MtR>{yS3prPW@rhz7-}23?%q>ApY=_nOkTRoiD)mhVl&&b>RBm6jD#A>vA(K zJui@i3Hs%dyczMuzu{A&CKa!XU3W2hfPHR7y;UrM_f=2$S#oPZ^VC;XC%>NPr7QLkMxMy#Gf(1oh z`(d0gV*f1RdcXM)surUd{uvD(>)AhYZlUoUfTOXGRALO2qX74YjCkCbAn&eW$F+~t z$FYxOHpK)4Y+Lhrwrt*L3`9Iz?;Nx|;vRI5bmMTv3)JJb2oawZ}vDSrD@Zkx@e7TN5-!u*?$vzG-sT zS%}k0xiKAks3j1ywP-|w0|iCL{;u@N3Sp1=$w@I!C_n(R)L#{JuuQ+MkJ$=aT(kGr zgVJ{0h@e1k+*enIUFt!_mLbKb{c&ak^{S9ccy*kb26~68tx$s5=xyHw*N!bt(*G{vWN1Syaq3tr@u&L`g{wgjR1c1_Y|3%;>#aZehfQ`W4vUq6{iUwfI zGUJ~9wifM9gn-ld06>yuIh*HV_ox{5AU+2vhn8ru1(ZT|nux(j>v3|I^Mo zwnT;~q;cMEU*8J?LgN6OiQJ5s?m`he2kIxkhwrg}U9%+otvs52|9=Mi3@GKfm>;kV zS+ogWoKjZ6`WKz`@U1n1n6)3?9#z@c0O!!`W5r9kQ8pjuKFjNx#Z4&8UG}e*#Cz-; zY;h3)XQ}*qywdc%F`hqC5PTP>6d@7+1C-rwu^%g=2Ejf3=9ICuH}NS5Z9#GmT?2GIEfioKy0BsmIH8;*iZ zY~3ddhp9A$nYb+*(_zR2;jO{nh5%)m!gL= zzF59~f7%lS=pFqQMIvYPg7K!#ct7wahAZ~zmZf3(`FiB!c*n^6QSEK}s)jBWe?DO( z<`~q_hpmz@5d2wL3huGTsapAzob*bDnu2s%gzhX|4Rr)C1)zdz4zgDhVer>7%GKJR z>V8hkp2zYGw?w4hLDa-v7!dFk*eozwfI7}g9}}+0mY>lA3A0-!Pn$YHnPpoq%$x#F z(&C%35JyAsM@22&-Qig2LhWli7-!l7N;r?4ZNjcHxH4WB9A4wvjX6dcy;1w0ZPb) zj%uDd4dN0)ls?2X&*jtoK1 z&LdS30GIsXRNWc8Vw!{&|3m>i9Oq{}$nxL}Cx#ISjI9p)JCRmpIWS2-DQHtu=_&%m z=iLu6cUo(x!yu0ioxZCa6)_hDe|z_C6FVwGm=flR57gmQmU6F%PXsbiOzG#cf|D%!=tZ338O}4#q|f?gaIDz=U_ZbP`DNG z8-wp&JCo*Mf;hmg#l{Iyp`-KYaQ(Tyg7;Rr*HZE#M(@7PX|V?k#9=-?-|t~^1aLA# zM++f3RogJxf{3meCe$b@-VM0jXuYP5iqmNbI@rX(tgkE{+5b-}?o5-s`$ z3p{vGQ@tqx_NkvpIn~E|!+~ds2G5>e(q(>&0-&QH3*vo@s1EjXBP#JfSzsn70-ZS$ z{f{$FsL=UXb*eM7TQutHmY%NX$p5)Y2wlq|N)o#CW+YcSWJ46%Yvf#pl)JXj& zt)$A8jn_nzJ9%B;Z-q+Y`JC4?KeK&X^|s6Ts_7nrf7ByYpzaNF)nj(1aK94YBFwz& zNb4a+sni;LP6*1!{PHQ_NTwjJG7EvepWF2q6|$Xc0dXy zBLu^hu__O;^4~9AabZ~wqbwHbp;F0q2R{56WrK2Q{#z=8RihgAHWf^(`_Rx76i{q30}W<`Qg{W z5bysY;IZ3ym_!Q8|1ScRM^HQ%IOC4&*mI)2?38ZqU8YX*R>c)ENB+ru2 zTN=maVmJNXjOZ@<`$-YbM6ERs*K&Co<@No=S{BqhG!OaV2XQ`h>ixxlWe_k-&D2@y zNm80S9Dgz3*&KO^5ScVhV8|DlHG2}6px&#AgotS=Nu@PODgi8mH!8z3CpJE%i?z%H zkxY=G2NPz^HJpc`Fw1Y_VKhv1_w(r^izN9WFg4qd=^L2nm3YSkujpBC2J6T(@&7}p zh%d`s`Kgm^N(bbdS-kB-^3zXJi9KqgRCj~_Qil`pN1X`r|5j%M4^+nu)9v?mj`1Hb zlfxJ1c$d<@f$T7GpzqhCRLw4qrun1-v0|8z? zoNpcPR|f(d1`Jl|pq|K-M@Qam&1%Jo;WVv%;q7s75CPWZJoUfIxzGR)&ebEuhY=cD z3gTCWsF1>}mz!hHbt|M-I#E0f&FoIL*;2Ht)>>bF9xy!cIBF*r(_14BaH3G*VjmL+ zuPd2$alPwzle9eo+f~ z!tSK2cMLu@oXdKdLg1r{$Mnn#rhIY8f@E6kjE>7dhd&mXGINiPdZDBsx?Cg>K7qu} zROHLz28oQn*hKvVg9jPKs?dVPOSVO9CNztDH0L?N$h}p+!P+ zI|h~)Gsw8!zN|L^qYcbTZnifzUmkVi2|ygKTx|&{Uo+nRnR%>kB+DldPjPE?MCoA- zzK_Y|Mh}cw=WtdsvNSLNKI|g>IX8d=_^iz6H?Q=q1|7hHHv!rAg2I%{;o<+%wI7uVk1pj2kA zd3PH^0=Yo2N#vnbhHLj3?|^daZ^C9lo(u$c>w4m@xg>ZsJ3c^`cz&*Z`Heeh8`CcK z_{Birf#WA^0QRJV&S&JNy9nIoAXjHIx&p559e_w~(!N!j@1rWIywFFvX|uc(IM&cF>+3M+p*1{_ zaqnM9I6H!FF6O*ntAa5UD@?uXVNXQFxwP?k*&_8ZdMc+S>ce^It?J5#Gmw-zj1)Wh z9va3bV;)NMIIm3WQ-`}R7bY3KH1|!z6Kx$|IchG=vqXGd?wURv9 z8O&<%yvQd_`So@)(v}|Xd$hj|tW)^jgEPIH92GD`Dh5W%?#Y-GKLJxq%n=P2kI=%< zQgOmzVN^(|UvRC$*WBxUO7nV-xDZ=@FTED4JD~sEUU{l@qznRVLDd5M`O{1IuNG8a zO^uZQ>w=G->$e(Yh6kDR>KQmpP(Cn;V)>H5icQd&B;11JfKS2F4BQMg{qmDdlM}o1 zfs*8mqHLFNmm<1dKHi_h+o2@ zhe(aeSsSEIkb#d%9>KR3lhxU0u(rsmg!ky)V$VE6D~yGwo-G) zNDr`0G=k!-cw7rhpfF5N%*VED7BHMbpD2PUc8#9e&%&7crr*62nIt_(a)=XpgpMGhJOgX1D12~NWEG5c)v z@$g2V)%umbfl`!~w(UnBt^@r5I7^ZDAs^98_hg7MP4qLeL;%`OI?B;z3zOEO8Fial zN_%!CF@jA{_r$bhHLCRZGVvQ&cg1NBs^hl7l24_5v zut*pY+&FboN$fq|?ww?E)|h}wmgwaPThFi!l`%tlF`*<@Z8OE=QRX9SywfXe7F@}E z(K2f@w&w^XI%htJvoNui;eg{z6f9IE(*2E*F*|(?wV9a=P9C$8cb^d`Qt4uqC>E>; zp+b3w!;QQ{Y`MlBt}J+IVrq_BcjMd)9{KkUU}amGi-SlPxA&!^O!^;+Se#Fb36}0$v{)TXXbZW+CP;&E+wq33 z#sdgKb0Djx(Xby7$e&wTI=KrdEmegtilf68#gX-9?WE=qEyjA`z8k$evwSqS z_3BUc<_g%!!iT@k-ch1Tg;!1BF?;aEZCT!>2)5|$su(yN_NUwnq$rP8)$Q9uf-z0k z|2X;M2(vUh(brfAro>5+-dM0k&A}qy+)N`1dL4Vqt1)%JkQf<*yEB zT5|RqoY*}-)sZ_6mtHnpBRa$`*REDd5Kvo1Vw*&@ZKxHA&&Ycat{nUP47chA;VxSS z>#Bu5T`s(3*b%fKp6X-MtVd8QIvo$oeW!pPC4J`i?$uYiS-uD*1pOW6DEs!Lb)@8h zK)h3e_%wRe>=pPvyn?$6_JT;hByrVDvv0jxtJ?-w3xnkWBiS}v+t+dghoVE1+{O?} z(klvnIN6S3N{D_JA1#9z2%WG(R&3S2N$-LD8}lYV^!v)zJj@0RJbJO~6&Q%~J7GLg z&#o0celzSw^I&$OBwYrQI=5Hyv+}R0(k>b7wa_Bl@izibW}(mlFbF3Ss_$w%uZ_|y z5>jOG=%VxmvU87vg4vA1$kH0iXKU`*_o^?CkCT~}mK7Q7kT-g@t5>QEom6{sEyZGV z&*+anl?zf*abUyjkO?l6(N0^EiOD4?@{QYPF1Qzz8CoGFIr59NTo-t%XmX!L7OCsx z%nLVcGc0g%GRy?zKJGjl?TRcZEp!6jy1h{`n$Lt5iBXvg4$W9(WEz^3=4%U=B(vNc zNn^^GFii@eiIi4SFPgSs(bu4jaPv@_C~7{z60&-e3%9}b4<#&RP2Zm+Y4~lxLl@Y7 z!xz#tidpIT_I$9BI@@00w4FGRAOxiP@z(rAYNgCe5W9n3i7o2O%%8d z6#3v-`{XWzM9!xokcZ#MrwZxbl%n3#j>BiHQZ*%!Y4uf({wIU`R zUzFNlNi(qQ`ojJ6>ec4Rq{eKiH@}Fvl}@eTj|Rh+u#loZ;179_{9??sqTNbpb`&h21 z__8%aB0COKFyvN2V&<87{&h`It@qxfQ)a^^`3=w#zq%vv*2lXQ z(qw4ZQ2Kl0i%>_UD~7r-q4OXtN*OmcMo~KAC~52r3_Wll|M{8S0k={?>o2V zU1zmjHt-C;xD6-eZRpth>12$YO|BQtTks!7G8OpK^;&&TiqZ(jXTwGW6CbA1XzOHz zFOtQeYaUFqZWt;g&ePe>W%x#`U-r;(`i7p8f{4ZO@Kb`92wi(Ad}Vp!I5@xH{+sfC zN>W!l?b6Z;Rk8Thon^UVIJUfGtn@*e=i#p_{WFy4q5;|Lm&0`V6iFJnMqEp(MpV?p zGG;l*Xa1~Nrzmx&EJBoyIpI;w)H(=JM3JpG^hTUDV$P0_@ASB38ICUG@V5 zTbj4aIOz=r^K7FJ2_$?T!P<$`t5Fi_cUo-v7v`-lAxD44+x>QRE+_@Bw$Vzle#)vr zTY!p+lpEU$E;+L#pj28ne*NkNieJ#H~?Mm zwy4W`RM?TcSAX8!yu*ZeWrOY&!FR^ehOCY22V1U6f-wmWDq|RJJpeXD1$Ps}M39VW z=O-PTpXptTX(~x-APs3W;2>Y#ZUjYsmyhtIQti*$$Q-K5Uhc9OXmA?tu?DpaPi=qL ztx7Mu=fQkhvq_Wr8&y0X{y(c6u> zvU60fpq%fM5W4F*uS)BPtS!i3E5ARLt5D=A+p3BODR$jUcnnUhlP7TK0mqg}Ojp>$ zTZ?oWGsTCjuj*GtiKX4RK!}7`9Id5Uy|ir=`SS;>yIQ zu;vhwCHUuWU6RViB|a#6fbOA5NshQ@(==XC1R`lzu6Y=Mm0r zYwoyS@j<>p9pA@ZIz6mYEcaWj?l0(n=3+U1ysM?a4?HMf_KF7lZS3moVsEQqYr|ye zVru)>$6j?*J=_2@I>=8SvGIiQ65cTMMI~e^lzg}vsh96i30(KVZenp8E-Fll)6QIKUp>x%Os|?ooH7~2 zqrqsLXfHUbLA{)g~Ck` zyFg}iv9CP?cl+Zkc@P%pVUi#;*2~hm1nzzmHe?&3(G~Ara=aYIqhD)Wu9x}n1&@O4 z465d6spcukVN@#l@xfenQ&ls_n$R~ovW>psS~g&^C!ET*4VP!=f>{d zDHVzr*J%zkGtN_qKH33eS7b!M*3SIF{X?>%<* zH_FBWBr0ufDYXXgcdFa9?~>_JHhj@sVFM2-`x-Y%wTHG-<tjHx9)eDHZl1 zDK!Y$)fMJ1M^@D86#E^Om-AW3RQoI>q|&D@obJCw=8J~OL`;#e5!%xjvC_?AhLr{I z$Z&D^2U3sI)tW=hK*m@^z&T36+ON{n z@qGLBG+o4l@pTKZAqcrcDZ#lJa~0mLrc;6Tim1Lff3~vVHq38tP=JUWEg^3`0;z+n z8n4tX%eepm)$LzuOt;F2v(t0iWRA^z8=?<99l zk_zdCSd`S6GmGSMk~mqOed+SwxMJh75e+z!BFiahP151-=$F5cX~{7vM$wRC^nZF$ z92W53uzIfr?!dL6xIa709D`H(O+UgaQEga$5kxmEe9FzcBVcA!LNO;QrmNcXmt0@mmTPSU3J}&!(cBlCMdgX4BqeE zXg&Sm$n0)l@O>uda#~G!!zsw*v$SvbKYZUm5Sxg?jl#GS%hfod>t8T$z4JZ+SWiVQ zU(CSR%5&>6R3d=cZm{E5%7e}0tEo)+f_3lj(T+dl=ZrBw?@aUFHS2QyhUtN#)bBp7 zc7!@sWWP8S%JBZYgVTB2tZM!WQ-dg56B4bP&6C*oZR+vtYHZJN^aaF_ho?qaIzwCCgD^K7dzAOh^J6`4c+! z2&vUA2S2(#`0eIa5v)Q`y#CDP*7{pd*8P_AERWZTUBPI9{@~mlsuwIXJh-X*|7z>Z zqnfy)Fh1-El7ImbLBz&jL6lWRS_4&UsYpSQicof9Fhryf3Q1UEKz2&PF49n}OCgfj zT1Y{pY-tgcO#}gnf~@a-7#3oBorf zW-9xD@)V)0lq44bs~Fmqe=xANY4TThWJyX)yhoL*B#3YS`Bq#y%|*#CnaIudbnoB| zPB70>KSfmkWj+`ZAnx_^#^l)*OyX7dg#BqF8OqinE5D?d%x(~??b{Cf^zbj4V)cbB zzSqq*m+USmD!(veTY(O_u{9ZSrlxgU%UwDfairaJAC~2&nrruD{u%F%C}p(%t%^dP z4(>#N=FS_(xO*kI)}HF1{0#GxKRD%+-=oBZb$bk4#UH&oR+XlOy>KF;6E$%Bi7lV1 zc{`KK|AO=l_cx9;ts{Y(p{}U<**5f$W@4M4{H|Q8lI6yaNVPAL0Z+v_wcr`+Cug~J8VH;;G?aww129kJ=7}{ zI(n9{BEK_gH%;+7UGB9p|7}0LxS2FLqV|WRK4*+ow5?_@b_c^HT*aXg)|~e^NBF!? zyx4Ly!>~JYX?QO7f@|d6#aZlpT%AhE{eK=LQtcZ`nwh$3792|UNhB{01vfEC;BT#& z$#1yaf$q7SO*m5_&|r0Z6&<`Qu`;i~v^3VU5r@Vt_CE{c;d!{lnWDY$0aPf0lOUlC zKA0Rqs~|X6g|E2;!MRVcTW9CI_gU> zeSX0BjYFfcxniM2opDwLQ8lVX=|fR&U)kUVW27Q|6a_`2-={eLVqM~22heI4h!bpr zI>Y(awXXDNpYa3o-|#du7l-sReR$Lv7kLrvsKlYFa{fM`uG{Ul{S?Kbzy5K5bVuMZ z`1B@Y6?j}pZxXdMV)@wewH6Y@M5Ic{dyO|@5Yj0Xh^3KM?WF;wQ`_Z zx=DD3mIty)?~1^1OM3NexzVCO#^d{GyVzD*kBzoyi<()}w`Rl948QXa6$B~){N&8G zJ>43<{O&B@JUZuG)2rMK`IAG);^cPchit@P^7V7)G7a($ouADuzIU^|mfS0%Hj;01 ztFpVT$iztJ$r02%X~?j_Yw8U=KgNhJjcDsF z@QK3=GTHYRdIvw@5ji1atSmI|%>!Pn#Qwdgt;zST!9mjPchS$sFSf@>hTgr$#@ogZ zkFfvn{`-BF{nE8a%X*Dmbg=hR#UxZBlH{q|wBPL#efnj1WK-Jaac^c)R)<$kwtxQ} zBKaL{!$Nxma-#W2*%bs<>}==acXz%JIC$FuroE}#N%!>|qRGhj&&jTaWRxszbY&$;uC}0}^cpU+g z!I)5j?`dKfCc=9;I)eg;#!e3N;H5k;kF5Sd4gOQ){sa;K#rP|sJye*Ir0#Yeyrc^h zYRL%4z?T2tJ%Ja)S2EF1`P|^3t`L;t6#+m~Mjj8g{4e(p3tR85|M6F5h`=H1TS7Z8 z1Y1`s2OuKy0yy^dom9$kBz)kkDWX8-(87yUzCU_Z z4k^Px3D81>ln_i@CCHQ|pn7Q5SgMzhSM|^wG86&z-%`XJbzL_O1wf6i6!0)%Enq#{ z3uQsQqm;!>T+5Pml28iNYDp>2F0amtjPZi%q4A(pAC ThriftDecayedValue} -import com.twitter.scalding.{TypedPipe, _} -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.{ExplicitLocation, ProcAtla} -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.{Timestamp, TweetId, UserId} -import com.twitter.simclusters_v2.hdfs_sources._ -import com.twitter.simclusters_v2.summingbird.common.{Configs, ThriftDecayedValueMonoid} -import com.twitter.simclusters_v2.thriftscala._ -import com.twitter.timelineservice.thriftscala.{ContextualizedFavoriteEvent, FavoriteEventUnion} -import java.util.TimeZone -import twadoop_config.configuration.log_categories.group.timeline.TimelineServiceFavoritesScalaDataset - -object SimClustersOfflineJobUtil { - - implicit val timeZone: TimeZone = DateOps.UTC - implicit val dateParser: DateParser = DateParser.default - - implicit val modelVersionOrdering: Ordering[PersistedModelVersion] = - Ordering.by(_.value) - - implicit val scoreTypeOrdering: Ordering[PersistedScoreType] = - Ordering.by(_.value) - - implicit val persistedScoresOrdering: Ordering[PersistedScores] = Ordering.by( - _.score.map(_.value).getOrElse(0.0) - ) - - implicit val decayedValueMonoid: DecayedValueMonoid = DecayedValueMonoid(0.0) - - implicit val thriftDecayedValueMonoid: ThriftDecayedValueMonoid = - new ThriftDecayedValueMonoid(Configs.HalfLifeInMs)(decayedValueMonoid) - - implicit val persistedScoresMonoid: PersistedScoresMonoid = - new PersistedScoresMonoid()(thriftDecayedValueMonoid) - - def readInterestedInScalaDataset( - implicit dateRange: DateRange - ): TypedPipe[(Long, ClustersUserIsInterestedIn)] = { - //read SimClusters InterestedIn datasets - DAL - .readMostRecentSnapshot( - SimclustersV2InterestedIn20M145KUpdatedScalaDataset, - dateRange.embiggen(Days(30)) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { - case KeyVal(key, value) => (key, value) - } - } - - def readTimelineFavoriteData( - implicit dateRange: DateRange - ): TypedPipe[(UserId, TweetId, Timestamp)] = { - DAL - .read(TimelineServiceFavoritesScalaDataset, dateRange) // Note: this is a hourly source - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .flatMap { cfe: ContextualizedFavoriteEvent => - cfe.event match { - case FavoriteEventUnion.Favorite(fav) => - Some((fav.userId, fav.tweetId, fav.eventTimeMs)) - case _ => - None - } - - } - } - - class PersistedScoresMonoid( - implicit thriftDecayedValueMonoid: ThriftDecayedValueMonoid) - extends Monoid[PersistedScores] { - - private val optionalThriftDecayedValueMonoid = - new OptionMonoid[ThriftDecayedValue]() - - override val zero: PersistedScores = PersistedScores() - - override def plus(x: PersistedScores, y: PersistedScores): PersistedScores = { - PersistedScores( - optionalThriftDecayedValueMonoid.plus( - x.score, - y.score - ) - ) - } - - def build(value: Double, timeInMs: Double): PersistedScores = { - PersistedScores(Some(thriftDecayedValueMonoid.build(value, timeInMs))) - } - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/BUILD.bazel deleted file mode 100644 index 437e716d4..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/BUILD.bazel +++ /dev/null @@ -1,81 +0,0 @@ -scala_library( - platform = "java8", - tags = ["bazel-only"], - dependencies = [ - "3rdparty/jvm/com/twitter/storehaus:algebra", - "3rdparty/jvm/com/twitter/storehaus:core", - "3rdparty/src/jvm/com/twitter/storehaus:algebra", - "3rdparty/src/jvm/com/twitter/storehaus:core", - "graphstore/common:flock_follows-java", - "snowflake:id", - "src/java/com/twitter/ml/api/constant", - "src/java/com/twitter/sbf/graph", - "src/scala/com/twitter/ml/api:api-base", - "src/scala/com/twitter/pluck/source/core_workflows/user_model:condensed_user_state-scala", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/job", - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - "src/scala/com/twitter/scalding_internal/source", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/simclusters_v2/candidate_source", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/scalding/offline_job", - "src/scala/com/twitter/simclusters_v2/summingbird/common", - "src/scala/com/twitter/timelines/prediction/features/common", - "src/scala/com/twitter/timelines/prediction/features/itl", - "src/scala/com/twitter/timelines/prediction/features/recap", - "src/scala/com/twitter/wtf/scalding/jobs/common:execution_app", - "src/thrift/com/twitter/hermit/candidate:hermit-candidate-scala", - "src/thrift/com/twitter/wtf/scalding/sims:sims-thrift-scala", - "twadoop_config/configuration/log_categories/group/timeline:timeline_service_favorites-scala", - "usersource/snapshot/src/main/scala/com/twitter/usersource/snapshot/flat:usersource_flat-scala", - "usersource/snapshot/src/main/thrift/com/twitter/usersource/snapshot/flat:flat-scala", - ], -) - -hadoop_binary( - name = "tweet_embedding-adhoc", - main = "com.twitter.simclusters_v2.scalding.offline_job.SimClustersTweetEmbeddingAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":adhoc", - ], -) - -hadoop_binary( - name = "tweet_embedding_evaluation_samples-adhoc", - main = "com.twitter.simclusters_v2.scalding.offline_job.TweetSimilarityEvaluationSamplingAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":adhoc", - ], -) - -hadoop_binary( - name = "tweet_embedding_evaluation-adhoc", - main = "com.twitter.simclusters_v2.scalding.offline_job.TweetSimilarityEvaluationAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":adhoc", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..5e3d31f31ddc67179b8aefc0dc93443ddf748ab9 GIT binary patch literal 37375 zcmagEWmufawl<8rdvJGmcL)S`cMIA`aA-WZyF+kycXtTE-2x;K-2Ls$%-(xupL4$N zPjOLI>z1{iuBv{zl;t3yu)x5;;J{cjc(kiji{g{P!NA60z`!s;y?PP=hffv`pN!N! z9W7i8m_6+6nvxZi)f>tGREUe)@0uB>MXOI$U{8bP4b6p z%qoY%Fvn-5-}w@+)eCj|G*jzINS+uNWN8(ULzegyYp#jw6`*vZ!k{-AxReknbk|+hFS2xgU@@T5k>ldB?bw+ zM^Qg>X^7ORc8JBMjB)Vsyg407ko(@`1?#QwNh(-1c(uDrMbbbUr;qsXY|qScF|&YRnW5M&NXt}bAuxZbPkW2*qOrqh9WDjF zGl0xPeK%OgE+g`W0!7q<`i|RDlT?^t6LUz9uHkf6tXf>sh~8cXr8KxK5&atR6Rno3 zFVh?V1|Tip%oR~m)%M-aJ>p)Z`IC&Xzvxk%Bf46;qB$EbZy}1T6Xvyq?BPsId0bl- zPWxkr@<+Xj3+5j|5=v@@9+cNGQ=J%tyjG2ZC9|!2?+=(LDW2t*z1*ELg|^`{&udcLaU;Qq7T$GJ;tD}J-_-bfXEB!t==NZCv_ z1Np@;eu}|*F3$PS(`4DLs>S&~#MRIhRz7QrCeXH1Ad~K6(ftevAP!HYNN7MWYbhoM z%R(>B2MB%6QcEZjO3J(Z*^|;r z(ZGDTbv?IDz+h3`$o%~7I+F{PzsM)^R*qWCm*xpxnp6{D)b>czy1_B=~1tuGiLZ zk3n^@g8~CX`+HqX93B5Ci~5Aa8Y^1o69bgNrwD6UF%`Uoz(uiHi4FYPgshhNaq7#=aV0yY!JOa-PD`^M9;Ib*TWT@qYynNW^}xqL%JVC_>OBm*nmv{tFuOg+1Hh_JgYs;*mQHFR--%o;dXc-tJ{AYJxbR)ov>_ zS$Iloi&7vo3s=M2PANWha7|XENa=l7XC})t3-LL8=ED`i+rrH+l7BuJ05FeGL})ND zEv7#|uiFas=WwQCd6+D}RY zq{>)SYzN4c77GtILi0nZi-_y(DH^>n?KW4`H>SeQL={I@g(7p3xaOl)j0gBxUZlEW1{t%69=6zh~U1+&QC%e2jW zrex^J^Vs7vC=hkB#ZkLP7r

MYj)n38$vA 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 UaVzNOs-gi{;+BVH#?N2>15VrEE&u=k literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingsJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingsJob.scala deleted file mode 100644 index 06c66038c..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/LocaleEntitySimClustersEmbeddingsJob.scala +++ /dev/null @@ -1,437 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding - -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.recos.entities.thriftscala.Entity -import com.twitter.recos.entities.thriftscala.Hashtag -import com.twitter.recos.entities.thriftscala.SemanticCoreEntity -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.common.SimClustersEmbedding -import com.twitter.simclusters_v2.hdfs_sources.presto_hdfs_sources._ -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import com.twitter.simclusters_v2.hdfs_sources.EntityEmbeddingsSources -import com.twitter.simclusters_v2.hdfs_sources.InterestedInSources -import com.twitter.simclusters_v2.scalding.embedding.LocaleEntitySimClustersEmbeddingsJob._ -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil._ -import com.twitter.simclusters_v2.scalding.embedding.common.EntityEmbeddingUtil._ -import com.twitter.simclusters_v2.scalding.embedding.common.SimClustersEmbeddingJob._ -import com.twitter.simclusters_v2.thriftscala.{ - SimClustersEmbedding => ThriftSimClustersEmbedding, - _ -} -import com.twitter.wtf.entity_real_graph.common.EntityUtil -import com.twitter.wtf.entity_real_graph.thriftscala.Edge -import com.twitter.wtf.entity_real_graph.thriftscala.EntityType -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.DataSources -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:entity_per_language_embeddings_job-adhoc - * - * ---------------------- Deploy to atla ---------------------- - * $ scalding remote run \ - --main-class com.twitter.simclusters_v2.scalding.embedding.LocaleEntitySimClustersEmbeddingAdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/embedding:entity_per_language_embeddings_job-adhoc \ - --user recos-platform \ - -- --date 2019-12-17 --model-version 20M_145K_updated --entity-type SemanticCore - */ -object LocaleEntitySimClustersEmbeddingAdhocApp extends AdhocExecutionApp { - - // Import implicits - - import EntityUtil._ - - def writeOutput( - embeddings: TypedPipe[(SimClustersEmbeddingId, (ClusterId, EmbeddingScore))], - topKEmbeddings: TypedPipe[(SimClustersEmbeddingId, Seq[(ClusterId, EmbeddingScore)])], - jobConfig: EntityEmbeddingsJobConfig - ): Execution[Unit] = { - - val toSimClusterEmbeddingExec = topKEmbeddings - .mapValues(SimClustersEmbedding.apply(_).toThrift) - .writeExecution( - AdhocKeyValSources.entityToClustersSource( - LocaleEntitySimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = true, - isReverseIndex = false, - isLogFav = false, - jobConfig.modelVersion, - jobConfig.entityType))) - - val fromSimClusterEmbeddingExec = - toReverseIndexSimClusterEmbedding(embeddings, jobConfig.topK) - .writeExecution( - AdhocKeyValSources.clusterToEntitiesSource( - LocaleEntitySimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = true, - isManhattanKeyVal = true, - isReverseIndex = true, - isLogFav = false, - jobConfig.modelVersion, - jobConfig.entityType))) - - Execution.zip(toSimClusterEmbeddingExec, fromSimClusterEmbeddingExec).unit - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val jobConfig = EntityEmbeddingsJobConfig(args, isAdhoc = true) - - val numReducers = args.getOrElse("m", "2000").toInt - - /* - Can use the ERG daily dataset in the adhoc job for quick prototyping, note that there may be - issues with scaling the job when productionizing on ERG aggregated dataset. - */ - val userEntityMatrix: TypedPipe[(UserId, (Entity, Double))] = - getUserEntityMatrix( - jobConfig, - DataSources.entityRealGraphAggregationDataSetSource(dateRange.embiggen(Days(7))), - Some(ExternalDataSources.uttEntitiesSource()) - ).forceToDisk - - //determine which data source to use based on model version - val simClustersSource = jobConfig.modelVersion match { - case ModelVersion.Model20m145kUpdated => - InterestedInSources.simClustersInterestedInUpdatedSource(dateRange, timeZone) - case modelVersion => - throw new IllegalArgumentException( - s"SimClusters model version not supported ${modelVersion.name}") - } - - val entityPerLanguage = userEntityMatrix.join(ExternalDataSources.userSource).map { - case (userId, ((entity, score), (_, language))) => - ((entity, language), (userId, score)) - } - - val normalizedUserEntityMatrix = - getNormalizedTransposeInputMatrix(entityPerLanguage, numReducers = Some(numReducers)) - - val embeddings = computeEmbeddings[(Entity, String)]( - simClustersSource, - normalizedUserEntityMatrix, - scoreExtractors, - ModelVersion.Model20m145kUpdated, - toSimClustersEmbeddingId(jobConfig.modelVersion), - numReducers = Some(numReducers * 2) - ) - - val topKEmbeddings = - embeddings.group - .sortedReverseTake(jobConfig.topK)(Ordering.by(_._2)) - .withReducers(numReducers) - - writeOutput(embeddings, topKEmbeddings, jobConfig) - } -} - -/** - * $ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:semantic_core_entity_embeddings_per_language_job - * $ capesospy-v2 update \ - --build_locally \ - --start_cron semantic_core_entity_embeddings_per_language_job src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object LocaleEntitySimClustersEmbeddingScheduledApp extends ScheduledExecutionApp { - - // Import implicits - - import EmbeddingUtil._ - import EntityUtil._ - - override val firstTime: RichDate = RichDate("2019-10-22") - - override val batchIncrement: Duration = Days(7) - - private def writeOutput( - embeddings: TypedPipe[(SimClustersEmbeddingId, (ClusterId, EmbeddingScore))], - topKEmbeddings: TypedPipe[(SimClustersEmbeddingId, Seq[(ClusterId, EmbeddingScore)])], - jobConfig: EntityEmbeddingsJobConfig, - clusterEmbeddingsDataset: KeyValDALDataset[ - KeyVal[SimClustersEmbeddingId, ThriftSimClustersEmbedding] - ], - entityEmbeddingsDataset: KeyValDALDataset[KeyVal[SimClustersEmbeddingId, InternalIdEmbedding]] - )( - implicit dateRange: DateRange, - timeZone: TimeZone - ): Execution[Unit] = { - - val thriftSimClustersEmbedding = topKEmbeddings - .mapValues(SimClustersEmbedding.apply(_).toThrift) - - val writeSimClustersEmbeddingKeyValDataset = - thriftSimClustersEmbedding - .map { - case (entityId, topSimClusters) => KeyVal(entityId, topSimClusters) - } - .writeDALVersionedKeyValExecution( - clusterEmbeddingsDataset, - D.Suffix( - LocaleEntitySimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - isReverseIndex = false, - isLogFav = false, - jobConfig.modelVersion, - jobConfig.entityType)) - ) - - val writeSimClustersEmbeddingDataset = thriftSimClustersEmbedding - .map { - case (embeddingId, embedding) => SimClustersEmbeddingWithId(embeddingId, embedding) - } - .writeDALSnapshotExecution( - SemanticCorePerLanguageSimclustersEmbeddingsPrestoScalaDataset, - D.Daily, - D.Suffix( - LocaleEntitySimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - isReverseIndex = false, - isLogFav = false, - jobConfig.modelVersion, - jobConfig.entityType)), - D.EBLzo(), - dateRange.end - ) - - val thriftReversedSimclustersEmbeddings = - toReverseIndexSimClusterEmbedding(embeddings, jobConfig.topK) - - val writeReverseSimClustersEmbeddingKeyValDataset = - thriftReversedSimclustersEmbeddings - .map { - case (embeddingId, internalIdsWithScore) => - KeyVal(embeddingId, internalIdsWithScore) - } - .writeDALVersionedKeyValExecution( - entityEmbeddingsDataset, - D.Suffix( - LocaleEntitySimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - isReverseIndex = true, - isLogFav = false, - jobConfig.modelVersion, - jobConfig.entityType)) - ) - - val writeReverseSimClustersEmbeddingDataset = - thriftReversedSimclustersEmbeddings - .map { - case (embeddingId, embedding) => InternalIdEmbeddingWithId(embeddingId, embedding) - }.writeDALSnapshotExecution( - ReverseIndexSemanticCorePerLanguageSimclustersEmbeddingsPrestoScalaDataset, - D.Daily, - D.Suffix( - LocaleEntitySimClustersEmbeddingsJob.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - isReverseIndex = true, - isLogFav = false, - jobConfig.modelVersion, - jobConfig.entityType)), - D.EBLzo(), - dateRange.end - ) - - Execution - .zip( - writeSimClustersEmbeddingDataset, - writeSimClustersEmbeddingKeyValDataset, - writeReverseSimClustersEmbeddingDataset, - writeReverseSimClustersEmbeddingKeyValDataset - ).unit - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val jobConfig = EntityEmbeddingsJobConfig(args, isAdhoc = false) - - val embeddingsDataset = EntityEmbeddingsSources.getEntityEmbeddingsDataset( - jobConfig.entityType, - ModelVersions.toKnownForModelVersion(jobConfig.modelVersion), - isEmbeddingsPerLocale = true - ) - - val reverseIndexEmbeddingsDataset = - EntityEmbeddingsSources.getReverseIndexedEntityEmbeddingsDataset( - jobConfig.entityType, - ModelVersions.toKnownForModelVersion(jobConfig.modelVersion), - isEmbeddingsPerLocale = true - ) - - val userEntityMatrix: TypedPipe[(UserId, (Entity, Double))] = - getUserEntityMatrix( - jobConfig, - DataSources.entityRealGraphAggregationDataSetSource(dateRange.embiggen(Days(7))), - Some(ExternalDataSources.uttEntitiesSource()) - ).forceToDisk - - //determine which data source to use based on model version - val simClustersSource = jobConfig.modelVersion match { - case ModelVersion.Model20m145kUpdated => - InterestedInSources.simClustersInterestedInUpdatedSource(dateRange, timeZone) - case modelVersion => - throw new IllegalArgumentException( - s"SimClusters model version not supported ${modelVersion.name}") - } - - val entityPerLanguage = userEntityMatrix.join(ExternalDataSources.userSource).map { - case (userId, ((entity, score), (_, language))) => - ((entity, language), (userId, score)) - } - - val normalizedUserEntityMatrix = - getNormalizedTransposeInputMatrix(entityPerLanguage, numReducers = Some(3000)) - - val simClustersEmbedding = jobConfig.modelVersion match { - case ModelVersion.Model20m145kUpdated => - computeEmbeddings( - simClustersSource, - normalizedUserEntityMatrix, - scoreExtractors, - ModelVersion.Model20m145kUpdated, - toSimClustersEmbeddingId(ModelVersion.Model20m145kUpdated), - numReducers = Some(8000) - ) - case modelVersion => - throw new IllegalArgumentException( - s"SimClusters model version not supported ${modelVersion.name}") - } - - val topKEmbeddings = - simClustersEmbedding.group.sortedReverseTake(jobConfig.topK)(Ordering.by(_._2)) - - writeOutput( - simClustersEmbedding, - topKEmbeddings, - jobConfig, - embeddingsDataset, - reverseIndexEmbeddingsDataset) - } -} - -object LocaleEntitySimClustersEmbeddingsJob { - - def getUserEntityMatrix( - jobConfig: EntityEmbeddingsJobConfig, - entityRealGraphSource: TypedPipe[Edge], - semanticCoreEntityIdsToKeep: Option[TypedPipe[Long]], - applyLogTransform: Boolean = false - ): TypedPipe[(UserId, (Entity, Double))] = - jobConfig.entityType match { - case EntityType.SemanticCore => - semanticCoreEntityIdsToKeep match { - case Some(entityIdsToKeep) => - getEntityUserMatrix(entityRealGraphSource, jobConfig.halfLife, EntityType.SemanticCore) - .map { - case (entity, (userId, score)) => - entity match { - case Entity.SemanticCore(SemanticCoreEntity(entityId, _)) => - if (applyLogTransform) { - (entityId, (userId, (entity, Math.log(score + 1)))) - } else { - (entityId, (userId, (entity, score))) - } - case _ => - throw new IllegalArgumentException( - "Job config specified EntityType.SemanticCore, but non-semantic core entity was found.") - } - }.hashJoin(entityIdsToKeep.asKeys).values.map { - case ((userId, (entity, score)), _) => (userId, (entity, score)) - } - case _ => - getEntityUserMatrix(entityRealGraphSource, jobConfig.halfLife, EntityType.SemanticCore) - .map { case (entity, (userId, score)) => (userId, (entity, score)) } - } - case EntityType.Hashtag => - getEntityUserMatrix(entityRealGraphSource, jobConfig.halfLife, EntityType.Hashtag) - .map { case (entity, (userId, score)) => (userId, (entity, score)) } - case _ => - throw new IllegalArgumentException( - s"Argument [--entity-type] must be provided. Supported options [${EntityType.SemanticCore.name}, ${EntityType.Hashtag.name}]") - } - - def toSimClustersEmbeddingId( - modelVersion: ModelVersion - ): ((Entity, String), ScoreType.ScoreType) => SimClustersEmbeddingId = { - case ((Entity.SemanticCore(SemanticCoreEntity(entityId, _)), lang), ScoreType.FavScore) => - SimClustersEmbeddingId( - EmbeddingType.FavBasedSematicCoreEntity, - modelVersion, - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang))) - case ((Entity.SemanticCore(SemanticCoreEntity(entityId, _)), lang), ScoreType.FollowScore) => - SimClustersEmbeddingId( - EmbeddingType.FollowBasedSematicCoreEntity, - modelVersion, - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang))) - case ((Entity.SemanticCore(SemanticCoreEntity(entityId, _)), lang), ScoreType.LogFavScore) => - SimClustersEmbeddingId( - EmbeddingType.LogFavBasedLocaleSemanticCoreEntity, - modelVersion, - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang))) - case ((Entity.Hashtag(Hashtag(hashtag)), _), ScoreType.FavScore) => - SimClustersEmbeddingId( - EmbeddingType.FavBasedHashtagEntity, - modelVersion, - InternalId.Hashtag(hashtag)) - case ((Entity.Hashtag(Hashtag(hashtag)), _), ScoreType.FollowScore) => - SimClustersEmbeddingId( - EmbeddingType.FollowBasedHashtagEntity, - modelVersion, - InternalId.Hashtag(hashtag)) - case (scoreType, entity) => - throw new IllegalArgumentException( - s"(ScoreType, Entity) ($scoreType, ${entity.toString}) not supported") - } - - /** - * Generates the output path for the Entity Embeddings Job. - * - * Example Adhoc: /user/recos-platform/processed/adhoc/simclusters_embeddings/hashtag_per_language/model_20m_145k_updated - * Example Prod: /atla/proc/user/cassowary/processed/simclusters_embeddings/semantic_core_per_language/model_20m_145k_updated - * - */ - def getHdfsPath( - isAdhoc: Boolean, - isManhattanKeyVal: Boolean, - isReverseIndex: Boolean, - isLogFav: Boolean, - modelVersion: ModelVersion, - entityType: EntityType - ): String = { - - val reverseIndex = if (isReverseIndex) "reverse_index/" else "" - - val logFav = if (isLogFav) "log_fav/" else "" - - val entityTypeSuffix = entityType match { - case EntityType.SemanticCore => "semantic_core_per_language" - case EntityType.Hashtag => "hashtag_per_language" - case _ => "unknown_per_language" - } - - val pathSuffix = s"$logFav$reverseIndex$entityTypeSuffix" - - EmbeddingUtil.getHdfsPath(isAdhoc, isManhattanKeyVal, modelVersion, pathSuffix) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/ProducerEmbeddingsFromInterestedIn.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/ProducerEmbeddingsFromInterestedIn.docx new file mode 100644 index 0000000000000000000000000000000000000000..f1f038a7c0a39515c6aab6c5214038cfc0f9ea25 GIT binary patch literal 41769 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 h@Hf6E;~zupPw!Ae85J>t{u KeyVal(userId, clusters) } - .writeDALVersionedKeyValExecution( - producerTopKEmbeddingsDataset, - D.Suffix(producerTopKEmbeddingsPath) - ) - - val keyedBySimCluster = fromSimClusterEmbedding( - producerClusterEmbedding, - topKUsersToKeep, - modelVersion - ).map { - case (clusterId, topProducers) => KeyVal(clusterId, topProducersToThrift(topProducers)) - } - .writeDALVersionedKeyValExecution( - clusterTopKProducersDataset, - D.Suffix(clusterTopKProducersPath) - ) - - Execution.zip(keyedByProducer, keyedBySimCluster).unit - } -} - -/** - * Base class for Fav based producer embeddings. Helps reuse the code for different model versions - */ -trait ProducerEmbeddingsFromInterestedInByFavScoreBase extends ScheduledExecutionApp { - import ProducerEmbeddingsFromInterestedIn._ - import ProducerEmbeddingsFromInterestedInBatchAppUtil._ - - def modelVersion: ModelVersion - - val producerTopKEmbeddingsByFavScorePathPrefix: String = - "/producer_top_k_simcluster_embeddings_by_fav_score_" - - val clusterTopKProducersByFavScorePathPrefix: String = - "/simcluster_embedding_top_k_producers_by_fav_score_" - - val minNumFavers: Int = minNumFaversForProducer - - def producerTopKSimclusterEmbeddingsByFavScoreDataset: KeyValDALDataset[ - KeyVal[Long, TopSimClustersWithScore] - ] - - def simclusterEmbeddingTopKProducersByFavScoreDataset: KeyValDALDataset[ - KeyVal[PersistedFullClusterId, TopProducersWithScore] - ] - - def getInterestedInFn: (DateRange, TimeZone) => TypedPipe[(Long, ClustersUserIsInterestedIn)] - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val producerTopKEmbeddingsByFavScorePathUpdated: String = - rootPath + producerTopKEmbeddingsByFavScorePathPrefix + ModelVersions - .toKnownForModelVersion(modelVersion) - - val clusterTopKProducersByFavScorePathUpdated: String = - rootPath + clusterTopKProducersByFavScorePathPrefix + ModelVersions - .toKnownForModelVersion(modelVersion) - - val producerClusterEmbeddingByFavScore = getProducerClusterEmbedding( - getInterestedInFn(dateRange.embiggen(Days(5)), timeZone), - DataSources.userUserNormalizedGraphSource, - DataSources.userNormsAndCounts, - userToProducerFavScore, - userToClusterFavScore, // Fav score - _.faverCount.exists(_ > minNumFavers), - numReducersForMatrixMultiplication, - modelVersion, - cosineSimilarityThreshold - ).forceToDisk - - writeOutput( - producerClusterEmbeddingByFavScore, - producerTopKSimclusterEmbeddingsByFavScoreDataset, - simclusterEmbeddingTopKProducersByFavScoreDataset, - producerTopKEmbeddingsByFavScorePathUpdated, - clusterTopKProducersByFavScorePathUpdated, - modelVersion - ) - } -} - -/** - * Base class for Follow based producer embeddings. Helps reuse the code for different model versions - */ -trait ProducerEmbeddingsFromInterestedInByFollowScoreBase extends ScheduledExecutionApp { - import ProducerEmbeddingsFromInterestedIn._ - import ProducerEmbeddingsFromInterestedInBatchAppUtil._ - - def modelVersion: ModelVersion - - val producerTopKEmbeddingsByFollowScorePathPrefix: String = - "/producer_top_k_simcluster_embeddings_by_follow_score_" - - val clusterTopKProducersByFollowScorePathPrefix: String = - "/simcluster_embedding_top_k_producers_by_follow_score_" - - def producerTopKSimclusterEmbeddingsByFollowScoreDataset: KeyValDALDataset[ - KeyVal[Long, TopSimClustersWithScore] - ] - - def simclusterEmbeddingTopKProducersByFollowScoreDataset: KeyValDALDataset[ - KeyVal[PersistedFullClusterId, TopProducersWithScore] - ] - - def getInterestedInFn: (DateRange, TimeZone) => TypedPipe[(Long, ClustersUserIsInterestedIn)] - - val minNumFollowers: Int = minNumFollowersForProducer - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val producerTopKEmbeddingsByFollowScorePath: String = - rootPath + producerTopKEmbeddingsByFollowScorePathPrefix + ModelVersions - .toKnownForModelVersion(modelVersion) - - val clusterTopKProducersByFollowScorePath: String = - rootPath + clusterTopKProducersByFollowScorePathPrefix + ModelVersions - .toKnownForModelVersion(modelVersion) - - val producerClusterEmbeddingByFollowScore = getProducerClusterEmbedding( - getInterestedInFn(dateRange.embiggen(Days(5)), timeZone), - DataSources.userUserNormalizedGraphSource, - DataSources.userNormsAndCounts, - userToProducerFollowScore, - userToClusterFollowScore, // Follow score - _.followerCount.exists(_ > minNumFollowers), - numReducersForMatrixMultiplication, - modelVersion, - cosineSimilarityThreshold - ).forceToDisk - - writeOutput( - producerClusterEmbeddingByFollowScore, - producerTopKSimclusterEmbeddingsByFollowScoreDataset, - simclusterEmbeddingTopKProducersByFollowScoreDataset, - producerTopKEmbeddingsByFollowScorePath, - clusterTopKProducersByFollowScorePath, - modelVersion - ) - } -} - -/** - capesospy-v2 update --build_locally --start_cron \ - --start_cron producer_embeddings_from_interested_in_by_fav_score \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object ProducerEmbeddingsFromInterestedInByFavScoreBatchApp - extends ProducerEmbeddingsFromInterestedInByFavScoreBase { - override def modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - - override def getInterestedInFn: ( - DateRange, - TimeZone - ) => TypedPipe[(UserId, ClustersUserIsInterestedIn)] = - InterestedInSources.simClustersInterestedInUpdatedSource - - override val firstTime: RichDate = RichDate("2019-09-10") - - override val batchIncrement: Duration = Days(7) - - override def producerTopKSimclusterEmbeddingsByFavScoreDataset: KeyValDALDataset[ - KeyVal[Long, TopSimClustersWithScore] - ] = - ProducerTopKSimclusterEmbeddingsByFavScoreUpdatedScalaDataset - - override def simclusterEmbeddingTopKProducersByFavScoreDataset: KeyValDALDataset[ - KeyVal[PersistedFullClusterId, TopProducersWithScore] - ] = - SimclusterEmbeddingTopKProducersByFavScoreUpdatedScalaDataset -} - -/** -capesospy-v2 update --build_locally --start_cron \ - --start_cron producer_embeddings_from_interested_in_by_fav_score_2020 \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object ProducerEmbeddingsFromInterestedInByFavScore2020BatchApp - extends ProducerEmbeddingsFromInterestedInByFavScoreBase { - override def modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - - override def getInterestedInFn: ( - DateRange, - TimeZone - ) => TypedPipe[(UserId, ClustersUserIsInterestedIn)] = - InterestedInSources.simClustersInterestedIn2020Source - - override val firstTime: RichDate = RichDate("2021-03-01") - - override val batchIncrement: Duration = Days(7) - - override def producerTopKSimclusterEmbeddingsByFavScoreDataset: KeyValDALDataset[ - KeyVal[Long, TopSimClustersWithScore] - ] = - ProducerTopKSimclusterEmbeddingsByFavScore2020ScalaDataset - - override def simclusterEmbeddingTopKProducersByFavScoreDataset: KeyValDALDataset[ - KeyVal[PersistedFullClusterId, TopProducersWithScore] - ] = - SimclusterEmbeddingTopKProducersByFavScore2020ScalaDataset -} - -/** -capesospy-v2 update --build_locally --start_cron \ - --start_cron producer_embeddings_from_interested_in_by_fav_score_dec11 \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object ProducerEmbeddingsFromInterestedInByFavScoreDec11BatchApp - extends ProducerEmbeddingsFromInterestedInByFavScoreBase { - override def modelVersion: ModelVersion = ModelVersion.Model20m145kDec11 - - override def getInterestedInFn: ( - DateRange, - TimeZone - ) => TypedPipe[(UserId, ClustersUserIsInterestedIn)] = - InterestedInSources.simClustersInterestedInDec11Source - - override val firstTime: RichDate = RichDate("2019-11-18") - - override val batchIncrement: Duration = Days(7) - - override def producerTopKSimclusterEmbeddingsByFavScoreDataset: KeyValDALDataset[ - KeyVal[Long, TopSimClustersWithScore] - ] = - ProducerTopKSimclusterEmbeddingsByFavScoreScalaDataset - - override def simclusterEmbeddingTopKProducersByFavScoreDataset: KeyValDALDataset[ - KeyVal[PersistedFullClusterId, TopProducersWithScore] - ] = - SimclusterEmbeddingTopKProducersByFavScoreScalaDataset -} - -/** -capesospy-v2 update --build_locally --start_cron \ - --start_cron producer_embeddings_from_interested_in_by_follow_score \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object ProducerEmbeddingsFromInterestedInByFollowScoreBatchApp - extends ProducerEmbeddingsFromInterestedInByFollowScoreBase { - override def modelVersion: ModelVersion = ModelVersion.Model20m145kUpdated - - override def getInterestedInFn: ( - DateRange, - TimeZone - ) => TypedPipe[(UserId, ClustersUserIsInterestedIn)] = - InterestedInSources.simClustersInterestedInUpdatedSource - - override val firstTime: RichDate = RichDate("2019-09-10") - - override val batchIncrement: Duration = Days(7) - - override def producerTopKSimclusterEmbeddingsByFollowScoreDataset: KeyValDALDataset[ - KeyVal[Long, TopSimClustersWithScore] - ] = - ProducerTopKSimclusterEmbeddingsByFollowScoreUpdatedScalaDataset - - override def simclusterEmbeddingTopKProducersByFollowScoreDataset: KeyValDALDataset[ - KeyVal[PersistedFullClusterId, TopProducersWithScore] - ] = - SimclusterEmbeddingTopKProducersByFollowScoreUpdatedScalaDataset -} - -/** -capesospy-v2 update --build_locally --start_cron \ - --start_cron producer_embeddings_from_interested_in_by_follow_score_2020 \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object ProducerEmbeddingsFromInterestedInByFollowScore2020BatchApp - extends ProducerEmbeddingsFromInterestedInByFollowScoreBase { - override def modelVersion: ModelVersion = ModelVersion.Model20m145k2020 - - override def getInterestedInFn: ( - DateRange, - TimeZone - ) => TypedPipe[(UserId, ClustersUserIsInterestedIn)] = - InterestedInSources.simClustersInterestedIn2020Source - - override val firstTime: RichDate = RichDate("2021-03-01") - - override val batchIncrement: Duration = Days(7) - - override def producerTopKSimclusterEmbeddingsByFollowScoreDataset: KeyValDALDataset[ - KeyVal[Long, TopSimClustersWithScore] - ] = - ProducerTopKSimclusterEmbeddingsByFollowScore2020ScalaDataset - - override def simclusterEmbeddingTopKProducersByFollowScoreDataset: KeyValDALDataset[ - KeyVal[PersistedFullClusterId, TopProducersWithScore] - ] = - SimclusterEmbeddingTopKProducersByFollowScore2020ScalaDataset -} - -/** -capesospy-v2 update --build_locally --start_cron \ - --start_cron producer_embeddings_from_interested_in_by_follow_score_dec11 \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object ProducerEmbeddingsFromInterestedInByFollowScoreDec11BatchApp - extends ProducerEmbeddingsFromInterestedInByFollowScoreBase { - override def modelVersion: ModelVersion = ModelVersion.Model20m145kDec11 - - override def getInterestedInFn: ( - DateRange, - TimeZone - ) => TypedPipe[(UserId, ClustersUserIsInterestedIn)] = - InterestedInSources.simClustersInterestedInDec11Source - - override val firstTime: RichDate = RichDate("2019-11-18") - - override val batchIncrement: Duration = Days(7) - - override def producerTopKSimclusterEmbeddingsByFollowScoreDataset: KeyValDALDataset[ - KeyVal[Long, TopSimClustersWithScore] - ] = - ProducerTopKSimclusterEmbeddingsByFollowScoreScalaDataset - - override def simclusterEmbeddingTopKProducersByFollowScoreDataset: KeyValDALDataset[ - KeyVal[PersistedFullClusterId, TopProducersWithScore] - ] = - SimclusterEmbeddingTopKProducersByFollowScoreScalaDataset -} - -/** - * Adhoc job to calculate producer's simcluster embeddings, which essentially assigns interestedIn - * SimClusters to each producer, regardless of whether the producer has a knownFor assignment. - * -$ ./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:producer_embeddings_from_interested_in-adhoc - - $ scalding remote run \ - --main-class com.twitter.simclusters_v2.scalding.embedding.ProducerEmbeddingsFromInterestedInAdhocApp \ - --target src/scala/com/twitter/simclusters_v2/scalding/embedding:producer_embeddings_from_interested_in-adhoc \ - --user cassowary --cluster bluebird-qus1 \ - --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - --principal service_acoount@TWITTER.BIZ \ - -- --date 2020-08-25 --model_version 20M_145K_updated \ - --outputDir /gcs/user/cassowary/adhoc/producerEmbeddings/ - - */ -object ProducerEmbeddingsFromInterestedInAdhocApp extends AdhocExecutionApp { - - import ProducerEmbeddingsFromInterestedIn._ - - private val numReducersForMatrixMultiplication = 12000 - - /** - * Calculate the embedding and writes the results keyed by producers and clusters separately into - * individual locations - */ - private def runAdhocByScore( - interestedInClusters: TypedPipe[(Long, ClustersUserIsInterestedIn)], - userUserNormalGraph: TypedPipe[UserAndNeighbors], - userNormsAndCounts: TypedPipe[NormsAndCounts], - keyedByProducerSinkPath: String, - keyedByClusterSinkPath: String, - userToProducerScoringFn: NeighborWithWeights => Double, - userToClusterScoringFn: UserToInterestedInClusterScores => Double, - userFilter: NormsAndCounts => Boolean, - modelVersion: ModelVersion - )( - implicit uniqueID: UniqueID - ): Execution[Unit] = { - - val producerClusterEmbedding = getProducerClusterEmbedding( - interestedInClusters, - userUserNormalGraph, - userNormsAndCounts, - userToProducerScoringFn, - userToClusterScoringFn, - userFilter, - numReducersForMatrixMultiplication, - modelVersion, - cosineSimilarityThreshold - ).forceToDisk - - val keyByProducerExec = - toSimClusterEmbedding(producerClusterEmbedding, topKClustersToKeep, modelVersion) - .writeExecution( - AdhocKeyValSources.topProducerToClusterEmbeddingsSource(keyedByProducerSinkPath)) - - val keyByClusterExec = - fromSimClusterEmbedding(producerClusterEmbedding, topKUsersToKeep, modelVersion) - .map { case (clusterId, topProducers) => (clusterId, topProducersToThrift(topProducers)) } - .writeExecution( - AdhocKeyValSources.topClusterEmbeddingsToProducerSource(keyedByClusterSinkPath)) - - Execution.zip(keyByProducerExec, keyByClusterExec).unit - } - - // Calculate the embeddings using follow scores - private def runFollowScore( - interestedInClusters: TypedPipe[(Long, ClustersUserIsInterestedIn)], - userUserNormalGraph: TypedPipe[UserAndNeighbors], - userNormsAndCounts: TypedPipe[NormsAndCounts], - modelVersion: ModelVersion, - outputDir: String - )( - implicit uniqueID: UniqueID - ): Execution[Unit] = { - val keyByClusterSinkPath = outputDir + "keyedByCluster/byFollowScore_" + modelVersion - val keyByProducerSinkPath = outputDir + "keyedByProducer/byFollowScore_" + modelVersion - - runAdhocByScore( - interestedInClusters, - userUserNormalGraph, - userNormsAndCounts, - keyedByProducerSinkPath = keyByProducerSinkPath, - keyedByClusterSinkPath = keyByClusterSinkPath, - userToProducerScoringFn = userToProducerFollowScore, - userToClusterScoringFn = userToClusterFollowScore, - _.followerCount.exists(_ > minNumFollowersForProducer), - modelVersion - ) - } - - // Calculate the embeddings using fav scores - private def runFavScore( - interestedInClusters: TypedPipe[(Long, ClustersUserIsInterestedIn)], - userUserNormalGraph: TypedPipe[UserAndNeighbors], - userNormsAndCounts: TypedPipe[NormsAndCounts], - modelVersion: ModelVersion, - outputDir: String - )( - implicit uniqueID: UniqueID - ): Execution[Unit] = { - val keyByClusterSinkPath = outputDir + "keyedByCluster/byFavScore_" + modelVersion - val keyByProducerSinkPath = outputDir + "keyedByProducer/byFavScore_" + modelVersion - - runAdhocByScore( - interestedInClusters, - userUserNormalGraph, - userNormsAndCounts, - keyedByProducerSinkPath = keyByProducerSinkPath, - keyedByClusterSinkPath = keyByClusterSinkPath, - userToProducerScoringFn = userToProducerFavScore, - userToClusterScoringFn = userToClusterFavScore, - _.faverCount.exists(_ > minNumFaversForProducer), - modelVersion - ) - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val outputDir = args("outputDir") - - val modelVersion = - ModelVersions.toModelVersion(args.required("model_version")) - - val interestedInClusters = modelVersion match { - case ModelVersion.Model20m145k2020 => - InterestedInSources.simClustersInterestedIn2020Source(dateRange, timeZone).forceToDisk - case ModelVersion.Model20m145kUpdated => - InterestedInSources.simClustersInterestedInUpdatedSource(dateRange, timeZone).forceToDisk - case _ => - InterestedInSources.simClustersInterestedInDec11Source(dateRange, timeZone).forceToDisk - } - - Execution - .zip( - runFavScore( - interestedInClusters, - DataSources.userUserNormalizedGraphSource, - DataSources.userNormsAndCounts, - modelVersion, - outputDir - ), - runFollowScore( - interestedInClusters, - DataSources.userUserNormalizedGraphSource, - DataSources.userNormsAndCounts, - modelVersion, - outputDir - ) - ).unit - } -} - -/** - * Computes the producer's interestedIn cluster embedding. i.e. If a tweet author (producer) is not - * associated with a KnownFor cluster, do a cross-product between - * [user, interestedIn] and [user, producer] to find the similarity matrix [interestedIn, producer]. - */ -object ProducerEmbeddingsFromInterestedIn { - val minNumFollowersForProducer: Int = 100 - val minNumFaversForProducer: Int = 100 - val topKUsersToKeep: Int = 300 - val topKClustersToKeep: Int = 60 - val cosineSimilarityThreshold: Double = 0.01 - - type ClusterId = Int - - def topProducersToThrift(producersWithScore: Seq[(UserId, Double)]): TopProducersWithScore = { - val thrift = producersWithScore.map { producer => - TopProducerWithScore(producer._1, producer._2) - } - TopProducersWithScore(thrift) - } - - def userToProducerFavScore(neighbor: NeighborWithWeights): Double = { - neighbor.favScoreHalfLife100DaysNormalizedByNeighborFaversL2.getOrElse(0.0) - } - - def userToProducerFollowScore(neighbor: NeighborWithWeights): Double = { - neighbor.followScoreNormalizedByNeighborFollowersL2.getOrElse(0.0) - } - - def userToClusterFavScore(clusterScore: UserToInterestedInClusterScores): Double = { - clusterScore.favScoreClusterNormalizedOnly.getOrElse(0.0) - } - - def userToClusterFollowScore(clusterScore: UserToInterestedInClusterScores): Double = { - clusterScore.followScoreClusterNormalizedOnly.getOrElse(0.0) - } - - def getUserSimClustersMatrix( - simClustersSource: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - extractScore: UserToInterestedInClusterScores => Double, - modelVersion: ModelVersion - ): TypedPipe[(UserId, Seq[(Int, Double)])] = { - simClustersSource.collect { - case (userId, clusters) - if ModelVersions.toModelVersion(clusters.knownForModelVersion).equals(modelVersion) => - userId -> clusters.clusterIdToScores - .map { - case (clusterId, clusterScores) => - (clusterId, extractScore(clusterScores)) - }.toSeq.filter(_._2 > 0) - } - } - - /** - * Given a weighted user-producer engagement history matrix, as well as a - * weighted user-interestedInCluster matrix, do the matrix multiplication to yield a weighted - * producer-cluster embedding matrix - */ - def getProducerClusterEmbedding( - interestedInClusters: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - userProducerEngagementGraph: TypedPipe[UserAndNeighbors], - userNormsAndCounts: TypedPipe[NormsAndCounts], - userToProducerScoringFn: NeighborWithWeights => Double, - userToClusterScoringFn: UserToInterestedInClusterScores => Double, - userFilter: NormsAndCounts => Boolean, // function to decide whether to compute embeddings for the user or not - numReducersForMatrixMultiplication: Int, - modelVersion: ModelVersion, - threshold: Double - )( - implicit uid: UniqueID - ): TypedPipe[((ClusterId, UserId), Double)] = { - val userSimClustersMatrix = getUserSimClustersMatrix( - interestedInClusters, - userToClusterScoringFn, - modelVersion - ) - - val userUserNormalizedGraph = getFilteredUserUserNormalizedGraph( - userProducerEngagementGraph, - userNormsAndCounts, - userToProducerScoringFn, - userFilter - ) - - SimClustersEmbeddingJob - .legacyMultiplyMatrices( - userUserNormalizedGraph, - userSimClustersMatrix, - numReducersForMatrixMultiplication - ) - .filter(_._2 >= threshold) - } - - def getFilteredUserUserNormalizedGraph( - userProducerEngagementGraph: TypedPipe[UserAndNeighbors], - userNormsAndCounts: TypedPipe[NormsAndCounts], - userToProducerScoringFn: NeighborWithWeights => Double, - userFilter: NormsAndCounts => Boolean - )( - implicit uid: UniqueID - ): TypedPipe[(UserId, (UserId, Double))] = { - val numUsersCount = Stat("num_users_with_engagements") - val userUserFilteredEdgeCount = Stat("num_filtered_user_user_engagements") - val validUsersCount = Stat("num_valid_users") - - val validUsers = userNormsAndCounts.collect { - case user if userFilter(user) => - validUsersCount.inc() - user.userId - } - - userProducerEngagementGraph - .flatMap { userAndNeighbors => - numUsersCount.inc() - userAndNeighbors.neighbors - .map { neighbor => - userUserFilteredEdgeCount.inc() - (neighbor.neighborId, (userAndNeighbors.userId, userToProducerScoringFn(neighbor))) - } - .filter(_._2._2 > 0.0) - } - .join(validUsers.asKeys) - .map { - case (neighborId, ((userId, score), _)) => - (userId, (neighborId, score)) - } - } - - def fromSimClusterEmbedding[T, E]( - resultMatrix: TypedPipe[((ClusterId, T), Double)], - topK: Int, - modelVersion: ModelVersion - ): TypedPipe[(PersistedFullClusterId, Seq[(T, Double)])] = { - resultMatrix - .map { - case ((clusterId, inputId), score) => (clusterId, (inputId, score)) - } - .group - .sortedReverseTake(topK)(Ordering.by(_._2)) - .map { - case (clusterId, topEntitiesWithScore) => - PersistedFullClusterId(modelVersion, clusterId) -> topEntitiesWithScore - } - } - - def toSimClusterEmbedding[T]( - resultMatrix: TypedPipe[((ClusterId, T), Double)], - topK: Int, - modelVersion: ModelVersion - )( - implicit ordering: Ordering[T] - ): TypedPipe[(T, TopSimClustersWithScore)] = { - resultMatrix - .map { - case ((clusterId, inputId), score) => (inputId, (clusterId, score)) - } - .group - //.withReducers(3000) // uncomment for producer-simclusters job - .sortedReverseTake(topK)(Ordering.by(_._2)) - .map { - case (inputId, topSimClustersWithScore) => - val topSimClusters = topSimClustersWithScore.map { - case (clusterId, score) => SimClusterWithScore(clusterId, score) - } - inputId -> TopSimClustersWithScore(topSimClusters, modelVersion) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/SimilarUsersBySimClustersEmbedding.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/SimilarUsersBySimClustersEmbedding.docx new file mode 100644 index 0000000000000000000000000000000000000000..b5cafe72d893e99b5785dd62b71ca6efdca469e2 GIT binary patch literal 39211 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 clusterScorePair.key -> clusterScorePair.value } - - private val topProducersForClusterEmbeddingByFavScore = DAL - .readMostRecentSnapshotNoOlderThan( - SimclusterEmbeddingTopKProducersByFavScoreUpdatedScalaDataset, - Days(14) - ) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .map { producerScoresPair => producerScoresPair.key -> producerScoresPair.value } - - private val topClusterEmbeddingsByFollowScore = DAL - .readMostRecentSnapshotNoOlderThan( - ProducerTopKSimclusterEmbeddingsByFollowScoreUpdatedScalaDataset, - Days(14) - ) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .map { clusterScorePair => clusterScorePair.key -> clusterScorePair.value } - - private val topProducersForClusterEmbeddingByFollowScore = DAL - .readMostRecentSnapshotNoOlderThan( - SimclusterEmbeddingTopKProducersByFollowScoreUpdatedScalaDataset, - Days(14) - ) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .map { producerScoresPair => producerScoresPair.key -> producerScoresPair.value } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - Execution - .zip( - SimilarUsersBySimClustersEmbedding - .getTopUsersRelatedToUser( - topClusterEmbeddingsByFavScore, - topProducersForClusterEmbeddingByFavScore - ) - .map { case (key, value) => KeyVal(key, value) } - .writeDALVersionedKeyValExecution( - SimilarUsersByFavBasedProducerEmbeddingScalaDataset, - D.Suffix(outputByFav) - ), - SimilarUsersBySimClustersEmbedding - .getTopUsersRelatedToUser( - topClusterEmbeddingsByFollowScore, - topProducersForClusterEmbeddingByFollowScore - ) - .map { case (key, value) => KeyVal(key, value) } - .writeDALVersionedKeyValExecution( - SimilarUsersByFollowBasedProducerEmbeddingScalaDataset, - D.Suffix(outputByFollow) - ) - ).unit - } -} - -/** - * Adhoc job to calculate producer's simcluster embeddings, which essentially assigns interestedIn - * SimClusters to each producer, regardless of whether the producer has a knownFor assignment. - * -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/embedding:similar_users_by_simclusters_embeddings-adhoc && \ - oscar hdfs --user recos-platform --screen --tee similar_users_by_simclusters_embeddings --bundle similar_users_by_simclusters_embeddings-adhoc \ - --tool com.twitter.simclusters_v2.scalding.embedding.SimilarUsersBySimClustersEmbeddingAdhocApp \ - -- --date 2019-07-10T00 2019-07-10T23 - */ -object SimilarUsersBySimClustersEmbeddingAdhocApp extends AdhocExecutionApp { - - private val outputByFav = - "/user/recos-platform/adhoc/similar_users_by_simclusters_embeddings/by_fav" - private val outputByFollow = - "/user/recos-platform/adhoc/similar_users_by_simclusters_embeddings/by_follow" - - private val topClusterEmbeddingsByFavScore = DAL - .readMostRecentSnapshotNoOlderThan( - ProducerTopKSimclusterEmbeddingsByFavScoreUpdatedScalaDataset, - Days(14) - ) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .map { clusterScorePair => clusterScorePair.key -> clusterScorePair.value } - - private val topProducersForClusterEmbeddingByFavScore = DAL - .readMostRecentSnapshotNoOlderThan( - SimclusterEmbeddingTopKProducersByFavScoreUpdatedScalaDataset, - Days(14) - ) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .map { producerScoresPair => producerScoresPair.key -> producerScoresPair.value } - - private val topClusterEmbeddingsByFollowScore = DAL - .readMostRecentSnapshotNoOlderThan( - ProducerTopKSimclusterEmbeddingsByFollowScoreUpdatedScalaDataset, - Days(14) - ) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .map { clusterScorePair => clusterScorePair.key -> clusterScorePair.value } - - private val topProducersForClusterEmbeddingByFollowScore = DAL - .readMostRecentSnapshotNoOlderThan( - SimclusterEmbeddingTopKProducersByFollowScoreUpdatedScalaDataset, - Days(14) - ) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .map { producerScoresPair => producerScoresPair.key -> producerScoresPair.value } - - implicit val candidatesInj: CompactScalaCodec[Candidates] = CompactScalaCodec(Candidates) - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - Execution - .zip( - SimilarUsersBySimClustersEmbedding - .getTopUsersRelatedToUser( - topClusterEmbeddingsByFavScore, - topProducersForClusterEmbeddingByFavScore).writeExecution( - VersionedKeyValSource[Long, Candidates](outputByFav)) - .getCounters - .flatMap { - case (_, counters) => - counters.toMap.toSeq - .sortBy(e => (e._1.group, e._1.counter)) - .foreach { - case (statKey, value) => - println(s"${statKey.group}\t${statKey.counter}\t$value") - } - Execution.unit - }, - SimilarUsersBySimClustersEmbedding - .getTopUsersRelatedToUser( - topClusterEmbeddingsByFollowScore, - topProducersForClusterEmbeddingByFollowScore).writeExecution( - VersionedKeyValSource[Long, Candidates](outputByFollow)) - .getCounters - .flatMap { - case (_, counters) => - counters.toMap.toSeq - .sortBy(e => (e._1.group, e._1.counter)) - .foreach { - case (statKey, value) => - println(s"${statKey.group}\t${statKey.counter}\t$value") - } - Execution.unit - } - ).unit - } -} - -object SimilarUsersBySimClustersEmbedding { - private val maxUsersPerCluster = 300 - private val maxClustersPerUser = 50 - private val topK = 100 - - def getTopUsersRelatedToUser( - clusterScores: TypedPipe[(Long, TopSimClustersWithScore)], - producerScores: TypedPipe[(PersistedFullClusterId, TopProducersWithScore)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(Long, Candidates)] = { - - val numUserUserPair = Stat("num_user_producer_pairs") - val numUserClusterPair = Stat("num_user_cluster_pairs") - val numClusterProducerPair = Stat("num_cluster_producer_pairs") - - val clusterToUserMap = - clusterScores.flatMap { - case (userId, topSimClustersWithScore) => - val targetUserClusters = - topSimClustersWithScore.topClusters.sortBy(-_.score).take(maxClustersPerUser) - - targetUserClusters.map { simClusterWithScore => - numUserClusterPair.inc() - simClusterWithScore.clusterId -> userId - } - } - - val clusterToProducerMap = producerScores.flatMap { - case (persistedFullClusterId, topProducersWithScore) => - numClusterProducerPair.inc() - val targetProducers = topProducersWithScore.topProducers - .sortBy(-_.score) - .take(maxUsersPerCluster) - targetProducers.map { topProducerWithScore => - persistedFullClusterId.clusterId -> topProducerWithScore.userId - } - } - - implicit val intInject: Int => Array[Byte] = Injection.int2BigEndian.toFunction - - val userToProducerMap = - clusterToUserMap.group - .sketch(2000) - .join(clusterToProducerMap.group) - .values - .distinct - .collect({ - //filter self-pair - case userPair if userPair._1 != userPair._2 => - numUserUserPair.inc() - userPair - }) - - val userEmbeddingsAllGrouped = clusterScores.map { - case (userId, topSimClustersWithScore) => - val targetUserClusters = - topSimClustersWithScore.topClusters.sortBy(-_.score).take(maxClustersPerUser) - val embedding = targetUserClusters.map { simClustersWithScore => - simClustersWithScore.clusterId -> simClustersWithScore.score - }.toMap - val embeddingNormalized = CosineSimilarityUtil.normalize(embedding) - userId -> embeddingNormalized - }.forceToDisk - - val userToProducerMapJoinWithEmbedding = - userToProducerMap - .join(userEmbeddingsAllGrouped) - .map { - case (user, (producer, userEmbedding)) => - producer -> (user, userEmbedding) - } - .join(userEmbeddingsAllGrouped) - .map { - case (producer, ((user, userEmbedding), producerEmbedding)) => - user -> (producer, CosineSimilarityUtil.dotProduct(userEmbedding, producerEmbedding)) - } - .group - .sortWithTake(topK)((a, b) => a._2 > b._2) - .map { - case (userId, candidatesList) => - val candidatesSeq = candidatesList - .map { - case (candidateId, score) => Candidate(candidateId, score) - } - userId -> Candidates(userId, candidatesSeq) - } - - userToProducerMapJoinWithEmbedding - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AbuseSimclusterFeaturesScaldingJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AbuseSimclusterFeaturesScaldingJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..79e548fc04ba75b8d62fb8f0cb79c1833ad3acb0 GIT binary patch literal 38730 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 A&j0`b literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AbuseSimclusterFeaturesScaldingJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AbuseSimclusterFeaturesScaldingJob.scala deleted file mode 100644 index a1d11e2a2..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AbuseSimclusterFeaturesScaldingJob.scala +++ /dev/null @@ -1,178 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.abuse - -import com.twitter.scalding._ -import com.twitter.scalding.source.TypedText -import com.twitter.scalding_internal.dalv2.DALWrite.{D, _} -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.hdfs_sources.SearchAbuseSimclusterFeaturesManhattanScalaDataset -import com.twitter.simclusters_v2.scalding.common.matrix.SparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.abuse.AbuseSimclusterFeaturesScaldingJob.buildKeyValDataSet -import com.twitter.simclusters_v2.scalding.embedding.abuse.AdhocAbuseSimClusterFeaturesScaldingJob.{ - abuseInteractionSearchGraph, - buildSearchAbuseScores, - impressionInteractionSearchGraph -} -import com.twitter.simclusters_v2.scalding.embedding.abuse.DataSources.getUserInterestedInSparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.{ClusterId, UserId} -import com.twitter.simclusters_v2.thriftscala.{ - ModelVersion, - SimClustersEmbedding, - SingleSideUserScores -} -import com.twitter.wtf.scalding.jobs.common.{AdhocExecutionApp, ScheduledExecutionApp} -import java.util.TimeZone - -object AbuseSimclusterFeaturesScaldingJob { - - val HealthyConsumerKey = "healthyConsumer" - val UnhealthyConsumerKey = "unhealthyConsumer" - val HealthyAuthorKey = "healthyAuthor" - val UnhealthyAuthorKey = "unhealthyAuthor" - - private[this] val EmptySimCluster = SimClustersEmbedding(List()) - - def buildKeyValDataSet( - normalizedSimClusterMatrix: SparseMatrix[UserId, ClusterId, Double], - unhealthyGraph: SparseMatrix[UserId, UserId, Double], - healthyGraph: SparseMatrix[UserId, UserId, Double] - ): TypedPipe[KeyVal[Long, SingleSideUserScores]] = { - - val searchAbuseScores = - buildSearchAbuseScores( - normalizedSimClusterMatrix, - unhealthyGraph = unhealthyGraph, - healthyGraph = healthyGraph - ) - - val pairedScores = SingleSideInteractionTransformation.pairScores( - Map( - HealthyConsumerKey -> searchAbuseScores.healthyConsumerClusterScores, - UnhealthyConsumerKey -> searchAbuseScores.unhealthyConsumerClusterScores, - HealthyAuthorKey -> searchAbuseScores.healthyAuthorClusterScores, - UnhealthyAuthorKey -> searchAbuseScores.unhealthyAuthorClusterScores - ) - ) - - pairedScores - .map { pairedScore => - val userPairInteractionFeatures = PairedInteractionFeatures( - healthyInteractionSimClusterEmbedding = - pairedScore.interactionScores.getOrElse(HealthyConsumerKey, EmptySimCluster), - unhealthyInteractionSimClusterEmbedding = - pairedScore.interactionScores.getOrElse(UnhealthyConsumerKey, EmptySimCluster) - ) - - val authorPairInteractionFeatures = PairedInteractionFeatures( - healthyInteractionSimClusterEmbedding = - pairedScore.interactionScores.getOrElse(HealthyAuthorKey, EmptySimCluster), - unhealthyInteractionSimClusterEmbedding = - pairedScore.interactionScores.getOrElse(UnhealthyAuthorKey, EmptySimCluster) - ) - - val value = SingleSideUserScores( - pairedScore.userId, - consumerHealthyScore = userPairInteractionFeatures.healthySum, - consumerUnhealthyScore = userPairInteractionFeatures.unhealthySum, - authorUnhealthyScore = authorPairInteractionFeatures.unhealthySum, - authorHealthyScore = authorPairInteractionFeatures.healthySum - ) - - KeyVal(pairedScore.userId, value) - } - } -} - -/** - * This job creates single-side features used to predict the abuse reports in search. The features - * are put into manhattan and availabe in feature store. We expect that search will be able to use - * these features directly. They may be useful for other models as well. - */ -object SearchAbuseSimclusterFeaturesScaldingJob extends ScheduledExecutionApp { - override def firstTime: RichDate = RichDate("2021-02-01") - - override def batchIncrement: Duration = - Days(7) - - private val OutputPath: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = true, - modelVersion = ModelVersion.Model20m145kUpdated, - pathSuffix = "search_abuse_simcluster_features" - ) - - def buildDataset( - )( - implicit dateRange: DateRange, - ): Execution[TypedPipe[KeyVal[Long, SingleSideUserScores]]] = { - Execution.getMode.map { implicit mode => - val normalizedSimClusterMatrix = getUserInterestedInSparseMatrix.rowL2Normalize - val abuseSearchGraph = abuseInteractionSearchGraph()(dateRange, mode) - val impressionSearchGraph = impressionInteractionSearchGraph()(dateRange, mode) - - buildKeyValDataSet(normalizedSimClusterMatrix, abuseSearchGraph, impressionSearchGraph) - } - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - // Extend the date range to a total of 19 days. Search keeps 21 days of data. - val dateRangeSearchData = dateRange.prepend(Days(12)) - buildDataset()(dateRangeSearchData).flatMap { dataset => - dataset.writeDALVersionedKeyValExecution( - dataset = SearchAbuseSimclusterFeaturesManhattanScalaDataset, - pathLayout = D.Suffix(OutputPath) - ) - } - } -} - -/** - * You can check the logic of this job by running this query. - * - * scalding remote run \ - * --target src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse:abuse-prod \ - * --main-class com.twitter.simclusters_v2.scalding.embedding.abuse.AdhocSearchAbuseSimclusterFeaturesScaldingJob \ - * --hadoop-properties "mapreduce.job.split.metainfo.maxsize=-1" \ - * --cluster bluebird-qus1 --submitter hadoopnest-bluebird-1.qus1.twitter.com \ - * -- --date 2021-02-01 2021-02-02 \ - * --outputPath AdhocSearchAbuseSimclusterFeaturesScaldingJob-test1 - */ -object AdhocSearchAbuseSimclusterFeaturesScaldingJob extends AdhocExecutionApp { - def toTsv( - datasetExecution: Execution[TypedPipe[KeyVal[Long, SingleSideUserScores]]], - outputPath: String - ): Execution[Unit] = { - datasetExecution.flatMap { dataset => - dataset - .map { keyVal => - ( - keyVal.key, - keyVal.value.consumerHealthyScore, - keyVal.value.consumerUnhealthyScore, - keyVal.value.authorHealthyScore, - keyVal.value.authorUnhealthyScore - ) - } - .writeExecution(TypedText.tsv(outputPath)) - } - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - toTsv( - SearchAbuseSimclusterFeaturesScaldingJob.buildDataset()(dateRange), - args("outputPath") - ) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AdhocAbuseSimClusterFeaturesScaldingJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AdhocAbuseSimClusterFeaturesScaldingJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..e72155329433a4fc151787288c73510eda53721a GIT binary patch literal 39164 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 NkPYA-F_}OA{SV@)PTT+h literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AdhocAbuseSimClusterFeaturesScaldingJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AdhocAbuseSimClusterFeaturesScaldingJob.scala deleted file mode 100644 index 245825b40..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/AdhocAbuseSimClusterFeaturesScaldingJob.scala +++ /dev/null @@ -1,217 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.abuse - -import com.twitter.ml.api.Feature -import com.twitter.ml.api.util.SRichDataRecord -import com.twitter.scalding.Args -import com.twitter.scalding.DateRange -import com.twitter.scalding.Execution -import com.twitter.scalding.UniqueID -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.dataset.DAL.DALSourceBuilderExtension -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossDC -import com.twitter.search.common.features.ExternalTweetFeature -import com.twitter.search.common.features.SearchContextFeature -import com.twitter.search.tweet_ranking.scalding.datasets.TweetEngagementRawTrainingDataDailyJavaDataset -import com.twitter.simclusters_v2.common.ClusterId -import com.twitter.simclusters_v2.hdfs_sources.AdhocAbuseSimclusterFeaturesScalaDataset -import com.twitter.simclusters_v2.scalding.common.matrix.SparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.abuse.DataSources.NumBlocksP95 -import com.twitter.simclusters_v2.scalding.embedding.abuse.DataSources.getFlockBlocksSparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.abuse.DataSources.getUserInterestedInSparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.UserId -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.CassowaryJob -import java.util.TimeZone - -object AdhocAbuseSimClusterFeatureKeys { - val AbuseAuthorSearchKey = "abuseAuthorSearch" - val AbuseUserSearchKey = "abuseUserSearch" - val ImpressionUserSearchKey = "impressionUserSearch" - val ImpressionAuthorSearchKey = "impressionAuthorSearch" - val FlockBlocksAuthorKey = "blocksAuthorFlockDataset" - val FlockBlocksUserKey = "blocksUserFlockDataset" - val FavScoresAuthorKey = "favsAuthorFromFavGraph" - val FavScoresUserKey = "favsUserFromFavGraph" -} - -/** - * Adhoc job that is still in development. The job builds features that are meant to be useful for - * search. - * - * Features are built from existing SimCluster representations and the interaction graphs. - * - * Example command: - * scalding remote run \ - * --target src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse:abuse-adhoc \ - * --main-class com.twitter.simclusters_v2.scalding.embedding.abuse.AdhocAbuseSimClusterFeaturesScaldingJob \ - * --submitter hadoopnest1.atla.twitter.com --user cassowary \ - * --hadoop-properties "mapreduce.job.user.classpath.first=true" -- \ - * --hdfs --date 2020/11/24 2020/12/14 --partitionName second_run --dalEnvironment Prod - */ -object AdhocAbuseSimClusterFeaturesScaldingJob extends AdhocExecutionApp with CassowaryJob { - override def jobName: String = "AdhocAbuseScaldingJob" - - import AdhocAbuseSimClusterFeatureKeys._ - - val tweetAuthorFeature = new Feature.Discrete(ExternalTweetFeature.TWEET_AUTHOR_ID.getName) - val searcherIdFeature = new Feature.Discrete(SearchContextFeature.SEARCHER_ID.getName) - val isReportedFeature = new Feature.Binary(ExternalTweetFeature.IS_REPORTED.getName) - val HalfLifeInDaysForFavScore = 100 - - private val outputPathThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = ModelVersion.Model20m145kUpdated, - pathSuffix = "abuse_simcluster_features" - ) - - def searchDataRecords( - )( - implicit dateRange: DateRange, - mode: Mode - ) = { - DAL - .read(TweetEngagementRawTrainingDataDailyJavaDataset) - .withRemoteReadPolicy(AllowCrossDC) - .toDataSetPipe - .records - } - - def abuseInteractionSearchGraph( - )( - implicit dateRange: DateRange, - mode: Mode - ): SparseMatrix[UserId, UserId, Double] = { - val abuseMatrixEntries = searchDataRecords() - .flatMap { dataRecord => - val sDataRecord = SRichDataRecord(dataRecord) - val authorIdOption = sDataRecord.getFeatureValueOpt(tweetAuthorFeature) - val userIdOption = sDataRecord.getFeatureValueOpt(searcherIdFeature) - val isReportedOption = sDataRecord.getFeatureValueOpt(isReportedFeature) - - for { - isReported <- isReportedOption if isReported - authorId <- authorIdOption if authorId != 0 - userId <- userIdOption if userId != 0 - } yield { - (userId: UserId, authorId: UserId, 1.0) - } - } - SparseMatrix.apply[UserId, UserId, Double](abuseMatrixEntries) - } - - def impressionInteractionSearchGraph( - )( - implicit dateRange: DateRange, - mode: Mode - ): SparseMatrix[UserId, UserId, Double] = { - val impressionMatrixEntries = searchDataRecords - .flatMap { dataRecord => - val sDataRecord = SRichDataRecord(dataRecord) - val authorIdOption = sDataRecord.getFeatureValueOpt(tweetAuthorFeature) - val userIdOption = sDataRecord.getFeatureValueOpt(searcherIdFeature) - - for { - authorId <- authorIdOption if authorId != 0 - userId <- userIdOption if userId != 0 - } yield { - (userId: UserId, authorId: UserId, 1.0) - } - } - SparseMatrix.apply[UserId, UserId, Double](impressionMatrixEntries) - } - - case class SingleSideScores( - unhealthyConsumerClusterScores: TypedPipe[(UserId, SimClustersEmbedding)], - unhealthyAuthorClusterScores: TypedPipe[(UserId, SimClustersEmbedding)], - healthyConsumerClusterScores: TypedPipe[(UserId, SimClustersEmbedding)], - healthyAuthorClusterScores: TypedPipe[(UserId, SimClustersEmbedding)]) - - def buildSearchAbuseScores( - normalizedSimClusterMatrix: SparseMatrix[UserId, ClusterId, Double], - unhealthyGraph: SparseMatrix[UserId, UserId, Double], - healthyGraph: SparseMatrix[UserId, UserId, Double] - ): SingleSideScores = { - SingleSideScores( - unhealthyConsumerClusterScores = SingleSideInteractionTransformation - .clusterScoresFromGraphs(normalizedSimClusterMatrix, unhealthyGraph), - unhealthyAuthorClusterScores = SingleSideInteractionTransformation - .clusterScoresFromGraphs(normalizedSimClusterMatrix, unhealthyGraph.transpose), - healthyConsumerClusterScores = SingleSideInteractionTransformation - .clusterScoresFromGraphs(normalizedSimClusterMatrix, healthyGraph), - healthyAuthorClusterScores = SingleSideInteractionTransformation - .clusterScoresFromGraphs(normalizedSimClusterMatrix, healthyGraph.transpose) - ) - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - Execution.getMode.flatMap { implicit mode => - val normalizedSimClusterMatrix = getUserInterestedInSparseMatrix.rowL2Normalize - - val abuseSearchGraph = abuseInteractionSearchGraph() - val impressionSearchGraph = impressionInteractionSearchGraph() - - val searchAbuseScores = buildSearchAbuseScores( - normalizedSimClusterMatrix, - unhealthyGraph = abuseSearchGraph, - healthyGraph = impressionSearchGraph) - - // Step 2a: Read FlockBlocks for unhealthy interactions and user-user-fav for healthy interactions - val flockBlocksSparseGraph = - getFlockBlocksSparseMatrix(NumBlocksP95, dateRange.prepend(Years(1))) - - val favSparseGraph = SparseMatrix.apply[UserId, UserId, Double]( - ExternalDataSources.getFavEdges(HalfLifeInDaysForFavScore)) - - val blocksAbuseScores = buildSearchAbuseScores( - normalizedSimClusterMatrix, - unhealthyGraph = flockBlocksSparseGraph, - healthyGraph = favSparseGraph - ) - - // Step 3. Combine all scores from different sources for users - val pairedScores = SingleSideInteractionTransformation.pairScores( - Map( - // User cluster scores built from the search abuse reports graph - AbuseUserSearchKey -> searchAbuseScores.unhealthyConsumerClusterScores, - // Author cluster scores built from the search abuse reports graph - AbuseAuthorSearchKey -> searchAbuseScores.unhealthyAuthorClusterScores, - // User cluster scores built from the search impression graph - ImpressionUserSearchKey -> searchAbuseScores.healthyConsumerClusterScores, - // Author cluster scores built from the search impression graph - ImpressionAuthorSearchKey -> searchAbuseScores.healthyAuthorClusterScores, - // User cluster scores built from flock blocks graph - FlockBlocksUserKey -> blocksAbuseScores.unhealthyConsumerClusterScores, - // Author cluster scores built from the flock blocks graph - FlockBlocksAuthorKey -> blocksAbuseScores.unhealthyAuthorClusterScores, - // User cluster scores built from the user-user fav graph - FavScoresUserKey -> blocksAbuseScores.healthyConsumerClusterScores, - // Author cluster scores built from the user-user fav graph - FavScoresAuthorKey -> blocksAbuseScores.healthyAuthorClusterScores - ) - ) - - pairedScores.writeDALSnapshotExecution( - AdhocAbuseSimclusterFeaturesScalaDataset, - D.Daily, - D.Suffix(outputPathThrift), - D.Parquet, - dateRange.`end`, - partitions = Set(D.Partition("partition", args("partitionName"), D.PartitionType.String)) - ) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/BUILD b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/BUILD deleted file mode 100644 index 0f162e417..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/BUILD +++ /dev/null @@ -1,74 +0,0 @@ -scala_library( - sources = [ - "*.scala", - ], - compiler_option_sets = ["fatal_warnings"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "3rdparty/jvm/com/twitter/algebird:core", - "graphstore/common:flock_blocks-java", - "src/java/com/twitter/search/common/features", - "src/scala/com/twitter/ml/api:api-base", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/dalv2/dataset", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/search/tweet_ranking/scalding/datasets:tweet_engagement_raw_training_data_daily-java", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:adhoc_abuse_simcluster_features-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:adhoc_cross_simcluster_block_interaction_features-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:adhoc_cross_simcluster_fav_interaction_features-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:search_abuse_simcluster_features_manhattan-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:user_user_fav_graph-scala", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/scalding/common/matrix", - "src/scala/com/twitter/simclusters_v2/scalding/embedding", - "src/scala/com/twitter/wtf/entity_real_graph/common", - "src/scala/com/twitter/wtf/entity_real_graph/scalding/common", - "src/scala/com/twitter/wtf/scalding/jobs/common:cassowary_job", - "src/scala/com/twitter/wtf/scalding/jobs/common:execution_app", - "src/scala/com/twitter/wtf/scalding/jobs/common:sources", - "src/scala/com/twitter/wtf/scalding/jobs/common:stats_util", - ], -) - -hadoop_binary( - name = "abuse-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.abuse.AdhocAbuseScaldingJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":abuse"], -) - -hadoop_binary( - name = "abuse-prod", - main = "com.twitter.simclusters_v2.scalding.embedding.abuse.SearchAbuseSimclusterFeaturesScaldingJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [":abuse"], -) - -hadoop_binary( - name = "cross_simcluster-adhoc", - main = "com.twitter.simclusters_v2.scalding.embedding.abuse.CrossSimClusterFeaturesScaldingJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":abuse", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..6c1968b61aed1eaa7a8e12c8652fab4512eba8eb GIT binary patch literal 37298 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 uLYT6y85$}m9WQkK=Mn?)%T@Ip=-9RA0TT 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/CrossSimClusterFeaturesScaldingJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/CrossSimClusterFeaturesScaldingJob.scala deleted file mode 100644 index f2ee98bd4..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/CrossSimClusterFeaturesScaldingJob.scala +++ /dev/null @@ -1,149 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.abuse - -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding.Args -import com.twitter.scalding.DateRange -import com.twitter.scalding.Execution -import com.twitter.scalding.UniqueID -import com.twitter.scalding.Years -import com.twitter.simclusters_v2.scalding.common.matrix.SparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.abuse.DataSources.NumBlocksP95 -import com.twitter.simclusters_v2.scalding.embedding.abuse.DataSources.getFlockBlocksSparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.abuse.DataSources.getUserInterestedInTruncatedKMatrix -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.ClusterId -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.UserId -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import com.twitter.simclusters_v2.thriftscala.AdhocCrossSimClusterInteractionScores -import com.twitter.simclusters_v2.thriftscala.ClustersScore -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.CassowaryJob -import com.twitter.simclusters_v2.hdfs_sources.AdhocCrossSimclusterBlockInteractionFeaturesScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.AdhocCrossSimclusterFavInteractionFeaturesScalaDataset -import java.util.TimeZone - -/* -To run: -scalding remote run \ ---user cassowary \ ---submitter hadoopnest1.atla.twitter.com \ ---target src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse:cross_simcluster-adhoc \ ---main-class com.twitter.simclusters_v2.scalding.embedding.abuse.CrossSimClusterFeaturesScaldingJob \ ---submitter-memory 128192.megabyte --hadoop-properties "mapreduce.map.memory.mb=8192 mapreduce.map.java.opts='-Xmx7618M' mapreduce.reduce.memory.mb=8192 mapreduce.reduce.java.opts='-Xmx7618M'" \ --- \ ---date 2021-02-07 \ ---dalEnvironment Prod - */ - -object CrossSimClusterFeaturesUtil { - - /** - * To generate the interaction score for 2 simclusters c1 and c2 for all cluster combinations (I): - * a) Get C - user interestedIn matrix, User * Cluster - * b) Get INT - positive or negative interaction matrix, User * User - * c) Compute C^T*INT - * d) Finally, return C^T*INT*C - */ - def getCrossClusterScores( - userClusterMatrix: SparseMatrix[UserId, ClusterId, Double], - userInteractionMatrix: SparseMatrix[UserId, UserId, Double] - ): SparseMatrix[ClusterId, ClusterId, Double] = { - // intermediate = C^T*INT - val intermediateResult = userClusterMatrix.transpose.multiplySparseMatrix(userInteractionMatrix) - // return intermediate*C - intermediateResult.multiplySparseMatrix(userClusterMatrix) - } -} - -object CrossSimClusterFeaturesScaldingJob extends AdhocExecutionApp with CassowaryJob { - override def jobName: String = "AdhocAbuseCrossSimClusterFeaturesScaldingJob" - - private val outputPathBlocksThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = ModelVersion.Model20m145kUpdated, - pathSuffix = "abuse_cross_simcluster_block_features" - ) - - private val outputPathFavThrift: String = EmbeddingUtil.getHdfsPath( - isAdhoc = false, - isManhattanKeyVal = false, - modelVersion = ModelVersion.Model20m145kUpdated, - pathSuffix = "abuse_cross_simcluster_fav_features" - ) - - private val HalfLifeInDaysForFavScore = 100 - - // Adhoc jobs which use all user interestedIn simclusters (default=50) was failing - // Hence truncating the number of clusters - private val MaxNumClustersPerUser = 20 - - import CrossSimClusterFeaturesUtil._ - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val normalizedUserInterestedInMatrix: SparseMatrix[UserId, ClusterId, Double] = - getUserInterestedInTruncatedKMatrix(MaxNumClustersPerUser).rowL2Normalize - - //the below code is to get cross simcluster features from flockblocks - negative user-user interactions. - val flockBlocksMatrix: SparseMatrix[UserId, UserId, Double] = - getFlockBlocksSparseMatrix(NumBlocksP95, dateRange.prepend(Years(1))) - - val crossClusterBlockScores: SparseMatrix[ClusterId, ClusterId, Double] = - getCrossClusterScores(normalizedUserInterestedInMatrix, flockBlocksMatrix) - - val blockScores: TypedPipe[AdhocCrossSimClusterInteractionScores] = - crossClusterBlockScores.rowAsKeys - .mapValues(List(_)).sumByKey.toTypedPipe.map { - case (givingClusterId, receivingClustersWithScores) => - AdhocCrossSimClusterInteractionScores( - clusterId = givingClusterId, - clusterScores = receivingClustersWithScores.map { - case (cluster, score) => ClustersScore(cluster, score) - }) - } - - // get cross simcluster features from fav graph - positive user-user interactions - val favGraphMatrix: SparseMatrix[UserId, UserId, Double] = - SparseMatrix.apply[UserId, UserId, Double]( - ExternalDataSources.getFavEdges(HalfLifeInDaysForFavScore)) - - val crossClusterFavScores: SparseMatrix[ClusterId, ClusterId, Double] = - getCrossClusterScores(normalizedUserInterestedInMatrix, favGraphMatrix) - - val favScores: TypedPipe[AdhocCrossSimClusterInteractionScores] = - crossClusterFavScores.rowAsKeys - .mapValues(List(_)).sumByKey.toTypedPipe.map { - case (givingClusterId, receivingClustersWithScores) => - AdhocCrossSimClusterInteractionScores( - clusterId = givingClusterId, - clusterScores = receivingClustersWithScores.map { - case (cluster, score) => ClustersScore(cluster, score) - }) - } - // write both block and fav interaction matrices to hdfs in thrift format - Execution - .zip( - blockScores.writeDALSnapshotExecution( - AdhocCrossSimclusterBlockInteractionFeaturesScalaDataset, - D.Daily, - D.Suffix(outputPathBlocksThrift), - D.Parquet, - dateRange.`end`), - favScores.writeDALSnapshotExecution( - AdhocCrossSimclusterFavInteractionFeaturesScalaDataset, - D.Daily, - D.Suffix(outputPathFavThrift), - D.Parquet, - dateRange.`end`) - ).unit - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/DataSources.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/DataSources.docx new file mode 100644 index 0000000000000000000000000000000000000000..8de1e18fb41756d950c682196e6e310ca5027962 GIT binary patch literal 38050 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/DataSources.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/DataSources.scala deleted file mode 100644 index 20c16abbf..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/DataSources.scala +++ /dev/null @@ -1,101 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.abuse - -import com.twitter.data.proto.Flock -import com.twitter.scalding.{DateOps, DateRange, Days, RichDate, UniqueID} -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.simclusters_v2.hdfs_sources.InterestedInSources -import com.twitter.simclusters_v2.scalding.common.matrix.SparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.{ClusterId, UserId} -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import graphstore.common.FlockBlocksJavaDataset -import java.util.TimeZone - -object DataSources { - - private val ValidEdgeStateId = 0 - val NumBlocksP95 = 49 - - /** - * Helper function to return Sparse Matrix of user's interestedIn clusters and fav scores - * @param dateRange - * @return - */ - def getUserInterestedInSparseMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone - ): SparseMatrix[UserId, ClusterId, Double] = { - val simClusters = ExternalDataSources.simClustersInterestInSource - - val simClusterMatrixEntries = simClusters - .flatMap { keyVal => - keyVal.value.clusterIdToScores.flatMap { - case (clusterId, score) => - score.favScore.map { favScore => - (keyVal.key, clusterId, favScore) - } - } - } - - SparseMatrix.apply[UserId, ClusterId, Double](simClusterMatrixEntries) - } - - def getUserInterestedInTruncatedKMatrix( - topK: Int - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseMatrix[UserId, ClusterId, Double] = { - SparseMatrix( - InterestedInSources - .simClustersInterestedInUpdatedSource(dateRange, timeZone) - .flatMap { - case (userId, clustersUserIsInterestedIn) => - val sortedAndTruncatedList = clustersUserIsInterestedIn.clusterIdToScores - .mapValues(_.favScore.getOrElse(0.0)).filter(_._2 > 0.0).toList.sortBy(-_._2).take( - topK) - sortedAndTruncatedList.map { - case (clusterId, score) => - (userId, clusterId, score) - } - } - ) - } - - /** - * Helper function to return SparseMatrix of user block interactions from the FlockBlocks - * dataset. All users with greater than numBlocks are filtered out - * @param dateRange - * @return - */ - def getFlockBlocksSparseMatrix( - maxNumBlocks: Int, - rangeForData: DateRange - )( - implicit dateRange: DateRange - ): SparseMatrix[UserId, UserId, Double] = { - implicit val tz: java.util.TimeZone = DateOps.UTC - val userGivingBlocks = SparseMatrix.apply[UserId, UserId, Double]( - DAL - .readMostRecentSnapshotNoOlderThan(FlockBlocksJavaDataset, Days(30)) - .toTypedPipe - .flatMap { data: Flock.Edge => - // Consider edges that are valid and have been updated in the past 1 year - if (data.getStateId == ValidEdgeStateId && - rangeForData.contains(RichDate(data.getUpdatedAt * 1000L))) { - Some((data.getSourceId, data.getDestinationId, 1.0)) - } else { - None - } - }) - // Find all users who give less than numBlocksP95 blocks. - // This is to remove those who might be responsible for automatically blocking users - // on the twitter platform. - val usersWithLegitBlocks = userGivingBlocks.rowL1Norms.collect { - case (userId, l1Norm) if l1Norm <= maxNumBlocks => - userId - } - // retain only those users who give legit blocks (i.e those users who give less than numBlocks95) - userGivingBlocks.filterRows(usersWithLegitBlocks) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/PairedinteractionFeatures.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/PairedinteractionFeatures.docx new file mode 100644 index 0000000000000000000000000000000000000000..8991704ff1f0bee843a85cfb9b3958fee4ca56f9 GIT binary patch literal 37905 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 IIBWgvADK_r)c^nh literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/PairedinteractionFeatures.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/PairedinteractionFeatures.scala deleted file mode 100644 index 645519d59..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/PairedinteractionFeatures.scala +++ /dev/null @@ -1,122 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.abuse - -import com.twitter.simclusters_v2.common.ClusterId -import com.twitter.simclusters_v2.thriftscala.{SimClusterWithScore, SimClustersEmbedding} -import com.twitter.util.Try - -object ClusterPair { - def apply( - clusterId: ClusterId, - healthyScore: Double, - unhealthyScore: Double - ): Option[ClusterPair] = { - if (healthyScore + unhealthyScore == 0.0) { - None - } else { - Some(new ClusterPair(clusterId, healthyScore, unhealthyScore)) - } - } -} - -case class ClusterPair private ( - clusterId: ClusterId, - healthyScore: Double, - unhealthyScore: Double) { - - def totalScores: Double = healthyScore + unhealthyScore - - def healthRatio: Double = unhealthyScore / (unhealthyScore + healthyScore) -} - -object PairedInteractionFeatures { - def smoothedHealthRatio( - unhealthySum: Double, - healthySum: Double, - smoothingFactor: Double, - prior: Double - ): Double = - (unhealthySum + smoothingFactor * prior) / (unhealthySum + healthySum + smoothingFactor) -} - -/** - * Class used to derive features for abuse models. We pair a healthy embedding with an unhealthy - * embedding. All the public methods on this class are derived features of these embeddings. - * - * @param healthyInteractionSimClusterEmbedding SimCluster embedding of healthy interactions (for - * instance favs or impressions) - * @param unhealthyInteractionSimClusterEmbedding SimCluster embedding of unhealthy interactions - * (for instance blocks or abuse reports) - */ -case class PairedInteractionFeatures( - healthyInteractionSimClusterEmbedding: SimClustersEmbedding, - unhealthyInteractionSimClusterEmbedding: SimClustersEmbedding) { - - private[this] val scorePairs: Seq[ClusterPair] = { - val clusterToScoreMap = healthyInteractionSimClusterEmbedding.embedding.map { - simClusterWithScore => - simClusterWithScore.clusterId -> simClusterWithScore.score - }.toMap - - unhealthyInteractionSimClusterEmbedding.embedding.flatMap { simClusterWithScore => - val clusterId = simClusterWithScore.clusterId - val postiveScoreOption = clusterToScoreMap.get(clusterId) - postiveScoreOption.flatMap { postiveScore => - ClusterPair(clusterId, postiveScore, simClusterWithScore.score) - } - } - } - - /** - * Get the pair of clusters with the most total interactions. - */ - val highestScoreClusterPair: Option[ClusterPair] = - Try(scorePairs.maxBy(_.totalScores)).toOption - - /** - * Get the pair of clusters with the highest unhealthy to healthy ratio. - */ - val highestHealthRatioClusterPair: Option[ClusterPair] = - Try(scorePairs.maxBy(_.healthRatio)).toOption - - /** - * Get the pair of clusters with the lowest unhealthy to healthy ratio. - */ - val lowestHealthRatioClusterPair: Option[ClusterPair] = - Try(scorePairs.minBy(_.healthRatio)).toOption - - /** - * Get an embedding whose values are the ratio of unhealthy to healthy for that simcluster. - */ - val healthRatioEmbedding: SimClustersEmbedding = { - val scores = scorePairs.map { pair => - SimClusterWithScore(pair.clusterId, pair.healthRatio) - } - SimClustersEmbedding(scores) - } - - /** - * Sum of the healthy scores for all the simclusters - */ - val healthySum: Double = healthyInteractionSimClusterEmbedding.embedding.map(_.score).sum - - /** - * Sum of the unhealthy scores for all the simclusters - */ - val unhealthySum: Double = unhealthyInteractionSimClusterEmbedding.embedding.map(_.score).sum - - /** - * ratio of unhealthy to healthy for all simclusters - */ - val healthRatio: Double = unhealthySum / (unhealthySum + healthySum) - - /** - * Ratio of unhealthy to healthy for all simclusters that is smoothed toward the prior with when - * we have fewer observations. - * - * @param smoothingFactor The higher this value the more interactions we need to move the returned - * ratio - * @param prior The unhealthy to healthy for all interactions. - */ - def smoothedHealthRatio(smoothingFactor: Double, prior: Double): Double = - PairedInteractionFeatures.smoothedHealthRatio(unhealthySum, healthySum, smoothingFactor, prior) -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/SingleSideInteractionTransformation.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/SingleSideInteractionTransformation.docx new file mode 100644 index 0000000000000000000000000000000000000000..11c4df067ba4b7b8b8be25c1a9c2d3d49e641ae2 GIT binary patch literal 38664 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/SingleSideInteractionTransformation.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/SingleSideInteractionTransformation.scala deleted file mode 100644 index 95577139f..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/abuse/SingleSideInteractionTransformation.scala +++ /dev/null @@ -1,154 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.abuse - -import com.google.common.annotations.VisibleForTesting -import com.twitter.scalding._ -import com.twitter.simclusters_v2.scalding.common.matrix.SparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.ClusterId -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.UserId -import com.twitter.simclusters_v2.thriftscala.AdhocSingleSideClusterScores -import com.twitter.simclusters_v2.thriftscala.SimClusterWithScore -import com.twitter.simclusters_v2.thriftscala.SimClustersEmbedding - -/** - * Logic for building a SimCluster represenation of interaction signals. The purpose of this job is - * to model negative behavior (like abuse and blocks). - * - * This is a "SingleSide", because we are only considering one side of the interaction graph to - * build these features. So for instance we would keep track of which simclusters are most likely to - * get reported for abuse regardless of who reported it. Another job will be responsible for - * building the simcluster to simcluster interaction matrix as described in the doc. - */ -object SingleSideInteractionTransformation { - - /** - * Compute a score for every SimCluster. The SimCluster score is a count of the number of - * interactions for each SimCluster. For a user that has many SimClusters, we distribute each of - * their interactions across all of these SimClusters. - * - * @param normalizedUserSimClusters Sparse matrix of User-SimCluster scores. Users are rows and - * SimClusters are columns. This should already by L2normalized. - * It is important that we normalize so that each interaction - * only adds 1 to the counts. - * @param interactionGraph Graph of interactions. Rows are the users, columns are not used. - * All values in this graph are assumed to be positive; they are the number of - * interactions. - * - * @return SingleSideClusterFeatures for each SimCluster that has user with an interaction. - */ - def computeClusterFeatures( - normalizedUserSimClusters: SparseMatrix[UserId, ClusterId, Double], - interactionGraph: SparseMatrix[UserId, _, Double] - ): TypedPipe[SimClusterWithScore] = { - - val numReportsForUserEntries = interactionGraph.rowL1Norms.map { - // turn into a vector where we use 1 as the column key for every entry. - case (user, count) => (user, 1, count) - } - - val numReportsForUser = SparseMatrix[UserId, Int, Double](numReportsForUserEntries) - - normalizedUserSimClusters.transpose - .multiplySparseMatrix(numReportsForUser) - .toTypedPipe - .map { - case (clusterId, _, clusterScore: Double) => - SimClusterWithScore(clusterId, clusterScore) - } - } - - /** - * Given that we have the score for each SimCluster and the user's SimClusters, create a - * representation of the user so that the new SimCluster scores are an estimate of the - * interactions for this user. - * - * @param normalizedUserSimClusters sparse matrix of User-SimCluster scores. Users are rows and - * SimClusters are columns. This should already be L2 normalized. - * @param simClusterFeatures For each SimCluster, a score associated with this interaction type. - * - * @return SingleSideAbuseFeatures for each user the SimClusters and scores for this - */ - @VisibleForTesting - private[abuse] def computeUserFeaturesFromClusters( - normalizedUserSimClusters: SparseMatrix[UserId, ClusterId, Double], - simClusterFeatures: TypedPipe[SimClusterWithScore] - ): TypedPipe[(UserId, SimClustersEmbedding)] = { - - normalizedUserSimClusters.toTypedPipe - .map { - case (userId, clusterId, score) => - (clusterId, (userId, score)) - } - .group - // There are at most 140k SimClusters. They should fit in memory - .hashJoin(simClusterFeatures.groupBy(_.clusterId)) - .map { - case (_, ((userId, score), singleSideClusterFeatures)) => - ( - userId, - List( - SimClusterWithScore( - singleSideClusterFeatures.clusterId, - singleSideClusterFeatures.score * score)) - ) - } - .sumByKey - .mapValues(SimClustersEmbedding.apply) - } - - /** - * Combines all the different SimClustersEmbedding for a user into one - * AdhocSingleSideClusterScores. - * - * @param interactionMap The key is an identifier for the embedding type. The typed pipe will have - * embeddings of only for that type of embedding. - * @return Typed pipe with one AdhocSingleSideClusterScores per user. - */ - def pairScores( - interactionMap: Map[String, TypedPipe[(UserId, SimClustersEmbedding)]] - ): TypedPipe[AdhocSingleSideClusterScores] = { - - val combinedInteractions = interactionMap - .map { - case (interactionTypeName, userInteractionFeatures) => - userInteractionFeatures.map { - case (userId, simClustersEmbedding) => - (userId, List((interactionTypeName, simClustersEmbedding))) - } - } - .reduce[TypedPipe[(UserId, List[(String, SimClustersEmbedding)])]] { - case (list1, list2) => - list1 ++ list2 - } - .group - .sumByKey - - combinedInteractions.toTypedPipe - .map { - case (userId, interactionFeatureList) => - AdhocSingleSideClusterScores( - userId, - interactionFeatureList.toMap - ) - } - } - - /** - * Given the SimCluster and interaction graph get the user representation for this interaction. - * See the documentation of the underlying methods for more details - * - * @param normalizedUserSimClusters sparse matrix of User-SimCluster scores. Users are rows and - * SimClusters are columns. This should already by L2normalized. - * @param interactionGraph Graph of interactions. Rows are the users, columns are not used. - * All values in this graph are assumed to be positive; they are the number of - * interactions. - * - * @return SimClustersEmbedding for all users in the give SimCluster graphs - */ - def clusterScoresFromGraphs( - normalizedUserSimClusters: SparseMatrix[UserId, ClusterId, Double], - interactionGraph: SparseMatrix[UserId, _, Double] - ): TypedPipe[(UserId, SimClustersEmbedding)] = { - val clusterFeatures = computeClusterFeatures(normalizedUserSimClusters, interactionGraph) - computeUserFeaturesFromClusters(normalizedUserSimClusters, clusterFeatures) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EmbeddingUtil.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EmbeddingUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..82e11fd81ee93f0cb8ec01548e442a8402ec0668 GIT binary patch literal 38313 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 id.toString - case InternalId.Hashtag(strId) => strId - case InternalId.ClusterId(iid) => iid.toString - case InternalId.LocaleEntityId(LocaleEntityId(entityId, lang)) => lang + entityId.toString - } - - implicit val embeddingTypeOrdering: Ordering[EmbeddingType] = Ordering.by(_.getValue) - - /** - * We do not need to group by model version since we are making the - * This ordering holds the assumption that we would NEVER generate embeddings for two separate - * SimClusters KnownFor versions under the same dataset. - */ - implicit val SimClustersEmbeddingIdOrdering: Ordering[SimClustersEmbeddingId] = Ordering.by { - case SimClustersEmbeddingId(embeddingType, _, internalId) => (embeddingType, internalId) - } - - val ModelVersionPathMap: Map[ModelVersion, String] = Map( - ModelVersion.Model20m145kDec11 -> "model_20m_145k_dec11", - ModelVersion.Model20m145kUpdated -> "model_20m_145k_updated", - ModelVersion.Model20m145k2020 -> "model_20m_145k_2020" - ) - - /** - * Generates the HDFS output path in order to consolidate the offline embeddings datasets under - * a common directory pattern. - * Prepends "/gcs" if the detected data center is qus1. - * - * @param isAdhoc Whether the dataset was generated from an adhoc run - * @param isManhattanKeyVal Whether the dataset is written as KeyVal and is intended to be imported to Manhattan - * @param modelVersion The model version of SimClusters KnownFor that is used to generate the embedding - * @param pathSuffix Any additional path structure suffixed at the end of the path - * @return The consolidated HDFS path, for example: - * /user/cassowary/adhoc/manhattan_sequence_files/simclusters_embeddings/model_20m_145k_updated/... - */ - def getHdfsPath( - isAdhoc: Boolean, - isManhattanKeyVal: Boolean, - modelVersion: ModelVersion, - pathSuffix: String - ): String = { - val adhoc = if (isAdhoc) "adhoc/" else "" - - val user = System.getenv("USER") - - val gcs: String = - try { - InetAddress.getAllByName("metadata.google.internal") // throws Exception if not in GCP. - "/gcs" - } catch { - case _: UnknownHostException => "" - } - - val datasetType = if (isManhattanKeyVal) "manhattan_sequence_files" else "processed" - - val path = s"/user/$user/$adhoc$datasetType/simclusters_embeddings" - - s"$gcs${path}_${ModelVersionPathMap(modelVersion)}_$pathSuffix" - } - - def favScoreExtractor(u: UserToInterestedInClusterScores): (Double, ScoreType.ScoreType) = { - (u.favScoreClusterNormalizedOnly.getOrElse(0.0), ScoreType.FavScore) - } - - def followScoreExtractor(u: UserToInterestedInClusterScores): (Double, ScoreType.ScoreType) = { - (u.followScoreClusterNormalizedOnly.getOrElse(0.0), ScoreType.FollowScore) - } - - def logFavScoreExtractor(u: UserToInterestedInClusterScores): (Double, ScoreType.ScoreType) = { - (u.logFavScoreClusterNormalizedOnly.getOrElse(0.0), ScoreType.LogFavScore) - } - - // Define all scores to extract from the SimCluster InterestedIn source - val scoreExtractors: Seq[UserToInterestedInClusterScores => (Double, ScoreType.ScoreType)] = - Seq( - favScoreExtractor, - followScoreExtractor - ) - - object ScoreType extends Enumeration { - type ScoreType = Value - val FavScore: Value = Value(1) - val FollowScore: Value = Value(2) - val LogFavScore: Value = Value(3) - } - - @deprecated("Use 'common/ModelVersions'", "2019-09-04") - final val ModelVersion20M145KDec11: String = "20M_145K_dec11" - @deprecated("Use 'common/ModelVersions'", "2019-09-04") - final val ModelVersion20M145KUpdated: String = "20M_145K_updated" - - @deprecated("Use 'common/ModelVersions'", "2019-09-04") - final val ModelVersionMap: Map[String, ModelVersion] = Map( - ModelVersion20M145KDec11 -> ModelVersion.Model20m145kDec11, - ModelVersion20M145KUpdated -> ModelVersion.Model20m145kUpdated - ) -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EntityEmbeddingUtil.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EntityEmbeddingUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..4e66de1febb25bfde6156abcefab7e9f90e8366c GIT binary patch literal 37724 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EntityEmbeddingUtil.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EntityEmbeddingUtil.scala deleted file mode 100644 index b9f715f2e..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/EntityEmbeddingUtil.scala +++ /dev/null @@ -1,79 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.common - -import com.twitter.recos.entities.thriftscala.Entity -import com.twitter.scalding.Args -import com.twitter.scalding.TypedPipe -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.UserId -import com.twitter.simclusters_v2.thriftscala.ModelVersion -import com.twitter.wtf.entity_real_graph.common.EntityUtil -import com.twitter.wtf.entity_real_graph.thriftscala.Edge -import com.twitter.wtf.entity_real_graph.thriftscala.EntityType -import com.twitter.wtf.entity_real_graph.thriftscala.FeatureName - -object EntityEmbeddingUtil { - - def getEntityUserMatrix( - entityRealGraphSource: TypedPipe[Edge], - halfLife: HalfLifeScores.HalfLifeScoresType, - entityType: EntityType - ): TypedPipe[(Entity, (UserId, Double))] = { - entityRealGraphSource - .flatMap { - case Edge(userId, entity, consumerFeatures, _, _) - if consumerFeatures.exists(_.exists(_.featureName == FeatureName.Favorites)) && - EntityUtil.getEntityType(entity) == entityType => - for { - features <- consumerFeatures - favFeatures <- features.find(_.featureName == FeatureName.Favorites) - ewmaMap <- favFeatures.featureValues.ewmaMap - favScore <- ewmaMap.get(halfLife.id) - } yield (entity, (userId, favScore)) - - case _ => None - } - } - - object HalfLifeScores extends Enumeration { - type HalfLifeScoresType = Value - val OneDay: Value = Value(1) - val SevenDays: Value = Value(7) - val FourteenDays: Value = Value(14) - val ThirtyDays: Value = Value(30) - val SixtyDays: Value = Value(60) - } - - case class EntityEmbeddingsJobConfig( - topK: Int, - halfLife: HalfLifeScores.HalfLifeScoresType, - modelVersion: ModelVersion, - entityType: EntityType, - isAdhoc: Boolean) - - object EntityEmbeddingsJobConfig { - - def apply(args: Args, isAdhoc: Boolean): EntityEmbeddingsJobConfig = { - - val entityTypeArg = - EntityType.valueOf(args.getOrElse("entity-type", default = "")) match { - case Some(entityType) => entityType - case _ => - throw new IllegalArgumentException( - s"Argument [--entity-type] must be provided. Supported options [" + - s"${EntityType.SemanticCore.name}, ${EntityType.Hashtag.name}]") - } - - EntityEmbeddingsJobConfig( - topK = args.getOrElse("top-k", default = "100").toInt, - halfLife = HalfLifeScores(args.getOrElse("half-life", default = "14").toInt), - // Fail fast if there is no correct model-version argument - modelVersion = ModelVersions.toModelVersion( - args.getOrElse("model-version", ModelVersions.Model20M145K2020) - ), - // Fail fast if there is no correct entity-type argument - entityType = entityTypeArg, - isAdhoc = isAdhoc - ) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/ExternalDataSources.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/ExternalDataSources.docx new file mode 100644 index 0000000000000000000000000000000000000000..155f521d39af5523d23e27266842077c48d08288 GIT binary patch literal 42100 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/ExternalDataSources.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/ExternalDataSources.scala deleted file mode 100644 index 729cb95d0..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/ExternalDataSources.scala +++ /dev/null @@ -1,565 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.common - -import com.twitter.algebird.Aggregator -import com.twitter.common.text.language.LocaleUtil -import com.twitter.escherbird.common.thriftscala.Locale -import com.twitter.escherbird.common.thriftscala.LocalizedUser -import com.twitter.escherbird.metadata.thriftscala.FullMetadata -import com.twitter.escherbird.scalding.source.FullMetadataSource -import com.twitter.escherbird.scalding.source.utt.UttSourceScalaDataset -import com.twitter.escherbird.utt.strato.thriftscala.SnapshotType -import com.twitter.escherbird.utt.thriftscala.UttEntityRecord -import com.twitter.interests_ds.jobs.interests_service.UserTopicRelationSnapshotScalaDataset -import com.twitter.interests.thriftscala.InterestRelationType -import com.twitter.interests.thriftscala.UserInterestsRelationSnapshot -import com.twitter.penguin.scalding.datasets.PenguinUserLanguagesScalaDataset -import com.twitter.scalding.DateOps -import com.twitter.scalding.DateRange -import com.twitter.scalding.Days -import com.twitter.scalding.Stat -import com.twitter.scalding.TypedPipe -import com.twitter.scalding.UniqueID -import com.twitter.scalding.ValuePipe -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossClusterSameDC -import com.twitter.scalding_internal.dalv2.remote_access.ProcAtla -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.common._ -import com.twitter.simclusters_v2.hdfs_sources.SimclustersV2InterestedIn20M145KUpdatedScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.UserUserFavGraphScalaDataset -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossDC -import com.twitter.common_header.thriftscala.CommonHeader -import com.twitter.common_header.thriftscala.IdType -import com.twitter.common_header.thriftscala.VersionedCommonHeader -import flockdb_tools.datasets.flock.FlockBlocksEdgesScalaDataset -import flockdb_tools.datasets.flock.FlockFollowsEdgesScalaDataset -import flockdb_tools.datasets.flock.FlockReportAsAbuseEdgesScalaDataset -import flockdb_tools.datasets.flock.FlockReportAsSpamEdgesScalaDataset -import twadoop_config.configuration.log_categories.group.search.AdaptiveSearchScalaDataset -import com.twitter.search.adaptive.scribing.thriftscala.AdaptiveSearchScribeLog -import twadoop_config.configuration.log_categories.group.timeline.TimelineServiceFavoritesScalaDataset -import tweetsource.common.UnhydratedFlatScalaDataset -import com.twitter.frigate.data_pipeline.magicrecs.magicrecs_notifications_lite.thriftscala.MagicRecsNotificationLite -import com.twitter.simclusters_v2.thriftscala.ClustersUserIsInterestedIn -import com.twitter.simclusters_v2.thriftscala.EdgeWithDecayedWeights -import com.twitter.timelineservice.thriftscala.ContextualizedFavoriteEvent -import com.twitter.timelineservice.thriftscala.FavoriteEventUnion -import com.twitter.tweetsource.common.thriftscala.UnhydratedFlatTweet -import com.twitter.usersource.snapshot.flat.UsersourceFlatScalaDataset -import com.twitter.wtf.entity_real_graph.scalding.common.DatasetConstants -import com.twitter.wtf.entity_real_graph.scalding.common.SemanticCoreFilters -import com.twitter.wtf.scalding.client_event_processing.thriftscala.InteractionDetails -import com.twitter.wtf.scalding.client_event_processing.thriftscala.InteractionType -import com.twitter.wtf.scalding.client_event_processing.thriftscala.TweetImpressionDetails -import com.twitter.frigate.data_pipeline.scalding.magicrecs.magicrecs_notification_lite.MagicrecsNotificationLite1DayLagScalaDataset -import com.twitter.iesource.thriftscala.InteractionEvent -import com.twitter.iesource.thriftscala.InteractionTargetType -import com.twitter.wtf.scalding.jobs.client_event_processing.UserInteractionScalaDataset -import java.util.TimeZone -import com.twitter.interests_ds.jobs.interests_service.UserInterestRelationSnapshotScalaDataset -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.UserId -import com.twitter.scalding.typed.{ValuePipe => TypedValuePipe} -import com.twitter.tweetsource.common.thriftscala.UnhydratedTweet -import tweetsource.common.UnhydratedScalaDataset - -object ExternalDataSources { - val UTTDomain = 131L - val usersourceColumns = Set("id", "account_country_code", "language") - val ValidFlockEdgeStateId = 0 - - def getStandardLanguageCode(language: String): Option[String] = { - val locale = LocaleUtil.getLocaleOf(language) - if (locale == LocaleUtil.UNKNOWN) None else Some(locale.getLanguage) - } - - // Reads UTT Entity Records (`utt_source` dataset) - def getUttEntityRecords(implicit timeZone: TimeZone): TypedPipe[UttEntityRecord] = { - DAL - .readMostRecentSnapshotNoOlderThan(UttSourceScalaDataset, Days(14)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - - /** - * Extracts the KGO seeds from the UTT Entity Records. - * Uses the most recent "Stable" version by default unless specified otherwise. - * - * @param uttVersion UTT Version to use instead of the default value. - */ - def getLocaleProducerSeedIdsFromUttEntityRecords( - uttVersion: Option[Long] = None - )( - implicit timeZone: TimeZone, - uniqueId: UniqueID - ): TypedPipe[((TopicId, Language), Seq[UserId])] = { - - val topicLangPairCount = Stat("topic_lang_pair_count_all") - val topicLangPairCountEmptySeed = Stat("topic_lang_pair_count_empty_seed") - val topicLangPairCountLteOneSeed = Stat("topic_lang_pair_count_lte_one_seed") - val topicLangPairCountLteFiveSeeds = Stat("topic_lang_pair_count_lte_five_seeds") - val topicLangPairCountLteTenSeeds = Stat("topic_lang_pair_count_lte_ten_seeds") - - val uttEntityRecords: TypedPipe[UttEntityRecord] = getUttEntityRecords - - val uttVersionToUse: ValuePipe[Long] = uttVersion match { - case Some(uttVersionValue) => - TypedValuePipe(uttVersionValue) - case _ => // find the most recent "stable" version as recommended by the SemanticCore team - uttEntityRecords - .filter(_.snapshotType.exists(_ == SnapshotType.Stable)) - .map(_.version) - .distinct - .aggregate(Aggregator.min) // the most recent version is the smallest negative value - } - - val uttEntityRecordsSingleVersion: TypedPipe[UttEntityRecord] = - uttEntityRecords - .filterWithValue(uttVersionToUse) { - case (uttEntityRecord: UttEntityRecord, uttVersionOpt: Option[Long]) => - uttVersionOpt.contains(uttEntityRecord.version) - } - - uttEntityRecordsSingleVersion.flatMap { uttEntityRecord: UttEntityRecord => - val localizedUsers: Seq[LocalizedUser] = - uttEntityRecord.knownForUsers.flatMap(_.localizedUsers).getOrElse(Nil) - - val validLocalizedUsers: Seq[(TopicId, Language, UserId)] = - localizedUsers - .flatMap { - case LocalizedUser(userId: UserId, Some(Locale(Some(language: String), _)), _) => - Some((uttEntityRecord.entityId, language, userId)) - case _ => - None - } - - val localeProducerSeedIds: Seq[((TopicId, Language), Seq[UserId])] = validLocalizedUsers - .groupBy { - case (topicId: TopicId, language: Language, _) => - (topicId, language) - } - .mapValues(_.map(_._3).distinct) // values are distinct producerIds - .toSeq - - localeProducerSeedIds.foreach { // stats - case (_, seedIds: Seq[UserId]) => - topicLangPairCount.inc() - if (seedIds.isEmpty) topicLangPairCountEmptySeed.inc() - if (seedIds.length <= 1) topicLangPairCountLteOneSeed.inc() - if (seedIds.length <= 5) topicLangPairCountLteFiveSeeds.inc() - if (seedIds.length <= 10) topicLangPairCountLteTenSeeds.inc() - } - - localeProducerSeedIds - }.forceToDisk - } - - def uttEntitiesSource( - customFullMetadataSource: Option[TypedPipe[FullMetadata]] = None - )( - implicit dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[Long] = { - customFullMetadataSource - .getOrElse(fullMetadataSource) - .flatMap { - case fullMetadata if fullMetadata.domainId == UTTDomain => - for { - basicMetadata <- fullMetadata.basicMetadata - indexableFields <- basicMetadata.indexableFields - tags <- indexableFields.tags - if !SemanticCoreFilters.shouldFilterByTags(tags.toSet, DatasetConstants.stopTags) - } yield { - fullMetadata.entityId - } - case _ => None - } - } - - // Get followable topics from Escherbird - def uttFollowableEntitiesSource( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[Long] = { - val followableEntityCount = Stat("followable_entities_count") - val FollowableTag = "utt:followable_topic" - fullMetadataSource - .flatMap { - case fullMetadata if fullMetadata.domainId == UTTDomain => - for { - basicMetadata <- fullMetadata.basicMetadata - indexableFields <- basicMetadata.indexableFields - tags <- indexableFields.tags - if tags.contains(FollowableTag) - } yield { - followableEntityCount.inc() - fullMetadata.entityId - } - case _ => None - } - } - - def fullMetadataSource( - implicit dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[FullMetadata] = { - TypedPipe - .from( - new FullMetadataSource(s"/atla/proc/${FullMetadataSource.DefaultHdfsPath}")()( - dateRange.embiggen(Days(7)))) - } - - def userSource(implicit timeZone: TimeZone): TypedPipe[(UserId, (Country, Language))] = - DAL - .readMostRecentSnapshotNoOlderThan(UsersourceFlatScalaDataset, Days(7)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .withColumns(usersourceColumns) - .toTypedPipe.flatMap { flatUser => - for { - userId <- flatUser.id - country <- flatUser.accountCountryCode - language <- flatUser.language - standardLang <- getStandardLanguageCode(language) - } yield { - (userId, country.toUpperCase, standardLang) - } - }.distinct - .map { case (user, country, lang) => user -> (country, lang) } - - // Build user language source from inferred languages (penguin_user_languages dataset) - def inferredUserConsumedLanguageSource( - implicit timeZone: TimeZone - ): TypedPipe[(UserId, Seq[(Language, Double)])] = { - DAL - .readMostRecentSnapshotNoOlderThan(PenguinUserLanguagesScalaDataset, Days(7)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { kv => - val consumed = kv.value.consumed - .collect { - case scoredString if scoredString.weight > 0.001 => //throw away 5% outliers - (getStandardLanguageCode(scoredString.item), scoredString.weight) - }.collect { - case (Some(language), score) => (language, score) - } - (kv.key, consumed) - } - } - - def inferredUserProducedLanguageSource( - implicit timeZone: TimeZone - ): TypedPipe[(UserId, Seq[(Language, Double)])] = { - DAL - .readMostRecentSnapshotNoOlderThan(PenguinUserLanguagesScalaDataset, Days(7)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { kv => - val produced = kv.value.produced - .collect { - case scoredString if scoredString.weight > 0.15 => //throw away 5% outliers - (getStandardLanguageCode(scoredString.item), scoredString.weight) - }.collect { - case (Some(language), score) => (language, score) - } - (kv.key, produced) - } - } - - def simClustersInterestInSource( - implicit dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[KeyVal[UserId, ClustersUserIsInterestedIn]] = { - DAL - .readMostRecentSnapshotNoOlderThan( - SimclustersV2InterestedIn20M145KUpdatedScalaDataset, - Days(30)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - - def simClustersInterestInLogFavSource( - minLogFavScore: Double - )( - implicit dateRange: DateRange, - timeZone: TimeZone - ): TypedPipe[(UserId, Map[ClusterId, Double])] = { - simClustersInterestInSource.map { - case KeyVal(userId, clustersUserIsInterestedIn) => - userId -> clustersUserIsInterestedIn.clusterIdToScores - .map { - case (clusterId, scores) => - clusterId -> scores.logFavScore.getOrElse(0.0) - } - .filter(_._2 > minLogFavScore) - .toMap - } - } - - def topicFollowGraphSource( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[(TopicId, UserId)] = { - val userTopicFollowCount = Stat("user_topic_follow_count") - DAL - .readMostRecentSnapshotNoOlderThan(UserTopicRelationSnapshotScalaDataset, Days(7)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .collect { - case userInterestsRelationSnapshot: UserInterestsRelationSnapshot - if userInterestsRelationSnapshot.interestType == "UTT" && - userInterestsRelationSnapshot.relation == InterestRelationType.Followed => - (userInterestsRelationSnapshot.interestId, userInterestsRelationSnapshot.userId) - } - .hashJoin(uttFollowableEntitiesSource.asKeys) - .map { - case (topic, (user, _)) => - userTopicFollowCount.inc() - (topic, user) - } - } - - def notInterestedTopicsSource( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[(TopicId, UserId)] = { - val userNotInterestedInTopicsCount = Stat("user_not_interested_in_topics_count") - DAL - .readMostRecentSnapshotNoOlderThan( - UserInterestRelationSnapshotScalaDataset, - Days(7)).withRemoteReadPolicy(ExplicitLocation(ProcAtla)).toTypedPipe.collect { - case userInterestsRelationSnapshot: UserInterestsRelationSnapshot - if userInterestsRelationSnapshot.interestType == "UTT" && - userInterestsRelationSnapshot.relation == InterestRelationType.NotInterested => - (userInterestsRelationSnapshot.interestId, userInterestsRelationSnapshot.userId) - } - .hashJoin(uttFollowableEntitiesSource.asKeys) - .map { - case (topic, (user, _)) => - userNotInterestedInTopicsCount.inc() - (topic, user) - } - } - - def tweetSource( - implicit dateRange: DateRange - ): TypedPipe[UnhydratedTweet] = { - DAL - .read(UnhydratedScalaDataset, dateRange).withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - - def flatTweetsSource( - implicit dateRange: DateRange - ): TypedPipe[UnhydratedFlatTweet] = { - DAL - .read(UnhydratedFlatScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - } - - def userTweetFavoritesSource( - implicit dateRange: DateRange - ): TypedPipe[(UserId, TweetId, Timestamp)] = { - DAL - .read(TimelineServiceFavoritesScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .flatMap { cfe: ContextualizedFavoriteEvent => - cfe.event match { - case FavoriteEventUnion.Favorite(fav) => - Some(fav.userId, fav.tweetId, fav.eventTimeMs) - case _ => - None - } - } - } - - def userTweetImpressionsSource( - dwellSec: Int = 1 - )( - implicit dateRange: DateRange - ): TypedPipe[(UserId, TweetId, Timestamp)] = { - DAL - .read(UserInteractionScalaDataset, dateRange) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .flatMap { - case userInteraction - if userInteraction.interactionType == InteractionType.TweetImpressions => - userInteraction.interactionDetails match { - case InteractionDetails.TweetImpressionDetails( - TweetImpressionDetails(tweetId, _, dwellTimeInSecOpt)) - if dwellTimeInSecOpt.exists(_ >= dwellSec) => - Some(userInteraction.userId, tweetId, userInteraction.timeStamp) - case _ => - None - } - case _ => None - } - } - - def transformFavEdges( - input: TypedPipe[EdgeWithDecayedWeights], - halfLifeInDaysForFavScore: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[(Long, Long, Double)] = { - val numEdgesWithSpecifiedHalfLife = Stat( - s"num_edges_with_specified_half_life_${halfLifeInDaysForFavScore}_days") - val numEdgesWithoutSpecifiedHalfLife = Stat( - s"num_edges_without_specified_half_life_${halfLifeInDaysForFavScore}_days") - input - .flatMap { edge => - if (edge.weights.halfLifeInDaysToDecayedSums.contains(halfLifeInDaysForFavScore)) { - numEdgesWithSpecifiedHalfLife.inc() - Some((edge.sourceId, edge.destinationId, edge.weights.halfLifeInDaysToDecayedSums(100))) - } else { - numEdgesWithoutSpecifiedHalfLife.inc() - None - } - } - } - - def getFavEdges( - halfLifeInDaysForFavScore: Int - )( - implicit dateRange: DateRange, - uniqueID: UniqueID - ): TypedPipe[(Long, Long, Double)] = { - implicit val tz: java.util.TimeZone = DateOps.UTC - transformFavEdges( - DAL - .readMostRecentSnapshotNoOlderThan(UserUserFavGraphScalaDataset, Days(14)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe, - halfLifeInDaysForFavScore - ) - } - - def flockReportAsSpamSource( - )( - implicit dateRange: DateRange - ): TypedPipe[(UserId, UserId)] = { - DAL - .readMostRecentSnapshot(FlockReportAsSpamEdgesScalaDataset) - .toTypedPipe - .collect { - case edge if edge.state == ValidFlockEdgeStateId => - (edge.sourceId, edge.destinationId) - } - } - - def flockBlocksSource( - )( - implicit dateRange: DateRange - ): TypedPipe[(UserId, UserId)] = { - DAL - .readMostRecentSnapshot(FlockBlocksEdgesScalaDataset) - .toTypedPipe - .collect { - case edge if edge.state == ValidFlockEdgeStateId => - (edge.sourceId, edge.destinationId) - } - } - - def flockFollowsSource( - )( - implicit dateRange: DateRange - ): TypedPipe[(UserId, UserId)] = { - DAL - .readMostRecentSnapshot(FlockFollowsEdgesScalaDataset) - .toTypedPipe - .collect { - case edge if edge.state == ValidFlockEdgeStateId => - (edge.sourceId, edge.destinationId) - } - } - - def flockReportAsAbuseSource( - )( - implicit dateRange: DateRange - ): TypedPipe[(UserId, UserId)] = { - DAL - .readMostRecentSnapshot(FlockReportAsAbuseEdgesScalaDataset) - .toTypedPipe - .collect { - case edge if edge.state == ValidFlockEdgeStateId => - (edge.sourceId, edge.destinationId) - } - } - - def magicRecsNotficationOpenOrClickEventsSource( - implicit dateRange: DateRange - ): TypedPipe[MagicRecsNotificationLite] = { - DAL - .read(MagicrecsNotificationLite1DayLagScalaDataset, dateRange) - .toTypedPipe - .filter { entry => - // keep entries with a valid userId and tweetId, opened or clicked timestamp defined - val userIdExists = entry.targetUserId.isDefined - val tweetIdExists = entry.tweetId.isDefined - val openOrClickExists = - entry.openTimestampMs.isDefined || entry.ntabClickTimestampMs.isDefined - userIdExists && tweetIdExists && openOrClickExists - } - } - - def ieSourceTweetEngagementsSource(implicit dateRange: DateRange): TypedPipe[InteractionEvent] = { - DAL - .read( - com.twitter.iesource.processing.events.batch.ServerEngagementsScalaDataset, - dateRange).withColumns( - Set("targetId", "targetType", "engagingUserId", "details", "referenceTweet")) - .toTypedPipe - .filter { event => - // filter out logged out users because their favorites are less reliable - event.engagingUserId > 0L && event.targetType == InteractionTargetType.Tweet - } - } - - private def userIdFromBlenderAdaptiveScribeLog( - blenderAdaptiveLog: AdaptiveSearchScribeLog - ): Option[Long] = { - blenderAdaptiveLog.versionedCommonHeader match { - case VersionedCommonHeader.CommonHeader(CommonHeader.ServerHeader(serverHeader)) => - serverHeader.requestInfo match { - case Some(requestInfo) => requestInfo.ids.get(IdType.UserId).map(_.toLong) - case _ => None - } - case _ => None - } - } - - def adaptiveSearchScribeLogsSource( - implicit dateRange: DateRange - ): TypedPipe[(UserId, String)] = { - val searchData: TypedPipe[AdaptiveSearchScribeLog] = - DAL - .read(AdaptiveSearchScalaDataset, dateRange).toTypedPipe - - searchData - .flatMap({ scribeLog: AdaptiveSearchScribeLog => - for { - userId <- userIdFromBlenderAdaptiveScribeLog(scribeLog) - // filter out logged out search queries - if userId != 0 - queryString <- scribeLog.requestLog.flatMap(_.request).flatMap(_.rawQuery) - } yield { - (userId, Set(queryString)) - } - }) - // if a user searches for the same query multiple times, there could be duplicates. - // De-dup them to get the distinct queries searched by a user - .sumByKey - .flatMap { - case (userId, distinctQuerySet) => - distinctQuerySet.map { query => - (userId, query) - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/SimClustersEmbeddingJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/SimClustersEmbeddingJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..e4dc218ccf9353497772a7ad448d889f100c3a8f GIT binary patch literal 39022 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/SimClustersEmbeddingJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/SimClustersEmbeddingJob.scala deleted file mode 100644 index db5ba807d..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/embedding/common/SimClustersEmbeddingJob.scala +++ /dev/null @@ -1,248 +0,0 @@ -package com.twitter.simclusters_v2.scalding.embedding.common - -import com.twitter.scalding.{Args, DateRange, Execution, TypedPipe, UniqueID} -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.scalding.common.matrix.{SparseMatrix, SparseRowMatrix} -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil._ -import com.twitter.simclusters_v2.thriftscala._ -import java.util.TimeZone - -/** - * This is the base job for computing SimClusters Embedding for any Noun Type on Twitter, such as - * Users, Tweets, Topics, Entities, Channels, etc. - * - * The most straightforward way to understand the SimClusters Embeddings for a Noun is that it is - * a weighted sum of SimClusters InterestedIn vectors from users who are interested in the Noun. - * So for a noun type, you only need to define `prepareNounToUserMatrix` to pass in a matrix which - * represents how much each user is interested in this noun. - */ -trait SimClustersEmbeddingBaseJob[NounType] { - - def numClustersPerNoun: Int - - def numNounsPerClusters: Int - - def thresholdForEmbeddingScores: Double - - def numReducersOpt: Option[Int] = None - - def prepareNounToUserMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseMatrix[NounType, UserId, Double] - - def prepareUserToClusterMatrix( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): SparseRowMatrix[UserId, ClusterId, Double] - - def writeNounToClustersIndex( - output: TypedPipe[(NounType, Seq[(ClusterId, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] - - def writeClusterToNounsIndex( - output: TypedPipe[(ClusterId, Seq[(NounType, Double)])] - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] - - def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val embeddingMatrix: SparseRowMatrix[NounType, ClusterId, Double] = - prepareNounToUserMatrix.rowL2Normalize - .multiplySkinnySparseRowMatrix( - prepareUserToClusterMatrix.colL2Normalize, - numReducersOpt - ) - .filter((_, _, v) => v > thresholdForEmbeddingScores) - - Execution - .zip( - writeNounToClustersIndex( - embeddingMatrix.sortWithTakePerRow(numClustersPerNoun)(Ordering.by(-_._2)) - ), - writeClusterToNounsIndex( - embeddingMatrix.sortWithTakePerCol(numNounsPerClusters)( - Ordering.by(-_._2) - ) - ) - ) - .unit - } - -} - -object SimClustersEmbeddingJob { - - /** - * Multiply the [user, cluster] and [user, T] matrices, and return the cross product. - */ - def computeEmbeddings[T]( - simClustersSource: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - normalizedInputMatrix: TypedPipe[(UserId, (T, Double))], - scoreExtractors: Seq[UserToInterestedInClusterScores => (Double, ScoreType.ScoreType)], - modelVersion: ModelVersion, - toSimClustersEmbeddingId: (T, ScoreType.ScoreType) => SimClustersEmbeddingId, - numReducers: Option[Int] = None - ): TypedPipe[(SimClustersEmbeddingId, (ClusterId, Double))] = { - val userSimClustersMatrix = - getUserSimClustersMatrix(simClustersSource, scoreExtractors, modelVersion) - multiplyMatrices( - normalizedInputMatrix, - userSimClustersMatrix, - toSimClustersEmbeddingId, - numReducers) - } - - def getL2Norm[T]( - inputMatrix: TypedPipe[(T, (UserId, Double))], - numReducers: Option[Int] = None - )( - implicit ordering: Ordering[T] - ): TypedPipe[(T, Double)] = { - val l2Norm = inputMatrix - .mapValues { - case (_, score) => score * score - } - .sumByKey - .mapValues(math.sqrt) - - numReducers match { - case Some(reducers) => l2Norm.withReducers(reducers) - case _ => l2Norm - } - } - - def getNormalizedTransposeInputMatrix[T]( - inputMatrix: TypedPipe[(T, (UserId, Double))], - numReducers: Option[Int] = None - )( - implicit ordering: Ordering[T] - ): TypedPipe[(UserId, (T, Double))] = { - val inputWithNorm = inputMatrix.join(getL2Norm(inputMatrix, numReducers)) - - (numReducers match { - case Some(reducers) => inputWithNorm.withReducers(reducers) - case _ => inputWithNorm - }).map { - case (inputId, ((userId, favScore), norm)) => - (userId, (inputId, favScore / norm)) - } - } - - /** - * Matrix multiplication with the ability to tune the reducer size for better performance - */ - @Deprecated - def legacyMultiplyMatrices[T]( - normalizedTransposeInputMatrix: TypedPipe[(UserId, (T, Double))], - userSimClustersMatrix: TypedPipe[(UserId, Seq[(ClusterId, Double)])], - numReducers: Int // Matrix multiplication is expensive. Use this to tune performance - )( - implicit ordering: Ordering[T] - ): TypedPipe[((ClusterId, T), Double)] = { - normalizedTransposeInputMatrix - .join(userSimClustersMatrix) - .withReducers(numReducers) - .flatMap { - case (_, ((inputId, score), clustersWithScores)) => - clustersWithScores.map { - case (clusterId, clusterScore) => - ((clusterId, inputId), score * clusterScore) - } - } - .sumByKey - .withReducers(numReducers + 1) // +1 to distinguish this step from above in Dr. Scalding - } - - def multiplyMatrices[T]( - normalizedTransposeInputMatrix: TypedPipe[(UserId, (T, Double))], - userSimClustersMatrix: TypedPipe[(UserId, Seq[((ClusterId, ScoreType.ScoreType), Double)])], - toSimClustersEmbeddingId: (T, ScoreType.ScoreType) => SimClustersEmbeddingId, - numReducers: Option[Int] = None - ): TypedPipe[(SimClustersEmbeddingId, (ClusterId, Double))] = { - val inputJoinedWithSimClusters = numReducers match { - case Some(reducers) => - normalizedTransposeInputMatrix - .join(userSimClustersMatrix) - .withReducers(reducers) - case _ => - normalizedTransposeInputMatrix.join(userSimClustersMatrix) - } - - val matrixMultiplicationResult = inputJoinedWithSimClusters.flatMap { - case (_, ((inputId, inputScore), clustersWithScores)) => - clustersWithScores.map { - case ((clusterId, scoreType), clusterScore) => - ((clusterId, toSimClustersEmbeddingId(inputId, scoreType)), inputScore * clusterScore) - } - }.sumByKey - - (numReducers match { - case Some(reducers) => - matrixMultiplicationResult.withReducers(reducers + 1) - case _ => matrixMultiplicationResult - }).map { - case ((clusterId, embeddingId), score) => - (embeddingId, (clusterId, score)) - } - } - - def getUserSimClustersMatrix( - simClustersSource: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - scoreExtractors: Seq[UserToInterestedInClusterScores => (Double, ScoreType.ScoreType)], - modelVersion: ModelVersion - ): TypedPipe[(UserId, Seq[((ClusterId, ScoreType.ScoreType), Double)])] = { - simClustersSource.map { - case (userId, clusters) - if ModelVersions.toModelVersion(clusters.knownForModelVersion) == modelVersion => - userId -> clusters.clusterIdToScores.flatMap { - case (clusterId, clusterScores) => - scoreExtractors.map { scoreExtractor => - scoreExtractor(clusterScores) match { - case (score, scoreType) => ((clusterId, scoreType), score) - } - } - }.toSeq - case (userId, _) => userId -> Nil - } - } - - def toReverseIndexSimClusterEmbedding( - embeddings: TypedPipe[(SimClustersEmbeddingId, (ClusterId, EmbeddingScore))], - topK: Int - ): TypedPipe[(SimClustersEmbeddingId, InternalIdEmbedding)] = { - embeddings - .map { - case (embeddingId, (clusterId, score)) => - ( - SimClustersEmbeddingId( - embeddingId.embeddingType, - embeddingId.modelVersion, - InternalId.ClusterId(clusterId)), - (embeddingId.internalId, score)) - } - .group - .sortedReverseTake(topK)(Ordering.by(_._2)) - .mapValues { topInternalIdsWithScore => - val internalIdsWithScore = topInternalIdsWithScore.map { - case (internalId, score) => InternalIdWithScore(internalId, score) - } - InternalIdEmbedding(internalIdsWithScore) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFavBasedProducerEmbeddings.docx b/src/scala/com/twitter/simclusters_v2/scalding/embedding/producer/AggregatableFavBasedProducerEmbeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..1d2b7c059ac6d1afb848877bc8855a6c1195e135 GIT binary patch literal 38655 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

p8zfttJm-RGXx5uq=_6vccFAS1W-*1yWflm_4Yj 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 top tweets and tweet -> top clusters data sets -2. TweetSimilarityEvaluationSamplingAdhocApp to sample a subset of tweets that you want to compute some metrics on -3. TweetSimilarityEvaluationAdhocApp to perform the evaluation diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/README.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/README.docx new file mode 100644 index 0000000000000000000000000000000000000000..c72f458667c60159214f5b459dc2a06a929fd130 GIT binary patch literal 36795 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 top clusters (or Tweet Embedding), and cluster -> top tweets. - * These data sets are supposed to be the snapshot of the two index at the end of the dataRange you run. - * - * Note that you can also use the output from SimClustersOfflineJobScheduledApp for analysis purpose. - * The outputs from that job might be more close to the data we use in production. - * The benefit of having this job is to keep the flexibility of experiment different ideas. - * - * It is recommended to put at least 2 days in the --date (dataRange in the code) in order to make sure - * we have enough engagement data for tweets have more engagements in the last 1+ days. - * - * - * There are several parameters to tune in the job. They are explained in the inline comments. - * - * - * To run the job: - scalding remote run \ - --target src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc:tweet_embedding-adhoc \ - --user recos-platform \ - --reducers 1000 \ - --main-class com.twitter.simclusters_v2.scalding.offline_job.adhoc.SimClustersTweetEmbeddingAdhocApp -- \ - --date 2021-01-27 2021-01-28 \ - --score_type logFav \ - --output_dir /user/recos-platform/adhoc/tweet_embedding_01_27_28_unnormalized_t9 - */ -object SimClustersTweetEmbeddingAdhocApp extends AdhocExecutionApp { - - import SimClustersOfflineJobUtil._ - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val outputDir = args("output_dir") - - // what interestedIn score to use. logFav is what we use in production - val scoringMethod = args.getOrElse("score_type", "logFav") - - // whether to use normalized score in the cluster -> top tweets. - // Currently, we do not do this in production. DONOT turn it on unless you know what you are doing. - // NOTE that for scalding args, "--run_normalized" will just set the arg to be true, and - // even you use "--run_normalized false", it will still be true. - val usingNormalizedScoringFunction = args.boolean("run_normalized") - - // filter out tweets that has less than X favs in the dateRange. - val tweetFavThreshold = args.long("tweet_fav_threshold", 0L) - - // tweet -> top clusters will be saved in this subfolder - val tweetTopKClustersOutputPath: String = outputDir + "/tweet_top_k_clusters" - - // cluster -> top tweets will be saved in this subfolder - val clusterTopKTweetsOutputPath: String = outputDir + "/cluster_top_k_tweets" - - val interestedInData: TypedPipe[(Long, ClustersUserIsInterestedIn)] = - DAL - .readMostRecentSnapshot( - SimclustersV2InterestedIn20M145KUpdatedScalaDataset, - dateRange.embiggen(Days(14)) - ) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { - case KeyVal(key, value) => (key, value) - } - - // read user-tweet fav data. set the weight to be a decayed value. they will be decayed to the dateRang.end - val userTweetFavData: SparseMatrix[UserId, TweetId, Double] = - SparseMatrix(readTimelineFavoriteData(dateRange)).tripleApply { - case (userId, tweetId, timestamp) => - ( - userId, - tweetId, - thriftDecayedValueMonoid - .plus( - thriftDecayedValueMonoid.build(1.0, timestamp), - thriftDecayedValueMonoid.build(0.0, dateRange.end.timestamp) - ) - .value) - } - - // filter out tweets without x favs - val tweetSubset = - userTweetFavData.colNnz.filter( - _._2 > tweetFavThreshold.toDouble - ) // keep tweets with at least x favs - - val userTweetFavDataSubset = userTweetFavData.filterCols(tweetSubset.keys) - - // construct user-simclusters matrix - val userSimClustersInterestedInData: SparseRowMatrix[UserId, ClusterId, Double] = - SparseRowMatrix( - interestedInData.map { - case (userId, clusters) => - val topClustersWithScores = - SimClustersInterestedInUtil - .topClustersWithScores(clusters) - .collect { - case (clusterId, scores) - if scores.favScore > Configs - .favScoreThresholdForUserInterest( - clusters.knownForModelVersion - ) => // this is the same threshold used in the summingbird job - scoringMethod match { - case "fav" => - clusterId -> scores.clusterNormalizedFavScore - case "follow" => - clusterId -> scores.clusterNormalizedFollowScore - case "logFav" => - clusterId -> scores.clusterNormalizedLogFavScore - case _ => - throw new IllegalArgumentException( - "score_type can only be fav, follow or logFav") - } - } - .filter(_._2 > 0.0) - .toMap - userId -> topClustersWithScores - }, - isSkinnyMatrix = true - ) - - // multiply tweet -> user matrix with user -> cluster matrix to get tweet -> cluster matrix - val tweetClusterScoreMatrix = if (usingNormalizedScoringFunction) { - userTweetFavDataSubset.transpose.rowL2Normalize - .multiplySkinnySparseRowMatrix(userSimClustersInterestedInData) - } else { - userTweetFavDataSubset.transpose.multiplySkinnySparseRowMatrix( - userSimClustersInterestedInData) - } - - // get the tweet -> top clusters by taking top K in each row - val tweetTopClusters = tweetClusterScoreMatrix - .sortWithTakePerRow(Configs.topKClustersPerTweet)(Ordering.by(-_._2)) - .fork - - // get the cluster -> top tweets by taking top K in each colum - val clusterTopTweets = tweetClusterScoreMatrix - .sortWithTakePerCol(Configs.topKTweetsPerCluster)(Ordering.by(-_._2)) - .fork - - // injections for saving a list - implicit val inj1: Injection[List[(Int, Double)], Array[Byte]] = - Bufferable.injectionOf[List[(Int, Double)]] - implicit val inj2: Injection[List[(Long, Double)], Array[Byte]] = - Bufferable.injectionOf[List[(Long, Double)]] - - // save the data sets and also output to some tsv files for eyeballing the results - Execution - .zip( - tweetTopClusters - .mapValues(_.toList) - .writeExecution( - VersionedKeyValSource[TweetId, List[(ClusterId, Double)]](tweetTopKClustersOutputPath) - ), - tweetTopClusters - .map { - case (tweetId, topKClusters) => - tweetId -> topKClusters - .map { - case (clusterId, score) => - s"$clusterId:" + "%.3g".format(score) - } - .mkString(",") - } - .writeExecution( - TypedTsv(tweetTopKClustersOutputPath + "_tsv") - ), - tweetSubset.writeExecution(TypedTsv(tweetTopKClustersOutputPath + "_tweet_favs")), - clusterTopTweets - .mapValues(_.toList) - .writeExecution( - VersionedKeyValSource[ClusterId, List[(TweetId, Double)]](clusterTopKTweetsOutputPath) - ), - clusterTopTweets - .map { - case (clusterId, topKTweets) => - clusterId -> topKTweets - .map { - case (tweetId, score) => s"$tweetId:" + "%.3g".format(score) - } - .mkString(",") - } - .writeExecution( - TypedTsv(clusterTopKTweetsOutputPath + "_tsv") - ) - ) - .unit - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/TweetSimilarityEvaluationAdhocApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc/TweetSimilarityEvaluationAdhocApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..58e53f64e47cce7fa268a4da420403bfb74d6a66 GIT binary patch literal 40465 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 avCH0}x)LsW2K}5> - tweetId -> 1L - } - .sumByKey - .filter(_._2 >= 10L) // only consider tweets with more than 10 favs - .map { - case (tweetId, tweetFavs) => - val bucket = math.log10(tweetFavs + 1.0).toInt - bucket -> (tweetId, random.nextDouble()) - } - .group - .sortedReverseTake(topK)(Ordering.by(_._2)) - .flatMap { - case (bucket, tweets) => - val bucketSize = tweets.length - tweets.map { - case (tweetId, _) => - (tweetId, bucket, bucketSize) - } - } - .writeExecution( - TypedTsv[(Long, Int, Int)](output) - ) - - } -} - -/** - * - * A job for evaluating the performance of an approximate nearest neighbor search method with a brute - * force method. - * - * Evaluation method: - * - * After getting the embeddings for these tweets, we bucketize tweets based on the number of favs they have - * (i.e., math.log10(numFavors).toInt), and then randomly select 1000 tweets from each bucket. - * We do not include tweets with fewer than 10 favs. We compute the nearest neighbors (in terms of cosine similarity) - * for these tweets using the brute force method and use up to top 100 neighbors with the cosine - * similarity score >0.8 for each tweet as ground-truth set G. - * - * We then compute the nearest neighbors for these tweets based on the approximate nearest neighbor search: for each tweet, we find the top clusters, and then find top tweets in each cluster as potential candidates. We rank these potential candidates by the cosine similarity scores and take top 100 as prediction set P. We evaluate the precision and recall using - * - * Precision = |P \intersect G| / |P| - * Recall = |P \intersect G| / |G| - * - * Note that |P| and |G| can be different, when there are not many neighbors returned. - * - scalding remote run \ - --target src/scala/com/twitter/simclusters_v2/scalding/offline_job/adhoc:tweet_embedding_evaluation-adhoc \ - --user recos-platform \ - --reducers 1000 \ - --main-class com.twitter.simclusters_v2.scalding.offline_job.adhoc.TweetSimilarityEvaluationAdhocApp -- \ - --date 2021-01-27 \ - --tweet_top_k /user/recos-platform/adhoc/tweet_embedding_01_27_28_unnormalized_t9/tweet_top_k_clusters \ - --cluster_top_k /user/recos-platform/adhoc/tweet_embedding_01_27_28_unnormalized_t9/cluster_top_k_tweets \ - --tweets /user/recos-platform/adhoc/tweet_embedding_01_27_28_sample_tweets \ - --output /user/recos-platform/adhoc/tweet_embedding_evaluation_01_27_28_t05_k50_1 - */ -object TweetSimilarityEvaluationAdhocApp extends AdhocExecutionApp { - - implicit val inj1: Injection[List[(Int, Double)], Array[Byte]] = - Bufferable.injectionOf[List[(Int, Double)]] - implicit val inj2: Injection[List[(Long, Double)], Array[Byte]] = - Bufferable.injectionOf[List[(Long, Double)]] - - // Take top 20 candidates, the score * 100 - private def formatList(candidates: Seq[(TweetId, Double)]): Seq[(TweetId, Int)] = { - candidates.take(10).map { - case (clusterId, score) => - (clusterId, (score * 100).toInt) - } - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - // path to read the tweet -> top cluster data set. should be the same from the SimClustersTweetEmbeddingAdhocApp job - val tweetTopKClustersPath = args("tweet_top_k") - - // path to read the cluster -> top tweets data set. should be the same from the SimClustersTweetEmbeddingAdhocApp job - val clusterTopKTweetsPath = args("cluster_top_k") - - // path to read the sampled tweets, should be the same from TweetSimilarityEvaluationSamplingAdhocApp - val tweetsPath = args("tweets") - - // see the comment of this class. this is to determine which tweet should be ground truth - val threshold = args.double("threshold", 0.8) - - // see the comment of this class. this is to determine which tweet should be ground truth - val topK = args.int("topK", 100) - - // output path for evaluation results - val output = args("output") - - // read tweet -> top clusters data set - val tweetTopKClusters: SparseRowMatrix[TweetId, ClusterId, Double] = - SparseRowMatrix( - TypedPipe - .from( - VersionedKeyValSource[TweetId, List[(ClusterId, Double)]](tweetTopKClustersPath) - ) - .mapValues(_.filter(_._2 > 0.001).toMap), - isSkinnyMatrix = true - ).rowL2Normalize - - // read cluster -> top tweets data set - val clusterTopTweets: SparseRowMatrix[ClusterId, TweetId, Double] = - SparseRowMatrix( - TypedPipe - .from( - VersionedKeyValSource[ClusterId, List[(TweetId, Double)]](clusterTopKTweetsPath) - ) - .mapValues(_.filter(_._2 > 0.02).toMap), - isSkinnyMatrix = false - ) - - // read the sampled tweets from TweetSimilarityEvaluationSamplingAdhocApp - val tweetSubset = TypedPipe.from(TypedTsv[(Long, Int, Int)](tweetsPath)) - - // the tweet -> top clusters for the sampled tweets - val tweetEmbeddingSubset = - tweetTopKClusters.filterRows(tweetSubset.map(_._1)) - - // compute ground-truth top similar tweets for each sampled tweets. - // for each sampled tweets, we compute their similarity with every tweets in the tweet -> top clusters data set. - // we filter out those with similarity score smaller than the threshold and keep top k as the ground truth similar tweets - val groundTruthData = tweetTopKClusters.toSparseMatrix - .multiplySkinnySparseRowMatrix( - tweetEmbeddingSubset.toSparseMatrix.transpose.toSparseRowMatrix(true), - numReducersOpt = Some(5000) - ) - .toSparseMatrix - .transpose - .filter((_, _, v) => v > threshold) - .sortWithTakePerRow(topK)(Ordering.by(-_._2)) - - // compute approximate similar tweets for each sampled tweets. - // this is achieved by multiplying "sampled_tweets -> top clusters" matrix with "cluster -> top tweets" matrix. - // note that in the implementation, we first compute the transponse of this matrix in order to ultlize the optimization done on skinny matrices - val predictionData = clusterTopTweets.toSparseMatrix.transpose - .multiplySkinnySparseRowMatrix( - tweetEmbeddingSubset.toSparseMatrix.transpose.toSparseRowMatrix(true), - numReducersOpt = Some(5000) - ) - .toSparseMatrix - .transpose - .toTypedPipe - .map { - case (queryTweet, candidateTweet, _) => - (queryTweet, candidateTweet) - } - .join(tweetEmbeddingSubset.toTypedPipe) - .map { - case (queryId, (candidateId, queryEmbedding)) => - candidateId -> (queryId, queryEmbedding) - } - .join(tweetTopKClusters.toTypedPipe) - .map { - case (candidateId, ((queryId, queryEmbedding), candidateEmbedding)) => - queryId -> (candidateId, CosineSimilarityUtil - .dotProduct( - queryEmbedding, - candidateEmbedding - )) - } - .filter(_._2._2 > threshold) - .group - .sortedReverseTake(topK)(Ordering.by(_._2)) - - // Exist in Ground Truth but not exist in Predication - val potentialData = - groundTruthData - .leftJoin(predictionData) - .map { - case (tweetId, (groundTruthCandidates, predictedCandidates)) => - val predictedCandidateSet = predictedCandidates.toSeq.flatten.map(_._1).toSet - val potentialTweets = groundTruthCandidates.filterNot { - case (candidateId, _) => - predictedCandidateSet.contains(candidateId) - } - (tweetId, potentialTweets) - } - - val debuggingData = - groundTruthData - .leftJoin(predictionData) - .map { - case (tweetId, (groundTruthTweets, maybepredictedTweets)) => - val predictedTweets = maybepredictedTweets.toSeq.flatten - val predictedTweetSet = predictedTweets.map(_._1).toSet - val potentialTweets = groundTruthTweets.filterNot { - case (candidateId, _) => - predictedTweetSet.contains(candidateId) - } - - ( - tweetId, - Seq( - formatList(potentialTweets), - formatList(groundTruthTweets), - formatList(predictedTweets))) - } - - // for each tweet, compare the approximate topk and ground-truth topk. - // compute precision and recall, then averaging them per bucket. - val eval = tweetSubset - .map { - case (tweetId, bucket, bucketSize) => - tweetId -> (bucket, bucketSize) - } - .leftJoin(groundTruthData) - .leftJoin(predictionData) - .map { - case (_, (((bucket, bucketSize), groundTruthOpt), predictionOpt)) => - val groundTruth = groundTruthOpt.getOrElse(Nil).map(_._1) - val prediction = predictionOpt.getOrElse(Nil).map(_._1) - - assert(groundTruth.distinct.size == groundTruth.size) - assert(prediction.distinct.size == prediction.size) - - val intersection = groundTruth.toSet.intersect(prediction.toSet) - - val precision = - if (prediction.nonEmpty) - intersection.size.toDouble / prediction.size.toDouble - else 0.0 - val recall = - if (groundTruth.nonEmpty) - intersection.size.toDouble / groundTruth.size.toDouble - else 0.0 - - ( - bucket, - bucketSize) -> (groundTruth.size, prediction.size, intersection.size, precision, recall, 1.0) - } - .sumByKey - .map { - case ( - (bucket, bucketSize), - (groundTruthSum, predictionSum, interSectionSum, precisionSum, recallSum, count)) => - ( - bucket, - bucketSize, - groundTruthSum / count, - predictionSum / count, - interSectionSum / count, - precisionSum / count, - recallSum / count, - count) - } - - // output the eval results and some sample results for eyeballing - Execution - .zip( - eval - .writeExecution(TypedTsv(output)), - groundTruthData - .map { - case (tweetId, neighbors) => - tweetId -> neighbors - .map { - case (id, score) => s"$id:$score" - } - .mkString(",") - } - .writeExecution( - TypedTsv(args("output") + "_ground_truth") - ), - predictionData - .map { - case (tweetId, neighbors) => - tweetId -> neighbors - .map { - case (id, score) => s"$id:$score" - } - .mkString(",") - } - .writeExecution( - TypedTsv(args("output") + "_prediction") - ), - potentialData - .map { - case (tweetId, neighbors) => - tweetId -> neighbors - .map { - case (id, score) => s"$id:$score" - } - .mkString(",") - }.writeExecution( - TypedTsv(args("output") + "_potential") - ), - debuggingData - .map { - case (tweetId, candidateList) => - val value = candidateList - .map { candidates => - candidates - .map { - case (id, score) => - s"${id}D$score" - }.mkString("C") - }.mkString("B") - s"${tweetId}A$value" - }.writeExecution( - TypedTsv(args("output") + "_debugging") - ) - ) - .unit - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/BUILD.bazel deleted file mode 100644 index f1293bac2..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/BUILD.bazel +++ /dev/null @@ -1,27 +0,0 @@ -scala_library( - sources = [ - "*.scala", - ], - platform = "java8", - tags = ["bazel-only"], - dependencies = [ - "src/scala/com/twitter/simclusters_v2/scalding", - "tweetsource/public_tweets/src/main/scala/com/twitter/tweetsource/public_tweets:public_tweets-scala", - "usersource/snapshot/src/main/scala/com/twitter/usersource/snapshot/flat:usersource_flat-scala", - ], -) - -hadoop_binary( - name = "offline_cluster_top_media_tweets_20M_145K_2020-adhoc", - main = "com.twitter.simclusters_v2.scalding.offline_tweets.AdhocClusterTopTweetsJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":offline_tweets", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..3b0b06018b2614cfee7a3529aa38eff8536b566e GIT binary patch literal 36967 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/ClusterTopMediaTweetsJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/ClusterTopMediaTweetsJob.scala deleted file mode 100644 index f966a6a93..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/ClusterTopMediaTweetsJob.scala +++ /dev/null @@ -1,267 +0,0 @@ -package com.twitter.simclusters_v2.scalding.offline_tweets - -import com.twitter.algebird.Aggregator.size -import com.twitter.finagle.mtls.authentication.ServiceIdentifier -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding.Args -import com.twitter.scalding.DateOps -import com.twitter.scalding.DateParser -import com.twitter.scalding.DateRange -import com.twitter.scalding.Days -import com.twitter.scalding.Duration -import com.twitter.scalding.Execution -import com.twitter.scalding.Hours -import com.twitter.scalding.RichDate -import com.twitter.scalding.TypedTsv -import com.twitter.scalding.UniqueID -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.DALWrite.WriteExtension -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.Timestamp -import com.twitter.simclusters_v2.common.TweetId -import com.twitter.simclusters_v2.hdfs_sources.DataPaths -import com.twitter.simclusters_v2.hdfs_sources.OfflineClusterTopMediaTweets20M145K2020ScalaDataset -import com.twitter.simclusters_v2.scalding.common.LogFavBasedPersistentTweetEmbeddingMhExportSource -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import com.twitter.simclusters_v2.thriftscala.DayPartitionedClusterId -import com.twitter.simclusters_v2.thriftscala.PersistentSimClustersEmbedding -import com.twitter.simclusters_v2.thriftscala.TweetWithScore -import com.twitter.simclusters_v2.thriftscala.TweetsWithScore -import com.twitter.snowflake.id.SnowflakeId -import com.twitter.tweetsource.common.thriftscala.MediaType -import com.twitter.tweetsource.common.thriftscala.UnhydratedFlatTweet -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone -import java.text.SimpleDateFormat - -object ClusterTopTweetsJob { - - def serviceIdentifier(zone: String, env: String): ServiceIdentifier = ServiceIdentifier( - role = "cassowary", - service = "offline_cluster_top_media_tweets_20M_145K_2020", - environment = env, - zone = zone - ) - - private def isMediaTweet(tweet: UnhydratedFlatTweet): Boolean = { - tweet.media.exists { mediaSeq => - mediaSeq.exists { e => - e.mediaType.contains(MediaType.Video) - } - } - } - - private val dateFormatter = new SimpleDateFormat("yyyy-MM-dd") - - def getClusterTopMediaTweets( - persistentEmbeddingPipe: TypedPipe[((TweetId, Timestamp), PersistentSimClustersEmbedding)], - tweetSourcePipe: TypedPipe[UnhydratedFlatTweet], - maxTweetsPerClusterPerPartition: Int - ): TypedPipe[(DayPartitionedClusterId, Seq[(TweetId, Double)])] = { - val mediaTweetsPipe = tweetSourcePipe.collect { - case tweet if isMediaTweet(tweet) => (tweet.tweetId, ()) - } - - val tweetEmbeddingsPipe: TypedPipe[(TweetId, (Int, Double))] = { - persistentEmbeddingPipe.collect { - case ((tweetId, timestamp), persistentEmbedding) - if timestamp == 1L => // 1L is the longest L2 embedding - - persistentEmbedding.embedding.embedding.map { clusterWithScore => - (tweetId, (clusterWithScore.clusterId, clusterWithScore.score)) - } - }.flatten - } - - mediaTweetsPipe - .join(tweetEmbeddingsPipe) - .withReducers(2000) - .map { - case (tweetId, ((), (clusterId, score))) => - val dayPartition = dateFormatter.format(SnowflakeId(tweetId).time.inMilliseconds) - ((clusterId, dayPartition), Seq((tweetId, score))) - } - .sumByKey - .mapValues(_.sortBy(-_._2).take(maxTweetsPerClusterPerPartition)) - .map { case ((cid, partition), values) => (DayPartitionedClusterId(cid, partition), values) } - } - - // Convert to Manhattan compatible format - def toKeyVal( - clusterTopTweets: TypedPipe[(DayPartitionedClusterId, Seq[(TweetId, Double)])], - ): TypedPipe[KeyVal[DayPartitionedClusterId, TweetsWithScore]] = { - clusterTopTweets.map { - case (key, tweetsWithScores) => - val thrift = tweetsWithScores.map { t => TweetWithScore(t._1, t._2) } - KeyVal(key, TweetsWithScore(thrift)) - } - } -} - -/** - * Scheduled job. Runs every couple of hours (check the .yaml for exact cron schedule). - * Reads 21 days of tweets, and the most recent persistent tweet embeddings from a Manhattan dump. - * It outputs a clusterId-> List[tweetId] index. - -capesospy-v2 update --build_locally --start_cron \ -offline_cluster_top_media_tweets_20M_145K_2020 src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object ClusterTopMediaTweets20M145K2020BatchJob extends ScheduledExecutionApp { - override def firstTime: RichDate = RichDate("2021-08-29") - - override def batchIncrement: Duration = Hours(3) - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - // max public tweet has 21 days. read 1 day fewer go give some buffer - val lookbackDateRange = dateRange.prepend(Days(21)) - - val tweetSource: TypedPipe[UnhydratedFlatTweet] = - ExternalDataSources.flatTweetsSource(lookbackDateRange) - - val persistentEmbeddingPipe: TypedPipe[ - ((TweetId, Timestamp), PersistentSimClustersEmbedding) - ] = - TypedPipe.from( - new LogFavBasedPersistentTweetEmbeddingMhExportSource( - range = lookbackDateRange, - serviceIdentifier = ClusterTopTweetsJob.serviceIdentifier(args("zone"), args("env")) - )) - - val maxTweetsPerClusterPerPartition = 1200 - - val dailyClusterTopTweets = ClusterTopTweetsJob.getClusterTopMediaTweets( - persistentEmbeddingPipe, - tweetSource, - maxTweetsPerClusterPerPartition - ) - - val keyValPipe: TypedPipe[KeyVal[DayPartitionedClusterId, TweetsWithScore]] = - ClusterTopTweetsJob.toKeyVal(dailyClusterTopTweets) - - keyValPipe - .writeDALVersionedKeyValExecution( - OfflineClusterTopMediaTweets20M145K2020ScalaDataset, - D.Suffix(DataPaths.OfflineClusterTopMediaTweets2020DatasetPath) - ) - } -} - -/** -Adhoc debugging job. Uses Entity Embeddings dataset to infer user interests - -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/ &&\ -scalding remote run \ - --main-class com.twitter.simclusters_v2.scalding.offline_tweets.AdhocClusterTopMediaTweetsJob \ - --target src/scala/com/twitter/simclusters_v2/scalding/offline_tweets/:offline_cluster_top_media_tweets_20M_145K_2020-adhoc \ - --user cassowary \ - -- --output_dir /scratch_user/cassowary/your_ldap --date 2021-08-30 --zone atla --env prod --email your_ldap@twitter.com - */ -object AdhocClusterTopMediaTweetsJob extends AdhocExecutionApp { - - /** - * Run some stat analysis on the results, such as the number of tweets in a cluster, tweet score - * distributions, etc. - * - * Ideally works on 1 day data only. If multiple days data are passed in, it'll aggregate over - * multiple days anyway - */ - def analyzeClusterResults( - clusterTopTweets: TypedPipe[(DayPartitionedClusterId, Seq[(TweetId, Double)])] - ): Execution[String] = { - - val tweetSizeExec = Util.printSummaryOfNumericColumn( - clusterTopTweets.map { case (_, tweets) => tweets.size }, - columnName = Some("Tweet size distribution of clusters") - ) - - val scoreDistExec = Util.printSummaryOfNumericColumn( - clusterTopTweets.flatMap(_._2.map(_._2)), - columnName = Some("Score distribution of the tweets") - ) - - val numClustersExec = - clusterTopTweets.map(_._1._1).distinct.aggregate(size).getOrElseExecution(0L) - - val numTweetsExec = - clusterTopTweets.flatMap(_._2.map(_._1)).distinct.aggregate(size).getOrElseExecution(0L) - - Execution.zip(tweetSizeExec, scoreDistExec, numClustersExec, numTweetsExec).map { - case (tweetSizeDist, scoreDist, numClusters, numTweets) => - s""" - |Number of unique tweets = $numTweets - |Number of clusters = $numClusters - |------------------------ - |$tweetSizeDist - |------------------------ - |$scoreDist - |""".stripMargin - } - } - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val startTime = System.currentTimeMillis() - Execution.withArgs { args => - Execution.getMode.flatMap { implicit mode => - implicit val dateRange: DateRange = - DateRange.parse(args.list("date"))(DateOps.UTC, DateParser.default) - - val outputDir = args("output_dir") - - val maxTweetsPerCluster = 100 - - // max public tweet has 21 days. read 1 day fewer go give some buffer - val lookbackDateRange = dateRange.prepend(Days(21)) - - val tweetSource: TypedPipe[UnhydratedFlatTweet] = - ExternalDataSources.flatTweetsSource(lookbackDateRange) - - val persistentEmbeddingPipe: TypedPipe[ - ((TweetId, Timestamp), PersistentSimClustersEmbedding) - ] = - TypedPipe.from( - new LogFavBasedPersistentTweetEmbeddingMhExportSource( - range = lookbackDateRange, - serviceIdentifier = ClusterTopTweetsJob.serviceIdentifier(args("zone"), args("env")) - )) - - val results = ClusterTopTweetsJob.getClusterTopMediaTweets( - persistentEmbeddingPipe, - tweetSource, - maxTweetsPerCluster - ) - analyzeClusterResults(TypedPipe.empty) - .flatMap { distributions => - val timeTakenMin = (System.currentTimeMillis() - startTime) / 60000 - val text = - s""" - | AdhocClusterTopMediaTweetsJob finished on: $dateRange. - | Time taken: $timeTakenMin minutes. - | maxTweetsPerCluster: $maxTweetsPerCluster. - | output_dir: $outputDir - | - | $distributions - """.stripMargin - Util.sendEmail(text, "AdhocClusterTopMediaTweetsJob finished.", args("email")) - - results - .writeExecution(TypedTsv(outputDir)) - } - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/optout/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/optout/BUILD.bazel deleted file mode 100644 index af06cdd1a..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/optout/BUILD.bazel +++ /dev/null @@ -1,81 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = [ - "bazel-compatible", - "bazel-only", - ], - dependencies = [ - "src/scala/com/twitter/octain/p13n/batch:p13n_preferences-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:data_sources", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/scalding/inferred_entities", - "src/scala/com/twitter/wtf/scalding/jobs/common:cassowary_job", - "src/scala/com/twitter/wtf/scalding/jobs/common:execution_app", - "src/scala/com/twitter/wtf/scalding/jobs/common:sources", - "src/scala/com/twitter/wtf/scalding/jobs/common:stats_util", - ], -) - -hadoop_binary( - name = "known_for_optout-adhoc", - main = "com.twitter.simclusters_v2.scalding.optout.KnownForOptOutAdhocJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":optout", - ], -) - -hadoop_binary( - name = "known_for_optout_daily", - main = "com.twitter.simclusters_v2.scalding.optout.KnownForOptOutDailyBatchJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":optout", - ], -) - -hadoop_binary( - name = "interested_in_optout-adhoc", - main = "com.twitter.simclusters_v2.scalding.optout.InterestedInOptOutAdhocJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - "known-to-fail-jira:SD-14439", - ], - dependencies = [ - ":optout", - ], -) - -hadoop_binary( - name = "interested_in_optout_daily", - main = "com.twitter.simclusters_v2.scalding.optout.InterestedInOptOutDailyBatchJob", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":optout", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/optout/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/optout/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..d2cc91926f8673ab7ce6077dd011934357c298e1 GIT binary patch literal 37110 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 C6<>k? literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/optout/InterestedInOptOut.docx b/src/scala/com/twitter/simclusters_v2/scalding/optout/InterestedInOptOut.docx new file mode 100644 index 0000000000000000000000000000000000000000..34726bbcb727c563bf783e7d6da4240f2d602010 GIT binary patch literal 39171 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%0AJ7~+5{9s1{C`v4c@}OT;dh}@$NS2chCXhfhO5o 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 Z9ghxmHOK)E`sr1SAS=K<5;K1O`yXeyY()S7 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/optout/InterestedInOptOut.scala b/src/scala/com/twitter/simclusters_v2/scalding/optout/InterestedInOptOut.scala deleted file mode 100644 index 3e24c7b0c..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/optout/InterestedInOptOut.scala +++ /dev/null @@ -1,269 +0,0 @@ -package com.twitter.simclusters_v2.scalding.optout - -import com.twitter.dal.client.dataset.{KeyValDALDataset, SnapshotDALDataset} -import com.twitter.scalding.{ - Args, - DateRange, - Days, - Duration, - Execution, - RichDate, - TypedPipe, - TypedTsv, - UniqueID -} -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.{ClusterId, ModelVersions, SemanticCoreEntityId, UserId} -import com.twitter.simclusters_v2.hdfs_sources._ -import com.twitter.simclusters_v2.scalding.inferred_entities.InferredEntities -import com.twitter.simclusters_v2.thriftscala.{ - ClusterType, - ClustersUserIsInterestedIn, - SemanticCoreEntityWithScore, - UserToInterestedInClusters -} -import com.twitter.wtf.scalding.jobs.common.{AdhocExecutionApp, ScheduledExecutionApp} -import com.twitter.simclusters_v2.scalding.common.TypedRichPipe._ -import com.twitter.simclusters_v2.scalding.common.Util -import java.util.TimeZone - -object InterestedInOptOut { - - def filterOptedOutInterestedIn( - interestedInPipe: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - optedOutEntities: TypedPipe[(UserId, Set[SemanticCoreEntityId])], - clusterToEntities: TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] - ): TypedPipe[(UserId, ClustersUserIsInterestedIn)] = { - - val validInterestedIn = SimClustersOptOutUtil.filterOptedOutClusters( - userToClusters = interestedInPipe.mapValues(_.clusterIdToScores.keySet.toSeq), - optedOutEntities = optedOutEntities, - legibleClusters = clusterToEntities - ) - - interestedInPipe - .leftJoin(validInterestedIn) - .mapValues { - case (originalInterestedIn, validInterestedInOpt) => - val validInterestedIn = validInterestedInOpt.getOrElse(Seq()).toSet - - originalInterestedIn.copy( - clusterIdToScores = originalInterestedIn.clusterIdToScores.filterKeys(validInterestedIn) - ) - } - .filter(_._2.clusterIdToScores.nonEmpty) - } - - /** - * Writes InterestedIn data to HDFS - */ - def writeInterestedInOutputExecution( - interestedIn: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - interestedInDataset: KeyValDALDataset[KeyVal[Long, ClustersUserIsInterestedIn]], - outputPath: String - ): Execution[Unit] = { - interestedIn - .map { case (k, v) => KeyVal(k, v) } - .writeDALVersionedKeyValExecution( - interestedInDataset, - D.Suffix(outputPath) - ) - } - - /** - * Convert InterestedIn to thrift structs, then write to HDFS - */ - def writeInterestedInThriftOutputExecution( - interestedIn: TypedPipe[(UserId, ClustersUserIsInterestedIn)], - modelVersion: String, - interestedInThriftDatset: SnapshotDALDataset[UserToInterestedInClusters], - thriftOutputPath: String, - dateRange: DateRange - ): Execution[Unit] = { - interestedIn - .map { - case (userId, clusters) => - UserToInterestedInClusters(userId, modelVersion, clusters.clusterIdToScores) - } - .writeDALSnapshotExecution( - interestedInThriftDatset, - D.Daily, - D.Suffix(thriftOutputPath), - D.EBLzo(), - dateRange.end - ) - } -} - -/** -capesospy-v2 update --build_locally --start_cron \ - --start_cron interested_in_optout_daily \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object InterestedInOptOutDailyBatchJob extends ScheduledExecutionApp { - - override def firstTime: RichDate = RichDate("2019-11-24") - - override def batchIncrement: Duration = Days(1) - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val userOptoutEntities = - SimClustersOptOutUtil - .getP13nOptOutSources(dateRange.embiggen(Days(4)), ClusterType.InterestedIn) - .count("num_users_with_optouts") - .forceToDisk - - val interestedIn2020Pipe = InterestedInSources - .simClustersRawInterestedIn2020Source(dateRange, timeZone) - .count("num_users_with_2020_interestedin") - - val interestedInLite2020Pipe = InterestedInSources - .simClustersRawInterestedInLite2020Source(dateRange, timeZone) - .count("num_users_with_2020_interestedin_lite") - - val clusterToEntities = InferredEntities - .getLegibleEntityEmbeddings(dateRange.prepend(Days(21)), timeZone) - .count("num_cluster_to_entities") - - val filtered2020InterestedIn = InterestedInOptOut - .filterOptedOutInterestedIn(interestedIn2020Pipe, userOptoutEntities, clusterToEntities) - .count("num_users_with_compliant_2020_interestedin") - - val write2020Exec = InterestedInOptOut.writeInterestedInOutputExecution( - filtered2020InterestedIn, - SimclustersV2InterestedIn20M145K2020ScalaDataset, - DataPaths.InterestedIn2020Path - ) - - val write2020ThriftExec = InterestedInOptOut.writeInterestedInThriftOutputExecution( - filtered2020InterestedIn, - ModelVersions.Model20M145K2020, - SimclustersV2UserToInterestedIn20M145K2020ScalaDataset, - DataPaths.InterestedIn2020ThriftPath, - dateRange - ) - - val sanityCheck2020Exec = SimClustersOptOutUtil.sanityCheckAndSendEmail( - oldNumClustersPerUser = interestedIn2020Pipe.map(_._2.clusterIdToScores.size), - newNumClustersPerUser = filtered2020InterestedIn.map(_._2.clusterIdToScores.size), - modelVersion = ModelVersions.Model20M145K2020, - alertEmail = SimClustersOptOutUtil.AlertEmail - ) - - val filtered2020InterestedInLite = InterestedInOptOut - .filterOptedOutInterestedIn(interestedInLite2020Pipe, userOptoutEntities, clusterToEntities) - .count("num_users_with_compliant_2020_interestedin_lite") - - val write2020LiteExec = InterestedInOptOut.writeInterestedInOutputExecution( - filtered2020InterestedInLite, - SimclustersV2InterestedInLite20M145K2020ScalaDataset, - DataPaths.InterestedInLite2020Path - ) - - val write2020LiteThriftExec = InterestedInOptOut.writeInterestedInThriftOutputExecution( - filtered2020InterestedInLite, - ModelVersions.Model20M145K2020, - SimclustersV2UserToInterestedInLite20M145K2020ScalaDataset, - DataPaths.InterestedInLite2020ThriftPath, - dateRange - ) - - val sanityCheck2020LiteExec = SimClustersOptOutUtil.sanityCheckAndSendEmail( - oldNumClustersPerUser = interestedInLite2020Pipe.map(_._2.clusterIdToScores.size), - newNumClustersPerUser = filtered2020InterestedInLite.map(_._2.clusterIdToScores.size), - modelVersion = ModelVersions.Model20M145K2020, - alertEmail = SimClustersOptOutUtil.AlertEmail - ) - - Util.printCounters( - Execution.zip( - Execution.zip( - write2020Exec, - write2020ThriftExec, - sanityCheck2020Exec), - Execution.zip( - write2020LiteExec, - write2020LiteThriftExec, - sanityCheck2020LiteExec - ) - ) - ) - } -} - -/** - * For debugging only. Does a filtering run and prints the differences before/after the opt out - - scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/optout:interested_in_optout-adhoc \ - --user cassowary --cluster bluebird-qus1 \ - --main-class com.twitter.simclusters_v2.scalding.optout.InterestedInOptOutAdhocJob -- \ - --keytab /var/lib/tss/keys/fluffy/keytabs/client/cassowary.keytab \ - --principal service_acoount@TWITTER.BIZ \ - -- \ - --outputDir /user/cassowary/adhoc/interestedin_optout \ - --date 2020-09-03 - */ -object InterestedInOptOutAdhocJob extends AdhocExecutionApp { - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val outputDir = args("outputDir") - - val interestedInPipe = InterestedInSources - .simClustersInterestedInUpdatedSource(dateRange, timeZone) - .count("num_users_with_interestedin") - - val userOptoutEntities: TypedPipe[(UserId, Set[SemanticCoreEntityId])] = - SimClustersOptOutUtil - .getP13nOptOutSources(dateRange.embiggen(Days(4)), ClusterType.InterestedIn) - .count("num_users_with_optouts") - - val clusterToEntities = InferredEntities - .getLegibleEntityEmbeddings(dateRange, timeZone) - .count("num_cluster_to_entities") - - val filteredInterestedInPipe = InterestedInOptOut - .filterOptedOutInterestedIn( - interestedInPipe, - userOptoutEntities, - clusterToEntities - ) - .count("num_users_with_interestedin_after_optout") - - val output = interestedInPipe - .join(filteredInterestedInPipe) - .filter { - case (userId, (originalInterestedIn, filtered)) => - originalInterestedIn.clusterIdToScores != filtered.clusterIdToScores - } - .join(userOptoutEntities) - .map { - case (userId, ((originalInterestedIn, filtered), optoutEntities)) => - Seq( - "userId=" + userId, - "originalInterestedInVersion=" + originalInterestedIn.knownForModelVersion, - "originalInterestedIn=" + originalInterestedIn.clusterIdToScores.keySet, - "filteredInterestedIn=" + filtered.knownForModelVersion, - "filteredInterestedIn=" + filtered.clusterIdToScores.keySet, - "optoutEntities=" + optoutEntities - ).mkString("\t") - } - - Util.printCounters( - output.writeExecution(TypedTsv(outputDir)) - ) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/optout/KnownForOptOut.docx b/src/scala/com/twitter/simclusters_v2/scalding/optout/KnownForOptOut.docx new file mode 100644 index 0000000000000000000000000000000000000000..a4a644d23129ee76cf133ce29baa0c56127d8ffb GIT binary patch literal 38973 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 KnownFor data and users' - * opt-out selections from YourTwitterData. In essence, we remove any cluster whose inferred - * entities were opted out by the user. - * The opted out KnownFor dataset should be the default dataset to be consumed, instead of the - * plain KnownFor, which is not opt-out compliant. - */ -object KnownForOptOut { - - def filterOptedOutKnownFor( - knownForPipe: TypedPipe[(UserId, ClustersUserIsKnownFor)], - optedOutEntities: TypedPipe[(UserId, Set[SemanticCoreEntityId])], - clusterToEntities: TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] - ): TypedPipe[(UserId, ClustersUserIsKnownFor)] = { - - val validKnownFor = SimClustersOptOutUtil.filterOptedOutClusters( - userToClusters = knownForPipe.mapValues(_.clusterIdToScores.keySet.toSeq), - optedOutEntities = optedOutEntities, - legibleClusters = clusterToEntities - ) - - knownForPipe - .leftJoin(validKnownFor) - .mapValues { - case (originalKnownFors, validKnownForOpt) => - val validKnownFor = validKnownForOpt.getOrElse(Seq()).toSet - - originalKnownFors.copy( - clusterIdToScores = originalKnownFors.clusterIdToScores.filterKeys(validKnownFor) - ) - } - .filter(_._2.clusterIdToScores.nonEmpty) - } -} - -/** -capesospy-v2 update --build_locally --start_cron \ - --start_cron known_for_optout_daily \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ -object KnownForOptOutDailyBatchJob extends ScheduledExecutionApp { - override def firstTime: RichDate = RichDate("2021-03-29") - - override def batchIncrement: Duration = Days(1) - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val optedOutEntitiesPipe = SimClustersOptOutUtil - .getP13nOptOutSources(dateRange.embiggen(Days(2)), ClusterType.KnownFor) - .forceToDisk - - val clusterToEntitiesPipe = InferredEntities.getLegibleEntityEmbeddings(dateRange, timeZone) - - val knownFor2020 = DAL - .readMostRecentSnapshot( - SimclustersV2RawKnownFor20M145K2020ScalaDataset, - dateRange.embiggen(Days(10))) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe - .map { case KeyVal(k, v) => (k, v) } - .count("num_users_with_2020_knownfor") - - val filtered2020KnownForExec = { - val filtered2020KnownForData = KnownForOptOut - .filterOptedOutKnownFor( - knownForPipe = knownFor2020, - optedOutEntities = optedOutEntitiesPipe, - clusterToEntities = clusterToEntitiesPipe - ) - .count("num_users_with_compliant_2020_knownfor") - .forceToDisk - - Execution - .zip( - filtered2020KnownForData - .map { case (k, v) => KeyVal(k, v) } - .writeDALVersionedKeyValExecution( - SimclustersV2KnownFor20M145K2020ScalaDataset, - D.Suffix(DataPaths.KnownFor2020Path) - ), - filtered2020KnownForData - .map { - case (userId, ClustersUserIsKnownFor(modelVersion, clusters)) => - UserToKnownForClusters(userId, modelVersion, clusters) - } - .writeDALSnapshotExecution( - dataset = SimclustersV2KnownFor20M145K2020ThriftScalaDataset, - updateStep = D.Daily, - pathLayout = D.Suffix(DataPaths.KnownFor2020ThriftDatasetPath), - fmt = D.Parquet, - endDate = dateRange.end - ) - ).unit - } - - Util.printCounters(filtered2020KnownForExec) - - } -} - -/** - * For debugging only. Does a filtering run and prints the differences before/after the opt out -./bazel bundle src/scala/com/twitter/simclusters_v2/scalding/optout:knownfor_optout-adhoc && \ - oscar hdfs --user recos-platform --screen --tee your_ldap \ - --bundle knownfor_optout-adhoc \ - --tool com.twitter.simclusters_v2.scalding.optout.KnownForOptOutAdhocJob \ - -- --date 2019-10-12 - */ -object KnownForOptOutAdhocJob extends AdhocExecutionApp { - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val knownForPipe = DAL - .readMostRecentSnapshotNoOlderThan(SimclustersV2RawKnownFor20M145KDec11ScalaDataset, Days(30)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .map { case KeyVal(k, v) => (k, v) } - .count("num_users_with_knownfor") - - val userOptoutEntities: TypedPipe[(UserId, Set[SemanticCoreEntityId])] = - SimClustersOptOutUtil - .getP13nOptOutSources(dateRange.embiggen(Days(4)), ClusterType.KnownFor) - .count("num_users_with_optouts") - - val clusterToEntities = InferredEntities - .getLegibleEntityEmbeddings(dateRange, timeZone) - .count("num_cluster_to_entities") - - val filteredKnownForPipe = KnownForOptOut.filterOptedOutKnownFor( - knownForPipe, - userOptoutEntities, - clusterToEntities - ) - - val output = knownForPipe - .join(filteredKnownForPipe) - .collect { - case (userId, (originalKnownFor, filtered)) - if originalKnownFor.clusterIdToScores != filtered.clusterIdToScores => - (userId, (originalKnownFor, filtered)) - } - .join(userOptoutEntities) - .map { - case (userId, ((originalKnownFor, filtered), optoutEntities)) => - Seq( - "userId=" + userId, - "originalKnownFor=" + originalKnownFor, - "filteredKnownFor=" + filtered, - "optoutEntities=" + optoutEntities - ).mkString("\t") - } - - val outputPath = "/user/recos-platform/adhoc/knownfor_optout" - output.writeExecution(TypedTsv(outputPath)) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/optout/SimClustersOptOutUtil.docx b/src/scala/com/twitter/simclusters_v2/scalding/optout/SimClustersOptOutUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..17f930aeb402c2732286950f05f25372da303e73 GIT binary patch literal 38693 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 Q*IC60u>+ (record.id, record.preferences) } - .flatMap { - case (RawId.UserId(userId), p13nPreferences) => - val optedOutEntities = p13nPreferences.interestPreferences - .map { preference => - preference.disabledInterests - .collect { - case CompositeInterest.RecommendationInterest(recInterest) - if clusterType == ClusterType.InterestedIn => - recInterest.interest match { - case Interest.SemanticEntityInterest(semanticCoreInterest) => - Some(semanticCoreInterest.entityId) - case _ => - None - } - - case CompositeInterest.RecommendationKnownFor(recInterest) - if clusterType == ClusterType.KnownFor => - recInterest.interest match { - case Interest.SemanticEntityInterest(semanticCoreInterest) => - Some(semanticCoreInterest.entityId) - case _ => - None - } - }.flatten.toSet - }.getOrElse(Set.empty) - if (optedOutEntities.nonEmpty) { - Some((userId, optedOutEntities)) - } else { - None - } - case _ => - None - } - } - - /** - * Remove user's clusters whose inferred entity embeddings are opted out. Will retain the user - * entry in the pipe even if all the clusters are filtered out. - */ - def filterOptedOutClusters( - userToClusters: TypedPipe[(UserId, Seq[ClusterId])], - optedOutEntities: TypedPipe[(UserId, Set[SemanticCoreEntityId])], - legibleClusters: TypedPipe[(ClusterId, Seq[SemanticCoreEntityWithScore])] - ): TypedPipe[(UserId, Seq[ClusterId])] = { - - val inMemoryValidClusterToEntities = - legibleClusters - .mapValues(_.map(_.entityId).toSet) - .map(Map(_)).sum - - userToClusters - .leftJoin(optedOutEntities) - .mapWithValue(inMemoryValidClusterToEntities) { - case ((userId, (userClusters, optedOutEntitiesOpt)), validClusterToEntitiesOpt) => - val optedOutEntitiesSet = optedOutEntitiesOpt.getOrElse(Set.empty) - val validClusterToEntities = validClusterToEntitiesOpt.getOrElse(Map.empty) - - val clustersAfterOptOut = userClusters.filter { clusterId => - val isClusterOptedOut = validClusterToEntities - .getOrElse(clusterId, Set.empty) - .intersect(optedOutEntitiesSet) - .nonEmpty - !isClusterOptedOut - }.distinct - - (userId, clustersAfterOptOut) - } - .filter { _._2.nonEmpty } - } - - val AlertEmail = "no-reply@twitter.com" - - /** - * Does sanity check on the results, to make sure the opt out outputs are comparable to the - * raw version. If the delta in the number of users >= 0.1% or median of number of clusters per - * user >= 1%, send alert emails - */ - def sanityCheckAndSendEmail( - oldNumClustersPerUser: TypedPipe[Int], - newNumClustersPerUser: TypedPipe[Int], - modelVersion: String, - alertEmail: String - ): Execution[Unit] = { - val oldNumUsersExec = oldNumClustersPerUser.aggregate(size).toOptionExecution - val newNumUsersExec = newNumClustersPerUser.aggregate(size).toOptionExecution - - val oldMedianExec = oldNumClustersPerUser - .aggregate(QTreeAggregatorLowerBound(0.5)) - .toOptionExecution - - val newMedianExec = newNumClustersPerUser - .aggregate(QTreeAggregatorLowerBound(0.5)) - .toOptionExecution - - Execution - .zip(oldNumUsersExec, newNumUsersExec, oldMedianExec, newMedianExec) - .map { - case (Some(oldNumUsers), Some(newNumUsers), Some(oldMedian), Some(newMedian)) => - val deltaNum = (newNumUsers - oldNumUsers).toDouble / oldNumUsers.toDouble - val deltaMedian = (oldMedian - newMedian) / oldMedian - val message = - s"num users before optout=$oldNumUsers,\n" + - s"num users after optout=$newNumUsers,\n" + - s"median num clusters per user before optout=$oldMedian,\n" + - s"median num clusters per user after optout=$newMedian\n" - - println(message) - if (Math.abs(deltaNum) >= 0.001 || Math.abs(deltaMedian) >= 0.01) { - Util.sendEmail( - message, - s"Anomaly in $modelVersion opt out job. Please check cluster optout jobs in Eagleeye", - alertEmail - ) - } - case err => - Util.sendEmail( - err.toString(), - s"Anomaly in $modelVersion opt out job. Please check cluster optout jobs in Eagleeye", - alertEmail - ) - } - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/BUILD b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/BUILD deleted file mode 100644 index d048c58ca..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/BUILD +++ /dev/null @@ -1,168 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "escherbird/src/scala/com/twitter/escherbird/scalding/jobs/exportentities:entities-scala", - "escherbird/src/scala/com/twitter/escherbird/scalding/source/utt:utt_source-scala", - "interests-ds/src/main/scala/com/twitter/interests_ds/jobs/interests_service", - "interests-ds/src/main/scala/com/twitter/interests_ds/jobs/interests_service:user_topic_relation_snapshot-scala", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/job", - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - "src/scala/com/twitter/scalding_internal/source", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/simclusters_v2/candidate_source", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/scala/com/twitter/wtf/scalding/jobs/common:em_util", - "timelines/data_processing/jobs/metrics/per_topic_metrics:per_topic_aggregate_engagement-scala", - ], -) - -hadoop_binary( - name = "geopopular_top_tweets_impressed_topics", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.GeoPopularTopicsBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) - -hadoop_binary( - name = "geopopular_top_tweets_impressed_topics_adhoc", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.GeoPopularTopicsAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) - -hadoop_binary( - name = "similar_topics_from_topic_follow_graph", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.SimilarTopicsFromTopicFollowGraphScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) - -hadoop_binary( - name = "similar_topics_from_topic_follow_graph-adhoc", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.SimilarTopicsFromTopicFollowGraphAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) - -hadoop_binary( - name = "top_topics_for_producers_from_em", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.TopicsForProducersFromEMBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) - -hadoop_binary( - name = "top_topics_for_producers_from_em-adhoc", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.TopicsForProducersFromEMAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) - -hadoop_binary( - name = "top_producers_for_topics_from_topic_follow_graph", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.ProducersForTopicsFromTopicFollowGraphBatchApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) - -hadoop_binary( - name = "top_producers_for_topics_from_topic_follow_graph-adhoc", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.ProducersForTopicsFromTopicFollowGraphAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) - -# Generated with `capesospy-v2 create_target popular_topics_per_country src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml`, config hash beffad. -scalding_job( - name = "popular_topics_per_country", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.GeoPopularTopicsBatchApp", - args = ["--maxTopics 100"], - config = [ - ("hadoop.combine-input", "true"), - ("hadoop.map.jvm.total-memory", "3072m"), - ("hadoop.queue", "cassowary.default"), - ("hadoop.reduce.jvm.total-memory", "3072m"), - ("hadoop.submitter.jvm.total-memory", "5120m"), - ("submitter.tier", "preemptible"), - ], - cron = "16 * * * *", - hadoop_cluster = "atla-proc3", - platform = "java8", - role = "cassowary", - runtime_platform = "java8", - tags = [ - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":topic_recommendations", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..298e3ef0b3527ada39abc89a177ab6e30a5e8aa1 GIT binary patch literal 37656 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 F2LNpJSFiv8 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/GeoPopularTopicsApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/GeoPopularTopicsApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..6357508a6555921fc78bfc52432cb824bf30c02b GIT binary patch literal 38663 zcmagEV|XOp*DoB~p4hhSWRi((Yr+mDwkEc1+qRudY)vr9#P;dA??0dCocH}wef6$d zKde<mY0&z{py=p{m>vv$T*c?CTTJUq}8#gGd=t%T}7EX>Qlaa5xbo^}fpu(plvZm-p@zHxQuq7asI{yh3_8G=f~ic|`E9evo?Y zDn4*t56Cx>rB9~Oc}pTFMD2+)dhvXQFRAz>F4*_FT(Wr}H2y%E|AHZ>52E;ARdlD6 z5q<<#Zwm|r1RnTl;Am#!#KidLSQS6@1)K%N??O;wl%mA0SxvlfRbTvAu28Tyb@IH} z&PS?vt-DJ}Tu&3LkMQVX-^6?=qX2J(uGl6}!&qxEAaA)(bDQR>vBO{kCKrfGN!X0?fzw=_SdeZDeMpC<;e1Y{T2$PC)>aCsG^i{A^%njcwT81d!#n^A zASv6-5nfW&_S42S{86a+o0OrS@JXyas!E!?DGN4tA(FHM`mLDs(M)uCY+EK)`*Vll zSDlJ0#^XRS1r>ca@>{5>PP9R8i$?yExz_#9hYaLoQyL!A=FVGzO1}0pguj{VQZBTc zVphCi#^!W5FaA40q2J+EEP=QA956wszyz5BOcWgf_D)PD07tVwH+fe4g!}+Aio}DL z#Dbi9*bNGdgfuPaN%$8j4F8q3dv*>vn~7}BsqOtjTkTvr7s746ksEu#O|GUEaFgKp zV4{$?3xCsacrDELbz`iJmuv}Io~opv{)^t{`D;oGUX$_O2qjzuxY}%R=?oS<*`-ik zvcY-|_J!}$Bw4M>#d*h~DyVX+-_?cVsoTjAi4QPne);Z|Sh$t~VpDf2(bOHo0c;^&!wk4Ep_f$WZw( z(~P{Hcu&8ciVPS8B!HL38=$mOPTP^xq^8`0lijhy|W**XrtAIraY*ymK?Uf}>+9I3z`EE# zfPkRV(}oGfL+R9faPua7$26yw&Jg+#zr8HT!BNEb-f=?s4!k zNwH~VD^-bEA-n?ot>$Zmd+Ce-$LIaK6RqSVL?lTtqc=8)3HJ(1>eWz5Y&l{)7Q?Q~ z$*&Mr@Sfl9>P>&4=33b5VDrzD37-uFVhIUjyj9&(G(fU<>3H-6QhnC`$3juWd!KEMa|Ll-*AX+y>BSvi$#*TM}m0f z6J2@55~p1ggVrX9O=wO-_pKWT-2CR^Mo6f-2G;})zyA4hm{p6OC~S$p+Kx)@Jv}EV zQ8!Ur@nw&(l0=|-n2J1^;Ki5-kIsbVT;u3SY*|}RUMC7OhXWVYgwhXVoOQU3b} z>k4o*WdiyWX6iyCD zlXZrYYp%fFaii16Hjki%K!VHg@6Nw+ zdm)Xm+nR2O53&JvUZ?!1`F8)ax z3kc3kLTh)LZF>uZw(SYkqpfgqOs2YC^)655AV_KvX};Dvz%>a9yFhz%7>bF*C60i9 z({5IQN58ii(+%&@=SdMQWt2;XA7{&0JTdezY+YD$QHxBAvwLW>-Mr0d;OzMx(ZYS{ zOToG{pNtS!Ju!+`Or=$1at38HI9rrG6jGwwegm@^{*19Ogg|tn#Cc`$ro_5B{Mum=PY)G!YnJW;w=;0Da0%zjNt#( zOY{lM&7VPYTEMu62_1g#Lo)nw5Vh#!ehUJcQ+6-)qw zSTE8^1FPq~NUH9l?9Y1I1POf=ZZ$JRy~pckO+H{bOrh`4MIoJuj~sYJ`B0vkFfJF} zp-I+6QOVQz5j4mS$^L2AE)9uX+;O%WEo26EIaR(tHUUNExCJF1A<6Tj8o(6sEG-+Z3q!^IRI! z4{p+7VDipn%)<6Mvx9uF!R!5O5HFCR?iV!q#2w3D%OYDS#|J{Skv1SERninlKde0E zW}cUpgtRF?`;{9P>3c}voD=teW7@%wJDShYR+SBFnxFCFReEKQh6SfH$GiEHOX9H) zTqZ=F(0@`*GX_v(l!>BvFRqMY!&1`BMzz7bnN?ecPQe~6P>oXghl^Y&!?gbdD

v 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/GeoPopularTopicsApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/GeoPopularTopicsApp.scala deleted file mode 100644 index df4a0707c..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/GeoPopularTopicsApp.scala +++ /dev/null @@ -1,165 +0,0 @@ -package com.twitter.simclusters_v2.scalding.topic_recommendations - -import com.twitter.bijection.Bufferable -import com.twitter.bijection.Injection -import com.twitter.recos.entities.thriftscala.SemanticCoreEntity -import com.twitter.recos.entities.thriftscala.SemanticCoreEntityScoreList -import com.twitter.recos.entities.thriftscala.SemanticEntityScore -import com.twitter.scalding.commons.source.VersionedKeyValSource -import com.twitter.scalding.Execution -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.Proc2Atla -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.SemanticCoreEntityId -import com.twitter.simclusters_v2.hdfs_sources.GeopopularTopTweetImpressedTopicsScalaDataset -import com.twitter.timelines.per_topic_metrics.thriftscala.PerTopicAggregateEngagementMetric -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone -import timelines.data_processing.jobs.metrics.per_topic_metrics.PerTopicAggregateEngagementScalaDataset - -/** - scalding remote run \ - --target src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations:geopopular_top_tweets_impressed_topics_adhoc \ - --main-class com.twitter.simclusters_v2.scalding.topic_recommendations.GeoPopularTopicsAdhocApp \ - --submitter hadoopnest1.atla.twitter.com --user recos-platform \ - -- \ - --date 2020-03-28 --output_dir /user/recos-platform/adhoc/your_ldap/topics_country_counts - */ -object GeoPopularTopicsAdhocApp extends AdhocExecutionApp { - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val maxTopicsPerCountry = args.int("maxTopics", 2000) - val typedTsv = args.boolean("tsv") - implicit val inj: Injection[List[(SemanticCoreEntityId, Double)], Array[Byte]] = - Bufferable.injectionOf[List[(SemanticCoreEntityId, Double)]] - - val perTopicEngagementLogData = DAL - .read(PerTopicAggregateEngagementScalaDataset, dateRange.prepend(Days(7))) - .toTypedPipe - val topicsWithEngagement = - GeoPopularTopicsApp - .getPopularTopicsFromLogs(perTopicEngagementLogData, maxTopicsPerCountry) - .mapValues(_.toList) - - if (typedTsv) { - topicsWithEngagement.writeExecution( - TypedTsv(args("/user/recos-platform/adhoc/your_ldap/topics_country_counts_tsv")) - ) - } else { - topicsWithEngagement.writeExecution( - VersionedKeyValSource[String, List[(SemanticCoreEntityId, Double)]](args("output_dir")) - ) - } - } -} - -/** - capesospy-v2 update --build_locally \ - --start_cron popular_topics_per_country \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object GeoPopularTopicsBatchApp extends ScheduledExecutionApp { - override val firstTime: RichDate = RichDate("2020-04-06") - - override val batchIncrement: Duration = Days(1) - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val maxTopicsPerCountry = args.int("maxTopics", 2000) - - val geoPopularTopicsPath: String = - "/user/cassowary/manhattan_sequence_files/geo_popular_top_tweet_impressed_topics" - - // Read engagement logs from the past 7 days - val perTopicEngagementLogData = DAL - .read(PerTopicAggregateEngagementScalaDataset, dateRange.prepend(Days(7))) - .withRemoteReadPolicy(ExplicitLocation(Proc2Atla)) - .toTypedPipe - - val topicsWithScores = - GeoPopularTopicsApp.getPopularTopicsFromLogs(perTopicEngagementLogData, maxTopicsPerCountry) - - val topicsWithEntityScores = topicsWithScores - .mapValues(_.map { - case (topicid, topicScore) => - SemanticEntityScore(SemanticCoreEntity(entityId = topicid), topicScore) - }) - .mapValues(SemanticCoreEntityScoreList(_)) - - val writeKeyValResultExec = topicsWithEntityScores - .map { case (country, topics) => KeyVal(country, topics) } - .writeDALVersionedKeyValExecution( - GeopopularTopTweetImpressedTopicsScalaDataset, - D.Suffix(geoPopularTopicsPath) - ) - writeKeyValResultExec - } -} - -object GeoPopularTopicsApp { - - def getPopularTopicsFromLogs( - engagementLogs: TypedPipe[PerTopicAggregateEngagementMetric], - maxTopics: Int - )( - implicit uniqueId: UniqueID - ): TypedPipe[(String, Seq[(SemanticCoreEntityId, Double)])] = { - val numTopicEngagementsRead = Stat("num_topic_engagements_read") - val intermediate = engagementLogs - .map { - case PerTopicAggregateEngagementMetric( - topicId, - dateId, - country, - page, - item, - engagementType, - engagementCount, - algorithmType, - annotationType) => - numTopicEngagementsRead.inc() - ( - topicId, - dateId, - country, - page, - item, - engagementType, - engagementCount, - algorithmType, - annotationType) - } - - // We want to find the topics with the most impressed tweets in each country - // This will ensure that the topics suggested as recommendations also have tweets that can be recommended - intermediate - .collect { - case (topicId, _, Some(country), _, item, engagementType, engagementCount, _, _) - if item == "Tweet" && engagementType == "impression" => - ((country, topicId), engagementCount) - } - .sumByKey // returns country-wise engagements for topics - .map { - case ((country, topicId), totalEngagementCountryCount) => - (country, (topicId, totalEngagementCountryCount.toDouble)) - } - .group - .sortedReverseTake(maxTopics)(Ordering.by(_._2)) - .toTypedPipe - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/ProducersForTopicsFromTopicFollowGraph.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/ProducersForTopicsFromTopicFollowGraph.docx new file mode 100644 index 0000000000000000000000000000000000000000..217bfe89a1fbc16b6e5363f9a724b2e98ace6f1e GIT binary patch literal 39054 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 IS>Lw)2ZLK5UjP6A literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/ProducersForTopicsFromTopicFollowGraph.scala b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/ProducersForTopicsFromTopicFollowGraph.scala deleted file mode 100644 index b6d6b567b..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/ProducersForTopicsFromTopicFollowGraph.scala +++ /dev/null @@ -1,206 +0,0 @@ -package com.twitter.simclusters_v2.scalding.topic_recommendations - -import com.twitter.bijection.Bufferable -import com.twitter.bijection.Injection -import com.twitter.recos.entities.thriftscala._ -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.Country -import com.twitter.simclusters_v2.common.Language -import com.twitter.simclusters_v2.common.TopicId -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources.DataSources -import com.twitter.simclusters_v2.hdfs_sources.TopProducersForLocaleTopicsFromTopicFollowGraphScalaDataset -import com.twitter.simclusters_v2.scalding.common.matrix.SparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.ProducerId -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import com.twitter.simclusters_v2.thriftscala.UserAndNeighbors -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * In this file, we compute the top producers for a topic from the Topic Follow Graph - * - * It works as follows: - * - * 1. Producer embedding: List of users who follow the producer's profile and follow atleast one topic - * - * 2. Topic embedding: List of users who follow the topic - * - * 3. Score(producer, topic) = cosine similarity of the producer and topic embedding as defined above - * - * 4. Please note that we compute the top producers for each topic locale. - */ - -/** -scalding remote run --user cassowary \ - --target src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations:top_producers_for_topics_from_topic_follow_graph-adhoc \ - --main-class com.twitter.simclusters_v2.scalding.topic_recommendations.ProducersForTopicsFromTopicFollowGraphAdhocApp \ - --submitter hadoopnest1.atla.twitter.com \ - -- --date 2021-01-06 --minActiveFollowers 400 --maxProducersPerTopic 50 \ - --output_dir_producers_per_topic /user/cassowary/adhoc/ldap/ttf_profile_pages_topics_to_producers - */ - -object ProducersForTopicsFromTopicFollowGraphAdhocApp extends AdhocExecutionApp { - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - import ProducersForTopicsFromTopicFollowGraph._ - val outputDirProducersPerTopic = args("output_dir_producers_per_topic") - val minActiveFollowersForProducer = args.int("minActiveFollowers", 400) - val maxProducersPerTopicPerLocale = args.int("maxProducersPerTopic", 50) - val minTopicFollows = args.int("minTopicFollows", 100) - - val topicsFollowedByProducersFollowers = getTopicsFromProducersFollowers( - DataSources - .userUserNormalizedGraphSource(dateRange.prepend(Days(7))), - ExternalDataSources.topicFollowGraphSource, - ExternalDataSources.userSource, - ExternalDataSources.inferredUserConsumedLanguageSource, - minActiveFollowersForProducer, - minTopicFollows - ) - - sortAndGetTopProducersPerLocaleTopic( - topicsFollowedByProducersFollowers, - maxProducersPerTopicPerLocale).writeExecution(TypedTsv(outputDirProducersPerTopic)) - - } -} - -/** -capesospy-v2 update --build_locally \ - --start_cron top_producers_for_topics_from_topic_follow_graph \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ - -object ProducersForTopicsFromTopicFollowGraphBatchApp extends ScheduledExecutionApp { - override val firstTime: RichDate = RichDate("2020-10-01") - - override val batchIncrement: Duration = Days(1) - - private val topProducersForLocaleTopicsPath: String = - "/user/cassowary/manhattan_sequence_files/top_producers_for_topics_from_topic_follow_graph" - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - import ProducersForTopicsFromTopicFollowGraph._ - val minActiveFollowersForProducer = args.int("minActiveFollowers", 400) - val maxProducersPerTopicPerLocale = args.int("maxProducersPerTopic", 50) - val minTopicFollows = args.int("minTopicFollows", 100) - - val topicsFollowedByProducersFollowers = getTopicsFromProducersFollowers( - DataSources - .userUserNormalizedGraphSource(dateRange.prepend(Days(7))), - ExternalDataSources.topicFollowGraphSource, - ExternalDataSources.userSource, - ExternalDataSources.inferredUserConsumedLanguageSource, - minActiveFollowersForProducer, - minTopicFollows - ) - - sortAndGetTopProducersPerLocaleTopic( - topicsFollowedByProducersFollowers, - maxProducersPerTopicPerLocale) - .map { - case ((topicId, languageOpt, countryOpt), producersWithScores) => - KeyVal( - SemanticCoreEntityWithLocale( - entityId = topicId, - context = Locale(language = languageOpt, country = countryOpt)), - UserScoreList(producersWithScores.map { - case (producerId, producerScore) => - UserWithScore(userId = producerId, score = producerScore) - }) - ) - }.writeDALVersionedKeyValExecution( - TopProducersForLocaleTopicsFromTopicFollowGraphScalaDataset, - D.Suffix(topProducersForLocaleTopicsPath), - version = ExplicitEndTime(dateRange.end) - ) - } -} - -object ProducersForTopicsFromTopicFollowGraph { - - implicit val sparseMatrixInj: Injection[ - (ProducerId, Option[Language], Option[Country]), - Array[Byte] - ] = - Bufferable.injectionOf[(ProducerId, Option[Language], Option[Country])] - - // This function takes the producer to topics map and generates the sorted and - // truncated top producers ranked list for each locale topic - def sortAndGetTopProducersPerLocaleTopic( - producerToTopics: TypedPipe[(ProducerId, (TopicId, Option[Language], Option[Country]), Double)], - maxProducersPerLocaleTopic: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[((TopicId, Option[Language], Option[Country]), List[(ProducerId, Double)])] = { - val numTopicsWithLocales = Stat("num_topics_with_locales") - producerToTopics - .map { - case (producerId, (topicId, languageOpt, countryOpt), score) => - ((topicId, languageOpt, countryOpt), Seq((producerId, score))) - } - .sumByKey.mapValues { producersList => - numTopicsWithLocales.inc() - producersList.sortBy(-_._2).take(maxProducersPerLocaleTopic).toList - }.toTypedPipe - } - - def getTopicsFromProducersFollowers( - userUserGraph: TypedPipe[UserAndNeighbors], - followedTopicsToUsers: TypedPipe[(TopicId, UserId)], - userSource: TypedPipe[(UserId, (Country, Language))], - userLanguages: TypedPipe[(UserId, Seq[(Language, Double)])], - minActiveFollowersForProducer: Int, - minTopicFollows: Int - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[(ProducerId, (TopicId, Option[Language], Option[Country]), Double)] = { - - val usersFollowingTopics: TypedPipe[UserId] = followedTopicsToUsers.map(_._2).distinct - val producerToUsersSparseMatrix: SparseMatrix[ProducerId, UserId, Double] = - TopicsForProducersUtils - .getProducersToFollowedByUsersSparseMatrix( - userUserGraph, - minActiveFollowersForProducer).filterCols(usersFollowingTopics).rowL2Normalize - - val userToTopicsSparseSkinnyMatrix: SparseMatrix[ - UserId, - (TopicId, Option[Language], Option[Country]), - Double - ] = - TopicsForProducersUtils - .getFollowedTopicsToUserSparseMatrix( - followedTopicsToUsers, - userSource, - userLanguages, - minTopicFollows).rowL2Normalize.transpose - - // Obtain the Producer to Locale Topics Matrix - val producersToLocaleTopicsMatrix: SparseMatrix[ - ProducerId, - (TopicId, Option[Language], Option[Country]), - Double - ] = - producerToUsersSparseMatrix.multiplySparseMatrix(userToTopicsSparseSkinnyMatrix) - - producersToLocaleTopicsMatrix.toTypedPipe - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/SimilarTopicsFromTopicFollowGraphApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/SimilarTopicsFromTopicFollowGraphApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..43be9b88c5f7d4dd9b6714b1f23ea1c687bbc8ad GIT binary patch literal 39472 zcmagEV|XQ9*De~{?%1|%+qRRAZQHhO+crD4I_RWhd#9i0<@fD<&Y#MaSv78rT2*t- zwdAFMK~Mky03ZP9GuYIt6^rAO0RaFezyJV{zecr$Y;BxOY@GCz-R(>qb!gqJt(uc% z+_&ZU8#AE!9ORp#YG!D!>N(jUEX zHyU_)yjn=LgoMv^bh6Y634u$!3bzVqFHG4EMdAr0R>Ti*7Kg#=+OoX9&9Va0AJh$U z>LCSR3g&4BB&$CI#E@0Tsv_Zy1VbqDOn`>f7S6NfcM;hsE1r Z;DcPRP5wPx-nM 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

^?njtJTT&f)!AZ} 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 ThriftSimClustersEmbedding -} - -object TweetPairFeatureHydrationUtil { - val QueryTweetConfig = new TweetSimilarityFeaturesStoreConfig("query_tweet_user_id") - val CandidateTweetConfig = new TweetSimilarityFeaturesStoreConfig("candidate_tweet_user_id") - val DataRecordMerger = new DataRecordMerger() - - /** - * Given persistentEmbeddings TypedPipe, extract tweetId, timestamp, and the embedding - * - * @param persistentEmbeddings TypedPipe of ((TweetId, Timestamp), PersistentSimClustersEmbedding), read from PersistentTweetEmbeddingMhExportSource - * - * @return Extracted TypedPipe of (TweetId, (Timestamp, SimClustersEmbedding)) - */ - def extractEmbeddings( - persistentEmbeddings: TypedPipe[((TweetId, Timestamp), PersistentSimClustersEmbedding)] - ): TypedPipe[(TweetId, (Timestamp, ThriftSimClustersEmbedding))] = { - persistentEmbeddings - .collect { - case ((tweetId, _), embedding) if embedding.metadata.updatedAtMs.isDefined => - (tweetId, (embedding.metadata.updatedAtMs.get, embedding.embedding)) - } - } - - /** - * Hydrate the tweet pairs with the latest persistent embeddings before engagement/impression. - * - * @param tweetPairs TypedPipe of the (userId, queryFeaturedTweet, candidateFeaturedTweet, label) - * @param persistentEmbeddings TypedPipe of persistentEmbeddings from PersistentTweetEmbeddingMhExportSource - * - * @return TypedPipe of the (userId, queryFeaturedTweet, candidateFeaturedTweet, label) with persistent embeddings set - */ - def getTweetPairsWithPersistentEmbeddings( - tweetPairs: TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)], - persistentEmbeddings: TypedPipe[((TweetId, Timestamp), PersistentSimClustersEmbedding)] - ): TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)] = { - val extractedEmbeddings = extractEmbeddings(persistentEmbeddings) - tweetPairs - .groupBy { - case (queryFeaturedTweet, _, _) => queryFeaturedTweet.tweet - } - .join(extractedEmbeddings) - .collect { - case ( - _, - ( - (queryFeaturedTweet, candidateFeaturedTweet, label), - (embeddingTimestamp, embedding))) - if embeddingTimestamp <= queryFeaturedTweet.timestamp => - ((queryFeaturedTweet, candidateFeaturedTweet), (embeddingTimestamp, embedding, label)) - } - .group - .maxBy(_._1) - .map { - case ((queryFeaturedTweet, candidateFeaturedTweet), (_, embedding, label)) => - ( - candidateFeaturedTweet.tweet, - (queryFeaturedTweet.copy(embedding = Some(embedding)), candidateFeaturedTweet, label) - ) - } - .join(extractedEmbeddings) - .collect { - case ( - _, - ( - (queryFeaturedTweet, candidateFeaturedTweet, label), - (embeddingTimestamp, embedding))) - if embeddingTimestamp <= candidateFeaturedTweet.timestamp => - ((queryFeaturedTweet, candidateFeaturedTweet), (embeddingTimestamp, embedding, label)) - } - .group - .maxBy(_._1) - .map { - case ((queryFeaturedTweet, candidateFeaturedTweet), (_, embedding, label)) => - (queryFeaturedTweet, candidateFeaturedTweet.copy(embedding = Some(embedding)), label) - } - } - - /** - * Get tweet pairs with the author userIds - * - * @param tweetPairs TypedPipe of (queryTweet, queryEmbedding, queryTimestamp, candidateTweet, candidateEmbedding, candidateTimestamp, label) - * @param tweetAuthorPairs TypedPipe of (tweetId, author userId) - * - * @return TypedPipe of (queryTweet, queryAuthor, queryEmbedding, queryTimestamp, candidateTweet, candidateAuthor, candidateEmbedding, candidateTimestamp, label) - */ - def getTweetPairsWithAuthors( - tweetPairs: TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)], - tweetAuthorPairs: TypedPipe[(TweetId, UserId)] - ): TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)] = { - tweetPairs - //keyed by queryTweet s.t. we get queryTweet's author after joining with tweetAuthorPairs - .groupBy { case (queryFeaturedTweet, _, _) => queryFeaturedTweet.tweet } - .join(tweetAuthorPairs) - .values - //keyed by candidateTweet - .groupBy { case ((_, candidateFeaturedTweet, _), _) => candidateFeaturedTweet.tweet } - .join(tweetAuthorPairs) - .values - .map { - case ( - ((queryFeaturedTweet, candidateFeaturedTweet, label), queryAuthor), - candidateAuthor) => - ( - queryFeaturedTweet.copy(author = Some(queryAuthor)), - candidateFeaturedTweet.copy(author = Some(candidateAuthor)), - label - ) - } - } - - /** - * Get tweet pairs with popularity counts - * - * @param tweetPairs TypedPipe of the (userId, queryFeaturedTweet, candidateFeaturedTweet, label) - * - * @return TypedPipe of the (userId, queryFeaturedTweet, candidateFeaturedTweet, tweetPairCount, queryTweetCount, label) - */ - def getTweetPairsWithCounts( - tweetPairs: TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)] - ): TypedPipe[(FeaturedTweet, FeaturedTweet, Long, Long, Boolean)] = { - val tweetPairCount = tweetPairs.groupBy { - case (queryFeaturedTweet, candidateFeaturedTweet, _) => - (queryFeaturedTweet.tweet, candidateFeaturedTweet.tweet) - }.size - - val queryTweetCount = tweetPairs.groupBy { - case (queryFeaturedTweet, _, _) => queryFeaturedTweet.tweet - }.size - - tweetPairs - .groupBy { - case (queryFeaturedTweet, candidateFeaturedTweet, _) => - (queryFeaturedTweet.tweet, candidateFeaturedTweet.tweet) - } - .join(tweetPairCount) - .values - .map { - case ((queryFeaturedTweet, candidateFeaturedTweet, label), tweetPairCount) => - (queryFeaturedTweet, candidateFeaturedTweet, tweetPairCount, label) - } - .groupBy { case (queryFeaturedTweet, _, _, _) => queryFeaturedTweet.tweet } - .join(queryTweetCount) - .values - .map { - case ( - (queryFeaturedTweet, candidateFeaturedTweet, tweetPairCount, label), - queryTweetCount) => - (queryFeaturedTweet, candidateFeaturedTweet, tweetPairCount, queryTweetCount, label) - } - } - - /** - * Get training data records - * - * @param tweetPairs TypedPipe of the (userId, queryFeaturedTweet, candidateFeaturedTweet, label) - * @param persistentEmbeddings TypedPipe of persistentEmbeddings from PersistentTweetEmbeddingMhExportSource - * @param tweetAuthorPairs TypedPipe of (tweetId, author userId) - * @param useAuthorFeatures whether to use author features or not - * - * @return DataSetPipe with features and label - */ - def getDataSetPipeWithFeatures( - tweetPairs: TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)], - persistentEmbeddings: TypedPipe[((TweetId, Timestamp), PersistentSimClustersEmbedding)], - tweetAuthorPairs: TypedPipe[(TweetId, UserId)], - useAuthorFeatures: Boolean - ): DataSetPipe = { - val featuredTweetPairs = - if (useAuthorFeatures) - getTweetPairsWithCounts( - getTweetPairsWithPersistentEmbeddings( - getTweetPairsWithAuthors(tweetPairs, tweetAuthorPairs), - persistentEmbeddings)) - else - getTweetPairsWithCounts( - getTweetPairsWithPersistentEmbeddings(tweetPairs, persistentEmbeddings)) - - DataSetPipe( - featuredTweetPairs.flatMap { - case (queryFeaturedTweet, candidateFeaturedTweet, tweetPairCount, queryTweetCount, label) => - getDataRecordWithFeatures( - queryFeaturedTweet, - candidateFeaturedTweet, - tweetPairCount, - queryTweetCount, - label) - }, - FeatureContext.merge( - TweetSimilarityFeatures.FeatureContext, - QueryTweetConfig.predictionRecordAdapter.getFeatureContext, - CandidateTweetConfig.predictionRecordAdapter.getFeatureContext - ) - ) - } - - /** - * Given raw features, return a DataRecord with all the features - * - * @param queryFeaturedTweet FeaturedTweet for query tweet - * @param candidateFeaturedTweet FeaturedTweet for candidate tweet - * @param tweetPairCount popularity count for the (query tweet, candidate tweet) pair - * @param queryTweetCount popularity count for each query tweet - * @param label true for positive and false for negative - * - * @return - */ - def getDataRecordWithFeatures( - queryFeaturedTweet: FeaturedTweet, - candidateFeaturedTweet: FeaturedTweet, - tweetPairCount: Long, - queryTweetCount: Long, - label: Boolean - ): Option[DataRecord] = { - - for { - queryEmbedding <- queryFeaturedTweet.embedding - candidateEmbedding <- candidateFeaturedTweet.embedding - } yield { - val featureDataRecord = NormalizedQueryEmbAdapter.adaptToDataRecord(queryEmbedding) - DataRecordMerger.merge( - featureDataRecord, - NormalizedCandidateEmbAdapter.adaptToDataRecord(candidateEmbedding)) - featureDataRecord.setFeatureValue( - TweetSimilarityFeatures.QueryTweetId, - queryFeaturedTweet.tweet) - featureDataRecord.setFeatureValue( - TweetSimilarityFeatures.CandidateTweetId, - candidateFeaturedTweet.tweet) - featureDataRecord.setFeatureValue( - TweetSimilarityFeatures.QueryTweetTimestamp, - queryFeaturedTweet.timestamp) - featureDataRecord.setFeatureValue( - TweetSimilarityFeatures.CandidateTweetTimestamp, - candidateFeaturedTweet.timestamp) - featureDataRecord.setFeatureValue( - TweetSimilarityFeatures.CosineSimilarity, - queryEmbedding.cosineSimilarity(candidateEmbedding)) - featureDataRecord.setFeatureValue(TweetSimilarityFeatures.TweetPairCount, tweetPairCount) - featureDataRecord.setFeatureValue(TweetSimilarityFeatures.QueryTweetCount, queryTweetCount) - featureDataRecord.setFeatureValue(TweetSimilarityFeatures.Label, label) - - if (queryFeaturedTweet.author.isDefined && candidateFeaturedTweet.author.isDefined) { - DataRecordMerger.merge( - featureDataRecord, - new DataRecord( - QueryTweetConfig.predictionRecordAdapter.adaptToDataRecord(PredictionRecord( - FeatureValuesById.empty, - EntityIds(Entry( - QueryTweetConfig.bindingIdentifier, - Set(com.twitter.ml.featurestore.lib.UserId(queryFeaturedTweet.author.get)))) - ))) - ) - DataRecordMerger.merge( - featureDataRecord, - new DataRecord( - CandidateTweetConfig.predictionRecordAdapter.adaptToDataRecord(PredictionRecord( - FeatureValuesById.empty, - EntityIds(Entry( - CandidateTweetConfig.bindingIdentifier, - Set(com.twitter.ml.featurestore.lib.UserId(candidateFeaturedTweet.author.get)))) - ))) - ) - } - featureDataRecord - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TweetPairLabelCollectionUtil.docx b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TweetPairLabelCollectionUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..0f8f8b6091fe2a2a7d61a0050f2f38dd0e1bd802 GIT binary patch literal 41700 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 - cfe.event match { - case FavoriteEventUnion.Favorite(fav) => - Some((fav.userId, (fav.tweetId, fav.eventTimeMs))) - case _ => - None - } - } - //Get users with the out-degree <= maxOutDegree first - val usersWithValidOutDegree = userTweetTuples - .groupBy(_._1) - .withReducers(1000) - .size - .filter(_._2 <= maxOutgoingDegree) - - // Keep only usersWithValidOutDegree in the graph - userTweetTuples - .join(usersWithValidOutDegree).map { - case (userId, ((tweetId, eventTime), _)) => (userId, tweetId, eventTime) - }.forceToDisk - } - - /** - * Get impression events where users stay at the tweets for more than one minute - * - * @param dateRange time range of interest - * - * @return - */ - def getImpressionEvents(dateRange: DateRange): TypedPipe[(UserId, TweetId, Timestamp)] = { - DAL - .read(UserInteractionScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(Proc3Atla)) - .toTypedPipe - .flatMap { - case userInteraction - if userInteraction.interactionType == InteractionType.TweetImpressions => - userInteraction.interactionDetails match { - case InteractionDetails.TweetImpressionDetails( - TweetImpressionDetails(tweetId, _, dwellTimeInSecOpt)) - if dwellTimeInSecOpt.exists(_ >= 1) => - Some(userInteraction.userId, tweetId, userInteraction.timeStamp) - case _ => - None - } - case _ => None - } - .forceToDisk - } - - /** - * Given an events dataset, return a filtered events limited to a given set of tweets - * - * @param events user fav events, a TypedPipe of (userid, tweetid, timestamp) tuples - * @param tweets tweets of interest - * - * @return Filtered fav events on the given tweets of interest only, TypedPipe of (userid, tweetid, timestamp) tuples - */ - def getFilteredEvents( - events: TypedPipe[(UserId, TweetId, Timestamp)], - tweets: TypedPipe[TweetId] - ): TypedPipe[(UserId, TweetId, Timestamp)] = { - events - .map { - case (userId, tweetId, eventTime) => (tweetId, (userId, eventTime)) - } - .join(tweets.asKeys) - .withReducers(1000) - .map { - case (tweetId, ((userId, eventTime), _)) => (userId, tweetId, eventTime) - } - } - - /** Get (tweetId, author userId) of a given dateRange - * - * @param dateRange time range of interest - * - * @return TypedPipe of (tweetId, userId) - */ - def getTweetAuthorPairs(dateRange: DateRange): TypedPipe[(TweetId, UserId)] = { - ExternalDataSources - .flatTweetsSource(dateRange) - .collect { - // Exclude retweets and quoted tweets - case record if record.shareSourceTweetId.isEmpty && record.quotedTweetTweetId.isEmpty => - (record.tweetId, record.userId) - } - } - - /** Given a set of tweets, get all non-promoted tweets from the given set - * - * @param promotedTweets TypedPipe of promoted tweets - * @param tweets tweets of interest - * - * @return TypedPipe of tweetId - */ - def getNonPromotedTweets( - promotedTweets: TypedPipe[PromotedTweet], - tweets: TypedPipe[TweetId] - ): TypedPipe[TweetId] = { - promotedTweets - .collect { - case promotedTweet if promotedTweet.tweetId.isDefined => promotedTweet.tweetId.get - } - .asKeys - .rightJoin(tweets.asKeys) - .withReducers(1000) - .filterNot(joined => joined._2._1.isDefined) //filter out those in promotedTweets - .keys - } - - /** - * Given a fav events dataset, return all distinct ordered tweet pairs, labelled by whether they are co-engaged or not - * Note we distinguish between (t1, t2) and (t2, t1) because o.w we introduce bias to training samples - * - * @param events user fav events, a TypedPipe of (userid, featuredTweet) tuples - * @param timeframe two tweets will be considered co-engaged if they are fav-ed within coengagementTimeframe - * @param isCoengaged if pairs are co-engaged - * - * @return labelled tweet pairs, TypedPipe of (userid, featuredTweet1, featuredTweet2, isCoengaged) tuples - */ - def getTweetPairs( - events: TypedPipe[(UserId, FeaturedTweet)], - timeframe: Long, - isCoengaged: Boolean - ): TypedPipe[(UserId, FeaturedTweet, FeaturedTweet, Boolean)] = { - events - .map { - case (userId, featuredTweet) => (userId, Seq(featuredTweet)) - } - .sumByKey - .flatMap { - case (userId, featuredTweets) if featuredTweets.size > 1 => - val sortedFeaturedTweet = featuredTweets.sortBy(_.timestamp) - // Get all distinct ordered pairs that happen within coengagementTimeframe - val distinctPairs = ArrayBuffer[(UserId, FeaturedTweet, FeaturedTweet, Boolean)]() - breakable { - for (i <- sortedFeaturedTweet.indices) { - for (j <- i + 1 until sortedFeaturedTweet.size) { - val featuredTweet1 = sortedFeaturedTweet(i) - val featuredTweet2 = sortedFeaturedTweet(j) - if (math.abs(featuredTweet1.timestamp - featuredTweet2.timestamp) <= timeframe) - distinctPairs ++= Seq( - (userId, featuredTweet1, featuredTweet2, isCoengaged), - (userId, featuredTweet2, featuredTweet1, isCoengaged)) - else - break - } - } - } - distinctPairs - case _ => Nil - } - } - - /** - * Get co-engaged tweet pairs - * - * @param favEvents user fav events, TypedPipe of (userid, tweetid, timestamp) - * @param tweets tweets to be considered - * @param coengagementTimeframe time window for two tweets to be considered as co-engaged - * - * @return TypedPipe of co-engaged tweet pairs - */ - def getCoengagedPairs( - favEvents: TypedPipe[(UserId, TweetId, Timestamp)], - tweets: TypedPipe[TweetId], - coengagementTimeframe: Long - ): TypedPipe[(UserId, FeaturedTweet, FeaturedTweet, Boolean)] = { - val userFeaturedTweetPairs = - getFilteredEvents(favEvents, tweets) - .map { - case (user, tweet, timestamp) => (user, FeaturedTweet(tweet, timestamp, None, None)) - } - - getTweetPairs(userFeaturedTweetPairs, coengagementTimeframe, isCoengaged = true) - } - - /** - * Get co-impressed tweet pairs - * - * @param impressionEvents tweet impression events, TypedPipe of (userid, tweetid, timestamp) - * @param tweets set of tweets considered to be part of co-impressed tweet pairs - * @param timeframe time window for two tweets to be considered as co-impressed - * - * @return TypedPipe of co-impressed tweet pairs - */ - def getCoimpressedPairs( - impressionEvents: TypedPipe[(UserId, TweetId, Timestamp)], - tweets: TypedPipe[TweetId], - timeframe: Long - ): TypedPipe[(UserId, FeaturedTweet, FeaturedTweet, Boolean)] = { - val userFeaturedTweetPairs = getFilteredEvents(impressionEvents, tweets) - .map { - case (user, tweet, timestamp) => (user, FeaturedTweet(tweet, timestamp, None, None)) - } - - getTweetPairs(userFeaturedTweetPairs, timeframe, isCoengaged = false) - } - - /** - * Consolidate co-engaged pairs and co-impressed pairs, and compute all the labelled tweet pairs - * Given a pair: - * label = 1 if co-engaged (whether or not it's co-impressed) - * label = 0 if co-impressed and not co-engaged - * - * @param coengagedPairs co-engaged tweet pairs, TypedPipe of (user, queryFeaturedTweet, candidateFeaturedTweet, label) - * @param coimpressedPairs co-impressed tweet pairs, TypedPipe of (user, queryFeaturedTweet, candidateFeaturedTweet, label) - * - * @return labelled tweet pairs, TypedPipe of (queryFeaturedTweet, candidateFeaturedTweet, label) tuples - */ - def computeLabelledTweetPairs( - coengagedPairs: TypedPipe[(UserId, FeaturedTweet, FeaturedTweet, Boolean)], - coimpressedPairs: TypedPipe[(UserId, FeaturedTweet, FeaturedTweet, Boolean)] - ): TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)] = { - (coengagedPairs ++ coimpressedPairs) - .groupBy { - case (userId, queryFeaturedTweet, candidateFeaturedTweet, _) => - (userId, queryFeaturedTweet.tweet, candidateFeaturedTweet.tweet) - } - // consolidate all the labelled pairs into one with the max label - // (label order: co-engagement = true > co-impression = false) - .maxBy { - case (_, _, _, label) => label - } - .values - .map { case (_, queryTweet, candidateTweet, label) => (queryTweet, candidateTweet, label) } - } - - /** - * Get a balanced-class sampling of tweet pairs. - * For each query tweet, we make sure the numbers of positives and negatives are equal. - * - * @param labelledPairs labelled tweet pairs, TypedPipe of (queryFeaturedTweet, candidateFeaturedTweet, label) tuples - * @param maxSamplesPerClass max number of samples per class - * - * @return sampled labelled pairs after balanced-class sampling - */ - def getQueryTweetBalancedClassPairs( - labelledPairs: TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)], - maxSamplesPerClass: Int - ): TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)] = { - val queryTweetToSampleCount = labelledPairs - .map { - case (queryTweet, _, label) => - if (label) (queryTweet.tweet, (1, 0)) else (queryTweet.tweet, (0, 1)) - } - .sumByKey - .map { - case (queryTweet, (posCount, negCount)) => - (queryTweet, Math.min(Math.min(posCount, negCount), maxSamplesPerClass)) - } - - labelledPairs - .groupBy { case (queryTweet, _, _) => queryTweet.tweet } - .join(queryTweetToSampleCount) - .values - .map { - case ((queryTweet, candidateTweet, label), samplePerClass) => - ((queryTweet.tweet, label, samplePerClass), (queryTweet, candidateTweet, label)) - } - .group - .mapGroup { - case ((_, _, samplePerClass), iter) => - val random = new Random(123L) - val sampler = - new ReservoirSampler[(FeaturedTweet, FeaturedTweet, Boolean)](samplePerClass, random) - iter.foreach { pair => sampler.sampleItem(pair) } - sampler.sample.toIterator - } - .values - } - - /** - * Given a user fav dataset, computes the similarity scores (based on engagers) between every tweet pairs - * - * @param events user fav events, a TypedPipe of (userid, tweetid, timestamp) tuples - * @param minInDegree min number of engagement count for the tweets - * @param coengagementTimeframe two tweets will be considered co-engaged if they are fav-ed within coengagementTimeframe - * - * @return tweet similarity based on engagers, a TypedPipe of (tweet1, tweet2, similarity_score) tuples - **/ - def getScoredCoengagedTweetPairs( - events: TypedPipe[(UserId, TweetId, Timestamp)], - minInDegree: Int, - coengagementTimeframe: Long - )( - ): TypedPipe[(TweetId, TweetWithScore)] = { - - // compute tweet norms (based on engagers) - // only keep tweets whose indegree >= minInDegree - val tweetNorms = events - .map { case (_, tweetId, _) => (tweetId, 1.0) } - .sumByKey //the number of engagers per tweetId - .filter(_._2 >= minInDegree) - .mapValues(math.sqrt) - - val edgesWithWeight = events - .map { - case (userId, tweetId, eventTime) => (tweetId, (userId, eventTime)) - } - .join(tweetNorms) - .map { - case (tweetId, ((userId, eventTime), norm)) => - (userId, Seq((tweetId, eventTime, 1 / norm))) - } - - // get cosine similarity - val tweetPairsWithWeight = edgesWithWeight.sumByKey - .flatMap { - case (_, tweets) if tweets.size > 1 => - allUniquePairs(tweets).flatMap { - case ((tweetId1, eventTime1, weight1), (tweetId2, eventTime2, weight2)) => - // consider only co-engagement happened within the given timeframe - if ((eventTime1 - eventTime2).abs <= coengagementTimeframe) { - if (tweetId1 > tweetId2) // each worker generate allUniquePairs in different orders, hence should standardize the pairs - Some(((tweetId2, tweetId1), weight1 * weight2)) - else - Some(((tweetId1, tweetId2), weight1 * weight2)) - } else { - None - } - case _ => - None - } - case _ => Nil - } - tweetPairsWithWeight.sumByKey - .flatMap { - case ((tweetId1, tweetId2), weight) => - Seq( - (tweetId1, TweetWithScore(tweetId2, weight)), - (tweetId2, TweetWithScore(tweetId1, weight)) - ) - case _ => Nil - } - } - - /** - * Get the write exec for per-query stats - * - * @param tweetPairs input dataset - * @param outputPath output path for the per-query stats - * @param identifier identifier for the tweetPairs dataset - * - * @return execution of the the writing exec - */ - def getPerQueryStatsExec( - tweetPairs: TypedPipe[(FeaturedTweet, FeaturedTweet, Boolean)], - outputPath: String, - identifier: String - ): Execution[Unit] = { - val queryTweetsToCounts = tweetPairs - .map { - case (queryTweet, _, label) => - if (label) (queryTweet.tweet, (1, 0)) else (queryTweet.tweet, (0, 1)) - } - .sumByKey - .map { case (queryTweet, (posCount, negCount)) => (queryTweet, posCount, negCount) } - - Execution - .zip( - queryTweetsToCounts.writeExecution( - TypedTsv[(TweetId, Int, Int)](s"${outputPath}_$identifier")), - Util.printSummaryOfNumericColumn( - queryTweetsToCounts - .map { case (_, posCount, _) => posCount }, - Some(s"Per-query Positive Count ($identifier)")), - Util.printSummaryOfNumericColumn( - queryTweetsToCounts - .map { case (_, _, negCount) => negCount }, - Some(s"Per-query Negative Count ($identifier)")) - ).unit - } - - /** - * Get the top K similar tweets key-val dataset - * - * @param allTweetPairs all tweet pairs with their similarity scores - * @param k the maximum number of top results for each user - * - * @return key-val top K results for each tweet - */ - def getKeyValTopKSimilarTweets( - allTweetPairs: TypedPipe[(TweetId, TweetWithScore)], - k: Int - )( - ): TypedPipe[(TweetId, TweetsWithScore)] = { - allTweetPairs.group - .sortedReverseTake(k)(Ordering.by(_.score)) - .map { case (tweetId, tweetWithScoreSeq) => (tweetId, TweetsWithScore(tweetWithScoreSeq)) } - } - - /** - * Get the top K similar tweets dataset. - * - * @param allTweetPairs all tweet pairs with their similarity scores - * @param k the maximum number of top results for each user - * - * @return top K results for each tweet - */ - def getTopKSimilarTweets( - allTweetPairs: TypedPipe[(TweetId, TweetWithScore)], - k: Int - )( - ): TypedPipe[TweetTopKTweetsWithScore] = { - allTweetPairs.group - .sortedReverseTake(k)(Ordering.by(_.score)) - .map { - case (tweetId, tweetWithScoreSeq) => - TweetTopKTweetsWithScore(tweetId, TweetsWithScore(tweetWithScoreSeq)) - } - } - - /** - * Given a input sequence, output all unique pairs in this sequence. - */ - def allUniquePairs[T](input: Seq[T]): Stream[(T, T)] = { - input match { - case Nil => Stream.empty - case seq => - seq.tail.toStream.map(a => (seq.head, a)) #::: allUniquePairs(seq.tail) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/UnhydratedPairsCollectionJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/UnhydratedPairsCollectionJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..b13a01e6e828c37cb57a4aa176c8669d0814d522 GIT binary patch literal 39105 zcmagFV_;=l)-D{|uGqHiq+;8)ZKq<}wr$%<#a0ECRBTo5u5-Hk?e6#9@B6co%(cdY zG1i{iGYZn6U}!)Vl+MN}4rwfoCKcR1 zrv2TCUqk}LazEDS$<=bKvtT*{InyHyu2sdq88jyjJ2$w^&@?%jt2#Dr4wN8xjKbO@ zeg9$GPwzgZ&Txxqo2o#A zQkPI%>I4fH$EV|&2(j-&eu(xum#Ca?x2QfJWuV}&_wxt;})u?%f0mG(ypUNLfCg5jI@D{NWS7g7F!_tmoPBZ0{$;=(sHSv??y|EQuTxwPOj zpn5wXKtQm7pZZRwHqH$6f37u&Gg6>TNC8*;V&i0GcCD(S#p`;ar?SQT{pr(}rFMQ2 zr5n9HilVw27z6kxSBJ)CD_KQ2Yc!=c!Rkhu%RvRJ0~)(jH_cu8TTrRc-GM|NDhDB& zHknZmBnX10 zZs<>gMdX$BJV@^$X1Y;^InA4S%NE)XzaG<(lFX=k&6>IH1S|SG%;EoHY)HG(YKdF( zg_>Bv&{kleL-3WuMtSEVk9kr*XsIUa#lEfzDindaGplsyw0^o?$ zVMCc&J+Q^KD(GOReH$=0>{>1PgVP;tChW~t_)VAk&R64GCVxLXE%=aMUq=j-jmitNFWg?h;ShmY1Qj!s+}qWd_aZNxog8=P+(31!;M&6A5K_MsEL@aV3kDTHZE3sh z*bkR9j4dr4Y|%NB1qis9w6oNsezZ<;QluIBWp5WCjJflfhe78gKi%J0GG!%8qLm3{ zgGqKue5dW5DLifR|NQ#<%Nj1tGsg`W)|oki9@V0|$nW>TTb%!_%l+mi<~g7)Hef(N zNdI0JLkEYy%Azu5x5k?@RDWr&%7_=g^AhL~JpP1dYG)XL#0M@~D;OF}i zj?VRs;UR*jiRZ0(@@-Yf46<3yLKS`LrEpxqaT}(kE^_R6bLNED8LSe#0$ptcS=Uj2 zZn9<>f)3gxLtUYE(wn%+X!-^p(!p7tX3k{;L2#$pyR=Kr!Ds&6R8Z`fTf_74b&5jE z+D^J6qkLo)=trGJm1p@JAKTZ%hcnI86nF%25W^1^uqn?fOUm_daZFi4943RF>uC!x zD_C!rheng1$ob~B+L*kHB!cJov<|n6aL>aqKQN7p_XPdsAH*H1axN)1fiNSR&zlI9 z8!ObqZ(}av`!s~c^10YRKSU^_C%%)USQ*+6+#}~{1a3LTw?8&j@WdlXKO%s=@(8cJ zV~A33h(K!L#V569p!zpV+TZ=+;Dk%6xdqh#j=cTxcAQg>nk;CEyWWXR>N~r@FV-+s zUnO-wUroeUJ4!*CiuYzjfJ0+Ub*X-GBC@KbE2kZUp2vob>_)a9>em5$WKRK}Y|V$I z@YPN0fZ)jj`vZyo#+K=1@5Pl5_RJlE)33b=8b9p<+U8>-dI~?V-DWo}g?~nUmy{JUy!qcBSa*9T z69&Mi*3}j;IQ@AuE_Ah>H`~$uuIl>hGqffpib=b6RARahHEwEoW^2!;ninr(A&7~f znV=nj6&e#K{I7r|5;`?nQE`&LH{jFm1l;ZKZ9$LQ`*+6(vl0m_&2oFowl#!7-FXVG zmp8flx@!41g%uCd_7j;GH*t_SU5yn9^yIXHUQ!?%!U!SCw3apOI*v+>*v=*WP8Zea zM1BBI^C{QK`-)G1P$Az5lBLV~_lJ5>_LA2%oK- z`qU5`J{B@CLxhQ}=0GhzFT6$Si1!-ZPzZ{x#J1>*cf2jbEk~@ub6%8tIB&ZFl+PD2 z_%ig~Yp$HXzSh{gsh8>@Yq%*2}#F&tFF`Gmat@meJgIPjHQQ6HS#XwT~X$*f& z8;e`g6Zp41>(|L+3rCAvO9T2bP6+VG_s8{c$3RFTLXcPzx`bI|jWS?FvsWH=e=lKw z-}{ATz5&CrFAhjZV#Bc(R&Ad)k)Zsij&kEL~>khR+q%@)NaZtens3lmq{I2-j;8KMkM9Igl=A~YdI{zg9^rTD%8rf@`K ziU$kk>BAORDX-G`5(jvb8cTsmKYpSC#?g{faAv#e{_;)xfFcum%+V(5Hwk=+b+rtl zvSTbHDeu0agb)0M*24TpfW7=p@z-HCjXJ0J%7%QAk{hE{K^PY4a;C{!CLew>4KiZT zKyLpp6@5h|*6PPU8B+6Qm+RB{4ypI-hBLgOXSpQ;cv6dhlH?k2EGXs2-1+y@+D}z@ z)#(ciwYzjLrXr~bdZ54-ZZkQ?&RZu>@Jg+DK>P*%D_AZv;yF zu1X9BA*_o&u^^ksBNdN=B?_RFSuCYXfqgefa%zI9HcW&NB^=e{n>|Q$c}HP12xSxm zRkmt}K;bE!Cd6BSHawjpI^h6?I#dWSpDXCXX=trHMcezb@r76Ld-ckExP@;eDtnLy zvjoKwdEy6k=O72zK4UgXV7c8SYc9rK;Jt4wG#b3tBo{U22gonkb?(rs6g}$bDw+G~ z!{z3$RfCXuH1J_kKz@)WDvC3iAjk4lKzOGbeCSvn0SI9dY{;?3L7_4OnG01bw_=+l z9%+=psFwM_6p0s9!{HbvxkN%5gU|QzQUNac57d#U>E{YOobwiRomIkC9#P`L=RE{qW3ii@OQ2@WidoP?ks-2RDm{T3y)6wQ{Z`Lq~B;Ppj6f^}@Ij zCUMCPJhei?TiQ_4sE0NZ{I=0QYy6d^06mIUXaufB(cMp@NlH;jlpT!|B=RIX<`+uT z^#xh%LA-WR=P?=>dzQ4 zKC|wqm3sAYev$XjE@#3VRVj!yjos4T0LJue0Vz+6ii6c12?0mHIHZX}=zCrAY@XP< zXu8LoO?_x;v=OzkR@&P^+B=iGT{_V$&x<$@E)vkRGFbKI0v4w#8IQ*R76JyH(>X{yM-cgl)RK@9MB;Bmx($fsGMZ^jtDH#2wS zYN)5mn%K(DxFvNNR#caWsAw{z5gJ$GwC0QsX?@CH&`pb65n7w@L&NnZ+MsBmy1sS# zt3OOW^2RG{(B^N=Oy;QcrbCf9rNPitRPk%837$KWQ(I}1g}1&%jGC5Te0(cG1G28@`A23{S-;As?!|E(z=Ed4Mp+z{Cs%8L-YZ> z$8notAlXH>KSAlrg2+ffsK9b@pj)Mdn zXnD@_^oKq%b+1n)FG?P|ZD~i?Uwbi*W(H5(@MFyC_p>{l_GezZ&4-qUM!Uvz!()zc zth9(iZ@^1d&Dam4em#x`8CqvCg67Luo?21eI#Iku?K_cX(slhS9NCwMjhGOv%k*?x zk5R-z+`d0utQ(pvd8ag$bECd=sD^-}Y&X!%Tdia;ytBfVtzh_{g~kGDUjg;@a#O*E zsYT#pII!r7<=~rZd`IOV6v+`i$qOo0 zA)(=e{l-BGO)Kgp;zMvBYVy(S`+)PN}Tz89u7pOVpeNk##F{oHJZ zs(zQ&yHCXI`60Heug8iwuZKcX6@e^~b_VUCCV{Qvk}ZCC|Kr;Jt!(yPN&Yk{W@vQ( z_r&`F87s5;6Cy%Z*s(wNaM6^!gZqYKX3dI_hyd5O!@k}?V+P+n&=nW7xcyh5JIKW^ zcrmJuFbe2#k$3TMn3u882vGSi1*V+@PPG_vUn7{yzHmu+k?PEl3kn$1LvDRS6Z39! zm==E}vbp4Z3yX;sqT-k~e3hr}KJfpE`+@kMbAP)492922qHqeZD8vOU3jdn>|GlO0 z?<;`6w>Of784OKAE47RI@~e=%i(0&{#3xjIBk@t>XjgmNgjVDr@bHP< zH;=-0apqBZWrqigrdcY8Ga3XDZ822A6ouCuG3~s+NkUb~x`q&%yMBPZXN^}_cHyES z#iIH|Dp~d&rlEsuxDkf5rNBqdz@A)_TF@XeSi{<~fi4LfnZd!;$^65!39kPKq#le}^D?eT=~3XjtWFGy zKA755Hs}z`vw`L0q1lQtkf?i~NSX+9Nqx5RKIm;3OOy~NS!1Shh;`_f8Ea0f`-S9T zFF9xzZ%7bHmL^WUp1-J}EYM&G`^!Xo|mAGYx!Kx4CZK#6X+ zhTc874Oc9(EQ`P9=P@nfF7*A$hy)2#l~mQFDia%d26HhKsE*Wgl2lATKJxs#ZLa+E z31YK8F1I;``rvyzw6E0O%4RO_y6pWvuzYx4jxRm5E^|{iKkPm(vjkSh?0>(+eZIV{ zUd5IPw4ER7KEG_=bfqnKy`3!neCP@bJ3RCJXypBE``Nh@%HX#_pqE;9JvVd`mUgs1 zwRzrF^)YpR+w8ez!%-$cP(9G!Bma#nJi77o-m*!{`)zr1%F8`c;L}0FehB%g>+tUQ z!Q;zC)wqTJQ&`#RkY5Ww{*bxfdhVFFrk&fW;Ws(M{Ir>~dVx!UoZlGyGEQG_6!yo$ zf}iynHs1iE+;{zVE)b{2E?&2NIp;qFglG6J)OP?oKepc7;{N!4{G|Tm{v)5Tk6nv5 zm*?(NhgMB5SW@ti9_t~-J$VJdy;_vGb!Ars} zQMl*Anh?Y4Y6U*(^?fx3d^tlIy1U{`Loxk7exD4P`9po&Z-2OC>b%$ct#|M8^3}Ls zU52G`T;_7fpMU!5UHS3V=Gm=&q7L__Mz?SDUC5nm#@Qb{|M+as>J!h!>Fv}OXMdr3 z?PvFTVj`pX{k(bX#&H76RdF-&*%gjU{%9oWsmD-+)rX@7lX(Eun0_b)Z&-!6UyjJ6 zL@=mIU{uXNEb1Fh=jzsbKXzd`LIILkaQ}=mVVhxhtPHxlH6a<^Pw3GB=_oJJaR)8S2Zq9vSODkT9c`&SP zENQI^n-; zVA%Efqh~VzYl2nzthTf$E3o-+YnsUVN-<7BgUsI5;8Q=h=M zyz*#!^*Dwc%kKEL$k0^{Za2)gi{IBjZE3RcN53Qcpc6epeHZe<)2Eb-E+OGe;=eMh zQXStCeODohlaf%BC`VCBW~mCHJwl@)lBQdgf=ZO@?5p4Q9*NUY5{kCn{!&7@TT)ZAx&&0ATxu#)zkc3ps4k`tulm$ZuHgF>9NOYD| z6hhmgsU#e~;X*|OWxj*fuMc%s8h{q!sVoSy(M?4NYr9jOQzQYUL_&iSCJR11I>3c&r3(7&m`Dk!e3h&=v_ z;7XAM&;s+9iqvj!lY;*x@qeJ=y>4qUg3D}FRETHx2V=KVK2U#tMAndu)n6i7QsqaO1~70 zSYR4Oa(sDvt4Hsye+R1enyoXgsK(Nw+mdu~%#f*q?6> za3XY`a|TGXTNQZOyCYkKkC%RKYuWDbBb&YS{$qI(w&zZXCmp|rBkk)B0&C-tDr|fy zc?a)aoM_J+zieFZ@~kY{a&$4Iou4FN%uW3;=781NVUl&jH|Ys3z~04^JC3kQ>@hAo zI%InJJn~hXgt=mRzjO8XaldL$B1J6OaSpFvd7x9?#3P;Tj8J+PfH zs`yB)GUSx9wR3jivC%gioBEWW{QZ`kv(Lp{*ZkJW4}UwB`fIT z_waS8{K*vajthQ7x8!7&lGIez-g{yt2RN0;%9X4nHvx0gqNlY`iuA>bf3_%!I%(6m;Jvp8Mv6yf zWc1+3Uz#1`D}xgUhB?3IrUtHVuPv<~@29(?U!iIU1%ta~SCIjBm)ZLQmi4#a_`%bg zM^JKKS^N~z7s%6SDq<#4mo@2^+D0BoVHcBVf#r=%YF@Kx*3ET~bVNw9r=ZD)I>wx9 zyJ&PQGi z7Ei}#J^Kd9_3EK8Dos0vFuN-bwO8O6u*X5aYOf>H=h(H+LE`&fO1jE=C1zZU8N<|L zu?5fI6mv~%j`VTdbBcC$a4bT=q4>3k>l>_WJ3Z@wOMxVZjzx7GER{noaIiBxl8@!& zLkU$WgKXEnG^(!;G!vd7msV-<*A zFKcI+fjCvE(wU3&Y-KSfa$WAnA;Q1z&T_l?X4RSMU3rzh)Z-%nInSNH|BN31ztJu# zotsc9=_AJVanCI-wAVCl$x9(GoSb?N<(kD0pLR;9)(tV;P2Ds(UWQ0A-?HLFpa=@0 zFXU-!PwH1CYeUf*)1tYJAClz$X2pZ(dej?w2KueU@ZRPJ-G>X5o$9>9hRv4W&CNtp@DtoGw2 z%1V6v6>nGeUIqqRI|J_%xun4fPiF)9^B+ z@{FkSCA&D49;KKEup{a3^|HQVqZ5^*+~)%86toLCsVvvhU~HZujuq<{6_uD-4fq8< zs+uu@{yFD%EW`1N&RE2&xQ%nVg|f5+`>S}=K46+c?^MZL&LGFq==PHGS&yEkLw8P3 zT->E+{F>TvJTc;P8q+nBu#ebz+pSv$+?1hkF}&VPNyBq`IihFYkNXDS=ZEHYTQ}J@ zudWhTGgXIDV7`4m|9)M;#jKV_%x2{5Tk~M8S2biSf{{}pt+e3gT&t`XgsKp_8BNW(kWgN@a*Cuj(r%|pJ9xw1)n>H7v@-Ir zZ00%ux+!L$I_2Z#X(d;!qi4sfHN2!Gok3oMA-AQo{N3e8cm>%v<5RB}#}4ja84p!y zrzym7oqj-}<;=|kYe2YEgq`Oe_E#3!_4GS9--f2takku}8T7-hcMR7-%MS2RN9lh| z^VpcHIF`wAc9Fl_yf2~aGl=#G?I2{aRLEf?>eP~o-own-W9+3kJXO>D_@MAZFIjQF zQ=~e}eXL<$ozUyVQFH)#Pt&y zBaS0ALjGvAxpG-!X=NZwJ0gxAsHFuWlcj-u)mV)!eu3=j&40I0vOfJnih?aJDXrwz zLF7G4E51%dS6lsRu-a1AFSM=Pzq4j7i}kQxf%kM8^Td_=S&3lFhh;WkR$^DkoneOC zILK2R)TiibhQVyVx&@Ya)li-J_1m~=*MvbL?Ol21olrFOm9Y*Vx|awIg-!(>P-e$s zjX&#Ho}InIauWQ)BGdH8CQ?2VYZF#91j1LAw16%M5A76AHCmI?V^y2c$xSn-L z#R^4v$H&qkl{QCHwvBNslM3+equbpm>7m z-jaHcMwJVj%A_Bt<6yvK*;FT}JuEI_F{AGL)i;~gRfd?=SNr-!?~ujsD<|(K9u_kH zKBx6aTl)ddE*S(H6Qf<}>x;w3eA&#t2TY9joXZI8&)LWCAkSn~tjSwz>)>h=DXKNO z@wp&wS+=&93DPg>iXA$+UB9(2Uq!?T5Hacais2`i&fO%{E^<{54dAcNdIup2@q<{G zjME>(`f3nQQlik0&9Pzi>k54H>QFDOy7cgGugTx<7R_)_drqIM9teBWbI6LUPd1|P zbW9~HPCkBLt6wdHhMMipCOXMciFV=6kMduOI#)xSGMSNUp+0ZGC3cEU2866NXKjLa z1KYY`#*3B5&`OWbU|Afj>+QX9StRDMyhU#-pcjYlXlUs|VjKvM4Gvx<&zz#X+YKCSv zBsj(Oq#<bA zZ%)TjX8=y%2|_-HIlnfo&Q5R;s>e}%$c{_)As|Qgt|~3G!uBSb!uH1js8f01>)<*g zTurN|@X7#~8FUf*+KAJcw(XGsW$&(|5`_FV1724=xl-4C=x!$sVSDb`8<3p<_A%IT z;(PH_vU@W)PH5iUn_C>}J7=@JKPf6+z&Y6)lOWhSBoH&uI)Yw(_H}jns;b2E_FxO4 zw6Pb49nFgH?nFu!?th!V_+75?&cXm^O3a7Ei+G!|ATQ6JnD6D7J8R(zbyof;Jy|$`-ML!iuE-C^)tR<0 z3+7AGzzk^DAzqdU3qvJmVm&52q?;A_dV2EZtY@JdA;e2n8>?bhr3&?~d`ni9!Q~w0 z%QjWX{6%^&9t8muOVZBa`1GoGoqCOUu@@=|40UO0*bjp^mdIzS7hy&2EOha!%2BoS zg*(}*O>}0j(Oy)0p&+>m3^PPt?J7OxX*OXdJeEsubwkGy!ET3X`Gil6gBgPKY?R1f zSXS>4U6*zhzLF8rLsB9R__=e72ji+|&5TKuTwUs?er^-&%n9F#7FCNxGx6A^{>1$F zp>_Z2d@p`Xp+2U3cI$K3EQwYTZZs2pS};pAV|}>pre0}gk&>V&===1F0!BMp9y0}E zS;_vi`w{WAC|>!feMz~|HcN6z9W(g!iQBFd)$Ub`1#fnOL?+*E<26IfZ$(x>q-I(5 zUOQ%|aK}C+(tXJuo|(EloPxL3BwEQ|gW511cYDhymwvxSZK}NKfjs5De4Q~=#LaKM zg;RWl52lwqI8e*V+LR}PINIDh@Jj#dEIxdEZ>42NoKKNzWm&`Avid7Y-s14d870W= z##~uc!1d#u3K;EL_Qo7cGz>KeOdQRZk|p}QNPP0I9BokL(jHZ+d}qHz<-`QJy#oh{ zcmz(hM2mTBo&7#g0s+aiAsovavQa8cGSszTDWnoW?}VM7mq z@B+HrkXM0I0a;<_?P|=VSo7La8;o>Qazn0^(Dv)g*`yo?%f0dlJ|F)X6rI)ae<>bgWPm_z9=kmQL2jD-J|0FK1b?4TT6e7j{k7>8 zTgs;$*{;xiR-4;J>iuC2mwbC*$tdx0V!rA*l5`-9ss}$)gw@SHk--*cQoXV@L&a@r>p!X0 z_7J5G(QgTC&|t4<^?m$bU;pH1QN>p5LG5uiRoEHOBz%NHbh6sl~=*DN-ve~*omI#R|KWP@oiSTP4@Nj>u zLmGxCZ7B`yH{zz8@#?zx46ap1?*r33O*pPj;8;0Y@m`<43}HeiAY~{~xbTs2SYnJtbPSP%bvct2a1bX*7Sp(2 zXDm@fUpe|0B1TTV4~&&*#p_rgTTGZnimp6pA^d>w8`6c@vmuh!vy~Se=Sz{o(dGk_ zfVkpODS?dyX~p%B8q#a)u_CA4h@0q<;(0WQy^kgSO(RKFrj}yqYJub*-|KvTd=G?a z$T<35m@r-Ay0PQ_?OSXD013D-)%!Ai4+{FW5_}N%Wxr&%54#aX~2D{J2~})=}cVDP_49mUGmvi!`3u1H0HD zPb-A4r+a`{8)lENMcMqNC6%aYW2%R0bdaSnO3`bXJu!cnf@MxuNj58)-Ly#<%vt8w zseYWjtZ!4BGrs%(Q%MY}wM$%durq zw3&4y17lg)x*nSsF2t$38;`v0#tzE%%Dix2Cn}c%xmB z@VMM6*?$!OO!pQ#WG^UQr)>L2fl`f|;eaj|Eim#>V0e6J7rfX;bPoRzGU!7rge31K ztWTci@)CS<{!S$}?f#?E>>!EPvX zhEe{`f&pME-o)pvZ24&QRuA@|wrl|1wrz%y+V5?PLOT#j*5Rj{q0zigq{l@&fHGtl z@rPRaFKQG3HKg>P+4pqE&I)|0!C%yFCQ|@v9`?VfzmuUxA^bn6Z+eHJyCd@ScYHd& z_835))l?3k*e&ML(gwQ!BGL%zZYAwH7eI|7@d#H(kggwg&>%M1w;M`iH!hp29~SI6 z965AsLXaR9k8wm)Nx3EvJ8w4;o0mD5*cg zsJAJieIIoB4tc8Fk-*TSueaM1*unSQ%+d*ygZJ5aIw@87@Vt7E-ct%zR{Tb*fe`sK z#=aqW)ORgkhJF>{{n zp}3Q;!hyu5j6Zc-Ep%eogDyT0`a!sU$(sm?>>P*;b#0nf;Jl?p1RKolb(?08(2CsJ z@6b>==Z6gQWkjx}=p2}hdF3$`R| zS!+J{WiuC>U(rQb;YAlGy-hXGdK$w^T?0y?S-TSQ-ZswiK|%OFF3HT0WRuwXZssfG zGReO@i7v7hT7tB)sNTgavi_{7ETXsPmbLD&&$(o+aRWz|1zl*q-3d(fx)Ln3#LKq? znd$p+(%Z@%87L^<=S_nxx@akr{9yv+Q%oD(h8wRz8Izx43b2 zSivP*r7tA9D9BpVomN@0Bb{QQ1!<8f$RgSw^qI;{JLu+h-?>`-Pmfwpr4u9n26pGY zX!4iIpR6?xy`!Cr%^UwTDXo3hQxfsF$*`0^COKjMnC!9r|1-%cYuz{3b9zr#cT46VT&=?#ZA!bHd)YqmqhGEOwD!*a2+g>+%0PjG= zT?-TaI(al=+W)oEoMDJK0E(WcmKs$@(Ap;pG*j5r0jFhgw1RLGy=;np_<=7N`kglz)pm^ zgn(&=2Qa+^3d1<;8ML0lIn07#H_#o{Agl~S7UUg~c?;>(|A>nb`Xdf2IY0K;r0>KoZq_#UUD&kHww!bN7UV~hsJm-&i|&( zkeb%g=?8qLwtNlZ9_EF?(C=Q3sz-V0o;3?;EVtGLNZv&yAbA&1kmG?i?O^|zJli~- zeF9|~cHV2{pm_or|uX8J*`43sJID?BKnyee=}KvbzA!S@m;nS=;M z9aJQT6)${z12ALkyHuor>%R=S7wHd}dD5Tm>Wmh(5H!)w*j+6m>ISlQfQg6IebM=UG3G_32-pyUw zw~Obd3*nlFA|38z%ePhV8wDd}IiLJPeY_vy39IRXXYl|KCUDdO&e2*hE zQy&6j--rRL11GYTP)1&Ve!e*M@{sUrsY)D-brLamt&MterK9)YyOu@JcaS?+^4=5g zL3zpPIUon=>AEO!!s9Sw%&9DI=bPpo;ydd;p+xRGWihHf$NiGPjXyjz_Clr=ZTZB< ztH8$`Iddl@vwChglkZ><;4SUt_!!?83cXY`Kw%dgP2W^iVm2|4SABS@*wc3@fB5}^ zp*W|Cc*y{=i+FLJhZ=rY_=WO-biGzWZ>D9R@Y1q-CYSS4QHXZkel6DDV!iEhtiB^N zuVhayF%cp$ z0Mr_~+=?>F9ShJF%H4S(a`?+WV_yR1vyH)=%sCx%-(yy4C5wP+G6+8AFT#hvsW4WQ z>|p^(0G*!8n8Scg!z&=6yhFu8Yo4p~(irFOJ5w}#dlwx`**;Ncv(r!4zoRn)oYp#l zP~I;iJvIkwCp%shBSE?oX^7&u`{>7zKexTSv+ns|9po1f`$N<_SLarfHTyn^ za=+$(mufE0>z5KHOHJGO`-Xso;6L)`09m1XUdr5e`{8?S>$_+co~zhQWxX}r%BX&(}&j(M7xtKUca!)!n)oG3j>+wrXsno$(iWeFDHP^q!Xd7%^;N zMO7u$Hn?u7Ja463@p1zD56v1DkK~4yAhB?Kgz8i1oE77$ycH2LekmlCgL99Fx)c^i z7opcDxjEAwU~!3Cs{Rj$vy2I^u^8C?h7{s?|YB7fN8as~(v`X9kTc@^LSe+wS?Bl!A{ z;98t>S2v~?wR4+ZZ*Tz>0(F|_6oLtxDuM}_e*k+7)TIQ+{S#QB)5Rnfb7m9>{r&#I zPr0;vhf@IkU54(t;6%{3CjiE;e6$omv=~>3W9eqX_aDG9!!UknNedNwU%>_7mBG;8 zvFhAEy1jL;dtZd)!3Cn(&DNDmnwSK^1$=vUld0-BW&y3ruzsgp3i=HB0M`u_d*)~N zMO#DmKVp2`w$n%O%J)`H(oWH~ATZddxU9b3fo$Ab2$Pz6=X+LGlwY*XT?L1?#LvnNm51 zXP{<%(+M(*uVEA{6IIoP!IDQT*DidzZ$X@!Dr18xG@-QTGwfd>trcov9n;ytwLFWM z1XV@1@pAyG20r?Bwy+?p3R14nrwT2!HSu&V!hhTA)8+?l8?*;Dz%)Bfh9pPW9Ywh1 z^sC>Lfte6%2Li5bTanS!{*IV%M>v4hAnv!|O=>lU94gH|wY9sE{F&NOm4aTgp17OF07+%<6%ftH~GM1xcTCd+x$CSGN<{&T; zoD+dxCUMUrZ?FCOg&AxNI@TRImZz7ec}@1wR!xqAQ?E(r&tAV+tRoTU4*GusILiM4 zIE(lTz~RX~=n!nI3u^45A3t_&*Mqw{Th5`|EI1m(oI5uHCuFbv=J6B}*Ip{4C*ZJs zQYGMUWC#n!0oMl!bl`@6z;S=4`X36kgBOPJoIwKiJYcQI!cfh*F*%?H91kxR2sn3= znZ1F>98)TQ#-eHxVI6R{$TR+?KVkg`eVMU2?;be7{PBLfeODB4*YODJe}_|njvYRK z++!f(k_Uib_jUWZdxD}x>BmdLYVblzBqpbblhPG9lw4kQ^dwFwm#|BxmbmZaqgPUY zt=SWjF7>)jFPTwL#P)a2ETE40P`Hkgb7I?#@ykFX^1aw8%*H>DnG^;`eHW zt1W!Up}~{|idJ~JE`abVlP&w+X_j+6AMJGxs&ke!aAYK2N5?S=ik0SQ7yPr; zw%|7@e2EaLe76zmCzM<;{q=ho3J6)lE$1tGx1yk~Wm~KR_-Y3@aCdxh9h-y_q0Uxp zs^>w;&RQZ?Iy4;ZY63G$IS3>w7DoRdm^c}JDGTBq2#vv&JsG*UOm&gWv=(O+QLa!a>~)`q8UVsW(B6L1`rJ@R*FW(Y_$#AEwft>-KIjlbF~bi zTSSU$a!Snm&A3?};ZaO8S_=UQS@d03iz&@H_pS0a!kI$iO%;JHX|@>9oP0SwKt0uf(uf zCM->HdAL#@xKYhD=d@KeJV>R7w1FT0q+$e6VMYI;VvHIw+H08OFb3FUPWNOa@Uk%) z?^J!&lgv#)=MlNn_|h%J+Q4k0mU{l0nh~HwNi*f@HVemXRHD~xNaS5#`IStql!@l9 zryqVTNud?p{6r%|@D~crIVDZg=%vkc?Km^eJfJ)hbzDcsr6E&CnNJ4G_6A0#fI`|M zrk;E9dn+?r3){FNu8iZn*fdUcsv4QzR#&ePW{*wo`3^>;5H&Fa%Ms5_g6$FidqqJ6 z9DE)_GCm+`0GVx-5~{A|skXU{-2%q(VtPYD{WnH0O-)b;a<$SVws{Rr#;0tqE*1y? zV^RwE-AJ^v9QV0eL`p<` zn@5+yt?ykLOVKIL9LYkwp}HrlU5cW!I!Eebo#Y`Q;0cCe~(JmIK*WNGcRyDinmWM}VP2Q6s4kmJ|B-TO$R5KdPft>nxM2 zK+)P?&WzZ%$dxO6Kcj<3-}BvpqP_>EX5H&i{byS0K9V)oG;9f zFAST5^9q3uVr_%CR+h}DKE8^8?!=+e8xfojA_T6RAB3LZy05c*rWKlT1=;#svjUAS z<(5}g0OE7bB^0VB7>dz~`UFqCHancva9%o%LGdpYu!w)F2<^YaldDoxtF>~i2|AJI zg4fAti$p;G?YhQ$LnQo8jrL_N1a30(`_d}k5fMXWR=lX`6%tf@vaH@kVR%-%)l>PyP{s&0=UqH5hfR_BHd;BB{ew(jA zQAKZ8m`3s1V8;K2z*`0ATO1i|P^kd>e#A(CkEFxNTpA!txkOOa^Fk1#D^XlDX) zS^~v?`9Kp7WWj54FJko8!HPk{_R#1i0ksyu)13?6LQfE$5Fck%3a}3$Ef$n0kSoq_ zRW0WO#37fx68-JK0Fh!g`J)BPnI&>T0+5Lj?J|Y8h#oI|`s#2rsYjvG1P~trQX+6+ z7*}HOmK@;=KwRARBEZ4tG&T|Vt{WyZ9(}Yp3_LIGL13C|9&yDZlU!^`Ro!RLSd zkA#6|&>|Nb5Rh{n1Q7Orp4(Tqbg>XKGcz@I`TGdJuWnkAc;m&}3wq1hhO@?J0J*E*_&E4i7w=^m;#!=Z-G3 zK3}drUw@ywcYWl|O>OJmzCB!a)zu+hUFAIjj`r{LZ1VBa>0@;D^;F}xW^ErY{?WA@{N7C+}YIcJp{+GrM!D)$!8et$y?= zvU*N7_V)4lX!_yfV!pRF?p4tJOxNmn94Ch(Bu!;5e284nvequ;yfv$nRlrzT6EtM2#j^xvL6?OWd; zxA5zpQaSG#8K2+1Yu_IG&wuqjT`_Igz7Q`f{Pa^*+3G}lv3_cERl~J5yfN#RUTQM@ ztyDf;j>0mv!vAqo-RwAlX7fkpold*nC6+xEj}rEDr}b%+=y9h7ofMsh|E%H+EX{$E0~_(NC(p*ee>@NE;3ru+eRXNzI3e%}sI^G7X!T_vdeth8fP{Voe zdfpL-W$mtdoF4!6U?pCgk@c9`u7kEVcyzJ*a6)$g&R%qy_I&+lH|;VngUZefuMQa_K-2L1Z8e6z39gq#IFCS`r zRh!yVyo0^5p2>YtN;bnvwej#U)BO<%k+wWPtMy56J+sI$sj+ul<9^m5HE)KlQ=!r| z>HI$2RkLoIW}i;KC~h{n{BA_Uenjv58&A~wmrjIjC9Od#XSQbGl`#UsPoXhTqs2wF zo`lmn8r?8sFEj@6digIHBx<$b6{EBp9~$pnzcQhlf45vQbu>SsZN$MN=`(%&X#gr^;oVn=hUY++*^h03<-JrVvJrctsPu0?D!tWC_JZ(_2b-t;$!>|4p?A zt5=jpH_}$@aNA3nn<<2{3^%nO=IJ zldrqffF@9gU>~h-Kh_Rfk6xthm+kAZ(k38yC1t<{%3pvD1Q&n}F@OyGH{)!V-QP*a(X)-H)T!%aDVE%(1?w zuMyZ1{I28Po6a20FPB`co*zdRbEg)Mtd+xi>|csq#u3opf4e?IUD$h^ysc+;q4H$5 zZ~i%8(pdAN=C zIvG7$d>MbjZ`l90@LY5QF?UHzGeYtWg*=w!sx7=WJ<;m!r zjiv+O`gJW0Z^~yaEz00B+U@cNf9`Gjm8Ob6tQZmu{}=Z;>eUr`h|I1##|FkcC+1Ov zAzyYTimV}DR;HoH*@6&^u5(%MxhYsZG1%ejiwV$(TsEYGzvl{JjK_^3MxYS^y}a>P8mgs$2WW+nt@zu;ECUm`GX^OObOi4$jt zd4<%Q@MSpEIP$Rbh0WufyW-4)ELKC5RU?&nZ~1XC;g_siSdvpTR$8*bimVRuZUB8fZ zQd}($nRPCnXlmvD(In@Q%4%iS^xYJCBls)Xms7n4IZpY`ar|aZdFHd4p55E)CMjE| zP$YCQ2J~A)=P87v(6b+U>@??16NP2=9=P^4m8_W-Q`Uw~P)dl*vb@GP_7fbuL(+ec z1O)?I9-!<-k#<1{7oij!$D^v17$F~AB?I`KO-86Z!T_bO-wcv;P?do_p z9kpJBWjB^wPg**NyzOI~(P=i%Gm^783cnnV%r@z218eiu9;=M)@>HfuE>*6%XB_J{OTA?;f3L z>@~(~;v_dmE1#UZce!#4uk0r~iha6Fj^-wo`QVFlmCFvA9ggkv;+;pB%esZ&lqrKy zgS8{g-zTY!(aqN|LcLc(zVAxgQ3)OKV%w%$5Q)rms! z0bXU=uVOq_tKjAPk~NL!cTZQN!aN~4bhX9I{G|4J^D+EtQ|~curLD}QubF9h51N;= zWt2XrvqQxl8qrajXR~f|_vUXZ$l#ogCkM#&Z4F~ihI0?WuJf(!WruIiSbN4@^2KZg zQ^wql=BGMbiw&dn3#E`_TLRVZ1~)Yu3E`XcCnw0zySGZX{t7ZWm+1H|txhbQw(oYo z{7#s=ter=j_@^wD5>??tR&5;~3im8W+HMtxaa}u-W$T2r-Ad0QUGc}IT$Q{vTOTvU zmDwjrADe#Qg4YT)T)2}|BmB?;@v44Sg|c^3W)k#j3FH8>%M^=qUx(Y4!GnF&u&=lq zKEK_ge1Ay!LmDR3-}ogaKhBJbA94L=w|9sCF@&kD$LAvQRw1X~(@x&vrIULjV_d%P z{N&D~74O-jRr>)Xo^$*KaUgA(iSO{8fv7%|fJ^k@7$Y{{U;)9AC2dc@cKz+e?rC&* z<7&7CJO1e#;@3TQ>4;HAMhLPrDPlsXPzhcFvVGr_dr-t+BO^rNp$0rmC3{2ZKYp+t z@i;ZOm(RN~&uNiKA@dSM#pyS7S0xbW?sd*uM#{AaotSDB_Dl(?v3k#9gF=JRVbxn8 z=gsML)i-iShN{rP%-NBOB|j-hajRFblVN}+-di$A&yf=8Nn7vX2f=rh0pkEE+^Q%u zWHUxKxhlmDnlJYY^S@6hxs76&DWl({H-v(sgq-8{bjHe4cj89j#7}D_hyCp11FZySM<{u z+1jB=OvCjI&)sxlK|V4~WsAV&gEF(jj3R}~#6>R5Uk3=n7q3NgQ~suG^Bn(o@6A9{@? z&Tzfw^HooWA_j}FyCMN-8;PCvT^4R0P52Cipuz6I-2Vpx7HQ3R?pj`;>A0`ZHbQ`F}V2fhpX!D=M;qPc6!5!J!^W1 z-Yb?LeFVq&V5nOMYpW8yRZn`CQOPQadzZn?#HrPtcbBjxIqL2os8ELeg?>^(FzQwX zis$e&`H8j`zP(M1P|HQj6uNl(V3#sx-d}?~lwuDHurDVU9K4pP zJ=XHOFX4_f8RpsIi5{}cbQ9-JfyCy=T zuM-$zZHQn!UHk5oBch`wrKTKE6PtjVP`sR!E8plEE9T5leKM#sTZ)kQZQY#Qn;qTC zQ{U0snq^bWf-Ld0$l8{Ox7+VCsPNw6`uob!`3~e)of$)7^K=$B zTy%PK^zzANc_pd)vfu`F?ouP7bugi|r~&1WpO?%Exw9(}lqL}2h5L%ObKLzn z436*(7lptWw4g$Zn&r|xnGZ`8bvDT!7I(UU>s=J2>!o7{gK#;1Atsw~SzeOI;O3=* zW|baIK1|AvMzRjp=YnM}MGf{0mUQ>opl0L3=3q|UV;s{pO;836h~Tnjl~g&Nvq}Y$ zuOZDzofS9ATf6hqF~YlbN(gRaJC&>_m8jQA)0HqbmC!aad?C$Iup4kkK*idQJC*7u zm3r_PT#&yWmw+OY{Bln#zZZ#3yIY{N&hAti(Od91wEn(lCZTUTUl97`fbNE<4%2MYs2Hzqq+iqGzP*uW^ETB6KyjyX)I@DLmcMfc_F^HNu7j1jlXU`E z=ty8~6U%p&i9xxuacuuV-6oRAfw!aa+$i!W5k1>G*swA=(_K6a!KPBerqZ|BlSl_Z z(beJ>de5mKz=mUo=OOQl&7`CaoI}qH=S)*Ggl+>YETzrG)!L##VzM(w^<{?9*Z3Yz zA+GnN`5SyJdgY^;`BxjPv=Aw?EUDH=_OmxSE03odjkh%T%|CyV2YuMq@QtAn=Z2D@ ze`H*!grAQdJJRreBxsMk9`svhbK+FssSXmFt?QjCdLQSmLg%T6ql!`HKE^9+=Ca;f z?dFYvA6AMc4n~~_m))$~jI6v|XbK)b5TZn%;1OH~_KDvKzFg^3Y6{SJOswQ(^!#X7 zE)vYr2d=>d!tNp4>MKn2%sQ1laY|UsB)Bl47jhyOD&wy0u=xQ2mJGj8JVxso^KA9> za6!qSNcE7eq$gZ%xgraU1NBZTtA`@r4;y@saDwmHGt^k1LiN71%2 zwp=-hcOlCF1hw$Z0qcN4#kXU!2S~u0f5a&Sib^WXSO^S-R0N4=L_0VxFE|0k==r1# z7K#p!A}mewHzHBZkFPbwWk1Y9dot>rHNc0Q%jk%NXLeCU7qusJ1ECO!fN*QoItt*5qFyGawL&1VVe@ zWqPs{#|jBS9Ly;#P%+jhA0iP2!|P{|sx0onf%tl}2lz6pk^d*S^CHWUc;JG^sz z!Zvov=&)J*4|2U`fmsOhneQ=J_M?8x0tqU0rq$9672|oCEf9)}DTvbo zNsT#(F+ek=7Ya%3btDJ$v5GVk1_=lw&5y7oi))r#u-b0f)AOOWW}!ksmb}WL+XGB2Lb;w{FZk^{#pM zE3uOITT2qSU9VnDD8v|cJPh1edi>9?W18`Q9tFnm`hX6DfT?({`u+NSvwM;7->KpM z3=j4vPp?gC_J!Oft$EbT*>kaUG_Z8Fuyl5akA(zDL6zKXU+egB;a};b5@VwxGki}N zjyQjfSfCtfCi*##ov2LPn%w$K@HVV8O zwYQvot{fk-zPF>mz7V2Ydo*K0rP@$lzg)GB{9t2TBhUxoqYLRn+gp;QYowuOf~9)~ zLuj+Zl?k>gItDJbciv`bet7+Say@W(t8Ey+O%F$e^o#Z*g{SwOJCe4~ul}f%0Or_Ns%^3);Hk2DXOKya!#@F^C*6w~yF!hWz z(@Qn;&SeblLZ!kwk}~T*v+4U!l(uF3p&gR61RB@X{Ogy=GZELfVWw~2v_A?@5j(u& zJKk>$`Ji|oAy~`Sa|+nJNF5aMA4)M2o(tp#v({bS;?Q;;0C)pu$=S$}^h~rg%#-vi zLo?0aV*5Ouq+Q$twHj+?^# zmJR4_F$}n+W~V5X(HYH9_JT(ZU^?JZJ|9H|PHOnS=sATy_@dqWPdzq1m{P<|aA#*E z8pjWJMmPE5o5>HmJNsWapZn|JDCJbmT@^ybhi&jy$nM@PId+XBpLT?T*hG~QLj>B6chf1P!gI5+13Pp~94DQ!5+Y@<} zmO!nfPFQ=)eWnqkH?5sP4Bco+=x+@5=tYPV1SzYnuTDUUnK8EaQ7ppD4g;j2#t%TC zsllcYC>W$^c3m2x>I7(c>W@sJ#)y*yX%7xT=mx&LWdqQ&6WS@?SOQFqk8YQN#ht$O z&2rBnPEH^t6QnJI!Wv@bVan?!m=3Axtmal!!_LxpUt&m9OIgW8XtyAAx@qGLomV3!cs6uvg}dIUCJkshnNCH!mui{}#ZQ13e2%-GOJkmd|vGIC&mK`AN%}&Ii|5nVbZtlNfGx z0>=)}$KdS|C?ZS)1{eKl+?8VLOz8sP^BEt4g)mJoXt_W%qPT1Lk@OX0f-vppE=nFI z=HFuM|F2?9RayR+HI`GRrfLf+k}?0$(BM8*!>i-GMlaLI?#ZUM$OP@2)X>EI#rfiE zz(m;y|D#GenVN26&9#2>YL2tkL#@(Vrv3iyZG4wM{Q{xh&`!d}ES2G7)w*#cD?)a7 z?oRF`XhMhY{4uq^_tb7NEV~5GcmSJLNKeteHn^4@H>ASE7HcyA)nm0xK^aBoc1=j= zl2bqc7DNJHgP`2)rFy#=7oXDOe0kCR<9#!7(nYwDHwGm8fC}7azcImSThR6kdYY*1 z7bgxmFI%NhCHLN4OMDV^l4hhFze6e}oJ;Q}OA*HWM6h=_(CS>i%=mJ@{ z@-MB2l=LE~s`8tCK}8Ci-%u;p>vj?4wWl5h-2~mRfw3s6iRO1MO~yr$6VL@r18+s` z`Vd!F2X4hKayzi_B{FYSlJ&-ww8OA0b2@^)$mDkfVPUiy4U*<`WLyN?`ropFu*hqR z6!mXRCqK8c?uG`EFHX5A_(%L5GfE(Ng09 z9~@ZXC!i;Ms<@?M!u?x?8*repwq9d80`;pGliA=ah_Su(E0eYww=gxI)pHSbbyNs+DCEKl~nN z%9Vx1V*_k%F01$EwvAaO8DObk*fW4=V1;$!toVV=G;JXkiKp_0;SemgIudgxdlh1) z&9y%=>$7&&v@cAeAkGL?xOzhQ9sc608@b(|U7$F{aTG_4_lZ<^qeE#ZW<+E0I_I!@ z93gxEu{iSroFIYzpEHVnqBO0!s0npv$dM~Cf(3r!`QU1A7*6#@ScwY_DW`=2@VUV^ zZ56Dmp4_yH4Gge|790c%accc{x3ET2CZVi|7UH)u;SRV$b?W1B79``rYM-dJqBOMC zs10>z`k$y3ero?h9mGm3IQlo1jgUXK;Rk@9JiG}|^Top`)b1UjWYa#UEBqH(cstm-z3DxZ*K|}yzkTj^4LKDB$ z`l~qqs6fJI`c%{aRF0o--K3VUI0B>8={Q5U#L(4UTlA<}JeY2V!HStGQYi#F~5 zH(4wci}$V{yeg`GlGOy1?=03o(oZt-cHriGEWaOlUURqva6mGY>PB@imL@ChPmT_t z9aN&K+y^T~*}SkG#nc?YGe5vWSb5n~fq|BBMU;DHHEi}TspYfwhvWK?D% z7lH%yz+!|*JrwU_dh!Sa6B?nyO1iVYit9u08ydKYME3=ill56~VQXCnORJlo%u<^&4~SA0#o z4EaD2t+-;}ro>mtA~I9nY9Ru#q1az|sG!)t37pkl!R9)b8!FhrLn6aZ9xfA>F(2&ToZgV4m3k_1r`*je5 zm=S8KnKorCg-@lyFaV__$^fOZ@_e8%wp_8ao8r(WC~}gU8u}0DBsk(6$+_(7j3I%b z1prE%u5&cegxtct`=Dsz9FGfU1c|mSqb(hQ{nJm-U1t{FC?3Q+w#sUD6x0<0eSU#T zr+ab`UC9#QiJHnCAO?uZw!#|8v9`j$l4ERz(~{$C2jHM2IWiy!b{zAz1cWYb~*pfBzhIPY*RoX-%olEoB{phmE>q9his+_yuvcZ&?qzoiOk{3U+{ z8#*NaHdRRd85S9yB;(eQ@^c_}HGHh32ZO|Z2daTC@rziFSE?2V$mIAz9}*iu+Lw@N zAd(DOWmRT{zMp+7(Z%a;-~h9xjE>=4CJ1+cC}V8h;j?Vf0NGEbA!%Z4&r5A2(!Ycx zM~q8xyn1F6pv&I<9hRt6NIe$iudrOHd!<*2G*sSxjN%E3sHQ*4?8^lHFa;@srzMw% zQ&|c$z*1!ci*sa_xSQt%eif@#MJ_b_|N6}B+GmPYCxjx+r|TDJAh%(r2py9Cued-d zlhOJ|q&QJH94MtWMXB=_6l@#woVUlElRRXehK=xoUliR#a^Ns0g=PZR6{(Gc9cvHR zLEiGISzA<%wA=zS9pN-G_h zlMs)r@kmMGT-9Ls>XcKUSvZwoziPAJ8}4ZmAmpN6uPf6a{}vW$NA zIT{7y^(7Cu$1kq8%7I5v#*Q-YG=?o+{bii|&3ETM>NtjY#@1Wx{-utH2tJg9VAnTP zsF?^p7kh}bbOp%)h+Al)SHS#x$y#Q1eJB^f>CBI07zZ@F5HvDnpI!Kur=+Ytlvqe9 zhOiY-iXdmG=^;U!+xCr6KA`1Lz7)ppg*}8Qf!7_y0n8i70enQC92WoI0l+sQ6!04{ zZ-ltzB|N(b+a{s>4boMI0kb^@f41QHqs!((8BCCTdNLYKrik8se+R&Eh`a*dK+ZFU z{RTvNUthVgVe=~EH|ZazS^;&Jr{1B@6Fci_-JwRrmd4v7AblG)!vfI%;b9FFO0fM9;1*Ip=l z)acJkxNa|RyzhlbdY`qyX)*mN=LQnn7El|z2t@_}Ir1=Xi13H?adNI|*6h0oJ*>M3 z#uM}az?K#7XS2q&`T+Qo)%Jd~1CD;z7|spZ3_`i2eN)vaM@+PKU)PLuqkw*&AoV7l z_u6T=BICps(zq!uoyJsH)(f(txO;cYlGa%89#aCQKw>fo91Gm~Fve-TKi3VeT5~ZP zN!Lar_tm%}R;Kj`Fu=el7{3(1n8WQbJlZSd2>A1X7yEq&?k~})>0vO(5LNH~eXqD# zGsMr=9pmCeyG_xr&@`a%xI4NgKKrPzwy_%Psjn&!_9L%zx~XBcx# zdaeBQ8ot44HWcxlU#Bm2J8kVcy9of6b#Tc%1i%!3!W91v^Fy}yS#ccqb3e_DLo-CM zd`gGS*43Rr05qno1HQ99{cQ+*dtdGNub(?CE-Pkuf0TwZ@BYtVyt2idXS01~!Sj|u z^Ak$)=>MX#`g3CiH)`d|)2$*CL)IZA^HAYjW|-NVp~vj9YJMF8ZJWi#j9`aljX5Sv z)i(BcrZye7fA&sa(G7h~tCu7g1 zAw8b`M zKzDsKuWhFkGoq}M3NCvSw-D5zUMx$oKdCRh?s;ca>EOudFsIb4-3z^lU0qQirWp0$ z+)Bi5uVDa_<4@JEvGR70KYula$GrrDBTKk2LofPR#xThep&5+0FAWh zdNkO<0PI0QL5EhV{Wk?8_%Vr{zAQ>|qRMd!^3RaufRLOg$@a){c??wLCa&$!-#Gp3 zK@NmrZH%eN_iCA4R<7WfEeHiUTQk_cb5g>Z>2-4ATPtvyfjY>`?h`DJJApP!Qzx?%5)8Pyja}$Qc`;#SISmX~hA_Ju&-sDUWHiJre?; zjsFlQ8iS4$l~+`(l_t(9sep>ivCXx^@(abLsX_{+KxD%51KflGEbeBY+>4Mn6maT; zZeQCIW}pIDK`uo`@sJ@SbEvWW*j+%oD_pC|xZoqVUuQH}{QF|i9-r@a&{+N17$74B z;O#3d>8*f-n?)J2ry=zi)5SRZ>ja6Rc6Bl83UQW*cP?O)U0%hiiAvATXG{WR$a`XQ`K~c1Cj*L_ zd_6plcL8loLN(#5$@%oqITU6+6i!0?xS3L7{J%J{F}pYTa#E1n$5@c(i+ur_&6@2; z=nu_gjvTD9l$SNmw?(N1r&}Txns;_*I=B3E{Qx(Vx>giyG4m_X0Swzd1;(RhKRBakI15V#f$cR~5ceCR z8<7NLMMRm@(er)^Oi_FtHQT|o-@hkwz#gF-DUDNzQNrC{h|aSe=*(Rakj+=;fn5cG zzx#`T+jjka0ueONzX*^WKyadBj@q$gdVq+?Ns|-@nT*8Fr_Tuy6cZFniVDg)1wQQA zD#l5KH0G)a%8Kb}#R>a9i%-VQw<)))+e^lppzk->5{{VR-(~q{gtcNCxG)$*k=%`& z{6(tl4#79WKZ6ProO4l7HdEPje^cI)pm>KSOh5T=Lsnrw`6L1m{xYN}2^7FbVmUpK z*_kIYb!J7_UIS21oShQX@b)nFWrhHk#BN6!ZY3o%YuQk+N6c=;=i~exC&bKsGv2-0 z-75$SL!=g3OTN&hb;rbn*O8@Nu1}G}5?$E8btF&B&H^zf<#NB`)8hi#TFWr$&;=Sr zp49AzAEp{}+Lu{W5#QD2GAVondeC6USuJekPGsA-Fbh67OrS-)6*q(x)<8>Vgr^E* zPYM$xGJCMUp!>5w2C++$&(vgcLc~Aw=$p(!xUjT*tu%`Md{UT)8Sb?tF{}@Xc84$tzbxuNH^BWEUu0wjz|Vs&2Z;i%}7^`_(=jv zQ~k(H^t$hxKJ{5|FA>~{u!Z{mN;VgroQ|JJ)0}FX`aTbAKjw#4t)B>B7z6}OJ$ag9 zoQU!k(@z9&G>4zVg(pnn>T!o>OdkcrsdlR)z@wRolWU9y=;`;_Dw%MVe*- zNQQ`z{c+PKY7T=CXr(u?P-=!hc5`XM3&eTA(9~NHY3k@{6uCwNE@+sp`)f$jasET7 zfIGug>9L)7LJP>tIM(Vu@$rdBY==TW*;V(y)M5I6suM!|-|8%30qQuQI(^?xQU3#G zxc}l1>sb6ZkTn`6h5wF7?z{YfOF1)OVsCsq4%E!5~if4V!NANF1CEtV_`@N4P&6x<>T_j z^lE#**yCf>r8Q3lc1I*TIPh#~R4I)AN!i@`&Zd}hsvSC{V+8R zdC?0!WN<;I^YxMEnkAwOtq4xqMizUkObM!G3yp72d$jkQcAD{pG#2oEY)Ir-7>5Kw ztBOV)?C(0Age?!U&R3|ldlP3D{o4`tPl~G5Xh#J{un9?|7y;-5sd6!4e73Iv`O7Ql z812-xc0q@FGZ`-vaNOjvXzn>dWG}WE;PmtDkuhl~u!lku#;%bOFJz?n=kvINN8lLg z3fvhSK;f}x>&RcAu)!lZ-QlGmz%no9Bgt@54@e_rz%3M+{|JYzOCD@Y<>ds8)6Nz& z&NMhzi&}z?nFLrBYi`*L(cEmC(rZ`X7W!?B z(X+mQJ-aU$vKZsGTD*u2w_#X~fldy_)OqZkTe3pg3A^SkJ`dlCq0dtGr+0lf{r6LGbq0Gp$7Wzm?lwA{>i#c2ewX1wmtoA1tjd@MUU>bsAo4!Ij z_kG>Sc+`E7Hrs_!ZSr8}`P?|2hx)G3&v+}lSJtX?lMEpr$J<6j>C4=g@?jrDr}1@} zCmE|kozV>lwhQA;Wbkq4En<8l>SH`0=9R*0{n|-XK621})4|a%+UAIp8F#YjtR8PdlYB2?XbW$d|$dvm$!ibnHK3-<3I@rkbGg&h(o1Gr$7Pcy#sc$0_X@MlgPhW5U2~PY`TEu*D%|Yy?b(ntXX;R%gR# zzb7L+AuQeW!J4GomdO2_Z_fmwvYT_hV2FPevSBbp0mTg!iI#Q_lW?(Cpj`(30{<;E za)3y`l&MbQ2odnAhuz>p=d@4cR<9q7rR0)T-Ai3cR_Ca?Tw^f>t75wLswp56v-Kqmhp`! zNK`|?4dd|G9zb7lYS7kVF9cfW{!DROMl)R0NVMNu#kgNkPmlonLt#1!iGvbyeoQ~> zf84*}YBamh)R75OQMFw4VA<02fif0&?sMb6bdCobP)0r@iur%tN<}(YZ=%PM& zNovh3C;Q^*QQ@@i_yaWpy1$G}zb_I4X0(Pa*?ymihM(-lh(IlZ6?Z1|G&LNkrOpA{ zEi@cT2rEXFNE~B_t8*)ngel6uoH257%*s7?BmAY0&>L9SI#7foOMaXvA7aO=W5-jg8Z|=-qn=f=IGZIf4;A zOdwy*c7H8r-=O_$wHHH5~(=ShI3^-vM4QZ`dwMYExK=U3Rfw~m-+Z9gtoV4gc6 z;W&Tj6Chv{`b6wuio=i|&=*{RUm=)cZo4;mu$$85&x zIT`f93CsX38%08YfFbfWGq!W&k(qrLJS&V0og2v{H?5&D&9s)7fj1rLhWVxc?!frb z*wU>t(Vfj_Ee-qgb^4YJS>k8K7&e0&cg%*_Z4!Tz_O`OF?S6049bb~ta7E3o4LAt> zWbM^~*Uu@Z*W@m;vtoCdD$z2poBxqqJVB7CWe5TYsGSN32=(8Gq@$^kl@a}4OUA!4 zoN36|tg&HqJ*gtL?JvBnIfb=}oUdFg6~Q4l3q>~wYg$q$5S);7!Clz(`08!c^uwGt z_19Did^w+cOS8spfCQR6_- z4US-|2>x;SqR}JZeQ*hD8{`F^WI^nrk#g5!x%x*7Of?j`8B*sk`W%tZEU0zd;nzJ5^pG1a;vcl@+>l>O8?#VrP_QV4P8T3R4)1ue z_+8uPG&qgWYmNPx@#55J2&x<&iO)*ECyG0yFjhhetVZ8(-5CTz`arL;9Wi^ArS*I$O0bcI38)gAs(Mtlq6TbdE$t5MwX@#T$Cj@PsM(Q{r#&9uh2Y2 zjf_eDnpK)97G|0;pUlUtd%bmm8JVe;|68XgGHTs-j{>Lz2R!SH!ZMk=r=p$_rpK*@7^zzzt5gsY_dEX zfkxtcwtQaBn{~Rid=VuE&Z@KDZgyACZ1_IzLdZp0;2=UI)`2`i1GtZY&gJE(bQ(yp z>PT}z(RWE4`|%x)g}~|j9|FsJFQp0nM10}raBZ_k^)*9V7~M)J8_()~iVr6Rw;Z@* z>4z)M+SL+5x>8IWr?13EWucAH2}#x;FL}-67TEU7G*k;2 zwtZ7J6wuq4kJx;fQGT%(6WAH(Dy)7AkzFiL{C4!ZrJT<8CC${3_jdhV4>omWgk&O|i>cd~ZEm z8^H~FdUeHr*1id}l{-;7T!+jqu#M`{q2Dkh7*`;01$7e0#S!q26}vBRL;ygM(Y z-K2z$R;q=CCGtYii(9i&g`XI5;?a_ODen8fFLX|jA`AMYGhg;o<&wlHW$Lla$m@}j z_e&ULz@K?CrtKqC?KAL@+GYfY)st(y3!R(tOBhO%XPz4JDmy5C_4(VBY=kYbqdD#d z1T-~nmax(2_UBkd?&FGiKY+C2t5zb#)owLe_Rh_kpMwuS#ajPya>y$Nt+dogvUtp> z`Z@;@5iT>b5z3*J*hF^&S5(G!I!0RF_}y$#V?iVF>3jI`DB_MO%eN*5Q8#_6Mkf{n zs&+>r#5Jc(PzI8(O`wHNrwUwLDdV8(PVYU2ex=h)-|4RpL6W?$Y)TwxWN5IS6r8|c6o2bUXD8=#!7AgrKv580anJ*Ksy#F zWz_yf%kn9;V?ISWK?SHTg%T9#+uJq2(4W#F&Sdi4X-ld7@6zYnjJj%UdOJ*kO@kAg zAJ)r~i>^6PUsf#RrGqAZeN(4kNHGb0M8Yi5-&D4)^X0aYU2QAhaR6astyo^#Y5C~x zL|)oDD3w>r^^ObKcAx!DWrwKAPirN&JCQA4;4a<#9UENavK#LZltL?qZ{H1uIh}wy zzl*CH;W%o78&T)GZv`2;X8jx<0(@blhI-|~rg`|&6_L68&~aYl0lI-lD2H;z_>VT%(GDn7cd;YBsBXhl&tvfkv>n1(9f)a04o(q z9)wcnMKP#ocXj&+6L_?GC0c~XPxKu;?8&KMUjg3+P7aPXR%%w3 z^k$AmR)78MRYugp^f90SJ$Z|a#*G$ng`&(WB9bHJ!c49Hs~L2shZ?L*2sb-Mt^8V+P&(df{P)K^g>q! z!J&6iNt?An8dTi^lWu4qxVZX1bn%THEOr9)kOOq#{X^H^*6_(X%B* zWr@DWw)b{yrzR^t)`aFPHhez2>ckrZ+!@1&J_Q8H#NxM`;mhzNZi* zjR$h7(HUep)m`eF%%r!y&pme&wv#L2h!WrFSr%a6L2uUDrF8`0wpsX&&{H+EBO7pp zJfzgJg!LX`u82<~zN^T5mo9Br;eT6x1Nmo#HnvO4>;MGo1B7GzL-?m;d3zgMhreny zGp5!$fB{9srR#sSb>2};ENvJMNC!i2f`|r!H0doWAfkdu6DfjpFm&m?M0zpwE=3UK z0+PtR2Bbj0GR>hM{9wb^J7nzI$QSvDF2gToZZs z8Oxi+`i2iXw%I+0lL?XkyS$5bcPsnUE}2V9 z9f(VC1#&V8Ky>$?=kV}zw{!FcvNGSJyI!*?j~Qj2W_-DN+T~lAgbaBq`Ddl-CYH#{ z5X=?`%JX!oxKl=Ya#d%=zE}K7q1s=Ga@W}WyOHb>c$K|Sy|2`}U)Q73ao_|FAH~%u zi*o!$i8-B~k&k56t<57B!|BdJ6)UMI2Vq@2JVQ9D`jey;exB2{#hlvS2SGIgnygtb><^%WcS z5%|9CJVb~BKfRP_L|)YCH{xhGRUdV-QzCm>A}U3A%E<-J2s_Y7UUIu*H_fHSd7!IH8)ju_mCTU`hMSAAzdxrg5cIX z{V=7J)IzY0LS|A0RLmidX;WfY17faw#_*n~5N8|X7elP--3gaHH1GtjlknCe;eIE> zb&|v@*(=qy6~t(9?1cqo7+&?Z-DBYa%}Zue?t&J?y*oh{@`^Sl#x}@B}UzzN`-@>SSnTd~Y8ca)JV0G(Lpyh@yW^-B% zW+@?;QMl(3{L!r*{q%u7+y=$V^{(}t+%k%0XZ7_C>)dGTYR}UPMkR4RWP) zV(KdW=bfE-gIm2eo>AgnqQmdq1!2?8jr(yEOI0@`&#~9PmYQ(2+ZnO3 zbj*U~thmuhdcKk;O{H^&(0oiQ-lX4QP&ffTr%{94Vf@TvT_(X*ES{5J>As;{t?K&d zSRA`)L)Y=nf6~zG7yHB%;3y-yOxW=5B<|^Q{A}yLv`4ZyU9Q=&2tB%tJwtNodROm| zeNW1;P$xU&oA6Fwem^mdrLf!{xS zoABN67TV(GuWzCw)!K?*R&ggv*CEmkA-Hg1W>L{7!m);p?6#PG)ps%JzNXa+M^XKH zfleaPn5-PJk}&gj7gd+Nu}OQJ8_s2KBmWHZxUdI%T@(p1@n&U4m6pBkK5Zp|gW&h!_w>6jpj%y3N3i$2HgCFRhny4!qt+9b-ioc+aon(nobr zSmy3^-nFFN498$j-$r?R{3rS3RR>N3sB3j2Ghl5C|2Yyuurk$ z+gol%tl^bZ8Rr*@WO@k(v)c?}*nCk$iBI=Pj#aqhL>0RE^T@+}&aQFTYCglTU&8#XEhWq^VEe;1S9Z(=+H7mS4W5sO^{f$+RBL zRCTg^PZcX14GA{q?oc$ko3{SZ+pi;$YtgbQHl^PpBi(lFX;8?gRQk_-K9HrC7c27E z;XAr8eH|mQMojzozLDdR7~v%tc#+>j83K>~>^XZC?E94YaU{(#rw4cc__Z$=ztgT} zphH2)apZe?oDL+DuVhwz{ZU#L5TSMfIk)e&2Q{m*D=K=%qqjCTs{M>Gblweg#eb;tOdzKHA^-oC{|@=%C?Ko2&L&BLKvu@oAm&4)?=_4cBp=@( zH^(34O7bxvf1%_rJ%Zx-#Y1AU*GrOf$m^sB9MPa(oZpHl;k9MXo202M_dS$-hmp!_lFE4mB`?zRxOFkS#Dh Ju4aD!_dhu?4JQBq literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/UnhydratedPairsCollectionJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/UnhydratedPairsCollectionJob.scala deleted file mode 100644 index 626cc35a8..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/UnhydratedPairsCollectionJob.scala +++ /dev/null @@ -1,209 +0,0 @@ -package com.twitter.simclusters_v2.scalding.tweet_similarity - -import com.twitter.ads.dataservice_account.snapshot.jobs.DbSnapshotsPromotedTweetsScalaDataset -import com.twitter.conversions.DurationOps._ -import com.twitter.dal.client.dataset.TimePartitionedDALDataset -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.ProcrevAtla -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.simclusters_v2.scalding.tweet_similarity.TweetPairLabelCollectionUtil.MaxFavPerUser -import com.twitter.simclusters_v2.thriftscala.LabelledTweetPairs -import com.twitter.simclusters_v2.thriftscala.{FeaturedTweet => FeaturedTweetThrift} -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * Collect unhydrated training pairs for supervised tweet similarity. - * Here're the steps for this job - * 1) Consider non-promoted tweets that are created within the given #lookback days - * 2) From the tweets in 1), get co-engaged pairs - * 3) Take all tweets shown in 2), and get co-impressed pairs. Note that we take all tweets (not tweet pairs) in 2). - * That is, a co-impressed pairs (t1,t2) will be considered iff t1 appears in 2) and t2 appears in 2). - * But (t1, t2) doesn't need to appear as a pair in 2). - * 4) Compute labels from co-engaged pairs and co-impressed pairs. - * A pair is true if its user has co-engaged the pair, and is false if otherwise. - */ -object UnhydratedPairsCollectionJob { - //tweets have to be created within dateRange - lookbackdays in order to be considered - val LookbackDays = 2 - - def getLabelledPairs( - dateRange: DateRange, - timeframe: Long, - maxSamplesPerClass: Int, - dalDataset: TimePartitionedDALDataset[LabelledTweetPairs], - outputPath: String - )( - implicit timeZone: TimeZone - ): Execution[Unit] = { - - val promotedTweets = DAL - .readMostRecentSnapshot(DbSnapshotsPromotedTweetsScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(ProcrevAtla)) - .toTypedPipe - - val tweetAuthorPairs = - TweetPairLabelCollectionUtil.getTweetAuthorPairs(dateRange.prepend(Days(LookbackDays))) - - val tweets = - TweetPairLabelCollectionUtil.getNonPromotedTweets(promotedTweets, tweetAuthorPairs.keys) - - val coengagedPairs = TweetPairLabelCollectionUtil.getCoengagedPairs( - TweetPairLabelCollectionUtil.getFavEvents(dateRange, MaxFavPerUser), - tweets, - timeframe) - - val engagedTweets = coengagedPairs.map { - // Consider only query tweet b/c coengagedPairs contains both (t1,t2) and (t2,t1) - case (_, queryFeaturedTweet, _, _) => queryFeaturedTweet.tweet - }.distinct - - val coimpressedPairs = TweetPairLabelCollectionUtil - .getCoimpressedPairs( - TweetPairLabelCollectionUtil.getImpressionEvents(dateRange), - engagedTweets, - timeframe) - - val rawLabelledPairs = - TweetPairLabelCollectionUtil.computeLabelledTweetPairs(coengagedPairs, coimpressedPairs) - - val labelledPairs = - if (maxSamplesPerClass > 0) - TweetPairLabelCollectionUtil.getQueryTweetBalancedClassPairs( - rawLabelledPairs, - maxSamplesPerClass) - else - rawLabelledPairs - - val perQueryStatsExec = - if (maxSamplesPerClass > 0) { - Execution - .zip( - TweetPairLabelCollectionUtil - .getPerQueryStatsExec(rawLabelledPairs, s"$outputPath/per_query_stats", "raw"), - TweetPairLabelCollectionUtil - .getPerQueryStatsExec(labelledPairs, s"$outputPath/per_query_stats", "final") - ).unit - } else { - TweetPairLabelCollectionUtil.getPerQueryStatsExec( - labelledPairs, - s"$outputPath/per_query_stats", - "final") - } - - Execution - .zip( - labelledPairs - .map { - case (queryFeaturedTweet, candidateFeaturedTweet, label) => - LabelledTweetPairs( - FeaturedTweetThrift( - tweetId = queryFeaturedTweet.tweet, - timestamp = queryFeaturedTweet.timestamp), - FeaturedTweetThrift( - tweetId = candidateFeaturedTweet.tweet, - timestamp = candidateFeaturedTweet.timestamp), - label - ) - } - .writeDALExecution(dalDataset, D.Daily, D.Suffix(outputPath), D.EBLzo())(dateRange), - perQueryStatsExec - ).unit - } -} - -/** To run: - * scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity:unhydrated_pair_collection-adhoc \ - --user cassowary \ - --submitter hadoopnest2.atla.twitter.com \ - --hadoop-properties "mapreduce.reduce.java.opts=-Xmx8000m mapreduce.reduce.memory.mb=8000 scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=2000 mapreduce.task.timeout=0" \ - --main-class com.twitter.simclusters_v2.scalding.tweet_similarity.UnhydratedPairsCollectionAdhocApp -- \ - --date 2020-03-04 \ - --output_path /user/cassowary/adhoc/unhydrated_pairs/2020-03-04_class_balanced \ - --samples_per_query_tweet_class 2000 - * */ -object UnhydratedPairsCollectionAdhocApp extends TwitterExecutionApp { - implicit val timeZone: TimeZone = DateOps.UTC - implicit val dateParser: DateParser = DateParser.default - - override def job: Execution[Unit] = - Execution.withId { implicit uniqueId => - Execution.withArgs { args: Args => - implicit val dateRange: DateRange = DateRange.parse(args.list("date")) - val maxSamplesPerClass: Int = args.int("samples_per_query_tweet_class", default = 2000) - val timeframe: Int = 30 - val outputPath: String = s"${args("output_path")}_${timeframe}min" - - UnhydratedPairsCollectionJob.getLabelledPairs( - dateRange, - timeframe.minute.inMilliseconds, - maxSamplesPerClass, - TweetSimilarityUnhydratedPairs30MinScalaDataset, - outputPath - ) - } - } -} - -/** -capesospy-v2 update --build_locally --start_cron \ -unhydrated_pair_collection_30min src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object UnhydratedPairsCollection30MinScheduledApp extends ScheduledExecutionApp { - - override def batchIncrement: Duration = Hours(24) - override def firstTime: RichDate = RichDate("2020-03-26") - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val maxSamplesPerClass: Int = args.int("samples_per_query_tweet_class", default = 2000) - val timeframe: Int = 30 - val outputPath: String = - s"/user/cassowary/processed/tweet_similarity/unhydrated_pairs_${timeframe}min" - - UnhydratedPairsCollectionJob.getLabelledPairs( - dateRange, - timeframe.minute.inMilliseconds, - maxSamplesPerClass, - TweetSimilarityUnhydratedPairs30MinScalaDataset, - outputPath) - } -} - -/** -capesospy-v2 update --build_locally --start_cron \ -unhydrated_pair_collection_120min src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object UnhydratedPairsCollection120MinScheduledApp extends ScheduledExecutionApp { - - override def batchIncrement: Duration = Hours(24) - override def firstTime: RichDate = RichDate("2020-03-26") - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val maxSamplesPerClass: Int = args.int("samples_per_query_tweet_class", default = 2000) - val timeframe: Int = 120 - val outputPath: String = - s"/user/cassowary/processed/tweet_similarity/unhydrated_pairs_${timeframe}min" - - UnhydratedPairsCollectionJob.getLabelledPairs( - dateRange, - timeframe.minute.inMilliseconds, - maxSamplesPerClass, - TweetSimilarityUnhydratedPairs120MinScalaDataset, - outputPath) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/BUILD.bazel deleted file mode 100644 index e231ab769..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/BUILD.bazel +++ /dev/null @@ -1,40 +0,0 @@ -scala_library( - platform = "java8", - tags = ["bazel-only"], - dependencies = [ - "3rdparty/jvm/com/twitter/storehaus:algebra", - "3rdparty/jvm/com/twitter/storehaus:core", - "snowflake:id", - "src/java/com/twitter/ml/api/constant", - "src/scala/com/twitter/ml/api:api-base", - "src/scala/com/twitter/rux/landing_page/data_pipeline:labeled_rux_service_scribe-scala", - "src/scala/com/twitter/rux/landing_page/data_pipeline:landing_page_labeled_data_record-java", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/dalv2/dataset", - "src/scala/com/twitter/scalding_internal/job", - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - "src/scala/com/twitter/scalding_internal/source", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/simclusters_v2/common", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/summingbird/common", - "src/scala/com/twitter/wtf/scalding/jobs/common:ddg_util", - "twml/runtime/src/main/scala/com/twitter/twml/runtime/scalding", - ], -) - -hadoop_binary( - name = "rux_landing_ddg_analysis-adhoc", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.evaluation.RUXLandingDdgAnalysisAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":evaluation", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..f7f6404ba7fe8b99754a8ebd032650d63ec4858e GIT binary patch literal 37141 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 - val prediction = new RichDataRecord(predictedDataRecord, featureContext) - .getFeatureValue(predictionFeature).toDouble - val richDataRecord = new RichDataRecord(originalDataRecord, featureContext) - ( - richDataRecord.getFeatureValue(TweetSimilarityFeatures.QueryTweetId).toLong, - richDataRecord.getFeatureValue(TweetSimilarityFeatures.CandidateTweetId).toLong, - richDataRecord.getFeatureValue(TweetSimilarityFeatures.Label).booleanValue, - richDataRecord.getFeatureValue(TweetSimilarityFeatures.CosineSimilarity).toDouble, - prediction - ) - } - } - - override def job: Execution[Unit] = - Execution.withId { implicit uniqueId => - Execution.withArgs { args: Args => - implicit val dateRange: DateRange = DateRange.parse(args.list("date")) - val outputPath: String = args("output_path") - val dataset: DataSetPipe = DailySuffixFeatureSource(args("dataset_path")).read - val modelSource: String = args("model_path") - val modelName: String = "tweet_similarity" - - getPrediction(dataset, getPredictor(modelName, modelSource)) - .writeExecution(TypedTsv[(Long, Long, Boolean, Double, Double)](outputPath)) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/RUXLandingDdgAnalysisAdhocApp.docx b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/RUXLandingDdgAnalysisAdhocApp.docx new file mode 100644 index 0000000000000000000000000000000000000000..19ff39beb21500308b508f66f1b4dbb2d1900d46 GIT binary patch literal 37970 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/RUXLandingDdgAnalysisAdhocApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/RUXLandingDdgAnalysisAdhocApp.scala deleted file mode 100644 index 8cb575ee5..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation/RUXLandingDdgAnalysisAdhocApp.scala +++ /dev/null @@ -1,82 +0,0 @@ -package com.twitter.simclusters_v2.scalding.tweet_similarity.evaluation - -import com.twitter.rux.landing_page.data_pipeline.LabeledRuxServiceScribeScalaDataset -import com.twitter.rux.landing_page.data_pipeline.thriftscala.LandingPageLabel -import com.twitter.rux.service.thriftscala.FocalObject -import com.twitter.rux.service.thriftscala.UserContext -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.simclusters_v2.common.TweetId -import com.twitter.simclusters_v2.common.UserId -import com.twitter.wtf.scalding.jobs.common.DDGUtil -import java.util.TimeZone - -/** To run: -scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/evaluation:rux_landing_ddg_analysis-adhoc \ ---user cassowary \ ---submitter hadoopnest2.atla.twitter.com \ ---main-class com.twitter.simclusters_v2.scalding.tweet_similarity.evaluation.RUXLandingDdgAnalysisAdhocApp -- \ ---date 2020-04-06 2020-04-13 \ ---ddg model_based_tweet_similarity_10254 \ ---version 1 \ ---output_path /user/cassowary/adhoc/ddg10254 - * */ -object RUXLandingDdgAnalysisAdhocApp extends TwitterExecutionApp { - override def job: Execution[Unit] = - Execution.withId { implicit uniqueId => - Execution.withArgs { args: Args => - implicit val timeZone: TimeZone = DateOps.UTC - implicit val dateParser: DateParser = DateParser.default - implicit val dateRange: DateRange = DateRange.parse(args.list("date")) - val ddgName: String = args("ddg") - val ddgVersion: String = args("version") - val outputPath: String = args("output_path") - val now = RichDate.now - - val ruxLabels = getLabeledRuxServiceScribe(dateRange).map { - case (userId, focalTweet, candidateTweet, impression, fav) => - userId -> (focalTweet, candidateTweet, impression, fav) - } - - // getUsersInDDG reads from a snapshot dataset. - // Just prepend dateRange so that we can look back far enough to make sure there is data. - DDGUtil - .getUsersInDDG(ddgName, ddgVersion.toInt)(DateRange(now - Days(7), now)).map { ddgUser => - ddgUser.userId -> (ddgUser.bucket, ddgUser.enterUserState.getOrElse("no_user_state")) - }.join(ruxLabels) - .map { - case (userId, ((bucket, state), (focalTweet, candidateTweet, impression, fav))) => - (userId, bucket, state, focalTweet, candidateTweet, impression, fav) - } - .writeExecution( - TypedTsv[(UserId, String, String, TweetId, TweetId, Int, Int)](s"$outputPath")) - } - } - - def getLabeledRuxServiceScribe( - dateRange: DateRange - ): TypedPipe[(UserId, TweetId, TweetId, Int, Int)] = { - DAL - .read(LabeledRuxServiceScribeScalaDataset, dateRange) - .toTypedPipe.map { record => - ( - record.ruxServiceScribe.userContext, - record.ruxServiceScribe.focalObject, - record.landingPageLabel) - }.flatMap { - case ( - Some(UserContext(Some(userId), _, _, _, _, _, _, _)), - Some(FocalObject.TweetId(tweet)), - Some(labels)) => - labels.map { - case LandingPageLabel.LandingPageFavoriteEvent(favEvent) => - //(focal tweet, impressioned tweet, impression, fav) - (userId, tweet, favEvent.tweetId, 0, 1) - case LandingPageLabel.LandingPageImpressionEvent(impressionEvent) => - (userId, tweet, impressionEvent.tweetId, 1, 0) - } - case _ => Nil - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/BUILD.bazel b/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/BUILD.bazel deleted file mode 100644 index d196a0d99..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/BUILD.bazel +++ /dev/null @@ -1,59 +0,0 @@ -scala_library( - sources = [ - "*.scala", - ], - platform = "java8", - tags = [ - "bazel-compatible", - "bazel-only", - ], - dependencies = [ - "src/java/com/twitter/sbf/core", - "src/java/com/twitter/sbf/graph", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:simclusters_v2_embeddings_lite-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/presto_hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "src/scala/com/twitter/simclusters_v2/scalding/common/matrix", - "src/scala/com/twitter/wtf/entity_real_graph/common", - "src/scala/com/twitter/wtf/entity_real_graph/scalding/common", - "src/scala/com/twitter/wtf/scalding/jobs/common:execution_app", - "src/scala/com/twitter/wtf/scalding/jobs/common:sources", - "src/scala/com/twitter/wtf/scalding/jobs/common:stats_util", - "src/thrift/com/twitter/recos/entities:entities-thrift-scala", - "src/thrift/com/twitter/wtf/entity_real_graph:entity_real_graph-thrift-scala", - "usersource/snapshot/src/main/scala/com/twitter/usersource/snapshot/flat:usersource_flat-scala", - "usersource/snapshot/src/main/thrift/com/twitter/usersource/snapshot/flat:flat-scala", - ], -) - -hadoop_binary( - name = "update_known_for_20m_145k_2020-adhoc", - main = "com.twitter.simclusters_v2.scalding.update_known_for.UpdateKnownFor20M145K2020Adhoc", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":update_known_for", - ], -) - -hadoop_binary( - name = "update_known_for_20m_145k_2020", - main = "com.twitter.simclusters_v2.scalding.update_known_for.UpdateKnownFor20M145K2020", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":update_known_for", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..7bb29da230e7e7fc39f578c17d9fa672583a366c GIT binary patch literal 37122 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 JkM1524*+<)P)q;- literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownFor20M145K2020.docx b/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownFor20M145K2020.docx new file mode 100644 index 0000000000000000000000000000000000000000..6d42f7864724fb9dc150e1f473b2f752b89aeb8f GIT binary patch literal 39756 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownFor20M145K2020.scala b/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownFor20M145K2020.scala deleted file mode 100644 index 07f070592..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownFor20M145K2020.scala +++ /dev/null @@ -1,256 +0,0 @@ -package com.twitter.simclusters_v2.scalding.update_known_for - -import com.twitter.bijection.scrooge.BinaryScalaCodec -import com.twitter.hermit.candidate.thriftscala.Candidates -import com.twitter.logging.Logger -import com.twitter.pluck.source.cassowary.FollowingsCosineSimilaritiesManhattanSource -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding.DateOps -import com.twitter.scalding.DateParser -import com.twitter.scalding.Days -import com.twitter.scalding.Execution -import com.twitter.scalding.RichDate -import com.twitter.scalding.TypedTsv -import com.twitter.scalding.UniqueID -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.AllowCrossClusterSameDC -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.simclusters_v2.common.ClusterId -import com.twitter.simclusters_v2.common.ModelVersions -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import com.twitter.simclusters_v2.hdfs_sources.InternalDataPaths -import com.twitter.simclusters_v2.hdfs_sources.SimclustersV2KnownFor20M145KDec11ScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.SimclustersV2KnownFor20M145KUpdatedScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.SimclustersV2RawKnownFor20M145K2020ScalaDataset -import com.twitter.simclusters_v2.scalding.KnownForSources -import com.twitter.simclusters_v2.scalding.KnownForSources.fromKeyVal -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * Scheduled job - * - * capesospy-v2 update --build_locally --start_cron update_known_for_20m_145k_2020 \ - * src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc.yaml - */ - -object UpdateKnownFor20M145K2020 extends ScheduledExecutionApp { - - override val firstTime: RichDate = RichDate("2020-10-04") - - override val batchIncrement: Duration = Days(7) - - private val tempLocationPath = "/user/cassowary/temp/simclusters_v2/known_for_20m_145k_2020" - - private val simsGraphPath = - "/atla/proc/user/cassowary/manhattan_sequence_files/approximate_cosine_similarity_follow" - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - Execution.getConfigMode.flatMap { - case (_, mode) => - implicit def valueCodec: BinaryScalaCodec[Candidates] = BinaryScalaCodec(Candidates) - // Step - 1 (DataProcessing): Parameters for getting mapped indices for user-ids - val minActiveFollowers = args.int("minActiveFollowers", 400) - val topK = args.int("topK", 20000000) - - // Step - 2 (DataProcessing): Parameters to remove users not in the topK most followed users from simsGraph - val maxNeighbors = args.int("maxNeighbors", 400) - - // Step - 3 (Final Clustering): Parameters to run the clustering algorithm - /* squareWeightEnable is a boolean flag that changes the edge weights obtained from the - underlying sims graph - a) If false - edge weight between two neighbors is just their cosine similarity. - b) If true - edge weight = cosine_sim * cosine_sim * 10. The squaring makes the higher - weight edges relatively more important; this is based on the intuition that a neighbor - with cosine similarity of 0.1 is more than 2x important compared to a neighbor with - cosine similarity of 0.05. The multiplication with 10 brings the weights back into a - 'nicer' range since squaring will reduce their absolute value. - */ - val squareWeightsEnable = args.boolean("squareWeightsEnable") - - val maxEpochsForClustering = args.int("maxEpochs", 3) - val wtCoeff = args.double("wtCoeff", 10.0) - - val previousKnownFor: TypedPipe[(UserId, Array[(ClusterId, Float)])] = - fromKeyVal( - DAL - .readMostRecentSnapshot( - SimclustersV2RawKnownFor20M145K2020ScalaDataset, - dateRange.embiggen(Days(30))) - .withRemoteReadPolicy(AllowCrossClusterSameDC) - .toTypedPipe, - ModelVersions.Model20M145K2020 - ) - - UpdateKnownForSBFRunner - .runUpdateKnownFor( - TypedPipe - .from(FollowingsCosineSimilaritiesManhattanSource(simsGraphPath)) - .map(_._2), - minActiveFollowers, - topK, - maxNeighbors, - tempLocationPath, - previousKnownFor, - maxEpochsForClustering, - squareWeightsEnable, - wtCoeff, - mode - ) - .flatMap { updateKnownFor => - Execution - .zip( - KnownForSources - .toKeyVal(updateKnownFor, ModelVersions.Model20M145K2020) - .writeDALVersionedKeyValExecution( - SimclustersV2RawKnownFor20M145K2020ScalaDataset, - D.Suffix(InternalDataPaths.RawKnownFor2020Path) - ), - UpdateKnownForSBFRunner - .evaluateUpdatedKnownFor(updateKnownFor, previousKnownFor) - .flatMap { emailText => - Util - .sendEmail( - emailText, - s"Change in cluster assignments for new KnownFor ModelVersion: 20M145K2020", - "no-reply@twitter.com") - Execution.unit - } - ).unit - } - } - } -} -/* -knownFor Week-1: -scalding remote run \ ---target src/scala/com/twitter/simclusters_v2/scalding/update_known_for:update_known_for_20m_145k_2020-adhoc \ ---main-class com.twitter.simclusters_v2.scalding.update_known_for.UpdateKnownFor20M145K2020Adhoc \ ---submitter atla-aor-08-sr1 --user cassowary \ ---submitter-memory 128192.megabyte --hadoop-properties "mapreduce.map.memory.mb=8192 mapreduce.map.java.opts='-Xmx7618M' mapreduce.reduce.memory.mb=8192 mapreduce.reduce.java.opts='-Xmx7618M'" \ --- \ ---date 2020-08-30 --maxNeighbors 100 --minActiveFollowers 400 --topK 20000000 --numNodesPerCommunity 200 --maxEpochs 4 --squareWeightsEnable --wtCoeff 10.0 \ ---inputSimsDir /atla/proc/user/cassowary/manhattan_sequence_files/approximate_cosine_similarity_follow \ ---outputClusterDir /user/cassowary/adhoc/your_ldap/simclusters/clustering_outputs/output_clustering_assignments_2020_readAgain_v4_week_1 - -knownFor Week-2: -scalding remote run \ ---target src/scala/com/twitter/simclusters_v2/scalding/update_known_for:update_known_for_20m_145k_2020-adhoc \ ---main-class com.twitter.simclusters_v2.scalding.update_known_for.UpdateKnownFor20M145K2020Adhoc \ ---submitter atla-aor-08-sr1 --user cassowary \ ---submitter-memory 128192.megabyte --hadoop-properties "mapreduce.map.memory.mb=8192 mapreduce.map.java.opts='-Xmx7618M' mapreduce.reduce.memory.mb=8192 mapreduce.reduce.java.opts='-Xmx7618M'" \ --- \ ---date 2020-08-30 --maxNeighbors 100 --minActiveFollowers 400 --topK 20000000 --numNodesPerCommunity 200 --maxEpochs 4 --squareWeightsEnable --wtCoeff 10.0 \ ---inputSimsDir /atla/proc/user/cassowary/manhattan_sequence_files/approximate_cosine_similarity_follow \ ---inputPreviousKnownForDataSet /user/cassowary/adhoc/your_ldap/simclusters/clustering_outputs/output_clustering_assignments_2020_readAgain_v4_week_1_KeyVal \ ---outputClusterDir /user/cassowary/adhoc/your_ldap/simclusters/clustering_outputs/output_clustering_assignments_2020_readAgain_v4_week_2 - */ - -object UpdateKnownFor20M145K2020Adhoc extends TwitterExecutionApp { - implicit val tz: java.util.TimeZone = DateOps.UTC - implicit val dp = DateParser.default - val log = Logger() - - def job: Execution[Unit] = - Execution.getConfigMode.flatMap { - case (config, mode) => - Execution.withId { implicit uniqueId => - val args = config.getArgs - - implicit def valueCodec: BinaryScalaCodec[Candidates] = BinaryScalaCodec(Candidates) - // Step - 1 (DataProcessing): Parameters for getting mapped indices for user-ids - val minActiveFollowers = args.int("minActiveFollowers", 400) - val topK = args.int("topK", 20000000) - - // Step - 2 (DataProcessing): Parameters to remove users not in the topK most followed users from simsGraph - val clusterAssignmentOutput = args("outputClusterDir") - val maxNeighbors = args.int("maxNeighbors", 400) - - // Step - 3 (Final Clustering): Parameters to run the clustering algorithm - val squareWeightsEnable = args.boolean("squareWeightsEnable") - - val maxEpochsForClustering = args.int("maxEpochs", 3) - val wtCoeff = args.double("wtCoeff", 10.0) - - val simsGraphPath = - "/atla/proc/user/cassowary/manhattan_sequence_files/approximate_cosine_similarity_follow" - // Read in the knownFor dataset, that can be used to initialize the clusters for this week. - val inputPreviousKnownFor: TypedPipe[(Long, Array[(Int, Float)])] = - args.optional("inputPreviousKnownForDataSet") match { - case Some(inputKnownForDir) => - println( - "Input knownFors provided, using these as the initial cluster assignments for users") - TypedPipe - .from(AdhocKeyValSources.knownForSBFResultsDevelSource(inputKnownForDir)) - case None => - println( - "Using knownFor Assignments from prod as no previous assignment was provided in the input") - if (args.boolean("dec11")) { - KnownForSources - .fromKeyVal( - DAL - .readMostRecentSnapshotNoOlderThan( - SimclustersV2KnownFor20M145KDec11ScalaDataset, - Days(30)).withRemoteReadPolicy(AllowCrossClusterSameDC).toTypedPipe, - ModelVersions.Model20M145KDec11 - ) - } else { - KnownForSources - .fromKeyVal( - DAL - .readMostRecentSnapshotNoOlderThan( - SimclustersV2KnownFor20M145KUpdatedScalaDataset, - Days(30)).withRemoteReadPolicy(AllowCrossClusterSameDC).toTypedPipe, - ModelVersions.Model20M145KUpdated - ) - } - } - UpdateKnownForSBFRunner - .runUpdateKnownFor( - TypedPipe - .from(FollowingsCosineSimilaritiesManhattanSource(simsGraphPath)) - .map(_._2), - minActiveFollowers, - topK, - maxNeighbors, - clusterAssignmentOutput, - inputPreviousKnownFor, - maxEpochsForClustering, - squareWeightsEnable, - wtCoeff, - mode - ) - .flatMap { updateKnownFor => - Execution - .zip( - updateKnownFor - .mapValues(_.toList).writeExecution(TypedTsv(clusterAssignmentOutput)), - updateKnownFor.writeExecution(AdhocKeyValSources.knownForSBFResultsDevelSource( - clusterAssignmentOutput + "_KeyVal")), - UpdateKnownForSBFRunner - .evaluateUpdatedKnownFor(updateKnownFor, inputPreviousKnownFor) - .flatMap { emailText => - Util - .sendEmail( - emailText, - s"Change in cluster assignments for new KnownFor ModelVersion: 20M145K2020" + clusterAssignmentOutput, - "no-reply@twitter.com") - Execution.unit - } - ).unit - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownForSBFRunner.docx b/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownForSBFRunner.docx new file mode 100644 index 0000000000000000000000000000000000000000..e686119521d60f33a2956adbdb28c4c8130475a7 GIT binary patch literal 45108 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownForSBFRunner.scala b/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownForSBFRunner.scala deleted file mode 100644 index 952e88d13..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/update_known_for/UpdateKnownForSBFRunner.scala +++ /dev/null @@ -1,685 +0,0 @@ -package com.twitter.simclusters_v2.scalding.update_known_for - -import com.twitter.algebird.Max -import com.twitter.hermit.candidate.thriftscala.Candidates -import com.twitter.sbf.core.AlgorithmConfig -import com.twitter.sbf.core.MHAlgorithm -import com.twitter.sbf.core.SparseBinaryMatrix -import com.twitter.sbf.core.SparseRealMatrix -import com.twitter.sbf.graph.Graph -import com.twitter.scalding.Days -import com.twitter.scalding.Execution -import com.twitter.scalding.Hdfs -import com.twitter.scalding.Mode -import com.twitter.scalding.Stat -import com.twitter.scalding.TypedTsv -import com.twitter.scalding.UniqueID -import com.twitter.scalding.commons.source.VersionedKeyValSource -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.ProcAtla -import com.twitter.simclusters_v2.common.ClusterId -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources.AdhocKeyValSources -import com.twitter.simclusters_v2.scalding.CompareClusters -import com.twitter.simclusters_v2.scalding.KnownForSources -import com.twitter.simclusters_v2.scalding.TopUser -import com.twitter.simclusters_v2.scalding.TopUserWithMappedId -import com.twitter.simclusters_v2.scalding.TopUsersSimilarityGraph -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.usersource.snapshot.flat.UsersourceFlatScalaDataset -import java.io.PrintWriter -import java.util.TimeZone -import org.apache.commons.math3.random.JDKRandomGenerator -import org.apache.commons.math3.random.RandomAdaptor -import org.apache.hadoop.fs.FileSystem -import org.apache.hadoop.fs.Path -import scala.collection.mutable - -object UpdateKnownForSBFRunner { - - /** - * The main logic of the job. It works as follows: - * - * 1. read the top 20M users, and convert their UserIds to an integer Id from 0 to 20M in order to use the clustering library - * 2. read the user similarity graph from Sims, and convert their UserIds to the same mapped integer Id - * 3. read the previous known_for data set for initialization of the clustering algorithm; - * for users without previous assignments, we randomly assign them to some unused clusters (if there are any). - * 4. run the clustering algorithm for x iterations (x = 4 in the prod setting) - * 5. output of the clustering result as the new known_for. - * - */ - def runUpdateKnownFor( - simsGraph: TypedPipe[Candidates], - minActiveFollowers: Int, - topK: Int, - maxNeighbors: Int, - tempLocationPath: String, - previousKnownFor: TypedPipe[(UserId, Array[(ClusterId, Float)])], - maxEpochsForClustering: Int, - squareWeightsEnable: Boolean, - wtCoeff: Double, - mode: Mode - )( - implicit - uniqueId: UniqueID, - tz: TimeZone - ): Execution[TypedPipe[(UserId, Array[(ClusterId, Float)])]] = { - - val tempLocationPathSimsGraph = tempLocationPath + "/sims_graph" - val tempLocationPathMappedIds = tempLocationPath + "/mapped_user_ids" - val tempLocationPathClustering = tempLocationPath + "/clustering_output" - - val mappedIdsToUserIds: TypedPipe[(Int, UserId)] = - getTopFollowedUsersWithMappedIds(minActiveFollowers, topK) - .map { - case (id, mappedId) => - (mappedId, id) - } - .shard(partitions = topK / 1e5.toInt) - - val mappedSimsGraphInput: TypedPipe[(Int, List[(Int, Float)])] = - getMappedSimsGraph( - mappedIdsToUserIds, - simsGraph, - maxNeighbors - ) // The simsGraph here consists of the mapped Ids and mapped ngbr Ids and not the original userIds - - val mappedSimsGraphVersionedKeyVal: VersionedKeyValSource[Int, List[(Int, Float)]] = - AdhocKeyValSources.intermediateSBFResultsDevelSource(tempLocationPathSimsGraph) - val mappedIdsToUserIdsVersionedKeyVal: VersionedKeyValSource[Int, UserId] = - AdhocKeyValSources.mappedIndicesDevelSource(tempLocationPathMappedIds) - - // exec to write intermediate results for mapped Sims Graph and mappedIds - val mappedSimsGraphAndMappedIdsWriteExec: Execution[Unit] = Execution - .zip( - mappedSimsGraphInput.writeExecution(mappedSimsGraphVersionedKeyVal), - mappedIdsToUserIds.writeExecution(mappedIdsToUserIdsVersionedKeyVal) - ).unit - - mappedSimsGraphAndMappedIdsWriteExec.flatMap { _ => - // The simsGraph and the mappedIds from userId(long) -> mappedIds are - // having to be written to a temporary location and read again before running - // the clustering algorithm. - - Execution - .zip( - readIntermediateExec( - TypedPipe.from(mappedSimsGraphVersionedKeyVal), - mode, - tempLocationPathSimsGraph), - readIntermediateExec( - TypedPipe.from(mappedIdsToUserIdsVersionedKeyVal), - mode, - tempLocationPathMappedIds) - ) - .flatMap { - case (mappedSimsGraphInputReadAgain, mappedIdsToUserIdsReadAgain) => - val previousKnownForMappedIdsAssignments: TypedPipe[(Int, List[(ClusterId, Float)])] = - getKnownForWithMappedIds( - previousKnownFor, - mappedIdsToUserIdsReadAgain, - ) - - val clusteringResults = getClusteringAssignments( - mappedSimsGraphInputReadAgain, - previousKnownForMappedIdsAssignments, - maxEpochsForClustering, - squareWeightsEnable, - wtCoeff - ) - clusteringResults - .flatMap { updatedKnownFor => - // convert the list of updated KnownFor to a TypedPipe - convertKnownForListToTypedPipe( - updatedKnownFor, - mode, - tempLocationPathClustering - ) - } - .flatMap { updatedKnownForTypedPipe => - // convert the mapped integer id to raw user ids - val updatedKnownFor = - updatedKnownForTypedPipe - .join(mappedIdsToUserIdsReadAgain) - .values - .swap - .mapValues(_.toArray) - - Execution.from(updatedKnownFor) - } - } - } - } - - /** - * Helper function to compare newKnownFor with the previous week knownFor assignments - */ - def evaluateUpdatedKnownFor( - newKnownFor: TypedPipe[(UserId, Array[(ClusterId, Float)])], - inputKnownFor: TypedPipe[(UserId, Array[(ClusterId, Float)])] - )( - implicit uniqueId: UniqueID - ): Execution[String] = { - - val minSizeOfBiggerClusterForComparison = 10 - - val compareClusterExec = CompareClusters.summarize( - CompareClusters.compare( - KnownForSources.transpose(inputKnownFor), - KnownForSources.transpose(newKnownFor), - minSizeOfBiggerCluster = minSizeOfBiggerClusterForComparison - )) - - val compareProducerExec = CompareClusters.compareClusterAssignments( - newKnownFor.mapValues(_.toList), - inputKnownFor.mapValues(_.toList) - ) - - Execution - .zip(compareClusterExec, compareProducerExec) - .map { - case (compareClusterResults, compareProducerResult) => - s"Cosine similarity distribution between cluster membership vectors for " + - s"clusters with at least $minSizeOfBiggerClusterForComparison members\n" + - Util.prettyJsonMapper - .writeValueAsString(compareClusterResults) + - "\n\n-------------------\n\n" + - "Custom counters:\n" + compareProducerResult + - "\n\n-------------------\n\n" - } - } - - /** - * - * Convert the list of updated KnownFor to a TypedPipe - * - * This step should have been done using TypedPipe.from(updatedKnownForList), however, due to the - * large size of the list, TypedPipe would throw out-of-memory exceptions. So we have to first - * dump it to a temp file on HDFS and using a customized read function to load to TypedPipe - * - */ - def convertKnownForListToTypedPipe( - updatedKnownForList: List[(Int, List[(ClusterId, Float)])], - mode: Mode, - temporaryOutputStringPath: String - ): Execution[TypedPipe[(Int, List[(ClusterId, Float)])]] = { - - val stringOutput = updatedKnownForList.map { - case (mappedUserId, clusterArray) => - assert(clusterArray.isEmpty || clusterArray.length == 1) - val str = if (clusterArray.nonEmpty) { - clusterArray.head._1 + " " + clusterArray.head._2 // each user is known for at most 1 cluster - } else { - "" - } - if (mappedUserId % 100000 == 0) - println(s"MappedIds:$mappedUserId ClusterAssigned$str") - s"$mappedUserId $str" - } - - // using Execution to enforce the order of the following 3 steps: - // 1. write the list of strings to a temp file on HDFS - // 2. read the strings to TypedPipe - // 3. delete the temp file - Execution - .from( - // write the output to HDFS; the data will be loaded to Typedpipe later; - // the reason of doing this is that we can not just do TypePipe.from(stringOutput) which - // results in OOM. - TopUsersSimilarityGraph.writeToHDFSIfHDFS( - stringOutput.toIterator, - mode, - temporaryOutputStringPath - ) - ) - .flatMap { _ => - println(s"Start loading the data from $temporaryOutputStringPath") - val clustersWithScores = TypedPipe.from(TypedTsv[String](temporaryOutputStringPath)).map { - mappedIdsWithArrays => - val strArray = mappedIdsWithArrays.trim().split("\\s+") - assert(strArray.length == 3 || strArray.length == 1) - val rowId = strArray(0).toInt - val clusterAssignment: List[(ClusterId, Float)] = - if (strArray.length > 1) { - List((strArray(1).toInt, strArray(2).toFloat)) - } else { - // the knownFors will have users with Array.empty as their assignment if - // the clustering step have empty results for that user. - Nil - } - - if (rowId % 100000 == 0) - println(s"rowId:$rowId ClusterAssigned: $clusterAssignment") - (rowId, clusterAssignment) - } - // return the dataset as an execution and delete the temp location - readIntermediateExec(clustersWithScores, mode, temporaryOutputStringPath) - } - } - - /** - * Helper function to read the dataset as execution and delete the temporary - * location on HDFS for PDP compliance - */ - def readIntermediateExec[K, V]( - dataset: TypedPipe[(K, V)], - mode: Mode, - tempLocationPath: String - ): Execution[TypedPipe[(K, V)]] = { - Execution - .from(dataset) - .flatMap { output => - // delete the temporary outputs for PDP compliance - mode match { - case Hdfs(_, conf) => - val fs = FileSystem.newInstance(conf) - if (fs.deleteOnExit(new Path(tempLocationPath))) { - println(s"Successfully deleted the temporary folder $tempLocationPath!") - } else { - println(s"Failed to delete the temporary folder $tempLocationPath!") - } - case _ => () - } - Execution.from(output) - } - } - - /** - * Converts the userIDs in the sims graph to their mapped integer indices. - * All the users who donot have a mapping are filtered out from the sims graph input - * - * @param mappedUsers mapping of long userIDs to their integer indices - * @param allEdges sims graph - * @param maxNeighborsPerNode number of neighbors for each user - * - * @return simsGraph of users and neighbors with their mapped interger ids - */ - def getMappedSimsGraph( - mappedUsers: TypedPipe[(Int, UserId)], - allEdges: TypedPipe[Candidates], - maxNeighborsPerNode: Int - )( - implicit uniqueId: UniqueID - ): TypedPipe[(Int, List[(Int, Float)])] = { - - val numEdgesAfterFirstJoin = Stat("num_edges_after_first_join") - val numEdgesAfterSecondJoin = Stat("num_edges_after_second_join") - val numEdgesLostTopKTruncated = Stat("num_edges_lost_topk_truncated") - val finalNumEdges = Stat("final_num_edges") - - val mappedUserIdsToIds: TypedPipe[(UserId, Int)] = mappedUsers.swap - allEdges - .map { cs => (cs.userId, cs.candidates) } - // filter the users not present in the mapped userIDs list - .join(mappedUserIdsToIds) - .withReducers(6000) - .flatMap { - case (id, (neighbors, mappedId)) => - val before = neighbors.size - val topKNeighbors = neighbors.sortBy(-_.score).take(maxNeighborsPerNode) - val after = topKNeighbors.size - numEdgesLostTopKTruncated.incBy(before - after) - topKNeighbors.map { candidate => - numEdgesAfterFirstJoin.inc() - (candidate.userId, (mappedId, candidate.score.toFloat)) - } - } - .join(mappedUserIdsToIds) - .withReducers(9000) - .flatMap { - case (id, ((mappedNeighborId, score), mappedId)) => - numEdgesAfterSecondJoin.inc() - // to make the graph symmetric, add those edges back that might have been filtered - // due to maxNeighborsPerNodefor a user but not for its neighbors - List( - (mappedId, Map(mappedNeighborId -> Max(score))), - (mappedNeighborId, Map(mappedId -> Max(score))) - ) - } - .sumByKey - .withReducers(9100) - .map { - case (id, nbrMap) => - // Graph initialization expects neighbors to be sorted in ascending order of ids - val sorted = nbrMap.mapValues(_.get).toList.sortBy(_._1) - finalNumEdges.incBy(sorted.size) - (id, sorted) - } - } - - def getTopFollowedUsersWithMappedIds( - minActiveFollowers: Int, - topK: Int - )( - implicit uniqueId: UniqueID, - timeZone: TimeZone - ): TypedPipe[(Long, Int)] = { - val numTopUsersMappings = Stat("num_top_users_with_mapped_ids") - println("Going to include mappedIds in output") - TopUsersSimilarityGraph - .topUsersWithMappedIdsTopK( - DAL - .readMostRecentSnapshotNoOlderThan( - UsersourceFlatScalaDataset, - Days(30)).withRemoteReadPolicy(ExplicitLocation(ProcAtla)).toTypedPipe, - minActiveFollowers, - topK - ) - .map { - case TopUserWithMappedId(TopUser(id, activeFollowerCount, screenName), mappedId) => - numTopUsersMappings.inc() - (id, mappedId) - } - } - - /** - * Map the userIds in the knownFor dataset to their integer Ids . - */ - def getKnownForWithMappedIds( - knownForDataset: TypedPipe[(UserId, Array[(ClusterId, Float)])], //original userId as the key - mappedIdsWithUserId: TypedPipe[(Int, UserId)] //mapped userId as the key - ): TypedPipe[(Int, List[(ClusterId, Float)])] = { - val userIdsAndTheirMappedIndices = mappedIdsWithUserId.map { - case (mappedId, originalId) => (originalId, mappedId) - } - knownForDataset.join(userIdsAndTheirMappedIndices).map { - case (userId, (userClusterArray, mappedUserId)) => - (mappedUserId, userClusterArray.toList) - } - } - - /** - * Attach the cluster assignments from knownFor dataset to the users in mapped Sims graph . - */ - def attachClusterAssignments( - mappedSimsGraph: TypedPipe[(Int, List[(Int, Float)])], - knownForAssignments: TypedPipe[(Int, List[(ClusterId, Float)])], - squareWeights: Boolean - )( - implicit uniqueId: UniqueID - ): TypedPipe[(Int, Array[Int], Array[Float], List[(ClusterId, Float)])] = { - val numPopularUsersWithNoKnownForBefore = Stat( - "num_popular_users_with_no_knownfor_before_but_popular_now") - - val input = mappedSimsGraph.map { - case (id, nbrsList) => - val ngbrIds = nbrsList.map(_._1).toArray - val ngbrWts = if (squareWeights) { - nbrsList.map(_._2).map(currWt => currWt * currWt * 10).toArray - } else { - nbrsList.map(_._2).toArray - } - (id, ngbrIds, ngbrWts) - } - - // input simsGraph consists of popular ppl with most followed users, who might not have been - // a knownFor user in the previous week. So left join with the knownFor dataset, and these - // new popular users will not have any prior cluster assignments while clustering this time - input - .groupBy(_._1) - .leftJoin(knownForAssignments.groupBy(_._1)) - .toTypedPipe - .map { - case (mappedUserId, ((mappedId, ngbrIds, ngbrWts), knownForResult)) => - val clustersList: List[(Int, Float)] = knownForResult match { - case Some(values) => values._2 - case None => - numPopularUsersWithNoKnownForBefore.inc() - List.empty - } - (mappedUserId, ngbrIds, ngbrWts, clustersList) - } - } - - /** - * Initialize graph with users and neighbors with edge weights . - */ - def getGraphFromSimsInput( - mappedSimsIter: Iterable[ - (Int, Array[Int], Array[Float], List[(ClusterId, Float)]) - ], - numUsers: Int - ): Graph = { - val nbrsIds: Array[Array[Int]] = new Array[Array[Int]](numUsers) - val nbrsWts: Array[Array[Float]] = new Array[Array[Float]](numUsers) - var numEdges = 0L - var numVertices = 0 - var numVerticesWithNoNgbrs = 0 - mappedSimsIter.foreach { - case (id, nbrArrayIds, nbArrayScores, _) => - nbrsIds(id) = nbrArrayIds - nbrsWts(id) = nbArrayScores - numEdges += nbrArrayIds.length - numVertices += 1 - if (numVertices % 100000 == 0) { - println(s"Done loading $numVertices many vertices. Edges so far: $numEdges") - } - } - - (0 until numUsers).foreach { i => - if (nbrsIds(i) == null) { - numVerticesWithNoNgbrs += 1 - nbrsIds(i) = Array[Int]() - nbrsWts(i) = Array[Float]() - } - } - - println( - s"Done loading graph with $numUsers nodes and $numEdges edges (counting each edge twice)") - println("Number of nodes with at least one neighbor is " + numVertices) - println("Number of nodes with at no neighbors is " + numVerticesWithNoNgbrs) - new Graph(numUsers, numEdges / 2, nbrsIds, nbrsWts) - } - - /** - * Helper function that initializes users to clusters based on previous knownFor assignments - * and for users with no previous assignments, assign them randomly to any of the empty clusters - */ - def initializeSparseBinaryMatrix( - graph: Graph, - mappedSimsGraphIter: Iterable[ - (Int, Array[Int], Array[Float], List[(ClusterId, Float)]) - ], // user with neighbors, neighbor wts and previous knownfor assignments - numUsers: Int, - numClusters: Int, - algoConfig: AlgorithmConfig, - ): SparseBinaryMatrix = { - var clustersSeenFromPreviousWeek: Set[Int] = Set.empty - var emptyClustersFromPreviousWeek: Set[Int] = Set.empty - var usersWithNoAssignmentsFromPreviousWeek: Set[Int] = Set.empty - mappedSimsGraphIter.foreach { - case (id, _, _, knownFor) => - if (knownFor.isEmpty) { - usersWithNoAssignmentsFromPreviousWeek += id - } - knownFor.foreach { - case (clusterId, _) => - clustersSeenFromPreviousWeek += clusterId - } - } - (1 to numClusters).foreach { i => - if (!clustersSeenFromPreviousWeek.contains(i)) emptyClustersFromPreviousWeek += i - } - var z = new SparseBinaryMatrix(numUsers, numClusters) - println("Going to initialize from previous KnownFor") - var zeroIndexedClusterIdsFromPreviousWeek: Set[Int] = Set.empty - for (clusterIdOneIndexed <- emptyClustersFromPreviousWeek) { - zeroIndexedClusterIdsFromPreviousWeek += (clusterIdOneIndexed - 1) - } - // Initialize z - users with no previous assignments are assigned to empty clusters - z.initFromSubsetOfRowsForSpecifiedColumns( - graph, - (gr: Graph, i: Integer) => algoConfig.rng.nextDouble, - zeroIndexedClusterIdsFromPreviousWeek.toArray, - usersWithNoAssignmentsFromPreviousWeek.toArray, - new PrintWriter(System.err) - ) - println("Initialized the empty clusters") - mappedSimsGraphIter.foreach { - case (id, _, _, knownFor) => - val currClustersForUserZeroIndexed = knownFor.map(_._1).map(x => x - 1) - // Users who have a previous cluster assignment are initialized with the same cluster - if (currClustersForUserZeroIndexed.nonEmpty) { - z.updateRow(id, currClustersForUserZeroIndexed.sorted.toArray) - } - } - println("Done initializing from previous knownFor assignment") - z - } - - /** - * Optimize the sparseBinaryMatrix. This function runs the clustering epochs and computes the - * cluster assignments for the next week, based on the underlying user-user graph - */ - def optimizeSparseBinaryMatrix( - algoConfig: AlgorithmConfig, - graph: Graph, - z: SparseBinaryMatrix - ): SparseBinaryMatrix = { - val prec0 = MHAlgorithm.clusterPrecision(graph, z, 0, 1000, algoConfig.rng) - println("Precision of cluster 0:" + prec0.precision) - val prec1 = MHAlgorithm.clusterPrecision(graph, z, 1, 1000, algoConfig.rng) - println("Precision of cluster 1:" + prec1.precision) - val algo = new MHAlgorithm(algoConfig, graph, z, new PrintWriter(System.err)) - val optimizedZ = algo.optimize - optimizedZ - } - - /** - * Helper function that takes the heuristically scored association of user to a cluster - * and returns the knownFor result - * @param srm SparseRealMatrix with (row, col) score denoting the membership score of user in the cluster - * @return assignments of users (mapped integer indices) to clusters with knownFor scores. - */ - def getKnownForHeuristicScores(srm: SparseRealMatrix): List[(Int, List[(ClusterId, Float)])] = { - val knownForAssignmentsFromClusterScores = (0 until srm.getNumRows).map { rowId => - val rowWithIndices = srm.getColIdsForRow(rowId) - val rowWithScores = srm.getValuesForRow(rowId) - val allClustersWithScores: Array[(ClusterId, Float)] = - rowWithIndices.zip(rowWithScores).map { - case (colId, score) => (colId + 1, score.toFloat) - } - if (rowId % 100000 == 0) { - println("Inside outputIter:" + rowId + " " + srm.getNumRows) - } - - val clusterAssignmentWithMaxScore: List[(ClusterId, Float)] = - if (allClustersWithScores.length > 1) { - // if sparseBinaryMatrix z has rows with more than one non-zero column (i.e a user - // initialized with more than one cluster), and the clustering algorithm doesnot find - // a better proposal for cluster assignment, the user's multi-cluster membership - // from the initialization step can continue. - // We found that this happens in ~0.1% of the knownFor users. Hence choose the - // cluster with the highest score to deal with such edge cases. - val result: (ClusterId, Float) = allClustersWithScores.maxBy(_._2) - println( - "Found a user with mappedId: %s with more than 1 cluster assignment:%s; Assigned to the best cluster: %s" - .format( - rowId.toString, - allClustersWithScores.mkString("Array(", ", ", ")"), - result - .toString())) - List(result) - } else { - allClustersWithScores.toList - } - (rowId, clusterAssignmentWithMaxScore) - } - knownForAssignmentsFromClusterScores.toList - } - - /** - * Function that computes the clustering assignments to users - * - * @param mappedSimsGraph user-user graph as input to clustering - * @param previousKnownForAssignments previous week clustering assignments - * @param maxEpochsForClustering number of neighbors for each user - * @param squareWeights boolean flag for the edge weights in the sims graph - * @param wtCoeff wtCoeff - * - * @return users with clusters assigned - */ - def getClusteringAssignments( - mappedSimsGraph: TypedPipe[(Int, List[(Int, Float)])], - previousKnownForAssignments: TypedPipe[(Int, List[(ClusterId, Float)])], - maxEpochsForClustering: Int, - squareWeights: Boolean, - wtCoeff: Double - )( - implicit uniqueId: UniqueID - ): Execution[List[(Int, List[(ClusterId, Float)])]] = { - - attachClusterAssignments( - mappedSimsGraph, - previousKnownForAssignments, - squareWeights).toIterableExecution.flatMap { mappedSimsGraphWithClustersIter => - val tic = System.currentTimeMillis - var maxVertexId = 0 - var maxClusterIdInPreviousAssignment = 0 - mappedSimsGraphWithClustersIter.foreach { - case (id, _, _, knownFor) => - maxVertexId = Math.max(id, maxVertexId) - knownFor.foreach { - case (clusterId, _) => - maxClusterIdInPreviousAssignment = - Math.max(clusterId, maxClusterIdInPreviousAssignment) - } - } - - val numUsersToCluster = - maxVertexId + 1 //since users were mapped with index starting from 0, using zipWithIndex - println("Total number of topK users to be clustered this time:" + numUsersToCluster) - println( - "Total number of clusters in the previous knownFor assignment:" + maxClusterIdInPreviousAssignment) - println("Will set number of communities to " + maxClusterIdInPreviousAssignment) - - // Initialize the graph with users, neighbors and the corresponding edge weights - val graph = getGraphFromSimsInput(mappedSimsGraphWithClustersIter, numUsersToCluster) - val toc = System.currentTimeMillis() - println("Time to load the graph " + (toc - tic) / 1000.0 / 60.0 + " minutes") - - // define the algoConfig parameters - val algoConfig = new AlgorithmConfig() - .withCpu(16).withK(maxClusterIdInPreviousAssignment) - .withWtCoeff(wtCoeff.toDouble) - .withMaxEpoch(maxEpochsForClustering) - algoConfig.divideResultIntoConnectedComponents = false - algoConfig.minClusterSize = 1 - algoConfig.updateImmediately = true - algoConfig.rng = new RandomAdaptor(new JDKRandomGenerator(1)) - - // Initialize a sparseBinaryMatrix with users assigned to their previous week knownFor - // assignments. For those users who do not a prior assignment, we assign - // the (user + the neighbors from the graph) to the empty clusters. - // Please note that this neighborhood-based initialization to empty clusters can - // have a few cases where the same user was assigned to more than one cluster - val z = initializeSparseBinaryMatrix( - graph, - mappedSimsGraphWithClustersIter, - numUsersToCluster, - maxClusterIdInPreviousAssignment, - algoConfig - ) - - // Run the epochs of the clustering algorithm to find the new cluster assignments - val tic2 = System.currentTimeMillis - val optimizedZ = optimizeSparseBinaryMatrix(algoConfig, graph, z) - val toc2 = System.currentTimeMillis - println("Time to optimize: %.2f seconds\n".format((toc2 - tic2) / 1000.0)) - println("Time to initialize & optimize: %.2f seconds\n".format((toc2 - toc) / 1000.0)) - - // Attach scores to the cluster assignments - val srm = MHAlgorithm.heuristicallyScoreClusterAssignments(graph, optimizedZ) - - // Get the knownfor assignments of users from the heuristic scores - // assigned based on neigbhorhood of the user and their cluster assignments - // The returned result has userIDs in the mapped integer indices - val knownForAssignmentsFromClusterScores: List[(Int, List[(ClusterId, Float)])] = - getKnownForHeuristicScores(srm) - - Execution.from(knownForAssignmentsFromClusterScores) - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BQGenerationUtil.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BQGenerationUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..8c1d5f61c4ff3dd2be514c2df0534cabff6bdcc5 GIT binary patch literal 39391 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 z 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 0.0 # min score threshold for user embedding values - |""".stripMargin - } - - // Read MTS Consumer Embeddings - Fav90P20M config - def getMTSConsumerEmbeddingsFav90P20MSQL( - queryDate: DateTime, - lookBackDays: Int - ): String = { - // We read the most recent snapshot of MTS Consumer Embeddings Fav90P20M - s""" - |SELECT userId, - | clusterIdToScores.key AS clusterId, - | clusterIdToScores.value.logFavUserScore AS userScore, - | clusterIdToScores.value.logFavUserScoreClusterNormalized AS clusterNormalizedLogFavScore - | FROM `$mtsConsumerEmbeddingsFav90P20MTable`, UNNEST(embedding.clusterIdToScores) AS clusterIdToScores - |WHERE DATE(ingestionTime) = ( - | -- Get latest partition time - | SELECT MAX(DATE(ingestionTime)) latest_partition - | FROM `$mtsConsumerEmbeddingsFav90P20MTable` - | WHERE Date(ingestionTime) BETWEEN - | DATE_SUB(Date("${queryDate}"), - | INTERVAL $lookBackDays DAY) AND DATE("${queryDate}") - |) AND clusterIdToScores.value.logFavUserScore > 0.0 - |""".stripMargin - } - - /* - * For a specific tweet engagement, retrieve the user id, tweet id, and timestamp - * - * Return: - * String - UserId, TweetId and Timestamp table SQL string format - * Table Schema - * - userId: Long - * - tweetId: Long - * - tsMillis: Long - */ - def getUserTweetEngagementEventPairSQL( - startTime: DateTime, - endTime: DateTime, - userTweetEngagementEventPairSqlPath: String, - userTweetEngagementEventPairTemplateVariable: Map[String, String] - ): String = { - val templateVariables = Map( - "START_TIME" -> startTime.toString(), - "END_TIME" -> endTime.toString(), - "NO_OLDER_TWEETS_THAN_DATE" -> startTime.toString() - ) ++ userTweetEngagementEventPairTemplateVariable - BQQueryUtils.getBQQueryFromSqlFile(userTweetEngagementEventPairSqlPath, templateVariables) - } - - /* - * Retrieve tweets and the # of favs it got from a given time window - * - * Return: - * String - TweetId and fav count table SQL string format - * Table Schema - * - tweetId: Long - * - favCount: Long - */ - def getTweetIdWithFavCountSQL( - startTime: DateTime, - endTime: DateTime, - ): String = { - val templateVariables = - Map( - "START_TIME" -> startTime.toString(), - "END_TIME" -> endTime.toString(), - ) - BQQueryUtils.getBQQueryFromSqlFile(TweetFavCountSQLPath, templateVariables) - } - - /* - * From a given time window, retrieve tweetIds that were created by specific author or media type - * - * Input: - * - startTime: DateTime - * - endTime: DateTime - * - filterMediaType: Option[Int] - * MediaType - * 1: Image - * 2: GIF - * 3: Video - * - filterNSFWAuthor: Boolean - * Whether we want to filter out NSFW tweet authors - * - * Return: - * String - TweetId table SQL string format - * Table Schema - * - tweetId: Long - */ - def getTweetIdWithMediaAndNSFWAuthorFilterSQL( - startTime: DateTime, - endTime: DateTime, - filterMediaType: Option[Int], - filterNSFWAuthor: Boolean - ): String = { - val sql = s""" - |SELECT DISTINCT tweetId - |FROM `twttr-bq-tweetsource-prod.user.unhydrated_flat` tweetsource, UNNEST(media) AS media - |WHERE (DATE(_PARTITIONTIME) >= DATE("${startTime}") AND DATE(_PARTITIONTIME) <= DATE("${endTime}")) AND - | timestamp_millis((1288834974657 + - | ((tweetId & 9223372036850581504) >> 22))) >= TIMESTAMP("${startTime}") - | AND timestamp_millis((1288834974657 + - | ((tweetId & 9223372036850581504) >> 22))) <= TIMESTAMP("${endTime}") - |""".stripMargin - - val filterMediaStr = filterMediaType match { - case Some(mediaType) => s" AND media.media_type =${mediaType}" - case _ => "" - } - val filterNSFWAuthorStr = if (filterNSFWAuthor) " AND nsfwUser = false" else "" - sql + filterMediaStr + filterNSFWAuthorStr - } - - /* - * From a given time window, retrieve tweetIds that fall into the NSFW deny list - * - * Input: - * - startTime: DateTime - * - endTime: DateTime - * - * Return: - * String - TweetId table SQL string format - * Table Schema - * - tweetId: Long - */ - def getNSFWTweetIdDenylistSQL( - startTime: DateTime, - endTime: DateTime, - ): String = { - val templateVariables = - Map( - "START_TIME" -> startTime.toString(), - "END_TIME" -> endTime.toString(), - ) - BQQueryUtils.getBQQueryFromSqlFile(NSFWTweetIdDenylistSQLPath, templateVariables) - } - - /* - * From a given cluster id to top k tweets table and a time window, - * (1) Retrieve the latest fav-based top tweets per cluster table within the time window - * (2) Inner join with the given table using cluster id and tweet id - * (3) Create the top k tweets per cluster table for the intersection - * - * Input: - * - startTime: DateTime - * - endTime: DateTime - * - topKTweetsForClusterKeySQL: String, a SQL query - * - * Return: - * String - TopKTweetsForClusterKey table SQL string format - * Table Schema - * - clusterId: Long - * - topKTweetsForClusterKey: (Long, Long) - * - tweetId: Long - * - tweetScore: Long - */ - def generateClusterTopTweetIntersectionWithFavBasedIndexSQL( - startTime: DateTime, - endTime: DateTime, - clusterTopKTweets: Int, - topKTweetsForClusterKeySQL: String - ): String = { - val templateVariables = - Map( - "START_TIME" -> startTime.toString(), - "END_TIME" -> endTime.toString(), - "CLUSTER_TOP_K_TWEETS" -> clusterTopKTweets.toString, - "CLUSTER_TOP_TWEETS_SQL" -> topKTweetsForClusterKeySQL - ) - BQQueryUtils.getBQQueryFromSqlFile( - ClusterTopTweetsIntersectionWithFavBasedIndexSQLPath, - templateVariables) - } - - /* - * Given a list of action types, build a string that indicates the user - * engaged with the tweet - * - * Example use case: We want to build a SQL query that specifies this user engaged - * with tweet with either fav or retweet actions. - * - * Input: - * - actionTypes: Seq("ServerTweetFav", "ServerTweetRetweet") - * - booleanOperator: "OR" - * Output: "ServerTweetFav.engaged = 1 OR ServerTweetRetweet.engaged = 1" - * - * Example SQL: - * SELECT ServerTweetFav, ServerTweetRetweet - * FROM table - * WHERE ServerTweetFav.engaged = 1 OR ServerTweetRetweet.engaged = 1 - */ - def buildActionTypesEngagementIndicatorString( - actionTypes: Seq[String], - booleanOperator: String = "OR" - ): String = { - actionTypes.map(action => f"""${action}.engaged = 1""").mkString(f""" ${booleanOperator} """) - } -} - -case class BQTableDetails( - projectName: String, - tableName: String, - datasetName: String) { - override def toString: String = s"${projectName}.${tableName}.${datasetName}" -} diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BUILD b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BUILD deleted file mode 100644 index 1ed000bc5..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BUILD +++ /dev/null @@ -1,10 +0,0 @@ -scala_library( - sources = [ - "*.scala", - ], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "src/scala/com/twitter/wtf/beam/bq_embedding_export:bq_embedding_export_lib", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..ee5596fd5ae59ac617e80764657c808ec46f3348 GIT binary patch literal 36771 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 HKac(f(R1_M literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/SimilarTopicsFromTopicFollowGraphApp.scala b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/SimilarTopicsFromTopicFollowGraphApp.scala deleted file mode 100644 index 78bd6d658..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/SimilarTopicsFromTopicFollowGraphApp.scala +++ /dev/null @@ -1,222 +0,0 @@ -package com.twitter.simclusters_v2.scalding.topic_recommendations - -import com.twitter.escherbird.scalding.source.FullMetadataSource -import com.twitter.interests_ds.jobs.interests_service.UserTopicRelationSnapshotScalaDataset -import com.twitter.interests.thriftscala.InterestRelationType -import com.twitter.interests.thriftscala.UserInterestsRelationSnapshot -import com.twitter.recos.entities.thriftscala.SemanticCoreEntity -import com.twitter.recos.entities.thriftscala.SemanticCoreEntityScoreList -import com.twitter.recos.entities.thriftscala.SemanticEntityScore -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DAL -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.dalv2.remote_access.ExplicitLocation -import com.twitter.scalding_internal.dalv2.remote_access.ProcAtla -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.SemanticCoreEntityId -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources.SimilarTopicsFromTopicFollowGraphScalaDataset -import com.twitter.simclusters_v2.scalding.common.matrix.SparseRowMatrix -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone - -/** - * In this file, we compute the similarities between topics based on how often they are co-followed - * by users. - * - * Similarity(i, j) = #co-follow(i,j) / sqrt(#follow(i) * #follow(j)) - * - * It works as follows: - * - * 1. it first reads the data set of user to topics follow graph, and construct a sparse matrix M with - * N rows and K columns, where N is the number of users, and K is the number of topics. - * In the matrix, M(u,i) = 1 if user u follows topic i; otherwise it is 0. In the sparse matrix, - * we only save non-zero elements. - * - * 2. we do l2-normalization for each column of the matrix M, to get a normalized version M'. - * - * 3. we get topic-topic similarity matrix S = M'.transpose.multiply(M'). The resulting matrix will - * contain the similarities between all topics, i.e., S(i,j) is the similarity we mentioned above. - * - * 4. for each topic, we only keep its K similar topics with largest similarity scores, while not - * including those with scores lower than a threshold. - * - */ -/** - * capesospy-v2 update --build_locally \ - * --start_cron similar_topics_from_topic_follow_graph \ - * src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object SimilarTopicsFromTopicFollowGraphScheduledApp extends ScheduledExecutionApp { - import SimilarTopics._ - - private val outputPath: String = - "/user/cassowary/manhattan_sequence_files/similar_topics_from_topics_follow_graph" - - override def firstTime: RichDate = RichDate("2020-05-07") - - override def batchIncrement: Duration = Days(7) - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val numSimilarTopics = args.int("numSimilarTopics", default = 100) - val scoreThreshold = args.double("scoreThreshold", default = 0.01) - - val numOutputTopics = Stat("NumOutputTopics") - - computeSimilarTopics( - getExplicitFollowedTopics, - getFollowableTopics, - numSimilarTopics, - scoreThreshold) - .map { - case (topicId, similarTopics) => - numOutputTopics.inc() - KeyVal( - topicId, - SemanticCoreEntityScoreList(similarTopics.map { - case (similarTopicId, score) => - SemanticEntityScore(SemanticCoreEntity(similarTopicId), score) - })) - } - .writeDALVersionedKeyValExecution( - SimilarTopicsFromTopicFollowGraphScalaDataset, - D.Suffix(outputPath), - version = ExplicitEndTime(dateRange.end) - ) - } - -} - -/** - scalding remote run --user cassowary --reducers 2000 \ - --target src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations:similar_topics_from_topic_follow_graph-adhoc \ - --main-class com.twitter.simclusters_v2.scalding.topic_recommendations.SimilarTopicsFromTopicFollowGraphAdhocApp \ - --submitter hadoopnest1.atla.twitter.com \ - -- --date 2020-04-28 - */ -object SimilarTopicsFromTopicFollowGraphAdhocApp extends AdhocExecutionApp { - import SimilarTopics._ - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val numSimilarTopics = args.int("numSimilarTopics", default = 100) - val scoreThreshold = args.double("scoreThreshold", default = 0.01) - - val numOutputTopics = Stat("NumOutputTopics") - - computeSimilarTopics( - getExplicitFollowedTopics, - getFollowableTopics, - numSimilarTopics, - scoreThreshold) - .map { - case (topicId, similarTopics) => - numOutputTopics.inc() - topicId -> similarTopics - .collect { - case (similarTopic, score) if similarTopic != topicId => - s"$similarTopic:$score" - } - .mkString(",") - } - .writeExecution( - TypedTsv("/user/cassowary/adhoc/topic_recos/similar_topics") - ) - } - -} - -object SimilarTopics { - - val UTTDomain: Long = 131L - - val FollowableTag: String = "utt:followable_topic" - - def getFollowableTopics( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[SemanticCoreEntityId] = { - val NumFollowableTopics = Stat("NumFollowableTopics") - - TypedPipe - .from( - new FullMetadataSource("/atla/proc" + FullMetadataSource.DefaultHdfsPath)()( - dateRange.embiggen(Days(7)))) - .flatMap { - case fullMetadata if fullMetadata.domainId == UTTDomain => - for { - basicMetadata <- fullMetadata.basicMetadata - indexableFields <- basicMetadata.indexableFields - tags <- indexableFields.tags - if tags.contains(FollowableTag) - } yield { - NumFollowableTopics.inc() - fullMetadata.entityId - } - case _ => None - } - .forceToDisk - } - - def getExplicitFollowedTopics( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[(UserId, Map[SemanticCoreEntityId, Double])] = { - - DAL - .readMostRecentSnapshotNoOlderThan(UserTopicRelationSnapshotScalaDataset, Days(7)) - .withRemoteReadPolicy(ExplicitLocation(ProcAtla)) - .toTypedPipe - .collect { - case userInterestsRelationSnapshot: UserInterestsRelationSnapshot - if userInterestsRelationSnapshot.interestType == "UTT" && - userInterestsRelationSnapshot.relation == InterestRelationType.Followed => - ( - userInterestsRelationSnapshot.userId, - Map(userInterestsRelationSnapshot.interestId -> 1.0)) - } - .sumByKey - } - - def computeSimilarTopics( - userTopicsFollowGraph: TypedPipe[(UserId, Map[SemanticCoreEntityId, Double])], - followableTopics: TypedPipe[SemanticCoreEntityId], - numSimilarTopics: Int, - scoreThreshold: Double - ): TypedPipe[(SemanticCoreEntityId, Seq[(SemanticCoreEntityId, Double)])] = { - val userTopicFollowGraph = - SparseRowMatrix[UserId, SemanticCoreEntityId, Double]( - userTopicsFollowGraph, - isSkinnyMatrix = true) - .filterCols(followableTopics) // filter out unfollowable topics - .colL2Normalize // normalization - // due to the small number of the topics, - // Scalding only allocates 1-2 mappers for the next step which makes it take unnecessarily long time. - // Changing it to 10 to make it a bit faster - .forceToDisk(numShardsOpt = Some(10)) - - userTopicFollowGraph - .transposeAndMultiplySkinnySparseRowMatrix(userTopicFollowGraph) - .filter { (i, j, v) => - // exclude topic itself from being considered as similar; also the similarity score should - // be larger than a threshold - i != j && v > scoreThreshold - } - .sortWithTakePerRow(numSimilarTopics)(Ordering.by(-_._2)) - } - -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersFromEM.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersFromEM.docx new file mode 100644 index 0000000000000000000000000000000000000000..9b50145d438b777586a484e69d57e769e952bc21 GIT binary patch literal 39838 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 Yy+dtv5?}@WSXDG2b6|P!r2qK!KPxnw{Qv*} literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersFromEM.scala b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersFromEM.scala deleted file mode 100644 index 44eb83f1e..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersFromEM.scala +++ /dev/null @@ -1,261 +0,0 @@ -package com.twitter.simclusters_v2.scalding.topic_recommendations -import com.twitter.bijection.Bufferable -import com.twitter.bijection.Injection -import com.twitter.recos.entities.thriftscala._ -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite._ -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.simclusters_v2.common.Country -import com.twitter.simclusters_v2.common.Language -import com.twitter.simclusters_v2.common.SemanticCoreEntityId -import com.twitter.simclusters_v2.common.TopicId -import com.twitter.simclusters_v2.common.UserId -import com.twitter.simclusters_v2.hdfs_sources.DataSources -import com.twitter.simclusters_v2.hdfs_sources.TopLocaleTopicsForProducerFromEmScalaDataset -import com.twitter.simclusters_v2.scalding.common.matrix.SparseMatrix -import com.twitter.simclusters_v2.scalding.embedding.common.EmbeddingUtil.ProducerId -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import com.twitter.simclusters_v2.thriftscala.UserAndNeighbors -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import com.twitter.wtf.scalding.jobs.common.EMRunner -import java.util.TimeZone - -/** - * In this file, we compute the top topics for a producer to be shown on the Topics To Follow Module on Profile Pages - * - * The top topics for a producer are computed using the Expectation-Maximization (EM) approach - * - * It works as follows: - * - * 1. Obtain the background model distribution of number of followers for a topic - * - * 2. Obtain the domain model distribution of the number of producer's followers who follow a topic - * - * 4. Iteratively, use the Expectation-Maximization approach to get the best estimate of the domain model's topic distribution for a producer - * - * 5. for each producer, we only keep its top K topics with highest weights in the domain model's topic distribution after the EM step - * - * 6. Please note that we also store the locale info for each producer along with the topics - */ -/** -scalding remote run --user cassowary --reducers 2000 \ - --target src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations:top_topics_for_producers_from_em-adhoc \ - --main-class com.twitter.simclusters_v2.scalding.topic_recommendations.TopicsForProducersFromEMAdhocApp \ - --submitter hadoopnest1.atla.twitter.com \ - -- --date 2020-07-05 --minActiveFollowers 10000 --minTopicFollowsThreshold 100 --maxTopicsPerProducerPerLocale 50 \ - --output_dir_topics_per_producer /user/cassowary/adhoc/your_ldap/ttf_profile_pages_producers_to_topics - */ -object TopicsForProducersFromEMAdhocApp extends AdhocExecutionApp { - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - import TopicsForProducersFromEM._ - val outputDirTopicsPerProducer = args("output_dir_topics_per_producer") - val minActiveFollowersForProducer = args.int("minActiveFollowers", 100) - val minTopicFollowsThreshold = args.int("minNumTopicFollows", 100) - val maxTopicsPerProducerPerLocale = args.int("maxTopicsPerProducer", 100) - val lambda = args.double("lambda", 0.95) - - val numEMSteps = args.int("numEM", 100) - - val topicsFollowedByProducersFollowers: TypedPipe[ - (ProducerId, (TopicId, Option[Language], Option[Country]), Double) - ] = getTopLocaleTopicsForProducersFromEM( - DataSources - .userUserNormalizedGraphSource(dateRange.prepend(Days(7))), - ExternalDataSources.topicFollowGraphSource, - ExternalDataSources.userSource, - ExternalDataSources.inferredUserConsumedLanguageSource, - minActiveFollowersForProducer, - minTopicFollowsThreshold, - lambda, - numEMSteps - ) - - val topTopicsPerLocaleProducerTsvExec = sortAndGetTopLocaleTopicsPerProducer( - topicsFollowedByProducersFollowers, - maxTopicsPerProducerPerLocale - ).writeExecution( - TypedTsv(outputDirTopicsPerProducer) - ) - - topTopicsPerLocaleProducerTsvExec - } -} - -/** -capesospy-v2 update --build_locally \ - --start_cron top_topics_for_producers_from_em \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object TopicsForProducersFromEMBatchApp extends ScheduledExecutionApp { - override val firstTime: RichDate = RichDate("2020-07-26") - - override val batchIncrement: Duration = Days(7) - - private val topTopicsPerProducerFromEMPath: String = - "/user/cassowary/manhattan_sequence_files/top_topics_for_producers_from_em" - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - import TopicsForProducersFromEM._ - - // threshold of the minimum number of active followers needed for a user to be considered as a producer - val minActiveFollowersForProducer = args.int("minActiveFollowers", 100) - - // threshold of the topic locale follows score needed for a topic to be considered as valid - val minTopicFollowsThreshold = args.int("minNumTopicFollows", 100) - - val maxTopicsPerProducer = args.int("maxTopicsPerProducer", 100) - - // lambda parameter for the EM algorithm - val lambda = args.double("lambda", 0.95) - - // number of EM iterations - val numEMSteps = args.int("numEM", 100) - - // (producer, locale) -> List<(topics, scores)> from Expectation Maximization approach - val topicsFollowedByProducersFollowers = getTopLocaleTopicsForProducersFromEM( - DataSources - .userUserNormalizedGraphSource(dateRange.prepend(Days(7))), - ExternalDataSources.topicFollowGraphSource, - ExternalDataSources.userSource, - ExternalDataSources.inferredUserConsumedLanguageSource, - minActiveFollowersForProducer, - minTopicFollowsThreshold, - lambda, - numEMSteps - ) - - val topLocaleTopicsForProducersFromEMKeyValExec = - sortAndGetTopLocaleTopicsPerProducer( - topicsFollowedByProducersFollowers, - maxTopicsPerProducer - ).map { - case ((producerId, languageOpt, countryOpt), topicsWithScores) => - KeyVal( - UserIdWithLocale( - userId = producerId, - locale = Locale(language = languageOpt, country = countryOpt)), - SemanticCoreEntityScoreList(topicsWithScores.map { - case (topicid, topicScore) => - SemanticEntityScore(SemanticCoreEntity(entityId = topicid), score = topicScore) - }) - ) - }.writeDALVersionedKeyValExecution( - TopLocaleTopicsForProducerFromEmScalaDataset, - D.Suffix(topTopicsPerProducerFromEMPath), - version = ExplicitEndTime(dateRange.end) - ) - topLocaleTopicsForProducersFromEMKeyValExec - } -} - -object TopicsForProducersFromEM { - - private val MinProducerTopicScoreThreshold = 0.0 - - implicit val sparseMatrixInj: Injection[ - (SemanticCoreEntityId, Option[Language], Option[Country]), - Array[Byte] - ] = - Bufferable.injectionOf[(SemanticCoreEntityId, Option[Language], Option[Country])] - - // This function takes the producer to topics map and generates the sorted and - // truncated top locale topics ranked list for each producer - def sortAndGetTopLocaleTopicsPerProducer( - producerToTopics: TypedPipe[(ProducerId, (TopicId, Option[Language], Option[Country]), Double)], - maxTopicsPerProducerPerLocale: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[((ProducerId, Option[Language], Option[Country]), List[(TopicId, Double)])] = { - val numProducersWithLocales = Stat("num_producers_with_locales") - producerToTopics - .map { - case (producerId, (topicId, languageOpt, countryOpt), score) => - ((producerId, languageOpt, countryOpt), Seq((topicId, score))) - }.sumByKey.mapValues { topicsList: Seq[(TopicId, Double)] => - numProducersWithLocales.inc() - topicsList - .filter(_._2 >= MinProducerTopicScoreThreshold).sortBy(-_._2).take( - maxTopicsPerProducerPerLocale).toList - }.toTypedPipe - } - - def getTopLocaleTopicsForProducersFromEM( - userUserGraph: TypedPipe[UserAndNeighbors], - followedTopicsToUsers: TypedPipe[(TopicId, UserId)], - userSource: TypedPipe[(UserId, (Country, Language))], - userLanguages: TypedPipe[(UserId, Seq[(Language, Double)])], - minActiveFollowersForProducer: Int, - minTopicFollowsThreshold: Int, - lambda: Double, - numEMSteps: Int - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[(ProducerId, (TopicId, Option[Language], Option[Country]), Double)] = { - - // Obtain Producer To Users Matrix - val producersToUsersMatrix: SparseMatrix[ProducerId, UserId, Double] = - TopicsForProducersUtils.getProducersToFollowedByUsersSparseMatrix( - userUserGraph, - minActiveFollowersForProducer) - - // Obtain Users to TopicsWithLocales Matrix - val topicToUsersMatrix: SparseMatrix[ - (TopicId, Option[Language], Option[Country]), - UserId, - Double - ] = TopicsForProducersUtils.getFollowedTopicsToUserSparseMatrix( - followedTopicsToUsers, - userSource, - userLanguages, - minTopicFollowsThreshold) - - // Domain input probability distribution is the Map(topics->followers) per producer locale - val domainInputModel = producersToUsersMatrix - .multiplySparseMatrix(topicToUsersMatrix.transpose).toTypedPipe.map { - case (producerId, (topicId, languageOpt, countryOpt), dotProduct) => - ((producerId, languageOpt, countryOpt), Map(topicId -> dotProduct)) - }.sumByKey.toTypedPipe.map { - case ((producerId, languageOpt, countryOpt), topicsDomainInputMap) => - ((languageOpt, countryOpt), (producerId, topicsDomainInputMap)) - } - - // BackgroundModel is the Map(topics -> Expected value of the number of users who follow the topic) - val backgroundModel = topicToUsersMatrix.rowL1Norms.map { - case ((topicId, languageOpt, countryOpt), numFollowersOfTopic) => - ((languageOpt, countryOpt), Map(topicId -> numFollowersOfTopic)) - }.sumByKey - - val resultsFromEMForEachLocale = domainInputModel.hashJoin(backgroundModel).flatMap { - case ( - (languageOpt, countryOpt), - ((producerId, domainInputTopicFollowersMap), backgroundModelTopicFollowersMap)) => - val emScoredTopicsForEachProducerPerLocale = EMRunner.estimateDomainModel( - domainInputTopicFollowersMap, - backgroundModelTopicFollowersMap, - lambda, - numEMSteps) - - emScoredTopicsForEachProducerPerLocale.map { - case (topicId, topicScore) => - (producerId, (topicId, languageOpt, countryOpt), topicScore) - } - } - resultsFromEMForEachLocale - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersUtils.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/TopicsForProducersUtils.docx new file mode 100644 index 0000000000000000000000000000000000000000..48f7012e14e3b61c8f636343d7dd31483812e6d6 GIT binary patch literal 38100 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 minTopicFollowsThreshold => - numValidTopics.inc() - topicsWithLocaleKey - } - } - - // Get the users with atleast minNumUserFollowers following - def getValidProducers( - userToFollowersEdges: TypedPipe[(UserId, UserId, Double)], - minNumUserFollowers: Int - )( - implicit uniqueID: UniqueID - ): TypedPipe[ProducerId] = { - val numProducersForTopics = Stat("num_producers_for_topics") - SparseMatrix(userToFollowersEdges).rowL1Norms.collect { - case (userId, l1Norm) if l1Norm >= minNumUserFollowers => - numProducersForTopics.inc() - userId - } - } - - // This function returns the User to Followed Topics Matrix - def getFollowedTopicsToUserSparseMatrix( - followedTopicsToUsers: TypedPipe[(TopicId, UserId)], - userCountryAndLanguage: TypedPipe[(UserId, (Country, Language))], - userLanguages: TypedPipe[(UserId, Seq[(Language, Double)])], - minTopicFollowsThreshold: Int - )( - implicit uniqueID: UniqueID - ): SparseMatrix[(TopicId, Option[Language], Option[Country]), UserId, Double] = { - val localeTopicsWithUsers: TypedPipe[ - ((TopicId, Option[Language], Option[Country]), UserId, Double) - ] = - followedTopicsToUsers - .map { case (topic, user) => (user, topic) } - .join(userCountryAndLanguage) - .join(userLanguages) - .withDescription("joining user locale information") - .flatMap { - case (user, ((topic, (country, _)), scoredLangs)) => - scoredLangs.flatMap { - case (lang, score) => - // To compute the top topics with/without language and country level personalization - // So the same dataset has 3 keys for each topicId (unless it gets filtered after): - // (TopicId, Language, Country), (TopicId, Language, None), (TopicId, None, None) - Seq( - ((topic, Some(lang), Some(country)), user, score), // with language and country - ((topic, Some(lang), None), user, score) // with language - ) - } ++ Seq(((topic, None, None), user, 1.0)) // no locale - } - SparseMatrix(localeTopicsWithUsers).filterRowsByMinSum(minTopicFollowsThreshold) - } - - // This function returns the Producers To User Followers Matrix - def getProducersToFollowedByUsersSparseMatrix( - userUserGraph: TypedPipe[UserAndNeighbors], - minActiveFollowers: Int, - )( - implicit uniqueID: UniqueID - ): SparseMatrix[ProducerId, UserId, Double] = { - - val numEdgesFromUsersToFollowers = Stat("num_edges_from_users_to_followers") - - val userToFollowersEdges: TypedPipe[(UserId, UserId, Double)] = - userUserGraph - .flatMap { userAndNeighbors => - userAndNeighbors.neighbors - .collect { - case neighbor if neighbor.isFollowed.getOrElse(false) => - numEdgesFromUsersToFollowers.inc() - (neighbor.neighborId, userAndNeighbors.userId, 1.0) - } - } - SparseMatrix(userToFollowersEdges).filterRowsByMinSum(minActiveFollowers) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/BUILD b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/BUILD deleted file mode 100644 index e27970b99..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/BUILD +++ /dev/null @@ -1,70 +0,0 @@ -scala_library( - sources = ["*.scala"], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - ":topic_recommendations_test_datarecords-java", - ":topic_recommendations_train_datarecords-java", - "escherbird/src/scala/com/twitter/escherbird/scalding/jobs/exportentities:entities-scala", - "interests-ds/src/main/scala/com/twitter/interests_ds/jobs/interests_service", - "interests-ds/src/main/scala/com/twitter/interests_ds/jobs/interests_service:user_topic_relation_snapshot-scala", - "src/java/com/twitter/ml/api/constant", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/dalv2/dataset", - "src/scala/com/twitter/scalding_internal/job", - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - "src/scala/com/twitter/scalding_internal/source", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/simclusters_v2/candidate_source", - "src/scala/com/twitter/simclusters_v2/hdfs_sources", - "src/scala/com/twitter/simclusters_v2/scalding/common", - "timelines/data_processing/jobs/metrics/per_topic_metrics:per_topic_aggregate_engagement-scala", - "twml/runtime/src/main/scala/com/twitter/twml/runtime/scalding", - ], -) - -hadoop_binary( - name = "training_data_for_topic_recommendations-adhoc", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.model_based_topic_recommendations.UserTopicFeatureHydrationAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":model_based_topic_recommendations", - ], -) - -hadoop_binary( - name = "training_data_for_topic_recommendations", - main = "com.twitter.simclusters_v2.scalding.topic_recommendations.model_based_topic_recommendations.UserTopicFeatureHydrationScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":model_based_topic_recommendations", - ], -) - -create_datarecord_datasets( - base_name = "topic_recommendations_train_datarecords", - platform = "java8", - role = "cassowary", - segment_type = "snapshot", - tags = ["bazel-compatible"], -) - -create_datarecord_datasets( - base_name = "topic_recommendations_test_datarecords", - platform = "java8", - role = "cassowary", - segment_type = "snapshot", - tags = ["bazel-compatible"], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..fe417fa8d2515e1a02d08f7a9bf4cbe17e68897b GIT binary patch literal 37280 zcmagEWmufawl<7wa1HM6?hb+A?ruRFcb5Rc-QC^Y-7UCVkU((vw=*+)@0oqh`My67 z7ge=xS?lSl>grOE28Tcg0Re#lVM^oFs8lM9O#}r28G`}=K?AmGivnz&Ol_U?Rov}N z9d#MpY^)m-W#!j|kiVY4Vk9vN5P6CsVU+FKQQ6VO;)qqJ-*Ra#GoH$TJ>F07gsILd zgg`OGW~APG6Rg$ocX>5YXp4%S>gr~w=aYaJd*yHBF`Suk?u*9~OD#$6;m;33)wE=I zeVpb1W!kIh=g~(EJ{QT+3P{v=1c{=oj8;P>914a};va(ytbW zvOlKa@;c$`O7bY`C!Y1X%s`=*X_XGw=FgQ9W^kb@@ztOqZoskDWsp2d%DE8Jpo-W_84{8auz1D+3;h|dRxkgM1aAN;HC zC0{y=_MO)P@{DEZlBl&`6Y&dBx?>HWJ)hu<%Rh<<^u8<=Z|n<>-IL@!qs!`nDEy;} z?iA8O55Veef`Nd*1OMtfm|8nBGW>p4#!Y?(XGZor7Z4vIFScz`6)RZL6FZVE5a>yn zI4iRCkt|y6>Qofd)xhi}I6U7oHd{>3$6cl^vJO-?(p(70UFy}?qP}cs*I$Q8g6;4p zc2n66(zH$sza>Q!GNriZFjFHEpxs0p)TXXKn-#7S5!0u!kwh#BDvd|Efp?-(clM^A z13&>JWSZE&6<4hSt{k1 zzxNWKmsJb9MuriWq5(br_E{3$f4TLJja}AyJd0y;Yp=jYD~HyFV2gM7+D>4Dv#}Z6 zI5;ktFeLWe-{c#-CdS*E5$5`HmN*S}Wnxg@dC$|_6@@vE@mNo|BF+c6nk;asbY@+d z#ZVs7fjV}!`L9#NnJr31xkn<(D6%VG)r8`x+DH+I_R*<-`uh`v#goR>qm(um5rAZ% zl;nbjB@GzLOzA<)EtkUvI_y|OxZqT2$?qO*YBS@kH6g4y)wDesUordo;Au~Jf_Lij2>AgClvPMERmrtQjb;1WsiTAa*0c+_Zuy7ikPnDSA9H6V4loy?tE9qkZ7Kgup&FN7SR9a}|Ai>AS-HXI*aA*04^1 zb+Lv30YUzIT@3B){wRyexa}Gfa>p|*gs#&!3us|Q?6`nM;aSlQoSL|d=J_#_&#@4# z%)36`kD(acUm0)1c_~uB3P6+7iuI4^G48Z-sGA`H_@|n4nuq)3zqgn&O z`qpq#Po!K|svde3c^cELAv~PJ%?|!5N)<8soix$X5YT&rlC9ytZXeTfS6|8-gD8E6 z2=T-#viyQ6Mzbmkt%V;G-;|2xTRR50{>91lA-?hoTm$sm)sN?c%o?-=Aq%{fHWV`N zsaXN>+VPt5&$|p2#Qar5lw?Wx&qjo}w8qqD>W7D-OIo^e+L0L9>^LYcU_g`>ckr^&+m=Cufo%!L9U7@&qTIyj5l22i+Uq>Ux3H)2Ew~`YD zCe^pdctbL60zb9RHo(Q{_nUF5wEKM0t#@zu@jfP4x&-sS)=ZgO1 zh9sGH-CkV;Iyas}B*Mta0dmi@mQMh4L7gP#*p`vf8vbn}866rv1Qsh*ysuE^Y@f_h zSSt!+;duvGkoJvwnGmE)rMRLbVgc0j%t;#f20dHa{h zu_`J(KSYl4G>?wa)sCuzaX{pQ>C#!JevMtGHCQLj<;;*&xqr~Yvz7e-vTHhpYxIb2 z1KHriMtj3RR8D?w74PYmTZ9K9ZOBrz=;F!1nKFSxAy3nhYh5aF$hdZMkCS+z!MYA9 zP>Q+VA@asHtk}>W#f5qLO_#`e+&adZNB@y;&Kif)JJm+;i)INs=N*e}_P|mS7Fodg zj_Ubrk>!D@fh}tRk)H#e@8{t8FH@i>8XbpxEGfb+Y0`BL^84Mk4W8>edLJ24vY{Md zrwFDP`dy}cS5kXJ^MmSJB|L8P)0?wCt2b;-&syN&1~Y-Eq~Vk$v!&c_8=K?`XKps! zn_pbdz$3mr6)MNVp?bxo<|}Z zNfTOS{jy*wPLweha#OOB-PEP@=rm@Ayn98=B_d`>GpQh6HL+$w5zyyXFQhmPPOvlX zM<*!5a~Q8nkem!Tv20Z;_?)PuF)XPK&ubvXLDzHi4+>7PMoeVukMn2n!=k(#n`v&> zumhr8bd1BFpsAb;0Y{3OaO-Cy+d(imwBt2W2P3<`Qnpn;eccm9zw%7Q=IS23i8<1U zayQJeK)rDJkgNv9ARix?ZiA~Kfmt+U5(TBA?Xcl4{LOp2j;=TZ*3!%9^J4LH8TS6X zWoVy5BSr~9*b*s~EW7LmfpTnKLfgr&x3M_-T&SNST;f?Y4Qoz~xx7#h*?2YPf}Igk z57xaONtDV=ro;~Knfx7&8N}Yc{EADzmuR6Nk0!{44mCk_?eLt6#iNMftLXgFf?v}= z6#X?i5APsO0TE+D;i`q8pONUiKE1VQ1T)P?2j#SQlN)l2dZ9MzxhrB3GzIS%b=_OQ z!)|<26!E2ag3Fw`1%><>jR8`>^Q*OoN;T~pyI==Yc-HaU=KX0-;!jNT1oVtJWoI7M z;y)hwO-DOrXp8e3VN2DI@lOlcKburq5u{f=8rP7J-<$auT9*h&jZI)f0;BdnrnMy# zgy~W%-fQn3jus3Y9O# z#@%iS1u%>yGyzojt8h{8DlFIYIUX zuC|qYpbn0#G1pe86{9M$;7CF_?rR;V7MP~kY+Qu#U!vdaY(Z2tStWG4VK7`tR26#W~ zgMr1^p4p-?h?r})XtF3vVNHhe4)|3uYq&5Md0m=vkX7)bPo7sc`4>?#TPiQc~ zJ%NZ~yj^a54J*ZQ^-m}KeHSUH{zQ~En2xI@Y6k}E(p;-Iv(*sXkAdGA|C#H^a!lTE zMi3A^RY(w|f92ZI$=%x2@sCABS2uoFqRzX!J1<}V<%dm75XkV9El8XTo}p)FR_!^f zEbH8_nHj7v(Wm;pA(26{z>sGvifEUthC*JFL%r^a-QVU(Yr; z`@0dkTD8yBo{J~XuG;}Vuh?F^j|XRNT4z~FYp=GiXX%1V!+^KP==aCxrSqs_!RC`a z-G|4G%l71j_UFU7pSSHHA$!N}uXTKHHt%hl!HhnugnCKE7t{TRA<6qY<7+3)<*(x> zR}Jp#)||zHgcZF#o$_C~LnG?mZ!GGyJf9cV#ywoW3BKED0QymYYu)w1t=q@b@{uq4 z_aVhg{XUHX1pVedD_O&ynzk-WhF|3jbCM^IYXr{(Gv6=;WE?(SD(no01U~39t~~=q zxo-Jxo+6D8pFVAPbIrU8icIpKs&4`}wl2bq0s+Sk3ibhOXAUT;O8%#@M|`t7$i7?HMoQp5?pB(qM5-v_E6yN!CQ z#}_D)>R+6+LVQrt$Z?$7VLLB2aoUpwecZ!U+P!#B(TJXAaK zs{~(b^u09&y}5!JJKCd7gRy*H-wylDd|_U1HeQ|5bY5zFRywx$_$yt{&q9(p&$2k> zPu{)t&VBf+vTc{%(FVGbB3f3vPvs8Rq5-=PKi+G#x+Su3yV|rRI3B5=dN@4pnaL^N z9@Y+AI1k~uOD_lC+e7gv?u?||^%(Q9yK&Xv(sp6$QuaP07?vaLlprxH5%#GP8dV4k zh9*%{|@M0 z2P{9n>po0KE<+30%B?w@g5l5{@?2@)n%PrJ^pYsDzB^o2AJ$1hhRF4*4o z|E$^au0l7~v^082UOL>jcdWoHD0zxTxoCY}GQ3uywj4+`e+Yc<(5+gWem(Sj&Ux_R(pHrRkSG!^Fw8byxUq;W0j_jdcv8FIIFgr{{wzT3=>2zn0>p zXnmu5d)~0<HF+aZVdn=B? zoio2&JNtUMp0~u4Ar)>qhSn_J(krjwlZ~}Ss4vH3wp-SbPPV@FZp02L-qEP^J0z}e z9-q3cb`L})-RC5HzoOvkc5+qzGKDyb8G2II;06vcOrwgqQ>wq19`O1$a8V?GIL@-^ zL=e^?HI}aQc|3jlC9aGUl3H}}Tvm#Qkfnak-AXu7`gGAZLkv}&tZ074q|SZUM1S#Q zDO=&AlO8_M{GM+B>H|*gQ8Y|6mY&>FR|0%qufEw7c&s&4Kxe z(SZ}wT)=%z15dZhhR%oY-PPVFPc?{=(bb|o-vFoG>}3|)>gyXp;KbTKjNB(yABB`z zie%c-$T749O@{gA!CNx;xp+EIc_Wj`rwrN^bKQL%QPPZYSc?AEVaKWt+SU*14k$XK z2W@eYKR-9+R+%{WC!%K#?C^vI{v?a?i(i*aZxS#*Ic812_FcQkL0JlvNFiW5{tC_g zz8Fsw22xi_f zzDy58dc1)kt)#oR2tep>wKpdZ-x5D6#XhqetOw%8;Bke0M8gTn6$TXP)(l^tcgD^AE)`_mM2N4 z%`vbSN1DjByB-9I{JK8Q>foPJXRdMPQ~Fp#fC%C^ee&`%rWf*3JHKdpRH?9=1kcMg zs~``cY228dNRc--{t(PPMG!jS5L=-eWV)5KW^%9q6>q+7$%RN65WtYf+uRc0qe|Y4 zsx_dCsE*Yti@3ze%%c!ZxBlYb$X3K!PLZS{cHylt-C&e9xDs}}+RP5vJb}mldCa0= zF%*!qA0wafUb}+X?Iy1`PbysEb)ssQv{T~8jt8}ftTRTH2G64Q<1yS)V&n;bOZG+v z4o5o`{~e{U%XxPkmwlC(v;UPXLDdby2K5IevnW_{+b}1e#r99?q(Iqxw;3F>*<2_{qF&v`VK^ z;cTxM&mDAEPtn^xfTrXA4NPpkV6I<4S z7)3{Hk|n&lY27?oI>MbLd>StZP2m^n1a3#L18EF^lzjS~yJ`Qm!#y`o(XoK0b~JCK z#I(jlr4;-fPWDFAx&aSW@P|k~Pv-c6X}wIbW6!%CgYPr_(_2kz>}%)eaZ72c{fTg2 z-yhzd7V)quq>(b1xVo3!*lJV_+4JG#RLIJ{@Ng}c)tsme%3t1RSj&=C|I7(dWcAn< z8-5)0$nQ^UyPHQ-2wsbz;hK#t$y+=^RvT=wRi*2@~mGWq3Qz67N z#i|E}F_={2Y`uEjpA`4+X|U-Le()Gi0Ke(n?!4$at$)l1vq4n)a@{n^_A?#yse)?C z)c5JTJ^0PeBtyf%Q|IciZ=m-}ZjMjf_zppn(klSQ_1bcNa@{GPapO6SbaWm@x9|?qX_J9Sq(O~?BZ^b zL$Nb6*%m!L+P%&cPwu$EMS4y<4Z{DNy890HKwi$4u)e$ksWzIZTA3A-1?G}&V{;ZO z{iv?ks*~0JrhWD#DnW>ZMbBS=Fv@)5BBgekrMhQ;aDLp?2bD(z!SVc4pbGM{spP@p3(9hKtsDbZ>b})RmG+o^N%y8ji1HDph*;`gWmy zz5pIS|MxllFu=*jcO?=ERXt^PM4YC8&#sw=zyd;uN zdSnv&%kGNa_A~dFxNO$vhz$jdg3wJ3?QQI%$WAml#~Ti3>m?VrEevOvPFOE$D5>ql zepHV+`zWjns0MC5A#%-7n7G1r${t=nei`#rumh{cOPWcKa_sQq%$d9dtApu`HHGa=1((y=x|fi# zGcvEb!|XJqkwodlm|ix^Jz(i97aNvhFo(;JIsWZr3zjTD441}4) z5Cv3)9ZfcG4Eia1w(l1r<}@4dIpfO}Iq$%BIB19fc&0AFHvKq;;YUbrB$CK)%sz0z z@@-vS;nG|?nq~h^QNb+k;r6g3;rbq-xPjI_?9zj`v(qP4CEn*-8z`mK?GT&@HpCYP zGV)O0E8rPjRhO5*udP0r(H!zrC+dtA2M$?4VzTUxnO|A)>)PJrf-an+WXe5u#%x4x zFs;;%c%9}P2e|O^w=C*Q?(i`LWth3LJN}t=3%HTPQVeOVTAQh|6*Vw#iDvW*5m0%m zzvw55~pO*$@M862~ zut1#cFFY3SG~p#%E6vfw=4@R;WS^cE>951*MoD* z^`o4Zb_^w8P`z%`tHX~vRZ(E9PFBOY?ZdS|IaWOl$#-R?k6BUXW^wLnH$%v!eDdI`1y%iVrGP5sI2hADU(>qc1&JC$nVCH1!yi8m!HOu?cqJ~NG65`+A3T@-=- zT9#I(ykR5}=AQoN`k$r<5MsK@ELx+z@>R=66;*r~v!UEkXzEnV|F>pK{Vq~HzfuRCg zO8EX$SmlO^yRB7RNViYB@>ub(mreyjg%0c(8wnjz1!DfI;eXHS`pAyKWr(CMh!Q<9NB-^ z48Q#s8@KcSCmYp>n?L6zlV}TCT#r-!Dfkuw9besLP9T$BRvalXKYa^LA^t+mIzVl&wi8Hr3R_~xr@*Cv zqR{_*K5SB;d10XqLAEBfDpy2g{8&%47Iw;E_f%FSE_4;CR+=>=pl&QLbj8i@RTV{& zL#qJMf#)M5E)+yUgs)5gZ*y??jk4lBQCR#Fk+!xd3dt90lo+6E)cuu0bnG|N|xWj$Bc#&==MtPsIp_YFg<5ae77av623`q zcDeg<;Ru%ky}jDj@Ij$eR|~G-ih&-Y$wxuygX+r<8a#`xc&b;U9HO_;@;Cd|r>n;r zUwFfL?@oAfDgxZdPkQ#Gt%yVFfe(}+)l>K6@C9kqPwWja(d*j!_i9z0#7Vt5qN=LG zLEvu8p+2dg8C{DX$N^Lq?3WXL2{nlFU*qFU+(p>ATj`XDk^)AQhOSo(dig6*t#MXo*W9Ex%?P(~IfAL=?*g&R-JL`5An~zu_G`)F0oNh(1(9MqT5BxEXJ(CKk-d?cIcn z_vwES*VsBrA&S)3EGso+_N#mz%zTQw3xYkhX7}&>L+}f;vU=(i4K#a5zt3!^p(m`9 zaS9)@AT-ubwo45$E1j3Y3c4)cw3hIscVVlzjZ~DDbkS5eQiw(^HdzlgNUNjMI_t#y zq+L+V0;JR=yHP=BoNqolA?B^Uo-Ly2DDhktv0jMC+3Qz-GoIXrI9;Vk&O@l7zlB;J z;0UupUHhf=IZo5sR1eK)H(g_hvdbc4bY?FR+nm0Pd`c>#evK%QtJtSa{UBpO-@2@s zmJ-+)&t<-(6gOaEV=(?@HvPHDQ^1s3|)f!oXd(Vi4%!oi%n#Fx!QnRFTEh-1!j z<3>KE8E*N95{?m~snYDTL~iqaX56GFX59ZM%*8*zcNWS(oBUIu%l}k(m2n+18M{@% z;h~r-d|L9+Vbq~S2l{Ft_dET_TvfqG)_r%CLD62s-m*m%XiaOQ7txxn%&6Ec{NF3| z(c{)eH{E-?U`KYaBDR!H2(pFCI^7)O(`e(-?cq`6gnU(0@%;Ydfkl3VnN=MlQ*rT% z9=it~)Rfb&+Oz&Xsk1imNN(u5TRq^!K1mNX3qbsubZ-6$0T*HWq4yDen*-$FIcFtVGC}(rl0Js&e z=l4{$xU+n&fw)y$Fo12|FvCph@w7pu>kTGv_0dh$XxJgv$Dh>S$H3B-C$l6Z?(ZWgHLe&waYXGS_ggW%p6N6Yzx|8^)FuphFXsr; zta7W(<@?HZW>y|wx;7oe(3zKQ&Vgtto;J$J<2$?duc%u-~ zR^`SJFgG{tu2I5lvWqW6qQyKGX(sDvvU8zDu**{_lbmvM1;u4iZ5=yom9GM_X>$!v z7-DP)Vsm4jrkcl{b)iMhenqfs?XlU^ndFkS>Yi>tV5{^2nnWwIc;~UsYQZPS z$HKtjjY>B(rLe~Xo+#Iat?lowoF0O|h4WZ$84Pqq2B5=0mZb?~6Z?D2 znfE~j`w>o?2SPRnlVS1zcOBc{p?Dx7exaa-5G_Pf2}Fz~lw87$mMS|M!P$x$stzt$(buUIWM7jV&D78r03`UVF&WASvTu&60=Wl zkwQ5dOkPCJ5`B>_fn)^;9k_BI_^V$~O=tAsb6j2O?b};5NezltB`e zaRmMtR!`vsZq~2^54D^V zCYR%x{!$3n55Iqcw=<4QIoShlX`oD*Q|d+q<57x-3Z_Z}4Y?gR#w<)EW~U-Gpm^%# z?S~Z!Xjl0RTJy2rHDABi98a#WxC!n<(EUI_=xE=F48Lv7+&6>;&s%H&1SV6L<;$B< z@~G5{I%mhl%;T_BR>ekHfHbDmBLQmFIW3XCOZ_W?WpQz1w*&+Yv8# zDN{Ziu6s8LeWhfgD&d#Et%>pBTgdOjxd@G-U9&H?T+g!W#B7>s?!D{ifm?>Z3Oz^J zBJC=ULw-CY}05vVpDtY{Nd!olWx@G#cI|=Bd$^=eqnsM84A=mbn{|se90X z&5jGjQaClcCnraOW}#o?sYoRn&MKaSr^;GAq0HX1??vlNz<01~c#5t=&pvsniD?i! z>51xa38I4#W32IXPshuKO_FP?Zs9ndYh`ijZTp=<|JC0-v;bk#(&ikJgC)=d&dljU z(kVR`+_4u3D9FZ^5(3Qcvw0pW8sPA=_NLFODv@hg2TNYOfv|NbyG+J#q9jI^0%qRgUBqyrD zCjcyVne(=DGC@2F2f*Y7J;Hu~H}C<=4@k+rXo;Jsc3971>c+%DYwCTW6NFjDkXuwn zy=DbjN4-ADLkWG{Vd{>>dayQ_mN}tk>Ap)(Dq|H?O#man`bBj6Cl%(R5&#~U1n`OJ z)M-rkWc*xGs%tcC^oHqb4~-Fl?qfy6=NGZz#EnCBc3b@v{cC!&wUxs|DCM1EvIBFF z7V?87aZ==K(b{m%>(?Gk`4gM7Ypc#zwmtzt@!v#U)737O=~FLbxL(@F2wlJ&_&q}I zm7ds<%m=dw`U?vq43~!l-(Xb}U@Xe%IO(jM?WpeE1wA&-&~-$fzr6J9B=l(hcd4ec zJ$@-+u~s&ZysQdJ3jLKoJLpo~lOmSxt5@#}8}B)@&@9CUYOD2uPRB(^Mao)#;TtLI zFEGKVxF3^pOoozVl}L>5gX9|RxcVrdzjEwfNX~10gBTcyX~q*Z$_l|jF%9q+NAxKs z1<6!C`T104D>jGU>f=nGr@B==DK7mY$zFkDv^nx9uTKa(h2GYZA0~m%D=jah-hk9C zlIJUvD_Dr-_@PXuO37$6=>fLL(^o4IIQp1mkaF7O#yW%tA_tU8g^-bwiB0Gc1; z5xMAQeH3j4JBKB^YZEY*u!MV9ERtOsEO3KYQjMihinOq-@{85^Nzs{fQjV2$%QAD) zwR%0|c+V2D`$}}x`c`zcWcw3!0Gtm#<3pnZdK!b<)=N%t0AXK27Ox!@F1X6Y+|sjb z>Xpadi^>IS<90|E`0Xti%|k9uI-F0DoZuLK$_>vzoL9Ls$5v+mVOexJ#tY5eSy}d^ z6r|v16qSn;kKXD?G$!ZX=ih=~kST80xgCLm1O6j8AiES&@K3?LzXf0X7F>mU;_Slw zsCHuAPJN@8%N`{JnM03$)xE3xZ{Qm%s9Dwslj-M^v{sbwApbUZWf?e(U+Tp2t z(e)@S4=EVIVYZ@NSkEj3Dd^p~l|Wt1IR$K0hW9z*R?uh60lKa&-8MhI$zSgW{D|~& z*+?10FWFua-a7UG`Waq;^QqG4oh}R@1WJ=qi#*NB_ zXv%!x<-GIq%Wz>p_RznI`M>7ICI8WANRw)87ZI4>9DsA@Hn5^Bkb(gBhb!P!7#fww zJgl=_b-&=w%be6cJr-Qr=^qG-P`n!39|r`vp#=z8Ds@JM19g_dO{wieQ_<4D>I9g@ zR5A$_i>d0uVap?xXy@JEG$Kup7qi3UnNR`v4SN>Js)QTahIKaaERMs*z*RA2&UfB@;e#GF#L1D^N~Ac)wlyLsL~M{yQT==Ip^n9}rI?)t|;av=)H#BIA} zZ?{}LvOo;OM!BLy@pkbxEX&^6sL4@s>D3GWKI<2cvM1)+#Q1Ljd->l0$6_H5-!wjGH5JW9+x$#tF$k}z61xA3G^JInL25q-o-W?&~0Y0a8`t7xhsrc;;_G81@ z;dvp0_g)J0+V5;u{G~uUaCQLS5zKGf4c=-v1kIcWixZ~Te(!XakZUu6#S?VcKCu*J zIJ`0r-VSe_BK1%DL$<%@i;d0swjqJ$4|ZAr?ct#92ZLtnHWn0_N zEjm@nk?aNryT&}4;E}PDl;OdQ4%MfQbt`TJZe16ZsI>9srh`L8d}>hVfX@{Z5NZ^_ z^)hiZPoY6EEYV_OEFkRsv4f#ya6+ykLPHZ;W5vyyp6(6@+w5J;$Q1P_d-1xCfiA<+ z_!tfoQ!Ptoh5yjl%d8iRIe^VXHq@q$g)t@4{FnH0g*Lew#q`*>R~z?=51R)`8Xs9` z$8W2~WP}hC68E3x%%B=IOR;P;Kxomh6E#w&Dy-43SX?^k*A!|TD`bdV!V;Ym5+h$O zN6fO3My&ItDr87H4-(STQ5lj?OidB6Q#4ZL7KMyWvrg6=V-ed=>+6CK-B~ZS>CH`# zKNKyarVJZwXZnZr60u@~zA#K1K;&Qq^^TBm0A2PTO&I*%1vHlaiVK-y#@3XO|4_vH zVMue?F?op{A6n@)x%bDvsF;9M*b%>}n8F8*wri(3je#~%M23Q`+YVQ4mqM-5pw0naEfPs-Iu#f z5o>3p#Sz>`>$>qaRU^}@ii%~TjN!3u@4m1^;(8WPIg;ryh;5R;R}@Up&g(8H^%bfT znAxV!!W9*~71n1_>!7$E%+JVZe`EB})C7m3P%DaOpV81{y3gQlXN3YX#wS8v4@Nl3 z@tmlIC5F}19f?s0V1(-jf3F^&vdz=a6v!#PEZS<6<0~BI)U3>DE(J_m-#PWIe{a{A zk4SXnOc3S^);(NmR}`Dl*;gNKqX-IujMWrF2_4E2y*;!}A0&Fhm{8$(>*Zj9Pw69^ z#cdq7MgIm{hKpT1?GWV3ND(uG6f@)XNh<&r0u6=&Sth2b#M~3KnAFc!s5kvN-+;=e z+*u?zt}4x<1O!kjrI3rIkQ>Yq27v)XgRDYSLgd?Hg&Y8Rr;b{ovp}H&LkBpU90WAV zl_-2arboco_TGe{xdEqP+iEWdC=f?r`;ye2*SnO&wC8?Mp|X~xC=pT+#wyu<>f%J5 zQne9*^u_$Z&jD_{X_={zTTrZoL(_vxgQ9W-t@5QyN^UEsZ#kO*FO0&qQ8aiR!8AuC z7l~9DG5{`32$J!FA|ulQD1t@>+a1(g5b|2>BnXZ?QsBD+=;nT4jtFCp2z(~)6BGuR zl{M0GaRQV2$Pyxk1E)$?SYQsAFr;oy07k6yj?TidR&eS$bkjrSA}q#dm+azPFs~DC z;b1+XV9X}8djy*0se$y`lcEVs%73eXNBUDmaL+ZqT)CoJm8ElKz@a=hf=+7lH$;p# z=ViW2Vv!db^pDFyAI8$Y&oA-s6El{j$B3DpBg4cb$lC7GqV5s)wnJHqB&YB0gNaX5 zR&^7HT;w0jk9y8SuuSe#X03WEA6=Jxi6o>5JW`)|2kAtg=>ge|6v-93H5)n7Jx(Wv z#YN^QLBlPv!Lmfcp8!rz)3!=;nqCU;tX4tD)~@I>;&}D&*tz~8;-awimwaSQ*XN`C=i{07qgH;~P5pn2bkP9MqKH}gdp>WGa}({Mg( zte8I#_{xEEi#?+?8a43Tk3@-T1vXUz?jkcL2pxuc{u_G29b97w`mvy#mSDjjKF}rn zS@G*#^O-z#up`lN+%!5!!L0=Gb*BT@F=9nVB}Ukk`~X2@1wxX!as@d}swMouIF#Zi z;y)c2AW=>wyf$JxvVNPD1ZHATyIA2ltkZ*lp&}Ih^PO-}ESMJ|88M^?oHGezW2VR{ zFfMvy4(Q;00*4rK%LR)CpCLj54uOwu*FV`go22y6Kbf<@?s4go@Ez%&_x26k1LnBd zK|ma*lGCF)L}A2Aw_2j#PpK!``jy{AyYhV;hw zE>rIw1j@_jbeRFf~diHMJ zsN^`g-}>;*@o-?<>a)yOwV1u-dws6I2cXR! zk2^bD&6z#dEmQj13Q~42`?!0)a#&nD*Xn!g@K@jY7TG)|oB8|;_oN}%# z#>LAYO3)B;UDxRAhh(khgscrN{qU_qxLSYPyZppBJjrQFs+ShkEGu7I-W)7wHKD{-c_J0>W?d{fuXiji(`0gzL(Y9( zIySAb2(#mPKYP3|i2r!?eP7zpt>fdjCFt8P9$dTjNhaXNTYIbH$LA&BA>?~^e&OA$ zxNmQ--lBIwDqpA`eI>8#u0RzPoLFpM@OCh3T|PB$Um)>h;lY=l7A(YK@qMgWGe?9j zA6|HE&$!*tA64yU%-Y)Goti9tth)JeZS?x+<4M~Q~P??|7*4H z{+wmQ?um3sG0b0GZL1UW$@ad@O#|Q7gu(r}ci6WYdTH++m+;`dbTDLc&BNC#M;e;{ zoFHG2AgTIiUWQJcUP1qh<5T(J4P|>ottc*_{DdAK30;N|@$J2SW2ZHLOopEx>t~fW zXGJ3idBXt{E*4;z+;W)I(p+plN`8JSr6dzpkym-pbLn!LpoD*j6 zc?BWo!N(<#uq%6`Cm7gtv<+;+1~#$Y-3oeY;JtM{?nr)M@2 z$6OmcJl(zh$*>Q}S#+HCcyVVx?K&qKkp5P)Wvg_jZ9HxdV=c~DEg!yNsSb!V;_{Kz z+}zk|E+5wN%#VAm9O`474iDL%I{;o4?0j~99M&s~&E|9^jKVAN>4EjwFJ3q-e%0*@ zA#|sEA_wm^{ZYJNs}IQik=sINhft*twt)lxt|3shsW-(x*cJ~ z=<+}yVY{jyVOL3S+{&G;9dvGngcK$^25!2rpwW|XTt{c{&CDBct!5aB+0zkZw@%pSu?JNWI3 zvC<|GL}e9V2lXnjgXk345d-X~k!XRm`!@vMB1|*LYZ`7h`R?yQ|BC)S$ZgUF6tAe{ zH%h~A_&-qoKH%>t|GNro_GU=Cl)P0iE}2|{C&XRJl9AxK+bEEYyyX&0*C#!hG^wbF7{%W?T|T)}SRx4c5Mi}t@P7Dm7P7yeIo5ZN7J(}z=r-=N>B8mmbjH)_^?qpe{n+Y` zy>fVu6TaAW90}{~!R-;|)WP%T>w0Dv2480T=JQX6D(I$mlW$p71Rr)=1)cX!5C|gX zw^sJ`!*6QNH6fY(%`|Da7!IbY>T9olwwENj5;rG|= z7rH9JZ^h6MgsZ&2FwW1hLS%P6xHhooxIZ37mxdWOWh%~$sIT9P#5lXpnHxj=?vjT0ZIz_&TPUv7AFU<=hy zWz{GpK3o1gEQBTNR#xRi1nPlq6(|FHU4hHz$f2FWPt`EH-rpnDVcy$5UyDHwz+|bA zy5*tt#&?mrSqlU#1b-FY5tI0WJtN|-g|J^LK_&l;xF7bYu-JxeCH^W3Ry8Qff{5Xt zsvK21UVInwL3!fw{}J{M(3Ndlw{UFRw(SZk){br4sHkGwwr$%^#j4m&#Z^fKZ`V2Z z-gnRUzxV#OTUJ_H+v%hCKG&Li%(3=dLoqR?60Td+=|){>UQm8O^_C+HL;kU$v}?$1 z`5xfDefJh>v z=I~^O_e6cYCU^G!8+HriD;4~?QL_TCV$T$D8?Pe!MScJN-A${kqgyyCwj>MoovHgb z)~T>UKYGXn3AtOgui)aF@7$|wx-VjYtrd^6 z_HHs?=Y%$FhV9Gjv^<^?_~Y^URzrPIeZhuP^~rsKnhcqh>Lfx)RByuG!x(e2V`udt zYajbAUy;)LbTo%%MQP*5X^$TlYbhB~GkUj{2JD8QUwG&O$_`Qn7jK(uoOst%15@ow zOyq)q`@ovk+@ORmj~JI@YjGtq9BEBSj||T2Nq46gz*s7o^qUT&xI>qVCD*fM(I zxZ?bX&=%OcXg_&RYs~J5uJgLu_Xy$)-hVgiWwvNC;(>j3Yb+S@ipw$oI{C@MO<{pi zF|FX>dhHHLH2^Syf4)kM0UbhhcJn8hVN1dDF!J|6i?AOhjVP9%fva@rcnDpsD zrWw`s?NMjh$cu~i_~XqNa5>7Wl*F22Rk7kdCKp1XT%`6++soz^GfJD2f+?}onbIy> zp7iDwi-C>%`$l8u?HneSs-O05v4`VvX*+4~gfp%d%bTC{jW#iA&y>oJh-xywml1K= zg|0r7Z)nH8`*@g@6pAWfYcA&$rFJ!0PZHNz`cCqz?Bt}P=VTH+>RiuP()yjxkCt_7 z$HnSg%zG|8Sih;GLGrqu9icUKHcz^lEMEOvBN9=|=~9hmnjmT?t-Gv{xyJ~!Z7 zZk}LXs(_x{5w3eTxvk$yj@o8EJ41urzf&O$RFXHi#wPyK;l{!1`0n&Q;EcW3-hHA~ z=$oxdiUv~Hx}(cu$${;7=biExp+|Qbpixxcv*IGggLq2TL&aC8<0(f*>s9LYqlO~hS!B7`Sx=j!{h%ew>G_s8_# zl#!xCE%5P0iB@z%D4VzY1A9VGVQiiKepfMfO8G-RPKq`!J^WkQQ;LI^XZPM6M9d-&^0URaN%nU_rw3!H3#o1KucL0KS5x?6=4 zQw`Wq_PiM7@(3DA!n!s5G&qpy_x5bcOVku*%8m!55y*X2U>zWxUjt)~YR=4|K)uXG z=jCB(@z)tGzgavxZQPsOmS{+2=Qi(pLgrniv3_}V2@5@3q=m}5I&jwUz&?)$G>p#Rnr>$M z>}QdS2vX^&+61p2RazZqmnzkyEc4-hKSCC}dM#b}M*G#&=(6{RneX&Qg3FUn&giAidYM&%rOCgOrUNa{PqMZMY1#npN|q$E%mO4si~$J9%5!h?=qQuq{y* zsh`gM>UNje^D<{n9kTxf@&@{~C9H1$4xhV|vgLb`UFi?KctT>N<8>{sOB&KHC!?{H{tY7(-!}Rca9Vc7%9ltCMJbLp z{sXP7Fsr4j)qJi)JdtqKo#V^9o0Qu(fe{+E{Ft2e(FVht7p%a_!@B&-+A1+DAo9jA#O{s zH#kCTj7U58+wrn5MhH1oox6+V-nJ$mkXsD(?zSm=oclr#?#Q;QfXNT2)qKFmX4XXi zPji4)UwIdI_SH~NfVU`;mfg}{Qd1or{*wB$bhVo=dPthX=+2t?3&wR!$&m2wb~MCh zmMzyJpp*OBabF(%$==aT@%PEL$AGQi&;NgR0FJ2pyf2&1obB9L$lw9q2k`CO>u^dr zt`20YdB`$_+^h11e%JB>xi9(?Oj-6O>5X*Hm(NKOOMfWceqV4`@0 zI+wJf(u|sj&1i_)W`UZ1mocvgU0(}bKf@>0l8`qa{~Mcp&*>n4(*pkx0gEeA^Hm8b z4kNhevQCv;f6n6yO`}7ax6QpFaJ`Fxdb4usViKhwB+BM61^7hq6xy~@+@{{IBZy1e z-9pvP`CPopr>xDL&5`9bAJS%C(iX~VcuHWop##pM4Ha71rkuuhR%3*O!w3ES zX$2%YHK5?UMy*tG*2@N?V}7s3jM+xOrQ_EFI|Xy+<&x-kHxCc+K3<52C+FT%ED+GtX}q&der5_ zsVl>$k7WJv*P|i(JYIroB8?GJt4*VGW#7|+b=X3!C`?J(f~O=^odV7WyZypR$m1G` zl#$povC7-E+wrxRD;<&3M^cQqGa{1f;6bT-k(VFFv^v5J-qUM^+5LK5s-+^i#-R0t zAo%@MJA)-DKDpdB9Fi*wW>Gh4(MtY?ZU;Rmh%}_7vPnjt_-DJHk5{xT%5;xe zDn?>ewrc=T0+@G3fDwk`5JKn!@)@yf|7c6G3MmMPC_BqA#^M~}0Zr%HFoK5W;#V#xvD$kp4LY1lC86 zNKtN6Y}X0mD?s>vheQGWcgTx13t&jM%fCYMJ%uhcSo|wwHWUh(aCkqGe1ER;WC*SVw;4^VAo znfZ$n`kUp{??7!8K`71c8}?U=A)cHAcQ z8?8yF*s}s9pdEBzBxn)jGXxCkS^=!%EY23a`c=9m`#v9So|gDcpSs z%w@)4`T*k}4;Xw+=Rmzz69FMGAP6)4C@Km=JlSGNQ8m?G=SQ*b)M6kI)&;yV&N%eK z+vedQByGfpouUxr+b9Dtq+sZx5c(`xv$EFead5tYVsxwlD(5VyEY3!T%iSXKtc?ok}fm}Ds2B<&uKc>j}+j3|ULl`E5uHl)OR z3nFP?tejCVO28)-9QO7Q+-Q`5kvIfC!ynoU6)2$o1-LlI=T-y~`aJD_2F&;WJYWDq zvR`9&PLEG_z`Aex<|{BO;L&&a(s_DK7C;XH-I#)aLXiLLYZ(7dzi-|5O0MGj)}9LK zG+-1T4mF9N1cx}8l@x(Ksgv~kNqCZI5ac)nluqEsP{5FX-T*4`J3Z3xv5}#)*^L>U z!La+(4eureXFiVZW{%!=j-GC*$*>SvnDYDG8-oBo;vWVXr54mt27#^kG7_?gZ+>{dQm_0ePuX$$D8Y?Ir`>sM7O&=*br*t z;t>-D79B(4RjR?dk;q{+re0=Y{Q1$)355=ah=DkTF>-Vwhe+Upk zA0!&90*;_4Th8b+lGg815M*qB$vhQz`)WnqyzD)4?>|l{M2uo*V5MdpW8;~eZuqd^ zdDzzNC|OwFyzqAWPS0#l%X_@lc)uxSdsG7^0@FUh)$Mfa2e0Nm)zcq8T6}W%cpLS2 z3*gUFkU5uaPr*-KDy=gGm``c2(KPJQuP5ETm@y7sgstv`uQCf!;u)A~Yno>oSVk8( zERw)TXq?cx z!&5L9iD0-=vsYBk>P_U$U^JM>9}cZERhYa;Yk{dF*7qaV?|V(Q^hvNX%CPb+U=8iX zq{BOrwHmr`82nF^&Q;>kJ&Md^29Ncko0pjjagVn#w$GpSKT6I~x_y(n-)~I?VLm-U zaaL~T7ju23bWtXLtiVZrE>;-H-Td;Fh_&|!#2day%R`G{W@BVvpJC=0oooA?FzDkZ z=kW$~Ej_CzBkSg6RHY>T&SHl_hUQyttsyK7G75yDgI1 zPJ7(nJA~(b9%@9SRnV~hqWsN$S7b1V;*q4|)>~9iOO^(75FVsbt40aD1~vSI#OL?H ziVv-Sa!}WiMmD*WEOs{5CMG(z^okUyMhufLA&4rWv6s-d#BIN_-~8FdA9O1hml;d& zx}|+q@~tfI9V=5y1Nophmd*NmE^jS7>M3%~Uvoh)X!3>S3DGMZ&lJ_$gLPAT5S(!j z*~ZP@boWMZ4C7>AKeIGpm!eFQq_20px`8O?#5+F3a)`0J3{!@iKZ1Z~gjzyj;812d z^=eCKkzf^SJ+XzGqs)+GKDvZpoA`gK9EP2r)=&S;5oBq8a<>X9<@R}So__&lW*Rk( zBy$-Y!4$6$SJ5!pa#X`$y`Z`dVV=PoSB(7+#!JUw6l*^bW@Ct@IkOyTrU*xq%ku?D zF(2vPDWO%k`Ej@`%FH<^6dU3^0u74{#{s>QlWdRv-vU_kVdoL(yNS#D9`m z(KBsrcr-W)a|wr64QELt}c6hyl=)lnr} z#cN>SmY4#Yq75}a;Fyk$;M%vbQ@%Pfwm zp}0L5QmVB58M9`yaUVrd|J##@r-&y$C>~86+2Y={#gqhEGPbZ~@STLyAj7Gd{K7@9!`hZ2xWeE_Epeb;2jqjhoZiC>Co0}Y77Mp zv;Q2z(PI$}0qb*t4gJybPpR|dw$5;w+&g7eMbINgT}!+pM$`IljPyjHM@P2A$=Jz% zRNT?A5&o^h6ExUd-!^1 z5F$JjF{d0L!O&5FncR4R7PA&FQXC*v1gZIk{b`9ay2ycZyTZ;VGXR0@dC1s!{RT z{wQh&sUj}2Z`CYP9*0xuah)SwVd?E_D1Fi>8_C291vN&54%SAq;h`JmO~%|OSrM)# ztpHHpPPE~+{4ky1l(`V8-V?L*{DxORrmsFXSsTS^ED8k-9)o50XtFeeWuq#?VqBSq z#5ar=Dq|?WJZT@rIfD#7jE4l%Lb2kw#N|d~ll2*Bny9jdTJ{Bwa*JB3ZV?T`FdiT{ zHImc#h`J^}MGxC%I26GcaTt%W|9q@Gi*cnK19?=Hnb0+yGg`l`bldrVlf}cZdGFQx zq^=PlQ%6Gk&S9^Yb(USYhq&Npt9IgZ!}BGG2b!hAFt(euB2DFRW?~rYs0LI0F7)zk zCAdeh@)PoNi=>O*$Y3Q?4cAwOhfSX`^^{~+SgoQ?u^7_l%fxjLai3T7&>E+rL_wsV zhnWZqe%VPjo4IXs@8Goc!nK+Cl3Y?+=orl`-ng)g1b>pfW>pMcR#i4?QAA({7B5Qa zt^5$*Uq~X7+yWC>-j|CmWeg=`N}*&F8$g98jc##3g7i$Cjwq&dKwhCTavo{wSt+HI zfS}6ijVn)B=RpuH>rBkI9F?!Chk)s#oYJd`Fqv$v)Icqc3CjSdEUp!mANf)x?N4WZ zBPxN3d5lwDn4roUZE=t>`)R;7Kl0D~MW?LBq?!P*8Y)< zMiet;dO}g0G6+poX(AUxjiR1L3e$`+knVie46!nO02xEL}$)iM9YKyCsXUYRAUZQhSXJ^mQE>FVWm+~ksA3YYBB6T zQAvORj+6K4ND|<6rb4^ z{p2|yO-W$S#>BjLbN?00uHpHwm5tM-IG|DrRiILUq9Ay@BVPjJwiK)dhJwttw(%o21%VV#S^@VaYgjONF_03k#{xqf zDZkjjAvl&4&(qQcNs43pM0=g0KH0d4)ZM>rwQm!Kw@Zs*W& zDW05iFYCf!bjbz{v=Y<*uh0A*gO+%Wq8M_5h5^AQ3R_mnuwhyMiVKoH6K8xvNf1lG zgHhp7nz49A!?m@@dw0q^BS7V2+JYnkuk00;kBB=XIv2dDOm8OU+Hk}T_EtpC*{)%x z>p3D_1gTWCbwr&}CeL8i5|w$7kTKs=EA55Nr>^Nnrs;^##J&PiQRBj%igIG7pv6a@ z-Vi#i2{*s6Lc1~SS_#6pH)t4mSK@7OMk@trs%Cd{9?n&TUXVy;8~5yYG6C_)pE~G) zxU9)89|>6%Ki0a(9HDIeyLsAY|GkIU(|GbZM_IA?`4< zqap-%U0dOTAgkem>8yQA2gtF)uY1bFxVO;5#3+9G9D%=rKySlnkhbFANC~UT1@@75 zEy9JG4?;r`qRW5|HSfKj#XSY~KFJva(a{djMg7+^`K?pLL~2od=jXBASH9epW%lbN11eoox6a4 z*P{BdnD|zV5eo$T66NCY|MQ=J-aS|HOB5$8$#PJ){L|>?m|x((aQBfJld6EXL1ZHR zJYNMWWylA!f%IKga(VxX$F+;`#|ybJntkMajPIlb!vib?jzG`;OA2|wuOXPf9TR>n zsJexw&K!A8_BaXQ`%r`U+c6xG+HOOxye1(g!rS|Dx)>N2tXt@5E$?H7Kg8DjRsKj~ zAuIyQRz9u!V1biFC`cx`6?$hn2acLa{cK60rEP>v$p8w%2KQ=)>0rakvQazE!jviUSK5U_pC z_t~mtqbUgKY`ts9>WF8^Bc68)kWH$PdT6N;>xzrj{W)cF*)&mxSmlRi-ryvfZKgT=IdI-*RflI zHdAr`#ZBfi&-0Gni`yVjfXkPhV<1e~ADFVgVe|lH&&pGTfBsJ=``8KvqKMXIyJLMX z7zm9Ea3OX#X1)tU>KbgA`W~^z@ny}5=(oyP&i(%x>=U4j_hNp~Ds<5{WN}(W5&K_s z)+4so2xHfN_;^<5-~e30a*mZQ<;U24S^BN6YZo`6uy#4VSdr{;Y_P{i0$ijE?(xeq z^2d4qNI~>loK}KF`VUaffaQLitU3hG%$sxO*4}Uy)T<#-q+VGEA_EX@L3q%r)q(^w z=Q!~^n;XC`Vg}%uam>te%k-2<>jx4;DC=P6zjeKgfi|ND%Rctyok_Tug}&5;LPv1S z?7HA+3xMRA(ZiGCnR!AeE?@M~gcj-{l%s^F-LMceaQ)INvt{zFbcgGk3DeEVqP~+# z{J5$?1|;A%aVex(s|-MMIAbig>2q&Z-VQUA%OnT zZ!u&FCT|!Yn#}hD9}>6{-yS(y=AW-e&Q5nsEFU#KcCYFf;tA)I#^O%Fjr};PiGv}Z zRHWe^d!1`kPASN)WN9eLW<=@FGStyV0n-3#sFq*{by3CuZR0%c{pp_P^qhHYuLvt7 zh8-j=oP|L_Kf%pH;{~YW{ETst+8l*%+92Wf%M|I;C#bXR>qS}9z)4zSGY;Zt7~!b6 zxLY^F`LmK4(xmj>U@k2+SvIWY0hX0g)DSc79L%&pLqkE!H&cb9L(vc z4;t9Nto=Y_w;>hb?a1a*u*Z`l>f3v!DFNV8KAda1 zLRQR@(G#91frsOQ><2ks+>xYkLc#IXkpO41>TE}5nI}aZ8frZyfW*AVA=XY?EloJ& z(V_Eq)uUpT;*hWJKJDU1#fZ})ya_?N{E*OptT>{0Am`q#5U`AMWMiFwDeM6ka5`q=-y(>8O?OK|ODy`CN#pKmsXXW-eo}*$#ZE{Jx z*UdYolzDQ4E4I~_a$veBfecI+*}PylkdKNDCZ#b(eW$lq?_2Wovtj6|H=`0iEn!Vc zYb2vvT+WVO!r(T+5F{r}S*fHX{fiS9yH~S6FAcSGybX1cBs|D`?)(t)PBR3$r2K$BFA@SAS}w#R^bGuVlhE5UYV%zqNx1+ z(vuL8<3#y$3o|h}p;dX2C0yb*{v#oivdpceu<B!{)daRAGR)1e+Fi zVTABE8uSUPJzVF*2Pzl*aoX{UM5TBY!o#JwLdW5rf;C}4k(L0$IvCRZUj#gNn+}u7 zUZqAbK>JYg|wL6oG7q)bLa1mG6@c;Kj_>PpeX{7 zG}28J^M96_NnGqy?b33VNwB~^Y<46aw<5mJ4a|=0z%}{8ViHSnKV|V3smgm~|LnkQ zI$TKJWf4G*s^#IfqAf|;9z&#Y+TVt(BmCi$0z~-BkkV9eARp<~tYCI`ftZZBH8E#x z;5hO2NYf)Z!#P))0$q~4n_#(LU#r^rFumC&aYeP!!!VJk@6_O_A^?p)LK{U{) z>Z#sjvjmLww0<%mhWJy6xQs<-eU7+9ks(@i2QdM|LOh^3RUGhX^~-v6Rz^+LEJI@q z5Ql8YgDbb8kH~BW6JN7qq1jDf)X|Qw2+aotfZ*5r^qCMW$-2y1eTuj+s#ltMHaz-2o>{Zd#F5hkx%P_ zd^Jz7dq{cuNhY~RW1Qw;_+RR91OKQKMfu>o;*#K6_BW6{ z7B2MtdbE7Uze%w%+}-&l<-C6Uj}C%GLJ|gj;2aL>%f-yq)ym%DuYFc6>RZm= zc`$l+$_(50%wb!d@yQ3S#%borqANutUBPIgx6feszg?_x!D| z*JXH2fjJw|Js&Z}SP+gma2`aAmY$C5etxyg_SJ}kB{e*fh1O7z&mZ?|=lj)xAg3Xt zbq1&x3f0k(PkW1cNm2xDTYp4HJRC%zO$BemuL^E-z=KQ8XvtxurnaKQl@S`G2;1f6 z_;dXV*_CcIFJlXbvt5of-KvfD=bs0R54=t~NhJ(6NP}Fc)Oa|@Bq8g{X5HNH20f(h zj{x@{m<zRu!l1g;v)qeUxSKP*RXNA=o_3uj*aHB zU#1cHsS~ig@9~qj|lMWT7B(t`=jc2r`Z+W8@)il-YlaMQ+L*ZG9`u51C?|FK*6v5tn&rjUTk0 z=+>wFNOccjSY8`m8H^_suwGMI6IxhU!PAyROxdd7ihsKmMrv%8l-iDk<--a#X>cg- zOT=skvzDLjiz`q-+js(yM5xqQK`PWvbbMkNuOH3!4Z>I2S{+q>SVQP%HoegYBhfva zm5M403PcFM$au~RHwej_e(p%%2ul{-^P*g)`| ze1HQmcu0{5G2!Y22g@9!<>L((QJZ+Se22jnlX!V<3dPO6cQ+)Rm1oh@j+jUx7-AZA zXr1ZSbH+EQ()OFEMTj>O(Zi;Jq zZ8XR!_Z@O#Gx}2^5cai_8{>une2N&7N_^`nA)N2Mz4zkveaL1 zH>2$t5q?Me+rT=7-#s|<%gIq8W0X=*l-!=IX~`2XwZt0LboC4?3M-Q!8WBN*l>P(`eSuiEKE8UCAP?$c_Y*tS!LJP%|$-*|oTEx*n)V&qyn_{qSa( zcBKpc?6+rwQs2+NTrws85w>MAN&~|W6N8m`3734eQLJAH`GWL0JZ6~8xPq-w`UC~| zsN@OU=zIdgHBEwfd{pCeYWrZJoGn116Ir>w6=v;gEe+8^%xxPDPpr%!`(zU+{)*?d zh$JfG%;bDr>t-S2DfEdFm{RxHslzOcnP0};JF#iY zHV^#`2LgijZ^z7my>eBJjBWqwAi9-0VE>(kVD!h=NSd^48QY{53{<+&(B>&5d~XnR zf_kitge&2Wh2P)!ZR1$3>ZQ9L?Bczy=%*<_17UDoMWw(=c|T^KjXxgV2({b3Ff>w$ z(b2X4=*M$p7zAf6_BrGye(9MCHKC1pMv)9e-^oBd+H7UkUNom^S5NK8siK1S@ve5; zbk)O*h8?P;G9HYWAF_Y9AM5ygwwAd|w` zp0x7{-%uSlVh|TjX45fOIv!&=vcW&S!ePaeDiABTF=u~{RHk>~ zhd2utZygCd&O*gTLnhnb7#+7a&{Y5SEt8Aay!7376pBoyL^YZfJ5snv!SQe-|InoC zVtoKdR{X(>i_VhNoFlV_BHL04#iTOmRwm0(I<1P~G%_|ivmA7-df*$~T-%;Ix`hy^X~o$YVi(w zA6dcM1$#lFSdzSIq20GxtR!M2{1Pn2TLb55fmBC<+C*poO`vG$H%EGE33*(4#*q*y45SSg)Zv7xz-YK`e%$s->L;^>3Faa z4#-5;sTk)isic(BRE4JPGgrI|s!Z+B(p-f_I_?X6HFWt;qKh>3@)kuKcA1uVxS8gH z@*j6zP4>lBRF=AdZ#_O}m@Q|*izH|)g@@*>va*fM%JX$aOH$eHPGqs=%vh#{(8S6s zX&22~uo!F5#(4Rt&6Kt9utaP=6e8_#1H*|+*)#Vi$(sHf2+)OgUkQY@jAK`Nzdj#q zq|FXgNiyqydO2D?7^@?C(}n1ReRD#4KmN`9?)yUf>*D!~L#|H?$aqr!j^E2=n?awh zKZ^A5MP1(8?f&|OgW$(~7`1piB2<|4CWv=<5dSI2rJ@3zK{F*@BV_?N_CAH{5V6at zC?r$hV{p~LwH#@HxIfYYp<~{Ju}*k9t7kcF%SB^^)L3e0`;ix(ag_2xLG>C)TQZLH zhWzU-SjQR#>{@_hpJKH=U9eY@@G&0KX7L4?e2N`e5nOCS9E75aD{=wZD|j^LhpkbT z5b+89L*DnpJL3{G8$WLinXD2-TbmEU zxnL^wgvw386b`#rlA3#Eoqt&qQt!Jr?ULQFO?d;fCamrVzV-8Mg*F=*HJ1I}_$=I6 z05@w8z);U_k zIhzQzb53MTE3MwQ#J#nsoTVad?q_phO*hT=!9a)dt;iK_EZ6;@pw^b{axMnLp?tfT zLqbX4N3afJjT+R%hMiX1frWYNOUSXG3HHC;Tnfv;YizYsZJx4g(HEeiqvXf8!g+L4 zTA6MUODnm~Cn>91)U1}Zm$XxUszsenpzK+4d~Rit@HD1tapN$d>vAPS*>KANXQ4oE z1ut9{DivYqm*p zA=BSKYtgWzTZBKM;+7k4tJ*jE^E&|6JFE6wz_>W8S6BAhKl*ymR(6gm6jcg*6T^1B z=GEw&P;`VC?G*N>^AwA{pQ&bn^udJ>l51Na%}t`Rb5QW2gC14AlIq zsjzjL7Ko6MN@BFNYL>RGqkjG%vsN5EEo^#DB}290{kdaXofAw(AKns5x`gojwOdNX zq|_HxAJ8*ACB+&4Y?jUkibyO2%RLVRklH^n7Kj&($Q=%{Qpazi{sd_o%}l(F$W)@OH~1Cmq$9Gh-p0^>lJ6>AAXJs8Zwu>$e5 zCLH!{+!3ca5WR9FFv?aV)tjn?15c9q*ov}m-A|nmM-lafsTPXI=&FV>cZ)Klt{pDR z)H!&0{eS2ZoIG0Y0qUU!>LU7wuD`p({zu(ktzlzk8-V#a3e;|o0%@~lrI`gyf#wq$ z*!pKj(yI8`*6MbN z<<;aWy3~cIiM|Fa`JmX!Nx%0IR6m-N3x=`gQLq|qnZ=nU?0SSA^xRz@NR#C zH6OwfBU}oE)@E5okI=)P(w2NfET;0^Tb_^8Wb8|=>-91}fzVN~y1MaZbSt@(J+~Ls z(U3m=M2^r*zw1sE7Tp#TTC#}~4pp^Yx2*3tEcp*C;I2~VS2b>@Of#j=7cL8PZ0pyj zvgzs^cKdo-c?wD`jD1e1B+Y=AE1!_<+QW#N?UC>gr0&QIiU-4A0^6+K9F1j@(7*0e z$$tHhRa*R9ScDC*CKCb7?*6mpuy?aFHgg76W&UJ$Gn!lW`#d;3J7vNN61puBNgNOy z&4t41dNC5@E%zW)IQ8dwTG3b6fyzf4MSIA$lH$jQp zND&w=T-QN5Wjmq_$FkEa2k$@APN^<`D#Na$p?#Zc_Y=1I*n5wg{f)Y@0EtFdS4N}B z_nrE7?YmS)v@L%Oclh8#>b~Ypa^0cbbj6GYJpsA*?8t&U;jXDh#4f9h$_RUiEwoBi ze$gu%7u>-of zz0!b_%5niKxmv%aq;$sgh4cOAr~9b|ME_V>bF(tnl(cURiD)-t(1Yc}Q+b z>8nr$t}X@too^2r{@$Dfu*|f689_7?^mP^x-ymZxBjKE+VI5W(=y|{XdYUQb#r(1b z*bsu;p_1g04-N!A!uTm;jPh@A59?FgD1mr~A&iED1zk?35!J9vs@rKT zo-mICs5=#_-kI*A6X-qwPCtR7*x2u{~ z+biv{`Y;G<(=)es-E$+SFBa2t^LYn)Ku<$&^f1I*oEgeK2b1r64|?xF1PX^c7(&14 zxx99B{zxhc#Vp<1{SUwQ52R+|2;*>`qzZM;n1&auTc3P*0NbgU)r&b8dqrLYrfMWG z+YNF0LUpitd^Me=P`K{%J;v#W!kh`#r=1zTyB0m}-!Q#UR0ciAHBL~+N*oub!kIpw zc5u6HThuIGVQP`&YC~i6a(I*azfS*N!!+>F@Yx~!%6C#3>;BOTFE4?BkH3cm4XUWG z`_n`3*0tqsPl!*Cfjueb-QMfKwxg~--^9YO78h%&Ux59x7V7DG>9DDW6Kqh!{%oB|jI;J2Gw z#juLO2?pOTx7Oc!v+uWDW_i6&>`)Zr|es59eJu`E-|@W zK~CE`2KPX0z$_6a3!9dVwL5J)q<7#Mq60a`LpjoP;IMfKF#Ut9_d1=d0q+vmgi+q~|z!2Yx~u$PMTh&16tli#h!{hOmT-A7Z(r#)0EA$*Wb}>34i7%xWB* z0D9-lsDUdN&-gadJoPlwI)!~}q{(p_%)r3YFIkq%1jgeR$S~4p+rwX@ida!1>bRkP zxK zK<^l1-mo!#S~1i!OW{kqvV~!E9Od}Em5AvLb&!yE2m1uaNsJ`$xgq8W{u#%hm;oz~ zJ}tA-?v|%U(53`03|*shl5o5!p$=X28y%-btqM#s-}0}`?fT2`qy9%|@DxmIIb#%x z5{VI}-`0~$9j2+#%t|@3sormtPwBmk1d2~&#}ciPs1|l|E_0OMWtMpk15v7DMh+#t zbVr)o*yCq|Mxx;%U_=N7w@`wo48f?A10h)v$h^9D!$7nl9^fo**}n*be}`J-#Q?TK zjr1~e7s`pLLa0^J;K5%Emcn99^65T_hhs~_i2uxz@O&u97Kc&P5CY9FrecYo4JZ6;wSlLcw6f-|)6AkuKkV$#LV>eKtUSTxas z+sEF+S35owun2A+v%@ zA&LKMCE;sd@UA=WSCOIKvUTcot%bEwhqCOl{@uKjd@tu-*1wOl^!RV7<_T|a{@rl< z0XY)cGg4M~ z95GIjEaFXV(|jRm`{CZC>)z{*@}K@7`To^|?3KHK7hf%mTmwQy{+Nh(;ZIfmqlN99au7ZmG+gVuTE+9KVLq(X`fTgt#!9b-${oksH~jydd|8x zR=dJqzEL}>-Uz&>*vK|x?ZOXP7vtYg_N`3&oD(cqw~A%5?TdMaXP%O_#XNN;-`YbbkbI*%p7vA<%u;IFD!)+Nk)@!-*% z&?Ogz6PEs$%ger?uwA;j^Br3t1 zMBYen=^QT9c~~(oA@dCL3-+WZ?Y*aUFY(4dxzry&b>jB4!_TI0PJ4S-c~1K|-!tol zZ?`W=OY4=HYMc3K%ADQH&h4qb_NM7j^_rvGCS5YBt}OL^`$+Xi)m^!R(eFR6pYp^b zxcKy|YwdD%PcCkKEmvLhc-iuKbpRen; zyZ8Czz1rXQf8U%w9RF3uvTDuuiu*6~&(-|C`~7cvy+!@QN9*^;{`%W*|9?@b;Q`($ zb{VlZSlU!ul&hk|51R!yPWQYOzrIlbj)!Ba23k`4UJn%JZ=7Bpfd{u_6E zJ7gc=&B!Fe3>qHiU@(|v9BOnP7V0VBm>a0u0Rs&{F$RWcXW(FPYFT@5+M{diXyXpf1S+`*)F_Ce@i|Zg zUiT#D7lB8j(Y1fMeOvrBPv0d@?8q$T$=T2pVuyM-*V^Y-;Chpz2|7 z>ZHfuZfnz=ET^z0g#6|F6(faFfXGV}38P}yp30ss9!IP;^Oj3%nekK>?D2k*CtPh- zF%*g+J}dp+hhVLNzuUWoLPu2WR8KEUqmTr=)Vpw_fZ@!Hb6-53SZYaf4}X3Ls;(`| z`{N7;DAQiu0FMD`$hk+7VS8_A=nzj)5;G6RKrwsj`l*8r}xaKj5Vi7$pt34>1cu2Zy)j^=6(4QqYH zi0;Gi0OapKYW8 zRDCRugCuc0??n-_PI?2WDI1CPlAtnJI%BK7gYO6K@2QJp$pjvk!}Rax=j3cB)%-`1 zzObta)+=`i$EJ+2a&x{r9E+0p+~x)AtZ<9T`*eyK@KXf{4SGFXB0e7&L9Svyd_nBEHIX(OQF_zO~x-m>4`Ub_IiRZt^6n^(D$-by0I@feos>Hj4r1SqWF(0 zdQiv+Jpik>2?hcJ5BzK3Xlmoc$ng7GoiHU0&W!ATE+9TiUTW8(CRVhfFLoqXB+#2S zc~)ZQD_OGI-K8X^r-|7|aCp9FY_^zLh`UT%ViTnCS!*FMf2mJ%i~6#u!(bgI1-3JQ z*j;ruSj#3O@|F})$duxq!%Uq>fOZpYNQb)dY*x5NM9hH3RuZu+xI7W%2Hu%U!^MYw z4gdv^kZoa)D6MY)VdEC@AlTw8Y3MI>9A}TBk}hw;jKx)iDCK~5BPw+`6H^h_o`w1K zsYB61r}C2FC`eR6Mc#W0$j;$l;jU+AFfv&ZBiD*y0_zwinpoY;FZN z4oL_h42?ezFo}TI!gyQzjJf`tBTmCzogCbM-upCnMPbfkJl-3rg!2KeE(csHlUYx8 zF^q?Fuz{Uz{>wCRcAIiZ{*j0ZirmT`{>j^0|E%b6G;;qQOa9O2tcw> z%JMr}ZJ`mMdX{9CvIWTybi&6?Ts{b(nG1S`gNp>%Kl2Uordn;%g%W|N1m! zsCvBNf_Lir2>AgClvPM6UD>Toon<@X)XC9dYsM8^uku4{=m*4A%ALXI*aA*04^1 zb+Lf}0YUzIU5xDQ|0s*-c0%By@T}+tPF+G)>-;#0bUZ{m z^RBPYV;Bba7slIg-bUW%rt#+`VKe9^c?&g+iN}IbMTZTz=GusngSDwc5+{fX$Z`zz zArw6agPHN_1t@x0=X4FlnsG0Z#?O(G*fEb&&pqLBGa z&kBgwPt;XP?=n;o^VbYhlBM83ezwndi6XIVZJ zr3Hk&<%cv&u-RSDdAxUD5w#q+YX|QMw9U%ZY^l?$$>r689CqHv4j~Z`yoW-4EtP&z`5z^z=~{*Pd%Mktv)+L#QQh_5H+jUqbKtv+MjHf)Haj8 zi0#CAC{r;nE~Dks4jUgRxiJ)-pRw!6d0|NHC>0yF8TXruEhszWyQek9xv%W&H$H-` zMjf(ri; z6C%8*RdtdHBB!u|dqqr?s3EVMtm9r&1PX$wE2q^ozh+$AH(*I&avBVunEk0bXe!E= zWDHMUCIBhmoRTp_IMBOmQ2iPdlbPg-lK{-fW%7g6?BhYKikwn=;*_%&gE$_2as5=0 z%cBbeJZj(lsI;wWR>tZFSwCqKn7nV+Zj`!`EN~zw7I+_HtMG+gabW$7rsH3KN;y3p z<$HKZ1j^fz^{#9brrNztz8w{Yxi6WBpcwXgPB)dH(qeiFS8XdJn0sk@kTLy4u|{DA zP*LB6FkK~T4(4B2GU1_!zwUJLPv)&6(xZWFLC*OM@{Y}GV#Ahen5W3?-vwKEN<9Q~ ze1p|0gF3b@z_q9gE88+gS?}Kcr6Suw=?D1oo~ijIN;EMMM05<)CAZU8);U`HH_*4Q!@Z21`p1v|cBvu$GXz-qu6? z_QM^5yR>XnanmJ6IpRvLk~d9+iW2< z2yAAc>!R^tyZ(|%7}8>GNX*4X`w_z?EtPyK-6*thqv2l=WLSmD=awbbedN9>j97@= z>bZW-TBdeVhDqoozaPdK11pP8vCdZxU9{x3EUcV$*j{~9t{L1pKHXov>`J6V z#5oESJMZhR8%Af2n?|}tilZ3+;Xi6dNf7GBUpY~@Os3d4>0nrwj>$x%E9~H87s-^r+ZFcGt5Mqm1x06O` z3_5izStQ_y{2g`4m71&DsLXnwjHyK?IBZWREA_;$wUo%^RYoIjp;b!0TXaQ`(D-37 z-!pd^Nmn{ns$XIkP=X#goc0qK#ATve=K7SFi)?CG1~8;#UM3jhMm7SXFPo!cKi+52 zP&|q|>PXR0tcXBGl{fO1|%3xOJd72_(7Gv z+Mn4yb3N85Jo-0{;y?9#dalK_NKsZvVjE|0SVj{z6u4Joo2?k#dL{f;S(w8ilibzO z;E8@uQD^&$ePFS#@uYH8bwT-FTs?Nb21$P-!{Ln0vc)t=HllXvM9pY2QWC$O+0oHD zU;Z!$sb!%Wb4hjR_~B8nkuBwz=GV4}E5sMXpIk9u+8CsqxGw~Xb7&Uj@vsLl!^24S}E4Jy_gGcibh8-kUlt)Ac4Z3sA!?qeG>ecZ=3Hw3wC@K*)j#1h}k z-FeREwY|Kc<>s8=mS*&On=_r;h|KU{K->JjdD?~4kEt?df~ZB>uOJ?^T{y$h1%PE7 zda1u?f;ee%P}a9hIdhfq!=05tG5P$mHE=&nc$DDSYZ_^Srn*PUEDuDrU7q-nD|>c@ zl=|uYznXeGe_T`+U~e=5?2Yh%z0n_A;GdoS-#5ZPyZj_!g&-#EFXwM?{UM3yC3cY? ze-%)4&`8u4dxuD@CftecZ|Q89(24E_?A>$t>#%s59~*Qs9#<%)FWjl zH{3lx{C4|bg6H=Ntq*6`w16jCvLEmwryGrG0HJ=L1wO#~U}!nMXSQezBIed3nkvdt zT$iP?1AbM?8Y#?0-jJaZY#s7(%9_jSW;SWiQy$jY3mQytPavukZ4vrqgPf`hnrP4A<(-Y%K)$W6*cTf3_RZm6*Jdj36NTYLFmE|H`$KvxkkT z(;v--o?havM1xOHPeGx<%MaVQV33h%JCFodJR`5JoceQCIo7#f-@aj4#GV@XkrN9M zswu0fOIIW`@b>3mDpK!jWGAYczP{%Ab=sW!8W6^0zMgGx4)h>&x9gm%KbKCOU3UO{ zU$MP;9}mvlwa;==)?V#i&oTvR=!T0Ts3*D+i;c&5?1x~b}4+} z4vT7dzp-r8_Ih4eoA7jt5PY}S1Pq|uckEps+`4}}tsJ#5xDPE|8t`ovAQ&+BUC9~o z(z0`1GWsHKl$SbnTqk%YnEi$+AnW+)QgLS_H0Z&AaqSr>%5BSU^Au@fGgO|L&_<-t+8V*vIs+dqK_9LV#?Fpd z(-17b*SEs~Ge4Nun~hiJ4BeMH-<8fSKK^RA^Rv)Y&a)g&g_Cz5{c~Ubnq0f3ceKIo zl&H4Vo>Te5wOGLJ!;klR?H-97-0rVB5*&}zPrV$T_sry!Zx3q+uAGPP+~t=;?;T-y z6nCGcJoFh0v3qdU;WBn%8q)Tp5sWI4cFK^Ll?nUR2tQW|42t=LQG18Y`MS7v-;A7E z4pGACt3HMY&Z+tqY?CJEQniWgQ^FA_0*Cr&1(oUm!2b^DUI(o{zUw_qN-jeS*vYTC zn1bQZlzb&S-FofhqZ1@dshx3~UDu9NX6X-Y9Z6iSMqIGF9r#(d!ERkFFvZGA1rNz;y?dwbrn?BcCCA1qpl zsAFc`l3LcZ-AzO;;sBS1QO<-Thv+*Lb09uWEDWY=)>0OUTXm);hB4nn?=^tAF7ZbX z_D~UmTkWJKg16nQ$}W_IQ6{BD4YW^a^(V^up~o8=k6e_~SsAiT4gl5S8q*O%mcPP8 z4o>WZ9Hkez!i)=y>x3-I`#os^oW%UsB*YFG095#|^)<~n{cnV)y?dI9DPCj==q)BBc}3B>#U%{0~%|=T!}6 zU@CCc--Ws20`({(1HGa*{h%j;r~faB^h7X}9`G=KsGd)BYew$;z3SgXMNXnk)2v0jZQpab;~S?%i8{?Pxm7woZ6rn)3$^ z9V;UfHg9xM{0urNFXuxW&$lk^dUiuz!Y>0$ldky|%kI}Y55sf0wL9*$KNkcP4)+hn z3U(f%w*>WCZ^Z~>>~|jhiIgH1g znfPJM39q}!EaysK(iN1CvxP5z5N?&wWn8+y$Nc!d@1ryhch3BB?c(R{cHWjqhE%-i z6jrx*ORutqPd5HFN@F<@v%{)^bgKQWZzFzK>5fKqz%hA!^Z3+#wP!FU<`xttUaAxq<&hqZ9B%;}EM$2VEf#v@`FL}rMnAGnpbvccz54Vh6D2xqa!D#xq!!-CZ1lmEuAml zyPJb=fm$#nqnl+%p&?F(*~=`p^_Mq-pvkp;82L}EzKUtH6sff3(c@?fS`728L$_q` zbBT1I3ZG4?pR#CI%=PwlMM<+JU?~RLN1SRpY1=<&IHKr|9ehoQ{wdv(Ut{7jkc^%^ zxWf}3^ph;cKXF|$vqix8Dk$+_(lSnz_qj9f8p?`hvt9`Sqad2>p2XK$MVE=~E&1 z7kIfg2DU!ud?`*{i>g?7YWo_{ASVQ5Z_Dx9V(Jn`xsDwfG#_tRW_%-V?UJJLN6%0# zw5blFQZ$qipD&-!271m_=6yrIG3<1h3cGP(vemZ2L&k?q6os+!3Wz2WX zxINvBT)kZl4|#UHI(Ycrza_sfo<7a}d^xsfGU|M56U@G2e3==6^n3$BTFLZi6M!(- z>S#?Jxg~y7j(=u1Tn{cRJ9BbE6qlQzn8>|LMU;%f{o1K|mZRJ*69o8Hv+(?a*3;vy ziz!=$}UfNGIOup$1qe4G)0TbUx0F~`7O8f_xq;dT%#^6UCI zr;~qLgSpOyPx)gV0V0Ug%*o5oxIV~Box+ltG3DYO5WZiM940smxACHk%5~EM}TXHwDa5y^Y`0psi-7dQmxa>=1 zwKN#$)uz1ud7Fd#v1RTk^h1QI3a<@F{9A&rA6rGI1pznx?MjXdg(Z4-EO_Hr<102t za-CNRz2C;^bX8)1O`_Q+7vQXFG;17%l_Hm=N1n{v#j18GN8dv1%Y3hs^AR5&s~F}v z5nQ39o5f9Gy^w)m_Yid`UpXzWz{;#A$oE#$iVpD0KCxpRj8k&LCRxI3n9(bcqa)l| z!l&_u&=P*3PU3a~JCMNuNGW9Ad6*7dJKl5ilpG6a>BRCzOU!6aR!hO(;pA?#tQ+!B zg?xzS^I}dMoYBt~JNCNUG5r2*U}mdjjeYI>JYgwAZ6F!$%lpII(;^;Ll?+lA6Iai& zJ6oNa5qlw=yee6R1rOJ9Mcs+|kizACmW>=)?a#bWC05UEv606i&%%L>uXpokiXm%J zG+eXsWd(~z$m&CFc4~C}mmD3fpJ$mDhi(_lT>8M*#0}LZygfavHs-1hrSe=I6pxoL^B4whL>;MJ@AtW%0k*Ok}WC0m?23_D6VSERHZb*;vj z6UayKTgl!eIHg$SrKh-rS@w$H&1}pY(~I~^i|?{XR-9HLy{y`HBIV*R$2{&mDr*u> z6cYwDHQ7F|D!3eOS67j??HwFrYhlC1_7WQ-jUqQd|7fu}cV1>~VI)u8CyDB-p#ve8 zqlJIcT#6}rgzo6hd$CZqKKe+8iX$N@`g%u|iB=Q}txH)LhytyrI&&xojbIEv=nSeGBeQni;Y_ZzG5ez1^1Uv6Ok0+)5 zdm3zdgdaS{lfZ8}w>vL-&g&lw!E6zgEv{Rp*nVb$K2=dooBBO{cL2ZHnPO-feCk>q z@eA^K$(?^Yl@FkJa}R7vDQRHj2Owm-SF<+b-@FITSlHlU>Qvqy6i*(y1MH zxM;5#=OOr?(|6y&9>^=%lGc}3Al1i`)v9yia==_OZEeruWgaz@+I4d}-gM5ML?sB3 zu;}@V5XP8KT&2`cbJX?>5zddh`=JU50@>z`)9ylhs*w(pBQXxlao`PV^L=t_(ax+o z^a-vmC|<7T%y7}Vj_$2)iMrFW$qTIyS0nLtO{K~YU*9e?&KJN#%(kWz9ObFSI`F;? z3tWgfRY4swn^9<^J*<96_$of`AH3X@xdzz@YU_#>Ctem!Co?*QZLzzezx~W@k&w&! z9JQf{Q53eRsk4oJ6y1d;?{vfAVzcDxzJ=ie(*^5I4JEamJb>ys=MaN+0oBBdwkw7Plf0eHPccQ~EQCZTlW&O_Mgpb?l8NIXe3d(FlLs` z3OMfq)-noPm9}L^SY5%sCja2^-=qLvO4sUyhNQe0H-hc@$u$D+4!(-VNEG=ER||;E zygdlt87^oPh(_tuTziC|CLD2OOZH_`f}()ai_4+J35XMLh?vJ|E}%oFyBQRS=DuGS zyy={^2h0(`MYWku1Yn{i0yywTo5+P+fz%!1Zd^J-PyxbBVTb~1!jGm}H-`LGygK%a z5%XFN`CRbjOI&tfI~_Ge06f!|V4MCNBk-dnHxeo2H)bEWVEMK#uW)Iuoy>B7r>JNa z_i%eel5l;GP~1>^A9m@%$Hn=RnlkV6tu2)D>UJnj6dU4;BN=&^-&KaMZcVqhz^|=- z*|9wGbZ6?UHb)LQKys?wj+uW&>Fe6w)Pf$IlVsXGcGhfEeh979j(CIC90$1YazqaG zC3oaFf(p!B#U1~*4okSv!*UE6ta{t&iWPM*ABk4<3lUHSs?-Bye%%WFCYct|hHSXw z{o4$wLVfqbj}*sxlh8FMHyF3lcah&ZRz8fLl!wS+DFJ}tm>+y3y8Z|+`zw6@-{D8U z!-EJ!x+;7)ZtT8;UwK-+&WX=wHd?i~i03LXLUtMySevSjbK8$=iE^xV8d~VaN*}kR5?RAgu$iUSNN@HO&}AUc)~X#;NSL&8sxnW=hR#Us_c;QCdH3A|Cxr#NQ+lb0QfKINJj}>MQwBo?w3PJyr?Bb`6ZhA4aUs2a zo$6zy!#+Ay2vs_;V{9aJL{*6Si??UykCvF;tC*l;t_dxP)T3?P=g~E!=14KJ1`ACv zlHId33vt%aX**gsX2hzngstC!~t3uqWC2widWd)LH}uJLkT`|x@wD>A2e^7h*L4#-6ok;ciIgjXVtn$sF{psql&JW&b-lq$moQeQ9`jfr` zX*=SuM$iLgXzlbpIebwD^%Hv&OzgUj!M%D-7ja5oo~W9da4@(#bC_>BXjb>)2XX+F zCHv)Me^MQy!k5GZ6Auw~?sht5qLjc<<>BiU!#@5hRBPa`WdXAI$lU&8;3QCk>OUY+ z41U5HOLBLQCAIx5pLYZXXRA;s`$LaUvG3gx_m7r0w>d@L_@r`etj& z65}!iUV2YjHd*J(5hGLQB~F7l5`D@A9qf&eECxvY--IvQ*|AzLg+{p??cV1mTWDqXPXbL?@w-T%T4`haEBLO47)H z9LK9g;&mYTH;tr~8QMxEOZig2eXsEU_T3k%DeK^KYQlVh=gNWir*H8wASCd@T<635 zJuqy@Ib=xDqy;U#`80B@Wq6uH?)+~m4 z&%2qL!<5~YS!3V!lCjO{E6As%vKrTjg1Ab3ziJ$0Eg0BTw9--n2NSu>my{C*O>7M( zEOxViLDPQ*asAJrk??rYhka17uRXYf{2${f2__uO=}UaMT$Cx7;Z8W_EI01t(^`>Me<kHUQX1AG^uEVQXV6}tXUg;!bEp;Pf&RUDp5`NF4VA05XW%XFcy z2J^qukIvN;ePrGDP#qHOL+q|`(j54!sU}P#SUD0Rv#Dki4{#AcA&@XlN zRXmy-y5UwI_+X!+hnfW-e#tp!@~LiVJXmd0B04CuO7a^fIM%y@4c-on(=FZjk*{3s zYSgF4O$UlH5D*p@(t#kp8kH?DfC7FS10}_`2JfA#wJ?v6l($)dL$`CMJl&7#PHGxR z-d0Dp6vd1diODxe8%nPEnTrmk!M@csGCQn9?Vdai@GRbMcK zZQU@#OzHKqMWyQtA#eB9OV@1LA=c-n>q8wd3ja+l^9MC5kQ!R%clSNnzPX5yV)zHO ztH}hAnwR5G>hI)ek%<2X^=0=UY-f0`!KQcnr!GU-tDB z%FKoq$?$)W&l*Z?KgOhPtvmij-ft-NsI2h-r_ri}{=MJ%JM@uCdpu*8f&NxkKs*0K z6YE#FZ2b4HN8{23w+~CZXM-!ZfSg>T`vDa$VWg$Cqv` z2XS=f6`OM)+DfO*vI_VvZUbu?&0R`L+*8p`&O8XU#Bm=6z62l;^{Qe7Z#v*72#kX}~-!tn_D$a0D7J(u6g{%+<>yw<_sY5DDh-6i=7iX)J5wu)H)WD7w4p6B zgjmIT1K(44==xnfZ@w;7{mY~FeaYC+-@vZD=1l%D`ID{swtM*NT+`~mOv>mScNK^K zX)-kVw@EJe-zK|k|Nl&K$yxWzbR4i%`vOg(l~}&>*yOa~6BJ@$;PA#|8ktf!-~rz# zH-xY4@2;F4g0`(w(u3cKCpV!>VrXhhGK4PB9<+K6VUORLTvthN85lV}y8BvvQ{n~_ z?bDh?p3|A+)`0q6c+Q#kLxuPg&X@;5wuX>l z@&LPzZSXKW5E1_{P$P&oBB>-I#xhDS;p$tH(0H&(V;EYdE*p*<=$y9H=5S0!fEog$ zeMhX>C0OS()lSG~#zsRvLMM(foyj_A7g_M%+a$zj0NWgR80Zcp5Uuk!n!9i{w07v_ zZ!|{xJE*B)R*mI})j{~O)`~A!ZMGK;?x34cu@@r5zYgy{Gw=LbY)Usm>Vrq7M(zZO z2k(VPW+v(c!6FOC`T=T91x>-sb*QN60)t(BunB1o`^{-2l8mwfKV4 zNxHrUHsy71Ll&Qo;Sa+z#S(Y+>Z3DVNeDdaFs7t7fAs~uR$sUPa|`vvWbAb-L(``^ zbIY8DHkM!R04DFW0+_s080gUen>L7lCeJok_pjvDb=h>MO)V!f{iP6Y0Dk`jZ)XCR za;g{H%20(euiTvq#x0+XrR>gDZo^g2d^3~}*@U;*_;3Wth0 zhl%;TPJ}G*$6;7|)jH$(>hn9?GmxKI-(1~fd^&h9I}k5;Dbqe2uKTnIeW7HcD&tqU zt&8*JTPW8^&ZUtCjfHoOduq1hxvqQ=QRs4jW$r;_>KQU*v*$vw5>C(U&C8RZSr`y` zDp8GvvrZ)8sj<;Ws&Me?f6=xG{0?>vPtkqo)vq8mIRj!ZGg%ucL39vmj5U$z<#gG! zNpfx7Bb>l8HF^!}V9A@ek|S-4>WA+yILZ_1@W*rzyYNSsZ!m)|ioZ~AkuR2u z8O*c+@sG`0$MV^aX`?0LI6*U17Pxk zA7MYh8~TD32Bzg+v?WZ|I^2VVCyPZLr!8N_v+REV}l*&#i*?~Do8~MSKI4SbAXniE-^=mJt z!inwKwRP7kTfcyy_-~@_nOfKC%;}eLTyLFYgl=FC{2w9r%1`V`=0jKn1B8VUMk+%? zZm?a@FCc`Om$|T13 z!Sc=aT>TW#UpV$JBcygB-)U_c0b3%#waFhT-fP+nO`is@&Ny&wDN}iQ;%PM=yt#&>1c+U#5=Sp+Ae=8g<3qC}dIp30)=OS#AYp$|4zE2GF1YH&+|sjL`jzM2i|Pey^LA(s`0Xti z%|kv;CY*1Hyx=%~+6~WOf_J40$5vM$VMS~u#tY5eSw-%Y6r`Xuit5FQXJ2hJ8k0-k z^KZc~$P~Bh+)hBjf&UR4m|G4h_^05$--0iG3$DREadBmSR6nul_JR~tCDfpONG2S! zsU#ee{R`N=uQoX-_Fuq?U!6^2u%?DVFkWtMeN{?2H@O5cUS#PX@(+c4y8PjM%Z5vU zM02qfxR$Oa{Qm%s9)$BvO`I*?{sbwApaOyMf?ezO+Ucct(fuf_04W&7VYZ@D+{i2h zDd^L+l|)_3ISm|Df%iS)Ry1JD1G=s+-!?zKDO?`_{D}5;-AEh4FWX)c-a7UK`Wab( z^R3bBn<)+?1WJ7Iwea!tuol($E+R0$c>tHLZD2)NAO!&)4_CmWFf^)<1z2ah8vY?&mwD;^`YgD# zGd~a(p?Ed7KMo3VLkkeHRO^lj2k9K2rK4qj(G4_hR$ZQwOTSV0_q%@a7zbjmO^p8ra8URSa2);zfc?E&;2y+C2h7N6FG0-mmOD>X zmb`tZSx^+1IZsYFZt!;7<=qhy9zZ(1%YUzJT-ASXXaF0|9?u&Yyzf$=&tYe?>MsR4 zL9>JSPGJ7q?(o(lp=jnjSe!6@4tuAwgj}0REMA}^4$0*pBazh!@b-A?6zPA`AF};L zUuta5w+#t2f3VXA=!gXEI2dC4?{I4Hk-dl48%!iT3V$%1o=#sk4{-EIgE%R8O+IMJ zgrsB%GWvY`;}*ZFj~WN06B$(Y*nG`q&8P1bB7AF1G5@Kii(|`benEXYBal{;jS@{7I<|0 z6lG)xqhsxtN28&UcyX!-PMb*oT%7>VScEYF7ykP_JoSIarn$; zvSyS8_ZzT0lC|9X2PMH1`x*C!3jo8ULlRVFfdU$epUBi(Wg#bpR zLCE*oiD|n6gKUAk^2?H~W_iBi5l*e@yw-BSjLn^M|N8e1&H1QgC(a~cz7V~`r4A*r zY2AH|k*^fN!I1G2%?I;7;T8_j7Ye~_LAytwS)Lxu ztUoE4#H9SU3V5VHRfP0jcjxsddGFvPwB>YL> z<7viDc}~k)@txH=7}>@RT~-{g5gt1~AXHoww(*jWY_DH`nL-};9aX$Yu>p%E8hzV~ z7?v7YxeSfE>=e@qiTa`N(L?~V`&^zVqiAdKHYI{yZ;{S7qlH`(PYng3?K2tysUQEnQ^XM+{@2LfLu@Y&+PXoE%# zeD6o1Otk`=E&+Fu9T$uaLp>jXo^%J-9EyG{D6cJ8^oI|0i2zpoMz=yHFJ0_tbR2ih zPEv4dL43WLpmmIRkuix;Hf4W6Fjt@^)|6qfx*6{a|MQEc5;G{Qc?e#I55scV=Qk@9O#XtfRIT z>HIwR4tTVGvull?kKO>Yqo=Eipe1wTVD1fol$q+5sgSFVG~s5zxi;c9ZOFy-(zA4W zVAQ@wK70^)dmg#*THc~6b#LWkxpx=CQ9I${cr|DC+^|gPXD3M6 zv+V2P^~zy+?NV>xqsw1==T~C;m}=(h=l9;C=jUd%w>IHZ)bq&D9&qmK=OJLwS^o9T zy|DD1`~CBTQ{qT&aAs(0>b|F6TbJ9~zLVoX=Ixo~t>-D{%3?yI!l48WA=h=Cfk9}_ zYF_Bt(9#dT8icF$x4p|xj58y=wRR3%+t~3<;S-GRcEo^dZ%VBTpX8Gan?qmqleHcI zC!ls|QQfNgwe8K(l2!{!Y?UWk>2B85it~EM@-jm_`D4w^kL%B`kKT^$Z+BaS4fpBXH_XhBZ@%@fcLTpx`|r zkCEK%v|*8B(Fwjbc|0_DztkznclHQsDj>c+j~KL6PH||hZ*3`*mIe`~Fjf+($Hq?F zK0og~_TSDOJ3PMUq@4Jjr^GJpz2g!dyq6D!POW+RdFRPM^PdwG3KFE${w&DSZO|_o zcyW5FJiMXoh^iOG1yr8U<0GNV5+c66H*V~-7mmyF(_{Ut@!_m$<{)o6V8X=$jF4N6 zkXo6G&BrLrPp6e-!z%Hr47uKAhLS2b+P10W^-j_bC5Z?{thO9AIq38EX|HH>@-O(Vw||<+L_8wpuGkw7m)wUaN=u z8D}Cx_va3PM+Li{T^>jDE8=rG-3Vjw%6xlaJ@-o&4ohG4`a=ml=$^>I`%Hh7F4!3W z@_*#F(b*%^7=Ufyz`tt>)NJZc^AGjKd#Cotr~pP(>Jt&+W(J~?qV4&@Yd@3Wd*@Jo zq{ZEFPY7>7Y26H4r@>%oF?cxG)wFAw;hf1lEp0VFQ!}OGJY;lzAds+IHHfmWrZ;Zq z&eaJ%H$y@S7aa#TU0BfUO*(F%GmJ3v!DNzbRD{PS)2xTA8l&HM*M93>&4z7#Xgg== zY`w$WNI*pS%<}%+va*zD5-Rfb!J*5b#%+REAdvymYwENJEJ&fQ7*3OPSqHKT#ijvl z5#3G4S4M2D#$Pz_RihWDPlC=c+WynQwvQ?=ODJ^(e)<6VY0RWioa-mM;ZW2%iEUX} zP11ERt|}Be(5VM4u*I+ze@~e~9gtAretQ1_oE^+wqiB2h?Thj977#=gRp12mDsY16 z6gUwFoT!s%gS7uQ1l}S{E68gGZV&nH??wNL{=LY3$`%x_r0h3J({K1cQ2xH)?yT^$m!Sfe{kDc^?N}-Ggm`y-74sajPrR=~@lq?5 z*a_n6{r?Di2k6MU?OQxn$F^;|gN{|PZ5thRY}>YN+jcs(({Xpw!K?nhd+)p7@BiNW zj~Y2OGDg*0bIyIvuC>>xU2DmgL6D(!@)3OWf&pD^c9zy4Wgp?epz+yh^rw`cb^tz$ zS7q#M<@8>0nV>yd^zPPo-Zck+9x>xj(~PIeDGEZD#ji@Mm{!|2|`^fo|zEiO8uTgx_x$bUnC0AdFht z0q!aXd}cP;nSR7;seFr#G^u)TXYAg4yo>#IHh!}FGWmSC{_tv9Kds|L5OyD|+1zZdN}(Z$zVlsT{P=+tD!1>+y@kEVgL4vPB9NPn4lohO$u{x2SQ3FVaI5IQw18+N zgE)SDF$Wow&xLjl@LnT{^SU*`4l*TX@^8{dw9Lg^u;VDwjgE8s4PjYoA6MdEs*WHp zPsab5#9dFy(wz9>JHoo^H4@t{e?`c>Bw3ckx6np&fh^}b7k(~*h(-KMcl<@Lq=taer)$Dl%a#3z_lO9Vco(nwJ`hN7NXT*K02iDMInb^a#YCN z3sCwKd&t~v1Ok?WLxlH4#VxSszIbRM9F>bx%l}3^3V&8u>A2>sPsD4@H-ItS{*tbX~p&xb0sF3Y_F+zP=ss zW_#$%_xBtm^1s)QA-FoNdq2Ov#)=7K9{JpBy)7P0G`uzm>T%-BRxrM{t^eR+!e_8U zvVU4)PmfW(?U5gK-);BtdT!gyF^VsC92BujNvP+iw96+HPp>{andUiBTd&TUy`RBq zhJ2;`bZ*!r&!f;iNz}@tz;;pBw|{rjBIDp1hJq!*jCE(?HiL8$cA;y?MSs~cRb1iZ zMc`y#&5>tA}1Jg|7%RPD&KrV@~1S8OaB2;2wOxaJBaczMLI z98-fMp6)kW=FE?X+pPrPE1vjq5pC_nO7&ge8-yJ1IHQbONhF_)=Bf(Yf61~ zM`WGH#jaZbd*J@NX%CZmqaio!vui{Cpl58h*|&+$=C1M!3<|0F2iI$Nh${YoalG?Y zDohWF>_iUDc2g z!UQ#)XLULSc;|_ycin1S><{i$@n^qo)(m=68k3xy3Phz&`!h@_uWye!N{3&ZwZoyw zJeJ0Cc410qqtygat%c77pYl$23R-ps;iLBTdpi?{d>P(^5I~#EwwyyYX$^ zR#N0P)7cp+?EalHL4cy1{xufS*LGKS9*1|w@BU|OJ$7#6ErK&P%E{`8q3aILkHrTz zV;y%&qXh0Xm_GX8FytL?e?c^NfoYXil-J`0?2xirYleKS|nW^uy3`` z>M%|oDy+ia+Jd-29J3`7JU0<`OdxIDY}YA1a5YS()NOXQh+K_1FjWfeGn zXC`e7Bjy!pPuZw(78WSV3>h*K zm@ui&#FU4AX%FDYA*QCtq9aX&ILb~YvcLV|y%O>32(F*^6oh2BX#3wR5`IGsmB{WOALz)$41odfL*p`Hq_qApO~n_hOp&EE0u*)QxMdy z;ibZXOue^dQCy-VGf}iZAPz(Bs{rc&X?*JFbCh$Y_W5e1&e|^zON+nGX!uOy*l1$k zWVb|uV?^8%4)iA~)Atg_5hTy+rAPgp5`*xv(J!)DL=u0uU3zGC$6;1>%~h8UVw${+ z8#sA(HpHBlPe6z@ssFr_)5IIFl{xZKs`UR>ov9prd7kG?X!Z44`Z!))n!2+=6mT`e3ON)RBA~nlGxRR z7kegUeZ`JAn6TB$t8-|`;UW!G=GB3dwma5&9H4$=8pmWa%X>eQOjv+YTg5tP^{B$~ zIIBdlI(eBF=lc+V(&JSDK;A`l&Mnn5k)l!Qt!QKe^ItCMLiR-+o6L zB`sR=>@{;lMCi3)s`l2h{rVdM_+>)GG1-IxcAiMX=gW0(=MrY?i2D*DSbM3x&V6=1 zer?1oq~PNxBrbzxxYf++uic(KJhcdOkX=dJLWWcfy@#y{GKhV&ZdbRvOdglnb83)% zCy+PLug#&ogJ5a=bDu%!hZJ_&=3`;OvEN%ZuYX7>=s-86_&MmX<}lLV?0K}WVYYkU zos=%$3-3yO=*AHcAs(-5dR|hKbUGT2CiiU^BKxe_d<+nu59Br&i_1F9~ypBm# zOFp;`VIxbg?Y_T;H_y}b{J?-Q87%gf5rNaREmFEfq%TZ%u=eY3VS!mKS*_xA8RU+D ztLhkA-rdyThljY9v-Cj=@luXIF2cK>UUL4nO6Rpv*n5p|qRqU}$^1i`)4_gsTR}t( zuNl1)e6oyU6VIT|7Ji`njH5ON_@ig~nwlxjo0$u;f$%>|NcRl5HZ$u5 zT{n5WxE#DLw`Bu~vE?RT#J0NkY>2KAHu0RstO`?%z8c^(2YG?Rw?qrKalIWc`=AGt zQP#RSOYCiH@B+C-Q|)e>u*JG9bmI(fyYL(TfLhH1d~9Zp_x&^jX!e$Ma%Ei&cKdsY zAZpq!{UtTU!Tv9)KTB4-c%ufT*bVQjn7*Q4M;8wY?QTawY-ZYUE&@8Zt{wK}z@O|K zTorzwY`gc{2>ks2X9r-9ywCl*>BP~-g^2|2?{)C0jcXlFG26wSbTt=Ax`1m{uE6(N zjz8x`Z=6w+o|LZflXDBwPpE4I9+PH8nR>puD6N5RP^gU&;>}FG`*ZH7uDZ0kO5jLr z14lyXdRo46t7oE=CrkaOaf9Vbl+-V~*3|yo*mnNLuKxBM`%-pPsh`Un9m$0IgTBLx z?``hC?mRj@WLmPlI74?g1KLvW!M-sv+BRAEcQs$I^AT zR`aw@0}q+;Z|UX$DKs@G^R!N0-)`K-6|4B_ZoNKPl@Q!=7{rPxB!>mO6n5k?iT4}Qe0L6!SX8;(Y zD-6PiJRqGBx%7=R7b%l~fQYa$51}v4AskS5tWB&|PZM4Nm_cBczBuC^F{}A?P4|Ha z*$IxhhQiRwM3{*{pi_vUkdEnvBou@sp_@LRb-=?g5>iKGX#YYct9#>WnN zjZ^3~T%p@IVT}TlKG$wziGlsR${7U1%NopMjiSL8%o3=b)(?ZC@j8|V{!~Me4Tl1P zo#9VXmcu(wKSO2Gn=t`A8~%G}mbD;2+8>Em2}o}|L?8sdKv0Ij?B6c^l%6}ndWE>f zVO;2#dd0NVH*$+)XTl&w<|1x$cfkFhe56Gnj3`|gwY4C{--~^`wz#$^BVlnS|~>b^~=Y>HafS&7uVx%`!irZ|K|Y%5Rm>Fy>ongx&zjI(>7m$ zSpm16^Vg2kYf^tY2qt!YS`4U~6Jzjl0l&kl2;Bq`$``Ta0wNOa}-Pqq%+G_5bB$8e)i{1x6A@o6lkqY1lilX_9E7W!d7>BR(}AmU|P+a28q4L%vB)MMZ%|{uJLC6B*0F3;TipMCn*1 z8rdVyNTPRNFT8n~z7TVN8)g0SMen2d9J$LUvFrWTL;&XV6BI|qW?m8JHwtGZqQ`RV zq~{{};hfE{ZwZ)tk3hVki_~1yXeL$$dbVjM_K~^PFYyE3uCnfLK-bbTyVEmoUN(Nd zRM&dg4zw8hDw;-izb7noo9YRQf$F=ztxsCO{Q?B`x0wXq(Q#3i%ju72seD7k2xL9t zRk<9;08MH7zvwwfJo=>9|4%*kzBn>uEeIDEE4Z>61=LuccfI^LzWsI;HVQhm~Y1l8! zjaVhfQ^aZO?XRvNO4)G^4>9bbY|cXzVP=mY;OQY2Q0Ukc8IC<#;+n*m1)5K+VP?qF z#2Jsy!C1zApDTu7=cn}2zOV;cn4R3Mf=ar68JOo=K%SmLNhQu$28TDnEx=JQNU|7F z*I&=Cs)e7Y_rein`-Ab)J`l;$M~Kl7Y+=SEOOheX-st>%0aC?o=BMx-fjP$KKA{ql3{Xh%aI>B?3pbjt zKt6xsL$Q-&7zVEviAR<8j6PAkf=!WRgzuvl;Nbi%#_9hm#zLL_w`FrBO?tYXuo5NP zZ!Impa}B}b*3o zedIbH-rgqn1v9UZ8ciIf>@CxoKi2J<$8w?oqYL-)XTekY0+&zegZ<}@%MrO{2xdcg z3?ha~PW2)6Tm+$2<_@^qff!!v6^bh8`ga>5BG)`ZLhxWxL|Vj^9xt`Ktpr3gUYD!O zo*(bq(bHc=n?J{akVVj)xZ?ow`ufnF#8rM5E|FCBom#5lq_SQF zu1#K7@F%&#u3%j3cGF>sysoUPz`KAuPB3-_J+YF(t=W`la%v{OIryW;LTY@L=X`6r zqvfBH=Si&{VbVEwN-7GVM+`a^xJL{obu$cfgrG-9HbhBSNqCZHMUWo!R<=T>yTBTI%s0j?MdST(lgDk}FEGz!a~a(WoL` zp?Od_{@w>kP?|({!G51gM>IW_g<(TBlWcH{Xv7zB3YbW+D#8yI8VsLP@)xIX&&Nn= zxIm3wixV#Lmn?+Tc*AyWG{sF`YDzmV4n)ikx$UUpSoh{*SZ-p5N4DlBUP{myyuX7t zoiPvNK(>~=lZ$jF5NXhyOt2=O4AJ<5S}#t|P>a#jaAEWZwaQ=PU#P>l$wlXXq1K1Q z_b+7dKV)NCYhgo$ao{6cNmcEYsqHGL(fMhB*M}4-1#qvj6d?xEw~MDkhjC=VFkn~@ zp-yNE({(bggdyMz;f8T&`7OsPa%op7(m)54>+zlQW1HFa6_aG83Jg}XH5|*()y8bR8`W9^CHBRhCQ%D8hL&~H2Tv5X9Cv>jqK>p@)$G? z^?|fzOocSuSbs9L-b+=c03}Erl_{y@B4rk8Wo60Xf1(z_{u7lLF@%C>sg5!YLFHc- z=+pr%i2sE7$Aan3h{R{&hqcJvGEbBwPj$uNtfkHfS}4xvVt2gxG?N31ll@aT?m6iAc0r4YDP4*Gy*;SR0yLnb^g#k6DrVg zob*&3NEuiQo{}jjC zXpE6D52FN8Rt6?j)2r=do%;IXtPuC?I(q76lDAv;Vvaz(Yi^nyr3%sE`i%}xEHo3>yqWOS|(>zem{8o$zS zH&aL-w@#qy1Ttf;Y6z3kVAp7uxyk4{^B|zactnCSO0;yRtgq>3_!Cnu$X3KlNmNVG zRD*f!UP%=yWD6ZCPNx1(rVTWo*qKrVG}rtrdQ1esk!^Y7-)1D&DWkH}-s+)(@L;%J z_-SFdz6f2^|3KJ-+KsP8ClD=6;F_{cw!0h`l&0NwNObgg4$1vd3Emj2co`iucprga zI-()T9p^A{pN1$7UTdQ02p1(xx?C-Ep_Fb5`8`$2gl?`&XIskZuXdX7fjN``WXy-aqa25Y34S@qHC079|1t{N^(CfT@WWb zw2ilQ1r5&rgzdSo_Cfa|+jCISaHOWI5*qLiQa(SBhw4d{f=t#{=>juGPIVB~N{x3A z{hk`!iPO{&h*DAMiKiqV<3G=|DZ+Z8_`1M zn6(_%L?jL3y)|WtNR@#-%7Z&pM8O?(XtPg+Yk07sg?H&9n$Pg4h~!y!CNzHvx$BV= zWqsJ>PJ1v-jLDxQ^1h|(aDz=x9u1&y5@&o0odqG!0;s67DGr1Wti_gYzCi-bnlU{^ z_&P7UU^LYk=B-kgVVR-)x6klMsP`<{$LeD|@qw9P|AQo)O{>NbNf zUH@*D`o(YWA?7rWY|g<);^C!%loTpu-5G&X7|l@c$YVUuI*U@=+pw|6d}U z+rvF21%}@D{BxZs_plqen+7D(p2^7Ad zk$-CO_WuL6O&f7$=O_KTEjYZ$5;o#VCe?4^?F#!SF)_k5Vn>QK*5zp2;2Q81d z2i@a%wg6cq@+pTF>M<@jn4Ny^S(&DRgTBFF^v^lqCrd zo;GFe@sNEM#H>MNlu-EA1dS0avxL8In%s33;Uxg9 zic1Copmg1T5qL>)mU;+aBk;E@UYdlW0obz4xTn9Zg?}5p#cwqc^IP0xD)l&T@42`Q z1O+&M%{~Ugl>UJ!{ToIXQ2MMiN$}@=+F8ez$Pk4z&fD$ldqF^G9Dp;Cn-SApC}QV8 z{p9!XJ@&6_mW02RN3-w$&tRVcr92n&1C}9+Ho=Qi$_iNjqO%^pwMG!L_QTtwDjOT% z9GZQscquo^=EK})d0n%(35B`K{?(Frk9~tJE&|{zm4A;{nw~et^G6DT@8XmqB;tR7 zvimLeV`bDJxToKoGPd@HGNE1#fFgBE+Y#u2XbVCEmM!MQ7}>`O=UH3;Hepi$_q0Ps zrfY_WbZQ@v7<_3v6W^`NWi+%Y9az?}56^V`#Vqut1{4~+Lq_KXd#gVr_p~mqB=__a zd{Nn=w+6IeH-Rk0Cz=g&0ezRRJ+k~ayCe2a+ z_2IOU?56jge^QLS9V1#y^K2zVzr@& zIn<8&&fY9EPGLHmrR)^}To+3dLErRJ^l-)(%h&Hudx8MHqu-)PDdL3G-arlw z6>0S(HPxSxRKSotXQ@u8@&(MamFDi9uwQumoxqMn;qA?6sSfJdzOMa1V6!F>=4sF3 zROO+8w>0eLA+l5Cu>^Nk02~spPCP9@3AxZw%~PjATtbM_hnNOBp^h}(M!k7ZU&QBS zrR8TOEn(9u1E{4DzVOiKSY$aVQM1L7A?Vq8q$&d7l0TfPJA+qDlhERyD1e9K{HzCA z9-QICFam+G)nR`p(yA;6Cg~>yZE7lAMS%Fc`yu8|YYlZ62iUdPI3X%@bRHe9Ki60A z-YWN6N?ye1-PbuS_JDyn%%|u3Jxq=OPG;z6Aw;KY8zx&2(N=Nh+*xQtmP`qr!3JS6 zn0*86hGP5`vb`%fw(T0~@=DE;EQO@iASb1^Iqst(1uZfO+}F)J#^iZ2{VUehmoi|w zD2@b77g;@F*pZHk^e3dyM|`HXSMQti^0Hv)s5T=LJ}+TTNU0~GnP1M1T*BZq!r&(* zPFgA_C;p2QC!1%J9}hK^Q=Bzbp~NSU`JDMdq`|Okw&>wH8wG$_p#yq7B;yL1Fb|6e z4-HL?7Ld}CM)2R1L`CtD)d8X|I5ISu-t2Da3k zaf@rPfy}$UMP}ocx;!!TJjG?hpiWwC$cIg_%_u?uF>zK+tb%Z%8EUj~%RL;Y!v{)d zyfK=w@&v^=WrD+{*aC;4?))_&K%pi-{5lxo{a*w;b{h|qNMZT^MS$`MiU$K{+>t%o z3rtL2mb^6Bd@O!3b3uf-l(3a3CM4)yyC^H~#4KxiwKIE#NrubW718I>9+rm;hap zxEp7_la|h|=S0UFv%HgBObBq9lCbj2djHnxSw&JDDznsH_K7j0H!d!+fimNIbA}3@ z^vdb2D|Kpq9)v9=pYN53i2yj)+C<2PEzv9Sr{_NET4*ikUFXn7scOn+Q~L__VZu*x zSUbp{0Xlebiaxl_Va0ruwnP;-z{}@EXNmx4#Ys}xeR!X+0=S-nxumJ)>auyD5})~v z%;%xLvbUjCo5ue6rZ7Jn!fSnU&%!kEUlo!@ru9A&4gplq$g0VnB-42G_0&F6Acoje zu$Z)YM_sm*tDZ-hkwdUbkE-$0J zzQ0(@f_jJMAwT>e&WBFDzZkF#0*0xXI!irCN^^(fF9tlDBQFsmlcos_`69DsPXZIv zdo_^|F)byjv?fUTKYF>bPOL{oc+o{sU%m_~IPzQu;TL9VQO+{d$yK`@c!C(%;?r zCT73>&!#kmg5vtU;2aMU&Dqq&#nR6FuYFd{YFkdgzHB`^r3P(#X0R=evIjJ0 z@yM24efbl>nbFzeBbWF`iV>oDvqnOk*Ix>xc8L$u?Vx zcGX(z%g+Ob2OdZ5#A14D!~sqeDqQSi;^1{9(=M)e{ce)BM}XT8jQWGAi>txiD5sxF z>b00BMJMn{DHPa&SVQUZaS;LzuYrZDYgpKwboGwG$A)uRFH;D7RPmUedBKz~4q1>) zi=EMN8R+oGB2#AW(NQmy6hxPc1i~kf*qMraS==Cz@fVw@pJ4DHqj)?KWuPFkuNI>z z@zakeqU9j1mDqlZMr=wSZOs(q1y3@}7d7QMi%CDU#0^-Dcj-}lq`3LhFRu-)48#%e zTdgUs2`((G;A%-AByW{-#=YGNAvUx~NN&f#@?r)V*V~u%CSbIIS;@`z#^%eTZae{q z!DDuQiqXZC*MQE*ksH@i5};bX?^N&_vOMQqnGBsX?UWo z<10tarFoW!ughJtiR^X$OXa99vg_og+)p{%V*T+gD9$UhZB)ofw;eJfQ@T?^5Vp1A z8>9MZ3;`a`Ob)N#(KUlv4W1YIq$$7NZbsVD!+nqTw}EvE-+OST zmy@FchDgQ0NZCCZlj0{}YKb|b;o=cm7+NY$I4q0`DfJ7kRrs2Fy-#Ug&k+}5%kQPv zVs!`fpW7=>wT_fQfGwz6fPa5_2LIK9>Z_@d@_$|M(R2M)gUs+Cb6!0IhY89DCQ&S3 z5?HYbI+KK3kR0$SSek*Gp{8GcvT1T+cRo;(oRO4o`{GVB?n>qV*>BGZrM91Uxnx50 zBXrAngc^nqCK@y25-#a#qe!m;@&)lrSo9F7Q8{aa)Cn^1r;^8UqVn(w)->?v@lcG; zsqBITv$p^Rj-+LJmKZg!HPnO)(YLMC+%eJvY!i*3cq<;)!V)M9(-ZTtEt>@lr_d*g zV2WL%r}ncjroQQS??fg^50cy={Dh6RO-hbk^ebbhNjRF_0L<=F4tC3+1x`bH9|eo( z$&K4!`)5B1`0TbmG*?Fi1n6QCOzZcP4cj}&e>(P?C(qd!*ktxM90&;Nza29J_Ec6e zG_v`t)9hACzuk9c{E;8uBB)cdq-_$L(NSneLYgKK@w`CL@ar%);;)3-7kUVoVeLj4Tm=wv&!>wAsR>wP;4&rk2v4T}k=L+pEfT(?u5}3U;u9(r6$W8*aRg zGu7#km0pnY)|6Nyii2P->^waZq^-dj&m$}nMg%ubom3KgkGFd#nVdByppqqedBWB+ zY(r(tkX}qEiB;Q7@pzQ^$QtkT3Y!I2GGDaJ+KlZvLW$0q58^CLtYtXhI1>d66^V3z zV`R)uUqfwXCWDj5tmNHi1d3F;SS5-DD?+GH-r;Z~@6fpOV!a<*M(n|plh%U7j6I{8 zJj+56*|;L`Ryxx_Dz%dSG$JM{qYQMds(*%du6551@@lHwUOix`v|iUgnCC1|+is); zUOAVwpsLlxsv8ad{;ezSS9hCoG#OzS@2CQ`V@%tr=t7kVtZB4lj7k}H}MM;FZ zCoEg8v4<-QUYeMiqt@LxH-kt1y#rX;*toV@m+MiVj%k)%&hXh8u$|-}(#7q4=_r%_ zhawi|(_(_9I~Ofh2NT*t?yw2cVBB`Rp{wx#g3uhus%bRr2L$rxR+dig0!m9&;fvzv zu!XT~DvLULi)=foIYf)GUbyc@@6IeA&27E+L|)`b!7RwovNJu1}ApUPj%#u!=;xE*N6_W%eAYO5(Ly% zk=Q0tZ5wJu;xqCdge%8BKf|rMLAcA7!MbXpPnQdC8FmCMh^PA4H0u%6icZJFa^ESS zM@gUgy?gbQZk8`X2|<5{Im*60X&otfAQ11AAU=&=HG2iV53k_vg1sP;FG*ZA)9hQX z*6Oyw)xuzTz(}^u*7mg=!J+8TB)2hylJts#A5ONTm=dDj#Yf8^20|ySkQH0CZ_;}p z|Hiz@5B$S=09?Ng93|@X!Ue-|&Srjbc`MzC9moq|WwNN-*htemPn`7_B9I z(}C!PeRD*8KmN`1?(;(P>*D#VeU5iC$XH_Ej_=E5tA4MJAF|ZYMQ!fe?f&|Oy}-wP zD3w?n0#vBfCWu#9Am1s-rGh-IeiH?514TYK);_t*Ad&N_2qa^`V^C%PwJeFhm>=Q- zfkW=Nk#<-ci$@tv^F>3r}dh}=ZlzNz z_@lw_B`l=q5BNhKB)=Flt!TFrnjM8rY~#yIMbi4bg5x&g7RXH!uU&OdA%{H;cjN*D z_Ptn@iPuUBGz2P6>O50og5USUI%4BB8oq1|8n5C6F>9Nqz&g#INoMy!G*Jg)|u&HkAI}_#)I%=}O~#6FR@dxi_>U&gwtw z_1#0B?}w#%St&!6bmb2d&((-)-}}z3dDmHOmkm6_FK)w0c^f+RemWT=XOruN^A`Mv zkxT{tbiG#JlcF@j@!7Bu!NiBDG}<~D;frK3=$Z%9tQ&?3iSu-}a~ZzT>X$uqoW7x_ zq#$B(Jp7d4B|_I;3SU{CI1bJ)xc{cSpOVzoPP??ULRBn&b!S+G387qB|=6U$* zO8*Qcx@bT)`{giQK1Gs7t`XOgsu30Su#8y_@|izt)+tKeDT@%LV@`NfGqujA*sZ0o zjJZ5@?q^d$br<#bfdKomt%wyaOqcz@z?SCiGERDf!93gOLjnn(N3eDx^=g!a`kfY= z{)Ks~OUTim@pivmoeN6At8KJWte>)K&=#PgBIU-m!nk#kTNrNAOY!+(U*^2`MG_2a1`a^iyDjRn9u;;Z@714oH}5bZUfG~~Mev=mv>|Kb z`oWf~l3+}NgUT32TMvK@QNi8BFcBnU+WASx=4X1>Vwy^l8c0JL4LHb`w;Mr`-{m7b zsZ{&3HZq5*vX{Fo1{$1(d#ph%!&BQIcB|6M?s+hu)@%}GgQvcK(WGWhGY@-0!6`G^ zRcU0~*NU>dcd(|64Mp-@YW)o#!T@c>#O=zQDSK~E)XIi7DsDoRxfQ^ zMgIIjYNar8TG05MLW*L|^K-|hDm#djF046(WC{NHTbHD=afuI#9-w<@Qj#O?*))w8 z6oE(@mTMjcAh~~H#2+UTo--6^t0v8lRL-_60Tb(~=@ey-XgRbaOy-v@B0^eJVED9H zetBeaBH6Gu$6{^Evw{=4CxpYMo@yMU>5_g_PHTp^L(XJC1(i+~V?s?1Pna!c#1zt^ z-!7lpG!K@WqJF$cVSE$hO^cX%V|h7z^O`%ZSA39fP{;SNmrf7s6wCcqtNRQ3pSf6$ zAMa`@@BZ&Y;Bk# z>LUDyuD`p({zu(ktzn~Q>w)<>GSqIjJV}#9g{e7pzQz+O*!mX-lFGQ*mat;94jIYq zo&sfX9M)}ukDt!AzDSjA!j!S|WhE8Key0u(j-2P_Yrb~L#4V0ZbmGkCphYj&g`fMa z+D$BO!$pNjaoU+n?W@Nbkm*&^h*Ktmcr+M|b6gv)jm+mVJKh(bdr3N}l<~#M?hS2< zunA$e>m4(?0tq^-{l=JRn>taAxkDe*>e(auk8#!{XOZ94IiSs* zvT}Ps!A3yg*#8jzN3w#Gy@T^#qnaI8Zx_gnF7~x&;BJ4MB@e;^JxmgW#(G&=m%!bR z!iH=^G`iy5OOBVrc=T(H%k?rJzTi=iok7(cE!8|FIgCmrUw%kdS1$)U*%)sPuYe^a zPkSK6C@Hs#+m7RC^&%7_BKaNRQTp`l>1LPtR12A;9hWE6(V!mQc(&klpUX}pChZm@ zYLc-dHf5D=myFLCEZGlC;I2}qS5+>@3{%A~7tRZFtn1gOGHGh;w)?u8x$=t5484vh z#7%&gEAQa#n#1tw?cuNw#IA@7@&|)o{M#&E>qPbn{dD#5O!qRz~<`3hNn?7hd%{zlnYfJCLOEv44r{Z4he_FXbP%7!nRD{SB) zWnbeasrJxzs(f0V4xh|xc6h;!VAn)Fe3wO9d6+HO23ol?uke+X6Yk({!8J=^%UI2^ zt2T@(tb8}(6I^izhIKGs<;aR!onpVE@^U^4nQEVfgjD*} zh130)$b8W-nTRP8HbQ$EBUZXu%&@Wm9vLofp7WI?IY=%FsjCoq&Q5v1otcMpKQ9h^ zSSA|Z^g!xyx>|FH8ORum2slS6So>9aI-YO8o~Da4GIvEqb206M<8{ORpXVqN^>PI^qQ&KB#Zs(UptDsxxUIz)*qSB z&=1RCYzVWq6kM{UX|=@6F~tA+^qu6+Nm3!b5Q~yJb7qlTP7)`}voBr#8&_;xHlhJX zQe-(Ltw}ok9sTkbGA%hq#V8tbjQ&qAio*i_8&>bNz#X_26!&L`nPYHDzv)L5+0@eHehX?w;Gb?!J-L z6OHb^`LYAuudA**av1C-#sp=Tjlui98?C259GTq>48G6gTu!SgZ#V^+e3tg@{)g}T z2VxUZxKS8)V!0Yebo~qFt#{rh0PCr!<%<~@TX}9hhDro5+YNU7N_nt(d^MFRU$E}| zJ=*by{G2i7=bdTZyJlUk-!MH;l=|Jr)s9fditHDsLK)tlcW^pyn^nzUVQLU%YeJ%R zvw0HxzD@mJ!_aqE_ue7+#(Po`NlqLd4{r|<8dO0~=cl{wtxNOWo*=I-JzHY- zyPfBOO?z!!p0T+>4G!i~A3xh=4b;>1=o8BEYTxx#oiGAD^I#Y5S|7Z#wLv}(l$C)9 z+Z0dmI@L%1_Q$7x&R7LwE9TvhARs}+ARt)484K9B`>$yVxbgyCpLT|pHjGvdrsh{_ z)(&W@=mMQyTr{@R$kYtz&;y;UeMJmk=)gEFzn3I&7BSR1hDasKp=D4SeqBrfWXHdN zJcjanf7GL^xMVph%m?r)i3v$SBY#529wD{5<={ux2fy9iDuPuAir1gH+**I@$-3Wi zp5^g6u`3uY&>x(;L-m4Xh6guw7k+5!nY3%Jap10$zQo{k0Xc1LAJ_x22D5;lDEMD( zoqIf!dmP6n*T_aAiKNzaNV!(hF-~vLh%-nC;+(VN}9c1gq4yoMM z5#^Q$S*6KkHGoyC<|lcwo=1bTK8e04fVe$ zQz(NMbG-D_-RpTUnL|UIx{!qH1`2V^T~cHC!hE8bJG7*COU7=G%G%L;c8I*#;4u3# z8-XX+{P%U(1gf>9YYc&%;$YXz=@~9QMfnw8{*PXdw>!VX)d`($nmLM-+2;4uSkRlI zOp^LQ%bQ%um))@e`s?1iNqo7PwJtYw*W_)@%r5eoFeyQK7p#kcpR8zDUw@y*gzsz8 z*@0o$%A}dTntsE%GZNch^+j4dT^W1CU14*<0rqwQwxPY;Gb2&&*cHnR(l;bO>+v>q z8~&z`2g>3VF+N8ET9Dm`UzuT}gB-a&^vM&Jd_CY@N<6Ge`zGQM=ta_fkreX>skRjC7v z?DZAfF&pXD{?ZmT(7N=Osl2zH{Mq{bi5hKzbMHTg_}B#ApPj@^hd!3hd-UJ4NQ!xN zUR|+DygrMZaty%qh#*SrGzq&$H1!lr)@`!~2Nh@`1Pa81hlE+E{YC}j@BMjH5=!obXqdlu*PxKvEg^#g%!ZYSNW$3 zEsmS2N51MDnR|^hjOMNu?08s4{?z~XUd&5nUVPP!oT9Dm{lg8~$pg1?D3A9BcQd*J zKdGJ2++3K#%Vmt1R-7Cf(PD222lgp8H1jISAIG-3jHOx;&P?HK6+??8Qq2bG1~0g> z5=Y`K4dW=AW34C{sg|*;#QiRKowvKRrYvf-^dzzba`aQu@UnhIawn2}`|?UhC_N70 zEHRkfe<{}Lu2G)bV+gf!hA_;;%h9cFU29DUavs{X;xtDgX|`82$(ci$uwF3&-7l~x zE1iA>kyB~2-Ef?&-&OUpE2!Dy0Bn4j+?piRX;p^R^$x@4m`y}Ndo1pEVsA!L=i-CX?%bH9#%*o#F5I?cmvkEIOzp?Cl^LVGh}@VatLIF3Pt1)o zXOh&@&CX7yq12FWv&&N23`vAQtIG_hBs+Hq`(nZ`Y68_+o15u*{x zZ7t<#kb*zlyhRWF*fl^8%MWPm$aD@x_Y^Z9&2;qa;SgBf1B_%8XX+UzL}31Hq_NiJ zi~4Tj?XN*^ht4$x3wpnP!-ScHz3*c_ar*aLviaP#K!YmzG?bUqYl&!NB!cLmQoGYO zoHqW!Kd?4_&5%=ZbaJy}YKmLe9Rleqb>&P`0AjdqU*TmqhHqtRZE36Xu(YOo&K4~m zg&a184ypT^ATW_Le*K4`_&czh6sdJySHqV*%o)Y`RUp z(9(ejwE@Vv&D)M2KQhn;fjI61lEG+SyvqrKA3DHkJ~{&f2wIjF)4-)1Adf8fLk;|s z#hwC)?=k*DXb%>~M$6fr1ukg?go+}<0ifmQyT{|4|3W4jEdSioqrwB^I0*LkGwu+Y^5BMZ|c4_276= fsCS85vcyEALmNv;U&!7Dd1{ - val clustersPostFiltering = clustersUserIsInterestedIn.clusterIdToScores.filter { - case (clusterId, clusterScores) => - // filter out popular clusters (i.e clusters with > 5M users interested in it) from the user embedding - clusterScores.numUsersInterestedInThisClusterUpperBound.exists( - _ < UserInterestedInReadableStore.MaxClusterSizeForUserInterestedInDataset) - } - numUserInterestedInInput.inc() - (userId, clustersPostFiltering.mapValues(_.favScore.getOrElse(0.0)).toMap) - } - } - - def getPerLanguageTopicEmbeddings( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): TypedPipe[((TopicId, Language), Map[Int, Double])] = { - val numTFGPerLanguageEmbeddings = Stat("num_per_language_tfg_embeddings") - DAL - .readMostRecentSnapshotNoOlderThan(topicEmbeddingDataset, Days(30)) - .withRemoteReadPolicy(ExplicitLocation(Proc3Atla)) - .toTypedPipe - .map { - case KeyVal(k, v) => (k, v) - }.collect { - case ( - SimClustersEmbeddingId( - embedType, - ModelVersion.Model20m145kUpdated, - InternalId.LocaleEntityId(LocaleEntityId(entityId, lang))), - embedding) if (embedType == topicEmbeddingType) => - numTFGPerLanguageEmbeddings.inc() - ((entityId, lang), embedding.embedding.map(_.toTuple).toMap) - }.forceToDisk - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserFeatures.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserFeatures.docx new file mode 100644 index 0000000000000000000000000000000000000000..7cfd4105e425dcf3dbeed1505a74f45756d4c0cb GIT binary patch literal 37203 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%0D9~HLi`~wZ`1sN$!L{7p`%L}IXW7)4 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserFeatures.scala b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserFeatures.scala deleted file mode 100644 index f2af4b62d..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserFeatures.scala +++ /dev/null @@ -1,57 +0,0 @@ -package com.twitter.simclusters_v2.scalding.topic_recommendations.model_based_topic_recommendations - -import com.twitter.ml.api.{Feature, FeatureContext} -import com.twitter.ml.api.constant.SharedFeatures - -object UserFeatures { - val UserIdFeature = SharedFeatures.USER_ID // User-id - - val UserSimClusterFeatures = - new Feature.SparseContinuous( - "user.simclusters.interested_in" - ) // User's interestedIn simcluster embeddding - - val UserCountryFeature = new Feature.Text("user.country") // user's country code - - val UserLanguageFeature = new Feature.Text("user.language") // user's language - - val FollowedTopicIdFeatures = - new Feature.SparseBinary( - "followed_topics.id" - ) // SparseBinary features for the set of followed topics - - val NotInterestedTopicIdFeatures = - new Feature.SparseBinary( - "not_interested_topics.id" - ) // SparseBinary features for the set of not-interested topics - - val FollowedTopicSimClusterAvgFeatures = - new Feature.SparseContinuous( - "followed_topics.simclusters.avg" - ) // Average SimCluster Embedding of the followed topics - - val NotInterestedTopicSimClusterAvgFeatures = - new Feature.SparseContinuous( - "not_interested_topics.simclusters.avg" - ) // Average SimCluster Embedding of the followed topics - - val TargetTopicIdFeatures = new Feature.Discrete("target_topic.id") // target topic-id - - val TargetTopicSimClustersFeature = - new Feature.SparseContinuous( - "target_topic.simclusters" - ) // SimCluster embedding of the target topic - - val FeatureContext = new FeatureContext( - UserIdFeature, - UserSimClusterFeatures, - UserCountryFeature, - UserLanguageFeature, - FollowedTopicIdFeatures, - NotInterestedTopicIdFeatures, - FollowedTopicSimClusterAvgFeatures, - NotInterestedTopicSimClusterAvgFeatures, - TargetTopicIdFeatures, - TargetTopicSimClustersFeature - ) -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicDataRecordAdapter.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicDataRecordAdapter.docx new file mode 100644 index 0000000000000000000000000000000000000000..fa918f4619e21e2df23f2c481a51a8b8ebb222d2 GIT binary patch literal 37369 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 V-mJhJ1j id.toString -> score - }) - dr.setFeatureValue(FollowedTopicIdFeatures, record.followedTopics.map(_.toString)) - dr.setFeatureValue(NotInterestedTopicIdFeatures, record.notInterestedTopics.map(_.toString)) - dr.setFeatureValue(UserCountryFeature, record.userCountry) - dr.setFeatureValue(UserLanguageFeature, record.userLanguage) - - dr.setFeatureValue( - FollowedTopicSimClusterAvgFeatures, - record.followedTopicsSimClusters.map { - case (id, score) => id.toString -> score - }) - - dr.setFeatureValue( - NotInterestedTopicSimClusterAvgFeatures, - record.notInterestedTopicsSimClusters.map { - case (id, score) => id.toString -> score - }) - dr.setFeatureValue(TargetTopicIdFeatures, record.targetTopicId.toLong) - dr.getRecord - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicModellingTrainingDataCollectionJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicModellingTrainingDataCollectionJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..90947c3a1cdcf429b0c4cdb616f3bffa33500bd2 GIT binary patch literal 40834 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≺lOZb! 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicModellingTrainingDataCollectionJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicModellingTrainingDataCollectionJob.scala deleted file mode 100644 index 49a73ca32..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations/UserTopicModellingTrainingDataCollectionJob.scala +++ /dev/null @@ -1,449 +0,0 @@ -package com.twitter.simclusters_v2.scalding.topic_recommendations.model_based_topic_recommendations - -import com.twitter.algebird.Monoid -import com.twitter.bijection.Injection -import com.twitter.dal.client.dataset.SnapshotDALDatasetBase -import com.twitter.ml.api.DataRecord -import com.twitter.ml.api._ -import com.twitter.scalding.TypedPipe -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.dataset.DALWrite._ -import com.twitter.simclusters_v2.common.Country -import com.twitter.simclusters_v2.common.Language -import com.twitter.simclusters_v2.common.TopicId -import com.twitter.simclusters_v2.common.UserId -import com.twitter.wtf.scalding.jobs.common.AdhocExecutionApp -import com.twitter.wtf.scalding.jobs.common.ScheduledExecutionApp -import java.util.TimeZone -import scala.util.Random -import com.twitter.ml.api.util.FDsl._ -import com.twitter.scalding.source.DailySuffixCsv -import com.twitter.scalding.source.DailySuffixTypedTsv -import com.twitter.simclusters_v2.hdfs_sources.FavTfgTopicEmbeddingsScalaDataset -import com.twitter.simclusters_v2.scalding.embedding.common.ExternalDataSources -import com.twitter.simclusters_v2.thriftscala.EmbeddingType - -/** - This job is to obtain the training and test data for the model-based approach to topic recommendations: - Approach: - 1. Read FavTfgTopicEmbeddingsScalaDataset - to get topic simclusters embeddings for the followed and not interested in topics - 2. Read SimclustersV2InterestedIn20M145KUpdatedScalaDataset - to get user's interestedIn Simclusters embeddings - 3. Read UsersourceScalaDataset - to get user's countryCode and language - Use the datasets above to get the features for the model and generate DataRecords. - */ - -/* -To run: -scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/topic_recommendations/model_based_topic_recommendations:training_data_for_topic_recommendations-adhoc \ ---user cassowary \ ---submitter atla-aor-08-sr1 \ ---main-class com.twitter.simclusters_v2.scalding.topic_recommendations.model_based_topic_recommendations.UserTopicFeatureHydrationAdhocApp \ ---submitter-memory 128192.megabyte --hadoop-properties "mapreduce.map.memory.mb=8192 mapreduce.map.java.opts='-Xmx7618M' mapreduce.reduce.memory.mb=8192 mapreduce.reduce.java.opts='-Xmx7618M'" \ --- \ ---date 2020-10-14 \ ---outputDir "/user/cassowary/adhoc/your_ldap/user_topic_features_popular_clusters_filtered_oct_16" - */ - -object UserTopicFeatureHydrationAdhocApp extends AdhocExecutionApp { - - import UserTopicModellingJobUtils._ - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - - val outputDir = args("outputDir") - val numDataRecordsTraining = Stat("num_data_records_training") - val numDataRecordsTesting = Stat("num_data_records_testing") - val testingRatio = args.double("testingRatio", 0.2) - - val (trainingDataSamples, testDataSamples, sortedVocab) = UserTopicModellingJobUtils.run( - ExternalDataSources.topicFollowGraphSource, - ExternalDataSources.notInterestedTopicsSource, - ExternalDataSources.userSource, - DataSources.getUserInterestedInData, - DataSources.getPerLanguageTopicEmbeddings, - testingRatio - ) - - val userTopicAdapter = new UserTopicDataRecordAdapter() - Execution - .zip( - convertTypedPipeToDataSetPipe( - trainingDataSamples.map { train => - numDataRecordsTraining.inc() - train - }, - userTopicAdapter) - .writeExecution( - DailySuffixFeatureSink(outputDir + "/training") - ), - convertTypedPipeToDataSetPipe( - testDataSamples.map { test => - numDataRecordsTesting.inc() - test - }, - userTopicAdapter) - .writeExecution( - DailySuffixFeatureSink(outputDir + "/testing") - ), - sortedVocab - .map { topicsWithSortedIndexes => - topicsWithSortedIndexes.map(_._1) - }.flatten.writeExecution(DailySuffixTypedTsv(outputDir + "/vocab")) - ).unit - } -} - -/** -capesospy-v2 update --build_locally \ - --start_cron training_data_for_topic_recommendations \ - src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ - -object UserTopicFeatureHydrationScheduledApp extends ScheduledExecutionApp { - - import UserTopicModellingJobUtils._ - - private val outputPath: String = - "/user/cassowary/processed/user_topic_modelling" - - override def batchIncrement: Duration = Days(1) - - override def firstTime: RichDate = RichDate("2020-10-13") - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val testingRatio = args.double("testingRatio", 0.2) - - val (trainingDataSamples, testDataSamples, sortedVocab) = UserTopicModellingJobUtils.run( - ExternalDataSources.topicFollowGraphSource, - ExternalDataSources.notInterestedTopicsSource, - ExternalDataSources.userSource, - DataSources.getUserInterestedInData, - DataSources.getPerLanguageTopicEmbeddings, - testingRatio - ) - - val userTopicAdapter = new UserTopicDataRecordAdapter() - Execution - .zip( - getTrainTestExec( - trainingDataSamples, - testDataSamples, - TopicRecommendationsTrainDatarecordsJavaDataset, - TopicRecommendationsTestDatarecordsJavaDataset, - outputPath, - userTopicAdapter - ), - sortedVocab - .map { topicsWithSortedIndexes => - topicsWithSortedIndexes.map(_._1) - }.flatten.writeExecution(DailySuffixTypedTsv(outputPath + "/vocab")) - ).unit - - } -} - -object UserTopicModellingJobUtils { - - /** - * The main function that produces training and the test data - * - * @param topicFollowGraphSource user with followed topics from TFG - * @param notInterestedTopicsSource user with not interested in topics - * @param userSource user with country and language - * @param userInterestedInData user with interestedin simcluster embeddings - * @param topicPerLanguageEmbeddings topics with simcluster embeddings - * - * @return Tuple (trainingDataSamples, testingDataSamples, sortedTopicsVocab) - */ - def run( - topicFollowGraphSource: TypedPipe[(TopicId, UserId)], - notInterestedTopicsSource: TypedPipe[(TopicId, UserId)], - userSource: TypedPipe[(UserId, (Country, Language))], - userInterestedInData: TypedPipe[(UserId, Map[Int, Double])], - topicPerLanguageEmbeddings: TypedPipe[((TopicId, Language), Map[Int, Double])], - testingRatio: Double - )( - implicit uniqueID: UniqueID, - dateRange: DateRange, - timeZone: TimeZone - ): ( - TypedPipe[UserTopicTrainingSample], - TypedPipe[UserTopicTrainingSample], - TypedPipe[Seq[(TopicId, Int)]] - ) = { - val allFollowableTopics: TypedPipe[TopicId] = - topicFollowGraphSource.map(_._1).distinct - - val allFollowableTopicsWithMappedIds: TypedPipe[(TopicId, Int)] = - allFollowableTopics.groupAll.mapGroup { - case (_, topicIter) => - topicIter.zipWithIndex.map { - case (topicId, mappedId) => - (topicId, mappedId) - } - }.values - - val sortedVocab: TypedPipe[Seq[(TopicId, Int)]] = - allFollowableTopicsWithMappedIds.map(Seq(_)).map(_.sortBy(_._2)) - - val dataTrainingSamples: TypedPipe[UserTopicTrainingSample] = getDataSamplesFromTrainingData( - topicFollowGraphSource, - notInterestedTopicsSource, - userSource, - userInterestedInData, - topicPerLanguageEmbeddings, - allFollowableTopicsWithMappedIds - ) - val (trainSplit, testSplit) = splitByUser(dataTrainingSamples, testingRatio) - - (trainSplit, testSplit, sortedVocab) - } - - /** - * Split the data samples based on user_id into train and test data. This ensures that the same - * user's data records are not part of both train and test data. - */ - def splitByUser( - dataTrainingSamples: TypedPipe[UserTopicTrainingSample], - testingRatio: Double - ): (TypedPipe[UserTopicTrainingSample], TypedPipe[UserTopicTrainingSample]) = { - val (trainSplit, testSplit) = dataTrainingSamples - .map { currSmple => (currSmple.userId, currSmple) }.groupBy(_._1).partition(_ => - Random.nextDouble() > testingRatio) - val trainingData = trainSplit.values.map(_._2) - val testingData = testSplit.values.map(_._2) - (trainingData, testingData) - } - - /** - * To get the target topic for each training data sample for a user from the TopicFollowGraph - * - * @param topicFollowSource - * @return (UserId, Set(allFollowedTopicsExceptTargetTopic), targetTopic) - */ - def getTargetTopicsFromTFG( - topicFollowSource: TypedPipe[(TopicId, UserId)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[(UserId, Set[TopicId], TopicId)] = { - val numTrainingSamples = Stat("num_positive_training_samples") - - val userFollowedTopics = topicFollowSource.swap - .map { - case (userId, topicId) => (userId, Set(topicId)) - }.sumByKey.toTypedPipe - - userFollowedTopics.flatMap { - case (userID, followedTopicsSet) => - followedTopicsSet.map { currFollowedTopic => - numTrainingSamples.inc() - val remainingTopics = followedTopicsSet - currFollowedTopic - (userID, remainingTopics, currFollowedTopic) - } - } - } - - /** - * Helper function that does the intermediate join operation between a user's followed, - * not-interested, interestedIn, country and language typedpipe sources, read from different sources. - */ - - def getFeaturesIntermediateJoin( - topicFollowGraphSource: TypedPipe[(TopicId, UserId)], - notInterestedTopicsSource: TypedPipe[(TopicId, UserId)], - allFollowableTopicsWithMappedIds: TypedPipe[(TopicId, Int)], - userCountryAndLanguage: TypedPipe[(UserId, (Country, Language))], - userInterestedInData: TypedPipe[(UserId, Map[Int, Double])] - )( - implicit uniqueID: UniqueID - ): TypedPipe[ - ( - UserId, - Set[TopicId], - Set[TopicId], - TopicId, - Int, - Country, - Language, - Map[Int, Double] - ) - ] = { - implicit val l2b: Long => Array[Byte] = Injection.long2BigEndian - - val userWithFollowedTargetTopics: TypedPipe[ - (UserId, Set[TopicId], TopicId) - ] = getTargetTopicsFromTFG(topicFollowGraphSource) - - val userWithNotInterestedTopics: TypedPipe[(UserId, Set[TopicId])] = - notInterestedTopicsSource.swap.mapValues(Set(_)).sumByKey.toTypedPipe - - userWithFollowedTargetTopics - .groupBy(_._1).leftJoin(userWithNotInterestedTopics).values.map { - case ((userId, followedTopics, targetFollowedTopic), notInterestedOpt) => - ( - userId, - followedTopics, - targetFollowedTopic, - notInterestedOpt.getOrElse(Set.empty[TopicId])) - } - .map { - case (userId, followedTopics, targetFollowedTopic, notInterestedTopics) => - (targetFollowedTopic, (userId, followedTopics, notInterestedTopics)) - }.join(allFollowableTopicsWithMappedIds).map { - case (targetTopic, ((userId, followedTopics, notInterestedTopics), targetTopicIdx)) => - (userId, followedTopics, notInterestedTopics, targetTopic, targetTopicIdx) - } - .groupBy(_._1).sketch(4000) - .join(userCountryAndLanguage - .groupBy(_._1)).sketch(4000).leftJoin(userInterestedInData) - .values.map { - case ( - ( - (userId, followedTopics, notInterestedTopics, targetTopic, targetTopicIdx), - (_, (userCountry, userLanguage)) - ), - userIntOpt) => - ( - userId, - followedTopics, - notInterestedTopics, - targetTopic, - targetTopicIdx, - userCountry, - userLanguage, - userIntOpt.getOrElse(Map.empty)) - } - } - - /** - * Helper function that aggregates user's followed topics, not-interested topics, - * country, language with join operations and generates the UserTopicTrainingSample - * for each DataRecord - */ - def getDataSamplesFromTrainingData( - topicFollowGraphSource: TypedPipe[(TopicId, UserId)], - notInterestedTopicsSource: TypedPipe[(TopicId, UserId)], - userCountryAndLanguage: TypedPipe[(UserId, (Country, Language))], - userInterestedInData: TypedPipe[(UserId, Map[Int, Double])], - topicPerLanguageEmbeddings: TypedPipe[((TopicId, Language), Map[Int, Double])], - allFollowableTopicsWithMappedIds: TypedPipe[(TopicId, Int)] - )( - implicit uniqueID: UniqueID - ): TypedPipe[UserTopicTrainingSample] = { - - implicit val l2b: Long => Array[Byte] = Injection.long2BigEndian - - val allTopicEmbeddingsMap: ValuePipe[Map[(TopicId, Language), Map[Int, Double]]] = - topicPerLanguageEmbeddings.map { - case (topicWithLang, embedding) => - Map(topicWithLang -> embedding) - }.sum - - val userWithFollowedAndNotInterestedTopics = getFeaturesIntermediateJoin( - topicFollowGraphSource, - notInterestedTopicsSource, - allFollowableTopicsWithMappedIds, - userCountryAndLanguage, - userInterestedInData) - - userWithFollowedAndNotInterestedTopics.flatMapWithValue(allTopicEmbeddingsMap) { - case ( - ( - userId, - followedTopics, - notInterestedTopics, - targetTopic, - targetTopicIdx, - userCountry, - userLanguage, - userInt), - Some(allTopicEmbeddings)) => - val averageFollowedTopicsSimClusters = Monoid - .sum(followedTopics.toSeq.map { topicId => - allTopicEmbeddings.getOrElse((topicId, userLanguage), Map.empty) - }).mapValues(v => - v / followedTopics.size) // average simcluster embedding of the followed topics - - val averageNotInterestedTopicsSimClusters = Monoid - .sum(notInterestedTopics.toSeq.map { topicId => - allTopicEmbeddings.getOrElse((topicId, userLanguage), Map.empty) - }).mapValues(v => - v / notInterestedTopics.size) // average simcluster embedding of the notInterested topics - - Some( - UserTopicTrainingSample( - userId, - followedTopics, - notInterestedTopics, - userCountry, - userLanguage, - targetTopicIdx, - userInt, - averageFollowedTopicsSimClusters, - averageNotInterestedTopicsSimClusters - ) - ) - - case _ => - None - } - } - - /** - * Write train and test data - */ - def getTrainTestExec( - trainingData: TypedPipe[UserTopicTrainingSample], - testingData: TypedPipe[UserTopicTrainingSample], - trainDataset: SnapshotDALDatasetBase[DataRecord], - testDataset: SnapshotDALDatasetBase[DataRecord], - outputPath: String, - adapter: IRecordOneToOneAdapter[UserTopicTrainingSample] - )( - implicit dateRange: DateRange - ): Execution[Unit] = { - val trainExec = - convertTypedPipeToDataSetPipe(trainingData, adapter) - .writeDALSnapshotExecution( - trainDataset, - D.Daily, - D.Suffix(s"$outputPath/training"), - D.EBLzo(), - dateRange.end) - val testExec = - convertTypedPipeToDataSetPipe(testingData, adapter) - .writeDALSnapshotExecution( - testDataset, - D.Daily, - D.Suffix(s"$outputPath/testing"), - D.EBLzo(), - dateRange.end) - Execution.zip(trainExec, testExec).unit - } - - /** - * To get the datasetPipe containing datarecords hydrated by datarecordAdapter - * @param userTrainingSamples - * @param adapter - * @return DataSetPipe - */ - def convertTypedPipeToDataSetPipe( - userTrainingSamples: TypedPipe[UserTopicTrainingSample], - adapter: IRecordOneToOneAdapter[UserTopicTrainingSample] - ): DataSetPipe = { - userTrainingSamples.toDataSetPipe(adapter) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/BUILD b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/BUILD deleted file mode 100644 index 0a1532588..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/BUILD +++ /dev/null @@ -1,234 +0,0 @@ -scala_library( - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - ":tweet_similarity_test_datarecords_120min-java", - ":tweet_similarity_test_datarecords_30min-java", - ":tweet_similarity_train_datarecords_120min-java", - ":tweet_similarity_train_datarecords_30min-java", - ":tweet_similarity_unhydrated_pairs_120min-scala", - ":tweet_similarity_unhydrated_pairs_30min-scala", - "3rdparty/jvm/com/twitter/storehaus:algebra", - "3rdparty/jvm/com/twitter/storehaus:core", - "dataproducts/insights/common/common", - "snowflake:id", - "src/java/com/twitter/ml/api/constant", - "src/scala/com/twitter/ads/dataservice_account/snapshot/jobs:db_snapshots_promoted_tweets-scala", - "src/scala/com/twitter/ml/api:api-base", - "src/scala/com/twitter/ml/featurestore/catalog/features/recommendations:aggregate", - "src/scala/com/twitter/ml/featurestore/lib/embedding", - "src/scala/com/twitter/scalding_internal/dalv2", - "src/scala/com/twitter/scalding_internal/dalv2/dataset", - "src/scala/com/twitter/scalding_internal/job", - "src/scala/com/twitter/scalding_internal/job/analytics_batch", - "src/scala/com/twitter/scalding_internal/source", - "src/scala/com/twitter/scalding_internal/source/lzo_scrooge", - "src/scala/com/twitter/simclusters_v2/common", - "src/scala/com/twitter/simclusters_v2/scalding", - "src/scala/com/twitter/simclusters_v2/tweet_similarity", - "src/scala/com/twitter/wtf/scalding/jobs/client_event_processing:user_interaction-scala", - "twadoop_config/configuration/log_categories/group/timeline:timeline_service_favorites-scala", - "tweetsource/common:unhydrated_flat-scala", - ], -) - -hadoop_binary( - name = "training_data_collection-adhoc", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.TrainingDataCollectionAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -hadoop_binary( - name = "training_data_collection_30min", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.TrainingDataCollection30MinScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -hadoop_binary( - name = "training_data_collection_120min", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.TrainingDataCollection120MinScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -hadoop_binary( - name = "unhydrated_pair_collection-adhoc", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.UnhydratedPairsCollectionAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -hadoop_binary( - name = "unhydrated_pair_collection_30min", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.UnhydratedPairsCollection30MinScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -hadoop_binary( - name = "unhydrated_pair_collection_120min", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.UnhydratedPairsCollection120MinScheduledApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -hadoop_binary( - name = "model_eval-adhoc", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.ModelEvalAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -hadoop_binary( - name = "dataset_topk_analysis-adhoc", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.DatasetTopKAnalysisAdhocApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -hadoop_binary( - name = "dataset_topk_analysis_dump-adhoc", - main = "com.twitter.simclusters_v2.scalding.tweet_similarity.DatasetTopKAnalysisDumpApp", - platform = "java8", - runtime_platform = "java8", - tags = [ - "bazel-compatible", - "bazel-compatible:migrated", - "bazel-only", - ], - dependencies = [ - ":tweet_similarity", - ], -) - -create_datarecord_datasets( - base_name = "tweet_similarity_train_datarecords_30min", - platform = "java8", - role = "cassowary", - segment_type = "partitioned", - tags = ["bazel-compatible"], -) - -create_datarecord_datasets( - base_name = "tweet_similarity_test_datarecords_30min", - platform = "java8", - role = "cassowary", - segment_type = "partitioned", - tags = ["bazel-compatible"], -) - -create_datarecord_datasets( - base_name = "tweet_similarity_train_datarecords_120min", - platform = "java8", - role = "cassowary", - segment_type = "partitioned", - tags = ["bazel-compatible"], -) - -create_datarecord_datasets( - base_name = "tweet_similarity_test_datarecords_120min", - platform = "java8", - role = "cassowary", - segment_type = "partitioned", - tags = ["bazel-compatible"], -) - -create_datasets( - base_name = "tweet_similarity_unhydrated_pairs_30min", - description = "30min coocurrence training pairs before feature hydration", - java_schema = "com.twitter.simclusters_v2.thriftjava.LabelledTweetPairs", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.LabelledTweetPairs", - segment_type = "partitioned", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) - -create_datasets( - base_name = "tweet_similarity_unhydrated_pairs_120min", - description = "120min coocurrence training pairs before feature hydration", - java_schema = "com.twitter.simclusters_v2.thriftjava.LabelledTweetPairs", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.thriftscala.LabelledTweetPairs", - segment_type = "partitioned", - tags = ["bazel-compatible"], - java_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-java", - ], - scala_dependencies = [ - "src/thrift/com/twitter/simclusters_v2:simclusters_v2-thrift-scala", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..6fadea4aa956ddb43f7a9e8b9f9c3a5ca70417d6 GIT binary patch literal 37781 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 PDt3@9Fg*}yKfe7RO#R>; literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/DatasetTopKAnalysisJob.scala b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/DatasetTopKAnalysisJob.scala deleted file mode 100644 index b277dd02e..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/DatasetTopKAnalysisJob.scala +++ /dev/null @@ -1,255 +0,0 @@ -package com.twitter.simclusters_v2.scalding.tweet_similarity - -import com.twitter.ml.api.DailySuffixFeatureSource -import com.twitter.ml.api.DataSetPipe -import com.twitter.ml.api.RichDataRecord -import com.twitter.scalding.typed.TypedPipe -import com.twitter.scalding.Execution -import com.twitter.scalding._ -import com.twitter.scalding_internal.job.TwitterExecutionApp -import com.twitter.simclusters_v2.common.TweetId -import com.twitter.simclusters_v2.scalding.common.Util -import com.twitter.simclusters_v2.tweet_similarity.TweetSimilarityFeatures -import java.util.TimeZone - -object DatasetTopKAnalysisJob { - - case class TweetPairWithStats( - queryTweet: TweetId, - candidateTweet: TweetId, - cooccurrenceCount: Double, - coengagementCount: Double, - coengagementRate: Double) - - def getCoocurrenceTweetPairs(dataset: DataSetPipe): TypedPipe[TweetPairWithStats] = { - val featureContext = dataset.featureContext - - dataset.records - .map { record => - val richDataRecord = new RichDataRecord(record, featureContext) - val coengaged = - if (richDataRecord - .getFeatureValue(TweetSimilarityFeatures.Label) - .booleanValue) 1 - else 0 - ( - ( - richDataRecord.getFeatureValue(TweetSimilarityFeatures.QueryTweetId).toLong, - richDataRecord.getFeatureValue(TweetSimilarityFeatures.CandidateTweetId).toLong), - (1, coengaged) - ) - }.sumByKey - .map { - case ((queryTweet, candidateTweet), (coocurrenceCount, coengagementCount)) => - TweetPairWithStats( - queryTweet, - candidateTweet, - coocurrenceCount.toDouble, - coengagementCount.toDouble, - coengagementCount.toDouble / coocurrenceCount.toDouble - ) - } - } - - def getQueryTweetToCounts(dataset: DataSetPipe): TypedPipe[(Long, (Int, Int))] = { - val featureContext = dataset.featureContext - dataset.records.map { record => - val richDataRecord = new RichDataRecord(record, featureContext) - val coengaged = - if (richDataRecord - .getFeatureValue(TweetSimilarityFeatures.Label) - .booleanValue) 1 - else 0 - ( - richDataRecord.getFeatureValue(TweetSimilarityFeatures.QueryTweetId).toLong, - (1, coengaged) - ) - }.sumByKey - } - - def printGlobalTopKTweetPairsBy( - tweetPairs: TypedPipe[TweetPairWithStats], - k: Int, - orderByFnt: TweetPairWithStats => Double - ): Execution[Unit] = { - val topKTweetPairs = - tweetPairs.groupAll - .sortedReverseTake(k)(Ordering.by(orderByFnt)) - .values - topKTweetPairs.toIterableExecution.map { s => - println(s.map(Util.prettyJsonMapper.writeValueAsString).mkString("\n")) - } - } - - def printTweetTopKTweetsBy( - groupedBy: Grouped[TweetId, TweetPairWithStats], - k: Int, - orderByFnt: TweetPairWithStats => Double, - descending: Boolean = true - ): Execution[Unit] = { - if (descending) { - println("TweetTopKTweets (descending order)") - groupedBy - .sortedReverseTake(k)(Ordering.by(orderByFnt)) - .toIterableExecution - .map { record => println(record.toString()) } - } else { - println("TweetTopKTweets (ascending order)") - groupedBy - .sortedTake(k)(Ordering.by(orderByFnt)) - .toIterableExecution - .map { record => println(record.toString()) } - } - } - - def printTweetPairStatsExec( - tweetPairs: TypedPipe[TweetPairWithStats], - k: Int - ): Execution[Unit] = { - Execution - .sequence( - Seq( - Util.printSummaryOfNumericColumn( - tweetPairs.map(_.cooccurrenceCount), - Some("Tweet-pair Coocurrence Count")), - printGlobalTopKTweetPairsBy( - tweetPairs, - k, - { tweetPairs => tweetPairs.cooccurrenceCount }), - Util.printSummaryOfNumericColumn( - tweetPairs.map(_.coengagementCount), - Some("Tweet-pair Coengagement Count")), - printGlobalTopKTweetPairsBy( - tweetPairs, - k, - { tweetPairs => tweetPairs.coengagementCount }), - Util.printSummaryOfNumericColumn( - tweetPairs.map(_.coengagementRate), - Some("Tweet-pair Coengagement Rate")), - printGlobalTopKTweetPairsBy(tweetPairs, k, { tweetPairs => tweetPairs.coengagementRate }) - ) - ).unit - } - - def printPerQueryStatsExec(dataset: DataSetPipe, k: Int): Execution[Unit] = { - val queryToCounts = getQueryTweetToCounts(dataset) - - val topKQueryTweetsByOccurrence = - queryToCounts.groupAll - .sortedReverseTake(k)(Ordering.by { case (_, (cooccurrenceCount, _)) => cooccurrenceCount }) - .values - - val topKQueryTweetsByEngagement = - queryToCounts.groupAll - .sortedReverseTake(k)(Ordering.by { case (_, (_, coengagementCount)) => coengagementCount }) - .values - - Execution - .sequence( - Seq( - Util.printSummaryOfNumericColumn( - queryToCounts.map(_._2._1), - Some("Per-query Total Cooccurrence Count")), - topKQueryTweetsByOccurrence.toIterableExecution.map { s => - println(s.map(Util.prettyJsonMapper.writeValueAsString).mkString("\n")) - }, - Util.printSummaryOfNumericColumn( - queryToCounts.map(_._2._2), - Some("Per-query Total Coengagement Count")), - topKQueryTweetsByEngagement.toIterableExecution.map { s => - println(s.map(Util.prettyJsonMapper.writeValueAsString).mkString("\n")) - } - ) - ).unit - } - - def runTweetTopKTweetsOutputExecs( - tweetPairs: TypedPipe[TweetPairWithStats], - k: Int, - outputPath: String - ): Execution[Unit] = { - tweetPairs - .groupBy(_.queryTweet) - .sortedReverseTake(k)(Ordering.by(_.coengagementRate)) - .writeExecution(TypedTsv(outputPath + "/topK_by_coengagement_rate")) - } -} - -/** To run: - scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity:dataset_topk_analysis-adhoc \ - --user cassowary \ - --submitter hadoopnest2.atla.twitter.com \ - --main-class com.twitter.simclusters_v2.scalding.tweet_similarity.DatasetTopKAnalysisAdhocApp -- \ - --date 2020-02-19 \ - --dataset_path /user/cassowary/adhoc/training_data/2020-02-19_class_balanced/train \ - --output_path /user/cassowary/adhoc/training_data/2020-02-19_class_balanced/train/analysis - * */ -object DatasetTopKAnalysisAdhocApp extends TwitterExecutionApp { - implicit val timeZone: TimeZone = DateOps.UTC - implicit val dateParser: DateParser = DateParser.default - - def job: Execution[Unit] = Execution.withId { implicit uniqueId => - Execution.withArgs { args: Args => - implicit val dateRange: DateRange = DateRange.parse(args.list("date")) - val dataset: DataSetPipe = DailySuffixFeatureSource(args("dataset_path")).read - val outputPath: String = args("output_path") - val topK: Int = args.int("top_K", default = 10) - - val tweetPairs = DatasetTopKAnalysisJob.getCoocurrenceTweetPairs(dataset) - - Execution - .zip( - DatasetTopKAnalysisJob.printTweetPairStatsExec(tweetPairs, topK), - DatasetTopKAnalysisJob.runTweetTopKTweetsOutputExecs(tweetPairs, topK, outputPath), - DatasetTopKAnalysisJob.printPerQueryStatsExec(dataset, topK) - ).unit - } - } -} - -/** To run: - scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity:dataset_topk_analysis-dump \ - --user cassowary \ - --submitter hadoopnest2.atla.twitter.com \ - --main-class com.twitter.simclusters_v2.scalding.tweet_similarity.DatasetTopKAnalysisDumpApp -- \ - --date 2020-02-01 \ - --dataset_path /user/cassowary/adhoc/training_data/2020-02-01/train \ - --tweets 1223105606757695490 \ - --top_K 100 - * */ -object DatasetTopKAnalysisDumpApp extends TwitterExecutionApp { - implicit val timeZone: TimeZone = DateOps.UTC - implicit val dateParser: DateParser = DateParser.default - - def job: Execution[Unit] = Execution.withId { implicit uniqueId => - Execution.withArgs { args: Args => - implicit val dateRange: DateRange = DateRange.parse(args.list("date")) - val dataset: DataSetPipe = DailySuffixFeatureSource(args("dataset_path")).read - val tweets = args.list("tweets").map(_.toLong).toSet - val topK: Int = args.int("top_K", default = 100) - - val tweetPairs = DatasetTopKAnalysisJob.getCoocurrenceTweetPairs(dataset) - - if (tweets.isEmpty) { - Execution.from(println("Empty query tweets")) - } else { - val filteredGroupby = tweetPairs - .filter { record => tweets.contains(record.queryTweet) } - .groupBy(_.queryTweet) - - Execution - .zip( - //Top K - DatasetTopKAnalysisJob - .printTweetTopKTweetsBy(filteredGroupby, topK, pair => pair.coengagementCount), - //Bottom K - DatasetTopKAnalysisJob.printTweetTopKTweetsBy( - filteredGroupby, - topK, - pair => pair.coengagementCount, - descending = false) - ).unit - } - } - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionJob.docx b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..0a00c7c7f2785c93c79432b7c0978cd53e2b2d9c GIT binary patch literal 38834 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 - ( - FeaturedTweet( - labelledPair.queryFeaturedTweet.tweetId, - labelledPair.queryFeaturedTweet.timestamp, - None, - None), - FeaturedTweet( - labelledPair.candidateFeaturedTweet.tweetId, - labelledPair.candidateFeaturedTweet.timestamp, - None, - None), - labelledPair.label - ) - } - - TweetPairFeatureHydrationUtil.getDataSetPipeWithFeatures( - labelledPairs, - persistentEmbeddingRecords, - tweetAuthorPairs, - useAuthorFeatures) - } - - def getTrainTestExec( - dataSetPipe: DataSetPipe, - splitBy: Option[String], - trainDataset: TimePartitionedDALDataset[DataRecord], - testDataset: TimePartitionedDALDataset[DataRecord], - outputPath: String - )( - implicit timeZone: TimeZone, - dateRange: DateRange - ): Execution[Unit] = { - splitBy match { - case Some("time") => - TrainingDataCollectionUtil.getTrainTestByTimeExec( - dataSetPipe, - dateRange.end - Hours(testLookbackHours), - trainDataset, - testDataset, - outputPath)(dateRange) - case Some("query_tweet") => - TrainingDataCollectionUtil.getTrainTestByQueryExec( - dataSetPipe, - testRatio, - trainDataset, - testDataset, - outputPath)(dateRange) - // Default at no splitting - case _ => - TrainingDataCollectionUtil.getTrainTestByQueryExec( - dataSetPipe, - 0.0, - trainDataset, - testDataset, - outputPath)(dateRange) - } - } -} - -/** To run: -scalding remote run --target src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity:training_data_collection-adhoc \ ---user cassowary \ ---submitter hadoopnest2.atla.twitter.com \ ---hadoop-properties "mapreduce.reduce.java.opts=-Xmx8000m mapreduce.reduce.memory.mb=8000 scalding.with.reducers.set.explicitly=true mapreduce.job.reduces=2000 mapreduce.task.timeout=0" \ ---main-class com.twitter.simclusters_v2.scalding.tweet_similarity.TrainingDataCollectionAdhocApp -- \ ---date 2020-04-15 \ ---input_path /user/cassowary/adhoc/unhydrated_pairs/2020-04-15_30min/ \ ---output_path /user/cassowary/adhoc/training_data/2020-04-15_30min_2xneg_qtweet_split \ ---split_by query_tweet - * */ -object TrainingDataCollectionAdhocApp extends TwitterExecutionApp { - implicit val timeZone: TimeZone = DateOps.UTC - implicit val dateParser: DateParser = DateParser.default - - override def job: Execution[Unit] = - Execution.withId { implicit uniqueId => - Execution.withArgs { args: Args => - implicit val dateRange: DateRange = DateRange.parse(args.list("date")) - val useAuthorFeatures: Boolean = args.boolean("use_author_features") - val inputPath: String = args("input_path") - val outputPath: String = args("output_path") - val splitBy: Option[String] = args.optional("split_by") - - val labelledPairs = TypedPipe - .from(TweetSimilarityUnhydratedPairsSource(inputPath, dateRange)) - - val dataSetPipe = TrainingDataCollectionJob.getHydratedDataPipe( - dateRange, - useAuthorFeatures, - labelledPairs - ) - TrainingDataCollectionJob.getTrainTestExec( - dataSetPipe, - splitBy, - TweetSimilarityTrainDatarecords30MinJavaDataset, - TweetSimilarityTestDatarecords30MinJavaDataset, - outputPath - ) - } - } -} - -/** - capesospy-v2 update --build_locally --start_cron \ - training_data_collection_30min src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object TrainingDataCollection30MinScheduledApp extends ScheduledExecutionApp { - - private val outputPath: String = - "/user/cassowary/processed/tweet_similarity/training_data_30min" - - override def batchIncrement: Duration = Hours(24) - - override def firstTime: RichDate = RichDate("2020-03-26") - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val useAuthorFeatures: Boolean = args.boolean("use_author_features") - val splitBy: Option[String] = args.optional("split_by") - - val unhydratedPairs = DAL - .read(TweetSimilarityUnhydratedPairs30MinScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(Proc3Atla)) - .toTypedPipe - - val dataSetPipe = TrainingDataCollectionJob.getHydratedDataPipe( - dateRange, - useAuthorFeatures, - unhydratedPairs - ) - TrainingDataCollectionJob.getTrainTestExec( - dataSetPipe, - splitBy, - TweetSimilarityTrainDatarecords30MinJavaDataset, - TweetSimilarityTestDatarecords30MinJavaDataset, - outputPath) - } -} - -/** -capesospy-v2 update --build_locally --start_cron \ - training_data_collection_120min src/scala/com/twitter/simclusters_v2/capesos_config/atla_proc3.yaml - */ -object TrainingDataCollection120MinScheduledApp extends ScheduledExecutionApp { - - private val outputPath: String = - "/user/cassowary/processed/tweet_similarity/training_data_120min" - - override def batchIncrement: Duration = Hours(24) - - override def firstTime: RichDate = RichDate("2020-03-26") - - override def runOnDateRange( - args: Args - )( - implicit dateRange: DateRange, - timeZone: TimeZone, - uniqueID: UniqueID - ): Execution[Unit] = { - val useAuthorFeatures: Boolean = args.boolean("use_author_features") - val splitBy: Option[String] = args.optional("split_by") - - val unhydratedPairs = DAL - .read(TweetSimilarityUnhydratedPairs120MinScalaDataset, dateRange) - .withRemoteReadPolicy(ExplicitLocation(Proc3Atla)) - .toTypedPipe - - val dataSetPipe = TrainingDataCollectionJob.getHydratedDataPipe( - dateRange, - useAuthorFeatures, - unhydratedPairs - ) - - TrainingDataCollectionJob.getTrainTestExec( - dataSetPipe, - splitBy, - TweetSimilarityTrainDatarecords120MinJavaDataset, - TweetSimilarityTestDatarecords120MinJavaDataset, - outputPath) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionUtil.docx b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..4b3ae7e0e15818d862457ca0f8610a7c7cff6c5c GIT binary patch literal 38086 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionUtil.scala b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionUtil.scala deleted file mode 100644 index 4fdc90ec4..000000000 --- a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TrainingDataCollectionUtil.scala +++ /dev/null @@ -1,138 +0,0 @@ -package com.twitter.simclusters_v2.scalding.tweet_similarity - -import com.twitter.dal.client.dataset.TimePartitionedDALDataset -import com.twitter.ml.api.util.FDsl._ -import com.twitter.ml.api.{DataRecord, DataSetPipe} -import com.twitter.scalding._ -import com.twitter.scalding_internal.dalv2.DALWrite.D -import com.twitter.scalding_internal.dalv2.dataset.DALWrite._ -import com.twitter.simclusters_v2.tweet_similarity.TweetSimilarityFeatures -import com.twitter.util.Time -import java.util.Random - -/** - * Collect training data for supervised tweet similarity - */ -object TrainingDataCollectionUtil { - - /** - * Split dataset into train and test based on time - * @param dataset: input dataset - * @param testStartDate: samples before/after testStartDate will be used for training/testing - * @return (train dataset, test dataset) - */ - def splitRecordsByTime( - dataset: DataSetPipe, - testStartDate: RichDate - ): (DataSetPipe, DataSetPipe) = { - val (leftRecords, rightRecords) = dataset.records.partition { record => - // record will be in training dataset when both tweets were engaged before testStartDate - (record.getFeatureValue( - TweetSimilarityFeatures.QueryTweetTimestamp) < testStartDate.timestamp) & - (record.getFeatureValue( - TweetSimilarityFeatures.CandidateTweetTimestamp) < testStartDate.timestamp) - } - ( - DataSetPipe(leftRecords, dataset.featureContext), - DataSetPipe(rightRecords, dataset.featureContext)) - } - - /** - * Split dataset into train and test randomly based on query - * @param dataset: input dataset - * @param testRatio: ratio for test - * @return (train dataset, test dataset) - */ - def splitRecordsByQuery(dataset: DataSetPipe, testRatio: Double): (DataSetPipe, DataSetPipe) = { - val queryToRand = dataset.records - .map { record => record.getFeatureValue(TweetSimilarityFeatures.QueryTweetId) } - .distinct - .map { queryTweet => queryTweet -> new Random(Time.now.inMilliseconds).nextDouble() } - .forceToDisk - - val (trainRecords, testRecords) = dataset.records - .groupBy { record => record.getFeatureValue(TweetSimilarityFeatures.QueryTweetId) } - .join(queryToRand) - .values - .partition { - case (_, random) => random > testRatio - } - - ( - DataSetPipe(trainRecords.map { case (record, _) => record }, dataset.featureContext), - DataSetPipe(testRecords.map { case (record, _) => record }, dataset.featureContext)) - } - - /** - * Get the write exec for train and test datasets - * @param dataset: input dataset - * @param testStartDate: samples before/after testStartDate will be used for training/testing - * @param outputPath: output path for the train/test datasets - * @return execution of the the writing exec - */ - def getTrainTestByTimeExec( - dataset: DataSetPipe, - testStartDate: RichDate, - trainDataset: TimePartitionedDALDataset[DataRecord], - testDataset: TimePartitionedDALDataset[DataRecord], - outputPath: String - )( - implicit dateRange: DateRange - ): Execution[Unit] = { - val (trainDataSet, testDataSet) = splitRecordsByTime(dataset, testStartDate) - val trainExecution: Execution[Unit] = trainDataSet - .writeDALExecution(trainDataset, D.Daily, D.Suffix(s"$outputPath/train"), D.EBLzo()) - val trainStatsExecution: Execution[Unit] = - getStatsExec(trainDataSet, s"$outputPath/train_stats") - val testExecution: Execution[Unit] = testDataSet - .writeDALExecution(testDataset, D.Daily, D.Suffix(s"$outputPath/test"), D.EBLzo()) - val testStatsExecution: Execution[Unit] = getStatsExec(testDataSet, s"$outputPath/test_stats") - Execution.zip(trainExecution, trainStatsExecution, testExecution, testStatsExecution).unit - } - - /** - * Get the write exec for train and test datasets - * @param dataset: input dataset - * @param testRatio: samples before/after testStartDate will be used for training/testing - * @param outputPath: output path for the train/test datasets - * @return execution of the the writing exec - */ - def getTrainTestByQueryExec( - dataset: DataSetPipe, - testRatio: Double, - trainDataset: TimePartitionedDALDataset[DataRecord], - testDataset: TimePartitionedDALDataset[DataRecord], - outputPath: String - )( - implicit dateRange: DateRange - ): Execution[Unit] = { - val (trainDataSet, testDataSet) = splitRecordsByQuery(dataset, testRatio) - val trainExecution: Execution[Unit] = trainDataSet - .writeDALExecution(trainDataset, D.Daily, D.Suffix(s"$outputPath/train"), D.EBLzo()) - val trainStatsExecution: Execution[Unit] = - getStatsExec(trainDataSet, s"$outputPath/train_stats") - val testExecution: Execution[Unit] = testDataSet - .writeDALExecution(testDataset, D.Daily, D.Suffix(s"$outputPath/test"), D.EBLzo()) - val testStatsExecution: Execution[Unit] = getStatsExec(testDataSet, s"$outputPath/test_stats") - Execution.zip(trainExecution, trainStatsExecution, testExecution, testStatsExecution).unit - } - - /** - * Get the exec for reporting dataset stats - * @param dataset: dataset of interest - * @param outputPath: path for outputting the stats - * @return exec - */ - def getStatsExec(dataset: DataSetPipe, outputPath: String): Execution[Unit] = { - dataset.records - .map { rec => - if (TweetSimilarityFeatures.isCoengaged(rec)) - "total_positive_records" -> 1L - else - "total_negative_records" -> 1L - } - .sumByKey - .shard(1) - .writeExecution(TypedTsv(outputPath)) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TweetPairFeatureHydrationUtil.docx b/src/scala/com/twitter/simclusters_v2/scalding/tweet_similarity/TweetPairFeatureHydrationUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..f485ce6904bfa3893081cec7a96e7a5096d095df GIT binary patch literal 39071 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

XgqERuSE$v?Lp|vTs*5Lq_W< zQ|X$|p(pog!p-%M($n}R%g-{YC8fv`mlIwbnN;-^+mc`+*3Yjlp&?#-N>;06Tp119_CJXwkFR+zAP>*Os~3TgUF}3k2}Tgh*rZ z2?HFwkw#A!Yu+v;EH)8$CBm={GP|979Q*>hNLk3iM~}$dhD&fOnblvrJ$ra-5oaO0 zlD346s2O_?S`*}u`slt~-s~`YTx8E`K=vI&UPHe&hxQJFr3uV_0%aId+HRYRg$2iX zZ`ru|DWjwZ-IU_zsK=JW#Bjaq(Y}h+?tOb)x^yS9BlGb&j*uAXXieMmf`+uy$!IjW zZ`}yRXVvy&faHW20(1LteNCpn=9ke`OsYom{#6J&d3tU4-4%jGp0?))CXDG|vA>)c zoVHz&$^{ZbVX~u*Uw;cL%u2~h6`$)MPXt_5$Jo-&hL!*V#Fc`T4|<4~YWz_V{?+uN z%eNJJul2&-E5u`6mibPWpSoO*4m(>)VjB3(7@gpgWt1EEhIMub1Kp>bwK2fw85wA6 zr)VC>4s_SM;=pWV&dUcP{3;>aHRRsNtQT_I;Pv8m^t#xR4I~ zE5=oH@u2X|RusfWrY+Y3po9C$aZdsK(caNb>E(FKz28>w*Z)5|07v9q?$-@x&Ngl= zWN?44efT!+H8|yLR|m3{Tx8h-?iGas-zx=yoM-)UCT#{X`bKz{7UW-0SBSi(&B}81 z{B=<}1Kprd>mwu^nfiBUJW*YBX?2yrk=O!`gv!;lV&!JfL@95U<}Z^5tK}$}-}bGk z{kgI20*zh$?Kuvm9B4AXmN+|-iS`D4hn3&k+<)JCbb83OWP5Ri?ra3KrQU)4Xs}{Q zZk@^DM~uyEja@mts;s8;ToKu%&tGmvu@51&mo%Xr@&Bft`(%K> zah`vWfW;N5>9QCUhY?(CNw-qIFZ*GcrokcA%jV7yxZcG;yh%z3vM+pZVllzJRz`L*9B+MfeNW;)ks$q zIImWwKo4zA>8`p_+umE4i4)&zP(}8b*sbO~t;W1gnW=_zsD^b=5DaaNLD)n*1}W8d z-L2L>tu{i!;e-D1xC|1N;-7z3tzIHE<7tD@KDS$K#%v?t(*FCNor1aJVo~geo4bvI zrwwrLl+Hpy#SjazsU z6<^(L)+X^3hnQ~28gQ+)%u0zG#s+n5?mL?Wwrl?!Tt0O*UzkN7Cu8UOgqT*RW_wCUAUjmcI8^(! zdXpIdDZ1O-!tT2j1v>ET3Op3RJ50+uAiDI;^3JxjLK!w8AkaEo{#;)&NlyL3Q+t(V zhMw5RE5`SpvT#F;$E{Vrw7S9!UQ??D zS$&^7)k;Kij6v%NLGb&iwg-xny>re0r*270*(8@1%wlfTVio-LT@Ih2AX1SQOD7n; z-5ST?#7ra9j4Zp7GJ`iDhp)t2m7&^HKb1?`EN(of5G5wH)f{-K( zv!~Mz1Q;eFnurYD-za2tpV8||D?VF=^<_1D(SaQKQo%$fKD&n@xuid37zBet20~cp z#CWO}2GTc+fWZ2|5h2EHitRd1dq|le6GEqzl=3-52gNd_F`w)#H5~-TTEN(c1F@j)k1Vt`xctakDwAz{CN+%9t zXbBaP=XoZj%mY+gQEGo>`BfA`I1ejhfhM#b?7%Jr2E_SAq=sL7=OzTE;rWvGd# z@5t`SDaZI_v!hn&7qmv*B9C$u|2EM6;lKqDQ3x2+)qGgT8Jtaejmr#mJTesae3!L( zI+oj7I~Y_~Q@Fcen2Yp*w0_1v9x(Wr&VqWaBmjb8KoF+;P*fEMd9uV4Bde=C&kke0 zP>X{=Sm*ObJLAv`Z<&XIkhBsXbcjKaZ=v+Vkbi1*)o zWW^wisa%`<3^$Q562?#8UECnFGm6O%g4nrKC>c_ z)aPmYGhjad=K%u{lKmdNb$WQb1=fAjHeP{Q0gt}R*N&4bGJkpq=!Rqj6oR}bAH%qJ z`aSF3S8`RKx3&~Wr+%ZjFsKRqL^#BW%*1f?3Ejk(N8t&g0g$6$P&$F1gZ_hlx&5fb z@AOD7qr-!#Gwaj31EF^*>t2nD&U_qQO&mRK9Nk^g6QRL!FlBc;*9QK4#6Jzv$?-AK zSk#k7qb^>f7HP*?$-)=#lhqj8Q`?_N-bVF~8b+fq`{h^ZbWX)Yql>f0tB;0q^&j_L zk7jCL`zyKUD~X{S`@4#qi=le;$Frt1YE6}lD>WOa4>u=uf_#xbdQd;~ePlU$#+vG; zIC^Js#J0NJ*$`@C;}GNf7aT?wMmH{|H-bjDJ4T5+j0hws;q@PBynXIGQT2U)4929b z-Vzie+Upk?$T^hL2#U zW2K}YVdI&ctb4QIx!cxmD_dA!Kl66^Oigc1DY(B?d%Y=VxmN+k15!W1)oyp`2d(5j z*3ln5SbX~8{x;(N=Fgw2D0?Q?mW-dYSW;^WFrU<9qp9DeUrW4wHe(z(4_(;~TVWQW z#4|9}(K634u#C!gSRjFs)I6q<+tza{fvU|NJpWtR%68AnPv8|yr+wWZwfm5{0%W>C z^f=V@UL}WAyNy%pi>GKV63%d`Zm*=0*^|JV&S)^6HxyE9syK0;+6+@mtnW*%-}{DA`FrOZwI4d^tinzW}x~LF8l;b2l6)6tqYtQ$0V&toA7TNutFyC#aFC+nK;QqEY zX$kim5ZK>l8hA_3O;fI5FrKCM4GA-l?T}CHVjL4RrRo2o=M3o(UcdjJdK`Rl<;YtQ z&(A4zP9E;eZVIKhQXlqq58!#91{)A*6*aBDs(k;lBQg+3@j%jk<0U4jEk^@701r~3 zU9AjWjT&}L;{CF}>`m*J6xeyFnME!whn?!m;VavDl zg+Ht4gKqi!B7G5FucX&Xp@rqWeR*=RKMxegvPpl}<*k`VBU!%bTMh^YO`fmn_Pv;;-e5AW4gjQkZM`3a((`TSiY>0CRG%T_l`}B%eN-5N#mOv2&e_{Mf z#F?-d#~%?uR{w7i(L>^ma^3oW3t-KIokO7SA~IhuWIIEdz6hrML+cBZFQK0rH3dO8 zIpW+DffF#t_|zv{LYe^zDH(3wlV)m;Xl(NYT&)buF%Qt%cZx;2JfEM(Z&72 z`|M}JM%#?^xkf&fo@sO4y>aX3Ja4_1R<(~p=l$E;+S3%geqlagpj*us`U zw~|f+C~Ip&w^En+U3kPY*|!?0Mw6=g5qP$FUBU1Qg(Yt+ps|ywb%FCSEVm1|I(qFcMR0=?(%OP@8cT{ zY-Ilr5^e?BS-!&$&q^sO`rrPt0zK`I6^|NvC^@z&a# z!ee6cW({w6#k$7`q4kpw$d~H4H-=2>*^DV`UfHN7JG*v>&ff2vKQRoZ*4{X`>j7NS zN9qZdd^vam4xrZ70HZgL9o!n(KwD+gz9AG7JG|2`Dj)c4Gd5DuL>g~6E+JBDV{zwz zpP^Rzd z1IqRJPEc%c==?b`)jAlLIfVYhRoP-Rzp4?u9?BR|CYso(#zY#DRNFZkOadqdRfldl zELpTZK;z5jDpY*7KZ=?_Dv1m2TeJ#Q#^6-DU1v#`S$cZwOCB{#hcmE3K#dWhgLKer zc<6?BlQ8#4mW8WG%K_9k1)hR)I@R`i$MW{M`Ia2 zm@H0X*{I2~7+0hs@eSdH$QmjvP1r|rP9uX4;UU2^Q!G0!a=FpiWQqb!6I0Pt&pO9Z zX;x3sE2Loe8hWbrU;-g`cO($MsmttFv-=dk~rd74$Qi#YFVtA6Z#&GR*o2b!haFs6&OJXQ5z zdVC1$uo_e2Hss=MIjCE(;uG>yvy{u{;eiUKYOZe#_Z!}$8p%nnu-b(k;?bl}7YS?b z65g-oA=OTW34%z!4l)qteX|m6HgZ~L-@$3?gljVLq`0KD(J`7>yl`O|3H~H|O==jt ztZHo3Vu-*DEKZElOXWVUuYg1(sTn4stTzW;+89d6ltS4k#-9pL2Hj$x1nG%74N+Wq zpS)ak_$yAwKS8w z2uYP;51f!j-d_-n{&c{Zz^y_nJNlC%CT&A~Ae}jLAuSK~pG>XyLY+B41yWCKN+!8T zm6b+SReJcJs70{JMiaaw$nf$5JR_@(Nny|Bf)5=VKR-F*f04k|NH^z@lz?wVSNdd|#$4qx0QY z=~8R*5J8(*62P&5cD|Hmw04eCK7gD%AhvKoEIm6AiT=dB8oXDuuBzC+E~%>U7>ffk;FIaN@5 z)z7lWR1h4+jxYZ0yYw1WRCd~1JyZ}r4EM7D9Spaq@Ok}D#9gSJ_*x7?@xlb|DZ6C* zi*X@Yx-G{2{DmQe{l(XS?*abd10YtgN39ga=N=HFVG^v)s{wmB%&>;v7kK^+L8BM+wl7;=o`_ zf9^O9kRbei@`FT+`Q*_rLrGxI#>BjPefJH_uKww-nDOJA`BMi-u+V4#kNGj+LW7d_ zegn)TZj7F8wnGh1`H#{NIG|DrHK0;}k|21TBVRn@mNcvdhNA42j`0IF1%WhAYCiV{ zYiJO75s(tE`#eJ|DZhCC0XUX4&*S1bNwQQ=c8u}{X z0skP?vwcOVo>UpgWL>o`FcXwiM{%9hct`Ocsd0|t8L0`5Lx?c4JXugAyRHQhk@09T z=);&=a6zMJqZJeVgQjQ}Q@cG^|&hhJ75@aTkK_UN-GU%s&03E7RFVHo}WNw z8~fyYJPz^6k2>(4xU|tO4+&WfKgPP-9HDgWhk2@~-|l_PNgVmCqmR`6a|0O}QWy`( zo?n<)D;ZKg{s?9HDyjm?B`TC7c8exEGjkMJ*4MfDLDfe z@z8QC5v$-d!CzozMnnj1J2%4wK~};9(^z{K_mN|SUw2i8aBrZ8h*5m=I0AkLg5HGE zAZ^CIkrGyx3G5;7ScC~R$=4hO&h?qRY$FN9R?LU7SfKj$Wi?xTCwuq%9f-&y@d|na zy}%mr8yMw%WA(;Xz$EpjY5QiF5HOI?-+=_eQ@-Coo9c-I-y6z5MBIVrdtFE~rTLkM zdGTqUG)%}Zm-O8bqCEpjgvHn*m{J-f@;CS%a$4h;Y3)DU>Of1wgh<{E`6N+&L5gRI zMd1e>N0{`6oI8R4*P!~cnD~^B5)1hM7USaa`}4^^@18CGErt`CXgQ!)_Gv^k`ZxG* z+&yH*#7f|85ZMS{k5_>TS@MA_AbpqR9Nxd;aqVFI@j`x-W)C?J;|D3hP(KTSBha(| zA%)!k_aMyQjtRf!SKdHVXAD0jxgQ7feW*kH?HGpb;vX59>=>0$RbrtIk41>amB^z^mEV3Gz%Q` z4c2Zkc(0#9EHO`RqfGeDXV9FEz7Th<;A*=I?@7DP@3MPNhN7{NM2^m5(g zt~Vd2lX7h~c3(>Zng#~Ps?AWsndoniUa5{LxcjSC z7HbbuH%ZwL5LeDK8;4wVAffGY;IOG{IsR&{8H9k+HU9@|{s`aY__}IE^rAYNefNI``vfTEJ)aw} z3R$oXUYJrc-X2xiH~^Q>>?7q1g;91NmOiVinuQH0tR0T8RwTO| z>+Eq602i73JN(l0yfNNCQV@L?rj#L({sWZVZ@CvMrvbq;{pOspxjU2z^=b$d`MIyO7>A%Onji#Rd`lNXFPO~(7aHwj#^Pq#cR^RL%KXQx{xmXB(0yH^biiTJY# zV+p6AhCUp%gn{5ssxoj7Jnly+D2yuoGvp{FGk;a>-HxHWg_`IyN{H&x!90pYYjVz)lFRh+sma_^CdmK5U zzP(4PG5{|5!@0UMc-broJ^qmrcsR<>x|iq09Zn1*6dYR__ID<$%5r3ueN@t=q5iB4 zkeqWrz}jxDp$UULJaGP@c38wx6#VVoyG`P-2yse;H$G609}@bH6^9h}UicoPPAxSNIXEJ5W_ zCTI-4eeFz|g$d#WyOJ0uLW7RZqsQ~-{tDh(BHRd<#PhqXWqxA+w&HD{^HtkDgy678ra;ph3Gf?ui=;ifO^uS?&4<(HckC~Jy?1C8qx`I3gatX;N}PZc zEG7uXOA~co6xF|9pCv`)IZ^)H!c0htZ&6ub36s2u`-sn=EOl!xXgEkJP{J6q+7*pk z5X8Cy<%Rs~wPc2Ipa#wxy%&_zU;t`pN5d7junHT??xNI2IS*H!< zpeeQ)RTv;4$)=565H9?k27TOW7uWgVp2`J(jCQO%K{-y9@L(~vz;UQMe^nSzs4al7 z28ML^7Xgo*#)Bj>Sb={LpgM%&#l#(V;>h*_lTehWC=Iq4i(kl`7b7VpDV3EJ0k{P{ z>^rI?$b>fMYl#4)jPw%3{hp+!6BatuI<=i;<1MfcnjA^TtcdS&00*Ky>=-s<^WbaGZF%W$2Nd;hZZ>fi6kijHOA}IyE;3!k&`P|4PhE2%KweBjm#t z8B_$)b00oi>dfn3<z-tvv`cP)IKsGhQwpAgseqJUABZ|p&?pSJ23&nd>o)DMFQ|? z*)R?^fulVnoBGI*mZ0!w1!W4c7k z91zJA1$r=H#zMc;F=i+x1`_MJB<2 z2o>>XxvM^Ql27S@d^3-?yH9@nMJBaNW1Q-4_&?O)2K-SchVsAF*&+bd@xXNZy`5qH z2h8-~*(Kh!^lu=0EL`ZjwJ3%5f0JTkxV`mF%zpj&uO@PZLXrl(;2Ygwl8c$E ztChXQU;C_@H8!1p@L=?8mm0S1n!~m@$?wyiQq*lJP}u?>5&+Wh4aDxAI{_hIahrTS zVm!q>?eYTi_UU_XkIT@gB6AkvmpsH|V?j9PfH@FxT6#LJySbH8+gBqFmXxpv7Ft6= zK0n-V9q*U>f}Dno*6E<0C{%}s-fhhq#fjmxt$pF`ac~d;Hs!qazstGN0rxJ|BgF?1 zS~^OSmquuiB5W5MV^4L_L^=Ob(X7QfE;>d?N}mJch)q~4*dHvzK^%vxclH#T1pZT%5I60TZp1*upw-u{VYtZpRBClFtGb7e&3 zeifmQ+4Nc;j70BXMmn-IFaRO!JpCy*fD=1~wL(M9ru?UPaN<*CKh@|;Bz*(h`?ZAZ zxq9FZSI%?^VLibQ@_r7$zyU=9#JH;y94vF7wzn5tcum6T(k%vCbi&1%DHJ#N?(LvV zX0And8)5>5V6bWAfpvyk_bK0iYU>M8vk-3vqPtB!N!M%=f`&amAWJeo*P;B{9kh*k z2WR|zAaLIa9tVIk>8SS!rRg>TuQ|xg#hku?yL%fTmYcL^-RAqCPNpdQQEpbP<60YT zeY&qcz;ne=UWc6I)m|RCp$og=D5b<$F~h%k58U-D*eu;^jzBCuxG9M}^xNht40>o4 zUu@j_H!|+F&=*$=zOPlmn93Dq-u1A@Vv^jt_KX7#DV-52wdOkUc1X5oo;POqFb7ZzD!zOJ{;rt(+$&y}OTC~lJ* z3cnQWiVem$p|~#1x6mLbzig8eo6(;Tfv~R@UmMp?V+vA(7g`RF!|Pk4OlREzGC93o zqH6}T8a&VQ$x?p5U5~V-hx;DxZ2{{PzIWiv&&P)ajFHNLk@CB8rp1rI)Dmk%%he;a zFtk*XXjlXdQsy^YtH>44TA#|Cz7rnArr&d~<;phbKetz&=p3qo09#PC0RR591O2N7 z)mJlP)&Ft9N6+?K53(SD%zE_<93-gjn?|vUCa~cUb|#6mAUhIJvNi)ZLrp*bV%O%v z>Aa^RJtZyQ^2M8G+L6isv)`T#N@FkYV$qcNXXvKM2n`HBOf*);1zghQdXatwF_*_(g@C$chqE6keL8XBVc=$lp= zo*3By_K8MN{AG_T5h+y0>4~}6mW=|&6X;`QFy*e%6NecXGvD;vcVg3|dug5!0is5` zCKabHhUKx7BwX!o09N-2Cx=zgJeLuJkCJ8dyH3=LG`baZV$`|unY2EbX1ybt(^pSveROlYH@P^1FTx6@G%H(Ho=7R+hd zG*a5LE2-eUy{gU{&r8*z5F$huJn2~5jaT3mkoux;Dv^BWk zdxS;8h~dR)l1bz2@^x<~Q?SJZRI)}dP1t#ct*eb0F-Qm}vFVyCAC0mc+TfpD;;`aL z=Zlxwn6p1csL;FcL!5?5vuz*}ySJ{mCw+fDcTj;l zG4liUYp~LthaVR(Zl2wUwKe5>+yZTb=Oq!Ep0Mn>CLV6A_-PUvPCB>aJd7UscaC6X zW8=CSU2cbcdS+SnIm4%?yXy;s$mchArK8LSAIjKVj|&M_?%Z_P9n9$Sxx=Q&gK=B& zMs6kph{CfVD`wHK9}p;?T3I`J3aG5qMb3+(!{*1bsV(amEVJ!pW|1t%df|Q;zq_!0 zG`IB{O!ejp+RGz^zs}rJp~-|-P2jV5@W*Xh-KGe&=b%rbp+>Ue+s%Kq&rA{_Ya0P}?(L)l0m1zDDd}oyW@pCy*OB$F z4re+F4(nVvJ-;+jIt~_}*WDsIBraAjmrD@QTE$|U#C2_Hlu1r0dJr$2`uvPG>jvR2 zS_bQ?h2bye-!kk8TaZo+aA?;eXq26gh82ELLXVO?33&G!s9Z0dhZ2FlggME-J?b2) zcp#E&mmockUN(CLz7H?s?SMTaQ7lSbHq-9etkiyPgR6zX_JEOYo2l(M>QkDxQ&mNLkfgWSSByFZr@<=KzYHs&JX>uyg3K64ugPE>~;wT;_^-u zPu#O(%|Or$yWTvQohVJ8fvm~nmHedod#bcc4revA$Zq_N(33?tbN~#(nUwm62JdU5 zEUT0Zc|3+VLxKG4!=O+$lL(5e*3#*!JItwX^rgUO*Ns40Q)~PGrIaP*ENJ)<30v-1`zB;j=;V zcHanuwT)wzd%ivGucyxRS4uJKe|kP#+8?bYdeejGg?)2Edp~+%e)oB%{eAxQ)gi~b z8DuQ6Z`=3zqSc^R&ksdr=)5-f?PhQ7+(Gc;E|glL4G}6-W&^}4ERg>M=itU^TXCCQyCxyCeW7$?o>|-?M^dwlDV1~lY=$EBqrNLQM%xMjf_q+UswAr=1zLg?$90}5F~RS9VI8sY zS`DI`gC;8kQP$=Ia4wk2-68VhFa<+jDoD*eGta)R3TgD-nRd#p+a|vOTH;r>1>gGk zHba_>j2cQ`)GlCAt{>bVke<$Kq; zIp;Q`>$;9_B>H7IDQ{iR!A~z^Ki{Z;l6Gy@M1$W<6 z_fnF&+UXV-m#K>-FK?~NmBVoqrDJ9H(>xD;UmBdEMi&jpXFngLE2c=(Dm3C*Q8%KY z9h9*sKt2g%%{WJCI%g4~cFc;5YNyuu6n|+cEMqB8o&D8RP~AoIV<5nxY%^k+8_RVs zFtDY0tBi}ma4^p<`hZZ%=K-vpShE^6p?{0MuoR!44rMO8qS9d4-{AoC zy<6h0Yf)i`ieCMBw{wmYl9dggFA0Azl{RFpU)|erR}zj%aZ;PW=;{M-AS!s87$<_{ z%sS!qY=5P9Eu^U>X@E4O(Sn1BzFiB6y_Aperc&?C*vcKK%U|rU8ftMF?Xm^63{P!+ z*ssVgx#z*aui7Tc2T%PF)uv%dvj}@c#Vs@5QnPRH<97h8byV)UfN^nFtt{`hee`yt zEpH!|E2-xDB!upG&Z*Nmq38-R+9~c$ll=;a9>c)+n|lF%3S z@YN!p#7yy{7^wSIQDN&g&J!Uc6-Vo6S1)c^NB;UrX00@GQqcI6LWXL?`)k{_Dm#db zKCC%}bP?g{TbHz|Nr?}tKA?MOQkpaF$t;Zz6p>gKmU|8cAiZ~NED$Fao--6^ry(nV zT+Y5E1rzJ3?Hpx+WHq!cLhhF>CPr3NVDz|9esO4eEZwj=%W7lCyNnyUD~!vonQ9WF z?V5gAPG^p^O~GtP4V6wFV@gATK$IuLpO^1|vZFMnx z{hB+jU%a1hSjYddo6Z319Lw`o`}sHYKXb7hKfaYx;1?bgFnj&ew%)|e#nr)1%g&bB z%GJ#7udlu8sCu{o77UPIJ`&>z<0X7y7z-*W)TsGzH8RgXpc1+gii|(D!g_byzdDW{ z*(tn(5p(bXS|wy$9O1k!B>}|0?v8}-P=e2cMWC~4P%Kp~q_o}I+#yL7!LjMa$1(Qx zSg{r%G=jh^9Lo_;s>5L4#vE~)0?;dl10roTQ@p5}Iq;;IkE|$r*L*byag

_Z*@i9xge;{OI7mVhZKds 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 Q7*#YNGhle^rvCW#KieIYQUCw| literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FTRJob.scala b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FTRJob.scala deleted file mode 100644 index a6027d3e4..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FTRJob.scala +++ /dev/null @@ -1,242 +0,0 @@ -package com.twitter.simclusters_v2.scio.bq_generation -package ftr_tweet - -import com.google.api.services.bigquery.model.TimePartitioning -import com.spotify.scio.ScioContext -import com.spotify.scio.coders.Coder -import com.twitter.beam.io.dal.DAL -import com.twitter.beam.io.fs.multiformat.PathLayout -import com.twitter.beam.job.DateRangeOptions -import com.twitter.conversions.DurationOps.richDurationFromInt -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.scio_internal.coders.ThriftStructLazyBinaryScroogeCoder -import com.twitter.scio_internal.job.ScioBeamJob -import com.twitter.scrooge.ThriftStruct -import com.twitter.simclusters_v2.scio.bq_generation.common.BQTableDetails -import com.twitter.simclusters_v2.scio.bq_generation.common.BQGenerationUtil.getInterestedIn2020SQL -import com.twitter.simclusters_v2.thriftscala.CandidateTweets -import com.twitter.simclusters_v2.thriftscala.CandidateTweetsList -import com.twitter.tcdc.bqblaster.beam.syntax._ -import com.twitter.tcdc.bqblaster.core.avro.TypedProjection -import com.twitter.tcdc.bqblaster.core.transform.RootTransform -import java.time.Instant -import org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO -import com.twitter.simclusters_v2.thriftscala.CandidateTweet -import org.apache.avro.generic.GenericData -import scala.collection.mutable.ListBuffer -import org.apache.beam.sdk.io.gcp.bigquery.SchemaAndRecord -import org.apache.beam.sdk.transforms.SerializableFunction -import org.apache.avro.generic.GenericRecord -import com.twitter.wtf.beam.bq_embedding_export.BQQueryUtils - -trait FTRJob extends ScioBeamJob[DateRangeOptions] { - // Configs to set for different type of embeddings and jobs - val isAdhoc: Boolean - val outputTable: BQTableDetails - val keyValDatasetOutputPath: String - val tweetRecommentationsSnapshotDataset: KeyValDALDataset[KeyVal[Long, CandidateTweetsList]] - val scoreKey: String - val scoreColumn: String - - // Base configs - val projectId = "twttr-recos-ml-prod" - val environment: DAL.Env = if (isAdhoc) DAL.Environment.Dev else DAL.Environment.Prod - - override implicit def scroogeCoder[T <: ThriftStruct: Manifest]: Coder[T] = - ThriftStructLazyBinaryScroogeCoder.scroogeCoder - - override def configurePipeline(sc: ScioContext, opts: DateRangeOptions): Unit = { - // The time when the job is scheduled - val queryTimestamp = opts.interval.getEnd - - // Parse tweetId candidates column - def parseTweetIdColumn( - genericRecord: GenericRecord, - columnName: String - ): List[CandidateTweet] = { - val tweetIds: GenericData.Array[GenericRecord] = - genericRecord.get(columnName).asInstanceOf[GenericData.Array[GenericRecord]] - val results: ListBuffer[CandidateTweet] = new ListBuffer[CandidateTweet]() - tweetIds.forEach((sc: GenericRecord) => { - results += CandidateTweet( - tweetId = sc.get("tweetId").toString.toLong, - score = Some(sc.get("cosineSimilarityScore").toString.toDouble) - ) - }) - results.toList - } - - //Function that parses the GenericRecord results we read from BQ - val parseUserToTweetRecommendationsFunc = - new SerializableFunction[SchemaAndRecord, UserToTweetRecommendations] { - override def apply(record: SchemaAndRecord): UserToTweetRecommendations = { - val genericRecord: GenericRecord = record.getRecord - UserToTweetRecommendations( - userId = genericRecord.get("userId").toString.toLong, - tweetCandidates = parseTweetIdColumn(genericRecord, "tweets"), - ) - } - } - - val tweetEmbeddingTemplateVariables = - Map( - "START_TIME" -> queryTimestamp.minusDays(1).toString(), - "END_TIME" -> queryTimestamp.toString(), - "TWEET_SAMPLE_RATE" -> Config.TweetSampleRate.toString, - "ENG_SAMPLE_RATE" -> Config.EngSampleRate.toString, - "MIN_TWEET_FAVS" -> Config.MinTweetFavs.toString, - "MIN_TWEET_IMPS" -> Config.MinTweetImps.toString, - "MAX_TWEET_FTR" -> Config.MaxTweetFTR.toString, - "MAX_USER_LOG_N_IMPS" -> Config.MaxUserLogNImps.toString, - "MAX_USER_LOG_N_FAVS" -> Config.MaxUserLogNFavs.toString, - "MAX_USER_FTR" -> Config.MaxUserFTR.toString, - "TWEET_EMBEDDING_LENGTH" -> Config.SimClustersTweetEmbeddingsGenerationEmbeddingLength.toString, - "HALFLIFE" -> Config.SimClustersTweetEmbeddingsGenerationHalfLife.toString, - "SCORE_COLUMN" -> scoreColumn, - "SCORE_KEY" -> scoreKey, - ) - - val tweetEmbeddingSql = BQQueryUtils.getBQQueryFromSqlFile( - "/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.sql", - tweetEmbeddingTemplateVariables) - val consumerEmbeddingSql = getInterestedIn2020SQL(queryTimestamp, 14) - - val tweetRecommendationsTemplateVariables = - Map( - "CONSUMER_EMBEDDINGS_SQL" -> consumerEmbeddingSql, - "TWEET_EMBEDDINGS_SQL" -> tweetEmbeddingSql, - "TOP_N_CLUSTER_PER_SOURCE_EMBEDDING" -> Config.SimClustersANNTopNClustersPerSourceEmbedding.toString, - "TOP_M_TWEETS_PER_CLUSTER" -> Config.SimClustersANNTopMTweetsPerCluster.toString, - "TOP_K_TWEETS_PER_USER_REQUEST" -> Config.SimClustersANNTopKTweetsPerUserRequest.toString, - ) - val tweetRecommendationsSql = BQQueryUtils.getBQQueryFromSqlFile( - "/com/twitter/simclusters_v2/scio/bq_generation/sql/tweets_ann.sql", - tweetRecommendationsTemplateVariables) - - val tweetRecommendations = sc.customInput( - s"SimClusters FTR BQ ANN", - BigQueryIO - .read(parseUserToTweetRecommendationsFunc) - .fromQuery(tweetRecommendationsSql) - .usingStandardSql() - ) - - //Setup BQ writer - val ingestionTime = opts.getDate().value.getEnd.toDate - val bqFieldsTransform = RootTransform - .Builder() - .withPrependedFields("ingestionTime" -> TypedProjection.fromConstant(ingestionTime)) - val timePartitioning = new TimePartitioning() - .setType("HOUR").setField("ingestionTime").setExpirationMs(3.days.inMilliseconds) - val bqWriter = BigQueryIO - .write[CandidateTweets] - .to(outputTable.toString) - .withExtendedErrorInfo() - .withTimePartitioning(timePartitioning) - .withLoadJobProjectId(projectId) - .withThriftSupport(bqFieldsTransform.build(), AvroConverter.Legacy) - .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) - .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND) - - // Save Tweet ANN results to BQ - tweetRecommendations - .map { userToTweetRecommendations => - { - CandidateTweets( - targetUserId = userToTweetRecommendations.userId, - recommendedTweets = userToTweetRecommendations.tweetCandidates) - } - } - .saveAsCustomOutput(s"WriteToBQTable - $outputTable", bqWriter) - - val RootMHPath: String = Config.FTRRootMHPath - val AdhocRootPath = Config.FTRAdhocpath - - // Save Tweet ANN results as KeyValSnapshotDataset - tweetRecommendations - .map { userToTweetRecommendations => - KeyVal( - userToTweetRecommendations.userId, - CandidateTweetsList(userToTweetRecommendations.tweetCandidates)) - }.saveAsCustomOutput( - name = "WriteFtrTweetRecommendationsToKeyValDataset", - DAL.writeVersionedKeyVal( - tweetRecommentationsSnapshotDataset, - PathLayout.VersionedPath(prefix = - ((if (!isAdhoc) - RootMHPath - else - AdhocRootPath) - + keyValDatasetOutputPath)), - instant = Instant.ofEpochMilli(opts.interval.getEndMillis - 1L), - environmentOverride = environment, - ) - ) - } - -} - -object FTRAdhocJob extends FTRJob { - override val isAdhoc = true - override val outputTable: BQTableDetails = - BQTableDetails("twttr-recos-ml-prod", "simclusters", "offline_tweet_recommendations_ftr_adhoc") - override val keyValDatasetOutputPath = Config.IIKFFTRAdhocANNOutputPath - - override val tweetRecommentationsSnapshotDataset: KeyValDALDataset[ - KeyVal[Long, CandidateTweetsList] - ] = - OfflineTweetRecommendationsFtrAdhocScalaDataset - override val scoreColumn = "ftrat5_decayed_pop_bias_1000_rank_decay_1_1_embedding" - override val scoreKey = "ftrat5_decayed_pop_bias_1000_rank_decay_1_1" -} - -object IIKF2020DecayedSumBatchJobProd extends FTRJob { - override val isAdhoc = false - override val outputTable: BQTableDetails = BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "offline_tweet_recommendations_decayed_sum" - ) - override val keyValDatasetOutputPath = Config.IIKFDecayedSumANNOutputPath - override val tweetRecommentationsSnapshotDataset: KeyValDALDataset[ - KeyVal[Long, CandidateTweetsList] - ] = - OfflineTweetRecommendationsDecayedSumScalaDataset - override val scoreColumn = "dec_sum_logfavScoreClusterNormalizedOnly_embedding" - override val scoreKey = "dec_sum_logfavScoreClusterNormalizedOnly" -} - -object IIKF2020FTRAt5Pop1000batchJobProd extends FTRJob { - override val isAdhoc = false - override val outputTable: BQTableDetails = BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "offline_tweet_recommendations_ftrat5_pop_biased_1000") - override val keyValDatasetOutputPath = Config.IIKFFTRAt5Pop1000ANNOutputPath - override val tweetRecommentationsSnapshotDataset: KeyValDALDataset[ - KeyVal[Long, CandidateTweetsList] - ] = - OfflineTweetRecommendationsFtrat5PopBiased1000ScalaDataset - override val scoreColumn = "ftrat5_decayed_pop_bias_1000_rank_decay_1_1_embedding" - override val scoreKey = "ftrat5_decayed_pop_bias_1000_rank_decay_1_1" -} - -object IIKF2020FTRAt5Pop10000batchJobProd extends FTRJob { - override val isAdhoc = false - override val outputTable: BQTableDetails = BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "offline_tweet_recommendations_ftrat5_pop_biased_10000") - override val keyValDatasetOutputPath = Config.IIKFFTRAt5Pop10000ANNOutputPath - override val tweetRecommentationsSnapshotDataset: KeyValDALDataset[ - KeyVal[Long, CandidateTweetsList] - ] = - OfflineTweetRecommendationsFtrat5PopBiased10000ScalaDataset - override val scoreColumn = "ftrat5_decayed_pop_bias_10000_rank_decay_1_1_embedding" - override val scoreKey = "ftrat5_decayed_pop_bias_10000_rank_decay_1_1" -} - -case class UserToTweetRecommendations( - userId: Long, - tweetCandidates: List[CandidateTweet]) diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FtrClusterToTweetIndexGenerationJob.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FtrClusterToTweetIndexGenerationJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..0de5f628951b6907437d4940a82dfff3f8fa85bf GIT binary patch literal 39444 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FtrClusterToTweetIndexGenerationJob.scala b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FtrClusterToTweetIndexGenerationJob.scala deleted file mode 100644 index d7560be53..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/FtrClusterToTweetIndexGenerationJob.scala +++ /dev/null @@ -1,264 +0,0 @@ -package com.twitter.simclusters_v2 -package scio.bq_generation.ftr_tweet - -import com.google.api.services.bigquery.model.TimePartitioning -import com.twitter.conversions.DurationOps.richDurationFromInt -import com.spotify.scio.ScioContext -import com.spotify.scio.coders.Coder -import com.twitter.beam.io.dal.DAL -import com.twitter.beam.io.dal.DAL.PathLayout -import com.twitter.simclusters_v2.scio.bq_generation.common.IndexGenerationUtil.parseClusterTopKTweetsFn -import java.time.Instant -import com.twitter.beam.job.DateRangeOptions -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.scio_internal.coders.ThriftStructLazyBinaryScroogeCoder -import com.twitter.scio_internal.job.ScioBeamJob -import com.twitter.scrooge.ThriftStruct -import com.twitter.simclusters_v2.scio.bq_generation.common.BQTableDetails -import com.twitter.simclusters_v2.thriftscala.ClusterIdToTopKTweetsWithScores -import com.twitter.simclusters_v2.thriftscala.FullClusterId -import com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores -import com.twitter.tcdc.bqblaster.beam.syntax._ -import com.twitter.tcdc.bqblaster.core.avro.TypedProjection -import com.twitter.tcdc.bqblaster.core.transform.RootTransform -import com.twitter.wtf.beam.bq_embedding_export.BQQueryUtils -import org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO - -trait FTRClusterToTweetIndexGenerationJob extends ScioBeamJob[DateRangeOptions] { - val isAdhoc: Boolean - - val outputTable: BQTableDetails - val keyValDatasetOutputPath: String - val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] - - // Base configs - val projectId = "twttr-recos-ml-prod" - val environment: DAL.Env = if (isAdhoc) DAL.Environment.Dev else DAL.Environment.Prod - - // Variables for Tweet Embedding SQL - val scoreKey: String - val scoreColumn: String - - // Variables for spam treatment - val maxTweetFTR: Double - val maxUserFTR: Double - - // Tweet embeddings parameters - val tweetEmbeddingsLength: Int = Config.SimClustersTweetEmbeddingsGenerationEmbeddingLength - - // Clusters-to-tweet index parameters - val clusterTopKTweets: Int = Config.clusterTopKTweets - val maxTweetAgeHours: Int = Config.maxTweetAgeHours - - override implicit def scroogeCoder[T <: ThriftStruct: Manifest]: Coder[T] = - ThriftStructLazyBinaryScroogeCoder.scroogeCoder - - override def configurePipeline(sc: ScioContext, opts: DateRangeOptions): Unit = { - // The time when the job is scheduled - val queryTimestamp = opts.interval.getEnd - - val tweetEmbeddingTemplateVariables = - Map( - "START_TIME" -> queryTimestamp.minusDays(1).toString(), - "END_TIME" -> queryTimestamp.toString(), - "TWEET_SAMPLE_RATE" -> Config.TweetSampleRate.toString, - "ENG_SAMPLE_RATE" -> Config.EngSampleRate.toString, - "MIN_TWEET_FAVS" -> Config.MinTweetFavs.toString, - "MIN_TWEET_IMPS" -> Config.MinTweetImps.toString, - "MAX_TWEET_FTR" -> maxTweetFTR.toString, - "MAX_USER_LOG_N_IMPS" -> Config.MaxUserLogNImps.toString, - "MAX_USER_LOG_N_FAVS" -> Config.MaxUserLogNFavs.toString, - "MAX_USER_FTR" -> maxUserFTR.toString, - "TWEET_EMBEDDING_LENGTH" -> Config.SimClustersTweetEmbeddingsGenerationEmbeddingLength.toString, - "HALFLIFE" -> Config.SimClustersTweetEmbeddingsGenerationHalfLife.toString, - "SCORE_COLUMN" -> scoreColumn, - "SCORE_KEY" -> scoreKey, - ) - val tweetEmbeddingSql = BQQueryUtils.getBQQueryFromSqlFile( - "/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.sql", - tweetEmbeddingTemplateVariables) - - val clusterTopTweetsTemplateVariables = - Map( - "CLUSTER_TOP_K_TWEETS" -> Config.clusterTopKTweets.toString, - "TWEET_EMBEDDING_SQL" -> tweetEmbeddingSql - ) - - val clusterTopTweetsSql = BQQueryUtils.getBQQueryFromSqlFile( - "/com/twitter/simclusters_v2/scio/bq_generation/sql/cluster_top_tweets.sql", - clusterTopTweetsTemplateVariables - ) - - // Generate SimClusters cluster-to-tweet index - val topKtweetsForClusterKey = sc.customInput( - s"SimClusters cluster-to-tweet index generation BQ job", - BigQueryIO - .read(parseClusterTopKTweetsFn(Config.TweetEmbeddingHalfLife)) - .fromQuery(clusterTopTweetsSql) - .usingStandardSql() - ) - - // Setup BQ writer - val ingestionTime = opts.getDate().value.getEnd.toDate - val bqFieldsTransform = RootTransform - .Builder() - .withPrependedFields("dateHour" -> TypedProjection.fromConstant(ingestionTime)) - val timePartitioning = new TimePartitioning() - .setType("HOUR").setField("dateHour").setExpirationMs(3.days.inMilliseconds) - val bqWriter = BigQueryIO - .write[ClusterIdToTopKTweetsWithScores] - .to(outputTable.toString) - .withExtendedErrorInfo() - .withTimePartitioning(timePartitioning) - .withLoadJobProjectId(projectId) - .withThriftSupport(bqFieldsTransform.build(), AvroConverter.Legacy) - .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) - .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND) - - // Save SimClusters index to a BQ table - topKtweetsForClusterKey - .map { clusterIdToTopKTweets => - { - ClusterIdToTopKTweetsWithScores( - clusterId = clusterIdToTopKTweets.clusterId, - topKTweetsWithScores = clusterIdToTopKTweets.topKTweetsWithScores - ) - } - } - .saveAsCustomOutput(s"WriteToBQTable - $outputTable", bqWriter) - - // Save SimClusters index as a KeyValSnapshotDataset - topKtweetsForClusterKey - .map { clusterIdToTopKTweets => - KeyVal(clusterIdToTopKTweets.clusterId, clusterIdToTopKTweets.topKTweetsWithScores) - }.saveAsCustomOutput( - name = s"WriteClusterToKeyIndexToKeyValDataset at $keyValDatasetOutputPath", - DAL.writeVersionedKeyVal( - clusterToTweetIndexSnapshotDataset, - PathLayout.VersionedPath(prefix = - ((if (!isAdhoc) - Config.FTRRootMHPath - else - Config.FTRAdhocpath) - + keyValDatasetOutputPath)), - instant = Instant.ofEpochMilli(opts.interval.getEndMillis - 1L), - environmentOverride = environment, - ) - ) - } -} - -object FTRClusterToTweetIndexGenerationAdhoc extends FTRClusterToTweetIndexGenerationJob { - override val isAdhoc: Boolean = true - override val outputTable: BQTableDetails = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simcluster_adhoc_test_cluster_to_tweet_index") - override val keyValDatasetOutputPath: String = - "ftr_tweets_adhoc/ftr_cluster_to_tweet_adhoc" - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = SimclustersFtrAdhocClusterToTweetIndexScalaDataset - override val scoreColumn = "ftrat5_decayed_pop_bias_1000_rank_decay_1_1_embedding" - override val scoreKey = "ftrat5_decayed_pop_bias_1000_rank_decay_1_1" - override val maxUserFTR: Double = Config.MaxUserFTR - override val maxTweetFTR: Double = Config.MaxTweetFTR - -} - -object OONFTRClusterToTweetIndexGenerationAdhoc extends FTRClusterToTweetIndexGenerationJob { - override val isAdhoc: Boolean = true - override val outputTable: BQTableDetails = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simcluster_adhoc_test_cluster_to_tweet_index") - override val keyValDatasetOutputPath: String = - "oon_ftr_tweets_adhoc/oon_ftr_cluster_to_tweet_adhoc" - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = SimclustersOonFtrAdhocClusterToTweetIndexScalaDataset - override val scoreColumn = "oon_ftrat5_decayed_pop_bias_1000_rank_decay_embedding" - override val scoreKey = "oon_ftrat5_decayed_pop_bias_1000_rank_decay" - override val maxUserFTR: Double = Config.MaxUserFTR - override val maxTweetFTR: Double = Config.MaxTweetFTR -} - -object FTRPop1000RankDecay11ClusterToTweetIndexGenerationBatch - extends FTRClusterToTweetIndexGenerationJob { - override val isAdhoc: Boolean = false - override val outputTable: BQTableDetails = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_ftr_pop1000_rnkdecay11_cluster_to_tweet_index") - override val keyValDatasetOutputPath: String = - Config.FTRPop1000RankDecay11ClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = SimclustersFtrPop1000Rnkdecay11ClusterToTweetIndexScalaDataset - override val scoreColumn = "ftrat5_decayed_pop_bias_1000_rank_decay_1_1_embedding" - override val scoreKey = "ftrat5_decayed_pop_bias_1000_rank_decay_1_1" - override val maxUserFTR: Double = Config.MaxUserFTR - override val maxTweetFTR: Double = Config.MaxTweetFTR -} - -object FTRPop10000RankDecay11ClusterToTweetIndexGenerationBatch - extends FTRClusterToTweetIndexGenerationJob { - override val isAdhoc: Boolean = false - override val outputTable: BQTableDetails = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_ftr_pop10000_rnkdecay11_cluster_to_tweet_index") - override val keyValDatasetOutputPath: String = - Config.FTRPop10000RankDecay11ClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = SimclustersFtrPop10000Rnkdecay11ClusterToTweetIndexScalaDataset - override val scoreColumn = "ftrat5_decayed_pop_bias_10000_rank_decay_1_1_embedding" - override val scoreKey = "ftrat5_decayed_pop_bias_10000_rank_decay_1_1" - override val maxUserFTR: Double = Config.MaxUserFTR - override val maxTweetFTR: Double = Config.MaxTweetFTR -} - -object OONFTRPop1000RankDecayClusterToTweetIndexGenerationBatch - extends FTRClusterToTweetIndexGenerationJob { - override val isAdhoc: Boolean = false - override val outputTable: BQTableDetails = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_oon_ftr_pop1000_rnkdecay_cluster_to_tweet_index") - override val keyValDatasetOutputPath: String = - Config.OONFTRPop1000RankDecayClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = SimclustersOonFtrPop1000RnkdecayClusterToTweetIndexScalaDataset - override val scoreColumn = "oon_ftrat5_decayed_pop_bias_1000_rank_decay_embedding" - override val scoreKey = "oon_ftrat5_decayed_pop_bias_1000_rank_decay" - override val maxUserFTR: Double = Config.MaxUserFTR - override val maxTweetFTR: Double = Config.MaxTweetFTR -} - -object DecayedSumClusterToTweetIndexGenerationBatch extends FTRClusterToTweetIndexGenerationJob { - override val isAdhoc: Boolean = false - override val outputTable: BQTableDetails = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_decayed_sum_cluster_to_tweet_index") - override val keyValDatasetOutputPath: String = - Config.DecayedSumClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = SimclustersDecayedSumClusterToTweetIndexScalaDataset - override val scoreColumn = "dec_sum_logfavScoreClusterNormalizedOnly_embedding" - override val scoreKey = "dec_sum_logfavScoreClusterNormalizedOnly" - override val maxUserFTR = 1.0 - override val maxTweetFTR = 1.0 -} diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/README.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/README.docx new file mode 100644 index 0000000000000000000000000000000000000000..6eec7e1e9156822589d5d05e2b29ad115c4c616d GIT binary patch literal 37755 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

iUM%~j;yAVle$wF1Pmn`?b#IU%euO3@jG*7y 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 E2Uy#kRR910 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/README.md b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/README.md deleted file mode 100644 index 4d9e7d081..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/README.md +++ /dev/null @@ -1,212 +0,0 @@ -# FTR Tweet embeddings - -export GCP_PROJECT_NAME='twttr-recos-ml-prod' - -## Running Adhoc jobs -### Base ftrat5 -``` -rm dist/ftr-tweet-adhoc-job-bundle/ftr-tweet-adhoc-job.jar -./bazel bundle src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:ftr-tweet-adhoc-job && \ -bin/d6w create \ -${GCP_PROJECT_NAME}/us-central1/ftr-tweets-ann-adhoc-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-tweets-ann-adhoc-job.d6w \ ---jar dist/ftr-tweet-adhoc-job-bundle/ftr-tweet-adhoc-job.jar \ ---bind=profile.project= -${GCP_PROJECT_NAME} \ ---bind=profile.user_name=your_ldap \ ---bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:ftr-tweet-index-generation-adhoc-job" \ ---bind=profile.date="2022-08-26T12" \ ---bind=profile.machine="n2-standard-2" \ ---bind=profile.job_name="ftr-tweets-ann-adhoc-job" --ignore-existing -``` -### ClusterToTweet Index with base ftrat5 -``` -export GCP_PROJECT_NAME='twttr-recos-ml-prod' - -rm dist/ftr-tweet-index-generation-adhoc-job-bundle/ftr-tweet-index-generation-adhoc-job.jar -./bazel bundle src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:ftr-tweet-index-generation-adhoc-job && \ -bin/d6w create \ -${GCP_PROJECT_NAME}/us-central1/ftr-tweet-index-generation-adhoc-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w \ ---jar dist/ftr-tweet-index-generation-adhoc-job-bundle/ftr-tweet-index-generation-adhoc-job.jar \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=your_ldap \ ---bind=profile.date="2022-08-27T12" \ ---bind=profile.machine="n2-standard-2" \ ---bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:ftr-tweet-index-generation-adhoc-job" \ ---bind=profile.job_name="ftr-tweet-index-generation-adhoc-job" --ignore-existing -``` - -### OON ftrat5 -``` -rm dist/oon-ftr-tweet-index-generation-adhoc-job-bundle/oon-ftr-tweet-index-generation-adhoc-job.jar -./bazel bundle src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:oon-ftr-tweet-index-generation-adhoc-job && \ -bin/d6w create \ -${GCP_PROJECT_NAME}/us-central1/oon-ftr-ann-adhoc-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w \ ---jar dist/oon-ftr-tweet-index-generation-adhoc-job-bundle/oon-ftr-tweet-index-generation-adhoc-job.jar \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=${USER} \ ---bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:oon-ftr-tweet-index-generation-adhoc-job" \ ---bind=profile.date="2022-09-21T12" \ ---bind=profile.machine="n2-standard-2" \ ---bind=profile.job_name="oon-ftr-ann-adhoc-job" --ignore-existing -``` - - -## Scheduling jobs -### decayed_sum_job -``` -export SERVICE_ACCOUNT='cassowary' -export GCP_PROJECT_NAME='twttr-recos-ml-prod' -export PROJECT_DATE='2022-07-24T16' - -bin/d6w schedule \ -${GCP_PROJECT_NAME}/us-central1/iikf2020-decayed-sum-ann-batch-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-decayed-sum-ann-batch-job.d6w \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=${SERVICE_ACCOUNT} \ ---bind=profile.machine="n2-highmem-4" \ ---bind=profile.job_name="iikf2020-decayed-sum-ann-batch-job" \ ---bind=profile.date=${PROJECT_DATE} \ ---bind=profile.environment=prod -``` - -### ftrat5 pop1000 - -``` -export SERVICE_ACCOUNT='cassowary' -export GCP_PROJECT_NAME='twttr-recos-ml-prod' -export PROJECT_DATE='2022-07-24T17' - -bin/d6w schedule \ -${GCP_PROJECT_NAME}/us-central1/iikf2020-ftrat5-pop1000-ann-batch-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-ftrat5-pop1000-ann-batch-job.d6w \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=${SERVICE_ACCOUNT} \ ---bind=profile.machine="n2-highmem-4" \ ---bind=profile.job_name="iikf2020-ftrat5-pop1000-ann-batch-job" \ ---bind=profile.date=${PROJECT_DATE} \ ---bind=profile.environment=prod -``` - - -### ftrat5 pop10000 -``` -export SERVICE_ACCOUNT='cassowary' -export GCP_PROJECT_NAME='twttr-recos-ml-prod' -export PROJECT_DATE='2022-07-24T18' - -bin/d6w schedule \ -${GCP_PROJECT_NAME}/us-central1/iikf2020-ftrat5-pop10000-ann-batch-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-ftrat5-pop10000-ann-batch-job.d6w \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=${SERVICE_ACCOUNT} \ ---bind=profile.machine="n2-highmem-4" \ ---bind=profile.job_name="iikf2020-ftrat5-pop10000-ann-batch-job" \ ---bind=profile.date=${PROJECT_DATE} \ ---bind=profile.environment=prod -``` - -### Deschedule -``` -export SERVICE_ACCOUNT='cassowary' - -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-iikf2020-decayed-sum-ann-batch-job -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-iikf2020-ftrat5-pop1000-ann-batch-job -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-iikf2020-ftrat5-pop10000-ann-batch-job - -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-iikf2020-decayed-sum-ann-batch-job -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-iikf2020-ftrat5-pop1000-ann-batch-job -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-iikf2020-ftrat5-pop10000-ann-batch-job -``` - -### pop1000-rnkdecay11 -``` -export SERVICE_ACCOUNT='cassowary' -export GCP_PROJECT_NAME='twttr-recos-ml-prod' -export PROJECT_DATE='2022-08-27T16' - -bin/d6w schedule \ -${GCP_PROJECT_NAME}/us-central1/ftr-pop1000-rnkdecay11-tweet-index-generation-batch-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=${SERVICE_ACCOUNT} \ ---bind=profile.machine="n2-standard-2" \ ---bind=profile.job_name="ftr-pop1000-rnkdecay11-tweet-index-generation-batch-job" \ ---bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:ftr-tweet-index-generation-pop1000-rnkdecay11-job" \ ---bind=profile.date=${PROJECT_DATE} \ ---bind=profile.environment=prod -``` - -### pop10000-rnkdecay11 -``` -export SERVICE_ACCOUNT='cassowary' -export GCP_PROJECT_NAME='twttr-recos-ml-prod' -export PROJECT_DATE='2022-08-27T16' - -bin/d6w schedule \ -${GCP_PROJECT_NAME}/us-central1/ftr-pop10000-rnkdecay11-tweet-index-generation-batch-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=${SERVICE_ACCOUNT} \ ---bind=profile.machine="n2-standard-2" \ ---bind=profile.job_name="ftr-pop10000-rnkdecay11-tweet-index-generation-batch-job" \ ---bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:ftr-tweet-index-generation-pop10000-rnkdecay11-job" \ ---bind=profile.date=${PROJECT_DATE} \ ---bind=profile.environment=prod -``` - -### decayed_sum -``` -export SERVICE_ACCOUNT='cassowary' -export GCP_PROJECT_NAME='twttr-recos-ml-prod' -export PROJECT_DATE='2022-09-05T16' - -bin/d6w schedule \ -${GCP_PROJECT_NAME}/us-central1/decayed-sum-tweet-index-generation-batch-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=${SERVICE_ACCOUNT} \ ---bind=profile.machine="n2-standard-2" \ ---bind=profile.job_name="decayed-sum-tweet-index-generation-batch-job" \ ---bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:ftr-tweet-index-generation-decayed-sum-job" \ ---bind=profile.date=${PROJECT_DATE} \ ---bind=profile.environment=prod -``` - - -### OON ftrat5 -``` -export SERVICE_ACCOUNT='cassowary' -export GCP_PROJECT_NAME='twttr-recos-ml-prod' -export PROJECT_DATE='2022-09-21T16' - -bin/d6w schedule \ -${GCP_PROJECT_NAME}/us-central1/oon-ftr-pop1000-rnkdecay-tweet-index-generation-batch-job \ -src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w \ ---bind=profile.project=${GCP_PROJECT_NAME} \ ---bind=profile.user_name=${SERVICE_ACCOUNT} \ ---bind=profile.machine="n2-standard-2" \ ---bind=profile.job_name="oon-ftr-pop1000-rnkdecay-tweet-index-generation-batch-job" \ ---bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:oon-ftr-tweet-index-generation-pop1000-rnkdecay-job" \ ---bind=profile.date=${PROJECT_DATE} \ ---bind=profile.environment=prod -``` - -### Deschedule -``` -export SERVICE_ACCOUNT='cassowary' - -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-ftr-pop1000-rnkdecay11-tweet-index-generation-batch-job -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-ftr-pop1000-rnkdecay11-tweet-index-generation-batch-job - -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-ftr-pop10000-rnkdecay11-tweet-index-generation-batch-job -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-ftr-pop10000-rnkdecay11-tweet-index-generation-batch-job - -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-decayed-sum-tweet-index-generation-batch-job -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-decayed-sum-tweet-index-generation-batch-job - -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-oon-ftr-pop1000-rnkdecay-tweet-index-generation-batch-job -aurora cron deschedule atla/${SERVICE_ACCOUNT}/prod/twttr-recos-ml-prod-us-central1-oon-ftr-pop1000-rnkdecay-tweet-index-generation-batch-job -``` diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w deleted file mode 100644 index 39b2f16bf..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.d6w +++ /dev/null @@ -1,44 +0,0 @@ -class Profile(Struct): - project = Default(String, 'twttr-recos-ml-prod') - date = Required(String) - build_target = Required(String) - job_name = Required(String) - environment = Default(String, 'dev') - machine = Default(String, 'n2-standard-2') - -SimClustersIndexGenerationJob = Job( - name='{{profile.job_name}}', - project='{{profile.project}}', - staging_bucket='{{profile.project}}', - service_account='{{profile.user_name}}-shdw@twttr-dp-svc-accounts.iam.gserviceaccount.com', - region='us-central1', - worker_config=WorkerConfig( - num_workers=2, - worker_machine_type='{{profile.machine}}', - worker_disk_type=WorkerDiskType('HDD'), - ), - extra_args={ - "date": '{{profile.date}}' - }, - service_identifier='twtr:svc:{{profile.user_name}}:{{profile.job_name}}:{{profile.environment}}:{{profile.cluster}}', - deployment_config=BatchDeploymentConfig( - role='{{profile.user_name}}', - environment='{{profile.environment}}', - build_target='{{profile.build_target}}', - gcp_deployment_credentials='/var/lib/tss/keys/{{profile.user_name}}/cloud/gcp/dp/shadow.json', - statebird_config=StatebirdConfig( - batch_width='PT2H', - first_time='{{profile.date}}', - ), - workflow_config=WorkflowConfig( - play=True, - ), - timeout='PT4H', - parallelism=1 - ) -) - -jobs=[SimClustersIndexGenerationJob.bind(profile=Profile())] - - - diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/ftr-based-simclusters-index-generation-job.docx new file mode 100644 index 0000000000000000000000000000000000000000..f623642de3019c457d98b3fc7d842ecad36e13d2 GIT binary patch literal 37256 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

_Z*@i9 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 ai=nm-1H4&*IS7=i1Q`;6+2cqLhz9^zI9??H literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-decayed-sum-ann-batch-job.d6w b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-decayed-sum-ann-batch-job.d6w deleted file mode 100644 index 759d8e0c2..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-decayed-sum-ann-batch-job.d6w +++ /dev/null @@ -1,35 +0,0 @@ -class Profile(Struct): - project = Required(String) - date = Required(String) - environment = Default(String, 'dev') - job_name = Default(String, 'ftr-recs-d6w-job') - machine = Default(String, 'n2-highmem-4') - -job = Job( - name='{{profile.job_name}}', - project='{{profile.project}}', - staging_bucket='{{profile.project}}', - service_account='{{profile.user_name}}-shdw@twttr-dp-svc-accounts.iam.gserviceaccount.com', - region='us-central1', - worker_config=WorkerConfig( - num_workers=2, - worker_machine_type='{{profile.machine}}', - worker_disk_type=WorkerDiskType('HDD'), - ), - extra_args={ - "date": '{{profile.date}}' - }, - service_identifier='twtr:svc:{{profile.user_name}}:{{profile.job_name}}:{{profile.environment}}:{{profile.cluster}}', - deployment_config=BatchDeploymentConfig( - role='{{profile.user_name}}', - build_target='src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:iikf2020-decayed-sum-batch-job', - gcp_deployment_credentials='/var/lib/tss/keys/{{profile.user_name}}/cloud/gcp/dp/shadow.json', - statebird_config=StatebirdConfig( - batch_width='PT4H', - first_time='{{profile.date}}', - ), - timeout='PT8H', - ) -) - -jobs=[job] diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-decayed-sum-ann-batch-job.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/iikf2020-decayed-sum-ann-batch-job.docx new file mode 100644 index 0000000000000000000000000000000000000000..8a19359d2f38fd912038453b9653ac1cb52ddf15 GIT binary patch literal 37232 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

ckfC2e=?6o1(At3Mo2wc}qIgH~ee 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 =)>-|t~@25_-J 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/BUILD b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/BUILD deleted file mode 100644 index ba87e2b54..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/BUILD +++ /dev/null @@ -1,3 +0,0 @@ -resources( - sources = ["*"], -) diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..588d56c575edc2f2c8078ddfd2622fc3b3a81abe GIT binary patch literal 36668 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 AG5`Po literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.docx new file mode 100644 index 0000000000000000000000000000000000000000..a142c6fb142975faefa4c23b08f453b913d86f5e GIT binary patch literal 39588 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.sql b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.sql deleted file mode 100644 index fe52dfedb..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql/ftr_tweet_embeddings.sql +++ /dev/null @@ -1,280 +0,0 @@ -WITH vars AS ( - SELECT - TIMESTAMP('{START_TIME}') AS start_time, - TIMESTAMP('{END_TIME}') AS end_time, - UNIX_MILLIS('{END_TIME}') AS currentTs, - {HALFLIFE} AS halfLife, - {TWEET_SAMPLE_RATE} AS tweet_sample_rate, - {ENG_SAMPLE_RATE} AS eng_user_sample_rate, - {MIN_TWEET_FAVS} AS min_tweet_favs, - {MIN_TWEET_IMPS} AS min_tweet_imps, - {MAX_USER_LOG_N_IMPS} AS max_user_log_n_imps, - {MAX_USER_LOG_N_FAVS} AS max_user_log_n_favs, - {MAX_USER_FTR} AS max_user_ftr, - {MAX_TWEET_FTR} AS max_tweet_ftr, - 700 AS MAX_EXPONENT, -- this is the maximum exponent one can have in bigquery - ), - -- step 1: get impressions and favs - impressions AS ( - SELECT - userIdentifier.userId AS user_id, - item.tweetInfo.actionTweetId AS tweet_id, - item.tweetInfo.actionTweetAuthorInfo.authorId AS author_id, - TRUE AS impressed, - MIN(eventMetadata.sourceTimestampMs) AS minTsMilli - FROM twttr-bql-unified-prod.unified_user_actions.streaming_unified_user_actions, vars - WHERE - actionType = "ClientTweetLingerImpression" - AND DATE(dateHour) BETWEEN DATE(vars.start_time) AND DATE(vars.end_time) - AND TIMESTAMP_MILLIS(eventMetadata.sourceTimestampMs) BETWEEN vars.start_time AND vars.end_time - AND MOD(ABS(farm_fingerprint(item.tweetInfo.actionTweetId || '')), vars.tweet_sample_rate) = 0 - AND MOD(ABS(farm_fingerprint(userIdentifier.userId || '')), vars.eng_user_sample_rate) = 0 - -- Apply tweet age filter here - AND timestamp_millis((1288834974657 + - ((item.tweetInfo.actionTweetId & 9223372036850581504) >> 22))) >= (vars.start_time) - GROUP BY 1, 2, 3 - ), - favs AS ( - SELECT - userIdentifier.userId AS user_id, - item.tweetInfo.actionTweetId AS tweet_id, - item.tweetInfo.actionTweetAuthorInfo.authorId AS author_id, - MIN(eventMetadata.sourceTimestampMs) AS minTsMilli, - -- get last action, and make sure that it's a fav - ARRAY_AGG(actionType ORDER BY eventMetadata.sourceTimestampMs DESC LIMIT 1)[OFFSET(0)] = "ServerTweetFav" AS favorited, - FROM `twttr-bql-unified-prod.unified_user_actions_engagements.streaming_unified_user_actions_engagements`, vars - WHERE - actionType IN ("ServerTweetFav", "ServerTweetUnfav") - AND DATE(dateHour) BETWEEN DATE(vars.start_time) AND DATE(vars.end_time) - AND TIMESTAMP_MILLIS(eventMetadata.sourceTimestampMs) BETWEEN vars.start_time AND vars.end_time - AND MOD(ABS(farm_fingerprint(item.tweetInfo.actionTweetId || '')), vars.tweet_sample_rate) = 0 - AND MOD(ABS(farm_fingerprint(userIdentifier.userId || '')), vars.eng_user_sample_rate) = 0 - -- Apply tweet age filter here - AND timestamp_millis((1288834974657 + - ((item.tweetInfo.actionTweetId & 9223372036850581504) >> 22))) >= (vars.start_time) - GROUP BY 1, 2, 3 - HAVING favorited - ), - eng_data AS ( - SELECT - user_id, tweet_id, author_id, impressions.minTsMilli, favorited, impressed - FROM impressions - LEFT JOIN favs USING(user_id, tweet_id, author_id) - ), - eligible_tweets AS ( - SELECT - tweet_id, - author_id, - COUNTIF(favorited) num_favs, - COUNTIF(impressed) num_imps, - COUNTIF(favorited) * 1.0 / COUNTIF(impressed) AS tweet_ftr, - ANY_VALUE(vars.min_tweet_favs) min_tweet_favs, - ANY_VALUE(vars.min_tweet_imps) min_tweet_imps, - ANY_VALUE(vars.max_tweet_ftr) max_tweet_ftr, - FROM eng_data, vars - GROUP BY 1, 2 - HAVING num_favs >= min_tweet_favs -- this is an aggressive filter to make the workflow efficient - AND num_imps >= min_tweet_imps - AND tweet_ftr <= max_tweet_ftr -- filter to combat spam - ), - eligible_users AS ( - SELECT - user_id, - CAST(LOG10(COUNTIF(impressed) + 1) AS INT64) log_n_imps, - CAST(LOG10(COUNTIF(favorited) + 1) AS INT64) log_n_favs, - ANY_VALUE(vars.max_user_log_n_imps) max_user_log_n_imps, - ANY_VALUE(vars.max_user_log_n_favs) max_user_log_n_favs, - ANY_VALUE(vars.max_user_ftr) max_user_ftr, - COUNTIF(favorited) * 1.0 / COUNTIF(impressed) user_ftr - from eng_data, vars - GROUP BY 1 - HAVING - log_n_imps < max_user_log_n_imps - AND log_n_favs < max_user_log_n_favs - AND user_ftr < max_user_ftr - ), - eligible_eng_data AS ( - SELECT - user_id, - eng_data.author_id, - tweet_id, - minTsMilli, - favorited, - impressed - FROM eng_data - INNER JOIN eligible_tweets USING(tweet_id) - INNER JOIN eligible_users USING(user_id) - ), - follow_graph AS ( - SELECT userId, neighbor - FROM `twttr-bq-cassowary-prod.user.user_user_normalized_graph` user_user_graph, unnest(user_user_graph.neighbors) as neighbor - WHERE DATE(_PARTITIONTIME) = - ( -- Get latest partition time - SELECT MAX(DATE(_PARTITIONTIME)) latest_partition - FROM `twttr-bq-cassowary-prod.user.user_user_normalized_graph`, vars - WHERE Date(_PARTITIONTIME) BETWEEN - DATE_SUB(Date(vars.end_time), - INTERVAL 14 DAY) AND DATE(vars.end_time) - ) - AND neighbor.isFollowed is True - ), - extended_eligible_eng_data AS ( - SELECT - user_id, - tweet_id, - minTsMilli, - favorited, - impressed, - neighbor.neighborId is NULL as is_oon_eng - FROM eligible_eng_data left JOIN follow_graph ON (follow_graph.userId = eligible_eng_data.user_id AND follow_graph.neighbor.neighborId = eligible_eng_data.author_id) - ), - -- step 2: merge with iikf - iikf AS ( - SELECT - userId AS user_id, - - clusterIdToScore.key AS clusterId, - clusterIdToScore.value.favScore AS favScore, - clusterIdToScore.value.favScoreClusterNormalizedOnly AS favScoreClusterNormalizedOnly, - clusterIdToScore.value.favScoreProducerNormalizedOnly AS favScoreProducerNormalizedOnly, - - clusterIdToScore.value.logFavScore AS logFavScore, - clusterIdToScore.value.logfavScoreClusterNormalizedOnly AS logfavScoreClusterNormalizedOnly, -- probably no need for cluster normalization anymore - ROW_NUMBER() OVER (PARTITION BY userId ORDER BY clusterIdToScore.value.logFavScore DESC) AS uii_cluster_rank_logfavscore, - ROW_NUMBER() OVER (PARTITION BY userId ORDER BY clusterIdToScore.value.logfavScoreClusterNormalizedOnly DESC) AS uii_cluster_rank_logfavscoreclusternormalized, - FROM `twttr-bq-cassowary-prod.user.simclusters_v2_user_to_interested_in_20M_145K_2020`, UNNEST(clusterIdToScores) clusterIdToScore, vars - WHERE DATE(_PARTITIONTIME) = - (-- Get latest partition time - SELECT MAX(DATE(_PARTITIONTIME)) latest_partition - FROM `twttr-bq-cassowary-prod.user.simclusters_v2_user_to_interested_in_20M_145K_2020` - WHERE Date(_PARTITIONTIME) BETWEEN - DATE_SUB(Date(vars.end_time), - INTERVAL 14 DAY) AND DATE(vars.end_time) - ) - AND MOD(ABS(farm_fingerprint(userId || '')), vars.eng_user_sample_rate) = 0 - AND clusterIdToScore.value.logFavScore != 0 - ), - eng_w_uii AS ( - SELECT - T_IMP_FAV.user_id, - T_IMP_FAV.tweet_id, - T_IMP_FAV.impressed, - T_IMP_FAV.favorited, - T_IMP_FAV.minTsMilli, - T_IMP_FAV.is_oon_eng, - - IIKF.clusterId, - IIKF.logFavScore, - IIKF.logfavScoreClusterNormalizedOnly, - IIKF.uii_cluster_rank_logfavscore, - IIKF.uii_cluster_rank_logfavscoreclusternormalized, - FROM extended_eligible_eng_data T_IMP_FAV, vars - INNER JOIN iikf - ON T_IMP_FAV.user_id = IIKF.user_id - WHERE - T_IMP_FAV.impressed - ), - -- step 3: Calculate tweet embedding - tweet_cluster_agg AS ( - SELECT - tweet_id, - clusterId, - - SUM(IF(impressed, logFavScore, 0)) denom_logFavScore, - SUM(IF(favorited, logFavScore, 0)) nom_logFavScore, - - COUNTIF(impressed) n_imps, - COUNTIF(favorited) n_favs, - - COUNTIF(impressed AND uii_cluster_rank_logfavscore <= 5) n_imps_at_5, - COUNTIF(favorited AND uii_cluster_rank_logfavscore <= 5) n_favs_at_5, - - COUNTIF(favorited AND uii_cluster_rank_logfavscore <= 5 AND is_oon_eng) n_oon_favs_at_5, - COUNTIF(impressed AND uii_cluster_rank_logfavscore <= 5 AND is_oon_eng) n_oon_imps_at_5, - - SUM(IF(favorited AND uii_cluster_rank_logfavscore <= 5, 1, 0) * POW(0.5, (currentTs - minTsMilli) / vars.halfLife)) AS decayed_n_favs_at_5, - SUM(IF(impressed AND uii_cluster_rank_logfavscore <= 5, 1, 0) * POW(0.5, (currentTs - minTsMilli) / vars.halfLife)) AS decayed_n_imps_at_5, - - SUM(IF(favorited, logfavScoreClusterNormalizedOnly, 0) * POW(0.5, (currentTs - minTsMilli) / vars.halfLife)) AS dec_sum_logfavScoreClusterNormalizedOnly, - - MIN(minTsMilli) minTsMilli, - - FROM eng_w_uii, vars - GROUP BY 1, 2 - ), - tweet_cluster_intermediate AS ( - SELECT - tweet_id, - clusterId, - minTsMilli, - - n_imps, - n_favs, - - n_favs_at_5, - n_imps_at_5, - n_oon_favs_at_5, - n_oon_imps_at_5, - decayed_n_favs_at_5, - decayed_n_imps_at_5, - - denom_logFavScore, - nom_logFavScore, - - dec_sum_logfavScoreClusterNormalizedOnly, - - SAFE_DIVIDE(n_favs_at_5, n_imps_at_5) AS ftr_at_5, - - SAFE_DIVIDE(n_oon_favs_at_5, n_oon_imps_at_5) AS ftr_oon_at_5, - - row_number() OVER (PARTITION BY tweet_id ORDER BY nom_logFavScore DESC) cluster_nom_logFavScore_ranking, - row_number() OVER (PARTITION BY tweet_id ORDER BY dec_sum_logfavScoreClusterNormalizedOnly DESC) cluster_decSumLogFavClusterNormalized_ranking, - FROM tweet_cluster_agg - ), - tweet_e AS ( - SELECT - tweet_id, - - MIN(minTsMilli) first_serve_millis, - DATE(TIMESTAMP_MILLIS(MIN(minTsMilli))) date_first_serve, - - ARRAY_AGG(STRUCT( - clusterId, - -- the division by MAX_EXPONENT is to avoid overflow operation - ftr_at_5 * (2 / (1+EXP(-1* (decayed_n_favs_at_5/1000))) - 1) * IF(cluster_decSumLogFavClusterNormalized_ranking > MAX_EXPONENT, 0, 1.0/(POW(1.1, cluster_decSumLogFavClusterNormalized_ranking-1))) AS ftrat5_decayed_pop_bias_1000_rank_decay_1_1 - ) ORDER BY ftr_at_5 * (2 / (1+EXP(-1* (decayed_n_favs_at_5/1000))) - 1) * IF(cluster_decSumLogFavClusterNormalized_ranking > MAX_EXPONENT, 0, 1.0/(POW(1.1, cluster_decSumLogFavClusterNormalized_ranking-1))) DESC LIMIT {TWEET_EMBEDDING_LENGTH}) ftrat5_decayed_pop_bias_1000_rank_decay_1_1_embedding, - - ARRAY_AGG(STRUCT( - clusterId, - -- the division by MAX_EXPONENT is to avoid overflow operation - ftr_at_5 * (2 / (1+EXP(-1* (decayed_n_favs_at_5/10000))) - 1) * IF(cluster_decSumLogFavClusterNormalized_ranking > MAX_EXPONENT, 0, 1.0/(POW(1.1, cluster_decSumLogFavClusterNormalized_ranking-1))) AS ftrat5_decayed_pop_bias_10000_rank_decay_1_1 - ) ORDER BY ftr_at_5 * (2 / (1+EXP(-1* (decayed_n_favs_at_5/1000))) - 1) * IF(cluster_decSumLogFavClusterNormalized_ranking > MAX_EXPONENT, 0, 1.0/(POW(1.1, cluster_decSumLogFavClusterNormalized_ranking-1))) DESC LIMIT {TWEET_EMBEDDING_LENGTH}) ftrat5_decayed_pop_bias_10000_rank_decay_1_1_embedding, - - ARRAY_AGG(STRUCT( - clusterId, - -- the division by MAX_EXPONENT is to avoid overflow operation - ftr_oon_at_5 * (2 / (1+EXP(-1* (decayed_n_favs_at_5/1000))) - 1) * IF(cluster_nom_logFavScore_ranking > MAX_EXPONENT, 0, 1.0/(POW(1.1, cluster_nom_logFavScore_ranking-1))) AS oon_ftrat5_decayed_pop_bias_1000_rank_decay - ) ORDER BY ftr_oon_at_5 * (2 / (1+EXP(-1* (decayed_n_favs_at_5/1000))) - 1) * IF(cluster_nom_logFavScore_ranking > MAX_EXPONENT, 0, 1.0/(POW(1.1, cluster_nom_logFavScore_ranking-1))) DESC LIMIT {TWEET_EMBEDDING_LENGTH}) oon_ftrat5_decayed_pop_bias_1000_rank_decay_embedding, - - ARRAY_AGG(STRUCT( - clusterId, - dec_sum_logfavScoreClusterNormalizedOnly - ) ORDER BY dec_sum_logfavScoreClusterNormalizedOnly DESC LIMIT {TWEET_EMBEDDING_LENGTH}) dec_sum_logfavScoreClusterNormalizedOnly_embedding, - - FROM tweet_cluster_intermediate, vars - GROUP BY 1 - ), - tweet_e_unnest AS ( - SELECT - tweet_id AS tweetId, - clusterToScores.clusterId AS clusterId, - clusterToScores.{SCORE_KEY} tweetScore - FROM tweet_e, UNNEST({SCORE_COLUMN}) clusterToScores - WHERE clusterToScores.{SCORE_KEY} IS NOT NULL - AND clusterToScores.{SCORE_KEY} > 0 - ) - SELECT - tweetId, - clusterId, - tweetScore - FROM tweet_e_unnest diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/BUILD b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/BUILD deleted file mode 100644 index 681483b95..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/BUILD +++ /dev/null @@ -1,167 +0,0 @@ -scala_library( - name = "simclusters_index_generation", - sources = [ - "**/*.scala", - ], - platform = "java8", - tags = ["bazel-compatible"], - dependencies = [ - "src/scala/com/twitter/simclusters_v2/hdfs_sources:ads_fav_based_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:ads_fav_click_based_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:fav_based_evergreen_content_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:fav_based_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:fav_based_video_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:push_open_based_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:reply_based_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:retweet_based_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/hdfs_sources:video_view_based_simclusters_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/common", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/tweets_ann:bq_generation", - "unified_user_actions/thrift/src/main/thrift/com/twitter/unified_user_actions:unified_user_actions-scala", - ], -) - -jvm_binary( - name = "fav-based-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.FavBasedClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "fav-based-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.FavBasedClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "video-view-based-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.VideoViewBasedClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "video-view-based-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.VideoViewBasedClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "retweet-based-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.RetweetBasedClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "retweet-based-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.RetweetBasedClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "reply-based-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.ReplyBasedClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "reply-based-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.ReplyBasedClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "push-open-based-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.PushOpenBasedClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "push-open-based-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.PushOpenBasedClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "ads-fav-based-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.AdsFavBasedClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "ads-fav-based-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.AdsFavBasedClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "ads-fav-click-based-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.AdsFavClickBasedClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "ads-fav-click-based-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.AdsFavClickBasedClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "fav-based-evergreen-content-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.FavBasedEvergreenContentClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "fav-based-evergreen-content-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.FavBasedEvergreenContentClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "fav-based-video-cluster-to-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.FavBasedVideoClusterToTweetIndexGenerationAdhocJob", - dependencies = [ - ":simclusters_index_generation", - ], -) - -jvm_binary( - name = "fav-based-video-cluster-to-tweet-index-generation-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.FavBasedVideoClusterToTweetIndexGenerationBatchJob", - dependencies = [ - ":simclusters_index_generation", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..4029ca845584a0a88ebd7bbd955d66eedd156d4c GIT binary patch literal 37334 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/Config.scala b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/Config.scala deleted file mode 100644 index 5f44986e9..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/Config.scala +++ /dev/null @@ -1,82 +0,0 @@ -package com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation - -object Config { - // Common Root Path - val RootMHPath: String = "manhattan_sequence_files/simclusters_to_tweet_index/" - val RootThriftPath: String = "processed/simclusters_to_tweet_index/" - val AdhocRootPath = "adhoc/simclusters_to_tweet_index/" - // cluster-to-tweet KeyVal Dataset Output Path - val FavBasedClusterToTweetIndexOutputPath = "fav_based_index" - val FavBasedEvergreenContentClusterToTweetIndexOutputPath = "fav_based_evergreen_index" - val FavBasedVideoClusterToTweetIndexOutputPath = "fav_based_video_index" - val VideoViewBasedClusterToTweetIndexOutputPath = "video_view_based_index" - val RetweetBasedClusterToTweetIndexOutputPath = "retweet_based_index" - val ReplyBasedClusterToTweetIndexOutputPath = "reply_based_index" - val PushOpenBasedClusterToTweetIndexOutputPath = "push_open_based_index" - val AdsFavBasedClusterToTweetIndexOutputPath = "ads_fav_based_index" - val AdsFavClickBasedClusterToTweetIndexOutputPath = "ads_fav_click_based_index" - - // SQL file path - val simclustersEngagementBasedIndexGenerationSQLPath = - s"/com/twitter/simclusters_v2/scio/bq_generation/sql/engagement_based_index_generation.sql" - val unifiedUserTweetActionPairGenerationSQLPath = - s"/com/twitter/simclusters_v2/scio/bq_generation/sql/unified_user_tweet_action_pair_generation.sql" - val combinedUserTweetActionPairGenerationSQLPath = - s"/com/twitter/simclusters_v2/scio/bq_generation/sql/combined_user_tweet_action_pair_generation.sql" - val adsUserTweetActionPairGenerationSQLPath = - s"/com/twitter/simclusters_v2/scio/bq_generation/sql/ads_user_tweet_action_pair_generation.sql" - val evergreenContentUserTweetActionPairGenerationSQLPath = - s"/com/twitter/simclusters_v2/scio/bq_generation/sql/evergreen_content_user_tweet_action_pair_generation.sql" - val favBasedVideoTweetActionPairGenerationSQLPath = - s"/com/twitter/simclusters_v2/scio/bq_generation/sql/user_video_tweet_fav_engagement_generation.sql" - - // Table name for server/client engagements - val clientEngagementTableName: String = "twttr-bq-iesource-prod.user.client_engagements" - val serverEngagementTableName: String = "twttr-bq-iesource-prod.user.server_engagements" - - // Tweet id column names from UUA - val actionTweetIdColumn: String = "item.tweetInfo.actionTweetId" - val retweetTweetIdColumn: String = "item.tweetInfo.retweetedTweetId" - val replyTweetIdColumn: String = "item.tweetInfo.inReplyToTweetId" - val pushTweetIdColumn: String = "item.notificationInfo.content.tweetNotification.tweetId" - - // Do not enable health or video filters by default - val enableHealthAndVideoFilters: Boolean = false - - // Do not enable top k tweets per cluster intersection with fav-based clusters - val enableIntersectionWithFavBasedClusterTopKTweetsIndex: Boolean = false - - // Min fav/interaction threshold - val minInteractionCount: Int = 50 - val minFavCount: Int = 50 - - // Tweet Embeddings configs - val tweetEmbeddingsLength: Int = 50 - val tweetEmbeddingsHalfLife: Int = 28800000 - - // Cluster-to-tweet index configs - val clusterTopKTweets: Int = 2000 - val maxTweetAgeHours: Int = 24 - val minEngagementPerCluster: Int = 0 - - // Placeholder action type for interactions that don't have undo events (e.g. video views) - val PlaceholderActionType: String = "PLACEHOLDER_ACTION_TYPE" - - // Ads event engagement type ids - val AdsFavEngagementTypeIds = Seq(8) // Fav promoted tweet - val AdsClickEngagementTypeIds = Seq( - 1, //URL - 42, // CARD_URL_CLICK - 53, // WEBSITE_CARD_CONTAINER_CLICK - 54, // WEBSITE_CARD_BUTTON_CLICK - 55, // WEBSITE_CARD_IMAGE_CLICK - 56, // WEBSITE_CARD_TITLE_CLICK - 69, // BUYNOW_CARD_CLICK - 70, // BUYNOW_PURCHASE_SUCCESS - 72, // VIDEO_CTA_URL_CLICK - 76, // VIDEO_AD_CTA_URL_CLICK - 80, // VIDEO_CONTENT_CTA_URL_CLICK - 84, // CL_OFFER_CARD_CLICK - ) - -} diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexFromBQ.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexFromBQ.docx new file mode 100644 index 0000000000000000000000000000000000000000..518df1c6efb689c06b8cb4dd4dfcf1519825701f GIT binary patch literal 38706 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μ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 0) { - val tweetFavCountSQL = getTweetIdWithFavCountSQL(startTime, endTime) - s""" - | WITH tweet_fav_count AS (${tweetFavCountSQL}) - | SELECT userId, tweetId, tsMillis - | FROM user_tweet_interaction_with_min_interaction_count_filter - | JOIN tweet_fav_count - | USING(tweetId) - | WHERE tweet_fav_count.favCount >= ${minFavCount} - |""".stripMargin - } else { - // Directly read from the table without applying any filters - s"SELECT userId, tweetId, tsMillis FROM user_tweet_interaction_with_min_interaction_count_filter" - } - } - - /* - * Reads the user-tweet-interaction table and apply health and video filters if specified. - * Returns the post processed table results in SQL string format - * - * Input: - * - tableName: String - * Schema of the table - * userId: Long - * tweetId: Long - * tsMillis: Long - * - startTime: DateTime - * The earliest timestamp from the user-tweet-interaction table - * - endTime: DateTime - * The latest timestamp from the user-tweet-interaction table - * - enableHealthAndVideoFilters: Boolean - * Whether we want to enable health filters and video only filters - * - * Return: - * String - Post processed table results in SQL string format - */ - def getTweetInteractionTableWithHealthFilter( - startTime: DateTime, - endTime: DateTime, - enableHealthAndVideoFilters: Boolean, - ): String = { - if (enableHealthAndVideoFilters) { - // Get SQL for tweets with media and NSFW filter - val tweetWithMediaAndNSFWAuthorFilterSQL = getTweetIdWithMediaAndNSFWAuthorFilterSQL( - startTime, - endTime, - filterMediaType = Some(3), // VideoTweets MediaType = 3 - filterNSFWAuthor = true - ) - // Get SQL for NSFW tweet id deny list - val nsfwTweetDenylistSQL = getNSFWTweetIdDenylistSQL(startTime, endTime) - // Combine the health filter SQLs - s""" - |SELECT userId, tweetId, tsMillis FROM user_tweet_interaction_with_fav_count_filter JOIN ( - | ${tweetWithMediaAndNSFWAuthorFilterSQL} - | AND tweetId NOT IN (${nsfwTweetDenylistSQL}) - |) USING(tweetId) - |""".stripMargin - } else { - // Directly read from the table without applying any filters - s"SELECT userId, tweetId, tsMillis FROM user_tweet_interaction_with_fav_count_filter" - } - } - - def getTopKTweetsForClusterKeyBQ( - sc: ScioContext, - queryTimestamp: DateTime, - maxTweetAgeHours: Int, - consumerEmbeddingsSQL: String, - userTweetEngagementEventPairSqlPath: String, - userTweetEngagementEventPairTemplateVariable: Map[String, String], - enableHealthAndVideoFilters: Boolean, - enableFavClusterTopKTweetsIntersection: Boolean, - minInteractionCount: Int, - minFavCount: Int, - tweetEmbeddingsLength: Int, - tweetEmbeddingsHalfLife: Int, - minEngagementPerCluster: Int, - clusterTopKTweets: Int - ): SCollection[TopKTweetsForClusterKey] = { - // Define template variables which we would like to be replaced in the corresponding sql file - val startTime = queryTimestamp.minusHours(maxTweetAgeHours) - val endTime = queryTimestamp - - val indexGenerationTemplateVariables = - Map( - "HALF_LIFE" -> tweetEmbeddingsHalfLife.toString, - "CURRENT_TS" -> queryTimestamp.toString(), - "START_TIME" -> startTime.toString(), - "END_TIME" -> endTime.toString(), - "USER_TWEET_ENGAGEMENT_TABLE_SQL" -> - getUserTweetEngagementEventPairSQL( - startTime, - endTime, - userTweetEngagementEventPairSqlPath, - userTweetEngagementEventPairTemplateVariable - ), - // Min interaction count filter - "MIN_INTERACTION_COUNT" -> minInteractionCount.toString, - // Min fav count filter - "TWEET_INTERACTION_WITH_FAV_COUNT_FILTER_SQL" -> getTweetInteractionTableWithFavCountFilter( - startTime, - endTime, - minFavCount - ), - // Health filter - "TWEET_INTERACTION_WITH_HEALTH_FILTER_SQL" -> getTweetInteractionTableWithHealthFilter( - startTime, - endTime, - enableHealthAndVideoFilters), - "CONSUMER_EMBEDDINGS_SQL" -> consumerEmbeddingsSQL, - "TWEET_EMBEDDING_LENGTH" -> tweetEmbeddingsLength.toString, - "MIN_ENGAGEMENT_PER_CLUSTER" -> minEngagementPerCluster.toString, - "CLUSTER_TOP_K_TWEETS" -> clusterTopKTweets.toString - ) - val query = BQQueryUtils.getBQQueryFromSqlFile( - simclustersEngagementBasedIndexGenerationSQLPath, - indexGenerationTemplateVariables) - - val postFilterQuery = if (enableFavClusterTopKTweetsIntersection) { - generateClusterTopTweetIntersectionWithFavBasedIndexSQL( - startTime, - endTime, - clusterTopKTweets, - query) - } else { - query - } - // Generate SimClusters cluster-to-tweet index - sc.customInput( - s"SimClusters cluster-to-tweet index generation BQ job", - BigQueryIO - .read(parseClusterTopKTweetsFn(tweetEmbeddingsHalfLife)) - .fromQuery(postFilterQuery) - .usingStandardSql() - ) - } -} diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexGenerationJob.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexGenerationJob.docx new file mode 100644 index 0000000000000000000000000000000000000000..77fc07b319dfb6f345877fbb9e3ab37ae3a358ff GIT binary patch literal 41292 zcmafab9`mpvTe+c*|BXK9d~TowrzK8+qP}ncG9u^(%*N^J?Gr}?tA~t{C3S%HAanE zd(F9PuE>Z3gCGL{06+jRq_V11$Q8sS00IDvf&l;^eOc87tgRdjtsJx!Tx|^PHECQd zEgBLerPui2gD&4u5@~tx+y&rJN_TC@Y^Y)|1gp~S*;JQl&n1AKAICXD6=!6E!DwRA zQyx8W)@r#sJsL^W1q9DEHPe;z2!M+`@-}j5E{s?Ygktc;mPGfk=Lf*5o6|kMPq6^f z?N#@2Xd?z*{>WDIOHg?R_(fU~rG$t(7ziQ9Jqj99l{dqh(@tokAa^=Ux<_epFe>Bp zKJM*I@GRgXl=;3)L!y*no(9$G%a$CfbEPO8q*EW;Z(rjyL0M;KtY}-i)>8oMG6-!A zKf7<)P2)VK%yI4qr1KER~@>s=_1SvG4Jbyda8*=Xp6q>v4Wg(sEqUXBaMsS&_F! zu8lt`afFeb_0#rLfWY%UJ3xJfT~NxiT~M2w%$Kj<{plL^^-vdd75(X(Z{?%tTSwu6 zx22+u1K!a`g4|bRNi6`G|EQuXi8$ZW zSM@f5005xB{%YG9TG-Rl{241^Cw>Cc!~0zF2n`b#Sv4vO=C5c89!uu)bSIBr6k2(S z7Or-7$O>wzp!VP#UGC`{EvDsRE>jj-_$%wFF8Jjv^{8x-U)Q&3uR|n4w)^6{DC`EP zTBL^G6Tm-wn30jkuso1W6OsXvqicS5IdUsRT|xrj@tUtCS#&r zc1?5aFCZ-Q!JldW^M3m^Fv$)))O7dT%dmHJE_kA_F>dhv|l7 z)nE)*=T6U{-{1fl`D9b%oST&xw!_Zt?QFNEoPagUzBL7ZgH8ONGjm>C&gYi{v99j4 zY29B?Gc-THyH0IS?8EC|(9Bqk^xineMw+DSmA;V!JLJr591NKe|9E$8N}m=lhFrv- z4kFenI!o0#k$YU{{VDSCeHn}LiS-%;{nQv%i+s*m;Nz|L2J=7ba<{gIcJ@^l3lIPR z_*e_z zg2Em|dmqYK$N5@6`ntq#1YR#?qKGo~oI5OIy8+cu6*hFZHgQB?4^j$Rf}%8lplPc; zHCnL%Mh)qZqAXK6>P}FnH-3!+ZeuS^Ipwel%ePtYUf3pO<1zha$S3sMsphHwDnX`U zc{5p-PCBd%_`S-c%(Zxmn^|P<{!}$F0R~nWNcWu)WX!e9lx!tL7)=rnlU}FeYTN|G z4BFk{zSiIbA=}te9gS;_knaqK%I0S7+fzT(KAL|1HlNq@y|7JL#s%3L09si6Ssk8y zZHaQoP2_oWmkR$-Haj!$y8v0l$Sh%knXYxu9YU6h@49Vt^Fv(;XEdz%11!i3=a1z# zR6&YW0dO_!=(xrdB=4G0>)YR~Y~SK4Zh%z)!*2Fp4>PKf;`vOmR$38=JSS&(glfjB z%YN?Cl;d+(4w4cjV!!I)Vp8gpUnn0P2`s5;N~uSpWHDnPI1%pzdbI!^Sd)Urn{%Vf zh&ZY3;y#*Syu;I6ThbqGKRa?mpE`rFc{SHT;v}6zTD*@$jN$k;TWlpI@JuLg5pf2m zqba&uNXI1guZi&%NQ-o|r_sLA;#@(dJ>Oz}F5Lgd{m&aCYJ=TIreAW&4v|bP(WTLaPSTM|V-bm<3~4+X|BNI1X5lgy@{gMBR*UKo^YsoO#6<7+06c zu72wf83Wxe5cj&+V@bqGaZI%=J)Y2EezuDo>|ApiKfzzrk9%P#l8hF59 zQIe5#-=&1Js-Y9y5wWKg7@BG*PcWO|o{j;3Stt(CE*XHJ{lYf|{-Fv*a3L_E#mAY8 z?>CKV{1i2VaBo9r=5uMRnOo;CnHys%%MnFrlKe%Xkzv77a=pGXmjt{db8d%vvX_tJ zSRgoSw+Eq~y(lKr39Exe)m}8Dc%-HfP!inSD&ujN%c;au)1x|6sBGJ$6%aoYBbciO zF>8p_SSe3CmZt|R zj}vjRd4s?yM{wiYI@WW5atF;Y{C8A<-}8fhpmbK$S%bVduF9!sULxB=QWI+xzm+g> z9TARjeOBVl?gAhrG&S!YyqInch>p>#1lsJH74D3;(=qafeuxWOlPEQDzYwY^b`x(}_RO7U5J|_iHJYoA>Mr`Eb+R zmpYCln~-EN;X`n*=JcBerh`zIUnEG+dvl1=AoQ?ubth(f>Md}wPt;2Ib^BEYdRjb+ zuKT5%e}6q$^}?v-%-x8(kv!KM0rl3G^3Z44C)D?gqTJq@5jPQ5$Oh%M9i{iuw-mJE zn_u`!h`?2~ zwBPBImhWXo5RMKRX`}@bAn7_E_~-91@4NzpCD(2hvNsvBS@1>`me(}p8%Jd6h=74W zKYZYp*XQ*nZh>Q$YPfP{XT5FJW9mOXV(XXsA*pQ&S{n?7LUaXjw0{DeR(+yG?t{-ZUwE26NZ zN2;U-J|WN~sUJY-@G*HLTTvo;0o0m3a0*9Z!?M_Oc-Z_soZ{a3EeQdT0VN1pdZr%E z_BSCkANmfo=_DtwG~X1mZ20o7cYz8G%B zU>yt8tOM8&NfW#^#seLdpzl?>4R} zJg=+O@KB;G9?or)gY~>Ex+-Cuo`V}_VO&>3w1r%Sp@=y)N`MRAERD03b;+EJ(Iy{h zC){3%1=fTB*o$feU#nOH2Q{;9&KbvA*7#$ga<4zC>E%G=`z+QI=%S z8i`)}q4gwWeUPX1rr5%egV274Y>rSAjD4nBgh&#P;UUJzSyz}E0M z9D4n6r?5blYCy{%NLiU8CYM~>uua?#TXlq@FbTUPi7}jW%j}_Cg#g`JE4hZt^i;CG z?N$^fZ>YKkh_smhb%ZP>LTN7Vz(=n>eq`YJ5S0!hY;7(zH3R?0t&zf5>X`602uni} z{Q^lt600QPT@qVe*(t4)Z}aS&U-B=K6A?yI;aKIJ$3QN-V}K?U7n(p4IdyMc#sSld z0g_Qhw7p40e0G;cER@_gN+NYrc!Za3{%N}Gs6;Pl83Yq`I;Bww*pW5;)^A+=r6D&# zphW>hMiYrTH^ok(=a)tC&9Jyd%>dLWa3Rt@9vm~0 zN#d}}Dt4iWt8#M>^4~?2NOe5LMh)F0TytMo?tqlW9nF|A6(U7~Ox$A9yyk3k<*>&J z9?_JO3Sgd9ztidSI##>w&6#|h1Jia@V{yfrT>(34Lg^FTVpSl~iur$(b1F`gSReNyURdmvA7~ApN4p!e{ znlHuW2i~xG;^Ptu`Zk$#wtI}_iMT!-L`piaK^Op-^8uwex(K%};~e;1vEgl#Ns&E% zS7w%%dMzw?DRVqSK6|QlTP|-jE2_9PyU%xvg_Z*~qM1HnET2kZ_Hk9IQl7#MmqnWB z@gMP#K=wxXHUc0KznQbp=p3Nquw;z;dOQ_yBIR~KCN9l6wulMx>*M0P<6UqngWZn< z^9iPAW}Z^*H6lr?Rb*$qG)FsFGDl9PfR9-Xzl$?N+SFqB;*`i>7AYTpeXR{SL+Md3g5}(q)5_eXp z8Dxnb;!B8z?U>=YMtM&dV^Dp$6l-*#F{I!?Hgq0FUkrXswfCv>X1L|NOj9UKaHhCq zq(%C)TiT6^jO0>djr6nKj@eZ-M?F*UGF5#jC#)skqlwM{Z1JyIS?iPwww2S60 z#SOR^%)WgY!%MKnb&UaM>}sN51Xshfvd1Sq)sg8=A8SvSIm{lrN8JwOjuk@{Tqk8Y zmr?g}cXULjb*WC&4JJpoxerXlHM8UynH>bL2%m4?l}-Jmn`}>Xmn&`nWwGz;EJ}`k z7?(N>^=TB~@31m5kMNww+uA$8;Mg0k!`DD;;2S29EnpiO#Tl7RWGY}tP0C~wV_clJ zUq(uX#2AG<*`7v$;;%Itl|6BerS(sa`|gSa#&4+SNZk<9=nsAh0$T(km{IDLs3G$B z5{R=zwJuDWibF`gq?4fJlP6Ty!WDqOfo?J)|>1T^KoYs^{}}kI9D2XoB_-Z`E9W7%Bqh8aOS;)PC(_9Ml#FZDg5}5n*K+ z#b_=nYd`J^;}R|%{yL?ZTHIWro zgTEdSiJCI#9~Mu*{Jxs1pqiL&J%7?qV(vI8v8s`;tVL>FZvRl~7DpI#(oteZ$r*QE z+7c{jMNyUkHo1Bt@6NV| zWDpzrfnY*`G$YoEjX_@wjL4+j{z&A5B-cuR9E_|NMQ-`RkMCA#BLH$6T^GBum}^T_ z6hiv@V=mbvyDq364pFnY-uadFz>Ut|dpRyY@` zf=Guu&%ik9CA(6GX_I!g(OhpgLsmd-br@%}S~zPiTQ%aNSDN>BlYFxnuEcK(`i)Wh z3Q*gI+N0U$05iud;oOj1dHG91VyWLjIrDI}e5-I%ddNPV*iz zc_Zn0~79wTd9i=5;vLyAAFG}T$@>(Ld!|3gT*!2r@=SYO+T%E z%#M@5my~Q4CJW_@Nwddjvl{x*YuKx}ZP^xo@DNZklI_+k@n~iP?x5L_akc~6dbf|) zB~0sFzkaxJ9zUeq>q<|MqDF*tW*0SXzXsm)JLC0Hbm^9Lh(O7{$=}Xc)as%V;*T?l;uQfP^W=KYM4W6 zC<|_P-a(ooT2BdR!v$4tZr+ftt0Y%vC6?J43CQzD6cnc;=raIM{tb}F5HU(e(O3K}k3mVmuzcWmU<|sj9(rhv8RFjb4m7tF z>yqj>fcyMa0zz`Tb-a$NFg+S|Fpby&p>y&CteXf7g_8#s(K>!D(FLD4j4N&@PUCuk zLDyfj+UJV@NMx1pW-E+$o~yK33a$R!)1-qLlW{Q2=UqZWYz|>xM7aLLq-Y z*!nd>`R}q1x)v>S#Iz!;30#+nFICBKW#JW9CpR%6nT_e3Nxz**BzDm1vQ5<<5r4bH z@YN~A_u?beISS39PO`{k z2DvfO3Y1tib7pUp6RN!0h*1WLv0|!73d)pq5P$FuA9(aGU8+Yx+rx&ic5&YosEXn= zp(RW!*1xaSo%V0S+wA#qfVbh`IqUd;_!^`xwzZeZmM>{R!p(9S8MD+e zrXg?(-=WXw3q~Pu4fw1N<(%EJh3*`m4bCWv)Ag^9^Cmxo_l?6avW~CQ-4+=gnxo3H)~`?7 z35NWGj@U<6OR<4VaR%E5PmdjA|KP4%pgN1MCc_PBU$iTs*K$*A+3Bc5gESv(_>%#X{@jQ^j~erzfV{Gy&3uUNlQGxv_Bns z(B%hIZ(tm9p;h?z-?=1h6v9;n9)ZHEu@3?VTk0DIR06xcdyg!hS)`V86A$u>o1EyB z^*{aCB7oqK=K^I65xI=vlFqv8L>2kXEASvWs(V;EmbrdN&YagIn3Ny=jF)_as%ata zuZ1FN$g$#UL8*+)KNgmc4XR~T15y>7iA~lG&dPLfYa_UxsBFIJC^z5c-AJ|X*_NtP z^6Nzasaamo(IjLh*4e#0n!bNB!18_v*Mc&tU%(P5Jn(&!)QCjX22pxU2kv8h(lH&~ zGg{OK5OnSmND^Qus7{yP0lq0>4CiMfu1%E>Fc17bVa{fDHxu9QCI#u>4i3b-#}iS6 zwabpJVlF$TEON%(dzFmni$`jSYQI{nbf~i~&bE3tQw75Q>_1EUpDo|WGE~lRS^xko zMNj~^e`;;-;A&xL|98VzGj3P7*0ZZCH&6R*-!eJ?U}(|`Al3;>*S#aN=8{p8aqjo@ zG@41&xwbbkJ|C{4oTAdt(%4$g-b_>(@&o0JI0eJ^_bl&ri%TzU++S($7aOd7T`-+3 z>X%BdMH3gdZPs4z=pLNUhZint7nzA`?^f>@X}n8A)*sJNpU$O_p!5^de?Oe z)*@cq@}BMv=^*xyh}zFP(>gWx*M+q)H|H?kPa75MK7_}%z1zckm+$9g!zS8~!9`1b zUJX1rea2oZnM3ZXR!&R0K~lQeNfW2lycfI~AE-PMb|Tj@J43<#PujF=uV18`x4bvc z;l_r}Up741rr&vgOmLqoZ+;y@S-Nuwd*gWV5P6e$4}3yDw9Q>#oH>u}nbkd`|AYZ| zSqaeZ$U6U(_Ij0Yf8&yh%{q1$?qx^q_Rj7`cpF!?NABp_>AJekEBGVIJCOFHbG@^z zseCM9fZp4(ZQZj|L;bSz{a)b3NG=Jd&vt8r7H-QcSqRrdH1iz)v%l)OORuMDY=I=P z?#)3h*b5<*7{j3rvg2wKqb-To%Qak~&4cqC3BM{d`mP!dv>^Bbkz*>j4lcN=lJ~t@ z+f$X-lP!?8y)DWx5Y7Aj-V~VL}#Jv)} zrlfE)km(R}%CPEEAvQjQ7(hWB-F$}5?)SFtYeLNM^-mQ;58v0U;s|TyDB29u_UNXt zz$Fz9C$!h|kE;_)%5sPLbf=bOQSNy;dQ|`1^lR=qOzjJ zh;s3aWdT$N$dvfv)Js1hVx?NU%DuO+XrGiu+lP=B%iHPG@&IKmuCtonOE8kv!l*u8 zH%vP?D=+)=SHi048MnliRV;Vo;PY94e?rKmK@o%W90}UupT^|{P&KH^{fJ(5AjgL= z-bC)!hPW;CK@M=0=Yv{pC&z=f+$_(?6NQi?q(ts{&9mE?HAn+nxFk=(&TFr^`Da6@&zWMsT=BlHBmc`)?JHW~SKR+_{Tm9Tg!Ix3-{rpnT*?xDS)l%6k=PDu zkn=w%{wq|p+f5~^U((lA|4z&a^NWuh{8z5X_50L#(A58pA~hZasVg+ZU##cjoEzZV z|6KK7rhI#W`bnp@P9&{N4negAyiOb?N6*V=KyOuVHQdFvgzleELcU3)@zKT2jV_&A z-YrP#%a-<7f-3WewrwjzV-_D&5!^KDiEoz!8?X0{Et*yX?)-0kOXE&CCd)3j>Q94n zSyekORVNEP(nkk}Be^?Ikz2f)P4|MhzpQp?R`?P$eqA!hV0^yXd=sE{ozj7)S}(y) z-x^rQd${m&T26O{8CdJ2@gB+&wLG(nJ!<*gA7)*(>suKGUt-}&#?^cKY)5r!`+fCl zi*s?#lC_OC>Fg*5b!u#1pA}kTlU~vZ$DqSM2V)ESs|{in+o4}{ut)#=dEhBK3Ux{U zcI)Wv;e6Q~M+8@}X&+L(cuy_AhD|iu8lk)#huUUVOE}T;(X$aVDEmO6&}WyhzIl4? zvf9=EEAcTqe)fiht;@k#-eeMX1U2NWwB7|6WQal$b*DsoG0pG&qyMT<`e=+{(*Y;6 zU2HT>?&nzA_FHTzD=4|Z;-#b*2QEY1oU1v1g82EOce)^=GEw3Dib1XGu7URA*;3Yz zXSlEDCxoQ8$MDO@-pkwvyjgcj|E8^D+LPsLll(pn?^|aF)K5-{fx+DaZ*dk>5n4M| zRAV03H5Dw)PD?5;u1{xMuUy3dQd(!zwmcn-Hlw#0bn~DO9RKmP0|+S*MlYG<8ImN* zlE_h{1y!2)rh$7R=(#v5KxsXLikEcC6=Tf<4FSURF-VfWmLdDfcFLA-%614EBZsZA zktaVJb1DrS`x1~d`gb@&{ZEK~`NXY@rZw{DpPe$M-FmNGWg{&43n$|+od$ukzqrT@ zic<~2PHqW9Z0FeeY_rlVS!+mi*|zPl5_-NB5-l-Z3h7s(MbdYeti#aSMP3mY!@nPP z93!9Z9tz;H%8KN%2SH0V(=hcoN!b3|N9&6~^JYBIzD*5* zx_tn^t)#g&^MGh?wKXLT-Qz#Y#k?}>tOw*3U)bBj3Q3NUjAcC}!HPy;wzex=WXiRO z`&&;}F1)@Wb#-~j`dl-sy(tPl*W*3ISihoFqf*|-f;IkxvB3Yne46TuS(YfCI!D7? z6loyU=6o3Nb%=}zy zRsDvn1d`m*v8O=xNt}>zyO?s#0K=`sHG{(iusGv&Gd5UKKR=pW&Zg$LZbjlIM74fR zSY@;pN!TS;dJdT=s`WQJd!|ChGLl3E!7ERdsd~NCftAqH)h1@^%`<59lT!v2(?P%N zgJ|jW&zcp~E*EL7c|!hTk26J^#GPUvW-PEpc#ToARA>gJ{pWBq;o%qTEy+6xC=B%! z>`#P(PRHFbOy;HHDhd?j3PVnx?9KjzsA3lc>H%B@>GxVV?k(Q;?@a=eyw-QUEwXkC zd4-w}3|ON#qbnB2lI=IK-P5B~8uC%U$B}Fjaxqqw8Ouf#!^T?K4QR?bUG(b8&gay%4OBYnLy&a4>wqh;;U z36`*Gr!;dVsc?6euqix1RQcb?4Faxzoq>PibWcp1MEm=*&*{O>H% zEMlRRi^HYUv2`uGFjXt+GUq`_DG-&KaIh_xR-Y*iNMApuTSyXBon!~gGP-RG4m}UJ z<@KeuKFlM@1g=F;u+792=Pn+@D-ASTDN^-bv$Qqo&Co9n+%Fh8_5iO5=_rnQxVf51 zm1}5OajEss%ZaCuRG><&Yb?wI|-scScT0698!cLu4jmm; zr}pqFj%=HIQUs-(s0%W+Teven*M<*&h*AFfS;6+BcDEQ>sodKsBZmmVM(Y{Tm zt&nv^OwCTiY=l0RcnG_R=tG!Qj8W?61RFoYUOu$Z*MVJ1K6g>ULps5V{VJ%tS@TY~ zWHjoC>!WK~W$c+uY`=;MlisSdUul#55w$AJ~6FKwa??i|g!eZibPA&NElT^Yh_|%orpjz*{q)=TRk zv6nUFsUktcifto0u~fIkski(Q6qouM+$e4Wl%yIZ)Bve1a~0l9Ls?eVG7E7qGjsIg z?`!bc^h|Z=5n!+)j7j$?E#nmzN*Lxs)?0AVL{}RsBOK zbc(T79zCuvvImb8=+rR#9Qxy5zjW?*-ZUN7zvls2!pfQ4Hcl{|qyfH^lT8|Wzs%YK z-|bA$)c3!1tPXkmd%opld&RBABLkE37?QEq1k@lCJLV!XrLX^di$IbJ9!sU^sbZx? zV_Z|lt=!AcV>F`Z`rS2|)K&zS)>ZlPU2BigON5Q<6B`|YXNS#vps9HmbBh>^nV!z7 z@a5U&eY$93#|0|Veac|~`egE97U+q%j46J7c?DEyBtfwvGddHb@J0E6*{>({C={!?$PY34mw6hm17srojUO)LExT^y0C?Oo>&=><+ zyDG;ss|xADtW68&=8EL)cFqVBspI(3>>jT(IfFRQ{Ae{CTfo*3`%~;ri%JD`f+3jl9c@&i=)Molgk#0BSZ(J2RWG7c0wPb+nnt$ zv@5WBb}c^C9M)Q@99I4AP~3p4eHPBb9_`EY(%5xV>Y-%xc7qsSk2Y)KTfDNK^f>dt0cX#W+*_Xswd)tE<} zN@LUC56R`AI$+ZweeX*nYe$6!svp({sz0m`eUQeoKvzID2H5MCj$!1#!c3qDSXYJ~ zPc&@|_{h7r9TdQ3H|cOWVoMb|?m)KNsr<0!n7jts^kEr-9wxXGP9(lF`o;#ywRL@i zNpWj$l=VlV{29!n?IBUz^*vl69km0O;t=nf zR4E8KBYzPYkLz5no#zl$&cviGZ8s~lwvzV zwW@P0!2HW$ndH~(;iE9}5Obvu+|zBQP{T(hDB@@}mXoC`NbSa7m?T z_p#^E7Daw;t{suH#b}$$Au?5F-iRG(n7-|qY9x*b_lM=Fmd`WB^WuQC$X5Ywrm!=8 z1*bwC2Ao7|CD~e9(#1@tfvf=p^JS|`LYIXy)sEcrW~Khcti}r#W$`?DT2L-IKBV*F z_8~Ylinpy=wb;MT6=Z0ul9Vv+dofKBP8H9C^PCx}qnG5vD`|2!(-rHejb0+$$hQN5 zGG%Bd@ZFjfI*OAlf(gi56U5XeWMd;BHR+xE0JR7l@$ev`Rcdd*4^Pd$GS0J|tBhl0Uui zxUCmME(y__h&axf#Gf$VTX9k@H8M$vk>&Gzd_e@E8Z3?+12QdTdE9yr70HX1KWLtp zueD4Qn^#8jKYrw}YDKboQDelO93hm*wpx8j5%OA;hd9^i)RB=PrEGcz~j z3?+y#cK5y17Ma9>iS8^lZHe;8Q!Fj2nOabOA=nn3ir8sxK#k5T25b` zf{K8m0D_95{9Z6mlNE+TBEs4PQ7rCKrpSHzTTn`fkHg)!7oU^&SWPgG01s3&$Y70@X<95So|$o$pEEB$vEeGj zeBu|8*7AQT9$lCZZ)FyXH7#ytlJpKXY7`hxmq${2r47xM;U#mzrxo!Q|6N*>(}T&C zJybII_G)YWH<=PmHK_a>8fuV6FB!RSif{WASf-tEWbb;}cpoEWAGR$oH_z4H(7N-U z9ni#NIGB+lTDF8Ou!G9}Po%+BlaIvE`KjbD%=Hja>+0H%N|hb>i9Oi@ii-RJz%KM5 zUMYa-or~Xyt;tN8ug81it6`;s;$jV4e=xJRP|4vX`VGqs-md8MaF-*R@A`=PN?^mY z`-}h+fb}cwgCc03KxyX;TaYrG`2n=(`__RAKc=)q=V5Li_v>KrzG||<=BI628*CTcHoSLQNK?a!|_E}yJtcNj@@_l z<*9_L7{MD1=m+vHU8umk0B~xOf3T#3#jT{v&)H5F!iOMF`^EvVMhVztYr)qf zS5~8kjXM$4(ZEM@suH*#ivAl%!m?B~*}|n9u|IjQaR14>Cs;+o*7Mwe{tC;91?%s; zg+{(Yehu{1p7gVRAp;J912P7UNGT2H;UkTMlPr>#|HkrA_zz2Y-1;w;ec*psf&kVe z>kYM>c+edh2%uR)`HBKMz5);X)_($r_+snhQHQ8VD64!EGUAL;MS~c=e;9Z2JpWh3 zHKz6wkV54(vkDc7gG#R_Bd?;a{6KfLnS%%4VC;g-%WUZ>@|mST>yPILvA;qsE=PKt7S5`kZfjTQs-;>yUBjv8@ZsaGU3 z)?!McU5J3wj(6W3U~|{rFBTCrR^-*He3-tVZBg1pN&01s zV>4coi|seC)EP6`P5*M5{M(7`e>x>h98ljM-t@DF+9MwQfl4livAB{13#($8P#y$~SJU zQ2WJPwLkN1FbpB~r$z3Dld7&Z{smq(z_wC<*%M<8Sm;xhxU$$t6R$(@`+ z?H8?4w6UKfSK*}FqsdMMh|uR75*^qEBeWWk!PAETeE$nfjB5?rBTIE*9wt6}vlN4B z=Rt0=7tw{#(2uyenrJD49w{7^tDiEMSVfPG3Zd4fNmnebX3kheFMD%F=W8oo$L%g} z`e6224RWuvpaa>oVT794?QV%k)e}hE;-#6QQon<*#ZJ|O*ryx%2U`3uXv8mQaPdF8 z@9~z+MVLgLzo4BA#=f9AS^kEeB}NK|{a>K3JNqHqL$kCuJz7LMbRbVFN_!Bk<}#_M ze4T&etN67y61AQ2B83yWgeb#`SNGef5E$%O^~JL27fn_7^L6a?ApY597kqDWpa1p` z@CV1?FK~JAzrdU5nUKP1{ul5W9kK1_UrAf*cK-nH)e(D^Q+|R{Zjwcw?RA(1KbCKa zq3zJt+UoFa;eM)TY=z3e{%k!S{h53Jw6vStQ3z6$|4O9-8+HNN9xek*s04WUI5PvVAB z;7GpXeF=t(&`eXo zDG&?e(nCyAlUaF15zS4TuthIz#0fFAcPN5Xuv}9V?c|cjApF!tz*Lgyb$+i4^D=!9 zh`YNs=U@Cxl8bMH0!19AsRrvvl5-)2kjs+_6Rc8m`9-C_THAM+D&Bb{Q|IbmPz0G^ z1m{NG4OLG&YC{SgeF`C&+G4U^S5LEnfwhSSQ_CUQ{qI=S7oE|vc?N43Yok%4~;cI!T8@K=&2OcnQ?gROJ* ztN%<=T>Z48AoTAfgA@KF$p-x=$qvi^Uy^K+=3P^5hfEb-Ur8brntpOvWHw{tw$(Rhi?an0q%x|r^jmtKqCr8+XuY|r6ptDJE7C^as9Rf`p~4Ac{G9AtF=g? z#n++8+}?dY6h8oca#nyK?}}Dum_>(qVU_hwUFs4!RvXO3#lcXrmz3FMICc>4O$& z-KOvpu=;zSbDnmOF_u(8Q6tp1fX9BnkdfYD32v+ExiFXo_j`0}5LCKOv$qeu$aR!j zar}ZI-dysHL>75t76apX^)QLA!(m7pg=+ozipvMg3xJdKX(wlK&o<8MHrOjp(&TSP z>z<8#L8NqK#oW^O)zMyD3wga5S0TSB*KCW-)-!E7P#Y(kdLG)lp_ZXl)BuvSC9o z<4?)z&dwI5Sm^ulQm7CGWgbVsQE8zZUux^#`=(~%Hw$zNP11Sf-YYFOJ_TSSK3)|r zjCUBUk2aR(Zhu|BNpNf4#UIOYD=$R8ZM#$8yZQ%*(wg6}q$!)=a0&2`HDl_Ca8k<& zbMy@a478!S7zcHBCf7|t1sHn9*6>wPA#x4vaLI$Sj3s%CY~SlQ6zLgx=yM8yRp_(h zG(`WK%x}bd_^agt8Y4C9nCFJAQ>l#Sl3e7g<}0D@2J;PvL*-40X*p{W(eWzaacc&f zjCrd$i2x3n!!Pjyo*}v#d>`6XvvHOG!u*{x^Nb)jM)HTJww@j@)4NG-}E-ZBEL zBi^3nB7{8e&~?S2Jz3~XNt{tLbUmacmNN1x#slG?{l>fh8wzz%&Kmkl1mN+hlqpo` zB0rd}Rip+7*KQ&mnCX_IfGm>%k?rO%1UxrPQ?*B4zP)wt#CNOy_fkz|x&4+y zW2|Tzep}@g<@<+zHsB?iXN3%1H}9TTmY#D)A(^uE{C8p&CJ=#$ znBNn#4F(e>GWmo3I4*GJ`P?4E=nCV7-b60W##z zPF_l_1n00@yd0@>6}PG;gv8%OnaeTsHiw_3wQ;|?(A#R#Lj=&dC1s`L8=#tn(p;rd z`3o^D`>GX;F7Y)DenKHQu;s^)8H@U5S&IV1JU`(TcF$Zws}dM(9r#}k!MRbM;S2B9 zN03&~vl+5FH?2qGmoSfteq@yd^4wt+SE0$2z%48*{AP4~k#!`TkYXgW&u@z5V#X9+Am525^W|z^X&Hl=|rexdr^e%6`&w4-7!)YUV z0K0g5iGSouJ$)TnQx4 z`(MvHF24;G_+<_LvzY%^ZJhF+^#)bRMt5Pq^v$+*?AZRQC<7?3wd>Q(*Q+oT3eUM{ z7rV+nfgRV`DZN?@n3PldFpFTED%;=tdD+2va2YBzM)>_Tmck9mZ9`I!(tVPHnB`kLq~xXQ7pV{0LlRm zf=*{*Wx5n0`PWAt&jfgGIz5`aAT9m2L3-#Xhl$~(@Y=)i*6n_G8`3i1p>KkH zYub>dGqk=Xz}x)c!=w}S!FOF4zXDD7t4sovO^d6x6=0}mND&F^5(x{9r{~u;ThBF3 zukBJT*4QBkK+iSmq`b{n$N&Ej_7+feEDM_`?(XjH?rs4>HX7XB-QC?aI0SdM;O_3h zJ-8Df$ZXCz_s+flo0+#*?6ufk{aJMv)zwwq1Bhbw>+W86(6QV_6S_SP+9q^8*Si6U zkUU62a*5mSx!bK*Pizpwu(58avHV^9jVoUsY*Yc%Jh}~{A7lNJu@0m>o0$I-z(M{4 z;3VQN0Q=u=fqM|c?J&dVJw&l9Tkd?7SpfSE)1YWDGrpV%{NU}@>xW;+1a`9No&I~R zV=Df8gZ(&g_5|K2;Jw#Ey$(B@mH#Nv3Yr}tbOQ6=c89kb4nsHN!{&zRb=W(fCFa>o zX7d6ac1S4$8IGz-gtsSHr%L~u{)por`Vu2Efo({j`NN%7yY?v1_QOGr|G7IY`0(E2 z>m3#{0hK=(UU!GDn+G^XlwQ0Hyt)9ibYgOf6a{0xebL2bTW8{^auL_()FQXdJj`;s zPgUEZpNl=Oz7DB}4!W#rSvyeeEp0USBEVtmsvNPW)NTU~fKW4g))tlKw+8-zTY z;Vbl*gL_!lCh4)ifJ7@iUFAc0mV7Ch`(c`WH52W53a)*U)O%nkRl~?V1dfyDU>kJY zY?J>+fmkF;A>Uz${tg2OV!C<>Lj$9%yWx4p>`)ZZv1p04hg@!h1nr0~tl^YaBGF!t zP4(C<+FVJ*`38%?u$;igUJ3?{j)T?H2O&jCRLqWi3r4ShX-7#VC0AJ>H=)TB#oDe6 z?ZEn#DOK6lR<>2UIxU7%Uw_w#PXjzAVUjv3gxRs?+^K%moyfiGstS!h$;@PMs8~Q1 z>e5cOason?3i$srW%Rp3qhdsg#l%=(#N|^5Q|sUapfXxr16qC6-I|f%0T0LYUBb`= z?U=J!@qvB*~& zk4l8i!&G%#Hu~}V>M=PHq~w%?=Xq18CXF&|8+8zRbet6R^r=c~j2kxBPR2EbTBk}m z64!_nm*kX~m+KMJT;vh!0+~uVvd+Wg%uF<3}5>Ba@udHKzom_Vb4N zkRuQFYb{1IlM{sE6|`@|`rFw75xperIG`^~)A|s3n8CdxWL!X(y}u^(KY9U8WoL-`|Qt}AJ{0KuDD^6+4oP^Ly_i4TR|Ds|6QsG2@P_aY}8gAE3a~lC|vVHSlA@;O3 z9QpC}Syv_}1(RR=RvouPl%tN#ST*(ZIW^s1n}&Ye#dQjS&#*|h(SX#ew)_*NYB4MQ zZD$YSN|Hh|rrD8ty2u$C{V5H7!_bBGMD++8{tU2sq-%H&4vT}w4>Er1FWTuFngA=( z4mtJIL&!^+%}UJL1$k)%|H-<3{Kr>Albg!Q6_Tvsv2CBeh!oNWHc$ZB^cci8*?-n3 zn6SO~LvZ>lR24AUW?9k7O8!dgi`aEgd{5RtDCqye=&7Lr4n?I}oWwb!uEFv4XSDiES`wA`*JF{OQ=HvEGsI2bZPLjpB?C{O(U$U1Y7%s&PCG`n~KL zA_}6|rQ6S4+-Or@ZNwn`un+{fz>PL7vla3SOO){FdhqE`RenLMn0Ltlw(|N`a+wGs zsN9;wL)H;Z^2G9y$weUp;W9)ZnXjm_vK@gU=u~h#K+S|9Z&go&;V5H-<`h6T4}$W< znDfNov+kylERS=2_BkuV*(Rk|XA^1wtPb@Bo+6I^z*7f&=p(l4Q#AFGyN zF=btIOY*_IPkBW{bVWk2n$dqF(ydGlWY(P)Phe61TLnDw-zq|SZV3SuimKI?E>(d? z^1O)J=`E2+m~SpC0@tKsFLW5VE5Qh38FLHEf(N9`<(cskCYLBM@yTCocj?jghU#ENyDxR4i`qf79iLr52$l~dMW?9Ej5oJrV9F{HuDbBi80dyvKu3o zFLG}>@=NC=lN1&og{u@DztjfX5}9xU*gQ?!D$Q$nE4;H?1*2HIVaQ1mG{EEJ2ZTwA z!!}$CQ0(>Tu22Dh*Qk<(3ia4*F&Nukq_DIoN~P$urRP|d$h40IPsT!6U6%lokmpZiivcsjX1qou{$Wd@mfG|IRwEhib^8vKrH__=Uo&RRG z1VbCWQDzb)V2vIB7lJ?qux)W*wnnD~j{A`*(X7IzOTk@b#|LA;&@Mz`BtO74g<+fs z12lyT|MGz$6~Io|;8wumrHvDVf#g_bU(LeVT+-Ck#K`&YDf~V$&A0CA&Di(AysuNFS=~{rZ_(gL4(MIB=M}p6NztM`|#<#IM4I_m= zzWKemdvyKrY1^pcI{m$c@XqykXxrwyB2c}QyXAL#skdiGy|sS+5Ou$|>(QXw^?o>g zaFO}`bou`LcIwvtnmawdp>y-+{-V962Kn+b_W?Myf3tHi#ln7V))YCl_H>h2X^53g4)i(8jEJs)ksng_pPo2N8WUq8S1 zW*t8_%e}R6pTh1ZrnZ1fUq25ay^gXU5AFpe@4WAZ<4#G#xxtxXEoldyeyyEuYX?q_ z{h9X{7Wba#+^b88N%BWhbi_QjwR(DCIY0Bl)&`gN{i+df*5CH7KQT`a^Virq@NDBG zG)9awyW5i5-Fj1NT=}G&W>_Ejs-CWO+i}~~EH9~AR=u{qIa<(bKuP@Mi&1=-b+zQa z-LbgNkjqO8yYzkO*tEtb&Q0Q%^?YHH+<*0ZU*6EE7Z9{1>N_YIT)Xv6BjP1kd#e{D zwZIT^lLYB&ej(H)MVLH_1*rh;p>yPW82%q7IFRWbly8w z)~7e$y4Q#Pv!8vxFWENipUIaMBLdV^w>q(&ZGZo8S0}VJzP9L=TWU6bRIZq=z~Go# z5q`g}X>p#wvitMpjY+q`ErC0oh!){wr|tJB*~3mNHYGNL@N1*TW4-rFtvsNkTUcEl z>Fv+3UUS7Hm&W?mmV8M`5OFGV1+i*e-1z;UKRZu-_wy$XPwzRYr+$~Iam#z}_{4|r zWrJapYo31Id7q&LFNq3-iBfBhzh`OJ>lXIEI6YS!-BGtk*NNlXRh%*sB4fxABfY&h zZ0xiZjL8WyVjoxga91{QQ8pg3;A7hjQ(6v_TbfBM#L6#BeJjm|RpeJ5bbZJSBUfs$ zX;se2-4KbrG~en{#D;(fg><{(vT`2M+x4*429M5n?~j=dAi0ZAGM=s;9H!mo#RD_nYPW2a9<+?c9bl{_ znQP>uHZ0ZbVhnkFzi4c3Y_(JjYkCzVzE%zOF;7Q@9n2pBrwVrdad{fnElTJj;3zLcI>Ma+Go7UGuH$XEtohW9ubbN6Q1&Mj{fbA=~?(=GEmS<1n!wj}D!B z)o$bbLP<=JUX$mAU_tV=MR4lmD_W41sMhshOBilizMm!5s{KU+U)6f>dZifjW9&a2 zZu_Y4vxU)?6Q=iLoX1WW#Jhg79STFMmD-krRVQBuV-RBxzkM}U)(nEAtODFX`xCf<@lmN=21q3N5 z7zoDsUt0f>^b_oa5!DV@3>H|->YrjgcDC@_ERszhI2&L*2y-7e|5@NaJl9G!LM~{L zZ32s-0gHWDL$Y$Lkaw0zfMV)-K4f7Vfbx`a@z$@)|5AD`pdmZoA)bkTen+?k#N=0xX#1&egA0OxO}F~oX_UI z|J1x&avJA_{r#a$uCK(?{N;2Sf7`m)1^L+ea@AIv&)Sbi`N5W|skiU zl;2uLtkFfB$Hg`A-0SuWL$z>Z2{Z)pPyRE^%S-IAFT0*R8#wd4xJS{(Lb=%(0Arz? zY-6v}1#vii*Ye&obBG3Vh{Km>GmsJaTxh32?-kN`uWMtRU=tGNfJQwei(ITZTh2nA zn0VJe5EdnN@x=ipYKZdksvsd!3v#bS9oXv%TDe3C?-YHmf!Xz$ zi&2Al{~>!T0XYDZqeAZf9kn;9i`?B>C~z?(RCGr|${c4#%tI6LpiGKJ{twbY#FN6( z4;(AWS8=fFL2))D%z$*|*s}4GhcE=?i6@1`m~yxdafd5a;aQx$d^ zT^4TvuDj>LLPvR-FRy!i*&cfGy9Jq0yX1%6x7&QZo?6#)3=@hR`o(Qi6YB)1Z1ahv z(yR85CV7ukSF3WSZ>O-EAYZ89PYfF6c@;XxiCcIT*iUPFc5kklKij*6qhfzz!M-te zokBheKh-hdW;kn}C@OdKB6PH?;>@<1vNd*rQAS}02$~W&PVfj0$^AhU6%B5^hjAE1 z-323Egi&-JkF8N=g}!%}4H9-WZ(YL0H{H5bUdz)98WxyuS7_+JoF}*~aT|M+?JR8H zOU>y@cEXu5>b{*?cJuIJ@ZCmo$L)i~I9;go&=SaXkGZzhMjGmOs2ALH)_#@%Y%IAS zw|0>EIwrJWGi;t^rRDMz!5@yyHtXwx>I&8UQXShBs7jYzs!Sq;MD-%<+K(|MJ9Jd- zxAeAc_Z2O^{f1`Os32o_KjD6Px{{I}HK}uLuE(wq>c&GCP_mcOH-Ft&<-oh55}0aR zWF!{^TnE;$;sPancEGq8Ta7D~Zcl4WdZ2e~OS*srf3i%CSM){1EQ*opCv?` zHlfRRrE8jTZ{F@EMc>8cvDFu|3sTz~EXRmz%zelBmAA4}(X%s%?zJvv%W3^iW`{~T zG~;5mPG>#l?krzb(I9!9j}Ooqel(7`7|-2@y3e<@mmj`9;q94rDU@&(PMPvIS)Srr+Z<4!#O*xl@P!kgriJ?X!TxCaNxjz92UP%PCgcnb{ z@lP2ssbTXnWF?u`^_Qhk*q-&S+9oP>$epuav% zkBrq|L)mjdp(svR^5v5P+WQPMBlY;THF;25t#gqQD zo_T0=#$#1<%v6>1V;Mh>>N|S2*TCUC4*q9alIZMH)Vx@iS z4~ba)3Gc$7k(3BKc>NQ3n5=NYv)j}G39;LnxyoD9#_bOTa55p%h+JYH2XB(HWGPnLB+;V1>Tc>9iZw=xMWJmI*hygWY_kK&_ zXQUoF*YoRbW{GlHND0}5NMvvIKCIB(7C7nd>$+R%-u z{`T5zIZO;!J05K-SZ&@nMI`M?WNQbK$o@X?q?G6URDLrcjD84J!?|me{ zh#@ey4%Sv>daHjMT*RiSrtDpWvXiIRblzSdnB{4BzGK1|_ZJ0x7KhWYDO5T`Vkk(l zxAO08W`$WUUasVG?&pbwtNbytxV^3}fB2=Gnci!yp!)*x zNQ-5zo#j%C%ieB#Q$bu6zX_uqe7ux$9bdoJ2BEL>n6oAp_~2zQ@JF6+Er-1c5)n{q)UIA6w}B{w>EtcfoW*YO=kEDKT%-Slyr zg1x{Inqx#;xnB<#eKA7FscKxEKJ9F(^8vNRP;YMa?gItv(GLM`V3-q$ln zdw!b&G`dUMxwFpuI|IDLku+=;{<4~CZ}*qg-^I%ve9`?f90oU*%x)MLF-83%+ndo4 z>zUSE^MD`R7xuefz#nYwT@?NtZMyeb3;q88R|nvTy3KW4cjRp4#zF=U@Y;iKN*qc!_FL7~=$ zNY*oTZ%=rlJ8HkxRsd^a6Ic^U7nAZ88(m{1yjg0$jp{9yqGcX!The-S`FM$WPUGl{zxI(?e`m0d~0=oyzyxF_}rZB#TB-_9@v_83-+_#f(7_EmK=V>xXhNg z<>QNrDoW2~(GB|ir6v^HP*PhdBif+=pD!!auI?Z(S|Ft7p4Y~efSLk1HAFoIFO9v? z!a?dB(z0?BY9cm+erl^ZYWi))+)i{|4Rqaf?^JU_-aPy%wlAH(`uH2>`1=W1oRJ#O zi$HN0!NnJ~D&%^y@0V!m?b5ugZuNoJyBMffOTV0qqU43e+3dyvf)o#-ElY(hsy$jl zxU?NjR2`g8h0A|)5A1Us6}Ok$2wuycJwjjPhKJ*6X&?W$z#s{C8L$@G8{-K}n5 z_go5t?09wr?!Uv^P0HFKI`z!(&NR0`={F)E(Au3}t}Pm+q`C6cTx6M`C-v}(^S!0c zUlZdos~pYDzu4hrgnhQi`P>%6efr8|u&J2R@$+{yi2mQ9Wyabg*YJ;Q}>jo!EzQ6KUVZUocVSb{`e@If%%ICbZ+5J8S zc~~WtG8lU-QGUI0J+ktAt|j{Go)jbQn26*exKH|4^!d_|R!fAzYhvYlR*z1*O0j5; zA!scj2!0RMR$ozycg_jm*d=)}o8;V#S=@zMyqv$T!%hbZA`NMwWQ@@}{>kR|{W&d* z65V~KvVlZ}^$Gx#0OpMmV1S{}j}Ur?d`#@zGt^Y5ObP-b&dxG`F+YR2NAqK4Y`JQZ z=p4WT0<$3Igm=KA>fbTh10rH8JmL}tL-#q-R2%|>QWBMHL^m|?duTF-$FoK5W-pq#$%Omke(R? z1lD_wNO5jsZ0Awpb3piiQlfzVi}G~E3`ps6_7^4JL+C=C**}z7P$*;~;XO!SdUBM; zib%nnENQJUan@+>V^Bn+l)o`c=ucw|A=nx~kxS@blLsNKw5K}LNr32^Lxtvfo_tc| z0lFvXMuW!O+DabXhW|KU=EC!TAPC(6I(A6`@7IHZmtk$>n*p zX+rctNi-y1loH!lci%SzBP@JS}qt!|<_%@LHj&vxl$- zX?^R3K~;Yl$pe3=rp$&z1;NP(AT7<|n`M}yHtx>eoVYzS?C$MMsYA>lA&;uw7T2l{ZBoz;t+;Z&P-aG zkWz0=h@^qBat2)}0fNdn?5!cV(I^3faR_|+mzr~BD4_oNxHyI<76ekdJgpxU=KFuH zFaROhkE(99^v(ogLC+VIiMkN^iHX^aA*ZFZI&N@iEa@z9tVxpS?sc z(2lf_Ma<);s4%vrwLOu%4r?FQ4@YD6%B|389*c{`6lITA9S-E`KI}OkPS?EjR&dW% z5JNZgb`&}mL3QhnW=*Kp7%Lc7sMS*+Y>aCL`ysz~p}y<-%5rp#G}caVbkE?3Z+5t| zAymi3BPR6D+YQYRub)k>2M=%k7$*K6kt}Y4s)rLDu?F_Mx!DS0n1`dFP&c_kLVHVhB4OD>eNP8_($1 znl}rcyLHW$qM7B@GjE6Q#N_707x&jHuUEw^_e#KMV45IY%~pqQ@N(`$E&buWnV_rt z>yZ0v0DrE$?8)cW6#V3c;u>Rs>9`sjP2CRtYSPWK31i=B*z#8RGP5uxo}RI$x@m@< zd33(rJPC}H+7Zp?Ep3-#sG8jV)4z=^Z*?tS0?%MNjjQ@kJNKE(K&A6U4+9--v%FcE2Q>dnZ^Jq+9sr zvxatI(%~I_w&*{#>-#s$k7eSa9g2)(2KUv1tLMp6N%z-bHZd{X_o5S&4&S7Xw`*e| z7{Lc9&hquVLM|UlCne(hGMwb6Lixd*b+^|Svg(X4t++SD6&EXyaLA|ZU zK{xc=G-Y4(Mzd6WkT8ST4)|2gMlnHC8~-nUPLK}Zb$kEYkDVXxXYyvm(^Cq~U-!2r z*9Fp>Y4^K3`|!L^{q=~n@@kfDN>i@eqJ2RW_atrCUgAO;pJ_n*;6chYsuaPiP{WT% zy#MSidDHqQ2elulWsysN#?Hc8$3(}LS&{}-i(&F51W_S0^c0>--1IB?!=F|7PPcS= zmc9V5UEFQ)rJ3ceZE1X=HxCrYyis?@>9vVRHASw`CkF(BCQsxGA$qy}v4U!Auy$%E zf+Oxe+la}l_Rb)Vew-|<7)t|oG0FtVx7D^67Z9cFc>B9p4heRr0m^XGdl2ySP;)2@ z9LfxbE=?&760GkU4{YJ4D3c@^_f8?$M*f231F*9by5Gb&g3L{iZk9o%UBvok`R7n3 zCs5N!G8VxRjPbtXD(EMh52@*`=2zAr%rbc4O0a)mJh$~lvGx#Q)`yszGRu)>h;lSI zJ)MFS@{#WRBD4rMJq-VhGI;_D#fCVGK*J)-u}3d|p^!=)W)3v*{V$AvOq_^_b9|Tp zs``JMh#8P*_}r=cw*l5X*jWVn4kFXF0=5&B$+HmJ4_U5EeuVxi)D#4ruhs+XYZ~xF$Fe73u<1#AsrjRg>SPpg{TW?u+%TxU!e{dtl+xMXu2_Rg#eEV__jk@ zW=Tvnh0VT@V#Q4{%&PVJT@(e~sRvOHQ4f4jJenG^`JD^1aVfN9Y!UO|8!3lAl-1RN zn@{KY9eBht**B_b2II=Qk$Bd59U<^v3OYjYaN0};Df2qA&Vz0OZ@9oX6m%tv`!}Xj zV<>2t{bvvk?h9xLSfBE(=nocuOP?gS{0NuLxlvM406k#THpe?)G_IXuq$dJBIIt#8 z#!milaYM&O__qrW&|p(t>+pUVm6x}h7X??Pe|#wC9RYp3IsMDW+vs{d8`=Lugv)o0 zEWg3~XN6QHU7x?AK>zj;#e>qnARbDAQK0`nq8KvR4;kEtItr^#y0P@8@E9AvUd0<+ zw(K%MXc6=UajlAfWyrLg$(XR@m5pw+v1x;7@1EMY#L$~qedXM$18_+neoZvz%fS<{ z1GTgS7`%FH<5tTCSt}a%44@d<;2pavz2mb@TYZWlQhmj73jMS?5`PM~471SX+aH6i?h);-wUx{DoQwbHpi1wr4qg{ps1(Sv z%vy*P#Ly;{4js;!1;dDGHGnpzB}(7Uv=okrJAfC?sp-EMr^u~UsYnYQSf-#1K1F8%aZwYBFTa4eo!kJ%)kP^4FeH6SQE{Phi-s38FQCp zNu-jr3_yK7+Jf73X*|j)dn#JFBVq0_g_lpJt2#4Q9mQ!V4h1BS!P37sTA0MLQjujb zEKft?8^8;d)&H_MW*fyhi3~n~hXm6^v1Gr%sHAv~ElBrsMw>i-%$L z)}yh^rk6REAG)tL&YzJ#un)3eS=m6G16{hM< z=-KO1aHmkYAo5ewCnuf3zH+82E+2-wb?;%-lw@aEje;K%F{DptiL36C-Y=%1RSpG- zLP)>&GZ5zdvXZRUb6RHJz-enmsx$IFaY<{SV>GgO;leT!e0262RWNv2RoJM-5rI9h zcyUTErMvi^?deY=Yu8vEW8g5S=B_&RL zw!J5#5ywoK7*&v@3_?>;9L>S_N>NKAjcLLdNOv-Af>{2o7a8}f$~U9DNGYX351h~j z-ro=n0d&BYz@=P0J4R3*leWGth|ZL`fR+dQqo>w=_LVtM2~t~SLMEk9nUzLaS$gol zQ43-J851fSC2G6W6E)dWO>r=5p*@lg z%4GAaN*(p@>hC`!XWcL<|I)h$`GLIA9(m)0pfW36&VwIP5dInpZ56mGg2^eA$oI8! zN+PW!5+nVW2xddt?7m$lRFK0c*)KJqWZ+ovgp7$hP;%1uPya(Q8Q6bI=J_^lYOOn% zq0glt852h#kI5@!mj4)OGRMa*5o>6~%k+sjD+7zV@x^AmR_$$xvXstmPpLzt(L)q% zY*7Hm4BGKrn$glRT5%t8cAwbH4zc89Uo=LLdnIJIa7|H5#1_kzLQ%CR{d<%F)(oEX z`nq1>Rci<~3I_L(RrT90t$&Hn)dceUwIiq+;pY(-Rm5>wunY9F+!PG$SrAYXd}86x zN_6zU*k00)3C1RzQ7lOolBpMBsQdFcypqdR$mf2jIGO}JnAFq4b1RN_6e>Wc00klNczeDC#!YEhGYomzO-;jlYzhKtp0s@Kb=I(8@Is&@ zUiUeMI8uIz-hFT^X`Y9LQ<4<>*3s6E;Qr~~uwAECz8GHQJN7E-4m9+YB7FhD$|rmB zP+e&Q+7!NE1s^u7 z;3i#M;|T!`i6ZO9nD%2JcQtCPv_q57^}RK_4m?Nd|n_Gzdi& zKt+vRu`i-;C9Y)s6%rWMl*undw+Yf65ZZWqPox}sEZ~dSrlA?)?a#{WWHRBy(xS&d z^SpTHl3)XF|E47?6W2(<_=}b=eXr~?g@MjDfK@tK3DaDs+_7Bb4_k;5WJX#=6rHt5 zBLZD6s5DP@si)=lVDwLQYG_5q|KFVX-TTb(>cuhSg!BV~jpR2hlwiX$|KSDsHW_Dl zL`e`!z=Kg{SDZe7PQ$e^&wKNWcT#}L+qely6kf?QEDsTPQhX+OU5VaA!ny8%8|<}! zp0icWMB8IfrT|j0VB>%~z2pmnMN?G9UPAh8XSIwcHlM1x3z@n-LIe8}L|K&+dn(G2 zjl2dQ{kOW%33a&Hxh2}Q0q1fMzMVe(z?&j3y<=KwNaL?IS0~|I73leiWY%#{en+Da zg8tM&cf=(PHhDVx&)EBZx_hoCBSQ-3A=&j07jGd$ z%Eup~EL%Z!0^t{*=oPX2TDq2<+Yru2ax$Zn2Iqw35Qasi;#~{$_FdC$d_*YWG zic*1HaKu{*OV3Jd!V<*Uk@ZUrN5vfzx(8k(gz_MZd1H?b@{H_XUCe(Czm=~VrNW+Ew zb4lOyA=)yaL|F{YLMWv{q8`C_k-s&#PHKE;s|76y7bbbr=aWM911Xvz7K87%A7auT zaBK(uU5)C;V&q#kOe_%aD9**>|FP#s>6xNOah$Lu^FHlT!6C7jNAO47U1Y|j3gB%J z*+@T+7lCqF^1dvfe5a)x-oN;`wlO}kkQ=7iMb5+cNlGx#%R*oe%@#YR9o3UIF|NQVuH^6u)k+`Gs9@PAf)5f_I`^4o__au-VHz&seJ0bxmv6^q0dse1NP`_V@Mzh{q-85pc zX-X?);uN1=Q#u0YIaP7uou_qaTLNT{ISE@ZITaLv6=6dp>on1yt44S2xp>XgE0dAC z8bV1M^9E!%P*4n*{g>{D^~RxHd`?>}89XG1_- zI8Lu0aMgl@wS5MMO%mYs;t`ZL+97KWU`7`4%bO3vnDbJ+ON`%kw zH9?E9r2qUnbBV`ETi5Az5GcUOE&C7%Q}O{*@;8hQpyWwuobY2mt*k=}6o>*^r_Hw2 zonRm|F2IS{)sXon45_`ZZv1D&4u{){1<@bn;q2T0GngQtg!go|&mwf*I%IxASpoYW zIja#HD}=Etm);(g**E~FuZWbgv9Bb_HkpL%|{9F8z z^t=(?4=ad%^An1YNdE@P?ls?y`>YDVGx_S6v9U9d3H726G^tb4hR6U!n-l4?Xf`9k z%sxy!$>IjEi<$sCUx+nc_tqa3QOm`)uDwu3FRo^Y1hnz^qk$gWH*eainq9?jF_&D=5-yE z<408V(jfuYi3=f(8YKXl{YgW)b?;k~Dko=Fr#a;o-Co#5{F=(bPfD@(u5D!8j+#br zd4Y8Onk%n&#PgR^MEpx|1OU>78D^=6TK_%_fxsefs5xoQ?_cW=f{kt5#|s9jHAI`n zY!JA(v&-WcKD*N*RT+qzL2apR?My@C7NoOV$ek0yb+9%P_Dn9s3}%Q~y!?FF5eDcU z{E?pT;GGElGqm_ zs4N3_-{n}P{ELF@{4)(D*`zrAak?tn5MTm84b>EErz*}EplO(^xjWJM^euZ9+cUxf ziD3µ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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexGenerationJob.scala b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexGenerationJob.scala deleted file mode 100644 index 46c2af2f0..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/EngagementEventBasedClusterToTweetIndexGenerationJob.scala +++ /dev/null @@ -1,659 +0,0 @@ -package com.twitter.simclusters_v2.scio.bq_generation -package simclusters_index_generation - -import com.google.api.services.bigquery.model.TimePartitioning -import com.spotify.scio.ScioContext -import com.spotify.scio.coders.Coder -import com.twitter.beam.io.dal.DAL -import com.twitter.beam.io.fs.multiformat.PathLayout -import com.twitter.beam.job.DateRangeOptions -import com.twitter.conversions.DurationOps.richDurationFromInt -import com.twitter.dal.client.dataset.KeyValDALDataset -import com.twitter.scalding_internal.multiformat.format.keyval.KeyVal -import com.twitter.scio_internal.coders.ThriftStructLazyBinaryScroogeCoder -import com.twitter.scio_internal.job.ScioBeamJob -import com.twitter.scrooge.ThriftStruct -import com.twitter.simclusters_v2.hdfs_sources.AdsFavBasedSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.AdsFavClickBasedSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.FavBasedEvergreenContentSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.FavBasedSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.FavBasedVideoSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.ReplyBasedSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.RetweetBasedSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.VideoViewBasedSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.hdfs_sources.PushOpenBasedSimclustersClusterToTweetIndexScalaDataset -import com.twitter.simclusters_v2.scio.bq_generation.common.BQGenerationUtil.buildActionTypesEngagementIndicatorString -import com.twitter.simclusters_v2.scio.bq_generation.common.BQGenerationUtil.getInterestedIn2020SQL -import com.twitter.simclusters_v2.scio.bq_generation.common.BQTableDetails -import com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.Config.AdsClickEngagementTypeIds -import com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.Config.AdsFavEngagementTypeIds -import com.twitter.simclusters_v2.scio.bq_generation.simclusters_index_generation.EngagementEventBasedClusterToTweetIndexFromBQ.getTopKTweetsForClusterKeyBQ -import com.twitter.simclusters_v2.thriftscala.ClusterIdToTopKTweetsWithScores -import com.twitter.simclusters_v2.thriftscala.FullClusterId -import com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores -import com.twitter.tcdc.bqblaster.beam.syntax._ -import com.twitter.tcdc.bqblaster.core.avro.TypedProjection -import com.twitter.tcdc.bqblaster.core.transform.RootTransform -import com.twitter.unified_user_actions.thriftscala.ActionType -import java.time.Instant -import org.apache.beam.sdk.io.gcp.bigquery.BigQueryIO -import org.joda.time.DateTime - -trait EngagementEventBasedClusterToTweetIndexGenerationJob extends ScioBeamJob[DateRangeOptions] { - // Configs to set for different type of embeddings and jobs - val isAdhoc: Boolean - val getConsumerEmbeddingsSQLFunc: (DateTime, Int) => String - val outputTable: BQTableDetails - val keyValDatasetOutputPath: String - val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] - // Base configs - val projectId = "twttr-recos-ml-prod" - val environment: DAL.Env = if (isAdhoc) DAL.Environment.Dev else DAL.Environment.Prod - - // Point to different user tweet interaction table generation sql - // UUA-supported events: Config.unifiedUserTweetActionPairGenerationSQLPath - val userTweetEngagementEventPairSqlPath: String - lazy val userTweetEngagementEventPairTemplateVariable: Map[String, String] = Map.empty - - // Enable Video-only filters and health filters (for VideoViewBased embeddings) - val enableHealthAndVideoFilters: Boolean = Config.enableHealthAndVideoFilters - - val enableFavClusterTopKTweetsIntersection: Boolean = - Config.enableIntersectionWithFavBasedClusterTopKTweetsIndex - - // Min fav/interaction threshold - val minInteractionCount: Int = Config.minInteractionCount - val minFavCount: Int = Config.minFavCount - - // Tweet embeddings parameters - val tweetEmbeddingsLength: Int = Config.tweetEmbeddingsLength - val tweetEmbeddingsHalfLife: Int = Config.tweetEmbeddingsHalfLife - - // Clusters-to-tweet index parameters - val clusterTopKTweets: Int = Config.clusterTopKTweets - val maxTweetAgeHours: Int = Config.maxTweetAgeHours - val minEngagementPerCluster: Int = Config.minEngagementPerCluster - - override implicit def scroogeCoder[T <: ThriftStruct: Manifest]: Coder[T] = - ThriftStructLazyBinaryScroogeCoder.scroogeCoder - - override def configurePipeline(sc: ScioContext, opts: DateRangeOptions): Unit = { - // The time when the job is scheduled - val queryTimestamp = opts.interval.getEnd - - // Read consumer embeddings SQL - val consumerEmbeddingsSQL = getConsumerEmbeddingsSQLFunc(queryTimestamp, 21) - - // Generate SimClusters cluster-to-tweet index via BQ - val topKtweetsForClusterKey = - getTopKTweetsForClusterKeyBQ( - sc, - queryTimestamp, - maxTweetAgeHours, - consumerEmbeddingsSQL, - userTweetEngagementEventPairSqlPath, - userTweetEngagementEventPairTemplateVariable, - enableHealthAndVideoFilters, - enableFavClusterTopKTweetsIntersection, - minInteractionCount, - minFavCount, - tweetEmbeddingsLength, - tweetEmbeddingsHalfLife, - minEngagementPerCluster, - clusterTopKTweets - ) - - // Setup BQ writer - val ingestionTime = opts.getDate().value.getEnd.toDate - val bqFieldsTransform = RootTransform - .Builder() - .withPrependedFields("dateHour" -> TypedProjection.fromConstant(ingestionTime)) - val timePartitioning = new TimePartitioning() - .setType("HOUR").setField("dateHour").setExpirationMs(3.days.inMilliseconds) - val bqWriter = BigQueryIO - .write[ClusterIdToTopKTweetsWithScores] - .to(outputTable.toString) - .withExtendedErrorInfo() - .withTimePartitioning(timePartitioning) - .withLoadJobProjectId(projectId) - .withThriftSupport(bqFieldsTransform.build(), AvroConverter.Legacy) - .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) - .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND) - - // Save SimClusters index to a BQ table - topKtweetsForClusterKey - .map { clusterIdToTopKTweets => - { - ClusterIdToTopKTweetsWithScores( - clusterId = clusterIdToTopKTweets.clusterId, - topKTweetsWithScores = clusterIdToTopKTweets.topKTweetsWithScores - ) - } - } - .saveAsCustomOutput(s"WriteToBQTable - ${outputTable}", bqWriter) - - // Save SimClusters index as a KeyValSnapshotDataset - topKtweetsForClusterKey - .map { clusterIdToTopKTweets => - KeyVal(clusterIdToTopKTweets.clusterId, clusterIdToTopKTweets.topKTweetsWithScores) - }.saveAsCustomOutput( - name = s"WriteClusterToKeyIndexToKeyValDataset at ${keyValDatasetOutputPath}", - DAL.writeVersionedKeyVal( - clusterToTweetIndexSnapshotDataset, - PathLayout.VersionedPath(prefix = - ((if (!isAdhoc) - Config.RootMHPath - else - Config.AdhocRootPath) - + keyValDatasetOutputPath)), - instant = Instant.ofEpochMilli(opts.interval.getEndMillis - 1L), - environmentOverride = environment, - ) - ) - } -} - -// This abstract class is used to define parameters specific to UUA events. -abstract class UUABasedClusterToTweetIndexGenerationJob - extends EngagementEventBasedClusterToTweetIndexGenerationJob { - // UUA Action types and column names - val contributingActionTypes: Seq[String] - val contributingActionReferenceTweetIdColumn: String = Config.actionTweetIdColumn - val undoActionTypes: Seq[String] - // Default undo tweet id is same as the actionTweetId (e.g. for favs these are the same tweet id) - val undoActionReferenceTweetIdColumn: String = Config.actionTweetIdColumn - - // Get the string that represents the list of undo event ids - lazy val undoActionTypesStr: String = { - // Populate the action type list with a placeholder action if its empty - val actionTypes = - if (undoActionTypes.nonEmpty) undoActionTypes - else Seq(Config.PlaceholderActionType) - convertActionTypesSeqToString(actionTypes) - } - - override lazy val userTweetEngagementEventPairTemplateVariable: Map[String, String] = { - Map( - "CONTRIBUTING_ACTION_TYPES_STR" -> convertActionTypesSeqToString(contributingActionTypes), - "CONTRIBUTING_ACTION_TWEET_ID_COLUMN" -> contributingActionReferenceTweetIdColumn, - "UNDO_ACTION_TYPES_STR" -> undoActionTypesStr, - "UNDO_ACTION_TWEET_ID_COLUMN" -> undoActionReferenceTweetIdColumn - ) - } - - /*** - * Convert a list of actions to a string that could be easily used in SQLs - * Example input: Seq("ServerTweetFav", "ClientTweetFav") - * output: "ServerTweetFav","ClientTweetFav" - * SQL use case: SELECT * FROM table WHERE actionType IN ("ServerTweetFav","ClientTweetFav") - */ - private def convertActionTypesSeqToString(actionTypes: Seq[String]): String = { - actionTypes.map(action => f"""\"${action}\"""").mkString(",") - } -} - -abstract class AdsClusterToTweetIndexGenerationJob - extends EngagementEventBasedClusterToTweetIndexGenerationJob { - // Ads contributing action types - fav, click, etc - val contributingActionTypes: Seq[Int] - - override lazy val userTweetEngagementEventPairTemplateVariable: Map[String, String] = { - Map( - "CONTRIBUTING_ACTION_TYPES_STR" -> convertActionTypesSeqToString(contributingActionTypes) - ) - } - private def convertActionTypesSeqToString(actionTypes: Seq[Int]): String = { - actionTypes.map(action => f"""${action}""").mkString(",") - } -} - -object FavBasedClusterToTweetIndexGenerationAdhocJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = true - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.unifiedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetFav.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetUnfav.name) - override val minInteractionCount: Int = 8 - override val minFavCount: Int = 8 - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_fav_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.FavBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - FavBasedSimclustersClusterToTweetIndexScalaDataset -} - -object FavBasedClusterToTweetIndexGenerationBatchJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = false - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.unifiedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetFav.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetUnfav.name) - override val minInteractionCount: Int = 8 - override val minFavCount: Int = 8 - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_fav_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.FavBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - FavBasedSimclustersClusterToTweetIndexScalaDataset -} - -object VideoViewBasedClusterToTweetIndexGenerationAdhocJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = true - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.unifiedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq( - ActionType.ClientTweetVideoPlayback50.name) - override val undoActionTypes: Seq[String] = Seq.empty - override val enableHealthAndVideoFilters: Boolean = true - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_video_view_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.VideoViewBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - VideoViewBasedSimclustersClusterToTweetIndexScalaDataset -} - -object VideoViewBasedClusterToTweetIndexGenerationBatchJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = false - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.unifiedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq( - ActionType.ClientTweetVideoPlayback50.name) - override val undoActionTypes: Seq[String] = Seq.empty - override val enableHealthAndVideoFilters: Boolean = true - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_video_view_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.VideoViewBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - VideoViewBasedSimclustersClusterToTweetIndexScalaDataset -} - -object RetweetBasedClusterToTweetIndexGenerationAdhocJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = true - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.unifiedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetRetweet.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetUnretweet.name) - override val undoActionReferenceTweetIdColumn: String = Config.retweetTweetIdColumn - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_retweet_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.RetweetBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - RetweetBasedSimclustersClusterToTweetIndexScalaDataset -} - -object RetweetBasedClusterToTweetIndexGenerationBatchJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = false - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.unifiedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetRetweet.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetUnretweet.name) - override val undoActionReferenceTweetIdColumn: String = Config.retweetTweetIdColumn - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_retweet_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.RetweetBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - RetweetBasedSimclustersClusterToTweetIndexScalaDataset -} - -object ReplyBasedClusterToTweetIndexGenerationAdhocJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = true - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.combinedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetReply.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetDelete.name) - override val undoActionReferenceTweetIdColumn: String = Config.replyTweetIdColumn - override val minInteractionCount: Int = 8 - override val minFavCount: Int = 8 - override val minEngagementPerCluster: Int = 3 - // Add supplemental positive signals to the user tweet engagement event template - // We bundle each reply signal with a positive signal (fav or retweet) - val supplementalPositiveSignals: Seq[String] = - Seq(ActionType.ServerTweetFav.name, ActionType.ServerTweetRetweet.name) - override lazy val userTweetEngagementEventPairTemplateVariable: Map[String, String] = { - Map( - "CONTRIBUTING_ACTION_TYPE_STR" -> contributingActionTypes.head, - "UNDO_ACTION_TYPES_STR" -> undoActionTypesStr, - "UNDO_ACTION_TWEET_ID_COLUMN" -> undoActionReferenceTweetIdColumn, - "SUPPLEMENTAL_ACTION_TYPES_ENGAGEMENT_STR" -> buildActionTypesEngagementIndicatorString( - supplementalPositiveSignals) - ) - } - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_reply_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.ReplyBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - ReplyBasedSimclustersClusterToTweetIndexScalaDataset -} - -object ReplyBasedClusterToTweetIndexGenerationBatchJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = false - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.combinedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetReply.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetDelete.name) - override val undoActionReferenceTweetIdColumn: String = Config.replyTweetIdColumn - override val minInteractionCount: Int = 8 - override val minFavCount: Int = 8 - override val minEngagementPerCluster: Int = 3 - // Add supplemental positive signals to the user tweet engagement event template - // We bundle each reply signal with a positive signal (fav or retweet) - val supplementalPositiveSignals: Seq[String] = - Seq(ActionType.ServerTweetFav.name, ActionType.ServerTweetRetweet.name) - override lazy val userTweetEngagementEventPairTemplateVariable: Map[String, String] = { - Map( - "CONTRIBUTING_ACTION_TYPE_STR" -> contributingActionTypes.head, - "UNDO_ACTION_TYPES_STR" -> undoActionTypesStr, - "UNDO_ACTION_TWEET_ID_COLUMN" -> undoActionReferenceTweetIdColumn, - "SUPPLEMENTAL_ACTION_TYPES_ENGAGEMENT_STR" -> buildActionTypesEngagementIndicatorString( - supplementalPositiveSignals) - ) - } - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_reply_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.ReplyBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - ReplyBasedSimclustersClusterToTweetIndexScalaDataset -} - -object PushOpenBasedClusterToTweetIndexGenerationAdhocJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = true - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.unifiedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ClientNotificationOpen.name) - override val contributingActionReferenceTweetIdColumn: String = Config.pushTweetIdColumn - override val undoActionTypes: Seq[String] = Seq.empty - override val minInteractionCount = 1 - override val minFavCount = 0 - override val enableFavClusterTopKTweetsIntersection = true - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_push_open_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.PushOpenBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - PushOpenBasedSimclustersClusterToTweetIndexScalaDataset -} - -object PushOpenBasedClusterToTweetIndexGenerationBatchJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = false - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.unifiedUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ClientNotificationOpen.name) - override val contributingActionReferenceTweetIdColumn: String = Config.pushTweetIdColumn - override val undoActionTypes: Seq[String] = Seq.empty - override val minInteractionCount = 1 - override val minFavCount = 0 - override val enableFavClusterTopKTweetsIntersection = true - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_push_open_based_cluster_to_tweet_index") - override val keyValDatasetOutputPath = Config.PushOpenBasedClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - PushOpenBasedSimclustersClusterToTweetIndexScalaDataset -} - -object AdsFavBasedClusterToTweetIndexGenerationAdhocJob - extends AdsClusterToTweetIndexGenerationJob { - val isAdhoc: Boolean = true - val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val contributingActionTypes: Seq[Int] = AdsFavEngagementTypeIds // fav - override val tweetEmbeddingsHalfLife: Int = 345600000 // 4 days - // The earliest user tweet engagement event we consider is 7 days ago - // The tweet could be older than 7 days - override val maxTweetAgeHours: Int = 168 // 7 days - override val minInteractionCount: Int = 3 - override val minFavCount: Int = 3 - override val minEngagementPerCluster: Int = 2 - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_ads_fav_based_cluster_to_tweet_index") - val keyValDatasetOutputPath: String = Config.AdsFavBasedClusterToTweetIndexOutputPath - val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = AdsFavBasedSimclustersClusterToTweetIndexScalaDataset - val userTweetEngagementEventPairSqlPath: String = - Config.adsUserTweetActionPairGenerationSQLPath -} -object AdsFavBasedClusterToTweetIndexGenerationBatchJob - extends AdsClusterToTweetIndexGenerationJob { - val isAdhoc: Boolean = false - val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val contributingActionTypes: Seq[Int] = AdsFavEngagementTypeIds // fav - override val tweetEmbeddingsHalfLife: Int = 345600000 // 4 days - // The earliest user tweet engagement event we consider is 7 days ago - // The tweet could be older than 7 days - override val maxTweetAgeHours: Int = 168 // 7 days - override val minInteractionCount: Int = 3 - override val minFavCount: Int = 3 - override val minEngagementPerCluster: Int = 2 - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_ads_fav_based_cluster_to_tweet_index") - val keyValDatasetOutputPath: String = Config.AdsFavBasedClusterToTweetIndexOutputPath - val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = AdsFavBasedSimclustersClusterToTweetIndexScalaDataset - val userTweetEngagementEventPairSqlPath: String = - Config.adsUserTweetActionPairGenerationSQLPath -} - -object AdsFavClickBasedClusterToTweetIndexGenerationAdhocJob - extends AdsClusterToTweetIndexGenerationJob { - val isAdhoc: Boolean = true - val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val contributingActionTypes: Seq[Int] = - AdsFavEngagementTypeIds ++ AdsClickEngagementTypeIds // fav + click - override val tweetEmbeddingsHalfLife: Int = 604800000 // 7 days - // The earliest user tweet engagement event we consider is 21 days ago - // The tweet could be older than 21 days - override val maxTweetAgeHours: Int = 504 // 21 days - override val minInteractionCount: Int = 3 - override val minFavCount: Int = 3 - override val minEngagementPerCluster: Int = 2 - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_ads_fav_click_ sbased_cluster_to_tweet_index") - val keyValDatasetOutputPath: String = Config.AdsFavClickBasedClusterToTweetIndexOutputPath - val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = AdsFavClickBasedSimclustersClusterToTweetIndexScalaDataset - val userTweetEngagementEventPairSqlPath: String = - Config.adsUserTweetActionPairGenerationSQLPath -} - -object AdsFavClickBasedClusterToTweetIndexGenerationBatchJob - extends AdsClusterToTweetIndexGenerationJob { - val isAdhoc: Boolean = false - val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val contributingActionTypes: Seq[Int] = - AdsFavEngagementTypeIds ++ AdsClickEngagementTypeIds // fav + click - override val tweetEmbeddingsHalfLife: Int = 604800000 // 7 days - // The earliest user tweet engagement event we consider is 21 days ago - // The tweet could be older than 21 days - override val maxTweetAgeHours: Int = 504 // 21 days - override val minInteractionCount: Int = 3 - override val minFavCount: Int = 3 - override val minEngagementPerCluster: Int = 2 - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_ads_fav_click_based_cluster_to_tweet_index") - val keyValDatasetOutputPath: String = Config.AdsFavClickBasedClusterToTweetIndexOutputPath - val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = AdsFavClickBasedSimclustersClusterToTweetIndexScalaDataset - val userTweetEngagementEventPairSqlPath: String = - Config.adsUserTweetActionPairGenerationSQLPath -} - -object FavBasedEvergreenContentClusterToTweetIndexGenerationAdhocJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = true - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.evergreenContentUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetFav.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetUnfav.name) - override val tweetEmbeddingsHalfLife: Int = 57600000 // 16 hours - override val maxTweetAgeHours: Int = 48 // 2 days - override val minInteractionCount: Int = 8 - override val minFavCount: Int = 0 - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_fav_based_evergreen_content_cluster_to_tweet_index") - override val keyValDatasetOutputPath = - Config.FavBasedEvergreenContentClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - FavBasedEvergreenContentSimclustersClusterToTweetIndexScalaDataset -} - -object FavBasedEvergreenContentClusterToTweetIndexGenerationBatchJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = false - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.evergreenContentUserTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetFav.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetUnfav.name) - override val tweetEmbeddingsHalfLife: Int = 57600000 // 16 hours - override val maxTweetAgeHours: Int = 48 // 2 days - override val minInteractionCount: Int = 8 - override val minFavCount: Int = 0 - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_fav_based_evergreen_content_cluster_to_tweet_index") - override val keyValDatasetOutputPath = - Config.FavBasedEvergreenContentClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - FavBasedEvergreenContentSimclustersClusterToTweetIndexScalaDataset -} - -object FavBasedVideoClusterToTweetIndexGenerationAdhocJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = true - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.favBasedVideoTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetFav.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetUnfav.name) - override val minInteractionCount: Int = 8 - override val minFavCount: Int = 0 - override val outputTable = - BQTableDetails( - "twttr-recos-ml-prod", - "simclusters", - "simclusters_fav_based_video_cluster_to_tweet_index") - override val keyValDatasetOutputPath = - Config.FavBasedVideoClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - FavBasedVideoSimclustersClusterToTweetIndexScalaDataset -} - -object FavBasedVideoClusterToTweetIndexGenerationBatchJob - extends UUABasedClusterToTweetIndexGenerationJob { - override val isAdhoc = false - override val getConsumerEmbeddingsSQLFunc = getInterestedIn2020SQL - override val userTweetEngagementEventPairSqlPath: String = - Config.favBasedVideoTweetActionPairGenerationSQLPath - override val contributingActionTypes: Seq[String] = Seq(ActionType.ServerTweetFav.name) - override val undoActionTypes: Seq[String] = Seq(ActionType.ServerTweetUnfav.name) - override val minInteractionCount: Int = 8 - override val minFavCount: Int = 0 - override val outputTable = - BQTableDetails( - "twttr-bq-cassowary-prod", - "user", - "simclusters_fav_based_video_cluster_to_tweet_index") - override val keyValDatasetOutputPath = - Config.FavBasedVideoClusterToTweetIndexOutputPath - override val clusterToTweetIndexSnapshotDataset: KeyValDALDataset[ - KeyVal[FullClusterId, TopKTweetsWithScores] - ] = - FavBasedVideoSimclustersClusterToTweetIndexScalaDataset -} diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/README b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/README deleted file mode 100644 index 4b6a2dc16..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/README +++ /dev/null @@ -1,146 +0,0 @@ -# Adhoc SimClusters Cluster-to-tweet Index Generation Jobs -## Build and bundle the binaries - -``` - bazel bundle src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/... -``` - -## Run the adhoc jobs -### To run fav based cluster-to-tweet index generation job (adhoc): -bin/d6w create \ - twttr-recos-ml-prod/us-central1/fav-based-index-generation-adhoc-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --jar dist/fav-based-cluster-to-tweet-index-generation-adhoc-job-bundle/fav-based-cluster-to-tweet-index-generation-adhoc-job.jar \ - --bind=profile.user_name=your_ldap \ - --bind=profile.date="2022-07-15" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.environment=dev \ - --bind=profile.job_name="fav-based-index-generation-adhoc-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:fav-based-cluster-to-tweet-index-generation-adhoc-job" - -### To run VideoView based cluster-to-tweet index generation job (adhoc): -bin/d6w create \ - twttr-recos-ml-prod/us-central1/video-view-based-index-generation-adhoc-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --jar dist/video-view-based-cluster-to-tweet-index-generation-adhoc-job-bundle/video-view-based-cluster-to-tweet-index-generation-adhoc-job.jar \ - --bind=profile.user_name=your_ldap \ - --bind=profile.date="2022-07-15" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.environment=dev \ - --bind=profile.job_name="video-view-based-index-generation-adhoc-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:video-view-based-cluster-to-tweet-index-generation-adhoc-job" - -### To run retweet based cluster-to-tweet index generation job (adhoc): -bin/d6w create \ - twttr-recos-ml-prod/us-central1/retweet-based-index-generation-adhoc-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --jar dist/retweet-based-cluster-to-tweet-index-generation-adhoc-job-bundle/retweet-based-cluster-to-tweet-index-generation-adhoc-job.jar \ - --bind=profile.user_name=your_ldap \ - --bind=profile.date="2022-07-15" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.environment=dev \ - --bind=profile.job_name="retweet-based-index-generation-adhoc-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:retweet-based-cluster-to-tweet-index-generation-adhoc-job" - -### To run reply based cluster-to-tweet index generation job (adhoc): -bin/d6w create \ - twttr-recos-ml-prod/us-central1/reply-based-index-generation-adhoc-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --jar dist/reply-based-cluster-to-tweet-index-generation-adhoc-job-bundle/reply-based-cluster-to-tweet-index-generation-adhoc-job.jar \ - --bind=profile.user_name=your_ldap \ - --bind=profile.date="2022-07-15" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.environment=dev \ - --bind=profile.job_name="reply-based-index-generation-adhoc-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:reply-based-cluster-to-tweet-index-generation-adhoc-job" - -### To run push open based cluster-to-tweet index generation job (adhoc): -bin/d6w create \ - twttr-recos-ml-prod/us-central1/push-open-based-index-generation-adhoc-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --jar dist/push-open-based-cluster-to-tweet-index-generation-adhoc-job-bundle/push-open-based-cluster-to-tweet-index-generation-adhoc-job.jar \ - --bind=profile.user_name=your_ldap \ - --bind=profile.date="2022-10-06" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.environment=dev \ - --bind=profile.job_name="push-open-based-index-generation-adhoc-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:push-open-based-cluster-to-tweet-index-generation-adhoc-job" - -# For prod scheduled Cluster-to-tweet Index Generation Jobs -### To run Fav based cluster-to-tweet index generation job (batch): - bin/d6w schedule \ - twttr-recos-ml-prod/us-central1/fav-based-index-generation-batch-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --bind=profile.user_name=cassowary \ - --bind=profile.environment=prod \ - --bind=profile.date="2022-07-19" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.job_name="fav-based-index-generation-batch-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:fav-based-cluster-to-tweet-index-generation-batch-job" - -### To run VideoView based cluster-to-tweet index generation job (batch): - bin/d6w schedule \ - twttr-recos-ml-prod/us-central1/video-view-based-index-generation-batch-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --bind=profile.user_name=cassowary \ - --bind=profile.environment=prod \ - --bind=profile.date="2022-07-19" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.job_name="video-view-based-index-generation-batch-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:video-view-based-cluster-to-tweet-index-generation-batch-job" - -### To run Retweet based cluster-to-tweet index generation job (batch): - bin/d6w schedule \ - twttr-recos-ml-prod/us-central1/retweet-based-index-generation-batch-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --bind=profile.user_name=cassowary \ - --bind=profile.environment=prod \ - --bind=profile.date="2022-07-19" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.job_name="retweet-based-index-generation-batch-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:retweet-based-cluster-to-tweet-index-generation-batch-job" - -### To run Reply based cluster-to-tweet index generation job (batch): - bin/d6w schedule \ - twttr-recos-ml-prod/us-central1/reply-based-index-generation-batch-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --bind=profile.user_name=cassowary \ - --bind=profile.environment=prod \ - --bind=profile.date="2022-07-19" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.job_name="reply-based-index-generation-batch-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:reply-based-cluster-to-tweet-index-generation-batch-job" - -### To run Push open based cluster-to-tweet index generation job (batch): - bin/d6w schedule \ - twttr-recos-ml-prod/us-central1/push-open-based-index-generation-batch-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --bind=profile.user_name=cassowary \ - --bind=profile.environment=prod \ - --bind=profile.date="2022-10-06" \ - --bind=profile.frequency="PT1H" \ - --bind=profile.job_name="push-open-based-index-generation-batch-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:push-open-based-cluster-to-tweet-index-generation-batch-job" - -### To run Ads Fav based cluster-to-tweet index generation job (batch): - bin/d6w schedule \ - twttr-recos-ml-prod/us-central1/ads-fav-based-index-generation-batch-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --bind=profile.user_name=cassowary \ - --bind=profile.environment=prod \ - --bind=profile.date="2022-10-06" \ - --bind=profile.frequency="PT3H" \ - --bind=profile.job_name="ads-fav-based-index-generation-batch-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:ads-fav-based-cluster-to-tweet-index-generation-batch-job" - -### To run Ads Fav Click based cluster-to-tweet index generation job (batch): - bin/d6w schedule \ - twttr-recos-ml-prod/us-central1/ads-fav-click-based-index-generation-batch-job \ - src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w \ - --bind=profile.user_name=cassowary \ - --bind=profile.environment=prod \ - --bind=profile.date="2022-12-09" \ - --bind=profile.frequency="PT3H" \ - --bind=profile.job_name="ads-fav-click-based-index-generation-batch-job" \ - --bind=profile.build_target="src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation:ads-fav-click-based-cluster-to-tweet-index-generation-batch-job" - diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/README.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/README.docx new file mode 100644 index 0000000000000000000000000000000000000000..f593a5fede6b34da8fcb79bbcacafde881c4a308 GIT binary patch literal 37504 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 A9RL6T literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w deleted file mode 100644 index 8da4ba43c..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.d6w +++ /dev/null @@ -1,44 +0,0 @@ -class Profile(Struct): - project = Default(String, 'twttr-recos-ml-prod') - date = Required(String) - build_target = Required(String) - job_name = Required(String) - environment = Default(String, 'dev') - machine = Default(String, 'n2-standard-2') - frequency = Default(String, 'PT1H') - -SimClustersIndexGenerationJob = Job( - name='{{profile.job_name}}', - project='{{profile.project}}', - staging_bucket='{{profile.project}}', - service_account='{{profile.user_name}}-shdw@twttr-dp-svc-accounts.iam.gserviceaccount.com', - region='us-central1', - worker_config=WorkerConfig( - num_workers=2, - worker_machine_type='{{profile.machine}}', - worker_disk_type=WorkerDiskType('HDD'), - ), - extra_args={ - "date": '{{profile.date}}' - }, - service_identifier='twtr:svc:{{profile.user_name}}:{{profile.job_name}}:{{profile.environment}}:{{profile.cluster}}', - deployment_config=BatchDeploymentConfig( - role='{{profile.user_name}}', - environment='{{profile.environment}}', - build_target='{{profile.build_target}}', - gcp_deployment_credentials='/var/lib/tss/keys/{{profile.user_name}}/cloud/gcp/dp/shadow.json', - statebird_config=StatebirdConfig( - batch_width='{{profile.frequency}}', - first_time='{{profile.date}}', - ), - workflow_config=WorkflowConfig( - play=True, - ), - timeout='PT4H' - ) -) - -jobs=[SimClustersIndexGenerationJob.bind(profile=Profile())] - - - diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/simclusters_index_generation/engagement-event-based-simclusters-index-generation-job.docx new file mode 100644 index 0000000000000000000000000000000000000000..43c347c9983c3a0df968d13eaf14254058ee93ce GIT binary patch literal 37262 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

5Cf7hb=v6%Q)j1db2{1WBj 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 AG5`Po literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/ads_user_tweet_action_pair_generation.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/ads_user_tweet_action_pair_generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..137a157919468bf2a18136edad96657dc2587228 GIT binary patch literal 37129 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/ads_user_tweet_action_pair_generation.sql b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/ads_user_tweet_action_pair_generation.sql deleted file mode 100644 index c5f1e702a..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/ads_user_tweet_action_pair_generation.sql +++ /dev/null @@ -1,38 +0,0 @@ -WITH - vars AS ( - SELECT - TIMESTAMP("{START_TIME}") AS start_date, - TIMESTAMP("{END_TIME}") AS end_date - ), - - ads_engagement AS ( - SELECT - userId64 as userId, - promotedTweetId as tweetId, - UNIX_MILLIS(timestamp) AS tsMillis, - lineItemId - FROM `twttr-rev-core-data-prod.core_served_impressions.spend`, vars - WHERE TIMESTAMP(_batchEnd) >= vars.start_date AND TIMESTAMP(_batchEnd) <= vars.end_date - AND - engagementType IN ({CONTRIBUTING_ACTION_TYPES_STR}) - AND lineItemObjective != 9 -- not pre-roll ads - ), - - line_items AS ( - SELECT - id AS lineItemId, - end_time.posixTime AS endTime - FROM - `twttr-rev-core-data-prod.rev_ads_production.line_items` - ) - - -SELECT - userId, - tweetId, - tsMillis -FROM ads_engagement JOIN line_items USING(lineItemId), vars -WHERE - line_items.endTime IS NULL - OR TIMESTAMP_MILLIS(line_items.endTime) >= vars.end_date - diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/cluster_top_tweets.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/cluster_top_tweets.docx new file mode 100644 index 0000000000000000000000000000000000000000..c2eed43159ca10cc4c2b3a28e79f9f279a98ab7a GIT binary patch literal 36880 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 Q!55}J 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 TIMESTAMP("{START_TIME}") - AND TIMESTAMP(dateHour) <= TIMESTAMP("{END_TIME}") - ), - - flatten_fav_cluster_top_tweets AS ( - SELECT - clusterId.clusterId AS clusterId, - tweet.key AS tweetId - FROM - `twttr-bq-cassowary-prod.user.simclusters_fav_based_cluster_to_tweet_index`, - UNNEST(topKTweetsWithScores.topTweetsByFavClusterNormalizedScore) AS tweet, - latest_fav_cluster_to_tweet - WHERE - dateHour=latest_fav_cluster_to_tweet.latestTimestamp - ), - - flatten_cluster_top_tweets_intersection AS ( - SELECT - clusterId, - flatten_cluster_top_tweets.tweetId, - flatten_cluster_top_tweets.tweetScore - FROM - flatten_cluster_top_tweets - INNER JOIN - flatten_fav_cluster_top_tweets - USING(clusterId, tweetId) - ), - - processed_cluster_top_tweets AS ( - SELECT - clusterId, - ARRAY_AGG(STRUCT(tweetId, tweetScore) ORDER BY tweetScore LIMIT {CLUSTER_TOP_K_TWEETS}) AS topKTweetsForClusterKey - FROM flatten_cluster_top_tweets_intersection - GROUP BY clusterId - ) - - SELECT * - FROM processed_cluster_top_tweets diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/combined_user_tweet_action_pair_generation.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/combined_user_tweet_action_pair_generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..6812578bb05a95bd65170fd22a8069659833968e GIT binary patch literal 37663 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 QfpV1~Ln1JHtmp&r02D-4+5i9m literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/combined_user_tweet_action_pair_generation.sql b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/combined_user_tweet_action_pair_generation.sql deleted file mode 100644 index ed8880c11..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/combined_user_tweet_action_pair_generation.sql +++ /dev/null @@ -1,68 +0,0 @@ -WITH - vars AS ( - SELECT - TIMESTAMP("{START_TIME}") AS start_date, - TIMESTAMP("{END_TIME}") AS end_date, - TIMESTAMP("{NO_OLDER_TWEETS_THAN_DATE}") AS no_older_tweets_than_date - ), - - -- Get raw user-tweet interaction events from UUA - actions_unioned AS ( - SELECT - userIdentifier.userId AS userId, - item.tweetInfo.actionTweetId AS tweetId, - eventMetadata.sourceTimestampMs AS tsMillis, - CASE - WHEN actionType = "ServerTweetFav" THEN 1 - WHEN actionType = "ServerTweetUnfav" THEN -1 - END AS favAction, - CASE - WHEN actionType = "ServerTweetReply" THEN 1 - WHEN actionType = "ServerTweetDelete" THEN -1 - END AS replyAction, - CASE - WHEN actionType = "ServerTweetRetweet" THEN 1 - WHEN actionType = "ServerTweetUnretweet" THEN -1 - END AS retweetAction, - IF(actionType = "ClientTweetVideoPlayback50", 1, NULL) AS videoPlayback50Action - FROM `twttr-bql-unified-prod.unified_user_actions_engagements.streaming_unified_user_actions_engagements`, vars - WHERE (DATE(dateHour) >= DATE(vars.start_date) AND DATE(dateHour) <= DATE(vars.end_date)) - AND eventMetadata.sourceTimestampMs >= UNIX_MILLIS(vars.start_date) - AND eventMetadata.sourceTimestampMs <= UNIX_MILLIS(vars.end_date) - AND (actionType = "ServerTweetReply" - OR actionType = "ServerTweetRetweet" - OR actionType = "ServerTweetFav" - OR actionType = "ServerTweetUnfav" - OR actionType = "ClientTweetVideoPlayback50" - ) - ), - - user_tweet_action_pairs AS ( - SELECT - userId, - tweetId, - -- Get the most recent fav event - ARRAY_AGG(IF(favAction IS NOT NULL, STRUCT(favAction AS engaged, tsMillis), NULL) IGNORE NULLS ORDER BY tsMillis DESC LIMIT 1)[OFFSET(0)] as ServerTweetFav, - -- Get the most recent reply / unreply event - ARRAY_AGG(IF(replyAction IS NOT NULL,STRUCT(replyAction AS engaged, tsMillis), NULL) IGNORE NULLS ORDER BY tsMillis DESC LIMIT 1)[OFFSET(0)] as ServerTweetReply, - -- Get the most recent retweet / unretweet event - ARRAY_AGG(IF(retweetAction IS NOT NULL, STRUCT(retweetAction AS engaged, tsMillis), NULL) IGNORE NULLS ORDER BY tsMillis DESC LIMIT 1)[OFFSET(0)] as ServerTweetRetweet, - -- Get the most recent video view event - ARRAY_AGG(IF(videoPlayback50Action IS NOT NULL, STRUCT(videoPlayback50Action AS engaged, tsMillis), NULL) IGNORE NULLS ORDER BY tsMillis DESC LIMIT 1)[OFFSET(0)] as ClientTweetVideoPlayback50 - FROM actions_unioned - GROUP BY userId, tweetId - ) - --- Combine signals --- Apply age filter in this step -SELECT - userId, - tweetId, - CAST({CONTRIBUTING_ACTION_TYPE_STR}.tsMillis AS FLOAT64) AS tsMillis -FROM user_tweet_action_pairs, vars -WHERE - {CONTRIBUTING_ACTION_TYPE_STR}.engaged = 1 - AND - ({SUPPLEMENTAL_ACTION_TYPES_ENGAGEMENT_STR}) - AND timestamp_millis((1288834974657 + - ((tweetId & 9223372036850581504) >> 22))) >= vars.no_older_tweets_than_date diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/engagement_based_index_generation.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/engagement_based_index_generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..760c4870c66d04eb27206fb8b0be5fbd1895453b GIT binary patch literal 37820 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 {MIN_INTERACTION_COUNT} -- Only generate tweet embeddings for tweets with >= {MIN_INTERACTION_COUNT} interactions - ) eligible_tweets USING(tweetId) - ), - - -- Apply min fav count filter - user_tweet_interaction_with_fav_count_filter AS ( - {TWEET_INTERACTION_WITH_FAV_COUNT_FILTER_SQL} - ), - - -- Apply health and video filter - user_tweet_interaction_with_health_filter AS ( - {TWEET_INTERACTION_WITH_HEALTH_FILTER_SQL} - ), - - -- Final filtered user tweet interaction table - -- Read the result from the last filter - user_tweet_interaction_processed_table AS ( - SELECT * - FROM user_tweet_interaction_with_health_filter - ), - - -- Read consumer embeddings - consumer_embeddings AS ( - {CONSUMER_EMBEDDINGS_SQL} - ), - - -- Update tweet cluster scores based on interaction events - tweet_cluster_scores AS ( - SELECT tweetId, - STRUCT( - clusterId, - CASE vars.halfLife - -- halfLife = -1 means there is no half life decay and we directly take the sum as the score - WHEN -1 THEN SUM(clusterNormalizedLogFavScore) - ELSE SUM(clusterNormalizedLogFavScore * POW(0.5, (currentTs - tsMillis) / vars.halfLife)) - END AS normalizedScore, - COUNT(*) AS engagementCount) - AS clusterIdToScores - FROM user_tweet_interaction_processed_table, vars - JOIN consumer_embeddings USING(userId) - GROUP BY tweetId, clusterId, vars.halfLife - ), - - -- Generate tweet embeddings - tweet_embeddings_with_top_clusters AS ( - SELECT tweetId, ARRAY_AGG( - clusterIdToScores - ORDER BY clusterIdToScores.normalizedScore DESC - LIMIT {TWEET_EMBEDDING_LENGTH} - ) AS clusterIdToScores - FROM tweet_cluster_scores - GROUP BY tweetId - ), - - clusters_top_k_tweets AS ( - SELECT clusterId, ARRAY_AGG(STRUCT(tweetId, normalizedScore AS tweetScore) ORDER BY normalizedScore DESC LIMIT {CLUSTER_TOP_K_TWEETS}) AS topKTweetsForClusterKey - FROM tweet_embeddings_with_top_clusters, UNNEST(clusterIdToScores) AS clusterIdToScores - WHERE engagementCount >= {MIN_ENGAGEMENT_PER_CLUSTER} - GROUP BY clusterId - ) - -SELECT * -FROM clusters_top_k_tweets - diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/evergreen_content_user_tweet_action_pair_generation.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/evergreen_content_user_tweet_action_pair_generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..74089d12fee6f5acb1879eaaabfdaafd30396e28 GIT binary patch literal 37529 zcmagEWmsIvwm*z(a1HM6F2N-b+}$l`<4)tj-5r9vySqaO?iM5v-2LB~nRCv}x%a;B zm)%cS)%wX=yQ^yNE=3tgC`>RgFgP%_bZ*T`<-)ima4@hj7%(slP^*p@z|Pss&e=fK z!`{qEkICKErZGuQVO1FQ%h?N7GP59wmlz6G*^WJpJwqIxcy-1NkJb|Ni7dp!-2`8l z+Kgfd3{zZY+MN&4YMnrrcN3M4nD~jFUZzGq8Dz0{{`yy@Q*-V;i8xZ}MX6oFxj~qk zmQ3&W(_G*zyEXlM2I#?OqPf}uNtzE}(bSbO>gdEn!Enj~W6+`1`7_*k9pv_^%10yA zyY!#;#uQy&CVbt<9>n}4vR{^%sMNEpGZ5PRc~Zj+&($Qq7&gQYIMupN($_m$s5#WF z_7)<$4XQPXFH+h zH-hqoQ%$H=xm_eCd6b=(`_17;3}yY2OHX1^51) zf7PATb7#?>%WA+^6Iq62TAi09!UDAJIHM=8N5tat_u_)R&x^(DdqQJ(WM7{!<@CW6 z|4~H`DjDH>Q1vz-z`zhep9YR*Hcre;zps_?lb;}2QT@&YB}OQV?V8lY3zqf859JC3 zdr~J(i|l|>MJrvMO5%E&*u6vtXS*im3mN(NOY}uHff~kI^8tB_y_%b}7Y*$OYjDZ% z9sZ>5syjhiHt7*JLh~n8yJH+wDqSmB2}W|26VPk$R$Cg324`d&NLb> zK8&*f7=WZ~6K8mFW$O4WL$ve?#4 z?6${t#m_qB7fgqNVhSqy?iANBlO5;-JQfWfif3AOKkhS9kWXrOPMN!G1SfbO#qH&zi;xa_;LAu z7F3BlZ;3fM^{^{cI0GL49XEkF%Fl7JMdSJrPQH?+|LTA*C}| z^<)=9`N#+AI63CNOp#`_C>P}&imIT=Eq_rLj;CoOMh|~4j<^aZ3E?sSEa46bGV_yinrQ?wCY^b_Gog+>I)>)Mhg1% zanMkCKhun+28NB`#PtFC9SS(Ruu__`TZ=l|R``jNqr>L3E2LieyXKI0$jR^XW=={f zgah*6)^uDq00V`!!*g>xYm82menQTsE$lTIFHPe-)G0>5%=J9vVK)Jb5csUbyXy-} z){I1H%wmyDDCst-?+jg&Uk~ej-#)&+Um~Et=e~f#J+eU7r=4{ZdwuS^#Q$equ2)xa zjzM*?fdT_V{d--E?Ct+3i|V-DDhq1I6FrokbGRj}h!Spmz=Ft(*g9TKd}j097}=*d zs8-e;pwB}n7Vj74n=t-*{-=hqr$rHS*arE}YFOhBUq=)j))5-3!-w}*ClAP+pvs_2 zvD63A^c)PP$13Mx7~!4MG!(1GyvXW}CoYI!?VS|pr=3@jg*O_!irVGvy}v!12}}HP zt-T*OPf~1L+DKJmQ3x-Ge5w9i?ol!=!1;0a=140!2?<#e!svw^YTTpTl4dzn5=V{% zpVhGQeBv{d6{45(O`Yjav|I~Y9h?ude&CoCYzYIu-ALM(XPwfl zg5iWW9M_Ym)Rk(4UPhh7c58|Z=kjtwzKGF8j(#UkvN8hnUZdq``mZ^}w%pd2^2Z{} z+#*9g@{2A#V~f+Rh{0+T#wIkSVffaL0j_>=^Sn!_yoA&Q55N5Jw4YUjktl3Qu-t}5 z;WITOC{a6JQ~qg(se)9XYKWR5nefS&7@yvR_Eh8GKx|Q4PhKYqD~A&g&6RRH7}yHF z2cU*dv=+cs{OGE^Lwxrc?**0V!j|=5>%m0;@yHE^2iQ^%Pn2>3Z}T!5IZou?VzZf& zBsi(DNx>hIiKFIaqY#%euqrK7sPM6~BZK*wndlro-QA-7{m^{ivhn!>Rrb5MA#IRfE@G^& ze(*Jc8Q6|f!?)-bzdco&nnoQVkKLo9joKri90XAbhEVDCynA#_;uJC8zdED~CkHZ`y2!8|18pT{^-1%! zc2J!>!E&4BcTNl)7ncY=J1kG--hrnnyvL?WIbXpX21_lld2hzw?o-L(-m-?!>eTBM zv2L1GA7c9$`-tE23u*%vn5yt;hu~oyoqtTgRXmi&Vhy%WE=z~v>Bp*fmgQ|!yL+nb z$Ha=dtcF9Q?~&KGw1@<~DI;{ZpM5QV85#a6%;^RH6p&pj1%Fd*EDVMHF(9rH+`X6{ zT|dH_s@q&u_Z9hDQS2T^{Q@*_U%?f{ub~Lr;#v-1v4=O9oooLSP zE@a=g$!$Tn%r8k|pFb$NKh=VBW_%9fg`f^q|F--C|J@|bUh1QNC^lSm?*ThUF@;D~ zx%y`Uutj z6d6+FPF!I-JjQBbGpah(n!)!So_QHG)YVQ|My9DHuksn`(Po+L(MHi9)SMzqfAXfV zuix4Xdu|Fxr(RzuRXeX=MCKLC4WABpzg4PlrT70Vj@xwi)EwB7q>KnUD9N6NC7oGR zDY>$(S(lDBpU*{r2{Qe(&Owo6)m~GCas36rQ#@JjyR%P+1?035t;1;w|3a->p0XNx z5|W6$i}?g^8nkinrHeOtS))=Jaw(Ob z@692@+#!J3RLT4uJseFz9KFlNmZFQ54BXvXBj1{WGjP*qrPxAJ6tLRY;HiBu5xBfk z7Xu*`%Iq^vGZ^(5=s_L{i75j0pA4UDv*-5xn}{idBv&W44UGbK{A$e64_E^wq*1GJ zJI;IJm@5fT-Jw4f#$0X^kih-gkm0q?1@3WGr+kR+9b}DWJ0FSj-rn89qhHKXL6ne+_PsV_YULHp8K78iP^f#BY<-Z%NvOF@5dgvWRnK2HvOMNge9J2w7l>vfIDa2pn<$YtUrjp}yzugJ{k7>NU1_G&Iq9^t>7>CZ z{+EEjv1{Aq$7LI%H&_Mk7wv-|KV;F!Q|#YX*;@bykW^jY`lVrBEV7D~H5)W9^)PZB zfdMfKew%kA_{>l zxL?j*5&D7?FpKOW-v9ba)lMf_UFaPwxe|XXwzsLXZpt9Go7(G2~A1xm_sPra0yh;=0iJYP*OSLf0PQMs9u+N94F2cHtrzZgj=zyq6!WrRpP(Yace_piOlRB9V=Ju5RN02SEM|`o;i0TcR|&EXem`l=V|6`~IN&J{@9YH&A+#$P zSxm6QOQ>nBG_LXSSfKAb72ThN+7{bsr9^$-a7~71<$9(XiuWP#JM%wt9aWCaAHfU; zrmqGKhVrjmJ2`vUm^uAkJwcCT2|JQ?KHc44^9`PV*v1Bd4NuvD#k&$1d39#jp0UfZ z&;I)M4d-*riGeRAsW7pcvYPs*viLgwzHDqo+C7b|1XZ(_mmJ>?n=_yRadgJZ={k3R zH&R!t&YAjC@#N`MI{^5C>&^eLf9kG%nw`A*V)t^IA+$IQczuX@dw5zri!K&wKHk;4 ze^|e0PnmCjI+*==(;gDCd*ty__uQkX?}Iw(=A-+&0Z7Gk9OC-d$oV#{{EzVwD zNbzDnuu+hx-vYRtJ?y1r=elV0McybkW%8&-=u{}{6){9Tlmk20G;Y;N^_=b4fK6`O`>^8n@RsVqd z2?^GHImo0l=OjAg={)J?(mkD!d;B^A=*Z~#!s|(Xl~BG*>*CSnv9cy4E*j$-%>3H5 z*45rzF`hKY>TBD+=F_FCbJq28Blc*noI=#^u({5RvI$I;AoiBZJ|TS@sD9`+?yVl5 zr%JAWcGeC7qNP*fIk&@io^Rl_rw9Q(B2?SG`A;xNtHWZiYfzvILr&58rbFscLaM8T zUTO?{w1j+kf|)zoW6Xkad|zG<`ptdeUar?)oYQrmYkxyvh`gm2gKzDj1XQ=i(jNNE`MBNq>ImsOaCND>pOB2oQMOA^Se1$U)QF8M1P8=@ zLTSB2XMrxRUDv}WmV?v?`l=6M0kf*WuUq6vIW#Ted(;R-ilC-mdLgA60O;F3!^?ox z`!~J&38^JmK|A?X7c&Svx}r9Ulg*co4-7)Y$<@2`rz}D6C(%y4Hjvul1rfKHw|CCb_3DAgP&a&)? zZ4M7!)Z}x;c{+JL|7lB~Ni_5w%^QpK7Vf)8nu)~V^^GM zN#QIuFnbK(u8RCHgFIA(5mq{ANf2!}DzfsW;FQVf(F5$`oBc>Kf9UbY#Gw{sca#Tj zQ3AlVct&-EQROeOQG*gXphp-*FR^0-VmqJo2~*7LFoJ0Jx#>hHo_@j-f&Q9)iY8-6g7ATs`!L`D)gY7a!XKUB{pxHY17 z{2ul1rUECihAG$fE)4x_K5^}Nk}e{37oW2Sa9=H7ZQ_OYq@GU*68rXc>t$KEYULw!^ixaMSpO@UPbnb^{ zbE>!9tAEZ5Dje+XkAB_0kJ=Q{YrYXDj<(xjS{6>yjXvXy!+U$Oe<#N1F>Q#-uvSW# zxjDE-a(fDNUCMMr8eHvS@*U2RvORW;KWP0m5Duu`@vn+OEw%BX`OtUu;K*>~@P6fd zlYe2>mb;xf<@g{DdwTqb2{)qd2CJMak!fdO9^NLQ{C=2Ke5XnA-Y)CI+n$fo7{VFr z^OcLQx7%4u0tHIphEr(G!VRO!Dj~&KTcpNP0(QGq9r57qOj>A*+w+=g1b zkNWwkDX+@Zr9TNXYhar%Ebu2qv|qxSR7R7a$?*|;#+C2tc`n*wpkyi$$I%y9-bZ)E zAsL2Y)zvR@(30XpJoN7GhHU(KK62GlO^)y?# zRVEPdt!n=18Kb+~TgmT&Q~Oy>{Goy50SWMgRfA1`6A#n$3CV`^{nAmoKYn?#O!_Pn zXK|FNe7oCzkm#?gqwEfWDGk;dmk-MCYlx7+oTiVTf5!GgU+Cl)O^+%Uc9Ri!yJZ)A z1!$Qx<|I*l9UH$7=A9x6op6k+&T`pVzjlF*|@*^I6| zpogr1(<+C&$j!>97{jpk?C8W%#9mI7tSWx)qdDDRoIbc5cC^yW3D`JB#Qk~1rfE48 zkh>SFkoi`-jNR?7pg%`0QsRBAW}m!W;>Sq~d_`=1{KVGQQ{A7=x}#%&!Ry`=qaUD;kX&hoQx&C20}Ib9OPRoyt)+ zPP5^sTpSQliAN@pg29m97>l@O3QFEYKii^)wH7geY1}3*au>j zoN&n&3F@ZxzREEWZ!Z$kc|&Q5JkuufIzjBqU;(5RGHyN0`mY@Cc=?Ks1hsTx_@gAJ zH76>i5pVHw)|=K0`DlXQMSbvMO&FNg&k{fKy4^PX{;hv{vuTxc_3SKuFK7za|McHRQo~5#yWA#CWi@Qu4Ig09^xgkpIo?GI> z4}+fh{poGDa~O)jtC4g(GjSzf7YpTfwTYF&{Hik57X2iggxM|0 zzKe_2^e#!|fkR7gnz+0xV_~*It3dYK>d3yRG=21^N*>X=of1U#3SaBwf|E7n)mEt{ zr*^~kBJO2rZAV?JQPz0MVZvsLS4nPZcKJ_}JR)qn1&HQ07WHWb0>y>5nPkgOE6`q6 zE!z=tvDl*?cOKDgGamczYSE+xD>jJo5^ek((^6~Hy`H7~UL%9mzNP}j#_5YVmUVvfxQ zSX_gOKdY@s|M+D@t$oxmp5dw_{YoT~?#x720LxR1o?5q*5iGrRw$hhlIL8j4IG=zt zGs`;hvWl9^%2AIS34{ERJ>@2?b)xcA-P;F?-;thP7OSA7ET(fAR;g4;!Qr;3U$xo6 zjB{ng%Cr=^WAAb^LZ<(+1L6DRgcje3-NzIX(whcmS}x+WB8Ml@ADySk(EDRHBEB-%m9C^pqVoB zef;hKdA&W!)G+Yaxiah<=<}SH3rtu|#Dt_3G^63I4XVYYboq+Tk-7HiITAxYWIUaz zx0;(7hkaFpxN5f`pWU3U`&ai=N_#O%Mt9ZYd;MK@;76VhZ-lsLg4;aSgUu~F_?wh4 zoUAN%MUM~mFW-tMx7`t9#`AQVPF=vu`8`52ga*z~( zwQqrkXi%N!lT(dxYSpe!ba_tod^Ky1kI{K}XLUo;m6}DFZ+);5L8xmcU3&2HdaiLc z4;gH}ITi0HPb=O|@NG!&T->Pw=8)B#N*m*Txx(fp&ObyTeyc&ofz^?*IX_(i>~gQST1m#@ZPjA(pyRW z=$^9<(KzQY4ZQlo*m>M_40+rpJz>N_=Rdgki+ZJRtqf-H%K|WG@U4plAvhm!p_|Bg^ z!-(#XD+J6W5#R8&K-jEX1Be}ALPh}?)J~1nhe&E7;fJ;qUp6GEzH)ohCM@>-x-_!-fh9B23;t1KbWHRNo`8yu? z51SX4_;goJ<~hGpR4{{our(}2ytYd$VW_1FS(OEra9hmVlqU-2>m#`5 z`BBfwIE4~1sa>_{*AYgas46m7r>NuI^x<2g9jTp!XJ$W~;YB=u}j?JP;L2{GljoO`P7-wz9P-A&0QxvT3-6K3M1L3_`>c!lCJx2gD% zl7tDC2BjD1#wQs_pph{-ELC`RYLNW4PP{QKdL^D;Ar{HXZ;5W@)JLWaMGq6zQb(?y{>!nfd3WI3;19yGL{=hM|(EaR|#YuDi{bu#fq% zDtj$+Ds{FQ(sLR(froc|c5N7TkJ{{nQ={avxppg$X%fH%IU%vid9`busEw~1fTVD@ zIRFwHT}deQhbq%ZWnWD?qf~dImaQ?~`D$gwwbSz&kK{SC0|!Sm5SJ^{#Swnzw^yoA z3`?0S(+H6WbPxzJ^zRGjm~z62s6KKx!%sMZrW?g_=8mePVrYiS50D4L<4`-;_W* z($aMnRYh)r5-n>m-vB4oHA6Q)yL50w4-r3Yx#Q%53GNYsQ3P_;4_^wWS;I>xPw^i% zqwxP?<8}G}WTP2z_vgN#UW}_h_*`6Vr42=~`8nyx@|V*M7Wn7^$3-h&xL-$o`mBWT zz1AcsiFV+{^?2nUgKwZP2{l}21+y6CBv1nLGd3|46VBCb0@QbFJ3)je@Fhkc6nPZU z6#JjfhD{5!&MkGIC|0Fc+R=rCxlekt(CThcZ#KY+6V=gOpH)XKt<(uYR^CD2rRo2XkLtSNnS_GUmaQ>FCS`r z5sl`2IuR*pi14F6>N}9PA`fW<-cyHEPu)=>7NpZYayG!ltmzossaJK9Cimuwsi}zs zLAtYs0@J`VyB6M20%$BbFDCjDYmgPbB*dF~h;s6_GANTI2aG5WT`e2-3RIw5@Aygi z%MzmU`i(-8!3?PXfJQU;iC~a7VnfY#901m8;$IIdd6(82n~%SBIADk;^rXj)oWC4) zr(Ku2(|h~@8&U|Er725_&lGUsJz?2kohL_%N}HQ71?EWdF$a90C)z#*Tb!YYp5Y5w zebz`tb!-~%B8%6KS&r5_-Zt=Pc?QW%$OQaPhUtXM<&+V$*#zSztmjuIVS|`;+iUs^ zRGISrTq~FmaS&;uB#vMzaN_Sm2S*UeuxGKb#p0IbO&6dc9AVkbVtyU5N05Hx?wJW2 zJoMTzQDKm*W`}JwWgW~vb7z17f)UlGigIPbBrIpD%sPB4LJh_I=AQt@8;d~$ZY<0o zsgGKlT2+G^KH*AM&x9JwuSMpyFZDN#iSbkI3?P|>srBdzfyVzg;!ic9Y7Zz}gCf2&j>ZUCw5hyAS* z3cNPec)0baH_N`M7>+H1zZAI36Xb}0!y9C%KcNW;W2mOAhUPm7bN)Cj9JrC2+X+{n zlm8&Da&(kJ6=|$mRcgxaRRQnKfyLbg!Cu-kd$;}}goWAJJ#|WkT0P|7zip*sCazI% ziyW{aHP%nIOAoOspOwK2xh`F|mhfeC;i|fiRFsx<(N#E6iA66o*$g(wXkgO2=q3Qu zhr(&|#(=-}U6uHQQ&e_ee!T|m=S=DR3jKNppEFsKeUncRXpS)oe#id4gR1G6;1 z6=sXR`b+y$yq1lbK8Ep5hUO4;mu2SYx7{RM3&t|aDe27mRgyrSVqlxbe&)P^O<6NN zHK;Lx$6`@Ae!$e$aQyR5CMam?&mf-v8I&}+$9S`UIlvp{gnsawDzyU1=3FilWBh)A zH;VneX9xO0g+$};eph@`)Pp&NyRpprOByhl7aFjg%s<*0DWzo>V46&*r^3v#1`swRP1ForR8BCSO~O-bddj}JvrW#i#2WWLkr zJLQyCgw-EPxJF2(N^?$=crEr=@sl4}@&BVRk8q#RMK}{<@=t}X|5M>*=2ggK+-3!r zr&6BCNy&T1QO6Qp*vo;u?~Eg}RR!`&^JzfTIw0{54*x+^~iIvDK!G1Kzn`jv6537jYIa>2`NQt={ zWq1tRx5`s}=9 z0WTHHTdSuUs2lZpL-^)(bL`|EFI#km-eAgBpkA70!#1ftFGDYSzfst4YMDQ%(LvO( zGQW4<6RjHyNXdqOP`jFrgQ)qr{-pj+i4lSPe^6g^4ZwGVe*>qWPl z&1PWmcl$-E8PL&0(S9t15kc-As(~z1GhnYtX1Z8*$8l+88AzsUOxr5}_v?h!Pal`y~eIe&*e zRB4T4?ljQf?DTIHxNl%@L&ze0YdakK^!4U`aVNF22&%Z?i9r)N{AU!PHgU*jDOZGU zg;#wx-&d|PtMcf=t!Y1&!J=$q7ED{|q)}FZ(8aBPRim*J#h@V zwx#$ql#NB%K0fv5?<#5^^)~Fo7k~!nlhWER2xRFnUoEi=QcLf?kftwyr&E1f69JxD zmzzMrU0=7mMT>CAEj$m274uo9o33HV&4w1iFHNaVa?8&a6qiM}b!>A~z6i>t&o(?_ ziE|){&yIPSX&rUeg%-K^6~S|~$K^b&9OXhn2)vw9nxo1kaCTpOE0s^DdVeQA%kk9` zqKRGYDr%PFXK7hJ6M#?7x)YFf%2DYGjV1><({Q=rpX_-i{MC{$*Ail~`^Q076JNN$ zutK*NJ)Zci=_KHTb6G->^pL;|N7UzZzZ2Pc?_CZ#&$6SEaeVpNm9yPaUb%7u5%F1J zj>?Xdvce6Sq|e&0pVNie#d`wYlKB|=Ts^Pb7AyYcQTwiFbntIrS6;KGf0+EqQF+rf z)Hd6&@-LGzI!B#_VSkzoN&0P)2l2PbPTT)KlRR?P-P7&+9F;(jNsJ=PH$I!}7DA$Y z94tKk=nNw>DhC448|AvN)xDkNlLPRUHEKr4Yl)-=Oeri)Z7HUZdHVfk&q3U=ThptG zPn!ltjt}lYt8YrY5MsSrGpMsV6TCWbkZ=fIOQxtV2%bwVgMn_S08BXOvUI^5Qh(1` zi$0iOKjLYNKJZ+QVFXaa`79D+5Q%0a)@1HX?$e>v81`|3r>sed7V4>229MkDCw_*TVvMk zUkeRsMku|AsI;gZU~!N=h^VY29bh;VVK_gaZ=jiJICp=t==*uR+lIbv*2_Ma#O~8y zpwbuaRO9UEIT=nIL_7z|2H}Lu-3N@?Oy$8Nv;PvQd<9b$wzUFxB+(-QZ8O}#nWWH} zM-Y$T^%aj1W{f((u5kMhWtlTzuShK#DaQXJE=uILINYFf(F^O5QR6M%Up2(6{X`8w za1!X>7uY(`1*QoI&LHLb63~#_wFO;xGD7SEp&xPYm|%MxpL((f(#lYUI=9rF2F|mT03AY&4i02DS$m(}yDanu@C zoeXK=u+Uf9^<*v;3ocWOIh}A>(4WKb_Np}|bCqYe_@`h$GrzgI$@sMMU$i5i^HZn3 zJ6Q8+68=KXLQ^83a8nZt{4k&2hj$(tO~2|;Y_*nc--+Ec)!cjA(Sxvrco}+zwn^Sq z9EBEombWyR@kBlqPPUF~@MOz5$D2d<2|NbTHTJR5j_<1cUR0se0iLxRnWcNski(t_ z%}OLKrzba8l5W0V^sz`a2EjUkjIYW@BeBfEtM6I+bHI0qD@3ZU1Ft>>>4|ADdzp#q z2uYIt5EGp73@@jPh7GbS>u!;FzAF_8+AW9eLjRTDJoEq&v(n~Vvi(KyeeSI31M(?- zSNySOC>ZF*mJ%ZD?=xRLRW%_IXB^C))KsHZarPIz`OCRdH)(zVe<4sG(}q2yf!T#U zxO{^fcvk#{euH|xRLEqm4TyVa+&q%cdMN#hdERm^(bH(X?!2$DA^S}kKqWO%4LJc| zv(K8do0SdXQ``q7FX#dO9ikx+B0nHC=e#9;qS|pSo245Y52LB~nL!9{2}^!K1^tR0 zYz_VD_$ylI!!}EI9L~Ls;k4{ABU|@vMsgXukXj-H5za4?n?I?r7nA{rpd>&}Os7p_ zBc>4Mk<(mZ;9@pRS9@xX2zDPS89hCV4=1f3XmHvYq#9f?ny)S&9Kfh-7gOw8fVEKW zFG`T3UWwI4a9_RjU@IKko?cmZzHsyj3Q7DX>YA>0t<0Eu9>e$6IYR0J<-qR&dbjl0 zo@_3dO~_wF1ZlWDB={Pqnh0w_Ue{T7`E*-t_crLE@f$-&)Y+;u zG7fuX^T_jxkd*LW`Ll;D)jKX?>%M&PIk)whH4n{JYM`}V8|ZXefL5Ze^%uF8w)qSf zjE?_4IoEV3Sx%YEeui z<@o1gnVtA7VJpyu@vGWq^`wN%vlM3qp7F-WgMtAu=q>b?w!$zO;@8shGTL=$y&{DV zW%32{aa=#ND%sr=Ya0V3LWz(o4&k#FOv-Z>#3%(np{nj2yN6XLu{$`6Jnq8^U_GD~ zU9XK|EaT>~<#cTT#u69t4~j)|N`nQj2}-JQ6iZR&msEeTyF4nnkWb39lW$sOO}bUD zg&gf#L3dw@t=Qa%t(0tiqzym-5;EU6I%1|Xxoe%2B!g`iv zyw5uj_UZIP0G13Dfrw^f%J3~+O$Gh|95sLdOi7q2-TDYEgrow6^^9BX_R`^{ci#0N zq5v%v$z{H*QdrL_3@zl-xtT~?%{>KbRY3$E@+ulI=Ym|pFSHt{qzr{1sHzKt@i^$ys(1AY?ZpBB7wS#5oWXwp=lTyUvvY^V=GyN zi^bLS5O5VxN_4*7T{ogkj~8>oeKn;42pIJ&P*jODat!Nk5Lh0CjX|nm*#PaqD!})? z9L>zgsX>$|cB{dQtc~6siwRzKc{c;$Z3DKTdReDNC{g7}IwDBc9DntgF|(22Zos^2 zURPo<16+}jY>4`C7{Rl#SnV&)I4@ ze_(?ehL3hbi{|g*Z&;GMwN;m==FzVg`Tee6BHDqJX9MfM0UQ*51003@0bqaU7O)F7 z+zvN<(nA!zwCT=QktuKAVICL>VZoOjh99)ma&dczLIC)b*6Fv~GN$UcJJ^qlU{BzU z3fX%h*z2&pQSp}ooxqs^LMI5nEq6rg;SdZ9J{)eiUWeV28DgG|L^dz*VTYtru;GZx zctm@GHLA2f=?^&mqAxbF_^<^HGQYpw0%(r_Z{Hu}`0sF9$l=}lmuqYk0xCZUyzUO5 zn+GIjgh8w{qUHx!srbYsNeae1`@+++*3S4*l|n9=kCj^@GDV)}sfCk@ zN_f6b>3MWfFN)_8@{XLFQNT1zQlFEx78f4QsIJlhoA&kLdO^=7#Bu}XpdQxMNqQVP zut>#+^E?>OV!7h)ZRT0$-y%JaA$5-udiRVas~Ne6AaPS1>;iu_+2*}cAQg&GD0CQO zyurx_GMzt%phHmBUh+I*btnnzSvE)8Loc>MgLlLhRC7uxljyERCwuG^ZY;&)roz8t zSd3$1FM)u?z{T$AgOa2qDq=^uf}l4%15i>)%2wpdPH6K)u(qqfI2s%S{xt4 zV_~Uf%c}4n8hf7cX0rfrn97CP*0C|CMp^ulSgO#WRHvFA3xBcosCc)rpRDBBQL7ZkRuhaK12;)CZK}cs^ODWAlW|qC#;HP<#5F9*B{3=L`C`O8 z2W7-2U%En;taCpxBLkf&<=D&&2{%{Y3R#5K<85hW9@8N{u?_EG+>96>ZDOOx9NriVs{O^Xe zmYh-+ISFBvZ&G@H{ELbOM1>pqn~Ei3(0HqMn%e|qlP%SQh1k=^c%)73QC~Vc35#Fs zO7ne(2uCfOse1D9V{)3GE)D&-i|f=oKI20D1|w3hnzE0S>P4*dSDigbO9_fiSQZDG zX~MtI>5pmX>xWKlCaOl*@V|k|BUR12w_g-AzL$PyI1ey1HUkwBfRcRdA?T&TW-V&t zg0e7z|6o%$-lk@3c3DxeM3Ol?w&l|omPA_51};xFJqEQ!_VS0M?HFbyLRDxI$2EpH}$EWPR8e|FPmR=NXHp+h}9Ol-l%xx|OOxxT#_pN-G2BKK6a*coC5{$4lq+^~V3RRO@`yE|%JtgI#fF&LM?8by zIBtg-4qt|kTRiO;oUgtg_f0Y`TYNyo9-UJg(sjl}gOt39iCEs1Ti=3G(4Ec{0pEC_2G zl%?WC7LAcbWGqK+)vmC>TnG_pz1#q-IG1hR`6KP%v@_VI`^p7)tWT~v#d#3k$GjrJ z`oh83O&E7bbW2kM8MVhn6WG-MR)L7}r;6a7D?<5lCG{#Rm&$+x1zsfGwB~SRtXG$% z4;Q4O&vcmYmxA7nrGKAW6xbtWF3X4&H#Y<~mI`A&2KrSe`a7T{2@N6N5U%icevkoKTDXKo0&NOd4%6bFC|~H?&RqKtMO=1Av+n2badQj3LRode|+~M z?e<=#Gkzz0SH?Dp=?3ZkZr_5Imb07^!RTZTf8I?A}4 z0r%>#+ms;>&vW#Dlx}BSt+=nYEick#b5lajfX^Kp zHaNsN3H+ZtpP3|ny!gH?uItr(5U?Za+bbSiy#l5X@e-`Q)(H^u6Y&v$cyoE?->A52 zZ?E2DbVVtjuO5A&tn98p7ZaLTXrK3SG;duxv1p$s^J3#8l$jPP#9{M&s9Ci@hAkhS ze`(LWSvMF}>t@d0+~l8{EPbfD{&8je^5E^*`g*%bTz8kod(F!F@CvMbx$Xb8(sy^p zwr>AOzNi%Duc5x#iT!AI*XFKCXlHt1*)6-!WO}bsK3$HzykDD{w}X zFGQ4F{qt+4Zk>KX|FhF$`N1`Hdt|K`KA`-Vkq`w_mKgccn{<+L`| zH=E0cwY~D=Un+1ksV6#ZoD_6^r`Ka=(XYBwvHzsX(&>pS;(CSO{(M^OPCT0Sgi7WAy9C+s5uOin2%CIv*=- z0z+0&1$EG_fI3J{KpnB5jvC1pX#0Od5G=qogT18VcT?{C9`vv1--FyIZNUkON`9j> z{D%JnL9YV+T$EW7!Ob92f)ws=r)&sCZ++vYv{Ef2?!Sn9>Z=Amm_?zb%$p+{-9kLD3Fm%wc-`0?=9m}O3k#Daq zqo0EJNcVK8o~xx3I>3P5bH0p1jLqXWki*A}nCjEhbcV@0NY{q-501lk(tbJt1gu`= zG1KLf+l3`UfOnDBn}%-(&!-`Kds$+eU_x15#3 zyWEJyZsRC8ulMc`a3_vlKVR0ey0AWEwQoHAWU7K~YBvqft|EH3(<kpW81cES5UEbY}-af72CFL+jc5e#da#LN-B7}&bjx#d%pj@ z_qW}$($d;aAHDav*4$%`wdWe&`7bel{J;*A-}mC#!dc|SJ&86I%*(+5m9KXI;fQ&2TLAwO{tdYih-Sd)cdwoARM0JmV| zBEh8x!6Mjl9aLokViG@@Ii0T+7FcQ9+8(inEkH{F&Z!* zoig`gki#&!s^lJpr~^s8!DkNwWej^=4JS(nr;@F74 ziGtORh_WGJ24twjR!o&Wg(0X+KPx82RKj(OI^C!X%?rv8sNQmfVaPu=ly(idE#Cv& z_pgKmPx7-~-wyb4JPi~EdJmEW-W$dd-JI8bo?l<%#09gCeDAg277r#HUz>&Wxd`Mc znO@u1e{eGsFxn$KJS}l##H!u)DvWvTcKCWfw{PYeCzLo1iQ1YkRqUA}ZsS#Czo_ruzq@Ibb#x0y#g=5jzB6_IhI|r! zp=ZR+aM?OtQt9kX=n&;D~+;3D7k>K`67^ex;eK68x z7$w)K*g6$f=tmEkAR%|l_7z-w^PPK@jeLWkF@eP{#ipSjiv;&&UnbvWdWyRaQgeHg zU2wjc^xc13{o?7(;Jb_DfjbC`ak13ksUwi*5p!#=i!?gq)c9%JRrf^zvSr&9Hr$otDQ_0)IR{-)g82sxR1Zsy?|dP?I6EQk_HyiRw+*dl+L*cI>P^WbI?$ zjYDVwY(tzC%^a~GNK-odc;Nop_jT7&hYGA5;iHTeg za35IHnj4hR5;*iJ?XBODgE*}33X|v!OQJbe!a-@9a}~(99Ntl z5!wQK7wsqSX^q(((RE%|`yN4@!TaxKz04L(Mm(_3ZjA*)UU50*Unf6VxG5|!Dy9`2 zT(8|BsRjTh@XuGNu{_!g2DaPA95m8O%_c9_*yU^8# z@(t~{cOMV4l0s1hY|Z7IqSUS?>q+7|OW#R;m7Sba^qfqhN1f~WN?O13`O&g&?YLN- zi+Rt52kSR=G)P|8vm>;o&gMxs(}l-SkHwCz%Hy|ZyaV%I#WJqqZ|3|h*5?L%%gqza zOBK+QJHmDECb#ul$x++PXJ=@z`*$jYflBfQ*Vx2gI@~yT9p9b42b{6@+PhD*3VpLx zNzp(GTX%GMEIF_p@4QnUBlPG_12l^2dsbY;co0v?dZ_s7bUfuqsdCRyKDFu*LN# zs0BX0DA9^e2xaqje_&7ODU7YN-|s5sPAPxL$4SxVrH6kjdrEQe^6cKbgXr12L;n#h ziFfJ+WjJ${P4M`gg{&!@giqq}6epp`WC_`oBlAGmar5oP>F31Q){n7v{G^|sQP2;( z}kzn*JIU+g|7g@IhcG;HISa+*%VyXcf z%AOaaTpmF~Nm#drp9Tjq{obBUd5N0BOxf{(Gy=J=3akU9^J`$tQO%h-6sVWE=)62E zE&e*A8aHd zk5$z@S5r2GW%@E<=xIW> zrghsq^mBvlg8Ko>-4s{L_oVZ-L0>7jo6PNAMsu;Xt?wOl&x)$POm!C73!MN=PboID zJQ&GQI|tLrPEF2~DWQ`SFO_NEX{=(pD=7&!W+lJw9EQxcGp4e2-y<*Xv&7q*?`3BR z&6ax7X{BYz;#ZU299dKil{*q(BGxajE@7dEi?mQ#R|n2I9@yvcfQHc-T+_{LpZzRy z5kV>)Rh!_|qe`pe>{6wglx05L??=dDSFfcD-)O&@8eR7OF!P<>sPHRq^QIfqddjsZ zU8;Wp+lBw-mWk#6Iy(9mIQ6_M50*O}tKQmAKyd44*9!$)X@)Huqr-Rz4t~@-!gu$LO&bnCOQ@jkcv{E%r;s$#fTybDFvlirn z5Pp`D?HO`!W;F=8ZSs0^J9=Mk%LS3($WOh9Z}sfi5?>>3;yaI97o{41F~n^N_6A32 zjS*?*emh?F#Rws%s&jXd+}qaV19FR@-rY83k8@w>!5!Il6)^b$wVDt3*vy*f|7i}; z>MQT!&b}Jz3Gfz0(z09nOKPg4!(UQ=maca5MGr}H7~NSjf5EtpDH#&p-HwLX%(CTL z1axv=JMPPaKiNCFDgHj$_871g{Q3XS4!{w0pZ8_cnX{c63mH7X`vAV3dmTkjJ^rpr4{)n)HNcnX^WC<1Al$A_FxYv)W#^uW|sc_ zIZt$VeR_Qra3r>YBcXgfqfoWgJ6Xn?t?|>O(P|}H`j>rM+CW}hhd@*JKu4}a83&s5 z&t=Ze6r%khzY(SPc8_0oo?V`@tvTLYVY{1w?P>R5-y5x1Qrc#7`4Qu?+TvEvuB&P& zy;eoG=nGa_Q0zlV?IlcTM+3gfuTi^ufWYX0kY0J+npOkqisUp94H&$&4kn66sB=jx zD$S^g*o=m#Z5F8McNz0~(Dk*@^)q}@EeUz^@xQUj_nZ#$H!biF5wN%-HD8s0;xK}X zF6&gu_2)dU&@?)vdE49@0@u43s5dL8E+$b5LZWOAQ-DttPoZrq#ck^SI)b>g-7Qqz zoX^Fpe9GF~*&JD3^C4~KC2gU+hNlFU8#>@D+EAgDZR!~c0v9z(6zE}XsXf)Vsyq9O zv+-j4jVj2VlY2FsXEm5Nsk1e34mGe2@`7P)u?Sm;Cm?0|u6s3FXEjDhIDF9GpH@Jk zQv(XlYt%|5XT5ANI_CFk%$RKiTsnR|uv0L1UM`7#ck{53_p$-*ol+SY)Ug@VNm7um zCExQHqMfP0*7LAY_p(U`5B(O<+QSJ_WM)|IWs|bL-L#D-UirntW_=1zVVLQbtP$60 z+pLVJaePR}=Ao-aVEZn^0Z4JLX2L>qH9@Fn58-Mlim98EzK3%fRP;o6V;j$Zo{dGd zr)Bc+QOhBQ%;i&e%cWV&NeXtJZ>VWaT8@`gB(g(|v_p-5n-7@*kfMjp9qfTyagYPg zp1@-vyu*x)1ENd+9PeCf8UQxdH)Wut3JZ9CC zxy4rpyv#6Jt6bTR819QVCOhw+_1bTlNZY@Er;Ye=Z4jHoqAZN2!RlpSsYhK-oVqf6 z`bgFve?1zq&*LSiCej!owc0c~SN1(EScfgtio%qnEqF>&)hXb7u-h-3ggma1NEwMe z6RW&kyB%M9xzZ6ieI&(*J0l{w4jz=c7kT+%OsgZz;61%onBA|}rCKVIYYbXX2!h{F zwKG_f;*)z0ICD#0&LO$7U>0?w7OmuO=yuS9f=EMJDw|~ViGQ~H`FKUkqD=RgrD7yj zWxECdC4hNn1Q=l`4k3g-AfFMt_K&s{tB`_#h_bT`V=T@g9?*2IO|I6=5M2RSKwy?W zyWkzMsQY)%^n(c73yr&l!O+P@nu|hUP>Q3Hjq8Ud7KSEcm_46$BET>a(L`qI{6ZnC z*F&!_tJJd!@6T>@*M=N*uVf+W<#Nn35WM1$@k|fPnM8^xmeTM zVB&1hKE|MkM5&}Riy6*hj3U?@L6M6Y-jW9)t#zfk(usi>T0({9d!0)v@c`9Umf2rh ze)$X`oR5{cNE6loc4!w01LFK!q?TW7_cj!!@#WKJh|yq}Ur{|%(~b!%X2)$(ztNg> ziaje(0@^_bMuHYWK10But`)#K&f;v*t6ycR;gO-R7r3l1(6QXr*}fLkfm23Zc)EH7jea9tYvS08l;mx0E4Re zI-U>yR7;ryhYEs|89-W|%Qw&PjoP#?a}szq{P)l-YeRr^Jd&&ulHGWULI{3_pbCZA zzg_w%Gk1jj3UQ0ew9q;Iie+VB>>kCzj7f&VP15e+i1$DF$cRE1Q@JwfXhTZ8w;+-R z#>yG>q6BPsRGyI{wP=NyKUx15ad~QV`q0iI)XTW^_&jSV^B>OdX z=k)k=2dw+1Z@vPv0v>&rFP*2?WC8RL(2XewCzJ~Gd^!wI*ujDGeZ|$j&P6I~q z;ZT$KNpOghSxFJ-lR8PipM)og20@NPK+&C7EIUu)2r+p^+Ii@6MqULxwPygw_^?0`Kb)brSp^6x~X`s8< zxdf_De#q zV9{Z8acuK)W;1wfr*n+B(}+Nv5?=p_#>e;G3sv9m`%rB9YTla^vVI?{{)Ye&^g*Jr zD&Po;vgM3EBWe9E1wqF4m&{Xfx35;z&CA{+_x|IQLc}O`23BguF*csb>4pyro`-GS zj*^A-%?oe0@AS;}w7kb#jrW^UwnsH!A~5X}T-{E$e(-AEQ$79hqs1q8kGD~ew*dY; z1(|c%_7wc&rP4Z6fccaL8%@I={d&^fiy7nKMcC?2_$spyC7yw)wx)Tefn{`o!y*Zc zgvJSt?2fKmDO6qF(8b@vR(E<=e*mvwI<1>V$-T#{RUp$vqNm~R_i9HG4(ntlmW43`T>A{Nd0#Q-#Tkv=*2;Vtqey{l3>^OP>TQqYNwG0@l!8Ogg+1 zS*xK7hr$0u>0Biq-J{4%X7E@qx_Ozo5chZ+WBdGB|D)s_rQ0{D`~B8b5a!bp6ldjT zelgcqN*86~#|oU}=VFDC+|4gO?a=s8C^g4ZATryd7CTv_r~#ET0G?bFA5v)dx6?X<`J zy+e53=b=VKS_KX3FUsHCcSQz+C>}{VZoNeXwPa~P2jM{~wQ7{WYf!^aNPK=DtoYFS zCkJ&MX=Ia2$zo??ZDOKhORq?QYQ!-45`w4_8hZ(SOWgJ=`^}$S{6V*Jahb6MuUpz@ zCEv>O-mx;ZG>{L9W7({~=knIVqn;wy{52N@gC<{Co)Ep#@k~*@Jyyf@v_o%Rcm&!6~E9Hf~>A*;m_(Ph13Pn54<)1;XZ`xu3|xPOar{=bT`)ZqAS z)lx;9k)bc5OvV0NTbut}lcJMW9X2^(z-l3uM`8a>n2 zhDX!(j|JWaZ_OHC`L2hzx2b)htSjUuQzvN$s|=Qpb^Dg_+-Shq!o9*-$h3jr>HLtKR0+=+hHc6G| zOWkf8Au+A@SLiaVYAGmkw>srp8dvF#FFT z96c7%5U@TM*w7y>|CBmUZtDz}$-PrnRRld^)V0JrVl=J)#z;>DdURw$%KnYhIb?W;?qMh_1eGTR$)irq|y%cNzd(QpakEmVCK*0uG?o)&Qe7 z&t2SFnIKyw)Ba%;6Fa;!cjXU!wpkm=7$WsI9G6hZ_3`)%z>hF1eZIr-dB2T|)zlJzrMHKZ$aPim*%`yh$RQy8u|@6#DbX2)_c>?r0^jqZ_61ftG?lZn>F1R=sh z5p&7`5)2&$n8}S7XfbQ?BEE|UuNCly{oz@74$%A; z>Ihy+@%dk<4WS7G3z-5BIaoH@I8fo71Sr=xWRBIvyNvh=>111g>gQ`up5}xw8AyD02uNoDf?T?~n zkSgLL`&P{&<#9Nb9@jb26_(zo0-ek;uk`>`<(h30e z?L-@H%Ma5DPMHgl>OC<_&u@4IWcuoJleJNt#-dQb;4xT+k0whqST?FMEXI{-NPNS1 zp)!W@%ais|oHNMa!+1zAEfgz`OI&U=Hd&v6rim(RsAXT^D7UDk>K4&34C4WUQzJQz zkEm<%Q}nQHhC>mI5r^>@`_IS9vlv&(F_1@9nF(FPIivO4O1GW=H(5LkoA+M5PwE;0 zGIb=h?;Q4eS!daWdx#5uwrVFnH#}d0c%WG-3}d@lE7DXBXC{WRj%qN~??Nx%R)Tv3 zD?cGWw@A9^jSN;Y)o^`fc-ZtAQ%^~Dh1DwR6pJB!zD!*A5chdC53O-3N)$x;d6hV$t^IE<$by6QpQk1rW8s>u>n+g(&!ckBuLNH>4;)V2jmqhBj=H(o|RHc2?(mJ z-njCFbshxKvd+YO%Tf8NdI*><$|=372$RXyN)6QFn6M0R%Hmp4`H?SG(*AVjH=+`l zn8!Hfg$b&x(G~|8v!4cR^CSPvUv%oLq7y3OkzO?Uk?T`Z<;J_;PLdL*W$hoyXhbnn zrY97|DTB~dl_qjA)F|p{q%h4G1L@9Z%@8Zo2as{qRMSoJBPEnaJaIyscz;4P1<(O! z0=G)doS07vn6!-zL3HNKMYKHFe=@bcOEu;|Wk_AsY3Y<=6;>J*6{(Sbq87vc6O{xh zl#+O{J6t8CVORmNxSMQcfzA{2!Fb!2U^@CwKp%jwAtIXR71`7cD}zTqAs;oM8v~Jx$t_ey&@0TiXb{ z(8~H5L3r>?OkEqDGTQ?!L}`4>Al{K=Pd9Yiaf|>BDIN^A?8mOtAPK^+XMaev*iW7V z(v$@DY)s61H}_w`>>8f`ikUF6RWN;s1PhG@@LU)NE;J}YRf<~mjJl>R6U zg##+3Pz5RlC<=ndJMtwkZcD*hU?|9JYa2geQxHh;q!n;)vW5kN7XvBrdMq%+k@AZT z9D-v>@jNYEkfb=aPqcRj56%9B?Y*$^#qcKIb5zxIqM@%A9t;RpIX_T<>P?e|Owm#8 z1~WlPa}?7~OK=qXo)+&YmYJ65IE)A*!;=j~vgcYD8I^z*i$222k28GE{KqLKQHORD zAbqKT;6;}ku_Bh(wOqC&WKEL2H5JJy)xkZggF7@Np&boqbNHe)eAuv}y9`mSX9P4P zitIa6+CPQd^{C16ejEztJ(y;u6nM$}uNk^LU^7!kgQ#32nebt=AQagERSkBf!HB`N zxU$VRNT6BY%uW%%Oq1?`(8fD@A>}$^0iS9=3(XMkcv;~fodqA37Cj})^XijFf(^L; zJ1kj+s8#~TUt#$&4k~`6Fwpr1uu3H>V_ND}I#&w+W(!e<%uK6_qO%olMxe_BmEy@M z_p&YwMwe{RKr1o*|N6}DF=&a`D2gE`Xc!P|qOfJ93>%j9uec!TGjYZzlmxK^JQx)Y zr5TG?G+bMYymzO(GXhjTrY%S!@XB6c`G~kPqI1EU%JgPpt_?@rU~fhAob4KBx}GD_ zMUYBGTSwFxW%3MGEm4^V2^sS}wbEYLeCnERWSWi$P3$WW6*VsGsVFCQ3R-;h=?$UN znsD7!=h64+edo&nVLI@kpL~r61fIW6XFgtJ1RnO z*R>Tc2(lV3n9ka_bbuTy{JN(+jC%_`OpM}}&k^`52=q3L25Bq)jg+veTwou0*CJe~ zS+4dtXujX%_YRU!T;)PIiv_A*e|C$-H?nvCUqOgG;;*2$(2J~*zkpHRH`i`$1x(U@ zn09Q13jqTO{T)akBK6xXw5jfA;CsXPhlxA!{BDY9rZx043&+}EF zQigmm8%W<}C71WFcwD;}f4qdcYnWRH^&z7I8sza7I7sqHr8%4-s0BD}pXr;CAc!McT>*781P_(N>XU*(S^7Q!N+ zY~|Cs4;DB{RQ}-6e`@gw_!SiQA0_j@M1e&w>3p8q8=znz(boYOXUw=iOSrzTzC>yz zs78NAgV$#EkDOa*d`IAD>?4<&0Ocscy`dl-Hzg`~Xxek{BlmOeBb!e%0|DFDe4nja zHkyKv&epqztd4kwJmPt`0NJDpsfU&tv97pSUH%@~S!O{)ej!?|2Ja2Ch^6K!?Uae% z_zYSy5IC=>N)sQvY|A?mAp0#z*n-Kapa^UTn<80fiGJTSd+092Yp33rjX%^8irZN> zA;W=!V&HsNhPOuCV|j8`$`=k4ge(hC1051lt0#ZaRnuehR*t5-fX1=aPd>y+bXfqY} zU)*Fa^E~h9y|@hm1-N|4IR?U%{eda_8%7UM_N+Wb_~-w0vX8A$Ac|;Rwma7Mf`QPu z02g9+W9GXsq^`k+sqYbc9ADO~h<>Y#<=p?D!9D@XcrWG$twI-VLl&o16tVwBXFXzT zjWBlYhmU7<4i3O2EazD1Qhtoxm!;q8x^{6B3Tv0+ixtTp#|C?RB)~5KE(iq{X1OiKZpcbS!3)LErf=%r_riw=hE`)8J7MlwHJy?%e%69VWT{T4%} zVDg6Xp~-wd@F9UK@$HeLW&ZhkAx%o}4d&8PlhsVoQ2z-@4GhV9mgbD6P{=}8W#Q2U`VtXZCD{vP@z#+-%pC4?A5s9BIR z+Gx{l^qVKmMM8dddO>#b5)Ok3fJO%KGcT>KWwx_24SPH}qP{(_u?he#<-@tAD`dqi z89m{N5_mW+$bOLH#T`isClnlC9SLwItIl?0mU&Xtp`q4O0!Ykz9AfRX)zXAR9vwP= zS3N3bDGvGi?$a)QRE#(+!kZAJ%MS_t$BHA02XgM+3IWSFXEtQu9RDFjHVGRep{T6f zAV;2GUJVnI?^xi37Z8rmP>UK)gTjUv0K5qUJlxO0c$K2^C=oP;+`V=s&%p$9f?bPG z5TQZG#*psM0FUR!m+Ec2;hm<2fo;)Fzk2d)>Ta zN|`4&xMEv#D63D=Gk+z z#pUeiB@Av83_)_zl$AD_yAJ19H`Cex`W8lF%x`vg<_WDNd!_7Pwtbp%yZ$ z^bGg~yhYNH)2>QM@8-+t`z!8efbKiAvQa^H2*RQ)Z52*nDi#w2pQUtEI?V%ha8HlMK4H}5DL{n33@J?o2lA0#%?f6B7l_H2TN88E296VN zk2F1!Gn{j!DbOX!y9t&%8JV00E)4u}t2?R1#6Z_+No)V?_pe=E)ubh1vP&K1@JyL~ z@$pfORGHVC->4DDuAJYx)28R=LD*9Z_+N>c34wF1ZKPcI5`(fpM&6^IrS^jUbuL}B znwCNijh}Eo7Qz&#jibUDppy@`_=Cp+R@_&4OH644ykbu5TQT6QBw0GAA0Hk&kozfw zTZVeBK8F`7=~=+oVjk)XM>~3rS=^s*3Jb6!zBZ)vF3gbpRUv6&UhgO66hs4!s-Egi zHcP-*PwOWGVu(M5h|5@X*5`;z6d9sLcMuaWEW`tvQ^f(FR==!AXJyn>%`!B`0CC8M zJh*Zj`iRVCF!42uMx>Jl+3 zd4|x4KPr3nBq&j%PYW3d%Swt`dx}gFSO#xWL10O0ddd)Qod+VBqCgKN&RS@?j6h*k z+$O+in(FNrFhmtg2|!?JwWBaJGBYUiO$1#ru-y#RQ)ChRhfpzpwuj177x}a<$XD|O zyN8sgpJbAIG{$KjhX17wH}H=-QI!9!&K3cvjt8d4|Lq*}KVYVZFD?nLWq$+NW8p&I zuSd&w{F@XT!`+=Oc z6qvIS-SZJsj0NGC1Lr}+XzA&=?&nv_Y+sEySW?3yS!fLf`TTLecD`R72yz-ST4#WI zp->$i`LwsFmn22dw)IDJ#KS=Z+Enm1{Howa2RyjcjFucmYHBM=Tp6K3im+X7jz8D0 zkX`9U^D?$@INRk&)2-TQfBt#E_`vI=lT^ZBgEYv6N{xqeOcJuLY}U>FZqP&8{s?gY zf!S~{eQ`Ck8}0m4S)&f?r1%6OIh7J82zxj~AwE*j@inMubqyP*i@w1rFKy7ivMfT)8u)gbf7W$p<(9 zgNGD}5EHIWaInllT0Y)z5w(eD%Xb)TF^QMwrcm76dv`<9S$P&c?TCpKf+40+ht`>H zJ!gD_Ds8`sT7-Br5j|`gNV?~e5!CJZ0of7-c@7mf9-!^ayEqdUgFy#Q@HhaRDM#H; zD9v|~crC$hF6Q)w+&w!0(Y)k+>vq3KH8KU^j|#IIZP&U8>$3y3L7r=dihAT^?~aP7 zO&!=xM@dD-%31!c2jH$>!4|1La|B|kp)CpQ;a@h_;n2ft_@Wa&zmRcvgxp;%_`Xz! zU@BFb`82?uh)Qtl;PbIZ8DRES%}6#x@G)4|mycv3D|Z?zb@4wmj!(rtl}`nle0bZg5tU|-$sL+ za^E2*Hlsf!0%2b(xiM~-!4#whFR~n&fY-N1naREfWN~``j;S5WZuGh+AWQxAb~D;1~}`c8NdTmCP7ma99U|J+`As(qva0&GFm3jF!g1oy8NRA0=DRsQROkC_{=9%4ZN zne*-)JWNzMFpXyYoXCbl*p)2OitI>0$=U+k3^nuelU<7or|W@=^o+D(+YfJsX;-@7 z&whJ0DE0mP%Oz9dA7NW2qckx5Ffmw}mvG5f8^!vSkS|D|!()cYj4Rk0rB6_Rk4m1v zjm{?^T+<|&$450jr?w9k%Gm-GI+2y@TVd9|*3u9y#N4*g@WjdtvQIXF;;(pKi%6m} z&P>k7wQd$Nom1NPrp2u6Q=jigD-ma$E0!9b-O4Q-x6!uJM2C#c8T zNVpR2Sor;o-!_irs$RP5!7kqGihh~`G!O>YRa6R`l=oxy+4$q(jZnMo3qvE77#&^v zkA6HyhCy)FVxL2P;+LMOP!rmiXB5dm^qmaUqs>-k?L~8%cJrm+u_J|x6dVsX@()eAF4hNd zWW^u6xacfN%{ek_D6%b;P)sU=Ze_9zrPHbyP9tNZGs{8Ost3N&&9&{hLtaf+IA{be zl{M%Egz%mP>DZ5!BBMExOW6AAD_@s?{+)t*EP$w&mB2C z+uK+iLcX}YFB@Yv_)x;;dRk1h^5CY!?qo(^$Qv<59*W;iFmf{)L=>I_Sv8A+{eVFE z)W+JyQ%Gf{CUQ{{6TUE>Lv2~lV3}htJ%?mD-Us*H_}zu|qouviV7f0)&|VH9;&t|p z3QanqdJ><-lRtjT>Mm8NRex92(D85}^-vJVgd8XmV(btG?Zm(&*R2OAl z^0g9`UvK|M)7WGYvi4D6zv?bJ5D?6NpOUVYW_D)Ge;rx>>Tsql@36sz)B95crSov< zWy3A9Q~Yx6YNZqrtxYtpSxm>4Mv3H%q8IVXso&pdt9}UXvURAwMi~Bb;Vsjiuodal z0Ec!xl19n-ctrj?CG;5Cvw%;Zf%47rMHmt2?{Fu%wNyv8xvEp!bm# zyj`#tB#I@;s}|aQo7FnKcDOniY)=@e_Sw4r)+0DnUD}j(#xT-8G4R8w4pcKDjJt#w zS)?H7#1--q>yAwZPn6$SHw9teSGMM1Hee7iO5Co%KwRF55{P?utr-YfU^iNZa+0Lz zGm$lTyi=Z4eodEk%i^qs728d`5qhx*hYf;3IFnL;SLc0gl3|sUCQrZ+V9t<%6+0qBmWLKG-)WwD;rR%H4Ec z4`0;fz1{AwUpNSU+=o$%w1vS;x$qhfMf4dxDFA!oQgs+ z1wIB>4P48S28jD3Ef6~9O&IHhx3hYd)3#hRMo5jNhPEGh;TcCMFBDX-fwU##NN>o$ z-hy?kQNXSRIQA)4+tUSmB?%wnF>MxKkjbamkrlzkCd5G~y0{`2kiCLObAH$wWhnt9 z!36sA!JQgNp*?7(PqWsNVso)3nM7rpPFKFp6%;!T$v4-Dns$CxZigky#J2B`@Yiop zpCgwZx1-toEbd-5y+SY+f>6pzhVei!>`D5IDa)E}E3w5%#MCaKqD(Zs-#a9JBYuIx zH0jz+?-X*x%V8lAOPx z>)@}OIeIp=UNmnha2Um07(m}={XIEaGlGB}2MJ7Kgj%z`iwU7v4wJrRDBY%UxQHZQ zcRP>qE1g04L+9xmMrtY&Hs`}nNj_o>ou!DC<;mlag2MZ+D*LI)-5qpGODohR5?6Ot z6-p5}3Q}=02kBmizpf0;&SDBp@);l^^^4+?5+*)Hc|FdWLai#a5e z^nC>DAl9fsO>Ed{wH;WPx4wiN`+s&o047|oxJJseXyB2)`DmqGjd@GzsH>H*7 z7O}LF>wJ>3szuFeS$j!4<)>QI=>*E2CCBGh770&dx)wJM6S^)}GL#Ls9B>v2^j7c^ zw{s;vzVs<@Ew}f6(}0RuHZ|s(W3W`;9}eX%d!MDiu)o0p==-+CT-T$+j}*KI^6%yy zCnc&H^{xoNGnF-FZ(KjvaaR$JOL9`1!06}$a3Csqni(g9WzD+ab!~rUbT6i>CaZ%q zrqhChe15wT68&8<%9}>LKWi&{s3v#0%W9~}Wwgf@+&VJ7{b9czXG*h{WW4Ifhcx{v4>oJKca@X!;EJ&T0CsF$w}`80N#AH_h;znThL zr)hx*8L1>jTdQVi+dAs!4>D`T(bK}F=TtIO8{VHgw$(YoWc1-Jp`=R)&tJQxR7^^J zQS|{m!&6e6@y}-Ie4vQLGO*n9FaW9j6JvpR(TLpPAUky#0ptqyWl5MgFD>V23nZ)I z9T9T>98poS;zFaR#fr-#(-W!2wK-NBJKh!Cusva1c8xTXSS{C#qY656q#X)oLu#lD z@>o+E3Iw7YabxDtR)Y?OwB~uRyi|?jMM{&KU>`c9v>U6-k(<}N3H_3T0>gU#kG%{A zSm!vNw>rIF(ErTEa{c*M%YYwvP{8aJ9r)YC&BfKhPSeho*~-<-?yrx%n&<|&K^6>< zpT6P~i4&!K;TVg`DAcG0aJAAe-=Pw_6N`;Mw!`~&J-#@O9oxyjgAsG^0ouf+T^!-O zuOtA(Kktu)?@>Z7LPVgmYf&s!EF`tu+C3mi6~M9SCMGZrbXl>MAk>4wEF3EkPiw+q z-^Lwrngh`*M*^d4HB!B)S~&0|nUAd~`_}!`32_urUzlp4c#N)U7<0EML+aY$vP_+W zm)HM?F2Tv80mo(ACj9v6V&{ik)h_nc{!y_~68KZn5TPpF+~= z)J!kIat>Pja$WRkz`DcK@-{+DgbcTXrOcsbf)Ry5EuAEFDwtQ3$t2gU@!Hs8F01o> z;kl2ri&}+1g8bgdwit&9cDunTvpa~e)5d?CnXb7D&4efHF};B!a^M(uO==e9U0q&H zuA)m_=xy~4?4JYL(j_Oq2NY}!6pr%`;eRA6Iy*SJ{57gM@eTGtEEwWndI#_JCs^|# zEHT2RKxl22W%LL={3&h8H^gEp-@WDeI8DaB)Vf|T^AiXi1=|}|&(TrOQ&GUER`C~v zW_R~-a*&Vn)$$2iLGpG4QI3)ExVrB+jnyndF(Fah5gldB+@5ZBTTHi-OWAXKK^+b0 z<4@!W&GftOL}AfwF`*@!IN?xL>vhZej>D4wzyj_nb$(UjcFHtU`h4NCFvqrjeJY!- z&SAH&r3gi6v3c)9Wk*{(f|sM#I~|3K=Fyr6h6{3Wo>>dnzuHVOUfK9%g( z|5&BP&xJ+U0BbT4!0hfnYYuxiJ7Y6vU{&T%b~mHBWxvmZ)3Z}1oFJjw5|P9K!O>hO ztgaU$LEdr?LWNU*o;S|QvUx3gWimrwog-8p$u5WHJ{5!Rx5NAH19*k}^?DPOxQ!Hn z;lgztq*Jyd%5W?@y>jsWGwqb>@~1NFIvU!yxpqHctB<|+xY^&R8w-$VbaiDkntb1> zZ`Zy{WklQZ$8d)aKBVqz-Xzx@+D%u?XwVaod(Vz6xD)Q0YDDa^%BYO6huA`^ROJ`F zvT?y3+%33eD{h&nJ9XEEQ-@dVM#96DbYj|spww*~N;pv|?n6>(5^-oK&R>qMsMjkE zIH@cbu#&6wTS`i2OkX(Pe~u~;3zvz5HkGeKWx0r3qo)-n>#NgCE+m4Tl3>#wJoVqVNITYwEA z$Q>$4uFcr1h#qy_O7vGGjlKD^l?C?^0SCiEB$OCQ1)EVwT@UOCT z|AyDjk{<3a3R4Y7rnC$rvX~npY^{Zt?CILAv2%=<-Z@JtW)xvl(PVvFq>z`w z&GzcgQ25Fn7oUS<$eA2fK}BbpfpEvL{Fz)^o=GX1mI8AC{zYj-Fkr*_y$-ko*OK!7 z>@aH_PWd;(D4S%BQN=|t{fNjZ58sZUxp67woS3-gmK}-C#k+&2NJj4M#`@j5N8t(c z2ozO=Ma)R~k>rzW1Q_4n&}ExPu||o1V*S zH|LL}qEO7zz1{!td;dUcCXO%;=Siwi=ZtB1!MgRyhX=5oidnswgRxiSHDIbn0<+x^ zr!Q0oo5xqvSqg>gKHp=UekjbDV13$|;k#?m$XMB;uWSANv<|DMlXjqssHQr?=?&V4-KCk!moTMm9g$0z3}o92>AGWNYJ2)`no?o z^ln{S?)HTE^cdKaa^CH|4s1K>>hn!33~O<*mih(QFKeNmuE(BGk5~Jzr|U%!8CZt8 z@z(kgTx<*raG|UXMcJo$L)NK33bsGs|2bn7j;~nsK!Sh-lYoF=17|E?Osd2`d+&7jaQVn7devGo@-ex?WGvie?{%vH=-=M*ZP zB#)j+W%Ok+6_Atg0`eFp;PcUdq3W9Lq&OeQrz|ck35^1efip^Geak6;VE}%+xm66S z7@T16?Q(1VtvCCA%Vn0=`^3I*tk7U+?hefxmIVRa%tPd%xp&IGrPh(BO6C%i%N69b ztz&Qx#0Ja~VY0Ak$ymG7wnKUco*_DrV?2~2O$QE}mjKg0$a=5S=?sPi16hH1^P`S@ z1~?0XP(gZ*lXu`Jw1M1!e$h+@b+wq&pJND1xcDKKOKKcAK9js!)t!FFm%^;Z!3m&u z&Wswka`B9BBh6D!Gp$qDw?>*Ar@;&iJpGbo$xL88et`@leYQRPHL8deC8CZS>W6DZ zffuMTQq2~1Dz8cR&{d-vd0x1WpJuD#Z_`5|aXjm&cm+tqFwc=hZME6$jq@t4KmqiQ zG3E^$+lO&+B z)a|I=@2pc-cBV}0(GQ&KJ+1n$>bDvDbY%j*DLr%B)+Lyp>r;F|^_JIFiziJ2YkH49 zaj%Lwx@EiZg!9cud$?IR9A)k93bdR~U{asb#A?W+RJG?pJ3|!97p{zt#^nyox7e;* ziU6-d?W#&Gv!C0$nrB^LxP|oP77sDQ$u)bPPvA0|E;7N%VB*gwc1Haoi?>cVBRS)> zN7VdvrDY1|v^o+(Rz>qn`+9TYoFi3lA93yfePHtQb+cr5>7^^q^Dkm|IK+2k>gCC= z?_dA+?}ST_+@;e055Lsr29$38_bL5H-9GmDd;gqlX|g{!|Hx|bE`#k2lLD3R)v5Ap zYBoQS+VyeT!PfJ3S6U~Pgs*+UyY9SSMTUCI)~VCA7S=``%CgJ)ck@p2y_|bl|31#r zwI;GkFeEICAeNHvE*4-+7 zCmo`ovU1YvIqTk7?FxVSM(wD2Bk-PLBioF%3qNFCjDJ7bw=(T>POxCzDwfH%FXkDZ zeZs}!)8%c{*`(6p+mz0B;r)Utm-rH``{rt&9S*7Kv&{I-Jui}7c-vFKhU=;gYi4pr z^Udp2j$?T->uFzy??&VKiTfBP?D<*wYJCa!Jm2MuE_PSMy)f*F?8g5=NR6Gp;8bM8);a~l>eQUKn{MQb z-sCe|moV?egGX~hms}K1So&WsFZ+VRcIoEMcWlXA-I_%`f)UDxC1<{nljz?0X_dmi z#MFqs4_39OCR{NQc_YE4bGT6FVa2?J%rnd{*pr^L_ny|h#2f$QQh)r^iQCf-Kbyii z?d@IVIqm0s&#V`|-M%C(tygBMZRV#bb9OH~x2O8ro2En6YmRQ4bjhf?veftOBh?>O zcjXR7zyG{`$`g;^;?u9Lwae8#xw!SUTy@RkWy|N)J-hjQUj4%2)7PfQ)urBEy?*b{ zYqzcMRc_CIzOLWy-sh9|YJc1ReRKM7{8t&vsx{v$?!U}GSM&Ss_rK}&7WEGwt=}K} z>uTD!L%y7fOemAO^*l@;GhnLG>S^p>9mPrdj`Ht;WN zVw1{P(1?}zZ`|?ikbQtRBa;X-Xn351!DyCw#M+>x6Q=@OsHcEqZlG=l3^V}67#O0R zfrG)Rc_r~7l?AEAv7pu&x&f7H-VQ&2O78*3k-1^Ifpi1oF`yBUHa@s%kFK$!jXO9K zsN^D0qacdL=Rgs7-IJVO1RjY-*Z$@9ZSmJY?KvzA3<4wzM0?TG~i*j)W}ab?g_ zU{x2WjBfc1U_gLp4uD3K<^uhWO?zI0w2%?d^3y=8WKb;6;el$0_#D{~tfA1mTFkmz zpMfDRl$C)W#iSd&P?L&FDsxi7)0OC9fPSDPOn(F81X~o%Xva&Un}a@2iZF+<7-kOA zBnrBA^obXQ_V;B_?P$|5=q8{~L?BF1tbm$;GA)6wAAQsqp?^yiR6qI{GP)7y{cnU3 zYa6ll#?cKx@8}{7Xl+6^09&^g-7NIJBf_k@W@NKady?p;pm((prc7;th6+l@3tc~Y hdk~@DpaUt3p|%bKyjg)c2$ZV?84`inL#YqM0{~++JM;hm literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/evergreen_content_user_tweet_action_pair_generation.sql b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/evergreen_content_user_tweet_action_pair_generation.sql deleted file mode 100644 index a23763a06..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/evergreen_content_user_tweet_action_pair_generation.sql +++ /dev/null @@ -1,62 +0,0 @@ -WITH - vars AS ( - SELECT - TIMESTAMP("{START_TIME}") AS start_date, - TIMESTAMP("{END_TIME}") AS end_date, - ), - - -- Get raw user-tweet interaction events from UUA - raw_engagements AS ( - SELECT - userIdentifier.userId AS userId, - eventMetadata.sourceTimestampMs AS tsMillis, - CASE - WHEN actionType IN ({CONTRIBUTING_ACTION_TYPES_STR}) THEN {CONTRIBUTING_ACTION_TWEET_ID_COLUMN} - WHEN actionType IN ({UNDO_ACTION_TYPES_STR}) THEN {UNDO_ACTION_TWEET_ID_COLUMN} - END AS tweetId, - CASE - WHEN actionType IN ({CONTRIBUTING_ACTION_TYPES_STR}) THEN 1 - WHEN actionType IN ({UNDO_ACTION_TYPES_STR}) THEN -1 - END AS doOrUndo - FROM `twttr-bql-unified-prod.unified_user_actions_engagements.streaming_unified_user_actions_engagements`, vars - WHERE (DATE(dateHour) >= DATE(vars.start_date) AND DATE(dateHour) <= DATE(vars.end_date)) - AND eventMetadata.sourceTimestampMs >= UNIX_MILLIS(vars.start_date) - AND eventMetadata.sourceTimestampMs <= UNIX_MILLIS(vars.end_date) - AND (actionType IN ({CONTRIBUTING_ACTION_TYPES_STR}) - OR actionType IN ({UNDO_ACTION_TYPES_STR})) - ), - - -- Get evergreen tweet ids - evergreen_tweet_ids AS ( - SELECT - tweetId - FROM `twttr-recos-ml-prod.simclusters.evergreen_content_data` - WHERE TIMESTAMP(ts) = - ( -- Get latest partition time - SELECT MAX(TIMESTAMP(ts)) latest_partition - FROM `twttr-recos-ml-prod.simclusters.evergreen_content_data` - WHERE DATE(ts) BETWEEN - DATE_SUB(DATE("{END_TIME}"), - INTERVAL 14 DAY) AND DATE("{END_TIME}") - ) - ), - - -- Join evergreen content table - evergreen_tweets_engagements AS ( - SELECT raw_engagements.* - FROM raw_engagements JOIN evergreen_tweet_ids USING(tweetId) - ), - - -- Group by userId and tweetId - user_tweet_engagement_pairs AS ( - SELECT userId, tweetId, ARRAY_AGG(STRUCT(doOrUndo, tsMillis) ORDER BY tsMillis DESC LIMIT 1) AS details, COUNT(*) AS cnt - FROM evergreen_tweets_engagements - GROUP BY userId, tweetId - ) - --- Remove undo events -SELECT userId, tweetId, CAST(dt.tsMillis AS FLOAT64) AS tsMillis -FROM user_tweet_engagement_pairs, vars -CROSS JOIN UNNEST(details) AS dt -WHERE cnt <= 10 - AND dt.doOrUndo = 1 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/nsfw_tweet_denylist.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/nsfw_tweet_denylist.docx new file mode 100644 index 0000000000000000000000000000000000000000..1fdb468e2c005002d34da39729a571f0cebfd571 GIT binary patch literal 37249 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 vY9UOiZH9&lO2-RbKYDu*p= DATE("{START_TIME}") AND DATE(_PARTITIONTIME) <= DATE("{END_TIME}")) AND - timestamp_millis((1288834974657 + - ((tweetId & 9223372036850581504) >> 22))) >= TIMESTAMP("{START_TIME}") - AND timestamp_millis((1288834974657 + - ((tweetId & 9223372036850581504) >> 22))) <= TIMESTAMP("{END_TIME}") - AND ( - ea.entityId IN ( - 883054128338878464, - 1453131634669019141, - 1470464132432347136, - 1167512219786997760, - 1151588902739644416, - 1151920148661489664, - 1155582950991228928, - 738501328687628288, - 1047106191829028865 - ) - OR ( - ea.groupId IN (34, 35) # Cortex media understanding - AND ea.entityId IN ( - 1072916828484038657, - 1133752108212035585, - 1072916828488327170 - ) - ) - OR ( - ea.groupId IN (14) # Agatha Tweet Health Annotations - AND ea.entityId IN ( - 1242898721278324736, - 1230229436697473026, - 1230229470050603008 - ) - ) - OR ( - ea.groupId IN (10) - AND ea.entityId IN ( - 953701302608961536 - ) - ) - ) diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_embeddings_generation.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_embeddings_generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..3dc573fd1d9e8e3667f293473899a7abc50ca83a GIT binary patch literal 38083 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 literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_embeddings_generation.sql b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_embeddings_generation.sql deleted file mode 100644 index ffd14729c..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_embeddings_generation.sql +++ /dev/null @@ -1,104 +0,0 @@ -with vars as ( - SELECT - UNIX_MILLIS("{QUERY_DATE}") AS currentTs, - TIMESTAMP("{START_TIME}") AS startTime, - TIMESTAMP("{END_TIME}") AS endTime, - {MIN_SCORE_THRESHOLD} AS tweetEmbeddingsMinClusterScore, - {HALF_LIFE} AS halfLife, - TIMESTAMP("{NO_OLDER_TWEETS_THAN_DATE}") AS noOlderTweetsThanDate -), - --- Get raw fav events -raw_favs AS ( - SELECT event.favorite.user_id AS userId, event.favorite.tweet_id AS tweetId, event.favorite.event_time_ms AS tsMillis, 1 AS favOrUnfav - FROM `twttr-bql-timeline-prod.timeline_service_favorites.timeline_service_favorites`, vars - WHERE (DATE(_PARTITIONTIME) = DATE(vars.startTime) OR DATE(_PARTITIONTIME) = DATE(vars.endTime)) AND - TIMESTAMP_MILLIS(event.favorite.event_time_ms) >= vars.startTime - AND TIMESTAMP_MILLIS(event.favorite.event_time_ms) <= vars.endTime - AND event.favorite IS NOT NULL -), - --- Get raw unfav events -raw_unfavs AS ( - SELECT event.unfavorite.user_id AS userId, event.unfavorite.tweet_id AS tweetId, event.unfavorite.event_time_ms AS tsMillis, -1 AS favOrUnfav - FROM `twttr-bql-timeline-prod.timeline_service_favorites.timeline_service_favorites`, vars - WHERE (DATE(_PARTITIONTIME) = DATE(vars.startTime) OR DATE(_PARTITIONTIME) = DATE(vars.endTime)) AND - TIMESTAMP_MILLIS(event.favorite.event_time_ms) >= vars.startTime - AND TIMESTAMP_MILLIS(event.favorite.event_time_ms) <= vars.endTime - AND event.unfavorite IS NOT NULL -), - --- Union fav and unfav events -favs_unioned AS ( - SELECT * FROM raw_favs - UNION ALL - SELECT * FROM raw_unfavs -), - --- Group by user and tweetId -user_tweet_fav_pairs AS ( - SELECT userId, tweetId, ARRAY_AGG(STRUCT(favOrUnfav, tsMillis) ORDER BY tsMillis DESC LIMIT 1) as details, count(*) as cnt - FROM favs_unioned - GROUP BY userId, tweetId -), - --- Remove unfav events -tweet_raw_favs_table AS ( - SELECT userId, tweetId, CAST(dt.tsMillis AS FLOAT64) AS tsMillis - FROM user_tweet_fav_pairs CROSS JOIN UNNEST(details) as dt - WHERE cnt < 3 AND dt.favOrUnfav = 1 -- cnt < 3 to remove crazy fav/unfav users -), - --- Get tweetIds that are eligible for tweet embeddings -tweet_favs_table AS ( - SELECT userId, tweet_raw_favs_table.tweetId, tsMillis - FROM tweet_raw_favs_table, vars - JOIN ( - SELECT tweetId, COUNT(DISTINCT(userId)) AS favCount - FROM tweet_raw_favs_table - GROUP BY tweetId - HAVING favCount >= 8 --we only generate tweet embeddings for tweets with >= 8 favs - ) eligible_tweets USING(tweetId) - -- Apply tweet age filter here - WHERE timestamp_millis((1288834974657 + ((tweet_raw_favs_table.tweetId & 9223372036850581504) >> 22))) >= vars.noOlderTweetsThanDate -), - --- Read consumer embeddings -consumer_embeddings AS ( - {CONSUMER_EMBEDDINGS_SQL} -), - --- Update tweet cluster scores based on fav events -tweet_cluster_scores AS ( - SELECT tweetId, - STRUCT( - clusterId, - CASE vars.halfLife - -- halfLife = -1 means there is no half life/decay and we directly take the sum as the score - WHEN -1 THEN SUM(clusterNormalizedLogFavScore) - ELSE SUM(clusterNormalizedLogFavScore * POW(0.5, (currentTs - tsMillis) / vars.halfLife)) - END AS clusterNormalizedLogFavScore, - COUNT(*) AS favCount) - AS clusterIdToScores - FROM tweet_favs_table, vars - JOIN consumer_embeddings USING(userId) - GROUP BY tweetId, clusterId, vars.halfLife -), - --- Generate tweet embeddings -tweet_embeddings_with_top_clusters AS ( - SELECT tweetId, ARRAY_AGG( - clusterIdToScores - ORDER BY clusterIdToScores.clusterNormalizedLogFavScore DESC - LIMIT {TWEET_EMBEDDING_LENGTH} - ) AS clusterIdToScores - FROM tweet_cluster_scores - GROUP BY tweetId -) - --- Return (tweetId, clusterId, tweetScore) pairs where tweetScore > tweetEmbeddingsMinClusterScore -SELECT tweetId, - clusterId, - clusterNormalizedLogFavScore AS tweetScore, clusterIdToScores -FROM tweet_embeddings_with_top_clusters, UNNEST(clusterIdToScores) AS clusterIdToScores, vars -WHERE clusterIdToScores.clusterNormalizedLogFavScore > vars.tweetEmbeddingsMinClusterScore diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_fav_count.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweet_fav_count.docx new file mode 100644 index 0000000000000000000000000000000000000000..5c3529302ad015688c93e66e5800e847459556d2 GIT binary patch literal 37318 zcmagEWmsIvwm*!!dvJGmcL)S`mjnyixYKxWcX!v|?(PJ43y?r?_kU+*&N(yZ-uu2^ zc0XNJ>nCgNuByGel;t3yu)x5;;K10^d9Sq6Z~Ns zv&tbb%yF4%cRs{xbwXX(8tX{us0F-V4j;Z%jjphIg4W_j{DDD2f$k49+r z7(VZhDZ9Q*__~olNcc%*zbrFTYi3zzAhh}OriK}xYe;`FZipXn`szB#Q157=;ZV2M zTZH01ga|}ScN4=Z`1=XKI*7V+U--W-l3$bD{dgY;JTBo%!+B#ne<{Y3}7?k`ZD4n9J!;@u

>AfTo6{2^?eSGqIL@cRzCn?zL!nT( zCw1bq*bXRDyxP^NB59zF(@T7Kwr66#m{CBm%us9-sP#!_As}z5S9^=@qM_Yr9WEKZ z!=KDueK$zQCOzVY0!7q}`i|RNlT?^t6LV0HuKsjZtXf>sh~8EPr8KB40sR`$nO4ii zhiMJ~1CW+);tDURYW;5G7Je_%8)KGz;6`WlxX=EXpwKUfYL=ked=``-bWnm!0Vc|h0DC7E6M&=H@0&a;eq6Di z6;0~STWVfGGwcctPD+*@{3!f`43__L>n$gjg3Wj~_vF@Ip{;H%gDdft!0?s5@CHv~ zGo(pyd@xB!+?l^=IHC^r>)I!r^`~qpdcLZppuV%7$GJ;t3x1Qao(L6uB!t>*NZAZF z1Np^Jeu{xQF3$NcQ)F2!s>OLf#MRIhR=#M8#?!V@Ad~K6(f#!ICk{)Xh_6R4Yc3`R z%S12D0}o3c_$WVR2sO7{0UzkNV*}-iU#+XO`(sm&4S%f(dCj@D?a}0t%@;_diyZXp z{h+bxL8cjPEet#1iR%M25-K={s7jiuTZ<<9cKC^tqr=v;E2KdMQga9rO7gqB*^|;r z(SSU-bv@Tjz(CR0;raR9btWe&KM`ls7LHoXm!@%Env{>g%#A#hVK*U*5csUbyXy-} zwv0qstP-(IDA_idZ;V}&`9JD?-`>BzTP9?<=edBwJF-AAq?>b-czy1>B=~1tuGiLZ zk3n^@fdT_V`+HqJ+S~t87WHwvHCD8aCk7}3=Wt6{F%`V{fJL!ci4FYP_{`?{G4c;_ zP_1mcK%a+DY`!lnH(>(x0#6NNPfKFvunmfzHL%AY@<)^%HV_(X!iNvmCJ)J-pvs}k zur&wK4IGT7$Ep@!nBbk$w3MsIyvXZ6O78}C`6Bm8SO9UknRT%zT=t{Zi@nEZlvuivQBB& zz;MGGj_XO)>dLf2FQZOkyS2rJbNRR+UnFQFN54@dS$zcbUZdw|`>#91w%pd23B;nv z-J(D}3WzU1<4Dr4O2Fz8#U?bRVfua@16=*$;YCWQx`fmQ55N5WbdXhxnJ8*WxYCAB z=`%GeEcJD~w&KGsb0wKj^$-nZGSSl~5&{Mjx>K#gLy09_14X?k>>Mt9bXTgKU|=iw zK7a-~(OL*k`Ms;|F3H_z{1-Il3tP6s?FSbj#3MHtUSLZ-JaNhiyv@sK%iIco=UpzJYFv zWZXZ0uxDXEihTdH#xE357NvAO#ZT7K!WvCmWu= zYuJDvt;RFJe_s9RdlqMd)Se;x&5wr(ReMQki;th@>EMLKA&6U2W=!X}(y(zF?ISoU zonF(_!Dg{D!%@v}gS0oAiSk5!>xDG|AmX3xoFBQf+G+*jrLXP??5$t35uhEzOiL z4&TS4E5QYhLgTV&&S1+elL=QRAQ)3?&kEqHxYT^b=bI=ttAe&R$4kl#*_?xdm{cG< z!MPe#h zd>K+W1ej_UUXb{(7wYo#jwhe&l4v^b{AZc~b;wY&Pns1aBkb%=>$?A0O+sxn!#){ z2nZW11yF_zt+(bc`L0SF zzFes^Y-thwwbfh(({&%3uEaDvS>OybReri_<7dkXZ7;De32~hA-$SL*lY&)$x~>Cz^Ye{1Z-!~ru6@Ln z5p}8!Nh4Qb-A%}pSjxJY@Jje z60px;e{?Ma+K_RS!mHo4!d`-Xe!SYBEg5(7$k%6HeV$O_@Em(k3p+45)bjm~6cYVZ zWc)@{JsYU+R0ZV9M?J(Imf8yo8M@jzuVAASB0i?BFZnb>mv|e_6%mF;9rH*Um19hA zy3;sb%{W;eDi~8RWwYpU=4J-;ACEBlbI390$p@$`(+*%jIRak~MhvvhRG zk(q&J$Tl=*{Gp|#(c=^nj661dGW=GEhH+lW#uW8c*z_!)r|{ma3f zCk#AQiWY(f7Z0a`8Ed9<$B@QD?K#6{HSzWQsm*TNkHavIFSWv_)^%k&C5pbu7(86U?`_tZ6Zws?!ca7DzjEjVX?N6=?1Ji<#nv zPCKX`eRMrnEe`SS4!L@=5M0=`nlkuPy2-YvZBZo5u#0w|>92D)Y6(&{HgXX&CVuQ| z6l}5@xyBbg(M;IsX};|4jx921&Ah(iuQodO!W}zdDH%VPzYh7$?teIG7uC3M--;R8 zHFlM4S_f}g?8UPKR;oPsQ%rd*CZ zCoiJ0aBDQb_V!;}Iy*lC40h1UI1ZWw2|+949~0o8`?|kRgMaSv62+7PS@FJ{y(07l zCtwxZMZEi!Pu)&0T~p*8EWH|kE3v<&w_(aCvFpEg$L*6tV>>r_tG2i)fXC4AA%Hg$ z0u^g6SlJ9i&;m8(xTju5L(IC06rR7fm%DRWP+Vd55GWh- z>_l6!tD_2kNUOzvspHXw(2<;tPyHB@lkM!;PJS_2-E!GkX}vA7k?z#Htyr%a(1#B7 zb$P+qfP#z4c=zmZ=H}j%(Dwz_5W&1*fl#7&-~U-bKMKPLO7kugvY+GL*m7*oe9;6< z(ydz}MS{JkHdAc}^0I^@LX4NHE?q6iI{4kBHLun6Y~p~YBD}K~EQH9OaAXPLE+3J$ zwaU2G`(vTL^HdCfQW{$vr`1x;1LJi$-qq{b8YsSpz;7)7Tx_B$a0DV)z`zVOputf8 zm1`$w4;wS5-%AbX`6Xdjy3VJ&JHNo_`MYgw5ZLgP9ay|8;YY8|?5}4W3LJC4W@d0d z$DA1XQjv+0XsBvvekhNx6X?svQKsA1%1Tf-dwI$6?XWom8j(b2yqs?E^mik7wd$Q| zK9x+KUbO>&FL>Sp4+p32x~JL6YcF;$rx_wk!+_U^n74=w)gZqb#i}sX- z_NT+SpEvCxA$vz2FLi>iwr_2l!7RX462s(@^XdM>kd*zM@wMaTikI=@%Lb2i8=evo zlFHtmPNgq=p^hk6#o&=B7*@)ry>oWWC}D%R9cmP~I613A{IAS$hJBa@+FVJV6~F zK6%{m;hlLA5uX$~(b@!Ue{H?^rG1Hk!j!($zJqUwx9xKmr^jyNdsg)icps2q-B*H4 zI&)5g{SI3jET~(+R4Ec~nd}p?w}G06?oYin;|tWu_0P__ zAwcwWDtza5_|Ef9{Pq+PphtvyySKmzCRt5b>~$?FbWzAD2LE(OJ!(izwa81Yk&lju z4{tC_M|+G}Fs|>*>tVmSFWk%Z#*1^h{&OvGrDID_sLJi^G$e)RG@D21_|3=g3@B8c zW4H8%Inb3H*|OSwqIkF#1K7R){`OV3TRNMdt4&Xu`+@GUhuiaxjf&>=e(k`O=Ma&v z>|*e(J(Q68_LHoKAxi;XH-RQX`Yv2u>fQ(Bj}@pprKoJGBz+nrpDKk1Bz;2ZyhG=J zF0NhI!zY%5Gzf<34`Bgw>cISMiliLc7Rh}Y1Y%`SQ!j&vN-Y5N?SS!R!0O$b!Tp5H zGOVzj;+l&Y1U`Ln8|BH?ONSt%2uX6ywA<{uZmcSMUr6(C!g3YLg56F3&)O}YYAh2S zt544UnAJxu773Sbx(t^Y(wrDUAeZ#js>qcEmP^2QO*! zyW&2byq^EGWymBR`iAa}O?C_SP0X9fh*mbTh=Mmk_{_XQV`N?OS)DBAgN%wyDTZny zM@10hJ{AL+9MjSVxOm03?n>V+LY8~Yv5sM^#mWx0i~?{Kn~R+0moofR-EhX&rwz+a zf$Fn?!jsYN80M9dx9Kwwsk%1u}4|6bu*v_VLYrq?z9h1Y+XQ3bQ*Zg14yv;5xjc zdZK8GmpEua2_4WQOyZX~u>r9i(1p3bJ3oUuasJf_wL=L27yD~`bt66%GZc#l;z*zD zCd9w6PdMX2p`@U3bbo~Eg3y9Nxc>#Q`gc>I zlSIRmYkL=_VK%>{?gD8Sv8Id9*#o$*j;}7sVtZ202Lvhq6q>}?(v~Lot}WkIOuc1W zCqhZ>`2&acmEm!lSH?&oX1(O+v%!t08<$oCyFo9p=l-P$*Sycm?pJ#ELvuMbJMJ|< z7lf4#_YX$%ckZLML=2j5BuS#}c9~a1lk}s{xZ?2Np6rn%m^`M9(HPguh%&bZ*GX?r zfv(G$ZpedcUCh42IWo4#j`4@BzXrkqHM{=RF=%BrKD2^;R}YSiM-J~+&$k2?=WKb} zSyGM<<8Y?OznkzN>Tj|sxDuOo2Ik>!5h)Ⓢ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 DATE(vars.start_date) AND DATE(dateHour) <= DATE(vars.end_date)) - AND eventMetadata.sourceTimestampMs >= UNIX_MILLIS(vars.start_date) - AND eventMetadata.sourceTimestampMs <= UNIX_MILLIS(vars.end_date) - AND userIdentifier.userId IS NOT NULL - AND (actionType = "ServerTweetFav" OR actionType = "ServerTweetUnfav") -), - -user_tweet_fav_pairs AS ( - SELECT userId, tweetId, ARRAY_AGG(STRUCT(favOrUnfav, tsMillis) ORDER BY tsMillis DESC LIMIT 1) as details, count(*) as cnt - FROM favs_unioned - GROUP BY userId, tweetId -), - -tweet_raw_favs_table AS ( - SELECT userId, tweetId, CAST(dt.tsMillis AS FLOAT64) AS tsMillis - FROM user_tweet_fav_pairs CROSS JOIN UNNEST(details) as dt - WHERE cnt < 3 AND dt.favOrUnfav = 1 -) - -SELECT tweetId, COUNT(DISTINCT(userId)) AS favCount -FROM tweet_raw_favs_table -GROUP BY tweetId diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweets_ann.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/tweets_ann.docx new file mode 100644 index 0000000000000000000000000000000000000000..fc452a92db533208fee95504e61b953e7b3d6c42 GIT binary patch literal 37552 zcmagFWmsL=vNepmdvJGmcL)S`m!Ls665K7gTX1)GcXtTxE`i|g?@o80bGpyH_xt`V z9_FkXV^r1JbJkjWZbcbz2n-Mq5Eu~FR4&a5<$~BmP!Nz&C=d{I;HZum!1k-D?N>xM)*g;imcZ|AR=Nlb#o9%9Itr8{=icJ#5h;#Fz4+*(Uar?Oy=_v5^w zYBP$#P>iwZDfeE4tF;21o{f|`V&bQIdg&T@q~JxKdF#21XJ%ac60s!Giⅅa|2M- z&FP*WrZ_>FcdPq&4bXzlMYFa26Ez<}qNpmO)zOFsgJ6^eMj=D0@@BYl+R5xxm5+z1 zcIm$Ck19I9j{CTfK8pEDWWFvjQmSWIrNOoOaeogryik+;W>_EB?^xqJL09Ksu4Z4m z+Eak!ItULy`LSoy&FC_w!FCK)TM}`jqP>A;8MJo_unMHCo;?E3)Ofe$%RX6Er~A^b ztrex}WpNxJh3kGVhLnEN?N38hN1~SimCD*4UEvvc-*)rlXjMVEkJ5XntM_k^kUEDx`+E2LO6Q96YP<+n?C59=AY#Y_Y^OyC-kL2T-LW4tidF~ zw)>H|s_q18S*M2Ik|7D3Qr>f#sS^v*ZJ-b6(A1sHh*XM-8_?QFAr%Lf#G~H8f2G!N z@?w|;KmjCW8#%&?Dq8leUBVuO8ox>z`U)S%*rBSV$eXZWbLS&T+oRuzNgqx{mBzHB zW3@iDDSpu@yJS2H5K~amcO}1pnrKJs=QgkBFPdrI{dmAYPBx+8K56E(5uoH_H%0i1 zxhDBsyCHhX3ua_Shx7cO2@3fJuVMkb&1ZlKLIozs1YoS_0I+jpG6p!9{=UgG;>P6r zm{BC|JtgMk)I+aPU?ikzL65^eNn!XcwcN3D$XSnNa!zdS=G$mz(>W7v@(o?v39fTB zG=Uoj#RU-s$DaF{gu!cJzO5QztvzQ-(DGCy2KJtJKh0iIn)4cuc84qBBEVH=f=j2d z=*cdG@RIe{aRn-K!TmGgl97o+shDf}RLG#nkk1#ZzEUpfx9qc!!oWb?V5SoG!kdi*+%$ydN z3;XB5tm!y!0Qw7RhUVsW))*Wqe1*Q6G_zHszc!9>Qzd`)PG8SK8gdaZ4~ET1xWBoy zU`b1m#wZd=hmdZS`a$10k$Y6<^ZxPe!xBE-1J@-4&apX?KFzF)*xO6*72ZGVa&vKhr_zeGRjK7E!{9^Is5|5nIQtj!SQv8zub| z3(>-|ck~uU<6`^^geAPk*V|f?pQzd9Hagh+vt+_2g!Fb-vj`9UaC_Ls`CG!?)3=g#Wf^DG zt0356^(S@2DzzmVAy<*7FL)knW;ICrT5hFjy5-mRidTvm&H2v1>W18>kO88=s zWbTk4p7=zUUa-VzSHz&T31Z?KQ_y{CMgiBqxVRDGE3UvbLBp>0o)0pr(G!F%@RwUr z$-O3L1SM+5s>?p@FqV@DR1Q*+ClNdw5#iAp)0}A>9*Qk$>&fdxVrFsRqB>J-2YI)E z?gOYG6RZSq6hAs^?-1R8!F@$xytH9C+hLOYfp>{|R zkbCk!Kd>$U2NNdXr`E{^xH#2ZED<)6<_)#|Ng8$k_GvrHuQ9YkquHNsWPf^vPDDr`e}lwGT@BGl=G7JV`QpB zV6{2g*j-Xa-s7+1y&V`9Ti2v*6l9kuLS{bq+1H=9g*K>;r$*6a)mt@pgIs(Cn1|kN z`sN34ZBS(`jnc4W@cL|_I#l67Hakz>6w5YLal<^XXjoW`nRTZw&Jfk%CR+BGttvlD zM$1XG_|~2da5|%+5_w!Wh!k7dQU9R0$u?McgI&5owB1~enji|SP`5tlRMA$cB3R)L zwGR=r0h#V}$tY%d)L#Yp@_>Gu9qfzHdLx!Bcm*?hK zj@;z-*vP#vsqxF|-y*rF$c{gO814epFy*__Ea zS5SG8r`%sAvL{B(LeNdVdC7vI4TLODqp)HWCh{-HU`t&Yu*-F*d(?F!iy5)dWFe zBt??wv7a|rb>2KU2@T6%H_{Tt$agZnpu?H+pO&eJlr$sVs#OG626Od&fEc|LC;HiO z(!v?Q&*A5@;wpGrBK_-yb^t2=G>GlhF%Ke2NX)*d)WadKt&s&2aRO4 zv}YB`lKN92EzAevlJn#3BMDTYfpdbhA!)J>`>`D+zyhk#t5@k#HT`N z&+s@+8_3hayPFjyJUFz&lXdFlVJ&=4Ob#SMi4Bm?udgyqQuw|NDX%Q3=Y}2R#g>Yw zt|ou2TiOvqQu)@|NBx~H>V9|oixA(8>(^pQv;`OM{BUd>s3~Q0v5-KlZPwT-xu~=1 z?sJM7Q*#s5S_NsWrq1v3P}pHBxN*_m1u-mfi;w1$#BLBZ62o%_>f;x_EJ1s=+pa z`KM^hW+sEZxvSc~T#;Q6SLk0psDR$s6CQNAt@wn)rxgWI{8$F$-8qQa(KX|1EoE*G z&+Y^tKs>eby{Ev%GMRh5>Zz-c9%mg9)rN?}SnGU=tt(Wm4U7QmIEoVU!cB0h%6pJmYP zDDcJ3IK-YfN#s>)H<8_pNrRsTOjUj@|JRnp@hKc078H9`>W>$HluTO2MP01EZP^{> zVnkTVm0`>9@8Fg?y_{bhj2zJwGaD18Mf|w-j4zr%Zub=WU8oxPm@=14{l$wZD1u-md zbq{C962GY2%xO*Hm-53;334xRH7ykVwQ%GOIkv(rn3a+FN0KUW-)gzE!L-C@;=X?l z&dU7i-bQ*kQQ3UeQEs&*w4UnNvn5}r?%#_FQL{8}s7J;@VYqXCIDPwIg75PRtq*5b zKaVd~xbOEOryGf80HJ=L4&KN1U}!PAYqnqvBJR>9mMq3vP@S%_4SrR`7B0d~QJbm~ zXchEf!iwASW+tKET^{zU2Q-+_u3$tF{tgd;rj^o|#>W$Z-iz;Oe#BHZSdJ^j>Ia5v zGTbXSGgS~gj{!fJ{+a8@GAzDuCJ+#PHAoQTf92ZotDCi{rP z@UmwU69_UiX$unPjQ`oABeUk5O^$8$*Yq^@m*`Ui9|{s-A~j_-^-ra7wS2vqSc)|J z8X57brmwGAKJC`$-UdWbX|HGNTzy@Loh>@&>d!?JXV+~2?^hg8zQ=828+8)pIt7Gmi zVM6bAnt(pk`?lTdgIm`Rr)9%m4DN%A7W=##1PS}hy_YkGJhW_`7e9ZK|D2sXaa=8Q zCY14pB`E9g@ltVnC^+E3fNAv^D9UBiXX6xkZ0Pi9-HUtrRY-I~;8bG+*y!7M@Jjj+ zdJB^KQ2GqK!{4>dUY?z}jO|+1J>q;qgmzsHH15bcjY@mINW8srO(ozOy9xJpU~qrs zaVNWuFWaSYa_e+kSrZZ$jrIv*dh1;4Y-=hXOB`VFv1wcL>eSUa?|i)#dooi_ChW7{ zTxUYw^!_eE&^P> z*Hqn?YVYOtO@4t2m-DmWWUjMJE`^hKFa2|Gfyyk~#dq}n&ZLOum9A6y!_{cO&coh& zjdqu0CSGT&jwI(J%~Ln0`#lQ<)!W1Bfiu@3JWt8xz~2{byCZbGOJ6 zv#6WJ_o?6r6@f!NbV5qi0N{TI^soJvAKvvI#-)~^1#RV5olL=SX$xD)Pd8uN`RRp- zlB%X$X4bT0lv#U&n}*_-Dv;)FZ~J~$Z+cZ?7;9M?y(BLl?%O+-W91h=MWbG{JTHE} zR;97*PceT8cyHIMT$p-3oqe*qw|^ayzPlDWJr_(@l5EhMpS$QgxW4{**5{bcP8ZaI zU!W2B-gn?yN|=64trh^kJiY%w;d4Q>sF2o_9Bv6Q9b!cnR$VH=EsPoqDo*%0pS835 zwXOS-3@?1`UDMRl?>VbD0-zDilwr{x(-ao8sLAV${e1d%@zaJbopA66swXDN9n23A zPXYsK>4*X{?s&m-vof{eHSrf!lITxTN>asW$_Z>`f%N+rbR;qii=SZPBO`qk!l+6t^cij?W9EZ_rW}jam6hLjq&IfzfRMb6x0*5$L8O47buwLkw@TQJ#?} z1*1$xhvsh=*W^o_zNg0*9gC8m*KOm6VQz0wo2~#{H@i%Rd=t^><;;ctAbMD8N`T z>h~Ck;Tir*A_FlDl^ZDI*g0{9DW+veVTnkvFuLi->`Q|d$4(K zQrTk^dg<(d`@|&@U!vspbADN6;J7O%jSCf zx?*JMW3ZHcEkll#?Q|^&8V;zsBL}TwB%W-G_ucZ-X05uhvEW#6{VMdtNV zNWRE^E@51W9m&%1Wet(ZA@YLM9Od<(;|Sw;=Rk~zOX*`C&o_9vW=8g&uQ}3Ox?jqp z;c4tDK?58SQ9Lb1ZwqJ&ndI8GWzfAmVOa=1^Jo|5k3PBwYoSlH5f`DO4taeuI_v8? zSDEuF+RNNM<1g5hSswtDly0l@J^Zv!!^Ul}MR8I`$C6Gf5aS?hsq97ihYfv}$rN z4;62|X3332pW`gr?oEhophsB8Rld#lou?O~3Zy;K*LcRz{hmDt_Um zIaP0zI7VUDMoR-~U##)&Oke~gkN4(TF(?UY`w96izYA_1)@gqFw)O#+W2*ntct zKw2T~&ds#%+TosuxA0g{ODCEyQgTXjyh0lO4mWGPam|pIItU?>--9K-e@Z_?{Mh4e z+wjM9-_&N~D#z;idE8>ET3;gExA%v)rv-fMav9`wX6~*fSN3YP&m4Jh@~Y&eUwFBf zN~=%Q2NW*v)2-#mtA1t&E3vt6i4Q#vxaakyw%*O5D+aAb&~nej7UwP;p{Nfu+p5v` zUUIfI8O^XP4BXC}IrV_AN*Jn*dAhq<%9rcv+wyDo&ne5KP*z~cuj$VJ__`NTLh;S` z$oxnDi{7ZT@;|AWhzA+8FHJ1n`gW!ve z&&%LNI|S&1jC(^0>&lmE__#aMRUTTZwk} z<#c2D6`b=UNbT1%jBW)PRq6#qu~j2Gv7<(FaVy*z)YW@@p}@UE zpE2y%xrxfyQel2onR1J60!G60j`+aINo#7CxZ=>hxhF+j-kG5w)1XBl^L=&rKvbG8 z>Qe=`Xzflhyn4BhRZ{-xn(}IkRHI{?VOt^Bvb45?uH^_z9K{ep6ZxAYmo%IFrwMKm z*4=z~Gi&p@lzf4rg1dCmWycjr56kB5aJd+)5x0A{vdXv<#khV=O?IOd1*gNUigL2% z-GgHsEgZP$ZW3eUVU$|vy+-TvuS;x=Occrcq!B%p^dJ;+bns7_i&6QH&~2UBFJF|c zjy{m1;Yv!&C_A^1cudkuE|V}+mOmLTHWYP>tgCcyELq9n+%A_8+#f~W^JKo4BH0Mw znDv+y*yi%4nBmv<^5y$?DLI*8u>uy?AmYwz%2Pjn8&+!@F^r?XE>67`iJ(0<))l~X z7o(%nEnxsjZJDj`VIRt}1t`wPBhJjSjK8j;WV5i>;Y2_oePm0%O=%ggI8*oZ!sK(H zqm#wVFD{MlScXAdM9k%_LOiXfH z&qTvXlu~FPD$Et0rkqPRlL8@;Azsx#gvqQHXY1MH_N26bPm9BVxW{We4t&zN-G0&g zy7nOt%mzvM%XQ-f`_DAcr*i5^Q=g|F_TV?$6O8r!PaP{mJ^@}YIoaOvs|gt3G=iqo zJT-we7!*#qXzb~0pI#!+<%7pk8GEX@n6TMaHHa#A^YhruXuE!OO(wS$A*Xd!K7G*N zW%K^X&Hqk-gDSYqZ8gx;yo0w%0mZ?>Y+LyBX!kl@G_map7wIwebpZb7JxbOy5IbK;+=x3H~`h-^(lrPt_W_aiwNB5Su z#GT(WDDtchSHcN&O{Gf?U*9e?&ga2{%r+45d5fs)=z>_c;(wU5HSfU4)w7skrrs-@52GVTr~3cT3kosoIv9ahI@S}D{H%&8@_T&_F6)zrKur7hVZHfONb z#64c$4NCCE6s>k>NUDp`&#)aoxrg9g!B_B^h{LDxw1C(wTmA6up+cYi(Wx98s*VuV zM8b}2$iHn!Qs#1baN8F;0&)Bfk+QkW1$F3kHv;_8UH7X4H@>Ft0&@g#Qf;6Y1(;}w z0uFr9$Fd-oA$13M>K2a>Re&%Pm|}p+(4&c_^#NZMkGA~+r0ga`ekTI?LZ@xmb_Y#S z0Po}_*oH6X5d1LdjbswVjTr(rEdS=^6&~%iqgmGP6y?w09c~Rt5v}bKNf>JH!!AB} zIeq=8rp)(zYXhacvK5RQ!H)FeKu!_jbCv3?TiNL;_-nIQb|jl3VqOo7BrIn+4qP zVF{)Tc8$$s>9RVQmt+&hg(#>3b@Bm##~<#+f4R^7+x_UbdjO$mN2wR*jqMNcD|gG+ zS&6x{I?F~Ui7X{1$ackU^y2~^apdGu?Ay5080#W`cejqnAH~=kOCgF?mOf}5X?T9^ znc9?2sJ92@sWy)@=5sQjOc)n|?iNTheFeu79VUF_t0md``U=JD$3a|yq;q8}ixTIB ziq%d6bC#t6#a!m|)@2ETdHQg!IlfeLGL9jHjB3}d`n3d6r>crfRmtkOx4n24sK;uj z!Feuh3^9u;;gyWJ8|i9w3}#Oe?lfCLV3~?c6D01#wZCfnus{cnIxI8+Ff?mC^h?%7^@`g zb^nA0K|fd=IR<7?%6Y%}8u~FWMrFTwPNmi+O?plPJK*S^*R~bi_DP$KU~+^^HrsaP zDMiA2K~6}lVqWb=Cvqcq1CSWzG6z6pr7aGj;;%G`Q1;QJ{rnw&ea$G7al1l&thnx$ zGV!K(nK?+z*?YQyTXH}Eu9GsrPutSUlrNMt!ra5}+~DIRA!1BtsYOe)XP#PVQO(r6 z#uHiAZ2#dgHQ3e4R8hF^#oe_k1pQL_$`o7#94#1JG~I`SImWCoLduU^O)$kWu4QTh z$G^noC4_lB{CY|FgpRbu^GJyy4dQ!*sUp4rsr(~|TpNeZGE+KAEl^|r%>zOHFCO__ zX>8E#qDw{8YD354K_+I}Vi;;*NC`iFim2W&^R%`|2YSmSpItgUrUQ$cve~PhpEc^DA;IqAK=1pAVVjYh76AK#;FWugDh?8$Z?&uZEs-+C7yP zN(f&?s+VLA3ThZD2w(9CcveP{X45G`wBvirN(cv%5)?kH@5@km=+ zRK?^A^)h#uASz7IRhs`Zo7BS)ndhznC&NGeBhp&_m*O#p`3hBLaRQi#GLsdy39zD} z1iL(w+biuDFHFxl65nkpHbrjInw;;xTsXpghu&Igtw&HS(bI;@zhY#7X!KT8Mo@d% zqs6!AjHiAz$|imrDSNYTdAfS6_JRLA=hXpEK~0Dk`BC4VtOaRMBjAB5xN7pA0zN;L z=82;oCVEZB;9kA5gCwaZTTD$&BoN${CB!=gG`({HfdW8n!Erg>n^29U@GU;h#7&fg zr-fdbILUuldGLDKut%UA&1%P2%1@R6g~xXUoD`~GeGd}V;3u3x&agEV>xn-|i?LrF zwB&tCOH3Z#)=|G9uF$g{7gFAG=)HFB_nn>-ek^by?+i^@524;*VLN{oPS^$ynm_g>>}aNb53&%d28icovyGc1*Lh5O`WaqvYu&H^JlaJ{hJG zESFJ)(`4e08M9nm8;1^H)NZfo(^IC)`*E&dfW?BPh!Q)1sKAILgbWPBlVZ(cVu{5r z%bP4ff;m95nMVIQW(z0z$kja)I&kE%W2{0iS;Yq3V8SwxckW6LW=6hu|PT06JX&oa<44)RM$AQ$}G?JC2YAY2k z=1BjJds*Oj+&#gXvi4r5CM*~D&Ybvv#w{@dgalq#s=Zi#_=gO94H{51X+%$HI1L|Z z9Gv8oJO7)?1IgbiRfy_=D*K>+tAqfp`EE4S^3#*~z(fq&2F_0k)ae;~*suN_Jj9Q{ zn3y3%Q&vM0LBfnLRtpiffU5Cp{ ziaTk`9Vx}478SZ)A=$v%py;CnJX8_XbQe9}E(@r-Zz9QwWzMd_h>MHYI7P4K4 z%G(=Mg&9w5L7c8oCg&nnGu%Qg^>c>WpsoJW{uHNWZK{uMw3DVeNY!bPJ~F+Vh-1!B zN--&&Ubjjdz+L3ss&SA$Z(v>8L`MZ2jOR9ARF3O6u`wL`vXc&Un*7s=`+qtmPV6(> z9$fYFggT-f{-*j~j%a-$mySO6(9aXe_QAa!?XX;;;rF~Vo(am~oWlKRdfgQ@h|DWB z$WHnn;|vtivI|g+##ED`rk*?LgDD6C`k{^sx!S+y+Ynhp9FL1UOeeM6>;ekB?ZEBj z{}@k-GvQ=OS>(^+rb@aDb;LDiy>X?O)C#x!LkZ_F@nlKXSt5`5J_}yb6ARvd6y^{d z5I6~^qfh*)(D{EVyh^_go`~Hn=X6)f5jidX;4tD)tP6eBpYwxZc(yYC1KYlv>VQ}e zQcvlEDzuih(TiC1W=2%(Cc*C=`si_Uy^H?6O{hI9NC`(;HyFjjd5wOS>1m|l==Sg^ za$KP@s%UQi@xUT4!py3ciMgm~S)aolA8PXJubQ*IUg@(|iAWyk+FO0#!al(OH3LBU zmU+(XRnb^?u+pqVd{Ate;4?^gtak+)xaA+CTeQBHqg>(qxkrzO9u&3DFC-?Y4N+nx zB15nb75p{|N}7Ka-ZM*Uehx7qd!rPWe)~>&vKP&j%+#Nvxte@2f(1Psi@%>Pm_pNt zn;x~+uIaOMTFtDvrcw6Bj3KZUuM_Z4vADB*u7h`cfqwfi#Xz|ud z(X8Jl(dVJ>LF@Y*`kPwj4{9_ZHMGp{?t8ptV*xSA@DFNdlQAGQALpOcKPb?{k^T?r z%g%n-_RuVY4bPU39fq*S6{S6BwzHY^^nNbCNHqQ18_C;FgwVsuTthUFWUBk^G)Yai zZTsRljfI*<)&Q>Qs@^IHW}bh+7(LfEBA z)d?>7+5Do?sMhvv_KH_QxzySECroj6MDf{C4^yq<_ zGYT^lxp_1CN^B4iVa#kIHj5GEMXGl~z@R|Cn z4ZkG!bKzVIf@}-0iLSlF&PLuaKVgL~4?0}&S(6C>|JTy^Lg_()8TQC8slKPO^Paox za_*(a#bbE#vn%JjB|LIv1|s6K!t538$)yDwGKpWbp}(XGvx#^6zbEn1_d2`Zv@Vwa zD@N`6!jXZ$fn9sdn*0&uPxgx2&cW8%`jvkLDWh}TQ4soPkim(+gXD()9b|{i|6h>Y za#meaZ3pZX-oPNy3oYJxtuvbm2=lNparvUsKATe7;{)F)*M_d{?<}7lf;O*FF@WDl zB-Ud{VQOkiF$T}m9W=QQ;EdjxT$g{^H2CcB=<01bt;7Q+)}u9pGOIJrqXPpD1Lv`1 zg7OOIzSKMr;DQ3cfPpMc70e>>bDuTug$nW|nlcZ7YziXB;stgcTi_x1Afmn@pr0X{ ziKP>WnTn~nMJjGhf@8tPjbZ4RJFGb~p);G48$z)Z0cwa$c5TsSmtgJB)Z0NuOm&9* zM2?&zI^)&QPO{*?w@HX$KlWMh5YTN%AX@uxG*^)dXzk$3-)KyBcTf|9Y#K{rEB)}r zO{L$kn{6&?T|qaXqAx^AejVN!v26cZs89Kf+yjq7gVGKX3*HTn!b02*f=wQZy$5*< z$wbYu`;%GU*9~DC@~%lQ^Kb&ISAT(0U${e!qrLldC}9Bp!do^FJ527uf5dt+2NsF# zmq^7Mh_bMaC8z_j9x<@Za0O+QLSq_+KZey;Jb|0}+zxV$(+e-llm>lGV%|VL_8)PP zBEQAq1YU?$5wzAPY`M2nOMq zqe81t#wl z271`fx*6i1$+OAQ{VRFZ9oC)SCzj%w|56Co2fu%UzdeRWHPH=jX{bV#UE)d&<6eS~ z2Bt;}4Y?IJ$|6E6Zl@~UuXO6^<%=B&XjAD z;`|Qp4CH6}w6lwhR~z4D8`1?I)pvx$HLphDZ&b|G#R3Yq)iK`u^Lf3v7a>t}tM)~f zYngT(SdEiSJ$LQha7*x4A?K)@WSvEks3GS$O9N@oWRqc}>o^9_HXL(2S+t)(qv4%n zo*Ha=levT3RR=wtl~*|E3GvWO6@&* zU$npY{{Xv&r|dlR=v9y&p8~Oy8LtYLBt8f>#vV)aaJ;PFAicKg5{cuzR*|6DvfnQ7 zTlvjH2M{qWY04%&SOh)b%9uJNo78v48-0O*f^29mCdB$Nlk2Xk2@XGFZ~CmJ8o7#n zu;|HG#`%4dde8e89MuU;=wk|qZRn%ZG)(`C;xDvYl#8VTMl)?d>|?{`v3$m3NiN1k z^MyorgVp-i1C0&YX=MPV)OZ#6IDpkIW6pL~Hjr2G0GPbMM_2@SLvOG=|L<8B&2i&Z z4r`grU0As2jXf{)LNH61@(U_x*K8nbXxAsXs3DKr%w4hA57vfLvL_6zU3Y0orEEfK z31EcSzld-Dq{3QI2EYT806spIGKB@7OprrHeT|NTQ9o7Xt~o5&b*%LH`9*vvas5z( z!`9%t!8L=~>hj?sl*)Dy`GGk|GsVH81R2V;SWP(B^=mhl!imkfJ8?RZj zkW8g|8mqPb4#x#ZC8`=fksE32FEBx9cps9oO$L+Xlu3>61LYg+xO*v~zj5wgNX==7 zLG<^>G~tUGWd`G-n)>@mAbA&&fn=zh{Cq046`v(&@pfX!RokqZkdS$i;wZ;8+8BOR zFdzcHh2GLu7$SwwEh#IdS%=gsRNya_&!3Ow+|#OHb4{pe@RtZ7L@Gam%~&ul%UTel z5d4Iqx^vq>0J`c`bEcwKT&UfCZ8QO9=Pho?BcUr%9Z=>i|Pei!&Y!6`0Xti?L!W38k~2bywE7Y_Z!~+ zIL|UC&dm;gqSELx%op0bv(l^yX-J_@sHzty?mbnJ=*&(%&%Xt~pithf@i+nn`~OF< ze^v>k(4T^Peha?%Ew~cz#L1cEQT@ca(*sgSl}Ll`A(3drx{PQ<_Ag-9o~p!v=zjq# zwth8hOj0E*>ld63s@J;#oMG2>b&$vLDVn zIew;O>m#HPq6!4&3r>~GYrBWuMdzc40;Es`r`fVfK^==Qq>xv~W&%wW*CcRM1>XCJ zN6~;O8yIy>$(H%?P2O4`U@y|sdHwqULGjk2$mX#-FrJ}#IPXf$o~Z(VBA_%mU`mYJ zHw=52Ez!G5^=xIOjbY4Qf%3?jQm4 zn+MOsvE>8&C*M>q^X~fNN6X4N+fq!{|5R%ff_Zc;=`wSx9bu z{@PZMp`IZ%bo_I4d~CsGF2%W&sgk=DeAqc!68Z zmv=|V_<&C-9lpEGqpH5U1ARDfcKDts;60auJ@(rh<$o#A37F|8a0K(+a)q}V3Pv~Q z#pZ(PvEMzNA>!UhVD$hUvQI1l849n6gSW$9qfGge{*e7I`XXa<{w+vg@CVz?fVObZ zwu1ro|8}PVAKHC*y}?4pr}PEG?P~XSaRbK)H;9pj*W`zmic3h8BxlI6D>yrE>4+Oq zDd3bzDsb7z#w?}%Sg|D{Q|Ny2yGY zva_V$x@~=^PSCv(zRZ9ru$yIdf(}~_Btr4=A_vO7NUrEdt69dybcFi}xbAU$&%Tjl z6$95GI8L&?ZNSe)o18at!~zj=g?1zKcNqBq#*3F=G%$*qEAA)Eb|qmwi>4?$$i)^& z(Ds=8Dh?@SV%@c1;zV04D(018S; z+44Nuac%B!mNpe=dloguBo$lRPtCfO$&nm}hC9Z*THukf6TqJhFgaA6I@T_`61sL? zRG`tto0|>{7V@h@odZ6Vk3*%*-{c8RdS1qc1a_tmXiA6S)wZT2`j-k>-xnB_!@Y&6+_qXq8~wXoAq8<0NXPOqN?? zT(LTLFsv$8JC@55JBKDZB_u|^Tn?LMArD*UNter#b{r(6rJ*qZ)L}3;Jw_;8Li;{sxRv1-+C$8S1Ny=^WeAat8Q3#S$_b3J z=V;vUcNfr5@+&TQk_AUgQURfm4`EPi$uW76g8*9jHo0f-UsTLMDx8SlRLtQ6Mq4#g zT*kmKS--n66S-R(4Y#U2=}TuOV)BVyYkp`KVXt8|QBOK~N=ot7rKTHma-KxsH7d}r z|4iahUHXwiy^w|Ox}zI$DPFM=)BI2~MfevQ-3c{a-Qbz^c;zrF-ZZd0QdKFSa^8iC5Q(z$h$Vn$|f*vZYR-)EU$P2@GkJhzgt!hT5SLNkP#OXt$TVB1Pi6nKb zpz@?sqYzu9f3GN*ke%mUV9G001u(OXpG3;b`O2-&qSiq1+*zJc(ErBhuB8PIMX6pG z&oQm3#eAR6)5Zn`WQfl;=HB4^0fMu00Z`6vPZS2>MYqHfft{kRg~|a#^_9 zAkSYg#HCe{-BbdYvcCJ;yY{0^b1ov$kt;!jKS=Lzu}w*QQg>ftsFgA>5HeOv95rMx zTkQ7GI&FaX33FVP^R0)I75;lK(F|V0m@P&aY$+a2(Ue1=3ln9`G;++e=SOXSSO|0& zN)*|c#$t01&>}KlTj8Fx=R8Ad?=mORpt#CZi((K!iL_!4wqi~YXD9?F3@wT(aWSz^ zw-t&%gdZndPh5w-f529{LQy3EFo6{2iC5h+@EyjnXK!nlMA9ITW`y@=IX))ra=O{2S z339eObZEOoJ#A3dqRDAH`(P4NRFz#M!54W4b0Z#e5UdmXRGBLtDo5AFUm}Sp1CBJN z-$6Psrn^CQB1LnAZ_S2}^p4X=VDV5mi_!6lZLlqo3C4lT)0D09td^(ZJDXJ?inR-d ztOR}?JWh^Zu!I1pYGM+G5XSjZOo6??b9Qpk0MzvxApdV_{6Um{h@1pc6wZkhvLQqC6zCVdJ`0TCeH@nra?=@`m4Goq5)P4{e#bA_DT}n^ z&@Y)Q-|lholIR`zpXc@s-TY^HI6y!gtDrz||9Ng-!{X}~2{SWOfX}JV)rhJvue!A;cC|Gxps-l$5x1{YsuTqhr$1u2;)1U`yD$Uo^0K z?VU`>gTMM#D?q?U$VqGZcWw0g=;_e% zcDG4Xd!NE{!@~0T=3Vo8*Y|6s_x_x9-R_BOQ7P0&f=M)m4+g*5uNnOLn2r zUd4b5o(HD1a!5sfBQ$e zDSC1D9gpbXy<{MGV%6QpGg}5);G8f|h%l+@XKuP~t$u#ri{n$-;SE(=M2#38pzMT! z02xD;21Fd?Bz7m+aXpOfUV=gziSFs zZs<=64D`f$Cih0E0ESd*;*sE{`XUk{?f65hjK~Q*GpRn%;cdIdh1Q}rZG^1RVlp-w zJRIz3+BQycO{JX{HJP8OnbLC|GC4mGO4_a%MA%g@7`O0b=>(peAtQ&1je?ub&uexk z9M{qthM9R`F-z4c!sC!@)BBgU8vh*Q{LywW7_C}zOBPm>Yz>UN9Mu+d;z0{+A*9jQ zU8Y|LBv_=E!M6{08>{e*vZm z;0k-g4%n}X1an`}O5q|u}`Mbg2Vy>2~ zhn&+P-2j@Q0nL7ghGgYXCjEqTcYPK09JEieuS5A#B^}=m;_W%-!yv@aGfrJ7buFV4lRu+vq3CSF1cDDyMS>EE0v*%OEd@XCDXJn&mixr#6UaPGS3Ik0QKSzE5bR2=t zudAtqlRm4dQO0NgkFa-uu58=7g=5>cZC6mSc5K^5MHSn&ZQFJ#R>gKIu1YF+yUw}y zzI(p^z4y1>veMGpP9MGZxz^lcjj#NYWZF@OBP4wK*a z;@QGkvTv|djkwYB6zF2^aE961D1p2Iz#(UqI z;sl$KFb6anAX(*ME!cAw>&3*o|Aw$CbBHeuDAPbxP#_ohMCze0ZDm1n@f~qp?HZYV zSD-TVUWzXKQ@$h4Y@7f1Kjtogal9WvtHj0_;NfA6b5<^k_6rx#u43|*L|K} zU*p6DvyOc4wci#GCL3Ryh4i@ys z<{BrII1P!~rzSQCP}vs{No3RX_a+!3rEG4WWl~Ob^nHZ5`Lj)#LaNoI$cuf>`mzGP{WyH^UdDW4Mqip9q`GV zzCND~i{ybj2#ayC)ZnQjkmnI| zYp;tmI^@*&Y1>uzMGUaD;&ImAP3G&I(1y*heVLt>$5R4-JU-uQs1K?y*l?;oxi3(Y zA+u7QL%Fm~5KMv4&DcAeGh7UG{Lo!<4Rb8|d+ zR41JMx>+;qOKnPab}kf?J{`z3qq@F5>MR?1anT-sy!iqyM|qW!SaYl@R=mgLLMW7r z)ZS@(*}P&#X>(FAC6+o<+GWd=-n?QluyKFiXzaY5!^Bec)7~xia6B$;Ck>u(#?@kZ z^OL^OCPwX-kDrzw`OgvTp6TSe=V`&xHr;H+3{fUe~iDw5HDHNjKAl$54;Oj;_k% zw`aTq^IpX=uHtXz{4Lh!27JrS6U<8$(33mDb?+v(^;^kN+stQYXt4WtDujVb@&?z~ z#9unxICvf3oxTU0vG>}$PqYesvsFpaKnh!Tba^Z}upRHbQywGq=uQJPit2k-T*P<~ zPsw_y`08{#JdUVh&Eq&QPd&p>4JT&d)9z)_EcpP`Pv@L1LBk;ndr5N zxGPVD@TBcreLr@2cR>68nEsnGQgo;VKE5c?icSb+^LBq=Pv|L(t+U_nD&|fpf5^v4 z(dMOxe=B=Raq#l&-n)b7*}Fsk5iE&!>IG#ubCpf-_??BUDV&5);_(zGp~z$j*_9*n zK-h8f?ZxTm#Msu4v3C5VpPy0C54_}}Cs(}dr$7iN>+dTAhgYAO*0n6PKSIhUL^R_`>DY%==?OsN6 zv9+!59dyr%s=iEh7TF7(08CFQHnTh!$x%B8)5%Uv&Xg&klM^qMY2RtAV!A6S2{vXW zzwR7{%(gS8vUT4hFYdF%+neuYX9>-gdeUj7Wys=JlinOzR1K9o5?~_MFRw0Pp@)mK zP+3<8&N?30=kb7s(HUIR&1|3jEOHS+Djiju;MJo_tK;larJ9swKHTp|$YNKor3>F^ zznU6d_Wm&Qo!+SMD{u3r8`FBqwJ2Sxe*xQt|K*m6<^MW5`W86#yekiuI~}Xu+D|}m z>u1*s1zc%{EgPhLBg9He9}0!mbu19+wRM6 z2;i3qk;df`2RV47jGiyoeOyXeY$ESVg<&0}_qz5u_yu&3vXMiMpOCo?m*G~kYQFS% z_43vs&Ovr3ZwnhyGxi;}CCVc8)45;W?lOB`=FF)>_MbrBK)<$x^$mfg3(S22Wf)f6 zX`hdS1;=@B-Ms!Gt*8s#oa*nW%a+T;aI@#xv4+**b9YjngqXMp552;)xE+LKn*q9WFmXhrma&Kle2)S+YdUHE^UvA3JQry@+r1 z?Aa1uBW~h5k6Ra|8h)8$`2n?>5BS*3n&|&&4$$f=@8ZtB8tMt~7DdvsTl!0Cs-weSQh%1NcJoCK zNpl$8Su=mZxQ;0q65id8hSPNsEOE&hNx{8sOfhZ^Lo(rwb1o5d{Qk5dGqnV zvB~$G4)QlG@DCBNxFR)Qm4Mis%`xU}6ZRNb7<#jAYE+T7V3SzhxYZRRCyp}dBt1eO~*;4Iou zp_Ogw843ayHA)odVQr~B)wilU`-`*jV*8CM$expXHJoQPm^Z1jHE<3!unzKqVQsMp zTZkthW%{mrHCksiMo2h((BGd{K%!Fv3eIcPN+oB#Y%n_J_iD_TZ3J98em$^LFn3-q ziGFwUu#xw&0q&hr85z{E8PrKqkgg@)^BAI?sle9ruu=E2Ne2)87SP(m2~uQcSng$$ zvcBE4jVE6D#lvQO3Qu8}>6WY!*J|6WjHq#ZNXO=(t3_b@F2eyxaj#~=LUT1isAmu1 zYAK4To0GnWa~f3iM0jHx&wrkcMYX48^6*j1A%@K5Q+LaySufXhq<&sezW3C{TVgzB)swl!R|mYzFj=cy*^U_Qi#H}a@1OPBZ<$EjzkjEV z_;GCzo5P|kjHbcrWnZaBT~3_3GJN_-)*pX88nVyhC8#FS7$LRVG&)!IJuO&=E!2v_ zl%y?qN>bG+;C!&#FPwxtu8~L?i9Hjmyj{B;UwgUI5jlM%#fUp2BDoG8l)4vr`C&|} zBh27Ey;hjruh*qoDw1mqT2Baq-%qtOSd!wCdk#2rOJ2?)xw2pub)y!obMa!a0_n4((Bvxg+1^^|1d1nL|VJHqEggzjj5xe$}wiK(7f`Ev! zvkYS_&LJMqbgoUV*31xH0a!p_mOi`S9kHnUchB^L2-^#dyM@8f$wr!sLSRseqmqs5 zhb9(=CS#aApLHU@FcHy2X6pPxA*|AvkLFeZgkg%9Cfc`A`_e2$B zrMl9Iff!msh30#mODgdI)mE0-Ut50p3?ZD4mAOb0)&O>B7YYO7{9B}!Uu^d_6sGaz z(`Sg$V3=P~JyX+;2`gsDZBoC{nskaiD^LR3K?g>H7C}Bkz@V-bz&g(2Y|*P8sqAN-=lRf~0s`)ye5B^k3nFEIkf|D6QTAs@{&+v`fv@dfKcsBg^ z&@5|1fOI^PtP+ylc#1*@eukh5h1tJd`YAJag#8L}i_5goIsJ-dWnk6V%d3z3B>zu&zv2;d|B zVUR(NkBP>jmOK`H`5L`MJKjbXv523d%GiA>}Pw(fPHihH4o7`kboyV$t|s!x9+ds@BDRMEIfqmlY(Yf3xV5BZ}P^+VrR zhNE}9xqh0XZw^OvyW4{ep*AiaF=1fQVRUh9^Kxc0cxl{qdv4CwGsxQIEF({yYVlbJ_M3{N$z5I#Yo8lm;73!yf&5(%p+0Q4A7vk)bofvL8pd8UD7bb-Sn35|3v9rB_7?Q$V_JNSTDMHnYj@6cpGE; z{8|5_vym)>IJY(-RbDxhdyhc8;fu69 zv>0YKMh5m7W{%Ohw$BNJK5lXzZ$Q`5vwAYJZeBKizSPut+6}fE`6-!2^}Hu8^qA=j ziGvz=ysb}J!u>MnANZ#p z2R~d{@>ax)3kvPi$9uEeBB|}P$NjxSc;4rsMnqZ#4eKw;-`saa27@RbNjh%5MFq8F zX+Q_zK`OOsl)!6H!%s+jejlv((E29_bscGBlS|2BXJc(*qGL<1NP%j^F!>UKs1h1` z34Kf4_AC3%pI!Vxw{mfru>`MM+Gi!-%JSZ^GPN|24~k>itiR{-*21HnBG>#i7X*VQ zUs#?Hz0&baQN2A_H?;@B8TXKF-0V$vZv@9MP6qZfOA~e}$}~y(ddI69h;mN6<3lWm z7`w|bWw`kx2zW-QB@_k@Wu{ZFwuBZ5R-x7tTevyO3`yprO9-}!|EJ1f*!gMw^v@hY zmgXmStDsVDp9kmp7f@!VQPW5=m%$NC@d|Mj4U;WLH4N4Zs_PKu8N6}D*#BU>bPPtZ z_7h9)Z4_$b6%S?Hpz1GKBUIEq5kA zLVs0i3W6ST#QA9gCt!~8sb9F1G!qn3BEq~k-O`=*3y{yB_)r|AnMNV2#S+nFy<<<5 zuVB-pnGyRKg}AtXi*f$Him}w-_-)lvMVpbKFQQDv{##p{|6G%(k@p6>Qai6dkKQH+ zyk|yR2lqSgi@ymQZ3~iKty~&C)7FMZ)Ao-A-Ue^Y8ejRYhqt$>eW9!?DUOaeOqlQMBG4wB~I;6L!B^K z!S!3w^kd?R0iIRx9mllH;+PtW+k+vcO52|?Yc?DAQ55yRJ&AaVc;bWN(bSPG?p<3< zNuVWT3tI-?NjMFntgjE>NnRCn;}J{e+^MG-O{wTd;@ReRhrr7hb%)^LbeN4$=67db z1>FVSae;9t>Wh~SZOx{}P|z^@&mkN=7SRx}J{Q=~A1(isI!|uv4428hQ&v?3Jz~_g z#5-a%t^dYIPXu~&WJ{cko%~0|9UU9t-zq#ogU$7A!-u3*U*GRu72TEpr9&nE1gPWP z<=;BqCpH_|$o?NB+zPd_{YD;N6jPP;zy4(fdiozLo|OL$@l+190{#DC#i-F?$jBko zNmygjowW~z=j7DwI^M{tb*~XZ+b3TT_nP=OhAiv3%xP<0ndoLayAFu1zHeJUFbt;G z-#B*~09;bXYKfM7xp)E&pw`v^qc_i8+*+9+TP4%}VH6WPyfb&@4}7*+8_5_V^*0=s zP|5Z2_zS>~Fe`n&!|{2)jf>VpF$yIqR+y6YGg>vID|An4r{DV^iON$Lt~l@08AxWw zaxm;D=2DIBkxc}m&ViGO*2M%N!b1^r$^jA#9R--ljTdM!Yw;q*0a8Vfnr}F6O=fs0 zOU>!$B|%69p|_pYoa;XPjLXd|2q-o@Buj~!L-%(GX5TErIZh%7a;0>Y0%7Hwqti?z{3>^{~(BYifFpQWs!)TK_BJ^EME8&Q^!+7DG+WyON zO58ftO0>{{75aRqC^k5B0i2ksos26SLjU2aWHDAy-2~nMWsE2tL+n&*A_YmRoqGpgP;v)N2%_8M-IF%mPInouD-oA#?Cyla^Osr5) zV?^j+Z8RGmx?$dA%zcs-;cC(f0QK!e8*a-F(+N(Q3z6zQF-y;Hcm-to>T{E|QJlu2 zP{80ZScZ=#OEXwDsxmCbm1#(P!+4=GhVsjk_EDTO$l$|xNH8rFD~?NCZZtMopMj={ zDr=}^U*IUWsHN%_(J&0-0fJK_IgO8~Yw}a{ux*Az5sVRs@fiEh$I7!9SIRMvM^%{# zUBfw}_1j9fo&PskJPe!nUcFE18UZqOB((1w_Ig=o*@b(E3x2k0Cq6ekUxIj`St<-; zyICvJR1Rk*hOv%nFxBruFW**zdju;#AwRcBy6BAzRx;IaePwvq^cho6Np^+RD(V!A zA$`6~T=x+7c{LBMaVkm_MEZG{iLl_8on*6_+cx(OPFpWro0%`kC8dRq(ahqF3(H9G zC)sOO#o%RCWuq2F1ZH6IqLkjs5ApqlBqGTzFp=ebx#&{HP(r2@N=C5(RCvq|IA->>Z_s?D&mn| zH2IP1Q&Q!|yWdWd5~pSDAIWG$F;k`|6vZin&{UNsaxv5>>S?4f%@_me&S%XKE7J#% zan)4QP4Xiplt(;qLYsJhLNo=?0cQfYO3j>@PYRf{jSWF`=FCO3JlKCSwZ2O==0Igg zUDavnlwuWD8Wk0(k$<8V!~PSM1Syn~c&VN$9Z~gP7UxGs#zDVWHoR{c#Ztt=8F<5U>4DQ*7HAqy(VX@cxj14tQI3!auX^8iv#DwO;m zl*z#UNtq{o*4$QqB-4;fQ9LG&LIIOk(4yd1q}c)=yI8ET2``f*adsvab@Qv;RK3Rg z3S~K+-+^+sYO|*Z+T^kTjs>*yl@z13bF|VS{*1yXBdj?*sm)D;;+ysmY!nRcQJdQLeOmvruQ$`kAGgk+8icarZt93rGGN!} zmw71|y7M5QB>2QavdVPyr);koX9Sbet|-M45R#$Wc1&{ed=Aa~Q3c)s z7zZviC}|%y!A#=E>FMS=Rq>SmC=G=JDy2{bDg`JCg2y}ZB`|JF!CGJ_$ZTsHKVnl5 zNb#fZ z)pVkvuNEE*2v#{iP=M-9lZH&uQSAmZK}mBI(@slp6#JeQ?Mb~5x-26?t#$8J9;7II${AIc0UWv z5bt)oq`7#bFexxwa`3A5`B`afE>Qy>d z3jbycQHIP+tBRtt6>dhL%LA3-$tm};E(}JOY|ua}G5!Dg%?FA6%M5ti&r#UTZ_DRr@S))R6eFHNFwmcUSau&xHF=2 z!JEqTW@4@lN8Dgv8 zjtEWcD-abmF6^l&Cw2;2eDvuJq0^dh^9w7q8^f-ZAbfj+hJkk_-Ues1Qjn%n(XqCkX7+xt$WN7%GSS|r+xO{dx$-aC!cflm3(+< zBqKu#=ONkm4;O7CLn^=@rL0&(bphcQogNUjRx97g$!iMdBRQYbOM`R4atgzuQuW(M zdij}}JBX10Ez1(Q22K;=4l_F{LU7l$6)p&}8ZMa5+P8Fo94q{~r#y^%3q4GX;+M}6 z_$vtXHjD;oEB=j?u&P{OA9>dzT&P*D_Bd$1-{kiWl2BabLO6>Bs$YM0i^VsxcmH2O zh&_NOlMucSHHg0*!x5?NHss1{5@I5}y)UPW zfpNjQg`U>(K4$nsY|UTgk0chtBA{&L)4C59I7w9g;L(3-@d@}96!#w`^S?xaMK9@m zp4l6qU?I`h0T^e@xIas{zOTMSY9**fe@27XX7-PqTWEYo;Are4mzn_OD8jv=ARRX) zDtKtxbMGVfbM7OXPcs7n+t+-bty(skf{@PEyN0Zec!oUUdA9)Bqzb8rmKw3HxL95O z9@$xDK|_8aTCE1}4YP=)<|*xziQo7PS~3tguc%5BAG~bKI}#xKElJpd$*G_SYzUho zS!aoU-!yyZF2rl6-k6O))Deo?SvDcVfr4V-d{>6IM%-h0a#qS04itne3s3_cDmSR_ zXR*eS(CYj3puAl_DkRt!|HX}Qmu5(*by(?Xe}ctOqdK$-K?Aq8k-@QgD~xb9=IfJp znqw;N!J3uD`lIA+at;KVs~TayD+4#!G@{t5qlh8)~twrtBmE`|DVA= z0m^tU<_E1p7i~ipr&ScO|3zm#Vrz{scI}6cXLSw^z$Gl_Sm{!JjNO-|-|D({aT5w_ zm*a~S$sWfBdwe9oMY`Y~zbqqvocE6uM8CypB}kV_)8xgo|0|OHC+r1jo#-3y!t`NS+xzJSm=;CxqhiMITLQp&mjxN_g503qb?d zFTFBbCf`bTxW1V%-JC4yJE_Evs~TiL0&WwRLYlS805pd)#&VlJ_hvONuB*$)y0y^v5)Q@WZcf$CUE(IbVJ%}Zx6(aKfV$1ufP!iNSEfAC7$a22QdT!OMIXf zq&N%J8jpfa?L4N6MyRz!S|;rfxVUpF;}~Q;Xpw4+L@l6pGc~c*sbKQ2;sU} zn+f}8mSRRSKU=+if7%lQ=pX$SL#ANzhVh}vd_V9Zfh+Otk)vh)`FiB+bjQTzxklxbg6v9`hLUVXl>RJ39c>ga4WNc<33gBy zWem_Z&ePtX?s-nnnaB2uutH+kLDIrm7!>pq+$=O+fI8047#FF{QTV0}5^ldtkv@Hb zI?KLZlr;^Uq$M`vAdZF+j*5%Bbu*klE14lpO79Kk(o&PvOwmyP2}unM$$OUOjHXb? zLRV$s(FOaNH^3R}NDRTjoR0dSf&I(c4@7nwQW4&cY%VokS_CVj9$sR5C0;9V7e&A! z$?D|O0+g^TJ@q_II>aS}7(=L8kTcq7({1#dC(T7des+36cJdMqg9?B~2Jtg5t*&LZ zvoZ~PJUODiy=R&d050Xjxuz>*#Vi>;;fWG>I4;P3kmJQ2NeU+v9A6y?a3-tHc4U@$ zQq-ZL)>8sV%zGSS?X=a>ghL)3I)7I^DrPAT`TFkDE`C&uI4#1P5Twfw3H`^4BZ>!d z?%fIj%Q$B?WZ)eCAw@O`8zZ5ptlS_+o?l)K6O->);Di?tj?Ykw8cu`4h8F<52?IRb z&%t<=qVgyaG=gjuA$3uCZmd0}*SJV9A?>He$_^!l zP!~zUgUsj74i#@ zv*99w)yV>;tfebdOxDCwy7*iXZiPz|_+8esKCypY^|8~56*2g05!Cu;fh~egAHQY^(!`?u+rm=W#BC- z9|3jNZbvz6j%z^`28c_rX<-*e2!EqNpRn4)bv}Hca={;`9j{1KidP{#T#74n9PTMt z69yD%2_US4A>IE)z;n0hFqsTi;9mr&j-YrkaVMNOa=gLB733(&LM+A;7PA&aNy?JBVJ!ukA^=Gv-9$0}XQ`RQ#ZJ{OEoYeo3+%&YN78XC;``jd?8pvW zlP@eLu@v`H7JredyhrxW4$P**h2&ip0pzG!9&Rhzl9cT+L>j04ZOA&pA3iBSgue_a zO$7(?kzUOTW_K5e$(UOcbJhlq6K{_+J(4q=bEPTJCCR%9mOB}loCYoo{Bf&0sl~)V z*J(*>|Lpg#U0&6sC1J8l9p&&$nSJr`QH@lY*PGv{5y-Bb-@4PL=jTD#Qw#WCiJ1w3 zbFFQpT=)`$vOq@Oqn@Sqg8p?bU9_5(LJp0ea6cBp6sL`&!Wp2G54ZS(#{yQ|S9wcJ zX#>1sPV8GT;H)HBI;S5W9y^fxDTG^wdagc)7b@vlz}R9Q>I+9ZdW~7!pKl5aup_=U zr1UP#ko;94X<}aQC*>4G1C6Sl>Pl!uI2GDDHsHZw=QUOY8?t74B>w0HUx+R z%OGG_T4}R1Q)IMvxB=q8vpMP#F)De6(1<@Od-fzKQKL@_841fuiduV$OcGcIZ&E>E zNosn^5O19aBAKE<4<*i8Xu6C*VO88Fz-XH4?H4da6-x;~U}?3ZFf=kVDDzDOT`{oT z4AoO)5&VZxF@Ls)%2OBlv@Xb3^8~wxl&7C$l6y49XEr4Bdnk2+D5|EY5riU*s39e;-1KDHYLf@}P%Xj>n6dS|conKPU>&O4-s8}Q@EJ zgaU;f@{P!eRP*$!OU%3HZ+*Qk!($4}*@*7>h$+T`aLj@8AY!!ibX@oIt7W#YMjR}u z;gKw~hJt+lxL-TpuMPw`4H>O7K)q0?j*fiVThvREB52$CBRb;YAOdYFcpH9IaH9hr zTxv#34kI%(FE;q-Y>sQFGbfbA0TR5EUa-`{2ZL~lCJYam_b<#;HVX#3O zg_i4%l9oS_gO zDd_kbRJ6K=jnhTn;1qIfG?)D{jmS@(faR4RLiOU94avON6%(I{fp9E3ZSD~h{X#`a ze7Q&{asr8yrNp1j0}_>Rv55u`gAWxCo>1(9>L7(+#naYPv-4{4*!{#z_^Q|4&v zTVa046ytnxbH0nX%tLGZp!GzzKIKQMdjP}o+VIL?JfVQ~n$nuk!omukwj^T8Rs~o5 z+pRECW2>apb}TF(RX*{A^!bfdbmb6M!T_rN#=c)m!vDGO0 zMz;4GahVIXpk1!qnNq?Ag74%59DuY>szWf9D$RTvU{6FPxOMRP*rNwH_TuPQiB&+j!eMoTcgZm z-vhEZy?@8l4rMobT@;X|{(8F^ZO@4CJKEm{)+zk%!I@u9jtUv0l!Bt<_GC>De;f6Et63i7=D--tjtTem<2EgMhw1+mN8Qsw;>MC{*nke?fvL(PKb!m zC8St3?^E<|iwUrq>Tfs@5VU_gW)AEftZHOz`&UQRt<(Yg?<@qPKfXrN zq-D$4CbeLo(v5~TPa)xZgP;@CV{If{33n{~{>E<`$8uFK-SuD>?{!5#O#vDRgX=0P z1y0KQG5c)%@$g2d-S&l{kxGn?uKh;avE6 zMifYUqYJ)gcod8%Uc3gG6wV%B&rS*jTWnwzYs~VbomcpV>bMbuxNtI?j=9qD7|W3j z{^=DCE1pz=Shha35aCS4cn130qc4_;h!mZat!nKcyImP#lll|i>MS%%VSRSc(* zvC*03plj6w-{|Jr_S_+_rYjsY0+-4f^a4V7&w_O9M@tb@^4JQi+f1!{&=Kz6y5pbq z1Nb~Z1@1-757lnK%61>WU&6R~^&r;OR_JmIv=3dBMrwG$vget2y0PM?i>o_n-%ao^ zdKTO}f|ZX?=%{zQ9rf#)W!vYDoSp4$EDj-G+}@XsF&lg+VRJn#CR%xL(_wcqqc7x* zm?96wZzmYJnG7Nd&w;F(#lU_*pnPg$?cynU1!urwD-e)k~mnUd1hY;~Pdq;&P9Z@}r&*I4+zh!loD%7gKt7_dJtbcVl)0TJG;KJ$sse#gYxb(8&7TGC&xpuWuiip-G8rLkQV@sn%az@dMc;(dZ zZ?siE1b5jwR9_*bwuSyg6oK;G!rtzM}u zbW!ikwU&s}KVv-lRxL+wOuY&jENBtc^-JTzyOm2GTR zp06uflFD{>B8x3&#xgC0CRScayJ+5m#aM$j#>+=-rmTgBC1UfT5NU@S7*1Tup1D6s z*7V;%fG)KAN+7Id9J|u{_4!~UZFZnal3D-L%hB?|SRK)uE<_*fn-kjm@o(mL-xu0n z7tdcDa(!Ar#*_MY{9Z2G4El8aQKW}2>hj)h_t!5R1V8S>sKwh6p~9p$LA=9*_)kGD z6&2_Vnkn%bDGR`{_bFV5h+R%aA(;XngR2Iv{gD<39rGrPb;8?OJ;WI@Ty)*8&{-6szs&g1wT2kMWo`i!aFJQ|!o! z;9?WvAQW9(kqgLP!J|1pY>l#%0Fqz={rTWd4W!T>G}EV9Ye})WSd&bmGEJu|U*`&n z9f#zb>qJdEKP$Jxl4WAs_ec2aH>l5%OOM;pYb3i zCNV;-+1|y3P%MW@-!hbL(>Pp2lCQg+$M}`bp!}ip^bI356$zX3;in`YF^0}k#LDvI zaY#Yo{a2O!)a33Cx}~KR>Jo{oJF5z%2pk2eIGKZVuftzg24|=-#e;G=FNYZlsZzA^ zO?Xz+O=xI`UKbs3{x@o=-20D~) zMXqpTx$XxAwYF@Rb1@hW<=e#^5=#0$f^`sU)SxCd?6lerEX-S9LXQ1Ru>bAmQdkCF zW2>EN^ORkSz5o>+B|p9u&ZC>s%5;lZTFG@jNms_zena+kf& zQefEM-~jY}+hVTk(cwo5-UIn}^Ny1eRgHRAgx{IU8nZX9AMCiR2*)KksZC&X^Z_^! zl|0RilfklPUGTcLKQp=)(^ZqzK^oI(!9hO1-3W>Pt{CM_qu!sjl|59GyWC|p)Z{YS zV+(E_ncn`eUzJ(*$cKSnvrUoJJ)xOc6-vO}RS+(Z^#>H8^ zy0X{)(bt2vvU60Ss8ZmY7`E#*uSVyDq9ep;r?5Yrr&#PI*QSOKDSq8YbPP_Tn=g3i z3CEsALSNL&SBHEWJI#+`pyppqg{{-HK!l7`5~HnEv$Sm;_45arwc_Y$VbgOe8LAEM z&mG(9oM1Bg@Rm^0C4}d%-BKzhrM{^8fS%zgDbDz3vvfXCL}D3O?s*u1)c%RFK)h%~ z?r@Nux{LsF1^cojOq`dNbF>AL)$oo8xqptRC|Pl#(bHnZ<&o)$RO8wltBoD+3U1h* zFfO}Bnn|pdYsOIpojKAD1+yVFR0eshDGdbzQI5DVb7-qUheBHOJXl_;#_=Mh$xW~i z9a7qj)#b>|YuR_j7XUlBmYG(J>$6ifz1Kc1B2FOoe@rlHVQoeAEMP(Ff)B?C#>6hjY@hL@ms%1Ukb7OH^bvTYN7{B*JNL#}EU zp^BR?FRe`RKXrU?;ySlj^RrJOX?1F*mtZ*uEq=K!`ZQqOVQP6BAtpkG+rd)iP&2`Z z!l0H;k~$U4tI1@N>(+Q}Y%!PB`M&VnN7_ZLLLfnYZ)97HLj=3s;FQ@NMA&KLKh8|o z+=XVs6ZV+iz!5ocjJqZ^i}J26uO?T~r7rZg`UdvT0d47$livdhHUJAx?3$aq}ccbvv*7NMAs zDDH@kGG=a1H@hvSTgj#DxxJu{hV=0#a)f63U3a3e=(d>9l1-d&sH*k4WqrqC$$wx0 zca=K7s&PAInkjw0a9NmRTfaV)O;_iz+t<^|Q&4JQ>~lgTX$HJp`GjoO9!At`kA#09 zbw^%MJQ)5G*k<+SXe^tA{&k;9_UnJF(&FdBB5Z&)nFwHZ_n$R~y_=n}nKQ5|^C!ET z(cH4%=fUaODHBeR&~1rG;(*|2E)-VRi;*C2xd)-bsXxyfXJy&Emc25Wp|8#nDvxBB zLvx>sLHFC?efI&pLjHQa2};~XiokH;x(?DQ+Yx0rmYrTXc>kGpN_F{D8Fn2F?b}?t zpRm=(-h15aZ`6$iNHn^-G8#?3@6@+z-=#95ZTVxk!v`Ny_cd>l>kjRvD`qt43CO)? zM;6=(cTF`Sc3EXqM%Y7ap;fB#i(c8d;12E<+_Dw7Ow^sa>%ytSD|RE{;YvC&Z9-7$ zHV!46s1)}hsWgc=G!*AAM_1JAl?I$tmJ3+P)%q#)i|&-?Y)(@Zfh=9ewNh7jZql_b|@>{UdMx^5-=B=DyDRj6~uG`wKl z`sBj{*iOZ)Ud+MREAkpJRU?7fZiv$ts)NnrtLZF-!gZhTF-|`e=1j0Y?ac7qwdisG zhUtZ(GUz$3ae_Kl;RSP(^*+pB{R*t}S`6KA_Ff0J9d-5jCKiUZxL8a5 z0_>NyP*2xmPpHSM{nyj=B8UtuL*005{Rl2Lh6T7#)`p_&)4U<;)E@=gAMpR2u?ojm zEP5b8K!Qm?K(K)`7O-*mU(*zDY5zunv_hE)tsF!*-4wf@$deZS>0%j9mp{r%8{l6 zhs{fX=^tdh*XeWy!-9dVK)m@;M?M3b1wp7FJ;%vA@DtiVZa}|iCWE?K%<0cDge6@3 z5X&Vs4ji9JUajg*zvD|`R^#9V&^u>F4P3c+#^hK=#lilLra3SZilEexaMD97)uL`-j}gM_?0 z*e5tnVkCjj4KYvf&o~Cf3|M*eX_=LFw>&k1HYIpr=o+1qgyT&Kb?Bns=r}F@*VYAd zOtHH9aRW!>dNkC<(+flvWS*Nb-OqtfBA2`>0TJ>MmZ!`Ak$^?8< zdgivROE5jxr}%>EEw8H|+v0b+m0bYgLRh3$1Keu-^&$_^H3+c-(9%6=*YxX>! zz-2UDWP+2y#Gg;>jQT|uZ=G;Pa>i?qsQK$k%M{LObtHtWisqU2_2$GmN2=aF;@bcF zz~txaX36f-OIMudU&QWki0{bM%adQ*KV8t>^8ov`#7sU;Bc0-Fd%?4E2_+ zQ>SY!tc^O9Wta8u=AGnwIrp;ueVnDoe@it_czg5jhTA9KKC)vM-ah;FGrK3>fVKB~ z)xE2w-}g6`ufHO_ep(gV>#Yoo%|{Jx85|7Ak;tBrvclttaf)OSZ)%(73rX7#_aQ^x9RR}4ey@ra7w={`nv1D zlG&@YuRMKqO0)m@^4U%MoN8{ZyH)y5Iz&Nb<)qhh*1fUX75?&#+EMjJ;624gwi#;| ze#p8Q|9-M>W!mSQV8OaoER$_t%riXugp0+e%iE~4Nu|TLDV^=Y`vp}l@g-XK&DB0T z98%L~nem%@UL?Elwx@y(*Hs(V%;b#bo7brv$MRy<)4mShjmGm6_c2V^^Rx2R`V#JW zzRMR~?5>D=Y0eaLPoVeTUCG|KdrcqxncncZ{C3#3^~YWYZt+XO@<9y-HxFFCS#dtu zjsJs?8asc%smO+{bqa>nsX1>q-N+Zc$!E4MVcv@ekLH9fxhR~l^uJtQ_63FQ(#@Uk z*pj)rHH&%#Ba{zI&U_&!(Y^E2DusWEsS$l2tZGk9xMCvmMuJP{aG}n_ig^i{XP95G zCp~HJJ*|6*H~z_`{`jdAx2GL`HidKA+q=qh+Ryo(SucFMeMwqcugp~2%uiG1>|SYB&P zmd~qucJukX`h~@(uT77uOTE2%{obF~Zd>20+@Ae>UBBJE&nNHI{K{H@zd!cZ-+uf5i%Ja-@J_MIh`qtmrrM%h6(xSyEVyyv zhsQ;whr7gH#;$JbKOa4LQsT`GmDS%TaQ-}3to-VT^U9gR>EC><{Jn#wj=6 zbF1nrE54U9c^1m)Ek6sMdhwNP;9u6nCY7K@^S8fgfs14ZE46AKEkxjLz6#_>JCs_wfAy5%!~0Rf&l02)!63-miS?RgE-LPkK# zPXn!zL9x7<2dW+7b7VuXhC=UZG3#!928Os$RtA0)liu?}O)4&_%t-}LSE7dj`hk)# z{SA!EZBaC%9WRM)4*EPP!W@ZWm^nz3DCpYJCteWR*~+2X(WYV0O+cTBK$u`r0W|?- zS^`}^`lvBN|LH2Ie)KV9bR*FF-v}d)G-B 0.0 -), --- (step 2) Get top N clusters for each consumer embedding. N = 25 in prod -consumer_embeddings_top_n_clusters AS ( - SELECT userId, ARRAY_AGG(STRUCT(clusterId, userScore) ORDER BY userScore DESC LIMIT {TOP_N_CLUSTER_PER_SOURCE_EMBEDDING}) AS topClustersWithScores - FROM consumer_embeddings - GROUP BY userId -), --- (step 2) Get top M tweets for each cluster id. M = 100 in prod -clusters_top_m_tweets AS ( - SELECT clusterId, ARRAY_AGG(STRUCT(tweetId, tweetScore) ORDER BY tweetScore DESC LIMIT {TOP_M_TWEETS_PER_CLUSTER}) AS tweets - FROM tweet_embeddings - GROUP BY clusterId -), --- (step 3) Join the results, get top M * N tweets for each user -user_top_mn_tweets AS ( - SELECT userId, consumer_embedding_cluster_score_pairs.userScore AS userScore, clusters_top_m_tweets.clusterId AS clusterId, clusters_top_m_tweets.tweets AS tweets - FROM ( - SELECT userId, clusterId, userScore - FROM consumer_embeddings_top_n_clusters, UNNEST(topClustersWithScores) - ) AS consumer_embedding_cluster_score_pairs - JOIN clusters_top_m_tweets ON consumer_embedding_cluster_score_pairs.clusterId = clusters_top_m_tweets.clusterId -), --- (step 4) Compute the dot product between each user and tweet embedding pair -user_tweet_embedding_dot_product AS ( - SELECT userId, - tweetId, - SUM(userScore * tweetScore) AS dotProductScore - FROM user_top_mn_tweets, UNNEST(tweets) AS tweets - GROUP BY userId, tweetId -), --- (step 5) Compute similarity scores: dot product, cosine sim, log-cosine sim -user_tweet_embedding_similarity_scores AS ( - SELECT userId, - user_tweet_embedding_dot_product.tweetId AS tweetId, - dotProductScore, - SAFE_DIVIDE(dotProductScore, SQRT(tweet_embeddings_norm.norm)) AS cosineSimilarityScore, - SAFE_DIVIDE(dotProductScore, LN(1+tweet_embeddings_norm.norm)) AS logCosineSimilarityScore, - FROM user_tweet_embedding_dot_product - JOIN tweet_embeddings_norm ON user_tweet_embedding_dot_product.tweetId = tweet_embeddings_norm.tweetId -), --- (step 6) Get final top K tweets per user. K = 150 in prod -results AS ( - SELECT userId, ARRAY_AGG(STRUCT(tweetId, dotProductScore, cosineSimilarityScore, logCosineSimilarityScore) - ORDER BY logCosineSimilarityScore DESC LIMIT {TOP_K_TWEETS_PER_USER_REQUEST}) AS tweets - FROM user_tweet_embedding_similarity_scores - GROUP BY userId -) - -SELECT * -FROM results diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/unified_user_tweet_action_pair_generation.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/unified_user_tweet_action_pair_generation.docx new file mode 100644 index 0000000000000000000000000000000000000000..3b0e82abbcf3f94ea4b1da9d246a70d45460efc0 GIT binary patch literal 37450 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 D*BS6| literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/unified_user_tweet_action_pair_generation.sql b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/unified_user_tweet_action_pair_generation.sql deleted file mode 100644 index ad2e1d7bd..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql/unified_user_tweet_action_pair_generation.sql +++ /dev/null @@ -1,45 +0,0 @@ -WITH - vars AS ( - SELECT - TIMESTAMP("{START_TIME}") AS start_date, - TIMESTAMP("{END_TIME}") AS end_date, - TIMESTAMP("{NO_OLDER_TWEETS_THAN_DATE}") AS no_older_tweets_than_date - ), - - -- Get raw user-tweet interaction events from UUA - interactions_unioned AS ( - SELECT - userIdentifier.userId AS userId, - eventMetadata.sourceTimestampMs AS tsMillis, - CASE - WHEN actionType IN ({CONTRIBUTING_ACTION_TYPES_STR}) THEN {CONTRIBUTING_ACTION_TWEET_ID_COLUMN} - WHEN actionType IN ({UNDO_ACTION_TYPES_STR}) THEN {UNDO_ACTION_TWEET_ID_COLUMN} - END AS tweetId, - CASE - WHEN actionType IN ({CONTRIBUTING_ACTION_TYPES_STR}) THEN 1 - WHEN actionType IN ({UNDO_ACTION_TYPES_STR}) THEN -1 - END AS doOrUndo - FROM `twttr-bql-unified-prod.unified_user_actions_engagements.streaming_unified_user_actions_engagements`, vars - WHERE (DATE(dateHour) >= DATE(vars.start_date) AND DATE(dateHour) <= DATE(vars.end_date)) - AND eventMetadata.sourceTimestampMs >= UNIX_MILLIS(vars.start_date) - AND eventMetadata.sourceTimestampMs <= UNIX_MILLIS(vars.end_date) - AND (actionType IN ({CONTRIBUTING_ACTION_TYPES_STR}) - OR actionType IN ({UNDO_ACTION_TYPES_STR})) - ), - - -- Group by userId and tweetId - user_tweet_interaction_pairs AS ( - SELECT userId, tweetId, ARRAY_AGG(STRUCT(doOrUndo, tsMillis) ORDER BY tsMillis DESC LIMIT 1) AS details, COUNT(*) AS cnt - FROM interactions_unioned - GROUP BY userId, tweetId - ) - --- Remove undo events --- Apply age filter in this step -SELECT userId, tweetId, CAST(dt.tsMillis AS FLOAT64) AS tsMillis -FROM user_tweet_interaction_pairs, vars -CROSS JOIN UNNEST(details) AS dt -WHERE cnt < 3 - AND dt.doOrUndo = 1 - AND timestamp_millis((1288834974657 + - ((tweetId & 9223372036850581504) >> 22))) >= vars.no_older_tweets_than_date

nQEYT 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 KFnj29gLnY{0;nPY literal 0 HcmV?d00001 diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/IndexGenerationUtil.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/common/IndexGenerationUtil.docx new file mode 100644 index 0000000000000000000000000000000000000000..07684c7ea49b31d51db6d95998d0c74c5f61fe10 GIT binary patch literal 37656 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 { - // Retrieve the tweetId and tweetScore - val tweetId = gr.get("tweetId").toString.toLong - val tweetScore = gr.get("tweetScore").toString.toDouble - - // Transform tweetScore into DecayedValue - // Ref: https://github.com/twitter/algebird/blob/develop/algebird-core/src/main/scala/com/twitter/algebird/DecayedValue.scala - val scaledTime = - SnowflakeId.unixTimeMillisFromId(tweetId) * math.log(2.0) / tweetEmbeddingsHalfLife - val decayedValue = DecayedValue(tweetScore, scaledTime) - - // Update the TopTweets Map - tweetId -> Scores(favClusterNormalized8HrHalfLifeScore = Some(decayedValue)) - }).toMap - TopKTweetsWithScores(topTweetsByFavClusterNormalizedScore = Some(tweetIdToScoresMap)) - } - case class TopKTweetsForClusterKey( - clusterId: FullClusterId, - topKTweetsWithScores: TopKTweetsWithScores) - -} diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/BUILD b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/BUILD deleted file mode 100644 index 441d8a98a..000000000 --- a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/BUILD +++ /dev/null @@ -1,250 +0,0 @@ -scala_library( - name = "ftr_bq_generation", - sources = [ - "**/*.scala", - ], - tags = ["bazel-compatible"], - dependencies = [ - "src/scala/com/twitter/simclusters_v2/common", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/common", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:offline_tweet_recommendations_decayed_sum-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:offline_tweet_recommendations_ftr_adhoc-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:offline_tweet_recommendations_ftrat5_pop_biased_1000-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:offline_tweet_recommendations_ftrat5_pop_biased_10000-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:simclusters_decayed_sum_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:simclusters_ftr_adhoc_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:simclusters_ftr_pop10000_rnkdecay11_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:simclusters_ftr_pop1000_rnkdecay11_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:simclusters_oon_ftr_adhoc_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet:simclusters_oon_ftr_pop1000_rnkdecay_cluster_to_tweet_index-scala", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/sql", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/sql", - "src/scala/com/twitter/simclusters_v2/scio/bq_generation/tweets_ann:bq_generation", - ], -) - -jvm_binary( - name = "ftr-tweet-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.FTRAdhocJob", - dependencies = [ - ":ftr_bq_generation", - ], -) - -jvm_binary( - name = "iikf2020-decayed-sum-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.IIKF2020DecayedSumBatchJobProd", - dependencies = [ - ":ftr_bq_generation", - ], -) - -jvm_binary( - name = "iikf2020-ftrat5-pop1000-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.IIKF2020FTRAt5Pop1000batchJobProd", - dependencies = [ - ":ftr_bq_generation", - ], -) - -jvm_binary( - name = "iikf2020-ftrat5-pop10000-batch-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.IIKF2020FTRAt5Pop10000batchJobProd", - dependencies = [ - ":ftr_bq_generation", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_ftr_adhoc", - key_type = "Long", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_decayed_sum", - key_type = "Long", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_ftrat5_pop_biased_1000", - key_type = "Long", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "offline_tweet_recommendations_ftrat5_pop_biased_10000", - key_type = "Long", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.MultiTypeGraphInjections.tweetRecommendationsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.CandidateTweetsList", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -jvm_binary( - name = "ftr-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.FTRClusterToTweetIndexGenerationAdhoc", - dependencies = [ - ":ftr_bq_generation", - ], -) - -jvm_binary( - name = "oon-ftr-tweet-index-generation-adhoc-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.OONFTRClusterToTweetIndexGenerationAdhoc", - dependencies = [ - ":ftr_bq_generation", - ], -) - -jvm_binary( - name = "ftr-tweet-index-generation-pop1000-rnkdecay11-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.FTRPop1000RankDecay11ClusterToTweetIndexGenerationBatch", - dependencies = [ - ":ftr_bq_generation", - ], -) - -jvm_binary( - name = "ftr-tweet-index-generation-pop10000-rnkdecay11-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.FTRPop10000RankDecay11ClusterToTweetIndexGenerationBatch", - dependencies = [ - ":ftr_bq_generation", - ], -) - -jvm_binary( - name = "oon-ftr-tweet-index-generation-pop1000-rnkdecay-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.OONFTRPop1000RankDecayClusterToTweetIndexGenerationBatch", - dependencies = [ - ":ftr_bq_generation", - ], -) - -jvm_binary( - name = "ftr-tweet-index-generation-decayed-sum-job", - main = "com.twitter.simclusters_v2.scio.bq_generation.ftr_tweet.DecayedSumClusterToTweetIndexGenerationBatch", - dependencies = [ - ":ftr_bq_generation", - ], -) - -create_datasets( - base_name = "simclusters_ftr_adhoc_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_oon_ftr_adhoc_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_ftr_pop1000_rnkdecay11_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_ftr_pop10000_rnkdecay11_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_oon_ftr_pop1000_rnkdecay_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) - -create_datasets( - base_name = "simclusters_decayed_sum_cluster_to_tweet_index", - key_type = "com.twitter.simclusters_v2.thriftscala.FullClusterId", - platform = "java8", - role = "cassowary", - scala_schema = "com.twitter.simclusters_v2.hdfs_sources.injections.ClusterTopTweetsInjection.clusterIdToTopKTweetsInjection", - segment_type = "snapshot", - tags = ["bazel-compatible"], - val_type = "com.twitter.simclusters_v2.thriftscala.TopKTweetsWithScores", - scala_dependencies = [ - "src/scala/com/twitter/scalding_internal/multiformat/format", - "src/scala/com/twitter/simclusters_v2/hdfs_sources/injections", - ], -) diff --git a/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/BUILD.docx b/src/scala/com/twitter/simclusters_v2/scio/bq_generation/ftr_tweet/BUILD.docx new file mode 100644 index 0000000000000000000000000000000000000000..71ec3f8be966412716c4130b25fd01314602c054 GIT binary patch literal 37637 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