【问题标题】:Detecting addresses via machine learning [closed]通过机器学习检测地址 [关闭]
【发布时间】:2017-07-30 03:23:09
【问题描述】:

我目前正在开发一种工具,旨在检测文本中的地址(或任何模式,如工作、运动队或任何东西)。

所以我现在在做什么:

1/ 将文本拆分为单词 2/ 词干化

用户可以创建类别(工作、运动队、地址...)并将手动分配一个句子到一个类别。

这句话的每个词干都将存储在数据库中,并带有更新的分数 (+1)

当我浏览一个新文档时,我会为每个句子计算其中所有单词的得分。

例子:

我住在伦敦的布朗街

=> (live+1, Brown +1, Street+1, London+1)

那下次见

我住在伦敦的奥兰治街 得分为 3(live +1,Street+1,London+1)所以我可以说“这句话可能是一个地址”。如果用户验证,我会更新单词(live+1、orange+1、street+1、london+1)。 如果他说“不准确”,所有的话都会被否决。

我认为通过更多的运行,我将能够检测地址,因为“Street”和“London”的得分会很高(邮政编码等相同)

我的问题是:

首先,您如何看待这种方法? 其次,这种方法只是忽略了上下文。带有 Street & London 的句子应该有更好的分数。 这意味着如果我在同一个句子中检测到 Street & London,我们很可能会说它是一个地址。

如何将这些信息存储在数据库中?我目前正在使用关系数据库(MySQL),但如果我存储每个单词之间的链接,恐怕会变得很大。

这就是我们所说的神经网络吗?最好的存储方法是什么?

你有什么建议可以升级我的检测算法吗?

【问题讨论】:

    标签: algorithm machine-learning neural-network


    【解决方案1】:

    给每个单词打分的想法是合理的,但我会坚持更标准的机器学习方法。

    例如,您可以使用词袋技术将每个句子转换为向量。之后,您可以为数据拟合分类器(您可以尝试简单的方法,例如朴素贝叶斯。它可以很好地用于文本分类,尤其是在样本数量很少的情况下)。

    详细信息取决于您最初拥有的数据量以及您每天从用户那里收到的数据量。如果您有大量数据并且新数据的数量非常少,您可以只在其上训练模型并将新数据仅用于预测。如果你有很多新的例子,你可能会使用支持在线学习的模型做得更好。还有一种“中间立场”方法:只有在拥有一批新示例后才能重新训练分类器(您可以使用该批次的大小)。这样会考虑新样本,但您无需为每个新样本重新训练模型。

    再一次,我将从向量化句子的标准方法(例如,计数向量化)开始,并使用有效支持在线学习(或至少批量更新)的简单分类器。

    这样,您只需存储模型的参数而不是所有用户输入,这样数据的大小就不会增长。

    【讨论】:

    • 感谢您的回复,我将使用您的解决方案、词袋和朴素贝叶斯,看看效果如何!
    【解决方案2】:

    这就是我们所说的神经网络吗? 不。 神经网络是一个模型。它是您可以用来实现您想要的目标的模型。

    你有什么建议可以升级我的检测算法吗? 是的。与其使用feature engineering 和手动编码规则,不如使用神经网络。

    您应该尝试使用深度循环神经网络。如果您拥有大量数据,则深度网络的性能优于任何复杂的算法。 (在你的情况下,如果你没有足够的数据,你可以在线报废数据)

    在您的训练阶段,您将给神经网络添加几行标签,如truefalse(文本是否代表地址行)。经过足够的训练,网络将能够识别给定的文本是否代表地址行。

    对于深度学习,最关键的是数据。更多的数据胜过复杂的算法,好的数据胜过更多的数据。

    希望对你有帮助

    【讨论】:

    • 感谢您的回答。只是想知道,什么是巨大的?是在谈论 1000、10000 还是 100 万?你有什么书/网站可以推荐来跟随你的答案吗?谢谢!
    • 我认为两个标签的 25000 个示例就足够了。因此,总共您将有 50k 个示例。(40k:10k 训练与测试的比率会很好)。尽快粘贴参考链接
    • 1.你常用的东西来自视频 44.Deep Learning 2。有点数学,很难理解,但基础很好。 (从第7.1讲给你)Machine Learning 3. 本书Deep Leaning和在线Deep Leaning
    • 这不是来自书本或网站,而是基于我在 1998 年说服神经网络毕业以及许多数学建模项目时的个人经历。不需要一次训练所有模式,您可以通过预加载网络参数来批量运行。请注意,深度学习只不过是一个比经典反向传播更好的神经网络的骗局。始终根据父类型设计custom network,例如混合跳跃和反向传播
    【解决方案3】:

    深度神经网络确实是一个不错的选择,因为特征工程是由网络在训练时完成的。

    但是,如果您想尝试或测试可能适合您的问题的进一步机器学习方法,那么我建议使用 字符串内核 结合 支持向量机算法。与神经网络特征工程相比,这种方法需要有关内核方法的基础知识。对此的第一个介绍可能是 Wikipedia 文章:

    String Kernels on Wikipedia

    【讨论】:

      【解决方案4】:

      让我们采取以下两句话,第一个是地址,但第二个不是地址,而是类似的陈述。

      1. 我住在 伦敦 Brown 街道,LABEL ADDRESS=1
      2. 我在 伦敦 Brown Street 比赛,LABEL ADDRESS=0

      分数匹配将失败,因为两个语句将给出相同的分数。此外当词干共享类别或标签时这将失败。即使我们对词干使用深度学习,这也会失败,因为两个句子将具有相同的输入(或词干),但标签值是矛盾的,所以网络学习 将折叠事件并完成大量学习。

      注意:第二个陈述 not-an-address 的原因是识别没有词干(或经过训练网络输入)。

      所以我们应该对所有单词使用深度学习网络,而不是只使用词干,并训练负面标签,也像 ADDRESS=1 的语句和 ADDRESS!=1 的类似语句

      【讨论】:

      • 感谢您的回复。如果用户可以随时添加新标签怎么办?我真的负担不起用大量数据训练我的模型(我猜最多 100-200 个),对你来说最好的方法是什么?
      • 要添加新标签,您可以加载旧网络的参数但您也必须重新训练旧模式,因为学习新模式时网络会忘记旧模式。您可以设计智能技巧,让网络在学习新模式时不会忘记过去的模式。
      猜你喜欢
      • 2020-12-12
      • 2018-02-20
      • 2017-12-25
      • 2019-06-13
      • 2012-03-27
      • 2019-10-27
      • 2013-02-04
      • 2011-06-16
      • 2018-11-16
      相关资源
      最近更新 更多