2

私は NLP (自然言語処理) を始めたばかりで、1 つの重要な概念を理解するのに苦労しています。将来の入力に対する関係抽出のためにシステムをトレーニングする方法は?

たとえば、次のような行がいくつかあります。

  • トムはabc社で働いています

  • ジェリーは xyz で働いています

  • 組織は、人が働く場所です。

これらすべてのケースで、関係シップは「人」「組織」であり、関係シップ タイプは「勤務先」です。

上記の例といくつかの NLP の読みに基づいて、実際の「エンティティ名」ではなく品詞タグに基づいてシステムをトレーニングし、フィールド内の他の入力データに対して汎用的にする必要があると思います。これは私が本当に混乱している部分です。

単純にいくつかのアルゴリズム (SVM など) を指摘しないでください。それらで可能であることはわかっていますが、アルゴリズムがこれらの行を処理して他の入力を処理する方法の詳細が不足しています。私が見るすべての例は、モデルを直接提供し、それらを使用するように指示します。

アルゴリズム (アルゴリズムの例はどれでも OK) が上記の文を使用してトレーニング モデルを構築する方法の例は、非常に役立ちます。

お時間をいただき、ありがとうございました。

注: タグ セクションで指定されているプログラミング言語はどれでも構いません。

4

1 に答える 1

2

あなたは正しいです。非常に多くの単語があり、その単語を単に使用するだけでは、実際には適切なモデルを開発できません。次元を減らす必要があります。あなたが提案したように、それを行う1つの方法は、スピーチの一部を取ることです。もちろん、抽出できる機能は他にもあります。たとえば、私の .arff ファイルの 1 つの次の非常に小さな部分は、文のピリオドが文の終わりを示しているかどうかを判断するために使用されました。

@relation period

@attribute minus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'}
@attribute minus_three_length real
@attribute minus_three_case {'UC','LC','NA'}
@attribute minus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'}
@attribute minus_two_length real
@attribute minus_two_case {'UC','LC','NA'}
@attribute minus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'}
@attribute minus_one_length real
@attribute minus_one_case {'UC','LC','NA'}
@attribute plus_one {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'}
@attribute plus_one_length real
@attribute plus_one_case {'UC','LC','NA'}
@attribute plus_two {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'}
@attribute plus_two_length real
@attribute plus_two_case {'UC','LC','NA'}
@attribute plus_three {'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'}
@attribute plus_three_length real
@attribute plus_three_case {'UC','LC','NA'}
@attribute left_before_reliable real
@attribute right_before_reliable real
@attribute spaces_follow_period real
@attribute class  {'EOS','NEOS'}

@data

VBP, 2, LC,NP, 4, UC,NN, 1, UC,NP, 6, UC,NEND, 1, NA,NN, 7, LC,31,47,1,NEOS
NNS, 10, LC,RBR, 4, LC,VBN, 5, LC,?, 3, NA,NP, 6, UC,NP, 6, UC,93,0,0,EOS
VBD, 4, LC,RB, 2, LC,RP, 4, LC,CC, 3, UC,UH, 5, LC,VBP, 2, LC,19,17,2,EOS

編集(質問に基づく):つまり、これは教師あり学習実験でした。トレーニング データは、段落スタイル形式の通常の文から取得されましたが、次のベクター モデルに変換されました。

  • 列 1: クラス: 文末または非文末
  • 列 2 ~ 8: 問題の期間を囲む +/- 3 単語
  • 列 9、10: 次の信頼できる文の区切り記号 (?、!、段落記号など) の前のピリオドの左/右のそれぞれの単語数。
  • 列 11: ピリオドに続くスペースの数。

もちろん、これは解決するのにそれほど複雑な問題ではありませんが、Weka の簡単な紹介です。言葉だけでは特徴として使えないので、POSタグを使いました。また、単語が大文字であるかどうかなど、単語の長さを抽出しました。

したがって、上記のベクトル モデルに変換し、.arff で使用されている機能を抽出できる限り、テスト データとして何でもフィードできます。

于 2013-05-11T06:09:02.673 に答える