我试图训练一些神经网络(使用张量流)来从发票中提取语义信息。经过一长串阅读后,我想出了这个:
word2vec
的输出提供给CNN,因为靠近的向量具有相似的语义含义。所以我上面描述的非常高级的方法对我来说似乎很好。如果出现任何问题,我很乐意纠正它。
我有几个问题:
order number: 12345
的新帐单,假设order number
被理解为发票号(或者其他任何向量)相同的order number
附近),如何提取值12345
?我正在研究的一个领域是SyntaxNet,这对我们有帮助。感谢任何帮助/见解。
跟进@ wasi-ahmad的问题: 我试图理解发票的语义信息的原因是最终能够从中提取价值。因此,例如,如果我向神经网络提供看不见的发票,它会找到发票的编号(无论其标签是什么)并提取其价值。
答案 0 :(得分:4)
如果您有大量发票数据集,那么您最好使用它。数据集对单词嵌入构造有一些明显的影响。要构建语料库,您可以删除常用的停用词(如a等),然后使用每个词的tf-idf权重来表示文档,然后再将其提供给skip-gram
或CBOW
模型。您也可以使用one-hot encoding
替代tf-idf权重。您还可以考虑简单的语言模型(使用bigram或trigram),因为您有一个非常具体的域可以使用。这将使您的模型更简单!
我的第二个问题不明确!通常在信息提取任务的预处理步骤中,数字值被某个标签替换,例如NUM
。但是,SyntaxNet
实际上是用于依赖性解析。由于您的最终目标是从发票中提取语义,为什么需要语法信息?它会帮助你完成这项任务吗?如果您有大型数据集,则可以为特定目标域生成字典。但这取决于你将如何使用你在帖子中没有提到的提取的语义信息!
这是我个人的意见(并非旨在批评你),在任何地方使用文字嵌入或基于神经网络的模型是不可行的。基于Word嵌入或基于神经网络的方法提供了良好的性能,以回报繁重的计算复杂性。那么,如果您可以使用简单有效的模型来实现您的目的,那么您为什么更喜欢复杂且计算量大的模型呢?你必须对你选择的模型有很好的推理。使用模型并不是一个明智的决定,因为模型很受欢迎并且被广泛使用。
答案 1 :(得分:2)
我假设这是发票的直接提取问题。你提出了一种比可能需要更复杂的解决方案 - 我真的不知道它是如何工作的,但我不知道一切。让我们退一步,开始简单:
1)至少获取您希望处理的每种发票类型的一个示例,并使用与镜像目标提取相关的xml标记进行标记,例如"订单号:12445"。如果需要或后处理,XML或其他解析器可以稍后获取它以用于评估步骤。
2)想想提取信息的最简单方法 - 我建议你从正则表达式匹配器开始。
3)如果正则表达式匹配器不足,那么您可能需要一些有监督的机器学习。这将能够获得更多变化的短语,并且可以以非常高的精度执行并且可以回忆正确的短语。有关一系列方法,请参阅http://alias-i.com/lingpipe/demos/tutorial/ne/read-me.html。
4)如果您需要的不仅仅是词组匹配 - 例如。部件号和部件数,那么您可能需要使用分类器来确定堆栈的最高位置,该分类器决定了并发是否合法。
希望有所帮助。
Breck的