kg_data['r'] += 2 # 给每个关系的编号+2 self.n_relations = max(kg_data['r']) + 1 # 80 self.n_entities = max(max(kg_data['h']), max(kg_data['t'])) + 1 # 头实体的数量113487 # n_user在loader_base的stastic-cf里 70679 self.n_users_entities = self.n_users + self.n_entities self.cf_train_data = (np.array(list(map(lambda d: d + self.n_entities, self.cf_train_data[0]))).astype(np.int32), self.cf_train_data[1].astype(np.int32)) self.cf_test_data = (np.array(list(map(lambda d: d + self.n_entities, self.cf_test_data[0]))).astype(np.int32), self.cf_test_data[1].astype(np.int32)) self.train_user_dict = {k + self.n_entities: np.unique(v).astype(np.int32) for k, v in self.train_user_dict.items()} self.test_user_dict = {k + self.n_entities: np.unique(v).astype(np.int32) for k, v in self.test_user_dict.items()}
时间: 2024-03-31 20:32:51 浏览: 48
这段代码是在对知识图谱数据进行预处理,主要做了以下几件事情:
1. 将每个关系的编号加2:kg_data['r'] += 2,目的是为了给0~1之间的关系编号腾出空间,使得之后可能新增的关系有空间可用。
2. 计算实体和关系的数量:self.n_entities表示头实体的数量,self.n_relations表示关系的数量。
3. 计算用户和实体数量之和:self.n_users_entities = self.n_users + self.n_entities,用于后面构建用户与实体的交互矩阵。
4. 对训练集和测试集的数据进行处理:将每个实体的编号加上self.n_entities,目的是为了区分实体和用户,同时保证新加入的实体编号不会与原有实体或用户的编号重复。
5. 对训练集和测试集的用户字典进行处理:将字典中每个键对应的值加上self.n_entities,目的同样是为了区分实体和用户。
相关问题
def construct_data(self, kg_data): # add inverse kg data n_relations = max(kg_data['r']) + 1 # 39 inverse_kg_data = kg_data.copy() inverse_kg_data = inverse_kg_data.rename({'h': 't', 't': 'h'}, axis='columns') # 修改列名 inverse_kg_data['r'] += n_relations # inverse_kg_data['r']=inverse_kg_data['r']+n_relations kg_data = pd.concat([kg_data, inverse_kg_data], axis=0, ignore_index=True, sort=False)
这是一个 Python 类中的一个构造函数,用于构建知识图谱数据。它的作用是将输入的 `kg_data` 知识图谱数据中的每个三元组(头实体、关系、尾实体)都复制一份,并将头实体和尾实体互换,同时将关系的编号加上 `n_relations`,然后将这些新生成的三元组添加到原始数据中。
具体来说,这个函数首先计算出 `kg_data` 中关系编号的最大值,然后将新生成的三元组中的关系编号都加上这个最大值,以避免与原始数据中的关系编号重复。接着,函数使用 Pandas 库中的 `rename` 函数将新生成的三元组的头实体和尾实体的列名互换,将列名从 `'h'` 和 `'t'` 修改为 `'t'` 和 `'h'`。最后,函数使用 Pandas 库中的 `concat` 函数将新生成的三元组添加到原始数据中,并返回完整的知识图谱数据。
阅读全文