More Related Content Similar to GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜 (20) GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜3. Megagon Labsの紹介
•Mountain Viewと銀座の両拠点で約20名が研究に従事
•Vision
• To satisfy people's needs and desires with immediate access to the most
useful services and information.
•Our core strength
• Data Preparation and Integration
• Natural Language Processing
• Machine Learning
• Human-Computer Interaction
3
5. 自然言語処理技術の
発展 - 1978年
• 東芝が日本初のワードプロセッサを発表(630万円)
• 日本語入力で初めて形態素解析を導入
• 同研究所ではCNNの原型が研究されていた
• 日本語文字コード JIS C 6226 制定
• 生成文法理論の発展と計算機上の実証実験
• アンチテーゼとしての認知言語学の勃興
• メタファー・カテゴリ化などの認知能力の研究
出典:wikipedia
画像出典: JW-10, Dddeco, wikipedia
5
6. 自然言語処理技術の
発展 - 1985年
•PC98+DOS+一太郎の黄金期始まる
• JIS第二水準漢字ROM搭載が標準化
• 日本語入力技術の開発競争激化
•初の日英自動翻訳システム発売
• PC向けの製品も同年に発売された
•ルールベースNLPの飛躍的な発展
• 哲学・言語学・計算機科学の融合が進む
• 日本は自然言語処理の先進国となっていく
•言語学は文脈を考慮した記号処理に移行
• 語の静的意味と文脈依存(言語使用上)の
意味の分離 → 分散表現の進歩のデジャブ
出典:SemanticScholar 6
7. 自然言語処理技術の
発展 - 1993年
•32bit PC & Windowsの普及
•WebブラウザMosaicの登場
•IBMが統計的機械翻訳技術を論文発表
• 音声認識ソフトウェア発売(1994)
•NLPに立ち塞がる二つの壁の顕在化
• 文法カバー率の限界(知識記述コストの壁)
• データスパースネス問題(共起空間の壁)
•話し言葉への注目
• 話し言葉と書き言葉を統合する文法は作れるか?
画像出典:flicker
出典:ResearchGate 7
9. 自然言語処理技術の
発展 - 2010年
•スマフォ所有率20%超え
•画像・音声認識でDeep Learning
技術が精度を飛躍的に向上
•自然言語処理でもDeep Learning
応用が徐々に広まりを見せる
•Googleが発表したword2vec(2013)
により流れが一気に加速
•言葉の意味をベクトルで表現する
Embeddingの時代に突入していく
出典:ResearchGate 出典:arxiv
出典:ACL anthology
画像出典: Iphone4, DanielZanetti, wikipedia
9
14. 新・日本語NLPの基本設計
• フレームワークにspaCyを採用
• 文法体系はspaCy標準のUniversal Dependenciesを使用
• TokenizerにはSudachiPyを使用
• Pure-python化によりインストール作業を極限までシンプル化できる
• 依存構造解析学習データセットにはUD-Japanese BCCWJを使用
• 現代日本語書き言葉均衡コーパス - 約4万文に正解データを付与
• 多分野のテキストから成る日本語で最大の依存構造データセット
• 口コミ・チャットなど多様な文体を高精度に解析できることに期待
• 固有表現抽出の学習には京都大学ウェブ文書リードコーパスを使用
• 条件付きながら商用利用も可能な中規模のデータセット
14
21. GiNZA - 特長
•MITライセンスでモデルを含めて商用利用可能
• BCCWJ由来の依存構造解析モデルをフリーで利用可能
• 他の日本語UD解析系が使用するGSDコーパスの5倍以上の規模で学習
•pip一行ですべて導入完了
• SudachiPyおよび150万語彙を備えるSudachi辞書も一括インストール
• MeCab・CaboCha等と比較してDocker等での環境構築が圧倒的に楽
•spaCyの豊富な機能セットを利用できる
• 日本語以外の言語モデルへの切り替えが容易 (spaCy公式サポートは8言語)
• 依存構造解析結果の視覚化 → displaCy
• アノテーションツール → Prodigy
21
23. GiNZA version 2.0 での主な改良点
•Python Entry Pointsを用いたリファクタリング
• インストール時に ginza コマンドを自動登録→すぐに試せる
•ユーザ辞書の追加に対応
• SudachiPyをv0.3.2にupgrade
•日本語を扱うための機能強化
• 文節情報(開始位置・主辞と機能語の区分)を取得可能に
token._.bunsetu_bi_label → B or I
token._.bunsetu_position_type
→ ROOT, SEM_HEAD, SYN_HEAD, NO_HEAD, FUNC, CONT
• spaCy標準APIでUniDic品詞情報を取得可能に
token.tag_ → 名詞-普通名詞-サ変可能
23
24. GiNZA - 使い方
• インストール (python 3.6以上)
$ pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"
• 解析
$ python
>>> import spacy
>>> nlp = spacy.load('ja_ginza')
>>> doc = nlp('また行きたい、そんな気持ちにさせてくれるお店です。')
>>> for token in doc[0]:
>>> print(token.i, token.orth_, token.lemma_, token.pos_, token.tag_, token.dep_, token.head.i)
※ CLIツールによるCONLL-U形式出力
$ ginza sentence_per_line.txt
24
25. GiNZA - GPUの有効化
• explosion社はspaCyとともにGPUライブラリthincを提供(cupyベース)
• ginzaの後にspacyをオプション付きで再インストールする (CUDA 10.0の例)
$ pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"
$ pip install -U spacy[cuda100]
• 解析
$ python
>>> import spacy
>>> spacy.require_gpu()
>>> nlp = spacy.load('ja_ginza')
※ CLI
$ ginza -g sentence_pre_line.txt
25
27. Stanford NLP - 特長
• CoNLL 2018 Shared Task参加時のStanfordの手法がベース
• tokenize,lemmatize,tagging,parse全てをDNN実装したEnd-to-endモデル
• 解析速度は遅くメモリ消費も大きい (v0.2.0でやや改善された)
• Pythonによる実装 → PyTorchを使用しておりGPUで高速化できる
• Apache License, Version 2.0
• 53言語対応
• 多くのモデルはNC(非商用条項)つき
• 日本語モデル
• UD_Japanese-GSD (r2.2?) - 7千文,16万語から学習
• VocabはGSDで出現頻度7回以上の2,260語 + 文字素性2,860件
• 学習コーパスが小さいためモデル本来の性能は得られていない?
27
28. Stanford NLP - 使い方
• インストール (python 3.6.8 or 3.7.2以上)
$ pip install stanfordnlp
$ python
>>> import stanfordnlp
>>> stanfordnlp.download('ja')
• 解析
>>> nlp = stanfordnlp.Pipeline(lang='ja', treebank='ja_gsd')
>>> doc = nlp('また行きたい、そんな気持ちにさせてくれるお店です。')
>>> doc.sentences[0].print_dependencies()
※ CLIツールによるCONLL-U形式出力
$ python -m stanfordnlp.run_pipeline -l ja -t ja_gsd sentence_per_line.txt
28
29. Stanford NLP - GPUの有効化
• 先にanaconda3環境でpytorch CUDA環境を導入する
$ pyenv local anaconda3-2019.7
$ conda install pytorch torchvision cudatoolkit=10.0 -c pytorch
$ pip install stanfordnlp
• 解析
$ python
>>> import stanfordnlp
>>> stanfordnlp.download('ja')
>>> nlp = stanfordnlp.Pipeline(lang='ja', treebank='ja_gsd', use_gpu=True)
※ CLIでのGPUサポートは現時点ではなし
29
30. UDPipe - 特長
• Universal Dependenciesの標準解析系
• Charles UniversityによるC++実装 → Python, Java, C#, Perl向けbindingあり
• 元来Gold Tokenを与えて依存構造解析精度を評価するためのツール
• tokenizerの精度は低く産業用途には向かない
• ニューラルベースの実装
• GPU対応は計画中 (v2.0 or 3.0?)
• Mozilla Public License 2.0
• UD Treebankのほぼ全ての言語に対応
• 多くのモデルはNC(非商用条項)つき
• 日本語を含む60言語に対応したUD2.4学習済みモデル
• UD_Japanese-GSD - 7千文,16万語から学習
30
31. UDPipe - 使い方 (Python binding)
• インストール (Python 2.6以上 or 3.x)
$ pip install ufal.udpipe
モデルページ下部のリストから japanese-gsd-ud-2.4-190531.udpipe をダウンロード
• 解析
>>> from ufal.udpipe import Model, Pipeline, ProcessingError
>>> model = Model.load('japanese-gsd-ud-2.4-190531.udpipe')
>>> pipeline = Pipeline(model, 'tokenize', Pipeline.DEFAULT, Pipeline.DEFAULT, 'conllu')
>>> error = ProcessingError()
>>> text = 'また行きたい、そんな気持ちにさせてくれるお店です。'
>>> processed = pipeline.process(text, error)
>>> print(processed)
※ CLIツールはC++版で提供されている
31
32. NLP-cube - 特長
• CoNLL 2018 Shared Task参加時のAdobeの手法がベース
• Stanford NLPと同様にEnd-to-endなニューラル実装
• パフォーマンスについても同様の傾向
• GPUで高速化できる (cube/main.pyの--use-gpuオプション)
• Apache License, Version 2.0
• 51言語対応
• UD 2.2ベース (モデルのライセンスが明示されていない?)
• モデルのダウンロードが非常に遅い
• 日本語モデル
• UD_Japanese-GSD r2.2 - 7千文,16万語から学習
32
33. NLP-cube - 使い方
• インストール (Python 3.x)
$ pip install nlpcube
$ python
>>> from cube.api import Cube
>>> cube=Cube(verbose=True)
>>> cube.load("ja")
• 解析
>>> sentences=cube('また行きたい、そんな気持ちにさせてくれるお店です。')
>>> for t in sentences[0]:
>>> print(t.index, t.word, t.lemma, t.upos, t.xpos, t.attrs, t.head, t.label, t.space_after)
※ CLIツールとして cube/main.py が提供されている (ドキュメント見当たらず)
33
36. 文節区切り 文節内役
割
GiNZA - 解析例 (GSDとは一部基準が異なる)
36
※拡張フィールドには NP(名詞句)とNE(固有表現)も出力される。
# text = また行きたい、そんな気持ちにさせてくれるお店です。
1 また 又 SCONJ 接続詞 _ 2 advmod _ BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No
2 行き 行く VERB 動詞-非自立可能 _ 12 acl _ BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No
3 たい たい AUX 助動詞 _ 2 aux _ BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
4 、 、 PUNCT 補助記号-読点 _ 2 punct _ BunsetuBILabel=I|BunsetuPositionType=CONT|SpaceAfter=No
5 そんな そんな PRON 連体詞 _ 6 nmod _ BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No|NP_B
6 気持ち 気持ち NOUN 名詞-普通名詞-一般 _ 8 iobj _ BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No|NP_I
7 に に ADP 助詞-格助詞 _ 6 case _ BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
8 さ 為る AUX 動詞-非自立可能 _ 12 acl _ BunsetuBILabel=B|BunsetuPositionType=SEM_HEAD|SpaceAfter=No
9 せ せる AUX 助動詞 _ 8 aux _ BunsetuBILabel=I|BunsetuPositionType=FUNC|SpaceAfter=No
10 て て SCONJ 助詞-接続助詞 _ 8 mark _ BunsetuBILabel=I|BunsetuPositionType=FUNC|SpaceAfter=No
11 くれる呉れる AUX 動詞-非自立可能 _ 8 aux _ BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
12 お店 御店 NOUN 名詞-普通名詞-一般 _ 0 root _ BunsetuBILabel=B|BunsetuPositionType=ROOT|SpaceAfter=No|NP_B
13 です です AUX 助動詞 _ 12 cop _ BunsetuBILabel=I|BunsetuPositionType=SYN_HEAD|SpaceAfter=No
14 。 。 PUNCT 補助記号-句点 _ 12 punct _ BunsetuBILabel=I|BunsetuPositionType=CONT|SpaceAfter=No
37. Stanford NLP - 解析例
# text = また行きたい、そんな気持ちにさせてくれるお店です。
1 また また CCONJ _ _ 13 advmod _ _
2 行き 行く VERB _ _ 6 acl _ _
3 たい たい AUX _ _ 2 aux _ _
4 、 、 PUNCT _ _ 2 punct _ _
5 そんな そんな ADJ _ _ 6 amod _ _
6 気持ち 気持ち NOUN _ _ 8 iobj _ _
7 に に ADP _ _ 6 case _ _
8 さ する VERB _ _ 13 acl _ _
9 せ せる AUX _ _ 8 aux _ _
10 て て SCONJ _ _ 8 mark _ _
11 くれるくれるAUX _ _ 8 aux _ _
12 お お NOUN _ _ 13 amod _ _
13 店 店 NOUN _ _ 0 root _ _
14 です だ AUX _ _ 13 cop _ _
15 。 。 PUNCT _ _ 13 punct _ _
37
38. UDPipe - 解析例
# text = また行きたい、そんな気持ちにさせてくれるお店です。
1 また また CCONJ CC _ 2 advmod _ SpaceAfter=No
2 行き 行く VERB VV _ 6 acl _ SpaceAfter=No
3 たい たい AUX AV _ 2 aux _ SpaceAfter=No
4 、 、 PUNCT SYM _ 2 punct _ SpaceAfter=No
5 そんな そんな ADJ JR _ 6 amod _ SpaceAfter=No
6 気持ち 気持ち NOUN NN _ 8 iobj _ SpaceAfter=No
7 に に ADP PS _ 6 case _ SpaceAfter=No
8 さ する VERB VV _ 13 acl _ SpaceAfter=No
9 せ せる AUX AV _ 8 aux _ SpaceAfter=No
10 て て SCONJ PC _ 8 mark _ SpaceAfter=No
11 くれるくれるAUX AV _ 8 aux _ SpaceAfter=No
12 お お NOUN XP _ 13 compound _SpaceAfter=No
13 店 店 NOUN XS _ 0 root _ SpaceAfter=No
14 です だ AUX AV _ 13 cop _ SpaceAfter=No
15 。 。 PUNCT SYM _ 13 punct _ SpacesAfter=n
38
39. NLP-cube - 解析例
# text = また行きたい、そんな気持ちにさせてくれるお店です。
1 また また CCONJ _ _ 2 advmod _ SpaceAfter=No
2 行き 行く VERB _ _ 6 advcl _ SpaceAfter=No
3 たい たい AUX _ _ 2 aux _ SpaceAfter=No
4 、 、 PUNCT _ _ 2 punct _ SpaceAfter=No
5 そんな そんな ADJ _ _ 6 amod _ SpaceAfter=No
6 気持ち 気持ち NOUN _ _ 8 iobj _ SpaceAfter=No
7 に に ADP _ _ 6 case _ SpaceAfter=No
8 さ する VERB _ _ 13 acl _ SpaceAfter=No
9 せ せる AUX _ _ 8 aux _ SpaceAfter=No
10 て て SCONJ _ _ 8 mark _ SpaceAfter=No
11 くれるくれるAUX _ _ 8 aux _ SpaceAfter=No
12 お お NOUN _ _ 13 amod _ SpaceAfter=No
13 店 店 NOUN _ _ 0 root _ SpaceAfter=No
14 です だ AUX _ _ 13 cop _ SpaceAfter=No
15 。 。 PUNCT _ _ 13 punct _ SpaceAfter=No
39
40. GiNZA - 今後の展開
•GiNZA v2.1 (近日公開)
• Bug fix + CaboCha互換出力モード
•GiNZA v3.0 - Ametrine
• 高速化されたSudachiPy新バージョンへの移行
• 固有表現抽出モデルの強化
•spaCy公式言語モデルの提供
• GiNZAの機能のサブセットをspaCyのmasterブランチに統合
• UD_BCCWJ-GSDの非NC化(現状はCC BY-NC-SA)を待ってリリース予定
• 課題: GSDコーパスへの固有表現タグ付与
40