spaCyは、Token
の各Document
sを品詞でタグ付けします(2つの異なる形式で、1つはpos
のToken
およびpos_
プロパティに保存され、もう1つはtag
およびtag_
プロパティに保存されます) )およびその.head
トークン(dep
およびdep_
プロパティに格納されている)への構文上の依存関係。
これらのタグのいくつかは、言語学の背景のない私のような人にとっても、一目瞭然です。
>>> import spacy
>>> en_nlp = spacy.load('en')
>>> document = en_nlp("I shot a man in Reno just to watch him die.")
>>> document[1]
shot
>>> document[1].pos_
'VERB'
その他...ではありません:
>>> document[1].tag_
'VBD'
>>> document[2].pos_
'DET'
>>> document[3].dep_
'dobj'
さらに悪いことに、 official docs には、これらのプロパティのほとんどの可能なタグのリストも、それらのいずれの意味も含まれていません。彼らは時々、使用するトークン化標準について言及しますが、これらの主張は現在完全に正確ではなく、その上、標準を追跡するのは難しいです。
tag_
、pos_
、およびdep_
プロパティの可能な値とは何ですか?
現在、spaCyドキュメントは次のように主張しています:
品詞タガーは、ペンツリーバンクタグセットのOntoNotes 5バージョンを使用します。また、タグをよりシンプルなGoogle Universal POSタグセットにマッピングします。
より正確には、.tag_
プロパティはTreebankタグを公開し、pos_
プロパティは Google Universal POS Tags に基づいてタグを公開します(spaCyはリストを拡張します)。
spaCyのドキュメントは、自分のモデルをトレーニングするのではなく、結果を愚かにしたいだけのユーザーはtag_
属性を無視し、pos_
のみを使用することを推奨しているようです tag_
属性...
主に後続のモデル、特に構文パーサーに適した機能になるように設計されています。それらは言語とツリーバンクに依存しています。
つまり、spaCyが新しい treebank でトレーニングされた改良モデルをリリースした場合、tag_
属性は以前とは異なる値を持つ可能性があります。これは、バージョンのアップグレード全体で一貫したAPIを必要とするユーザーにとって明らかに役に立たないものになります。ただし、現在のタグはPenn Treebankのバリアントであるため、次のように、Penn Treebank POSタグのドキュメントで説明されているセットとほとんど交差する可能性があります。 https://www.ling.upenn.edu /courses/Fall_2003/ling001/penn_treebank_pos.html
より便利なpos_
タグは
トークンのWordクラスを表す、粒度の粗いタグ
googleユニバーサルPOSタグセットに基づきます。英語の場合、Universal POS Tagセットのタグのリストはここにあり、それらの定義へのリンクが記載されています: http://universaldependencies.org/en/pos/index.html
リストは次のとおりです。
ADJ
:形容詞ADP
:アポジションADV
:副詞AUX
:補助動詞CONJ
:連動詞DET
:決定子INTJ
:間投詞NOUN
:名詞NUM
:数字PART
:粒子PRON
:代名詞PROPN
:固有名詞PUNCT
:句読点SCONJ
:従属接続詞SYM
:シンボルVERB
:動詞X
:その他ただし、spaCyの parts of speech モジュールから、3つの追加のPOS定数EOL
、NO_TAG
、およびSPACE
がこのスキーマを拡張していることがわかります。これらはUniversal POSの一部ではありませんタグセット。これらの:
EOL
が使用されるとは思わないが、よくわからないNO_TAG
はエラーコードです。インストールしていないモデルで文を解析しようとすると、すべてのToken
sにこのPOSが割り当てられます。たとえば、spaCyのドイツ語モデルはインストールされていません。使用しようとすると、ローカルにこれが表示されます。
>>> import spacy
>>> de_nlp = spacy.load('de')
>>> document = de_nlp('Ich habe meine Lederhosen verloren')
>>> document[0]
Ich
>>> document[0].pos_
''
>>> document[0].pos
0
>>> document[0].pos == spacy.parts_of_speech.NO_TAG
True
>>> document[1].pos == spacy.parts_of_speech.NO_TAG
True
>>> document[2].pos == spacy.parts_of_speech.NO_TAG
True
SPACE
は、単一の通常のASCIIスペース(独自のトークンを取得しない))以外の任意のスペースに使用されます。
>>> document = en_nlp("This\nsentence\thas some weird spaces in\n\n\n\n\t\t it.")
>>> for token in document:
... print('%r (%s)' % (str(token), token.pos_))
...
'This' (DET)
'\n' (SPACE)
'sentence' (NOUN)
'\t' (SPACE)
'has' (VERB)
' ' (SPACE)
'some' (DET)
'weird' (ADJ)
'spaces' (NOUN)
'in' (ADP)
'\n\n\n\n\t\t ' (SPACE)
'it' (PRON)
'.' (PUNCT)
ドキュメントに記載されているように、依存関係タグスキームはClearNLPプロジェクトに基づいています。タグの意味(ClearNLPのバージョン3.2.0、2015年にリリースされ、最新のリリースであり、spaCyが使用するものと思われる)は、 https://github.com/clirで見つけることができます。 /clearnlp-guidelines/blob/master/md/specifications/dependency_labels.md 。そのドキュメントはこれらのトークンをリストしています:
ACL
:名詞の節修飾子ACOMP
:形容補完ADVCL
:副詞句修飾子ADVMOD
:副詞修飾子AGENT
:エージェントAMOD
:形容詞修飾子APPOS
:Appositional修飾子ATTR
:属性AUX
:補助AUXPASS
:補助(パッシブ)CASE
:ケースマーカーCC
:調整接続詞CCOMP
:節補数COMPOUND
:複合修飾子CONJ
:接続詞CSUBJ
:句の件名CSUBJPASS
:節の主題(受動)DATIVE
:DativeDEP
:未分類の依存DET
:決定子DOBJ
:直接オブジェクトEXPL
:letいINTJ
:間投詞MARK
:マーカーMETA
:メタ修飾子NEG
:否定修飾子NOUNMOD
:名義語の修飾子NPMOD
:副詞修飾子としての名詞句NSUBJ
:名義語NSUBJPASS
:名義語(受動)NUMMOD
:数値修飾子OPRD
:オブジェクトの述語PARATAXIS
:パラタクシスPCOMP
:前置詞の補数POBJ
:前置詞のオブジェクトPOSS
:所持修飾子PRECONJ
:事前相関接続詞PREDET
:事前決定PREP
:前置詞修飾子PRT
:粒子PUNCT
:句読点QUANTMOD
:量指定子の修飾子RELCL
:関係節修飾子ROOT
:ルートXCOMP
:節補数を開きますリンクされたClearNLPドキュメントには、上記の各用語の意味の簡単な説明も含まれています。
上記のドキュメントに加えて、これらの依存関係のいくつかのexamplesを実際の文で見たい場合は、2012年のJinho D. Choi:彼の 堅牢性とスケーラビリティのための自然言語処理コンポーネントの最適化 またはhis CLEARスタイルの構成要素から依存関係への変換のガイドライン (以前の論文の一部にすぎないようです)。どちらも、2012年に存在していたすべてのCLEAR依存関係ラベルを、定義と例文とともにリストしています。 (残念なことに、CLEAR依存関係ラベルのセットは2012年以降少し変更されているため、現代のラベルの一部はChoiの仕事にリストまたは例示されていませんが、少し古くなっていますが、有用なリソースのままです。)
短い形式の詳細な意味を理解するための簡単なヒント。次のようなexplain
メソッドを使用できます。
spacy.explain('pobj')
次のような出力が得られます。
'object of preposition'
公式ドキュメントでは、これらすべての注釈の詳細が https://spacy.io/api/annotation で詳細に提供されています(トークンのその他の属性のリストは https: //spacy.io/api/token )。
ドキュメントに示されているように、品詞(POS)および依存関係タグには、さまざまな言語に対してユニバーサルバリエーションと特定バリエーションの両方があり、explain()
関数はタグの意味をよりよく説明するための非常に便利なショートカットですドキュメントなし、例えば.
spacy.explain("VBD")
「動詞、過去形」を与えます。
現在、SpaCyの依存関係の解析とタグ付けは、フレーズ(名詞句以外)または句レベルではなく、Wordレベルでのみ実装されているようです。これは、SpaCyを使用して名詞(NN、NNS)、形容詞(JJ、JJR、JJS)、動詞(VB、VBD、VBGなど)を識別できるが、形容詞句(ADJP)、副詞句( ADVP)、または質問(SBARQ、SQ)。
たとえば、SpaCyを使用して「バスはどの方向に向かっていますか?」という文を解析すると、 次のツリー が得られます。
対照的に、Stanfordパーサーを使用すると、 はるかに深く構造化された構文ツリー が得られます。