第2回ナレッジグラフ推論チャレンジ2019
応募シート「ナレッジグラフ埋め込みに基づく犯人探し」
2019年12月8日
株式会社KDDI総合研究所
黒川 茂莉

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

応募者

氏名

黒川 茂莉
所属

株式会社KDDI総合研究所
メールアドレス

mo-kurokawa@kddi-research.jp

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

2

目次
 推論方法の概要
 推論方法のポイント
 推論過程の説明
 利用データ、パラメータ
 推論結果 推論結果の説明
 (1)特徴空間の可視化 (2)理由説明の試行

 その他
 (1)利用したツール、実行方法、実行環境
 (2)実行時間、使用メモリ量

 まとめ
 謝辞
 参考文献 備考
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

3

推論方法の概要(1) ナレッジグラフの要素（ホームス、ワトソン、被害者、凶器、犯行場所等）を特徴空間に埋め込み、特徴空間上のベクトル演算に基づいて犯人を推論する
kill

悪魔の足ナレッジグラフ
mortimerbrendaopen

watsonmortimer+kill~brenda

window

misleadmislead?

holmes

特徴空間に埋め込みkillmortimer

kill

kill

brenda?

犯人の推論?+kill~mortimer

mortimer

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

4

推論方法の概要(2) 複数ナレッジグラフに拡張
悪魔の足ナレッジグラフ
open

共通項

watsonwindowopen

holmesmisleadmislead?

holmes

特徴空間に埋め込みkillmortimerkillwindowbrenda

犯人の推論

共通項(holmes, watson)のベクトルが同じベクトルになるように制約?
watsonkill
meetholmescomecomejulia

helen?

supporthelen?+kill~julia

holmeskilljulia

まだらの紐ナレッジグラフ
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

5推論方法のポイント
ポイント1：被害者の近傍探索（ナレッジグラフの要素を埋め込んだ特徴空間上で） ナレッジグラフの要素を特徴空間に埋め込むことで、特徴空間上で被害者の近傍探索を行うことにより関係する人物を特徴空間から探すことが可能になる

ポイント2：kill 関係を考慮した被害者の近傍探索
 悪魔の足ナレッジグラフにおいて「mortimer kill brenda」や「brenda kill(ed) case1」の関係が存在するため、特徴空間上でkillを表現でき、?+kill~mortimerという推論（＝mortimerkillの近傍探索）が可能になる

ポイント3：複数ナレッジグラフの援用
 複数ナレッジグラフの共通項であるholmes，watsonを用いて特徴空間を関連付けることで、他のナレッジグラフからの知識を流入させ、推論の精度を向上させることが可能になる

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

6

推論過程の説明
 処理フロー

① ナレッジグラフからの三つ組抽出と整形② 三つ組の各要素の特徴空間への埋め込み③ 特徴ベクトル演算に基づく犯人の推論

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

7

推論過程の説明～①ナレッジグラフからの三つ組抽出と整形
 各ナレッジグラフにSPARQLで問い合わせを行い「ヘッド，リレーション，テイル」の三つ組を抽出
 「第1回ナレッジグラフ推論チャレンジ」における野村総合研究所チームの手法と同様＊次ページ

 ヘッド，レレーション，テイルの名称を全て小文字に変換（例：Holmes→holmes）
 ヘッドとテイルに含まれるエンティティの名称の先頭に小説タイトルを追記（例：standale→DevilsFoot_standale）
 エンティティは、同じ名称でも小説毎に異なる意味を持つ想定
ただし、holmes、watsonは小説間で共有

 リレーションの名称はレンマ化をして動詞の語形変化を除去（例：guessed→guess）
 レンマ化にはNatural Language Toolki（t https://www.nltk.org/）のWordNetLemmatizerを利用 リレーションは、同じ名称であれば小説が異なっても同じ意味を持つと想定し、小説間で共有
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

8

（参考）野村総合研究所チームの手法

