机器学习 - 从文档中提取信息

时间:2016-11-22 21:46:50

标签: machine-learning nlp tensorflow

我试图训练一些神经网络(使用张量流)来从发票中提取语义信息。经过一长串阅读后,我想出了这个:

  • 使用word2vec生成单词嵌入(更多信息请参见下面的语料库)。
  • word2vec的输出提供给CNN,因为靠近的向量具有相似的语义含义。

所以我上面描述的非常高级的方法对我来说似乎很好。如果出现任何问题,我很乐意纠正它。

我有几个问题:

  1. 语料库选择。是否足以使用维基百科的通用语料库?或者我应该使用专门的语料库来发票?如果是后者,我该如何生成这个语料库?我确实有一个可以使用的大发票数据集。
  2. 信息提取。让我们说上述所有工作都很好,我能够从新的看不见的发票中理解语义信息。如何提取某些信息?例如,我们假设我们引入了order number: 12345的新帐单,假设order number被理解为发票号(或者其他任何向量)相同的order number附近),如何提取值12345?我正在研究的一个领域是SyntaxNet,这对我们有帮助。
  3. 感谢任何帮助/见解。

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

2 个答案:

答案 0 :(得分:4)

  1. 如果您有大量发票数据集,那么您最好使用它。数据集对单词嵌入构造有一些明显的影响。要构建语料库,您可以删除常用的停用词(如a等),然后使用每个词的tf-idf权重来表示文档,然后再将其提供给skip-gramCBOW模型。您也可以使用one-hot encoding替代tf-idf权重。您还可以考虑简单的语言模型(使用bigram或trigram),因为您有一个非常具体的域可以使用。这将使您的模型更简单!

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

  3. 这是我个人的意见(并非旨在批评你),在任何地方使用文字嵌入或基于神经网络的模型是不可行的。基于Word嵌入或基于神经网络的方法提供了良好的性能,以回报繁重的计算复杂性。那么,如果您可以使用简单有效的模型来实现您的目的,那么您为什么更喜欢复杂且计算量大的模型呢?你必须对你选择的模型有很好的推理。使用模型并不是一个明智的决定,因为模型很受欢迎并且被广泛使用。

答案 1 :(得分:2)

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

1)至少获取您希望处理的每种发票类型的一个示例,并使用与镜像目标提取相关的xml标记进行标记,例如"订单号:12445"。如果需要或后处理,XML或其他解析器可以稍后获取它以用于评估步骤。

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

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

4)如果您需要的不仅仅是词组匹配 - 例如。部件号和部件数,那么您可能需要使用分类器来确定堆栈的最高位置,该分类器决定了并发是否合法。

希望有所帮助。

Breck的