Folha 1 de 9, pesquisa, 2024
replication-ANES
Replicação em PyTorch de um paper que infere amizades sem supervisão, usando apenas trajetórias de check-in em Nova York.
O problema
O artigo é Aspect-oriented unsupervised social link inference on user trajectory data, de Byun, Choi e Kim (Information Sciences, vol. 626, 2023). A pergunta: dadas só as sequências de check-ins de cada usuário no Foursquare de Nova York, quem é amigo de quem? Sem rótulos de amizade no treino.
A ideia
Cada check-in vira uma tripla aspecto-orientada, no estilo dos embeddings de grafo de conhecimento. Usuário, POI, tempo, categoria e geografia têm embeddings próprios de 128 dimensões, e projeções do tipo TransH, TransR e TransD levam esses vetores para hiperplanos ou espaços de relação. Dois usuários que frequentam os mesmos lugares, nos mesmos horários da semana, nas mesmas categorias, acabam próximos no espaço aprendido.
O tempo
A semana é discretizada em 168 slots, dia × hora, com correção de fuso a partir do offset em minutos que vem no dado. É isso que a grade logo abaixo desta folha demonstra.
Perdas e amostragem
- Margin loss entre triplas verdadeiras e corrompidas.
- Orthogonal loss: mantém o vetor de relação ortogonal ao hiperplano da projeção.
- Norm loss para segurar a norma dos embeddings.
- Amostragem negativa com busca binária sobre a CDF da distribuição, O(log n) por amostra.
O código
- Tamanho
- ~2.400 linhas de Python em 8 módulos
- Modelo
model.py, 776 linhas- Treino
ANES.py- Dados
preprocessing.py,data.py- Suporte
loss.py,projection.py,graphutils.py,utils.py- Variantes
ANES,ANES_GEO,ANES_GEO_YELP,ANES_GEO_Others,LBGC_v4- Recortes
- NYC_20, 40, 60, 80 e 100, com pares verdadeiros e falsos para treino, validação e teste
- Treino
- lr 1e-4, distância L1, 1000 iterações
- Inspeção
- t-SNE para visualizar o espaço de embeddings
Slot semanal, a conta
# dia: 0..6, hora: 0..23 (UTC), offset em minutos
slot = (dia * 24 + hora + offset_min // 60) % 168
Forma reduzida da discretização, usada na demonstração abaixo.
Check-ins viram slots semanais
Clique numa célula para escolher o horário UTC de um check-in, ou ajuste os campos. A célula azul é o slot local depois da correção de fuso. Os pontos mostram dois usuários fictícios, A e B; onde os dois aparecem no mesmo slot, a borda fica dourada.