引用元：https://challenge.knowledge-graph.jp/submissions/2018/tamura/submission_tamura.pdf

 後処理
 ヘッド(h)＝主語、リレーション(r)＝述語は上表より抽出
 「対象」～「どうして」まで全てをテイル(t)とみなす
 hrt1t2t3…は、 hrt1、hrt2、hrt3…に分解
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

9推論過程の説明～②三つ組の各要素の特徴空間へ埋め込み
 単一ナレッジグラフの場合
 TransE[1]：ℎ + 𝑟~𝑡 の関係ができる限り成り立つように埋め込みベクトルを学習
悪魔の足ナレッジグラフ

特徴空間に埋め込み

openwatson

mislead?

killholmes

mortimermisleadmortimermortimer+kill~brenda

window

killkill

正例の ℎ + 𝑟 − 𝑡 を小さく、負例の ℎ′ + 𝑟′ − 𝑡′ を大きく対象のナレッジグラフの「ヘッド，リレーション，テイル」の集合ℎ, 𝑟, 𝑡𝑇1 の要素である「ヘッド，リレーション，テイル」の埋め込みベクトル

𝑇1−

𝑇1 の各要素について「ヘッド，リレーション，テイル」のうちいずれか一つを別の要素で置き換えた「ヘッド’，リレーション’，テイル’」の集合（負例サンプリング用の集合）𝛾

マージン（損失関数のパラメータ）

max 0, ℎ + 𝑟 − 𝑡 − ℎ′ + 𝑟′ − 𝑡′ + 𝛾ℎ,𝑟,𝑡 ∈𝑇1 ℎ′,𝑟′,𝑡′ ∈𝑇1−s. t. ∀ℎ ∈ 𝑇1 , ℎ =1, ∀𝑟 ∈ 𝑇1 , 𝑟 =1, ∀𝑡 ∈ 𝑇1 , 𝑡 =1

意味𝑇1brenda

brendamin 𝑂 =

数式2乗ノルム リレーションのパス𝑝 = 𝑟1 ∘ 𝑟2 ∘ ⋯を考慮したPTransE[2]も評価[1] Bordes, A. et al., NIPS2013. [2] Lin, Y. et al.,EMNLP2015.

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

10推論過程の説明～②三つ組の各要素の特徴空間へ埋め込み
 複数ナレッジグラフの場合
 ITransE/IPTransE[3]：TransE/PTransEに加え、各ナレッジグラフの共通項を用いて特徴空間が関連づけられるように制約して埋め込みベクトルを学習※擬似的に共通項を増やすソフトアラインメントは実施しない（備考で実施した場合を比較）

min 𝑂 =max 0, ℎ + 𝑟 − 𝑡 − ℎ′ + 𝑟′ − 𝑡′ + 𝛾ℎ,𝑟,𝑡 ∈𝑇

悪魔の足ナレッジグラフ

特徴空間に埋め込み

open

共通項

watsonwindowopen

holmesmisleadmislead?

holmeskill

mortimerkillwatsonkill
meetholmess. t. ∀ℎ ∈ 𝑇, ℎ =1, ∀𝑟 ∈ 𝑇, 𝑟 =1, ∀𝑡 ∈ 𝑇, 𝑡 =1
∀ 𝑒1 , 𝑒2 , 𝑒3 , 𝑒4 , 𝑒5 ∈ 𝐸1 , 𝐸2 , 𝐸3 , 𝐸4 , 𝐸5 , 𝑒1 = 𝑒2 = 𝑒3 = 𝑒4 = 𝑒5windowbrenda共通項のベクトルが同じベクトルになるように制約?

ℎ′,𝑟′,𝑡′ ∈𝑇 −come数式意味

𝑇𝑖 𝑖 = 1,2, ⋯ , 5

各ナレッジグラフの「ヘッド，リレーション，テイル」の集合

𝑇𝑖− 𝑖 = 1,2, ⋯ , 5

