2013-05-11 188 views
1

我刚开始使用NLP(自然语言处理)并努力理解一个重要的概念。如何训练未来投入关系提取系统?NLP模型训练

例如,我有几行这样的:

  • 汤姆正在为ABC公司

  • 杰里工作在XYZ

  • 组织是哪里人工作的地方。

在所有这些情况下,相对于船是“人”,“组织”有关系船型“工作”

基于上面的例子中,有些NLP的读数,我认为我们需要基于部分训练系统语音标签比真实的“实体名称”更为通用,可以用于其他领域的输入数据。这是我非常困惑的部分。因为我知道它是可能的,但我缺少关于算法如何处理这些行来处理其他输入的细节。请不要简单地将我指向一些算法(SVM等),因为我知道它们可能与他们在一起,但我缺少关于算法如何处理这些行以处理其他输入的细节。我直接看到的所有示例都提供了模型并告诉如何使用它们,因此我无法构建我想要的几件事情。

算法(任何示例算法都可以)如何使用上面的句子来构造训练模型的任何示例都将非常有用。

谢谢你的时间和帮助。

注意:标签中指定的任何一种编程语言都适合我。

+1

我想你需要更清楚你的意思是'NLP'。我猜你的意思是自然语言处理? – 2013-05-11 04:45:14

+0

@NathanCraike:是的,自然语言处理。看起来没有“自然语言处理”的标签,所以不得不使用NLP。 – kosa 2013-05-11 04:45:43

回答

1

你是对的。有这么多的话,简单地使用这个词将不会让你开发出一个好的模型。您需要降低维度。如你所说,做这件事的一个方法是采取词性。当然,还有其他功能可以提取。例如,使用的我的.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 

EDIT(基于关问题的): 所以,这是一个监督学习实验。从段落样式的格式一般的句子的训练数据来了,但转化为以下矢量模型:

  • 1列:类别:
  • 列不-结束句结束句子或2-8:围绕所述时期的+/- 3个字
  • 列9,10:分别在下一个可靠句子分隔符之前的时间段的左/右字数(例如,?,!或段落标记)。
  • 第11列:该时段后的空格数。

当然,这不是一个非常复杂的问题要解决,但这是一个很好的介绍Weka。由于我们不能仅仅使用这些词作为功能,所以我使用了他们的POS标签。我还提取了词的长度,不管这个词是否被大写,等等。

因此,只要您能够将其转换为上面的矢量模型并提取.arff中使用的特征,就可以将任何东西作为测试数据。

+1

+1。谢谢!如果我理解正确,您已为每个要素(属性)创建了所有可能的值,而数据部分为不同组合提供了训练数据。你能解释一个英文例句,以及这个培训文件将如何用于这个目的吗?我想要做的是提取句子中单词之间的关系。 – kosa 2013-05-11 13:18:49

+0

你正在尝试做无监督或有监督的学习吗?如果你的数据没有类标签,那么你将进行无监督学习(不是我上面做的例子)。对于无监督数据,您可以使用Weka中提供的几种聚类算法:例如K-means,EM,Cob-web,Meta-Clusterer。从这些,你将能够将单个句子分组成群,应该希望将类似的句子组合在一起。对于你想要做的事情,如果你只是使用POS标签,你将无法将关系强调为:x在y上运行。 – 2013-05-11 15:29:32

+0

我正在处理类似的问题。处理语法是一回事,但试图根据语法和语义派生出意义和群体是另一回事。我认为文本分类很难。 – 2013-05-11 15:31:49