【问题标题】:Machine Learning - Information extraction from a document [closed]机器学习 - 从文档中提取信息 [关闭]
【发布时间】:2017-04-06 17:47:22
【问题描述】:

我正在尝试训练几个神经网络(使用 tensorflow),以便能够从发票中提取语义信息。经过一长串阅读后,我想出了这个:

  • 使用word2vec 生成词嵌入(更多内容见下文)。
  • word2vec 的输出提供给 CNN,因为靠近的向量具有相似的语义。

所以我上面描述的非常高级的方法对我来说似乎很好。如果有任何问题,我希望得到纠正。

我有几个担心:

  1. 语料库选择。使用例如维基百科的通用语料库就足够了吗?或者我应该为发票使用专门的语料库?如果是后者,我该如何生成这个语料库?我确实有一个可以使用的大型发票数据集。
  2. 信息提取。假设上述所有工作都很好,并且我能够从一张新的看不见的发票中理解语义信息。如何提取某些信息?例如,假设我们引入了一张具有order number: 12345 的新发票,假设order number 被理解为发票编号(或位于order number 附近的任何向量),如何提取值12345?我正在关注的一个领域是SyntaxNet,它可以在这里提供帮助。

感谢任何帮助/见解。

跟进@wasi-ahmad 的问题: 我试图了解有关发票的语义信息的原因是最终能够从中提取价值。因此,例如,如果我向我的神经网络提供一张看不见的发票,它会找到发票的编号(无论它的标签是什么)并提取其价值。

【问题讨论】:

  • 投票结束这个问题,因为它太宽泛是没有意义的。我的问题的主题很具体:从发票文件中提取信息。我已经提出了我的想法,我需要验证和/或不同的观点,因此我在这里发帖。
  • @sansingh 这是我的问题链接
  • 你采取了什么方法?什么对你有用?我正在研究类似的问题。我会很感激你的帮助。谢谢。

标签: machine-learning nlp tensorflow


【解决方案1】:
  1. 如果您有大量的发票数据集,最好使用它。数据集对词嵌入的构建有一些明显的影响。要构建语料库,您可以删除常见的停用词(如 a 等),然后使用每个单词的 tf-idf 权重来表示文档,然后再将它们提供给 skip-gramCBOW 模型。您也可以使用one-hot encoding 作为 tf-idf 权重的替代品。您还可以考虑简单的语言模型(使用二元组或三元组),因为您有一个非常具体的领域需要处理。这将使您的模型更简单!

  2. 我不清楚您的第二个问题!通常在信息提取任务的预处理步骤中,数值会被一些标签替换,例如NUM。但是SyntaxNet实际上是用于依赖解析的。既然你的最终目标是从发票中提取语义,为什么你需要句法信息?它会帮助你完成这项任务吗?如果你有一个大数据集,你可以为特定的目标域生成一个字典。但这取决于您将如何使用您在帖子中未提及的提取的语义信息!

这是我个人的观点(不是为了批评你),在任何地方都使用词嵌入或基于神经网络的模型是不可行的。基于词嵌入或神经网络的方法在计算复杂度高的情况下提供了良好的性能。那么,如果您可以使用简单高效的模型来达到您的目的,为什么您更喜欢复杂且计算量大的模型呢?你必须对你选择的模型有很好的推理。仅仅因为该模型流行且被广泛使用,就使用该模型并不是一个明智的决定。

【讨论】:

  • 感谢您的回答wasi,非常有帮助。关于第二点,所以我解释的所有内容都是为了从看不见的发票(或可能更改的)格式中提取信息。因此,如果我的 NN 了解 invoice number 的样子,并且我们向它出示了一张新的看不见的发票,它将检测到 invoice number 部分及其价值,这就是我试图理解的语义的原因发票。
【解决方案2】:

我假设这是发票的直接提取问题。您提出了一种比可能需要的更复杂的解决方案——我真的不知道它是如何工作的,但我并不知道一切。让我们退后一步,从简单的开始:

1) 至少为您希望处理的每种类型的发票举一个例子,并用类似 xml 的标签标记它,这些标签反映了目标提取,例如“订单号:12445”。如果需要,XML 或其他解析器可以稍后将其用于评估步骤或后处理。

2) 想想提取信息的最简单方法——我建议你从正则表达式匹配器开始。

3) 如果正则表达式匹配器不足,那么您可能需要一些有监督的机器学习。这将能够获得更多不同的短语,并且可以以非常高的精度执行并召回正确的短语。请参阅http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html 了解一系列方法。

4) 如果您需要的不仅仅是词组匹配——例如零件编号和零件计数,那么您可能需要在堆栈顶部使用一个分类器来决定并发是否合法。

希望对您有所帮助。

布雷克

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2020-05-21
    • 2017-12-25
    • 2014-11-03
    • 2019-06-03
    • 2023-03-09
    • 2018-02-20
    相关资源
    最近更新 更多