𝑇𝑖 の各要素について「ヘッド，リレーション，テイル」のうちいずれか一つを別の要素で置き換えた「ヘッド’，リレーション’，テイル’」の集合（負例サンプリング用の集合）

𝑇, 𝑇 −

𝑇1 ∪ 𝑇2 ∪ 𝑇3 ∪ 𝑇4 ∪ 𝑇5 , 𝑇1− ∪ 𝑇2− ∪ 𝑇3− ∪ 𝑇4− ∪ 𝑇5−ℎ, 𝑟, 𝑡𝑇の要素である「ヘッド，リレーション，テイル」の埋め込みベク
トル

come

julia

helen
supporthelen

まだらの紐ナレッジグラフ[3] Zhu, H. et al., IJCAI2017.

holmes𝐸𝑖 𝑖 = 1,2, ⋯ , 5

ナレッジグラフ間の共通項のエンティティの集合

𝑒𝑖 𝑖 = 1,2, ⋯ , 5

𝐸𝑖 の要素の埋め込みベクトル（例：各ナレッジグラフのholmesの埋め込みベクトル）

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

11推論過程の説明～③特徴ベクトル演算に基づく犯人の推論
 悪魔の足（case2）
犯人当て(?, kill, mortimer)

𝑚𝑜𝑟𝑡𝑖𝑚𝑒𝑟 − 𝑘𝑖𝑙𝑙 の近傍のエンティティをランキング*
正解：standaleを当てられるか？

犯人を仮定したときの被害者当て(standale, kill, ?)𝑠𝑡𝑎𝑛𝑑𝑎𝑙𝑒 + 𝑘𝑖𝑙𝑙 の近傍のエンティティをランキング*
正解：mortimerを当てられるか？

 まだらの紐犯人当て(?, kill, julia)

𝑗𝑢𝑙𝑖𝑎 − 𝑘𝑖𝑙𝑙 の近傍のエンティティをランキング*
正解：roylottを当てられるか？

犯人を仮定したときの被害者当て(roylott, kill, ?)𝑟𝑜𝑦𝑙𝑜𝑡𝑡 + 𝑘𝑖𝑙𝑙 の近傍のエンティティをランキング*
正解：juliaを当てられるか？

*いずれのランキングもユークリッド距離の近い順でソート

 事後フィルタ
 ランキングで人間でない要素が出てきた場合は、除外する
 ランキングでholmes、watsonが出てきた場合は、除外する
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

12

利用データ、パラメータ 利用データ

5KG…5つのナレッジグラフ全て使用の場合

2KG…複数ナレッジグラフ(悪魔の足+まだらの紐)使用の場合
1KG…単一ナレッジグラフ(悪魔の足)使用の場合

悪魔の足 まだらの紐 同一事件
使用ID（フル）
使用ID（-10%）
使用ID（-25%）
エンティティ数
リレーション数

1-489
1-440
1-366
579
208

1-401
1-360
1-300
266
110

1-580
1-522
1-435
648
163

背中の曲がった男

踊る人形

1-124
1-111
1-93
121
61

1-231
1-207
1-173
226
71297
469

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

13

利用データ、パラメータ
 「②三つ組の各要素の特徴空間へ埋め込み」ステップで用いるパラメータ
 マージン𝛾=1
 負例は正例1個に対し1個 勾配降下法で学習（学習率=0.001）

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

14

推論結果(1) 利用するナレッジグラフの数を増やすと（1KG→2KG→5KG）
犯人の順位が上昇

犯人当て＜悪魔の足(case2)＞
 ITransEもIPTransEも、5KG全てを用いた場合、1位で犯人を当てている＜まだらの紐＞
 5KG全てを用いた場合、
ITransEは2位、IPTransEは3位（上位については次ページ）

TransE
1KG
犯人当て
6(348)
悪魔の足(case2)
犯人→被害者当て
3(13)
犯人当て
まだらの紐
犯人→被害者当て
平均順位
4.5
平均逆順位
0.25

ITransE
2KG
1(2)
1(4)
2(2)
2(2)
1.5
0.75

