| 35 | |
| 36 | |
| 37 | def create_model(numNodes, embedding_size, order='second'): |
| 38 | v_i = Input(shape=(1,)) |
| 39 | v_j = Input(shape=(1,)) |
| 40 | |
| 41 | first_emb = Embedding(numNodes, embedding_size, name='first_emb') |
| 42 | second_emb = Embedding(numNodes, embedding_size, name='second_emb') |
| 43 | context_emb = Embedding(numNodes, embedding_size, name='context_emb') |
| 44 | |
| 45 | v_i_emb = first_emb(v_i) |
| 46 | v_j_emb = first_emb(v_j) |
| 47 | |
| 48 | v_i_emb_second = second_emb(v_i) |
| 49 | v_j_context_emb = context_emb(v_j) |
| 50 | |
| 51 | first = Lambda( |
| 52 | lambda x: tf.reduce_sum(x[0] * x[1], axis=-1, keepdims=False), |
| 53 | name='first_order', |
| 54 | )([v_i_emb, v_j_emb]) |
| 55 | second = Lambda( |
| 56 | lambda x: tf.reduce_sum(x[0] * x[1], axis=-1, keepdims=False), |
| 57 | name='second_order', |
| 58 | )([v_i_emb_second, v_j_context_emb]) |
| 59 | |
| 60 | if order == 'first': |
| 61 | output_list = [first] |
| 62 | elif order == 'second': |
| 63 | output_list = [second] |
| 64 | else: |
| 65 | output_list = [first, second] |
| 66 | |
| 67 | model = Model(inputs=[v_i, v_j], outputs=output_list) |
| 68 | |
| 69 | return model, {'first': first_emb, 'second': second_emb} |
| 70 | |
| 71 | |
| 72 | class LINE: |