日本語Wikipediaから、エンティティ・リンキング用のデータセットを作製する

# なんの記事？
* 日本語のWikipediaダンプから、エンティティの付与された固有表現抽出データセットを作製しました。また前処理のスクリプトも併せて公開しました。[前回の記事](https://qiita.com/izuna385/items/1b4da90f7bde027fb543)からwikipedia向けに改良を加えたものになります。

* [20210420時点での日本語のWikipediaダンプ](https://dumps.wikimedia.org/jawiki/)から、27,954,057 メンション及び、紐付け先エンティティ（リダイレクト解消済み）の付与された26,700,456メンションを生成しました。

* データセットのリポジトリは[こちら](https://github.com/izuna385/Wikia-and-Wikipedia-EL-Dataset-Creator)になります。CC-BY-SA 3.0ライセンスの下でサンプルデータセットを公開しました。

https://github.com/izuna385/Wikia-and-Wikipedia-EL-Dataset-Creator

# データセットのサンプル
* Wikipediaのハイパーリンクが付与された部分について、リンク先のエンティティの情報との紐付けを行いました。リダイレクト先がある場合、その解消も行いました。

```json:annotation.json
{
  "document_title": "浅草",
  "anchor_sent": "昭和初期には、<a>浅草国際通り</a>沿いに森下仁丹が広告塔を建設。",
  "annotation_doc_entity_title": "東京都道462号蔵前三ノ輪線",
  "mention": "浅草国際通り",
  "original_sentence": "昭和初期には、浅草国際通り沿いに森下仁丹が広告塔を建設。",
  "original_sentence_mention_start": 7,
  "original_sentence_mention_end": 13
},
{
  "document_title": "浅草",
  "anchor_sent": "昭和初期には、浅草国際通り沿いに<a>森下仁丹</a>が広告塔を建設。",
  "annotation_doc_entity_title": "森下仁丹",
  "mention": "森下仁丹",
  "original_sentence": "昭和初期には、浅草国際通り沿いに森下仁丹が広告塔を建設。",
  "original_sentence_mention_start": 16,
  "original_sentence_mention_end": 20
}, ...
```

また、紐付け先のエンティティ集合と、それに紐づく説明文について文分割したものについてもあわせて作製しました。

```json:title2doc.json
{
  "浅草": [
              "浅草（あさくさ）は、東京都台東区の町名。",
              "または、旧東京市浅草区の範囲を指す地域名である。",
              "浅草寺の門前町として繁華街および観光地となっている。",
              "また浅草駅は東京メトロ銀座線、都営浅草線と東武スカイツリーラインが接続しているほか、つくばエクスプレスの浅草駅とも近接しており、東京都区部と北関東を結ぶ拠点となっている。",
              "浅草（地域）.",
              "東京都台東区のおよそ東半分を範囲とし、江戸・東京の下町を構成している地域の一つである。",
              "浅草は下谷・本所・深川と並ぶ、東京下町の外郭をなす。",
              ...
          ],
  "東京都道462号蔵前三ノ輪線": [
              "東京都道462号蔵前三ノ輪線（とうきょうとどう462ごう くらまえみのわせん）は、東京都台東区にある特例都道であり、江戸通り（国道6号）と蔵前橋通りが交わる蔵前一丁目交差点から分岐して、昭和通り・日光街道（国道4号）と明治通りが交わる大関横丁交差点までを結ぶ。"
              ...
          ],      
  ... 
}
```

# エンティティ・リンキングについて

エンティティ・リンキングとは，文書中に存在する，メンションと呼ばれるテキスト範囲を知識グラフ内に存在するエンティティへとマッピングするタスクです。自然言語理解及び応用における重要なタスクの一つとされています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357766/ccd6b09c-fd0b-f5da-c2ca-d78834d24d35.png)

（画像は[このスライド](https://speakerdeck.com/izuna385/usecase-of-entity-linking)より引用）

今回、日本語のエンティティ・リンキングを行うためにWikipediaに前処理を行い、前処理のスクリプトとともに公開しました。

# 他の日本語エンティティ・リンキングデータセットとの比較

日本語の固有表現抽出データセットは多くあれど、日本語のエンティティ・リンキングに特化したデータはこれまで多くありませんでした。以下、データセットを２つ紹介します。

* [日本語wikificationコーパス](http://www.cl.ecei.tohoku.ac.jp/jawikify/)[1] : BCCWJコーパスの一部にWikipediaのエントリを付与したものになります。アノテーションされたメンション数は約2万メンションです。BCCWJコーパスの購入が別途必要です。

* [Mewsli-9 Dataset](http://goo.gle/mewsli-dataset)[2]: WikiNewsからWikidataにリンクされたメンションを集めたデータです。日本語のメンション数は約3万4000メンションです。Wikidataとの紐付けが別途必要です。

どちらも前処理スクリプトは公開されていません。またメンション数も比較的小規模で、別途リンク先のアノテーションの前処理も必要です。

# 使用したライブラリ・コードについて

Wikipediaの前処理に[WikiExtractor](https://github.com/attardi/wikiextractor/tree/master/wikiextractor)、文章分割には[konoha](https://github.com/himkt/konoha/)を使用しました。また、リダイレクト解消では[Wikipedia2Vec](https://wikipedia2vec.github.io/wikipedia2vec/)のソースコードを参考にしました。

# まとめ

日本語のWikipediaについてデータを前処理し、エンティティ・リンキング用に使いやすい形で公開しました。

何かありましたら[リポジトリ](https://github.com/izuna385/Wikia-and-Wikipedia-EL-Dataset-Creator)でissueを建てて頂くか、ご連絡を頂ければ幸いです。

https://github.com/izuna385/Wikia-and-Wikipedia-EL-Dataset-Creator

### 参考文献
* [1] Davaajav Jargalsaikhan, 岡崎直観, 松田耕史, 乾健太郎. 日本語 Wikification コーパスの構築に向けて. 言語処理学会第22回年次大会(NLP2016), March 2016.

* [2] Botha, Jan A., Zifei Shan, and Daniel Gillick. "Entity Linking in 100 Languages." arXiv preprint arXiv:2011.02690 (2020).