チャンキングと情報抽出
チャンキングとは何ですか?
自然言語処理の重要なプロセスの1つであるチャンキングは、品詞(POS)と短いフレーズを識別するために使用されます。言い換えれば、チャンクを使用すると、文の構造を取得できます。とも呼ばれますpartial parsing。
チャンクパターンとチンク
Chunk patternsチャンクを構成する単語の種類を定義する品詞(POS)タグのパターンです。変更された正規表現を使用してチャンクパターンを定義できます。
さらに、どのような種類の単語をチャンクに含めるべきではないかについてのパターンを定義することもできます。これらのアンチャンクされた単語は、 chinks。
実装例
以下の例では、文を解析した結果とともに “the book has many chapters”, チャンクとチンクパターンの両方を組み合わせた名詞句の文法があります-
import nltk
sentence = [
("the", "DT"),
("book", "NN"),
("has","VBZ"),
("many","JJ"),
("chapters","NNS")
]
chunker = nltk.RegexpParser(
r'''
NP:{<DT><NN.*><.*>*<NN.*>}
}<VB.*>{
'''
)
chunker.parse(sentence)
Output = chunker.parse(sentence)
Output.draw()
出力
上記のように、チャンクを指定するためのパターンは、次のように中括弧を使用することです。
{<DT><NN>}
そして、チンクを指定するには、次のように中括弧を反転します。
}<VB>{.
現在、特定のフレーズタイプについて、これらのルールを組み合わせて文法を作成できます。
情報抽出
情報抽出エンジンの構築に使用できるタガーとパーサーを確認しました。基本的な情報抽出パイプラインを見てみましょう-
情報抽出には、以下を含む多くのアプリケーションがあります。
- ビジネス・インテリジェンス
- 収穫を再開する
- メディア分析
- 感情の検出
- 特許検索
- メールスキャン
固有表現抽出(NER)
固有表現抽出(NER)は、実際には、名前、組織、場所などの最も一般的なエンティティのいくつかを抽出する方法です。文のトークン化、POSタグ付け、チャンク化、NER、などのすべての前処理ステップを実行した例を見てみましょう。上の図に示されているパイプラインに従います。
例
Import nltk
file = open (
# provide here the absolute path for the file of text for which we want NER
)
data_text = file.read()
sentences = nltk.sent_tokenize(data_text)
tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
tagged_sentences = [nltk.pos_tag(sentence) for sentence in tokenized_sentences]
for sent in tagged_sentences:
print nltk.ne_chunk(sent)
変更された名前付きエンティティ認識(NER)の一部は、製品名、生物医学エンティティ、ブランド名などのエンティティを抽出するためにも使用できます。
関係の抽出
別の一般的に使用される情報抽出操作である関係抽出は、さまざまなエンティティ間のさまざまな関係を抽出するプロセスです。継承、同義語、類似などのさまざまな関係が存在する可能性があり、その定義は情報の必要性によって異なります。たとえば、本の執筆を探したい場合、著者は著者名と本名の関係になります。
例
次の例では、上の図に示すように、名前付きエンティティ関係(NER)まで使用したものと同じIEパイプラインを使用し、NERタグに基づく関係パターンで拡張します。
import nltk
import re
IN = re.compile(r'.*\bin\b(?!\b.+ing)')
for doc in nltk.corpus.ieer.parsed_docs('NYT_19980315'):
for rel in nltk.sem.extract_rels('ORG', 'LOC', doc, corpus = 'ieer',
pattern = IN):
print(nltk.sem.rtuple(rel))
出力
[ORG: 'WHYY'] 'in' [LOC: 'Philadelphia']
[ORG: 'McGlashan & Sarrail'] 'firm in' [LOC: 'San Mateo']
[ORG: 'Freedom Forum'] 'in' [LOC: 'Arlington']
[ORG: 'Brookings Institution'] ', the research group in' [LOC: 'Washington']
[ORG: 'Idealab'] ', a self-described business incubator based in' [LOC: 'Los Angeles']
[ORG: 'Open Text'] ', based in' [LOC: 'Waterloo']
[ORG: 'WGBH'] 'in' [LOC: 'Boston']
[ORG: 'Bastille Opera'] 'in' [LOC: 'Paris']
[ORG: 'Omnicom'] 'in' [LOC: 'New York']
[ORG: 'DDB Needham'] 'in' [LOC: 'New York']
[ORG: 'Kaplan Thaler Group'] 'in' [LOC: 'New York']
[ORG: 'BBDO South'] 'in' [LOC: 'Atlanta']
[ORG: 'Georgia-Pacific'] 'in' [LOC: 'Atlanta']
上記のコードでは、ieerという名前の組み込みコーパスを使用しています。このコーパスでは、名前付きエンティティ関係(NER)まで文にタグが付けられます。ここでは、必要な関係パターンと、関係で定義するNERの種類を指定するだけで済みます。この例では、組織と場所の間の関係を定義しました。これらのパターンのすべての組み合わせを抽出しました。