web-dev-qa-db-ja.com

カスタムデータを使用したNLTK名前付きエンティティの認識

NLTKを使用して、テキストから名前付きエンティティを抽出しようとしています。 NLTK NERは私の目的にとってあまり正確ではないことがわかりました。自分のタグをさらに追加したいと思います。私は自分のNERを訓練する方法を探していましたが、適切なリソースを見つけることができないようです。 NLTK-に関していくつか質問があります

  1. NLTKでNamed Entity Recognizerをトレーニングするために自分のデータを使用できますか?
  2. 自分のデータを使用してトレーニングできる場合、named_entity.pyは変更するファイルですか?
  3. 入力ファイル形式はIOBである必要がありますか。エリックNNP B-PERSON?
  4. Nltkクックブックとnlp以外にpythonを使用できるリソースがありますか?

この点で本当に助かります

47
user1502248

NLTK/Pythonの使用にコミットしていますか?私はあなたと同じ問題に遭遇し、スタンフォード大学の名前付きエンティティレコグナイザーを使用して、はるかに良い結果を得ました: http://nlp.stanford.edu/software/CRF-NER.shtml 。独自のデータを使用して分類子をトレーニングするプロセスは、FAQで非常によく文書化されています。

本当にNLTKを使用する必要がある場合は、他のユーザーからのアドバイスを得るためにメーリングリストにアクセスします: http://groups.google.com/group/nltk-users

お役に立てれば!

24
jjdubs

スタンフォードNERとnltkを簡単に使用できます。 pythonスクリプトは

from nltk.tag.stanford import NERTagger
import os
Java_path = "/Java/jdk1.8.0_45/bin/Java.exe"
os.environ['JAVAHOME'] = Java_path
st = NERTagger('../ner-model.ser.gz','../stanford-ner.jar')
tagging = st.tag(text.split())   

独自のデータをトレーニングしてモデルを作成するには、Stanford NER FAQの最初の質問を参照してください。

リンクは http://nlp.stanford.edu/software/crf-faq.shtml

14
Rohan Amrute

nltk.chunk.named_entity モジュールには、NERタガーをトレーニングする関数がいくつかあります。ただし、ACEコーパス用に特別に作成されており、完全にクリーンアップされているわけではないため、それらを参照として独自のトレーニング手順を作成する必要があります。

また、比較的最近の2つのガイド( 12 )があり、NLTKを使用してGMBコーパスをトレーニングするプロセスをオンラインで詳しく説明しています。

ただし、上記の回答で述べたように、多くのツールが利用できるようになったため、合理化されたトレーニングプロセスが必要な場合、NLTKに頼る必要はありません。 CoreNLPやspaCyなどのツールキットは、はるかに優れた仕事をします。 NLTKを使用することは、最初から独自のトレーニングコードを記述することとそれほど変わらないので、そうすることにそれほど価値はありません。 NLTKとOpenNLPは、NLPの最近の進歩が爆発する前の過去の時代に何らかの形で属していると見なすことができます。

1
xji

私もこの問題を抱えていましたが、どうにか解決しました。独自のトレーニングデータを使用できます。 github repository でこれに関する主な要件/手順を文書化しました。

NLTK-trainer を使用したため、基本的には正しい形式(トークンNNP Bタグ)でトレーニングデータを取得し、トレーニングスクリプトを実行する必要があります。詳細については、リポジトリを確認してください。

1
arop