Closed vitalwarley closed 1 year ago
Lembrando que
cosine_mat = torch.cosine_similarity(torch.unsqueeze(x1x2, dim=1),
torch.unsqueeze(x1x2, dim=0), dim=2) / beta
em cosine_mat
temos majoritariamente pares negativos -- qualquer par (i, j) onde i != j ou j != i + batch_size, para i < batch_size.
Como saber o tipo de relacionamento entre o par (i, j)
na matriz cosine_mat
? Eu sei, por exemplo, o parentesco de (i, i + batch_size)
, mas não sei os demais.
Uma solução é combinar o título parcial do primeiro indivíduo (e.g., father
de father-son
) mais o título parcial do segundo indivíduo (e.g., grandson
de grandfather-grandson
). Mas os indivíduos seguem essa ordem mesmo, isso é, em todo par father-son
temos x1
provindo do father
e x2
provindo do son
? Se não, podemos usar ages_x1
e ages_x2
para definir isso.
Além da idade, parece que o gênero também é necessário. ms
pode ser (male, female) ou (female, male). Combinar os indivíduos do par com os indivíduos do par fs
precisa respeitar a ordem (female, male).
Após usar as estimativas de idade e gênero, temos uma questão a resolver sobre a combinação dos termos do parentesco
is_kin = 1
x1 | x2 | age_x1 | age_x2 | gender_x1 | gender_x2 | kinship_type | is_kin | age_diff |
---|---|---|---|---|---|---|---|---|
N33 | N21 | 82 | 40 | female | female | md | 1 | 42 |
P80 | P50 | 45 | 19 | female | male | gmgs | 1 | 26 |
L66 | L30 | 20 | 22 | male | male | bb | 1 | 2 |
D53 | D30 | 55 | 58 | male | male | bb | 1 | 3 |
D94 | D87 | 63 | 30 | male | male | gfgs | 1 | 33 |
is_kin = 0
x1 | x2 | age_x1 | age_x2 | gender_x1 | gender_x2 | kinship_type | is_kin | age_diff |
---|---|---|---|---|---|---|---|---|
A97 | B30 | 73 | 39 | male | male | father-grandson | 0 | 34 |
Z90 | J100 | 37 | 44 | male | female | father-daughter | 0 | 7 |
N33 | Q71 | 82 | 73 | female | male | mother-grandson | 0 | 9 |
Z21 | Q71 | 99 | 73 | male | male | brother-grandson | 0 | 26 |
S63 | K43 | 85 | 63 | female | male | siblings-grandson | 0 | 22 |
Para qual parentesco mapear os novos tipos: father-grandson, father-daughter, etc?
Para qual parentesco mapear os novos tipos: father-grandson, father-daughter, etc?
kinship_type
define qual PDF usar para extrair a probabilidade de age_diff
.
father-grandson
pode ser mapeado para: gfgs
, fs
, bb
. A escolha define a probabilidade de se obter age_diff
. No caso de (A97, B30), temos age_diff = 34
, que é menos provavável para bb
, enquanto que mais provável para fs
.
Contexto sobre o funcionamento da perda está em https://github.com/vitalwarley/research/issues/33#issuecomment-1705631136.
Minha ideia:
Vamos obter um
age_diff
entre todos os indivíduos, computar cada probabilidade em relação a uma PDF pré-definida (e.g., power-law parabb
), determinar uma penalidade (e.g. via a multiplicação dessa probabilidade comcosine_mat
) e adicioná-la à perda.