Natural-language-toolkit-basics-of-part-of-speech-tagging
品詞(POS)タグ付けの基本
POSタグ付けとは何ですか?
分類の一種であるタグ付けは、トークンの説明の自動割り当てです。 記述子を「タグ」と呼びます。これは、品詞(名詞、動詞、副詞、形容詞、代名詞、接続詞とそのサブカテゴリ)、意味情報などの1つを表します。
一方、品詞(POS)のタグ付けについて言えば、単語のリスト形式の文をタプルのリストに変換するプロセスと定義できます。 ここでは、タプルは(word、tag)の形式です。 また、指定された単語に品詞の1つを割り当てるプロセスにPOSタグを付けることもできます。
次の表は、ペンツリーバンクコーパスで使用される最も頻繁なPOS通知を示しています-
Sr.No | Tag | Description |
---|---|---|
1 | NNP | Proper noun, singular |
2 | NNPS | Proper noun, plural |
3 | PDT | Pre determiner |
4 | POS | Possessive ending |
5 | PRP | Personal pronoun |
6 | PRP$ | Possessive pronoun |
7 | RB | Adverb |
8 | RBR | Adverb, comparative |
9 | RBS | Adverb, superlative |
10 | RP | Particle |
11 | SYM | Symbol (mathematical or scientific) |
12 | TO | to |
13 | UH | Interjection |
14 | VB | Verb, base form |
15 | VBD | Verb, past tense |
16 | VBG | Verb, gerund/present participle |
17 | VBN | Verb, past |
18 | WP | Wh-pronoun |
19 | WP$ | Possessive wh-pronoun |
20 | WRB | Wh-adverb |
21 | # | Pound sign |
22 | $ | Dollar sign |
23 | . | Sentence-final punctuation |
24 | , | Comma |
25 | : | Colon, semi-colon |
26 | ( | Left bracket character |
27 | ) | Right bracket character |
28 | " | Straight double quote |
29 | ' | Left open single quote |
30 | " | Left open double quote |
31 | ' | Right close single quote |
32 | " | Right open double quote |
例
Pythonの実験でそれを理解しましょう-
import nltk
from nltk import word_tokenize
sentence = "I am going to school"
print (nltk.pos_tag(word_tokenize(sentence)))
出力
[('I', 'PRP'), ('am', 'VBP'), ('going', 'VBG'), ('to', 'TO'), ('school', 'NN')]
なぜPOSタグ付けなのか?
POSタグ付けは、NLPの重要な部分です。次のように、NLP分析をさらに進めるための前提条件として機能するためです。
- チャンキング
- 構文解析
- 情報抽出
- 機械翻訳
- 感情分析
- 文法分析と単語の明確化
TaggerI-基本クラス
すべてのタガーは、NLTKのnltk.tagパッケージにあります。 これらのタガーの基本クラスは TaggerI であり、すべてのタガーがこのクラスから継承することを意味します。
メソッド-TaggerIクラスには次の2つのメソッドがあり、すべてのサブクラスで実装する必要があります-
- * tag()メソッド*-名前が示すように、このメソッドは単語のリストを入力として受け取り、タグ付けされた単語のリストを出力として返します。
- * evaluate()メソッド*-このメソッドを使用して、タガーの精度を評価できます。
POSタギングのベースライン
POSタグ付けのベースラインまたは基本ステップは Default Tagging であり、NLTKのDefaultTaggerクラスを使用して実行できます。 デフォルトのタグ付けは、すべてのトークンに同じPOSタグを割り当てるだけです。 デフォルトのタグ付けは、精度の向上を測定するためのベースラインも提供します。
DefaultTaggerクラス
デフォルトのタグ付けは、 DefaultTagging クラスを使用して実行されます。このクラスは、単一の引数、つまり適用するタグを取ります。
それはどのように機能しますか?
前述のとおり、すべてのタガーは TaggerI クラスから継承されます。 DefaultTagger は* TaggerIクラス*のサブクラスである SequentialBackoffTagger から継承されます。 次の図でそれを理解しましょう-
*SeuentialBackoffTagger* の一部であるため、 *DefaultTagger* は次の3つの引数を取るchoose_tag()メソッドを実装する必要があります。
- トークンのリスト
- 現在のトークンのインデックス
- 前のトークンのリスト、つまり履歴
例
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag(['Tutorials','Point'])
出力
[('Tutorials', 'NN'), ('Point', 'NN')]
この例では、最も一般的なタイプの単語であるため、名詞タグを選択しました。 さらに、 DefaultTagger は、最も一般的なPOSタグを選択するときにも最も役立ちます。
精度評価
*DefaultTagger* は、タガーの精度を評価するためのベースラインでもあります。 これが、* evaluate()*メソッドと一緒に使用して精度を測定できる理由です。 * evaluate()*メソッドは、タグ付けされたトークンのリストを、タグ付け機能を評価するためのゴールドスタンダードとして受け取ります。
以下は、上記で作成した exptagger という名前のデフォルトのタガーを使用して、 treebank コーパスのタグ付けされた文のサブセットの精度を評価する例です-
例
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
from nltk.corpus import treebank
testsentences = treebank.tagged_sents() [1000:]
exptagger.evaluate (testsentences)
出力
0.13198749536374715
上記の出力は、すべてのタグに NN を選択することにより、 treebank コーパスの1000エントリで約13%の精度テストを達成できることを示しています。
文のリストにタグを付ける
NLTKの TaggerI クラスは、1つの文にタグを付けるのではなく、* tag_sents()*メソッドを使用して、文のリストにタグを付けることができます。 以下は、2つの単純な文にタグを付けた例です
例
import nltk
from nltk.tag import DefaultTagger
exptagger = DefaultTagger('NN')
exptagger.tag_sents([[Hi', ','], ['How', 'are', 'you', '?']])
出力
[
[
('Hi', 'NN'),
(',', 'NN')
],
[
('How', 'NN'),
('are', 'NN'),
('you', 'NN'),
('?', 'NN')
]
]
上記の例では、以前に作成した exptagger という名前のデフォルトタガーを使用しました。
文のタグ付けを解除する
文のタグ付けを解除することもできます。 NLTKは、この目的のためにnltk.tag.untag()メソッドを提供します。 タグ付きの文を入力として受け取り、タグなしの単語のリストを提供します。 例を見てみましょう-
例
import nltk
from nltk.tag import untag
untag([('Tutorials', 'NN'), ('Point', 'NN')])
出力
['Tutorials', 'Point']