PTransE
1KG
犯人当て
3(5)
悪魔の足(case2)
犯人→被害者当て
1(2)
犯人当て-まだらの紐
犯人→被害者当て
-平均順位
2.0
平均逆順位
0.67

IPTransE
2KG
5KG
6(151)
1(1)
2(3)
1(2)
2(2)
3(5)
2(3)
1(1)
3.0
1.5
0.42
0.83

5KG
1(2)
1(2)
2(2)
1(1)
1.3
0.88

※括弧内は事後フィルタ前の順位
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

15

推論結果(2) ITransE(5KG)の順位詳細
1位
犯人当て
holmes
犯人→被害者当て holmes
犯人当てSpeckledBand_helen
犯人→被害者当て SpeckledBand_julia

2位
DevilsFoot_standale
DevilsFoot_mortimer
SpeckledBand_roylott➡holmesは事後フィルタされるため、1位➡holmesは事後フィルタされるため、1位➡helenに次いで2位➡1位

 IPTransE(5KG)の順位詳細
1位
犯人当て
DevilsFoot_standale
犯人→被害者当て DevilsFoot_404
犯人当てSpeckledBand_helen
犯人→被害者当て SpeckledBand_julia

➡1位

2位

3位

DevilsFoot_mortimer
SpeckledBand_roma

4位

5位

➡1位
➡404(人間でない)は事後フィルタされるため、1位
SpeckledBand_window SpeckledBand_safe

SpeckledBand_roylott➡window、safe(人間でない)は事後フィルタされるため、helen、romaに次いで3位

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

16

推論結果(3) フル

ITransE
犯人当て
悪魔の足(case2)
犯人→被害者当て
犯人当て
まだらの紐
犯人→被害者当て
平均順位
平均逆順位

2KG
1 (2)
1 (4)
2 (2)
2 (2)
1.5
0.75

5KG
1 (2)
1 (2)
2 (2)
1 (1)
1.3
0.88
ITransE

 -10%
悪魔の足(case2)
まだらの紐

犯人当て
犯人→被害者当て
犯人当て
犯人→被害者当て
平均順位
平均逆順位

 -25%

2KG
6 (16)
1 (4)
1 (1)
1 (1)
2.3
0.79

5KG
6 (6)
1 (1)
2 (2)
2 (2)
2.8
0.54

ITransE
悪魔の足(case2)
まだらの紐

犯人当て
犯人→被害者当て
犯人当て
犯人→被害者当て
平均順位
平均逆順位

2KG
7 (13)
2 (7)
2 (3)
3 (7)
3.5
0.37

5KG
10 (87)
2 (2)
2 (2)
1 (1)
3.8
0.53

IPTransE
2KG
6 (151)
2 (3)
2 (2)
2 (3)
3.0
0.42

5KG
1 (1)
1 (2)
3 (5)
1 (1)
1.50.83

IPTransE
2KG
10 (479)
2 (5)
1 (1)
2 (2)
3.8
0.53

5KG
6 (7)
2 (2)
2 (3)
1 (1)
2.8
0.54

・利用するナレッジ（使用ID）を減らすと、平均順位が低下＝精度が悪化（ITransEの場合1.3→2.8→3.8）（IPTransEの場合1.5→2.8→4.0）

IPTransE
2KG
5 (9)
5 (9)
4 (8)
2 (3)
4.0
0.29

5KG
11 (322)
2 (2)
2 (4)
1 (1)
4.0
0.52

※括弧内は事後フィルタ前の順位
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

17

推論結果の説明(1)：特徴空間の可視化＜特徴空間は事件の構造を捉えられているか？＞ ITransE(5KG)の特徴空間の2D可視化(t-SNE)

凶器• 犯行場所と被害者は近い領域にある• 凶器と犯人は離れてしまっている

犯行現場
犯人

• ホームス、ワトソン（とくにホームス）は犯人に近い

𝑘𝑖𝑙𝑙
被害者

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

