SlideShare a Scribd company logo
グラフデータ分析 入門編
2020/02/12 @ グラフ分析ナイト
日本マイクロソフト
山口 順也
グラフとは?
• グラフ (graph) はエンティティの二項関係を
表現するデータ構造
• エンティティ: ノード (node)
• 関係: エッジ (edge)
• 実データの多くがグラフとして表現することが
出来る
• ソーシャル ネットワーク
• 引用ネットワーク
• 地図、道路交通網
• 分子構造、プロテインの相互作用
• EC サイトのアイテム=ユーザの購買履歴
v
u
ノード
エッジ
Protein-Protein Interaction
https://www.biophys.jp/highschool/B-12.html
• システム生物学では、生物のコンポー
ネントに見られる相互作用を調べるの
にグラフ構造が使われる
• 例えば、タンパク質相互作用
• ノード = タンパク質
• エッジ = 相互作用
• 通常の状態の相互作用関係が分か
れば異常 (疾患) を検知できる
• タンパク質の他にも、遺伝子 (e.g.
mRNA) でも解析の試みがある
交通ネットワーク解析
• 道路交通網もグラフの例
• 通常の地図
• 航空網
• 交通ネットワーク解析では、最短経路
問題等、多くをグラフ理論に根ざした
解析手法で交通を紐解く
• 例えば “最適” ルート検索
• 燃料を消費しない?
• 時間をかけずに?
• 空いた道路を快適に?
• 他にも防災計画などの応用も
グラフ/ネットワークという用語について
• 明確な定義はないので、人それぞれの解釈がある
• 個人的には…
• グラフは応用を意識しない抽象的な概念
• ネットワークは出発点が実データであり、データを意識した具体的な概念
グラフ ネットワーク
抽象度 より抽象的 より具体的
歴史的経緯 数学 (グラフ理論) 社会学 (ネットワーク理論)
経緯的関心事
定義を定めて
グラフの性質 (定理) を調べる
特徴を設計して
ネットワークの性質を調べる
新たな分析パラダイム:グラフ ✕ 機械学習
機械学習は、明示的な指示を用いることなく、その代わりにパターンと推論に依存して、
特定の課題を効率的に実行するためにコンピュータシステムが使用するアルゴリズムおよび
統計モデルの科学研究である。
なぜ?既にネットワーク分析があるのに・・・
(出典: Wikipedia)
新たな分析パラダイム:グラフ ✕ 機械学習
機械学習は、明示的な指示を用いることなく、その代わりにパターンと推論に依存して、
特定の課題を効率的に実行するためにコンピュータシステムが使用するアルゴリズムおよび
統計モデルの科学研究である。
なぜ?既にネットワーク分析があるのに・・・
(出典: Wikipedia)
明示的な指示を用いることなく
新たな分析パラダイム:グラフ ✕ 機械学習
機械学習は、明示的な指示を用いることなく、その代わりにパターンと推論に依存して、
特定の課題を効率的に実行するためにコンピュータシステムが使用するアルゴリズムおよび
統計モデルの科学研究である。
なぜ?既にネットワーク分析があるのに・・・
(出典: Wikipedia)
• 従来のネットワーク分析では、特徴・注目ポイントを人力
で設計し、それを元にネットワークの性質を説明
• 次数、中心性、コミュニティ構造…
• 優秀な特徴抽出器である深層ニューラルネットワークにこ
れらの処理を任せる
Representation Learning
表現学習
本セッションの目的
話すこと
• グラフの表現学習
• word2vec、畳み込みニューラルネットワーク表現学習の理解
• タスクを意識するか?意識しないか?
• どのようなタスクが解けるのか
• グラフ畳み込みネットワーク (Graph Convolutional Network)
• 歴史的経緯
• 動作の簡単な理解
• 実装フレームワーク
• 近年の動向
• 主要な国際学会での動き、理論的な研究など
話さないこと
• グラフ理論、ネットワーク分析手法の話
• 最短経路問題、オイラーグラフ、次数分布、中心性、コミュニティ、ネットワーク
モデル(スケールフリー、スモールワールド)、etc
• Network Embedding/Graph Kernel について
• DeepWalk, LINE, node2vec, …
• グラフ畳み込み以外の Graph Neural Networks
• 再帰的手法
• Autoencoder などの再帰的手法
• GCN 以外のグラフ畳み込みレイヤーの詳細
グラフの表現学習
グラフの表現
表現
グラフ全体
ノード単位
他にもエッジ単位/サブグラフ単位があるが、上
の2つがポピュラー
Graph Embedding
Node Embedding
実物
グラフの表現
実物
表現
グラフ全体
ノード単位
他にもエッジ単位/サブグラフ単位があるが、上
の2つがポピュラー
Graph Embedding
Node Embedding
次数分布
隣接行列
人力による特徴量設計
この表現で良いのだろうか?
表現学習
表現学習 (Representation Learning) とは、後続のタスク (回帰や
分類) に利用できる、観測値・入力の分散表現を獲得すること
単語の分散表現 (word2vec)
分散表現は、多次元の実ベ
クトルであり、各次元が表現
対象を密に説明しないもの
(Hinton+ 1986)
例えば、one-hot encoding
は分散表現でない。
https://www.slideshare.net/yukinoguchi999/ss-59238906
次元数を N とすると、そのう
ちの k < N 次元の値が独立
に動ける。
word2vec (Mikolov+ 2013)
単語の分散表現 (word2vec)
• 言語モデルを用いて、各単語の表
現を獲得する手法
• 潜在空間でのベクトル演算が解
釈できることが話題になった
• 例) Tokyo – Japan + America =
Washington DC
• 多くの自然言語のタスクに利用さ
れている
• 例) word2vec をもとにしてドキュメン
トの表現を構築する
グラフの表現学習
実物
表現
グラフ全体
ノード単位
他にもエッジ単位/サブグラフ単位があるが、上
の2つがポピュラー
Graph Embedding
Node Embedding
機械学習モデルによる
グラフの表現生成
この表現で良いのだろうか?
https://ai.googleblog.com/2019/06/innovations-in-graph-representation.html
例) 畳み込みニューラルネットワーク
https://github.com/vdumoulin/conv_arithmetic
表現学習パート 後続タスクパート
Graph Machine Learning (ML)
グラフ
表現
表現の獲得
どんな問題が解けるのか?
Graph MLのタスク設定
グラフ
表現
タスク
Graph-focused
Node-focused
Edge-focused
• ノード分類/回帰
• クラスタリング
• ランキング
• リンク予測
• グラフ分類/回帰
• 可視化
表現の獲得 なんらかの機
械学習アルゴ
リズム
Graph MLのタスク設定 タスク
Graph-focused
Node-focused
Edge-focused
• ノード分類/回帰
• クラスタリング
• ランキング
• リンク予測
• グラフ分類/回帰
• 可視化
?
Graph MLのタスク設定 タスク
Graph-focused
Node-focused
Edge-focused
• ノード分類/回帰
• クラスタリング
• ランキング
• リンク予測
• グラフ分類/回帰
• 可視化
?
?
Graph MLのタスク設定 タスク
Graph-focused
Node-focused
Edge-focused
• ノード分類/回帰
• クラスタリング
• ランキング
• リンク予測
• グラフ分類/回帰
• 可視化
?
Paper with code
https://paperswithcode.com/area/graphs
ふたつのアプローチ
グラフ
表現
タスク
Graph-focused
Node-focused
Edge-focused
end-to-end
task-agnostic
アプローチ: task-agnostic
• 純粋にグラフ表現を得るだけの教師なし学習
(unsupervised learning) のアプローチ
• Network/Graph Embedding の名前で知られて
いる
• DeepWalk (Perozzi+ 2014)
• LINE (Tang+ 2015)
• node2vec (Grover&Leskovec 2016)
• 後続タスクが graph-focused であれば、Graph
Kernel も有効な手法
• Weisfeiler-Lehman Kernel (Shervashidze+ 2011)
グラフ
表現
アプローチ: end-to-end
• タスクも解きつつ、その過程として表現を獲得する
(半)教師あり ((semi-)supervised) なアプローチ
• 深層ニューラルネットワークが活きる
• Graph Neural Networks (GNN)
• ノード分類など、いくつかのタスクで state-of-the-art
を達成し、近年注目されている (Kipf+ 2017)
• 表現獲得レイヤー + 最終予測用レイヤーのよくある
アーキテクチャ パターン
• 焦点は「表現獲得レイヤー」の設計をどうするか
• 画像に対する畳込みを拡張した、グラフ畳み込みが
主流
グラフ
表現
タスク
補足: Graph Neural Network
• Graph Neural Network (GNN) は、グラフを入力として扱うニューラルネットワー
ク全般を指す言葉
• まったく同名の手法もあるので注意
• 明確な分類方法は定まっていないが、本セッションでは・・・
• GRU や LSTM を内部モジュールに含む = 再帰的 GNN
• グラフ畳み込みレイヤーを含む = 畳込み GNN
Graph Neural Network (GNN)
Graph
Convolutional
Network
Graph Recurrent
Neural Networks
Graph
Autoencoders
Graph
Reinforcement
Learning
Graph
Adversarial
Methods
Zhang, Ziwei, et al. “Deep Learning on Graphs: A Survey.” ArXiv Preprint ArXiv:1812.04202, 2018.
グラフ畳み込みネットワーク
グラフ畳み込みの種類
Spectral Spatial
• 従来の画像に対する畳込みレイヤーをベース
にして、グラフ構造に拡張する方法
• ノード空間での演算しか考えないので、より直
感的に理解できる
• 一方で、理論的な裏付けがないのが難点
• グラフ信号処理に根差した手法で、「畳み込
み定理」を根拠に周波数領域での要素積を
行う
• 音声データで言うとこの、イコライザ的処理
• 周波数領域への変換には、グラフ フーリエ変
換を利用
周波数領域での処理を考える 頂点領域での処理を考える
グラフ畳み込みの系譜
ChebNet
(Defferrard+ 2016)
Spectral Networks
(Bruna+ 2014)
周波数空間での畳込み
シェビチェフ多項近似
でグラフラプラシアンの
固有分解を回避
シェビチェフ近似に強い仮定を置け
ば、近傍ノードの集約演算として畳
み込みを定義できることを示した
Diffusion-CNN
(Atwood&Towsley 2016)
Spectral Spatial
Message Passing Neural Network
(Gilmer+ 2017)
Graph Convolutional Network
(Kipf&Welling 2017)
MoNet
(Monti+ 2017)
GAT
(Velickovic+ 2018)
GraphSAGE
(Hamilton+ 2017)
NRI
(Kipf+ 2018)
GIN
(Xu+ 2019)
Relational-GCN
(Schlichtkrull+ 2017)
Neural Network for Graph
(Micheli 2009)
多くのニューラルネットワークの
モデルを、メッセージパッシング
のフレームワークで説明
頂点空間での畳込み
DiffPool
(Ying+ 2018)
さまざまな派生モデルたち
Graph Convolutional Network (GCN)
各ノードは特徴ベクトルを持つ
1 回の畳み込み
近傍ノードを使って特徴ベクトルが更新される
Graph Convolutional Network (GCN)
• Kipf&Welling によって提案されたグラフ上の畳み込み手法
• 周波数空間での畳み込みとノード空間の畳込みを結びつけた
• 以降、GCN をベースとした手法が続々と登場
• GCN + Attention = Graph Attention Network (GAT)
• GCN + 辺の有向性/種類 = Relational GCN (R-GCN)
• Message Passing と呼ばれるフレームワークで簡単に説明できる
• Message = 各ノードが持つノードの特徴ベクトル
• Passing = メッセージを交換し合うこと
v v
Aggregate/Combine
𝑓𝑎𝑔𝑔 =, ,
v v v
𝑓𝑐𝑜𝑚 =
Aggregate/Combine
𝑓𝑎𝑔𝑔 = ,, ,
v v v
𝑓𝑐𝑜𝑚 =
Aggregate/Combine
𝑓𝑎𝑔𝑔 = ,, ,
Readout
Readout
v
最終的な特徴ベクトルを
各ノードで学習終了
グラフ全体を要約する
一つのベクトル表現を獲得
グラフ単位でのタスク
FC/Softmax
Label1: 0.1
Label2: 0.3
Label3: 0.6
GCN の性能
• Citeseer,Cora,Pubmed は引用ネットワーク
• NELL はナレッジグラフ
• 一部のノードに正解ラベル(クラス) が与えられ
ている時に、残りのノードをどれくらいの
accuracy でラベル付けできたか?
論文での報告
State-of-the-art
実装
https://www.dgl.ai/
Deep Graph Libaray (DGL)
• DGL はグラフ ニューラル ネットワークを
実装するための Python ライブラリ
• PyTorch/Tensorflow/MXnet をバッ
クエンドに使える
• 開発スピードを見る限り PyTorch がメイン
• グラフ畳み込みを Message Passing
フレームワークで記述していくのが特徴
• 基本的には次の3点を定義するだけ
• どんなメッセージを近傍ノードに送る?
• メッセージはどうやって集計する?
• 自分の特徴量と集計をどうマージする?
DGL の良いところ:実装が簡単
• 前述の通り、Message Passing の形式で実装できる
• メッセージ/集約関数の定義に注目するだけでよい
• Heterogeneous なグラフへの柔軟な対応
• ノードやエッジに複数の種類が存在するグラフのこと
• 例えば、知識グラフ (knowledge graph) などが該当する
• Relational-GCN のチュートリアルがわかりやすい
• 特別に意識せずにバッチ処理が書ける
• バッチにまとめるグラフたち = 複数コンポーネントからなる巨大なグラフと見立て
るトリックを利用している
• 同じ API で一気に複数のグラフに対する学習が可能
DGL の良いところ:サンプルが豊富
API の呼び出し一つ
でこれだけの畳み込み
レイヤーが利用可能
プリミティブな DGL の
API で再現実装された
グラフ畳み込みネット
ワークたち
https://docs.dgl.ai/api/python/nn.htmlhttps://github.com/dmlc/dgl/tree/master/examples/pytorch
開発ロードマップ
https://dlg2019.bitbucket.io/aaai20/keynote_slides/George-dgl-aaai2020.pdf
日本語版チュートリアル
https://github.com/OpenJNY/tutorial-graph-deep-learning-with-dgl
近年の動向
国際会議におけるグラフ関連論文数
• 機械学習に関する主な国際会議での採択論文数 (青色) の推移
• タイトルに「graph」とつくものだけでも上図 (黒色) のような伸び
• 特に ICML での採択数が増えてきている → レッドオーシャン・・・
GNN に関する Workshop
Workshop on Deep Learning on Graphs:
Methodologies and Applications (DLGMA’20)
https://dlg2019.bitbucket.io/aaai20/
Learning and Reasoning with Graph-Structured
Representations | ICML 2019
https://graphreason.github.io/
Graph Representation Learning | NeurIPS 2019
https://grlearning.github.io/
Representation Learning on Graphs and Manifolds | ICLR 2019
https://rlgm.github.io/
理論的分析の出現
• Over-smoothing (Li+ 2018)
• GCN 層を重ねると性能が悪化する
• semi-supervised 学習で、訓練データの割合が下がるにつれて急激に性能が低下
• まだ数は少ないが、Message Passing (aggregate / combine / readout)
で実装可能な GNN のクラスに対する、表現能力の理論的研究が始まってきて
いる (Morris+ 2019, Xu+ 2019, Dehmamy+ 2019)
• グラフ同型問題への性能が良いことが知られる Weisfeiler-Lehman カーネルと表現能力を
比較する
ICLR2020: Spotlight
Trends in ICLR20
https://towardsdatascience.com/top-trends-of-graph-machine-learning-in-2020-1194175351a3
What graph neural networks cannot learn: depth vs width
Graph Neural Networks Exponentially Lose Expressive Power for
Node Classification
理論面
Over-smoothing (Li+ 2018) 現象がどのような条件で発
生するのかを理論的に調べて、密なグラフ に対して GNN
が有効でないという仮説を提案
応用面
プログラミング言語の構文木に対して GNN を適用し、バグの発
見を行う応用例の紹介。知識グラフに対する手法が人気
性能の限界がうっすらと…
https://paperswithcode.com/sota/node-classification-on-citeseer
まとめ
おしながき
• グラフの表現を機械学習によって獲得して、様々なタスクをこなせる
• グラフ分類、ノード分類、リンク予測
• 表現学習時に後続タスクを意識するか?が大事な観点
• Graph Neural Network を利用すると、end-to-end のマナーで表
現を獲得することが出来る
• その中で中心的な存在を担うのがグラフ畳み込み (GCN)
• メッセージパッシングと呼ばれるフレームワークで表現可
• 応用論文も増え盛り上がりを見せているが、ある特定の GNN の表現
能力の限界を示唆する文献も登場している
• 今後、さらなる理論的分析、新たなアーキテクチャの開発が期待される
参考文献
参考文献: 表現学習
(Mikolov+ 2013)
Mikolov, Tomas, et al. “Distributed Representations of Words and Phrases and Their
Compositionality.” Advances in Neural Information Processing Systems 26, 2013, pp. 3111–3119.
Bengio, Y., et al. “Representation Learning: A Review and New Perspectives.” IEEE Transactions on
Pattern Analysis and Machine Intelligence, vol. 35, no. 8, 2013, pp. 1798–1828.
Vol.31.No.4(2016/7)ネットワークの表現学習 – 人工知能学会
https://www.ai-gakkai.or.jp/my-bookmark_vol31-no4/
言語と画像の表現学習
https://www.slideshare.net/yukinoguchi999/ss-59238906
参考文献: task-agnostic Graph ML
(Perozzi+ 2014)
B. Perozzi, R. Al-Rfou, and S. Skiena, “Deepwalk: Online learning of social representations,” in Proceedings of the
20th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2014, pp. 701–710.
(Tang+ 2015)
J. Tang, M. Qu, M. Wang, M. Zhang, J. Yan, and Q. Mei, “Line: Large-scale information network embedding,” in
Proceedings of the 24th international conference on world wide web. International World Wide Web
Conferences Steering Committee, 2015, pp. 1067–1077.
(Grover&Leskovec 2016)
A. Grover and J. Leskovec, “node2vec: Scalable feature learning for networks,” in Proceedings of the 22nd ACM
SIGKDD international conference on Knowledge discovery and data mining. ACM, 2016, pp. 855–864.
(Shervashidze+ 2011)
Shervashidze, Nino, et al. “Weisfeiler-Lehman Graph Kernels.” Journal of Machine Learning Research, vol. 12,
2011, pp. 2539–2561.
参考文献: Graph Neural Netowrks
Spectral Networks (Bruna+ 2014)
Bruna, Joan, et al. “Spectral Networks and Locally Connected Networks on Graphs.” ICLR 2014 : International Conference on Learning Representations
(ICLR) 2014, 2014.
ChebNet (Defferrard+ 2016)
Defferrard, Michaël, et al. “Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering.” NIPS’16 Proceedings of the 30th International
Conference on Neural Information Processing Systems, 2016, pp. 3844–3852.
Graph Convolutional Network (Kipf&Welling 2017)
Kipf, Thomas N., and Max Welling. “Semi-Supervised Classification with Graph Convolutional Networks.” ICLR 2017 : International Conference on Learning
Representations 2017, 2017.
Message Passing Neural Network (Gilmer+ 2017)
Gilmer, Justin, et al. “Neural Message Passing for Quantum Chemistry.” ICML’17 Proceedings of the 34th International Conference on Machine Learning -
Volume 70, 2017, pp. 1263–1272.
Neural Networks for Graph (Micheli 2009)
Micheli, A. “Neural Network for Graphs: A Contextual Constructive Approach.” IEEE Transactions on Neural Networks, vol. 20, no. 3, 2009, pp. 498–511.
DCNN (Atwood&Towsley 2016)
Atwood, James, and Don Towsley. “Diffusion-Convolutional Neural Networks.” Advances in Neural Information Processing Systems, 2016, pp. 1993–2001.
GAT (Velickovic+ 2018)
P. Velickovic, G. Cucurull, A. Casanova, A. Romero, P. Lio, and Y. Bengio, “Graph attention networks,” ICLR 2018, 2018.
参考文献: Graph Neural Networks
Relational-GCN (Schlichtkrull+ 2017)
M. Schlichtkrull, T. N. Kipf, P. Bloem, R. van den Berg, I. Titov, and M. Welling, “Modeling relational data with graph convolutional networks,” in ESWC
2018
MoNet (Monti+ 2017)
F. Monti, D. Boscaini, J. Masci, E. Rodola, J. Svoboda, and M. M. Bronstein, “Geometric deep learning on graphs and manifolds using mixture model
cnns,” CVPR 2017, pp. 5425–5434, 2017.
GraphSAGE (Hamilton+ 2017)
Hamilton, William L., et al. “Inductive Representation Learning on Large Graphs.” Advances in Neural Information Processing Systems, 2017, pp. 1024–
1034.
DiffPool (Ying+ 2018)
Ying, Zhitao, et al. “Hierarchical Graph Representation Learning with Differentiable Pooling.” NIPS 2018: The 32nd Annual Conference on Neural
Information Processing Systems, 2018, pp. 4805–4815.
NRI (Kipf+ 2018)
Kipf, Thomas, et al. “Neural Relational Inference for Interacting Systems.” ICML 2018: Thirty-Fifth International Conference on Machine Learning, 2018, pp.
2688–2697.
GIN (Xu+2019)
Xu, Keyulu, et al. “How Powerful Are Graph Neural Networks.” ICLR 2019 : 7th International Conference on Learning Representations, 2019.
参考文献: Graph Neural Networks
Over-smoothing (Li+ 2018)
Qimai Li, Zhichao Han, and Xiao-Ming Wu. Deeper insights into graph convolutional networks for semi-
supervised learning. In Thirty-Second AAAI Conference on Artificial Intelligence (AAAI), 2018.
(Morris+ 2019)
Morris, Christopher, et al. “Weisfeiler and Leman Go Neural: Higher-Order Graph Neural Networks.” AAAI
2019 : Thirty-Third AAAI Conference on Artificial Intelligence, vol. 33, no. 1, 2019, pp. 4602–4609.
(Xu+ 2019)
Xu, Keyulu, et al. “How Powerful Are Graph Neural Networks.” ICLR 2019 : 7th International Conference on
Learning Representations, 2019.
(Dehmamy+ 2019)
Dehmamy, Nima, et al. “Understanding the Representation Power of Graph Neural Networks in Learning
Graph Topology.” NeurIPS 2019 : Thirty-Third Conference on Neural Information Processing Systems, 2019,
pp. 15387–15397.
参考文献: サーベイ関連
グラフ構造にまつわるサーベイ結果まとめ GNNからApplicationsまで Part1 - ログミーTech
https://logmi.jp/tech/articles/321767
サーベイ レポジトリ
• https://github.com/naganandy/graph-based-deep-learning-literature
• https://github.com/nnzhan/Awesome-Graph-Neural-Networks
• https://github.com/benedekrozemberczki/awesome-graph-classification
• https://github.com/thunlp/GNNPapers
• https://awesomeopensource.com/project/yazdotai/graph-networks
参考文献: GNN 国内応用例
グラフベース関係性学習(GraphAI)
https://jpn.nec.com/techrep/journal/g19/n01/pdf/190121.pdf
侵入検知システムのためのグラフ構造に基づいた機械学習および可視化
https://speakerdeck.com/kumagallium/graph-based-machine-learning-and-visualization-for-intrusion-detection-system
分野横断的思考を活かした機械学習の取り組み〜材料工学×情報高額
https://speakerdeck.com/kumagallium/application-of-cross-disciplinary-thinking-for-machine-learning
ナノテクノロジー技術は、AIのGAN, GNC(Graph Conv. Network)とDNC(Differential Neural Computer)モデルのパワーをどう活用し始め
ているのか?
https://ainow.ai/2019/01/14/160514/
創薬プロセス効率化を目指した機械学習のための学習データの作成
http://i.riken.jp/download/Q18388.pdf
参考文献: 大学講義
Stanford: CS224W: Machine Learning with Graphs
http://web.stanford.edu/class/cs224w/
UC Berkeley: AI-Sys Spring 2019
https://ucbrise.github.io/cs294-ai-sys-sp19/
EPFL: A Network Tour of Data Science
https://github.com/mdeff/ntds_2019
Master Seminar "Deep Learning for Graphs" / "Recent Developments in Data Science" (WS
2019/20)
https://www.dbs.ifi.lmu.de/cms/studium_lehre/lehre_master/semrecent1920/index.html
Appendix
グラフ分類の正しい実験
A Fair Comparison of Graph Neural Networks for Graph Classification
https://openreview.net/forum?id=HygDF6NFPB
• いくつかのモデルについて、丁寧な性能比較を試みた論文
• グラフ分類タスクにおいて注意しなければならないポイントがわかる

More Related Content

グラフデータ分析 入門編