Skip to the content.

GiNZA logo

GiNZAの公開ページ

TweetDownloads

What’s new!

GiNZAをアップグレードする際は下記の互換性情報を確認してください。

GiNZA v5.1 互換性情報

GiNZA v5 新機能

Transformersモデルによる解析精度の向上

GiNZA v5の解析精度は以前のバージョンから飛躍的な向上を遂げました。精度向上の主たる貢献はTransformers事前学習モデルの導入にあります。次の図は、UD_Japanese-BCCWJ r2.8における、従来型モデルのja_ginzaと、Transformers事前学習モデルを用いたja_ginza_electraの、依存関係ラベリングおよび単語依存構造解析の学習曲線です。

LAS UAS

次の表はUD_Japanese-BCCWJ r2.8で5万ステップ学習した時点でのテストセットでの依存関係ラベリング精度(LAS:Labeled Attachment Score)、単語依存構造解析精度(UAS:Unlabeled Attachment Score)、UD品詞推定精度(UPOS)、拡張固有表現抽出精度(ENE)の比較です。

Model LAS UAS UPOS ENE
ja_ginza_bert_large (β版) 93.8 94.9 98.3 70.8
ja_ginza_electra 92.3 93.7 98.1 61.3
ja_ginza (v5) 89.2 91.1 97.0 53.9
ja_ginza (v4相当) 89.0 91.0 95.1 53.1

ja_ginza_electraja_ginzaに対して、5万ステップ学習時の依存関係ラベリング・単語依存構造解析の誤りを、以前のバージョンと比較して25%以上低減できました。

また従来型モデルのja_ginzaにおいても、処理パイプラインにmorphologizerを追加することにより、以前のバージョンと比較してUD品詞推定の誤りを4割低減できました。

関根の拡張固有表現階層を用いた拡張固有表現抽出精度(ENE)においてもja_ginza_electraは大幅な精度向上が得られています。GiNZAは関根の拡張固有表現階層にもとづく固有表現抽出結果を、spaCyで標準的に用いられるOntoNotes5にマッピング(変換表を適用)して出力しています。OntoNotes5は関根の拡張固有表現階層よりカテゴリ数が非常に少ない(粗い)ため、拡張固有表現をOntoNotes5体系にマッピングした場合の固有表現抽出精度は、拡張固有表現での数値より一般に高くなります。

※各モデルの学習と解析精度評価にはUD_Japanese-BCCWJ r2.8から新聞記事系のテキストを除外したものをSudachi辞書mode C(長単位)で再解析(retokenize)した上で、文節主辞情報を依存関係ラベルに組み合わせた状態のコーパスを用いています。

実行環境

GiNZAは Python 3.6以上(および対応するpip)で動作検証を行っています。 GiNZAをインストールする前に予めPython実行環境を構築してください。

実行環境のセットアップ

1. GiNZA + Transformersモデル

※Transformersモデルの実行には16GB以上のメモリ容量が必要です。メモリ容量が不足する場合は後述の従来型モデルをお試しください。

旧バージョンのGiNZAをインストールしている場合は次のコマンドでアンインストールします。

$ pip uninstall ginza

旧バージョンのja_ginzaをインストールしている場合は次のコマンドでアンインストールします。

$ pip uninstall ja_ginza

旧バージョンのja_ginza_electraをインストールしている場合は次のコマンドでアンインストールします。

$ pip uninstall ja_ginza_electra

次のコマンドを実行して最新のGiNZAおよびTransformersモデルをインストールします。

$ pip install -U ginza ja_ginza_electra

上記コマンドでインストールされるja_ginza_electraパッケージには大容量モデルファイルは含まれていません。大容量モデルファイルは初回実行時に自動的にダウンロードされて、以降の実行時にはローカルにキャッシュされたファイルが使用されます。

大容量モデルファイルを含めたインストールを行うには、次のようにGitHubのリリースアーカイブを指定します。

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

GPUを利用してtransformersモデルを高速に実行するには、実行環境に応じたオプションを指定してspacyを上書きインストールします。

CUDA 11.7を使用する場合:

$ pip install -U spacy[cuda117]

※ あわせてpytorchもCUDAと整合したバージョンをインストールする必要があります。

2. GiNZA + 従来型モデル

旧バージョンのGiNZAおよびja_ginzaをインストールしている場合は次のコマンドでアンインストールを実行します。

$ pip uninstall ginza _ginza

次のコマンドを実行して最新のGiNZAと従来型モデルをインストールします。

$ pip install -U ginza ja_ginza

M1やM2などのMPSに対応したApple Silicon環境では、thinc-apple-opsを導入することで解析速度が向上します。

$ pip install torch thinc-apple-ops

ginzaコマンドによる解析処理の実行

ginzaコマンドを実行して、日本語の文に続けてEnterを入力すると、CoNLL-U Syntactic Annotation 形式で解析結果が出力されます。

$ ginza
銀座でランチをご一緒しましょう。
# text = 銀座でランチをご一緒しましょう。
1	銀座	銀座	PROPN	名詞-固有名詞-地名-一般	_	6	obl	_	SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=ギンザ|NE=B-GPE|ENE=B-City
2	で	で	ADP	助詞-格助詞	_	1	case	_	SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=デ
3	ランチ	ランチ	NOUN	名詞-普通名詞-一般	_	6	obj	_	SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|NP_B|Reading=ランチ
4	を	を	ADP	助詞-格助詞	_	3	case	_	SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Reading=ヲ
5	ご	ご	NOUN	接頭辞	_	6	compound	_	SpaceAfter=No|BunsetuBILabel=B|BunsetuPositionType=CONT|Reading=ゴ
6	一緒	一緒	VERB	名詞-普通名詞-サ変可能	_	0	root	_	SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=ROOT|Reading=イッショ
7	し	する	AUX	動詞-非自立可能	_	6	aux	_	SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=サ行変格,連用形-一般|Reading=シ
8	ましょう	ます	AUX	助動詞	_	6	aux	_	SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|Inf=助動詞-マス,意志推量形|Reading=マショウ
9	。	。	PUNCT	補助記号-句点	_	6	punct	_	SpaceAfter=No|BunsetuBILabel=I|BunsetuPositionType=CONT|Reading=。