18

推論結果の説明(1)：特徴空間の可視化＜特徴空間は事件の構造を捉えられているか？＞ IPTransE(5KG)の特徴空間の2D可視化(t-SNE)
被害者
犯人𝑘𝑖𝑙𝑙• 犯行場所は被害者に近い領域にある
犯行現場• 凶器は犯人に近い領域にある• ホームス、ワトソン（とくにホームス）は犯人に近い• 𝑘𝑖𝑙𝑙は犯人と被害者をつなぐノルム、方向を持っているように見える凶器

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

19

推論結果の説明(2)：理由説明の試行＜なぜ悪魔の足で犯人を当てられたか？＞ ナレッジグラフ埋め込みの説明法（XKE[4]）により𝑘𝑖𝑙𝑙を説明する重要パス探索を試行
 正例作成：killを含む三つ組から ℎ + 𝑟 − 𝑡 が一定値未満の点を抽出し、特徴量=ヘッドとテイルを結ぶパスの有無を表すマルチホットベクトル、ラベル=1の正例サンプルを作成
 負例作成：killを含む三つ組の一部に対し、テイルを変えたラベル=-1の負例サンプルを作成
 以上の正例、負例集合をもとに線形回帰を実行し、回帰係数を導出

パス2(回帰係数=0.2)

mortimerkill

パス1(回帰係数=0.5)

brenda

XKEの結果イメージ

 IPTransE(5KG)の重要パス1位、2位が大きな回帰係数
パス
回帰係数
1位 -_i_have_loved-observe-_it_was_burning-it_was_burning0.968
2位 -i_have_loved-observe-_it_was_burning-it_was_burning0.968-follow-shoot-shoot-_beshot0.122-follow-shoot-sit-_dead0.122…
[4] Gusmão, A.C. et al., ICML 2018 Workshop (WHI 2018). Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

20

推論結果の説明(2)：理由説明の試行
 重要パス1位、2位
パス
回帰係数
1位 -_i_have_loved-observe-_it_was_burning-it_was_burning0.968
2位 -i_have_loved-observe-_it_was_burning-it_was_burning0.968

 重要パス1位の意味（=2位も同様）＜相思相愛＞
i_have_loved

standaleobservebrendain_the_room

kill(ed)it_was_burning
it_was_burning

thing＜case1の状況証拠を見ている＞

case1

standaleがmortimerを殺した動機に関連付けられている
ただし、case1かつ受け身=kill(ed)の説明であり、また、学習用サンプルが少ないため、解釈の妥当性については引き続き精査を行う
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

21

その他(1)：利用したツール、実行方法、実行環境
 利用したツール
 PTransE: https://github.com/thunlp/KB2E/tree/master/PTransE ITransE: https://github.com/thunlp/IEAJKE
 XKE: https://github.com/arthurcgusmao/XKE

 各手法の実行方法
 ITransE…上記ツールをそのまま実行（ソフトアラインメントを外して実行） TransE… ITransEに対し、共通項なしの場合に相当（共通項を与えずに実行）
 IPTransE… 実装が公開されていないため、ITransEにPTransEを独自に組み込んで実行（ソフトアラインメントを外して実行） PTransE… IPTransEに対し、共通項なしの場合に相当（共通項を与えずに実行）
 XKE… 埋め込みベクトルを直接入力できるように改変し、実行 計算機のスペック
 MacBook Pro 2016（CPU：Intel Core i5 2.9GHz、メモリ：16GB RAM）

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

22その他(2)：実行時間、使用メモリ量
 実行時間 9.0秒（ITransE、5つのナレッジグラフ全て使用の場合）
 112.5秒（IPTransE、 5つのナレッジグラフ全て使用の場合）

 使用メモリ量 約1.2MB（ITransE、 5つのナレッジグラフ全て使用の場合）
 約4.3MB（IPTransE、 5つのナレッジグラフ全て使用の場合）

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

23

