nltkのpos_tagを使用して、一連の(タグなしの)技術文書のテキストにタグを付けて、良い結果を得ていますが、形容詞として使用できる場合は、常に「認証済み」などの単語を動詞としてタグ付けします。つまり、タグを変更するだけでは毎回機能するわけではありません。
コンテキストを考慮したタグ付けの結果をオーバーライドまたは修正する良い方法はありますか?
残念ながら、あなたの質問は「どうすればタグ付けを改善できますか?」に要約されます。答えは、より良いタガーを構築する必要があるということです。重要なタガーはすべてコンテキストを考慮に入れるため、コンテキストの感度を追加するだけの問題ではありません。それはすでにそこにあり、場合によっては失敗しているだけです。
NLTKタグ付けモデルを使用すると、タガーを「チェーン」できるため、それぞれが中断したところから再開できます(たとえば、ngramタガーは不明な単語の正規表現タガーにフォールバックします)。それはこのように動作します:
t0 = nltk.DefaultTagger('N')
t1 = nltk.UnigramTagger(traindata, backoff=t0)
t2 = nltk.BigramTagger(traindata, backoff=t1)
traindata
これは、標準のNLTKフォームですでにタグ付けされているセンテンスのリストです。各センテンスは、フォームのタプルのリストです(word, tag)
。(理由がある場合は、タガーごとに異なるトレーニングコーパスを使用できます。一貫したタグセットを使用することをお勧めします)。たとえば、2文の長いトレーニングコーパスは次のとおりです。
traindata = [ [ ('His', 'PRO'), ('petition', 'N'), ('charged', 'VD'),
('mental', 'ADJ'), ('cruelty', 'N'), ('.', '.') ],
[ ('Two', 'NUM'), ('tax', 'N'), ('revision', 'N'), ('bills', 'N'),
('were', 'V'), ('passed', 'VN'), ('.', '.') ] ]
Tagger t2
(使用するもの)はバイグラムモデルを構築します。不明な入力がt1
見つかった場合は、ユニグラムモデルを使用するにフォールバックします。それも失敗した場合、それは延期されt0
ます(これはすべて「N」にタグを付けるだけです)。
特別な目的のリタガーを追加してデフォルトのタグ付けを改善することもできますが、もちろん、最初にそれを実行する方法を理解する必要があります。もちろん、これは最初に尋ねたものです。
nltkタガーが同じ種類のミスを何度も繰り返す場合は、修正のコーパスをまとめて、それに基づいて再タガーをトレーニングできます。必要なデータの量は、エラーの一貫性によって異なります。私はこれを試したことがありませんが、Brillタガーは再タグ付けルールを連続して適用することで機能するため、おそらくこれが使用するのに適したツールです。
別の方法は、独自のドメイン固有のタグ付きコーパスを作成することです。トレーニングセットにnltkタガーでタグを付け、手動または半自動で修正してから、タガーをトレーニングして、新しいデータでより良いパフォーマンスを得るようにします。デフォルトのnltkタガー(おそらく2つのタガーをチェーン化することによる)。