実行環境にja_ginza_electraja_ginzaの両方のモデルがインストールされている場合、ginzaコマンドはja_ginza_electraを優先して使用します。同じ状況でja_ginzaを使用するにはginza -mオプションでモデル名を指定します。

# ginza -m ja_ginza

また、spaCyが提供している様々な言語の解析モデルの名称を-mオプションに指定することで、そのモデルのダウンロードと解析をまとめて実行することができます。

# ginza -m en_core_web_trf

Pythonコードによる解析処理の実行

次のコードは、Transformersモデルによる依存構造解析結果を文単位で出力します。 従来型モデルを用いる場合はja_ginza_electraja_ginzaに置き換えます。

import spacy
nlp = spacy.load('ja_ginza_electra')
doc = nlp('銀座でランチをご一緒しましょう。')
for sent in doc.sents:
    for token in sent:
        print(
            token.i,
            token.orth_,
            token.lemma_,
            token.norm_,
            token.morph.get("Reading"),
            token.pos_,
            token.morph.get("Inflection"),
            token.tag_,
            token.dep_,
            token.head.i,
        )
    print('EOS')

解説資料

マニュアル

講演資料

論文

解説記事

ライセンス

GiNZA NLPライブラリおよびGiNZA日本語Universal Dependenciesモデルは The MIT Licenseのもとで公開されています。 利用にはThe MIT Licenseに合意し、規約を遵守する必要があります。

Explosion/ spaCy

GiNZAはspaCyをNLP Frameworkとして使用しています。

spaCy LICENSE PAGE

Works Applications Enterprise / Sudachi/SudachiPy - SudachiDict - chiVe

GiNZAはトークン化(形態素解析)処理にSudachiPyを、単語ベクトル表現にchiVeを使用することで、高い解析精度を得ています。

Sudachi LICENSE PAGE, SudachiPy LICENSE PAGE, SudachiDict LEGAL PAGE, chiVe LICENSE PAGE

Hugging Face / transformers

GiNZA v5 Transformersモデル(ja_ginza_electra)はHugging Face社が提供するtransformersを事前学習フレームワークに用いています。

transformers LICENSE PAGE

訓練コーパス

UD Japanese BCCWJ r2.8

GiNZA v5の依存構造解析モデルは UD Japanese BCCWJ r2.8 (Omura and Asahara:2018) から新聞系文書を除外して学習しています。 GiNZA v5の依存構造解析モデルは国立国語研究所とMegagon Labsの共同研究成果です。

GSK2014-A (2019) BCCWJ版

GiNZA v5の固有表現抽出モデルは GSK2014-A (2019) BCCWJ版 (橋本・乾・村上(2008)) から新聞系文書を除外して学習しています。 固有表現抽出ラベル体系は関根の拡張固有表現階層、 および、OntoNotes5 を独自に拡張したものを併用しています。 GiNZA v5の固有表現抽出モデルは国立国語研究所とMegagon Labsの共同研究成果です。

mC4

GiNZA v5 Transformersモデル(ja_ginza_electra)は、mC4から抽出した日本語20億文以上を用いて事前学習したtransformers-ud-japanese-electra-base-discriminatorを使用しています。 mC4はODC-BYライセンスの規約に基づいて事前学習データとして利用しています。

Contains information from mC4 which is made available under the ODC Attribution License.

@article{2019t5,
    author = {Colin Raffel and Noam Shazeer and Adam Roberts and Katherine Lee and Sharan Narang and Michael Matena and Yanqi Zhou and Wei Li and Peter J. Liu},
    title = {Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer},
    journal = {arXiv e-prints},
    year = {2019},
    archivePrefix = {arXiv},
    eprint = {1910.10683},
}

リリース履歴

version 5.x

ginza-5.1.3

ginza-5.1.2

ginza-5.1.1

ginza-5.1.0

ginza-5.0.3

ginza-5.0.2

ginza-5.0.1

ginza-5.0.0

version 4.x

ginza-4.0.6

ginza-4.0.5

ginza-4.0.4

ginza-4.0.3

ginza-4.0.2

ginza-4.0.1

ginza-4.0.0

version 3.x

ginza-3.1.2

ginza-3.1.1

import spacy
import pickle
nlp = spacy.load('ja_ginza')
doc1 = nlp('この例は正しくserializeされます。')
doc1.to_bytes()
with open('sample1.pickle', 'wb') as f:
    pickle.dump(doc1, f)

nlp.tokenizer.set_enable_ex_sudachi(True)
doc2 = nlp('この例ではserialize時にエラーが発生します。')
doc2.to_bytes()
with open('sample2.pickle', 'wb') as f:
    pickle.dump(doc2, f)

ginza-3.1.0

ginza-3.0.0

version 2.x

ginza-2.2.1

ginza-2.2.0

ginza-2.0.0

version 1.x

ja_ginza_nopn-1.0.2

ja_ginza_nopn-1.0.1

ja_ginza_nopn-1.0.0