web-dev-qa-db-ja.com

spaCyの品詞タグと依存関係タグの意味は何ですか?

spaCyは、Tokenの各Documentsを品詞でタグ付けします(2つの異なる形式で、1つはposTokenおよび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_プロパティの可能な値とは何ですか?

30
Mark Amery

品詞トークン

現在、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

リストは次のとおりです。

ただし、spaCyの parts of speech モジュールから、3つの追加のPOS定数EOLNO_TAG、およびSPACEがこのスキーマを拡張していることがわかります。これらはUniversal POSの一部ではありませんタグセット。これらの:

  • ソースコードの検索 から、EOLが使用されるとは思わないが、よくわからない
  • NO_TAGはエラーコードです。インストールしていないモデルで文を解析しようとすると、すべてのTokensにこの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:Dative
  • DEP:未分類の依存
  • 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の仕事にリストまたは例示されていませんが、少し古くなっていますが、有用なリソースのままです。)

72
Mark Amery

短い形式の詳細な意味を理解するための簡単なヒント。次のようなexplainメソッドを使用できます。

spacy.explain('pobj')

次のような出力が得られます。

'object of preposition'
16
Nuhil Mehdy

公式ドキュメントでは、これらすべての注釈の詳細が https://spacy.io/api/annotation で詳細に提供されています(トークンのその他の属性のリストは https: //spacy.io/api/token )。

ドキュメントに示されているように、品詞(POS)および依存関係タグには、さまざまな言語に対してユニバーサルバリエーションと特定バリエーションの両方があり、explain()関数はタグの意味をよりよく説明するための非常に便利なショートカットですドキュメントなし、例えば.

spacy.explain("VBD")

「動詞、過去形」を与えます。

2
Silveri

現在、SpaCyの依存関係の解析とタグ付けは、フレーズ(名詞句以外)または句レベルではなく、Wordレベルでのみ実装されているようです。これは、SpaCyを使用して名詞(NN、NNS)、形容詞(JJ、JJR、JJS)、動詞(VB、VBD、VBGなど)を識別できるが、形容詞句(ADJP)、副詞句( ADVP)、または質問(SBARQ、SQ)。

たとえば、SpaCyを使用して「バスはどの方向に向かっていますか?」という文を解析すると、 次のツリー が得られます。

対照的に、Stanfordパーサーを使用すると、 はるかに深く構造化された構文ツリー が得られます。

2
rebeccabilbro