神经网络可以读取支票吗?

在将近三年的时间里,我一直将所有收入和支出都严格记录在hledger中为什么是他?它发生在历史上。从2018年开始,我开始在Google上写下所有内容,并于4月前往日本。我坐在一家旅馆里,试图弄清楚如何正确计算不同货币的价格,并决定在Lisp上写一些东西。然后他写道然后他通过电子邮件聊天向人们展示了它。我收到的答案是“但是已经有现成的答案”和指向分类帐的链接。然后,我将所有条目从Google板块拖到分类帐中。

我喜欢这种费用核算方式,因为它具有外出和重写历史记录的能力。因此,我决定去年为我妻子购买的耳机不应写成“技术”,而应写成“礼物”,没问题。

现在,我从某个地方研究鸭嘴兽的支票,我想知道我在巧克力上花了多少钱?剧透-很多 我进入了订单历史记录,在那里找到了旧收据,并按类别重写了条目。以前只有“费用:食物”,但现在有“费用:食物:水果”和其他。同时,在那里也发现了一些家庭用品。

我第一次完全手动进行此重写。也就是说,他从商店回家,看着支票,写下了很多行。然后,我进行了一些自动化-在emacs中为一个盘子制作了一个模板,其中的行包含产品及其类别和价格,在最后一列中,按类别的过滤器会立即给出金额。

但是神经网络和其他数据安全主义。

我脑海中浮现出一个想法,即神经网络完全能够理解“ GL.VIL.Oranges SELECT.fas.1kg”就是这种水果,与“ BOTTOM.HL.aton PODMOSKOVNY 400g”相比(面包,但是为此我不得不复制这是google上的名称)。

要解决的问题显然是分类。行名被提交到输入,并且在输出处应该有一个类别。最初,我将手动放置这些类别,然后仅编辑预测。因此,程序必须首先分析支票的文本,从中选择产品名称及其价格,并预测每个名称的类别。给我看一下预测,以便我可以纠正它。当一切都井井有条时,为分类账形成一组线。

我只是通过将行分成几行,然后对行进行分析。用python制定的通常规则。

或多或少像这样
def parse_utk(lines):
    while lines:
        if lines[0].startswith('  '):
            break
        lines.pop(0)
    else:
        return
    lines.pop(0)
    result = []
    while lines:
        data = lines[0:6]
        name, price, lines = lines[0], lines[3], lines[6:]
        if name.startswith(''):
            break
        assert price.startswith('= ')
        result.append((name, Decimal(price[2:]))
    return result

不是最优雅的代码,但它能完成工作。以类似的方式,我立即编写了Pyaterochka和Magnet的检查规则。

然后开始更有趣的部分,即神经网络。我一直相信,未来属于角色级别的模型,特别是我喜欢天赋要创建神经网络,需要两个组件-语言模型和分类器本身。我重复制作一个语言模型-预测后续字符并预测先前字符。立即编写了用于训练网络的脚本,以便可以从头开始训练网络并重新训练现有网络。

, . " ", . . . 23 21. – .

hledger.

$ hledger bal  -b thisyear -% -S
             100.0 %  expenses:
              20.6 %    <unsorted>
              15.3 %    
               7.9 %    
               7.1 %    
               6.9 %    
               6.3 %    
               5.2 %    
               4.8 %    
               4.0 %    
               3.8 %    
               2.7 %    
               2.7 %    
               2.0 %    
               2.0 %    
               1.7 %    
               1.6 %    
               1.3 %    
               1.2 %    
               0.9 %    
               0.9 %    
               0.5 %    
               0.4 %    
               0.2 %    

, . . , ( ) .

. , . , ?

– , . rule-based . ( - ) , ? , .

– NER. flair, ( ? ). . , IOB- … , .

rule-based , . . , "" . , . , , , . -, rule-based .

, . , . , . flair SpaceTokenizer, , . " ". , .

- - : " , , , ". , "1 107 99" , 107 99 . , ( ). ? , , .

, . . – " ", " " " ". NER . " " "".

. , (, , NewlineTokenizer), . , ColumnCorpus . \r, , . vertical tab (\x0b), RS US.

- , . , O, . , , . , , , .

, 'entry' 'entry'. – . 'O', , 'O\n', .

, . – flair.

. – , "" . .

rule-based , "" . , , rule-based . , , , rule-based .

一张支票足以训练标记者。没错,起初我必须完成脚本才能编辑中间结果,然后再将它们保存为正确的格式(我设法忘记了特殊的列分隔符,并且一小时都不知道为什么什么都不起作用)。只需将“神经网络”分区固定到主解析器即可。

然后梳理代码并发布。

PS来源




All Articles