Gitterは開発者向けのチャットルームです。
nlpnet ---ニューラルネットワークを使用した自然言語処理nlpnetは、ニューラルネットワークに基づいた自然言語処理タスクのPythonライブラリです。現在、一部のスピーチタグ付け、セマンティックロールラベル付け、依存関係解析を実行しています。アーキテクチャのほとんどは言語に依存しませんが、一部の機能はポルトガル人との協力に特別に調整されていました。このシステムはセナに触発されました。
重要:ポルトガルのNLPの訓練されたモデルを使用するには、http://nilc.icmc.usp.br/nlpnet/models.htmlからデータをダウンロードする必要があります。
nlpnetにはNLTKとnumpyが必要です。さらに、NLTKからデータをダウンロードする必要があります。インストールした後、電話してください
>>> nltk.download()
[モデル]タブに移動し、[Punktトークネイザー]を選択します。テキストを文に分割するために使用されます。
Cythonは、C拡張を生成し、より速く実行するために使用されます。生成された.cファイルには既にNLPNETが提供されているため、おそらく必要ないでしょうが、Cコンパイラが必要になります。 LinuxおよびMacシステムでは、これは問題ではありませんが、Windowsにある可能性があります。SetUpToolsにはデフォルトでMicrosoft Cコンパイラが必要です。まだ持っていない場合は、通常、MINGWを代わりにインストールして、ここで指示に従う方が簡単です。
nlpnet 、Pythonライブラリとして、またはそのスタンドアロンスクリプトの両方として使用できます。両方の使用法を以下で説明します。
次のように、 nlpnet Pythonコードのライブラリとして使用できます。
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]]上記の例では、 POSTaggerコンストラクターは、訓練されたモデルが配置されているディレクトリを最初の引数として受け取ります。 2番目の引数は、2文字の言語コードです(現在、ONLE ptおよびenサポートされています)。これはトークン化にのみ影響を及ぼします。
注釈ツールを呼び出すのは非常に簡単です。提供されたものは、 POSTagger 、 SRLTagger 、およびDependencyParserであり、それらはすべてタグ付けするテキストのある文字列を受信するメソッドtagを持っています( DependencyParserには、より適切に聞こえるメソッドparseにはエイリアスがあります)。タグガーはテキストを文に分割し、それぞれをトークン化します(したがって、ポストアガーの返品はリストのリストです)。
srltaggerの出力は少し複雑です:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
タプルのリストの代わりに、文はSRLAnnotatedSentenceの事例で表されます。このクラスは基本的にデータホルダーとして機能し、2つの属性があります。
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
arg_structures 、文のすべての述語積分構造を含むリストです。この例の唯一のものは、動詞Roeu用です。これは、表現を構成するトークンへの述語と辞書マッピングセマンティックロールラベルを備えたタプルで表されます。
動詞は、タプルの最初のメンバーとして、またラベル「V」(動詞を表す)の内容として表示されることに注意してください。これは、一部の述語がマルチワードであるためです。これらの場合、「メイン」述語(通常は動詞自体)がarg_structures[0]に表示され、すべての単語がキー「V」の下に表示されます。
依存関係者の例は次のとおりです。
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
parsedSentenceオブジェクトのto_conll()メソッドは、それらをconll表記に印刷します。トークン、ラベル、ヘッドインデックスには、メンバー変数を介してアクセスできます。
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
headsメンバー変数はnumpy配列です。配列内のi番目の位置には、-1のルートトークンを除き、i番目のトークンのヘッドのインデックスが含まれています。これらのインデックスは0ベースであり、 to_conll()関数に示されているインデックスは1ベースであることに注意してください。
nlpnet 、テキストのタグ付け、新しいモデルのトレーニング、テスト用のスクリプトも提供します。これらは、System Path変数に含めることができるPythonインストールのスクリプトサブディレクトリにコピーされます。コマンドラインから呼び出して、テキスト入力を与えることができます。
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU --dataが指定されていない場合、スクリプトは現在のディレクトリでトレーニングされたモデルを検索します。 --langデフォルトはenにデフォルトです。すでにトークン化されたテキストがある場合は、 -tオプションを使用できます。トークンが空白で分離されていると想定しています。
セマンティックロールラベル付き:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeu最初の行はユーザーによって入力され、2番目の行はトークン化の結果です。
依存関係解析:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 P新しいモデルのトレーニングとテスト、およびその他の機能の詳細については、http://nilc.icmc.usp.br/nlpnetのドキュメントを参照してください。
次の参考文献は、NLPNETの設計と実施された実験について説明しています。コードのいくつかの改善は、彼らの公開以来実装されてきました。