4.2 rank API 详解

4.2.1 Personal Rank API

4.2.1.0 数据准备

这里以的 1M 数据集为例,用户需下载该数据集,然后使用 HugeGraph-Loader 导入到 HugeGraph 中,为简单起见,数据中顶点 user和 movie 的属性都忽略,仅使用 id 字段即可,边 rating 的具体评分值也忽略。loader 使用的元数据文件和输入源映射文件内容如下:

  1. {
  2. "vertices": [
  3. {
  4. "label": "user",
  5. "input": {
  6. "type": "file",
  7. "path": "users.dat",
  8. "format": "TEXT",
  9. "delimiter": "::",
  10. "header": ["UserID", "Gender", "Age", "Occupation", "Zip-code"]
  11. },
  12. "ignored": ["Gender", "Age", "Occupation", "Zip-code"],
  13. "mapping": {
  14. "UserID": "id"
  15. }
  16. },
  17. {
  18. "label": "movie",
  19. "input": {
  20. "type": "file",
  21. "path": "movies.dat",
  22. "format": "TEXT",
  23. "delimiter": "::",
  24. "header": ["MovieID", "Title", "Genres"]
  25. },
  26. "ignored": ["Title", "Genres"],
  27. "mapping": {
  28. "MovieID": "id"
  29. }
  30. }
  31. ],
  32. "edges": [
  33. {
  34. "label": "rating",
  35. "target": ["MovieID"],
  36. "input": {
  37. "type": "file",
  38. "path": "ratings.dat",
  39. "format": "TEXT",
  40. "delimiter": "::",
  41. },
  42. "ignored": ["Timestamp"],
  43. "mapping": {
  44. "UserID": "id",
  45. "MovieID": "id",
  46. "Rating": "rate"
  47. }
  48. }
  49. ]
  50. }
4.2.1.1 功能介绍

二分图:也称二部图,是图论里的一种特殊模型,也是一种特殊的网络流。其最大的特点在于,可以将图里的顶点分为两个集合,两个集合之间的点有边相连,但集合内的点之间没有直接关联。

假设有一个用户和物品的二分图,基于随机游走的 PersonalRank 算法步骤如下:

  1. 选定一个起点用户 u,其初始权重为 1.0,从 Vu 开始游走(有 alpha 的概率走到邻居点,1 - alpha 的概率停留);
  2. 如果决定游走: 2.1. 那就从当前节点的邻居节点中按照均匀分布随机选择一个,并且按照均匀分布划分权重值; 2.2. 给源顶点补偿权重 1 - alpha; 2.3. 重复步骤2;
  3. 达到一定步数后收敛,得到推荐列表。
Params
  • source: 源顶点 id,必填项
  • label: 边的类型,必须是连接两类不同顶点的边,必填项
  • alpha:每轮迭代时从某个点往外走的概率,与 PageRank 算法中的 alpha 类似,必填项,取值区间为 (0, 1]
  • degree: 查询过程中,单个顶点最大边数目,选填项,默认为 10000
  • max_depth: 迭代次数,必填项,取值区间为 (0, 50]
  • with_label:筛选结果中保留哪些结果,选填项,可选值为 [SAME_LABEL, OTHER_LABEL, BOTH_LABEL], 默认为 BOTH_LABEL
    • SAME_LABEL:保留与源顶点相同类别的顶点
    • OTHER_LABEL:保留与源顶点不同类别(二分图的另一端)的顶点
    • BOTH_LABEL:保留与源顶点相同和相反类别的顶点
  • limit: 返回的顶点的最大数目,选填项,默认为 10000000
  • sorted:返回的结果是否根据 rank 排序,为 true 时降序排列,反之不排序,选填项,默认为 true
4.2.1.2 使用方法
Method & Url
  1. POST http://localhost:8080/graphs/hugegraph/traversers/personalrank
Request Body
Response Status
  1. 200
Response Body
  1. {
  2. "2:2858": 0.0005014026017816927,
  3. "2:1196": 0.0004336708357653617,
  4. "2:1210": 0.0004128083140214213,
  5. "2:593": 0.00038117341069881513,
  6. "2:480": 0.00037005373269728036,
  7. "2:1198": 0.000366641614652057,
  8. "2:2396": 0.0003622362410538888,
  9. "2:2571": 0.0003593312457300953,
  10. "2:589": 0.00035922123055598566,
  11. "2:110": 0.0003466135844390885
  12. }
4.2.1.3 适用场景
  • 商品推荐中,查找最应该给某人推荐的商品列表

4.2.2 Neighbor Rank API

4.2.2.0 数据准备
4.2.2.1 功能介绍

在一般图结构中,找出每一层与给定起点相关性最高的前 N 个顶点及其相关度,用图的语义理解就是:从起点往外走,走到各层各个顶点的概率。

Params
  • source: 源顶点 id,必填项
  • alpha:每轮迭代时从某个点往外走的概率,与 PageRank 算法中的 alpha 类似,必填项,取值区间为 (0, 1]
  • steps: 表示从起始顶点走过的路径规则,是一组 Step 的列表,每个 Step 对应结果中的一层,必填项。每个 Step 的结构如下:
    • direction:表示边的方向(OUT, IN, BOTH),默认是 BOTH
    • labels:边的类型列表,多个边类型取并集
    • degree:查询过程中,单个顶点最大边数目,默认为 10000
    • top:在结果中每一层只保留权重最高的前 N 个结果,默认为 100,最大值为 1000
  • capacity: 遍历过程中最大的访问的顶点数目,选填项,默认为10000000
4.2.2.2 使用方法
Method & Url
  1. POST http://localhost:8080/graphs/hugegraph/traversers/neighborrank
Request Body
  1. "source":"O",
  2. "steps":[
  3. {
  4. "direction":"OUT",
  5. "labels":[
  6. "follow"
  7. ],
  8. "degree":-1,
  9. "top":100
  10. },
  11. {
  12. "direction":"OUT",
  13. "labels":[
  14. "follow",
  15. ],
  16. "degree":-1,
  17. "top":100
  18. },
  19. {
  20. "direction":"OUT",
  21. "labels":[
  22. "directedBy"
  23. ],
  24. "degree":-1,
  25. "top":100
  26. }
  27. ],
  28. "alpha":0.9,
  29. "capacity":-1
  30. }
Response Status
Response Body
  1. {
  2. "ranks": [
  3. {
  4. "O": 1
  5. },
  6. {
  7. "B": 0.4305,
  8. "A": 0.3,
  9. "C": 0.3
  10. },
  11. {
  12. "G": 0.17550000000000002,
  13. "H": 0.17550000000000002,
  14. "I": 0.135,
  15. "J": 0.135,
  16. "E": 0.09000000000000001,
  17. "F": 0.09000000000000001
  18. },
  19. {
  20. "M": 0.15795,
  21. "K": 0.08100000000000002,
  22. "L": 0.04050000000000001
  23. }
  24. ]
4.2.2.3 适用场景

为给定的起点在不同的层中找到最应该推荐的顶点。

  • 比如:在观众、朋友、电影、导演的四层图结构中,根据某个观众的朋友们喜欢的电影,为这个观众推荐电影;或者根据这些电影是谁拍的,为其推荐导演。