【问题标题】:NLP model trainingNLP模型训练
【发布时间】:2013-05-05 19:42:16
【问题描述】:

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

例如,我有几行如下:

  • Tom 在 abc 公司工作

  • 杰瑞在 xyz 工作

  • 组织是人工作的地方。

在所有这些情况下,关系都是“人”“组织”,关系类型为“工作”

基于上述示例和一些 NLP 读数,我认为我们需要基于词性标签而不是真实的“实体名称”来训练系统,以使其对字段中的其他输入数据具有通用性。这是我很困惑的部分。

请不要简单地指出一些算法(SVM 等),因为我知道它们是可能的,但我缺少关于算法如何处理这些行以处理其他输入的详细信息。我看到的所有示例都直接提供模型并告诉使用它们,因此我无法构建一些我想要的东西。

任何关于算法(任何示例算法都可以)如何使用上述句子来构建训练模型的示例都会非常有帮助。

感谢您的时间和帮助。

注意:标签部分中指定的任何一种编程语言对我来说都可以。

【问题讨论】:

  • 我认为您需要更清楚地了解“NLP”的含义。我猜你的意思是自然语言处理?
  • @NathanCraike:是的,自然语言处理。似乎没有“自然语言处理”的标签,所以不得不使用 NLP。

标签: nlp octave weka opennlp


【解决方案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

编辑(基于问题): 所以,这是一个有监督的学习实验。训练数据来自段落样式格式的普通句子,但被转换为以下向量模型:

  • 第 1 列:类别:句末或非句末
  • 第 2-8 列:围绕相关期间的 +/- 3 个单词
  • 第 9,10 列:分别在下一个可靠句子分隔符(例如 ?、! 或段落标记)之前的句点的左/右字数。
  • 第 11 列:句点后面的空格数。

当然,这不是一个很难解决的复杂问题,但它是对 Weka 的一个很好的介绍。由于我们不能只使用单词作为特征,所以我使用了他们的 POS 标签。我还提取了单词的长度,单词是否大写等。

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

【讨论】:

  • +1。谢谢!如果我理解正确,您已经为每个特征(属性)创建了所有可能的值,并且数据部分具有不同组合的训练数据。您能否解释一个示例英语句子以及该培训文件将如何用于该目的?我要做的是提取句子中单词之间的关系。
  • 您是在尝试进行无监督学习还是有监督学习?如果您的数据没有类标签,那么您将进行无监督学习(不是我上面所做的示例)。对于无监督数据,您可以使用 Weka 中提供的几种聚类算法:例如 K-means、EM、Cob-web、Meta-Clusterer。从这些中,您将能够将单个句子分组到集群中,这有望将相似的句子组合在一起。对于您想要做的事情,如果您只使用 POS 标签,您将无法将关系突出显示为 :x WORKS at y。
  • 我正在解决类似的问题。处理句法是一回事,但试图根据句法和语义推导出意义和组是另一回事。我认为文本分类很难。
  • 是的,谢谢史蒂夫,这些是一些有价值的意见并澄清了一些问题。祝你的博士好运
  • 非常感谢。祝你的项目好运。
猜你喜欢
  • 2018-02-13
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-19
  • 2019-02-04
相关资源
最近更新 更多