ColabでGiNZA v5を試してみた!【固有表現抽出】

機械学習

自然言語処理ライブラリ(NLPライブラリ)であるGiNZAが、今日最新版をリリースしました。

今回はGiNZA v5とspaCyを用いて、試しに文章の類似度を計算してみたいと思います。

GiNZAとは

GiNZAは日本語の自然言語処理ライブラリで、大きな特徴として「Universal Dependencies(UD)」という世界標準の言語表現を採用していることです。
UDを採用することで、

  • あらゆる自然言語に共通した処理を適用可能
  • 他のライブラリとの連携が楽

といったメリットがあります。

今回のGiNZA v5の主な特徴は、以下の3点です。

  • spaCy v3に対応
  • transformerを採用したモデル(ja_ginza_electra)をリリース
  • UD品詞解析精度が向上

1つ目のspaCyは、あらゆる自然言語に対応するUDを利用したNLPライブラリです。
spaCyは日本語のサポートが弱く、日本語の解析はGiNZAを利用するのが一般的です。
今回のGiNZAのアップデートで、最新のspaCy v3に対応したことで、PyTorchやTensorFlowといった機械学習ライブラリとの連携が簡単に行えるようになりました。

2つ目のtramsformerについては、最新の機械学習モデルであり、過去の記事「Attention機構とは何のか?」でも解説しています。
このtransformerを利用したモデルがリリースされ、より高精度な言語モデルが手軽に利用できるようになりました。

3つ目について、小型モデルであるja_ginzaにおいても「morphologizer」を導入することで、品詞推定精度が向上しました。
品詞はあらゆる言語処理に利用されるので、非常に重要なアップデートです。

Colabを使ってGiNZA v5を動かす方法

まずはGoogle Colabにアクセスして、新しいノートブックを作成してください。

最初のセルで、環境設定を行います。
公式ドキュメントに従い、GiNZAをインストールします。

!pip install sudachipy sudachidict_core
!pip install -U ginza https://github.com/megagonlabs/ginza/releases/download/latest/ja_ginza_electra-latest-with-model.tar.gz

次のセルで、以下のサンプルプログラムを動かしてみます。
この時ロードするモデルとして、ja_ginzaja_ginza_electraを選択することができます。
ja_ginza_electraの方が、処理は重いけど、性能は高いです。

import spacy
nlp = spacy.load('ja_ginza_electra')
doc = nlp('GiNZA v5をColabで動かしてみました!')
for sent in doc.sents:
    for token in sent:
        print(token.i, token.orth_, token.lemma_, token.pos_, token.tag_, token.dep_, token.head.i)
    print('EOS')

2つのセルを実行すれば、以下のような結果が得られるはずです。
ContextualVersionConflictが発生する場合は、「ランタイムを再起動」を試してみてください(参考サイト)。

0 GiNZA ginza PROPN 名詞-普通名詞-一般 compound 2
1 v V NOUN 名詞-普通名詞-助数詞可能 compound 2
2 5 5 NUM 名詞-数詞 obj 6
3 を を ADP 助詞-格助詞 case 2
4 Colab colab NOUN 名詞-普通名詞-一般 obl 6
5 で で ADP 助詞-格助詞 case 4
6 動かし 動かす VERB 動詞-一般 ROOT 6
7 て て SCONJ 助詞-接続助詞 mark 6
8 み みる VERB 動詞-非自立可能 fixed 7
9 まし ます AUX 助動詞 aux 6
10 た た AUX 助動詞 aux 6
11 ! ! PUNCT 補助記号-句点 punct 6
EOS

GiNZA v5を使た固有表現抽出

固有表現抽出(文章中の特徴的な単語を見つけ、属性を付与する処理)を行ってみます。

次のセルにそのまま、以下のプログラムを書いて、実行します。
今回は対象文章として、『スティーブ・ジョブズ』のWikipediaからの引用を使いました。

doc = nlp('1976年、ジョブズは友人のスティーブ・ウォズニアックが自作したマイクロコンピュータ「Apple I」を販売するために起業することを決意し、同年4月1日にウォズニアックおよびロナルド・ウェインと共同で「Apple Computer Company(アップルコンピュータ・カンパニー)」を創業した。Apple Computer(以下Apple)が1977年に発売した「Apple II」は商業的な大成功を収め、パーソナルコンピュータという概念を世間一般に浸透させた。Appleはシリコンバレーを代表する企業に急成長を遂げ、ジョブズは1980年12月のApple IPO時に2億5,600万ドルもの個人資産を手にし、1982年2月には『タイム』誌の表紙を飾るなど若くして著名な起業家となった。')
spacy.displacy.render(doc, style="ent", jupyter=True)

実行すると、以下のようにビジュアライズされた結果が表示されます。

驚くことに、全ての固有名詞が完璧に分類できています。
正直、ここまで正確にできるとは思っていませんでした。

まとめ

ついにTransformerを利用した言語モデルが、誰でも簡単に利用できるようになりました!

今後、日本の各社からこの言語モデルを使ったサービスがリリースされることが予想されますので、注視していきたいと思います!

このブログでは、他にも多くの機械学習記事を扱っておりますので、あわせて確認してください!

コメント

タイトルとURLをコピーしました