Natural-language-toolkit-more-natural-language-toolkit-taggers
その他の自然言語ツールキットタガー
付加タガー
ContextTaggerサブクラスのもう1つの重要なクラスは、AffixTaggerです。 AffixTaggerクラスでは、コンテキストは単語の接頭辞または接尾辞です。 これが、AffixTaggerクラスが単語の最初または最後の固定長の部分文字列に基づいてタグを学習できる理由です。
それはどのように機能しますか?
その動作は、接頭辞または接尾辞の長さを指定するaffix_lengthという名前の引数に依存します。 デフォルト値は3です。 しかし、AffixTaggerクラスが単語のプレフィックスまたはサフィックスを学習したかどうかをどのように区別しますか?
- affix_length = positive -affix_lenghtの値が正の場合、AffixTaggerクラスが単語の接頭辞を学習することを意味します。
- affix_length = negative -affix_lenghtの値が負の場合、AffixTaggerクラスが単語のサフィックスを学習することを意味します。
わかりやすくするために、以下の例では、タグ付きツリーバンク文でAffixTaggerクラスを使用します。
例
この例では、affix_length引数に値を指定していないため、AffixTaggerは単語のプレフィックスを学習します。 引数はデフォルト値3になります-
出力
次の例で、affix_length引数に値4を指定した場合の精度を見てみましょう-
出力
例
この例では、affix_length引数に負の値を指定するため、AffixTaggerは単語のサフィックスを学習します。
出力
ブリルタガー
ブリルタガーは変換ベースのタガーです。 NLTKは、 SequentialBackoffTagger のサブクラスではない最初のタガーである BrillTagger クラスを提供します。 それとは逆に、最初のタガーの結果を修正する一連のルールが BrillTagger によって使用されます。
それはどのように機能しますか?
- def train_brill_tagger(initial_tagger、train_sentences、** kwargs) *−
ご覧のとおり、この関数には initial_tagger と train_sentences が必要です。 initial_tagger 引数と、 BrillTemplate インターフェースを実装するテンプレートのリストを受け取ります。 BrillTemplate インターフェースは nltk.tbl.template モジュールにあります。 そのような実装の1つは brill.Template クラスです。
変換ベースのタガーの主な役割は、初期のタガーの出力をトレーニング文により一致するように修正する変換ルールを生成することです。 以下のワークフローを見てみましょう-
例
この例では、 NgramTagger クラスのバックオフチェーンからタガーを(前のレシピで)コーミングするときに作成した combine_tagger を initial_tagger として使用します。 まず、 Combine.tagger を使用して結果を評価し、次にそれを initial_tagger として使用してブリルタガーをトレーニングします。
出力
では、 Combine_tagger を initial_tagger として使用してブリルタガーをトレーニングした場合の評価結果を見てみましょう-
出力
完全な実装例
出力
TnTタガー
TnT Tagger(Trigram’snTagsの略)は、2次マルコフモデルに基づく統計タガーです。
それはどのように機能しますか?
私たちは次のステップの助けを借りてTnTタガーの働きを理解することができます-
- 最初にトレーニングデータに基づいて、TnTテガーはいくつかの内部 FreqDist および ConditionalFreqDist インスタンスを維持します。
- その後、ユニグラム、バイグラム、トリグラムは、これらの頻度分布によってカウントされます。
- これで、タグ付け中に頻度を使用して、単語ごとに可能なタグの確率を計算します。
そのため、NgramTaggerのバックオフチェーンを構築する代わりに、すべてのngramモデルを一緒に使用して、各単語に最適なタグを選択します。 次の例でTnTタガーを使用して精度を評価しましょう-
出力
Brill Taggerを使用した場合よりも精度が少し低くなります。
- train()を evaluate()*の前に呼び出す必要があることに注意してください。そうしないと、精度が0%になります。