まとめ
 犯人の推論 ナレッジグラフの埋め込みに基づき推論した結果、悪魔の足では犯人を当てることに成功＊ITransEで5つのナレッジグラフ全てを用いた場合

 悪魔の足では犯人（standale）を1位で当てることに成功 まだらの紐では犯人（roylott）は2位（1位はhelen）
 利用するナレッジグラフの数を増やすと（1KG→2KG→5KG）、精度（ランキング）が上昇➡他のナレッジグラフからの知識流入により、犯人推論の精度向上が可能
 利用するナレッジ（使用ID）を減らすと（フル→-10%→-25%）、精度が低下

 犯人の説明 ナレッジグラフ埋め込みの可視化により、事件の構造をおおまかに捉えていることを発見 ナレッジグラフ埋め込みの説明法を用い、動機に相当するリレーションパスを発見＊解釈の妥当性については精査中
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

24

謝辞
 本研究は、JST、CREST、J181401085の支援を受けたものである。

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

25

参考文献
[1] Bordes, A., Usunier, N., Garcia-Duran, A., Weston, J., & Yakhnenko, O., Translating embeddings for modelingmulti-relational data, In Advances in neural information processing systems, pp. 2787-2795, 2013.
[2] Lin, Y., Liu, Z., Luan, H., Sun, M., Rao, S., & Liu, S., Modeling Relation Paths for Representation Learning ofKnowledge Bases, In Proceedings of the 2015 Conference on Empirical Methods in Natural Language Processing,pp. 705-714, 2015.
[3] Zhu, H., Xie, R., Liu, Z., & Sun, M., Iterative Entity Alignment via Joint Knowledge Embeddings, In IJCAI, pp.
4258-4264, 2017.
[4] Gusmão, A. C., Correia, A. H. C., De Bona, G., & Cozman, F. G., Interpreting Embedding Models of Knowledge
Bases: A Pedagogical Approach, ICML Workshop on Human Interpretability in Machine Learning (WHI 2018), 2018.

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

26

備考 ITransE/IPTransEで擬似的に共通項を生成するソフトアラインメントを用いた場合（使用ID=フルの場合）
ITransE

悪魔の足(case2)
まだらの紐

IPTransE

2KG

5KG

2KG

5KG

犯人当て

3 (7)

3 (16)

6 (109)1 (1)犯人→被害者当て

7 (293)7 (169)8 (345)8 (152)

犯人当て

2 (2)

2 (4)

2 (6)

2 (2)

犯人→被害者当て

4 (169)7 (143)3 (49)

2 (32)

平均順位

4.0

4.8

4.8

3.3

平均逆順位

0.31

0.28

0.28

0.53

※括弧内は事後フィルタ前の順位

 cf. ソフトアラインメントを用いない場合
ITransE

悪魔の足(case2)
まだらの紐

IPTransE

2KG

5KG

2KG

5KG

犯人当て

1 (2)

1 (2)

6 (151)1 (1)犯人→被害者当て

1 (4)

1 (2)

2 (3)

1 (2)

犯人当て

2 (2)

2 (2)

2 (2)

3 (5)

犯人→被害者当て

2 (2)

1 (1)

2 (3)

1 (1)

平均順位

1.5

1.3

3.0

1.5

平均逆順位

0.75

0.88

0.42

0.83

・平均順位で、ソフトアラインメントを用いない場合のほうがよい。
理由としては、確かな共通項はholmes、watsonのみであり、さらに擬似的に共通項を生成することが難しかったと考えられる。

※括弧内は事後フィルタ前の順位
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

27

資料の共有について
 応募フォーム
 公開の可否：（○）公開してよい（ ）非公開とする
 公開形式：（○）ナレッジグラフ推論チャレンジのサイトで公開（ ）独自のサイトで公開してリンクを希望
 応募したプログラム，データ等
 公開の可否：（ ）公開してよい（○）非公開とする
Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

28

Copyright(C) 2019 KDDI Research, Inc. All Rights Reserved.

29