品詞(POS)タグ付けの基本
POSタグ付けとは何ですか?
分類の一種であるタグ付けは、トークンの説明の自動割り当てです。記述子を「タグ」と呼びます。これは、品詞(名詞、動詞、副詞、形容詞、代名詞、接続詞とそのサブカテゴリ)、意味情報などの1つを表します。
一方、品詞(POS)のタグ付けについて話す場合、それは単語のリストの形式の文をタプルのリストに変換するプロセスとして定義される場合があります。ここで、タプルは(word、tag)の形式です。品詞の1つを特定の単語に割り当てるプロセスをPOSタグ付けと呼ぶこともできます。
次の表は、ペンツリーバンクコーパスで使用される最も頻繁なPOS通知を表しています。
シニア番号 | 鬼ごっこ | 説明 |
---|---|---|
1 | NNP | 固有名詞、単数 |
2 | NNPS | 固有名詞、複数形 |
3 | PDT | 事前限定詞 |
4 | POS | 所有格エンディング |
5 | PRP | 人称代名詞 |
6 | PRP $ | 所有代名詞 |
7 | RB | 副詞 |
8 | RBR | 副詞、比較級 |
9 | RBS | 副詞、最上級 |
10 | RP | 粒子 |
11 | SYM | 記号(数学または科学) |
12 | に | に |
13 | ええと | 間投詞 |
14 | VB | 動詞、基本形 |
15 | VBD | 動詞、過去形 |
16 | VBG | 動詞、動名詞/現在分詞 |
17 | VBN | 動詞、過去 |
18 | WP | Wh-代名詞 |
19 | WP $ | 所有格wh-代名詞 |
20 | WRB | Wh-副詞 |
21 | # | ポンド記号 |
22 | $ | ドル記号 |
23 | 。 | 文-最後の句読点 |
24 | 、 | コンマ |
25 | : | コロン、セミコロン |
26 | (( | 左角かっこ文字 |
27 | ) | 右角かっこ文字 |
28 | 「」 | ストレート二重引用符 |
29 | ' | 開いたままの一重引用符 |
30 | 「」 | 開いたままの二重引用符 |
31 | ' | 一重引用符を右閉じる |
32 | 「」 | 右開きの二重引用符 |
例
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の重要な部分です。
- Chunking
- 構文解析
- 情報抽出
- 機械翻訳
- 感情分析
- 文法分析と語義の曖昧性解消
TaggerI-基本クラス
すべてのタガーはNLTKのnltk.tagパッケージにあります。これらのタガーの基本クラスはTaggerI、は、すべてのタガーがこのクラスから継承することを意味します。
Methods − TaggerIクラスには、すべてのサブクラスで実装する必要がある次の2つのメソッドがあります。
tag() method −名前が示すように、このメソッドは入力として単語のリストを受け取り、出力としてタグ付けされた単語のリストを返します。
evaluate() method −この方法を使用すると、タガーの精度を評価できます。
POSタグ付けのベースライン
POSタグ付けのベースラインまたは基本ステップは次のとおりです。 Default Tagging、NLTKのDefaultTaggerクラスを使用して実行できます。デフォルトのタグ付けは、すべてのトークンに同じPOSタグを割り当てるだけです。デフォルトのタグ付けは、精度の向上を測定するためのベースラインも提供します。
DefaultTaggerクラス
デフォルトのタグ付けは、を使用して実行されます DefaultTagging クラス。単一の引数、つまり適用するタグを取ります。
それはどのように機能しますか?
前に述べたように、すべてのタガーはから継承されます TaggerIクラス。ザ・DefaultTagger から継承されます SequentialBackoffTagger これはのサブクラスです TaggerI class。次の図で理解しましょう-
の一部として 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 すべてのタグについて、1000エントリの約13%の精度テストを達成できます。 treebank コーパス。
文のリストにタグを付ける
NLTKは、1つの文にタグを付けるのではなく、 TaggerI クラスはまた私達に提供します 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']