V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
billion
V2EX  ›  Python

如何选择一个合适的机器学习算法将一段文字转化为 Python 字典?

  •  
  •   billion ·
    kingname · 2017-07-28 16:04:37 +08:00 · 3090 次点击
    这是一个创建于 2679 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有这样一段字符串:

    name:Bill
    age:20
    salary:9999
    

    需要将它转化为 Python 的字典:

    info = {'name': 'Bill', 'age': 20, 'salary': 9999}
    

    当然,对每一行使用 split(':')就可以直接进行分割得到 Key 和 Value,但这并不是根本的解决办法。因为还存在以下格式的字符串:

    name>Bill
    age>20
    salary>9999
    

    或者

    Bill==>name
    20==>age
    9999==>salary
    

    或者

    name,age,salary
    Bill,20,9999
    

    这些字符串让人来看,可以发现他们对应的 Python 字典是完全一样的,但是这就不能简单地通过规则匹配来转换了。

    每一种格式的字符串都有一万个,所以训练集数量不是问题。希望能实现一个机器学习算法,输入一些训练集来训练这个系统,之后再输入新的字符串,就能个自动输出对应的 Python 字典。

    请问这样的系统应该如何设计?

    第 1 条附言  ·  2017-07-28 17:02:22 +08:00

    我自己的想法是:

    训练的时候,输入几百条相同格式字符串,和相应的字典。然后使用深度神经网络去尝试自动生成FSM,不断的试错,直到找到一个正确的FSM,可以根据这个格式的字符串生成对应的字典。这个试错过程就像是之前有个国外网友用深度神经网络在GTA5里面开骑车一样。

    24 条回复    2017-07-29 22:06:31 +08:00
    Keyes
        1
    Keyes  
       2017-07-28 16:08:45 +08:00
    只是标点符号分割的话 a-zA-Z0-9 就搞定了啊?
    billion
        2
    billion  
    OP
       2017-07-28 16:09:37 +08:00
    @Keyes 尽量不用使用规则匹配来处理这个问题,否则就没有意义了。
    wineway
        3
    wineway  
       2017-07-28 16:16:04 +08:00 via Android
    那就先用 RNN 实现一个正则引擎吧,"MIT 去年的 EMNLP 论文做的就是这个: http://t.cn/R9ySVCn "
    billion
        4
    billion  
    OP
       2017-07-28 16:16:49 +08:00
    @wineway 感谢,我先去看看。
    Kilerd
        5
    Kilerd  
       2017-07-28 16:21:11 +08:00 via iPhone
    编译原理啊,plyplus 随随便便就写出来了
    billion
        6
    billion  
    OP
       2017-07-28 16:28:05 +08:00
    @Kilerd 难道能实现一个通用的 grammer.g 搞定所有格式的字符串?
    Kilerd
        7
    Kilerd  
       2017-07-28 16:33:55 +08:00 via iPhone
    @billion 起码就你描述出来的几种是没问题的,如果是所有可能的格式,估计没有任何方法可以解决。
    机器学习不是万能的,训练集是要打标签的,unsupervise 训练方法是要给出某些规则的。

    所以简而言之都是要给定某些规则的
    yunkchen
        8
    yunkchen  
       2017-07-28 16:36:28 +08:00
    除了最后一种,前面的确实用正则就可以了,用不到机器学习。
    billion
        9
    billion  
    OP
       2017-07-28 16:54:12 +08:00
    @yunkchen 还有比最后一种更离奇的格式。但是人眼可以离开看出来。所以才需要机器学习
    billion
        10
    billion  
    OP
       2017-07-28 16:55:04 +08:00
    @Kilerd 我希望它能跟我我输入的字符串和这个字符串对应的字典,自己去发现他们之间的转化关系。
    ipconfiger
        11
    ipconfiger  
       2017-07-28 17:06:30 +08:00
    我倒是有个差不多的需求, 就是从 txt 小说里抽取章节标题
    RLib
        12
    RLib  
       2017-07-28 17:06:47 +08:00
    只要每种格式的符号固定, 选取几行数据, 计算出公共符号和变化的范围, 就能大概得出 key 和 value 了
    ikeeper
        13
    ikeeper  
       2017-07-28 17:07:50 +08:00
    简单的问题何必搞复杂呢,
    人:发现了规则,写出了正则;
    机器:费老大劲发现了规则,写出了‘正则’,还不一定百分百正确;
    所以,何必绕一圈呢
    padeoe
        14
    padeoe  
       2017-07-28 18:03:52 +08:00 via iPhone
    斯坦福大学自然语言处理第一课就是正则匹配。正则匹配简单高效,别小瞧啊。
    Thoxvi
        15
    Thoxvi  
       2017-07-28 18:11:16 +08:00 via Android
    py 有个 re.split 可以用正则分割啊,机器学习不嫌麻烦吗…又得找数据又得打标签
    binux
        16
    binux  
       2017-07-28 18:28:44 +08:00   ❤️ 1
    机器学习不是银弹,你都有格式+字典了,直接产生规则不就好了吗。
    你这能用多少种格式呢?你有这时间标注+搞机器学习,手动写规则都写完了。
    aaronzjw
        17
    aaronzjw  
       2017-07-28 22:50:45 +08:00
    杀鸡焉用牛刀啊
    fiht
        18
    fiht  
       2017-07-28 23:21:32 +08:00
    啥都想要机器学习来做...给数据打标签的时间就够把数据分类了。
    数据分类之后根据数据的不同种类正则匹配就能解决 99%了。其他解析不了的 1%根据数据量选择是丢弃还是继续分类。
    spolarbear
        19
    spolarbear  
       2017-07-28 23:28:20 +08:00
    这类有绝对对错判断的命题,用不上机器学习,你是要离散性高还是正确率高?
    est
        20
    est  
       2017-07-28 23:33:24 +08:00 via iPhone
    人能看出来是因为有先验知识。楼主觉得机器能搞定先打 10w 标作为训练样本压压惊
    billion
        21
    billion  
    OP
       2017-07-29 08:44:03 +08:00
    @spolarbear 正确率。
    billion
        22
    billion  
    OP
       2017-07-29 08:46:41 +08:00
    @binux 我有一百万种格式,每一种格式都有一个对应的 dict。不可能每一种都自己写规则。当然,打标签也不会每一种都打。这也是为什么我在帖子的 Append 里面说用深度神经网络而不是普通机器学习算法的原因。
    yemenchun1
        23
    yemenchun1  
       2017-07-29 09:22:23 +08:00 via iPhone
    比较好奇一百万种格式的原始数据是哪些人创造的
    Zzzzzzzzz
        24
    Zzzzzzzzz  
       2017-07-29 22:06:31 +08:00
    你需要的只是 pyparsing
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3412 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:26 · PVG 19:26 · LAX 03:26 · JFK 06:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.