この記事について
「研究開発型スタートアップと事業会社のオープンイノベーション促進のためのモデル契約書ver1.0」の改訂に向けた、GitHub(ギットハブ)を用いた意見募集
(https://github.com/meti-oi-startups/METI-JPO-Model-Contract)
のモデル契約書ver1.0 秘密保持契約書(新素材)の前文に、日本語NLPライブラリGiNZAにより、形態素解析を行ってみました。
前提
windows10
pyhton3.8.10
Visual Studio Code
Ginzaについて
https://www.recruit.co.jp/newsroom/pdf/20190402_01.pdf
2019年04月02日株式会社リクルート Ginzaの概要
「GiNZA」は、ワンステップでの導入、高速・高精度な解析処理、単語依存構造解析レベルの国際化対応などの特長を備えた日本語自然言語処理オープンソースライブラリです。「GiNZA」は、最先端の機械学習技術を取り入れた自然言語処理ライブラリ「spaCy」※5)をフレームワークとして利用しており、また、オープンソース形態素解析器「SudachiPy」(※6)を内部に組み込み、トークン化処理に利用しています。「GiNZA日本語UDモデル」にはMegagon Labsと国立国語研究所の共同研究成果が組み込まれています。「GiNZA」の主な特長は以下のとおりです。
▼「GiNZA」の主な特長
①高度な自然言語処理をワンステップで導入完了
これまで、高度な自然言語処理を行うためには複雑な導入作業が必要でしたが、「GiNZA」はワンステップでモジュールとモデルファイルの導入を完了できます。これにより、エンジニアは即座に解析が可能です。
②高速・高精度な解析処理と依存構造解析レベルの国際化に対応
産業用途で自然言語処理技術を活用するには、一定の処理速度を保ちながら解析精度を高めるためにチューニングを行うことが一般的です。「GiNZA」は、「spaCy」が提供する高速・高精度な依存構造解析器を使用して、産業用途に耐える性能を備えた高度な自然言語処理機能をライブラリとして提供します。同時に、「spaCy」の国際化機能により、複数の欧米言語と日本語の言語リソースを切り替えて使用することが可能となり、エンジニアは複数言語の解析を単一のライブラリで行うことができます。
③国立国語研究所との共同研究成果の学習モデルを提供
自然言語処理系の学会を中心に、人類が用いる多様な言語を、一貫した構文構造・品詞体系で解析可能にする「UniversalDependencies」の取組みが、2014年から全世界で始まっています。日本においても当初からUDの日本語への適用に関する研究と日本語版UDコーパス(データ)構築が同時に進められてきました。Megagon Labsは、国立国語研究所と共同で、日本
語版UDに基づいた高精度な依存構造解析技術の研究を行い、その成果である学習済みモデルを「GiNZA日本語UDモデル」に組み込みました。
「GiNZA日本語UDモデル」は、国立国語研究所が長年の研究を通じて蓄積してきた大規模かつ高品質なテキストコーパスに加えて、日本語Wikipediaテキストも同時に用いて機械学習に適用することで、幅広い分野に適応可能なモデルを構築しています。
実行
Ginzaの環境構築については、下の記事を参考にしました。
日本語NLPライブラリGiNZAのすゝめ
https://qiita.com/poyo46/items/7a4965455a8a2b2d2971
コード
対象テキストを変えただけです。
日本語NLPライブラリGiNZAのすゝめ
ソースコードをGitHubで見る
https://qiita.com/yusa87/items/e25e2dcfb1b01fde13a4
import sys
from typing import List
from pprint import pprint
import spacy
import ginza
nlp = spacy.load('ja_ginza')
def tokenize(text: str) -> List[List[str]]:
"""
日本語文を形態素解析する。
Parameters
----------
text : str
解析対象の日本語テキスト。
Returns
-------
List[List[str]]
形態素解析結果。
Notes
-----
* Token 属性の詳細については次のリンク先をご覧ください。
https://spacy.io/api/token#attributes
* Token.lemma_ の値は SudachiPy の Morpheme.dictionary_form() です。
* Token.ent_type_ の詳細については次のリンク先をご覧ください。
http://liat-aip.sakura.ne.jp/ene/ene8/definition_jp/html/enedetail.html
"""
doc = nlp(text)
attrs_list = []
for token in doc:
token_attrs = [
token.i, # トークン番号
token.text, # テキスト
token.lemma_, # 基本形
ginza.reading_form(token), # 読みカナ
token.pos_, # 品詞
token.tag_, # 品詞詳細
ginza.inflection(token), # 活用情報
token.ent_type_ # 固有表現
]
attrs_list.append([str(a) for a in token_attrs])
return attrs_list
EXAMPLE_TEXT = 'X社(以下「甲」という。)とY社(以下「乙」という。)とは、甲が開発した放熱特性を有する新規素材αを自動車用ヘッドライトカバーに用いた新製品の開発を行うか否かを甲乙共同で検討するに当たり(以下「本目的」という。)、甲または乙が相手方に開示等する秘密情報の取扱いについて、以下のとおりの秘密保持契約(以下「本契約」という。)を締結する。'
EXAMPLE_SCRIPT = f'python examples/token_information.py {EXAMPLE_TEXT}'
ATTRS = [
'i', 'text', 'lemma_', 'reading_form', 'pos_', 'tag_',
'inflection', 'ent_type_'
]
if __name__ == '__main__':
if len(sys.argv) > 1:
input_text = sys.argv[1]
pprint(tokenize(input_text))
else:
print('Please run as follows: \n$ ' + EXAMPLE_SCRIPT)
実行(Visual Studio Codeのターミナル内)
python examples/token_information.py X社(以下「甲」という。)とY社(以下「乙」という。)とは、甲が開発した放熱特性を有する新規素材αを自動車用ヘッドライトカバーに用いた新製品の開発を行うか否かを甲乙共同で検討するに当たり(以下「本目的」という。)、甲または乙が相手方に開示等する秘密情報の取扱いについて、以下のとおりの秘密保持契約(以下「本契約」という。)を締結する。
結果