我刚开始使用NLP(自然语言处理)并努力理解一个重要的概念。如何在未来投入上培养关系抽取系统?
例如,我有几行:
Tom正在为abc公司工作
Jerry在xyz工作
在所有这些情况下,关系船是关系船类型“工作”的“人”“组织”
基于上面的例子和一些NLP读数,我认为我们需要训练基于词性标记的系统而不是真实的“实体名称”,以使其在字段中对其他输入数据通用。这是我真的很困惑的部分。
请不要简单地指出一些算法(SVM等),因为我知道它们是可能的,但是我错过了算法如何处理这些行来处理其他输入的细节。我直接看到的所有例子都提供了模型并告诉我们使用它们,因此我无法构建我想要的东西。
关于算法(任何示例算法都是Ok)如何使用上述句子来构建训练模型的任何示例都将非常有用。
感谢您的时间和帮助。
注意:标签部分中指定的任何一种编程语言对我来说都是好的。
答案 0 :(得分:2)
你是对的。有这么多的单词,简单地使用这个词实际上不会让你开发出一个好的模型。您需要降低维度。正如您所建议的那样,一种方法是采取词性。当然,您还可以提取其他功能。例如,我的一个.arff文件中的以下一小部分用于确定句子中的句点是否标记为结束:
@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
编辑(基于问题): 所以,这是一个有监督的学习实验。训练数据来自段落样式格式的普通句子,但转换为以下矢量模型:
当然,这不是一个非常复杂的问题需要解决,但它对Weka来说是一个不错的小介绍。由于我们不能只使用单词作为功能,我使用了他们的POS标签。我还提取了单词的长度,无论单词是否大写等等。
因此,只要您能够将其转换为上面的矢量模型并提取.arff中使用的功能,您就可以将任何内容作为测试数据提供。