前書き
第1章 AllenNLP チュートリアル
第2章 文書分類
第3章 Seq2Seq
第4章 Natural Language Inference
第5章 事前学習済みBERT
第6章 AllenNLPで日本語を扱おう
第7章 MLflowとの連携
本書はAllenNLPを利用して自然言語処理を行うための入門書です。AllenNLPはPyTorchをベースにした自然言語処理のためのオープンソースソフトウェアで、最先端のモデルや多くのタスクで利用可能なモジュールなどを含んでいます。AllenNLPを活用することで、自然言語処理におけるモデルの設計や学習を効率的に行うことができます。
本書では、まずいくつかのタスクについてAllenNLPを利用したモデルの作成と学習を行い、AllenNLPの基本的な使い方を紹介します。そして後半の章では、BERTモデルの利用や日本語対応、MLflowによる実験管理など、応用的な利用方法についても解説します。
本書の執筆時点でリリースされているAllenNLPの最新版は0.9.0です。本書では、特に断りがない限り執筆時点での最新版である0.9.0を利用します。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本章では、固有表現認識という自然言語処理のタスクを通じて、AllenNLPの使い方を説明します。ディレクトリ構成はリスト1.1の通りです。
ner-model
├── configs
│ └── experiment.jsonnet
├── datasets
│ ├── eng.testa
│ ├── eng.testb
│ └── eng.train
└── src
├── __init__.py
├── data
│ ├── __init__.py
│ └── dataset_readers
│ ├── __init__.py
│ └── conll_2003_reader.py
├── models
│ ├── __init__.py
│ └── ner_tagger.py
└── predictors
├── __init__.py
└── conll_2003_predictor.py
実装を始める前に、これから扱う固有表現抽出タスクについて説明します。固有表現認識というタスクは、与えられた文章から人名・地名・組織名などの固有名詞や、時間表現などの語句を抽出するタスクです。例えば「Donald John Trump is the president of the US.」という文章には、「Donald John trump」という人名と、「US」という地名、ふたつの固有名詞が含まれています。人名をI-PER、地名をI-LOC、固有表現ではないものにOタグというラベルを付与すると、先程の文章は以下のように表現できます。「Donald/I-PER John/I-PER Trump/I-PER is/O the/O president/O of/O the/O US/I-LOC ./O」このような、単語ひとつに対してラベルひとつを予測することを目的としたタスクを、一般的に系列ラベリングタスクと言います。
今回は固有表現認識のデータセットとして、CoNLL-2003を利用します。このデータセットは、新聞記事に含まれる人名や地名などの固有表現に対してラベルが付けられているコーパスです。次のコマンドでCoNLL-2003のデータセットを保存しましょう。
$ curl -OL https://github.com/synalp/NER/raw/master/corpus/CoNLL-2003/eng.train
$ curl -OL https://github.com/synalp/NER/raw/master/corpus/CoNLL-2003/eng.testa
CoNLL-2003の中身はリスト1.2のようになっています。
U.N. NNP I-NP I-ORG
official NN I-NP O
Ekeus NNP I-NP I-PER
heads VBZ I-VP O
for IN I-PP O
Baghdad NNP I-NP I-LOC
. . O O
CoNLL-2003のデータセットはタブで区切られた四つの行から構成されていますが、今回構築するモデルでは一列目の単語と四列目の固有表現ラベルを素性として利用します。