使用 AI 来解释 XML?

人工智能 机器学习 人工智能设计 结构化数据
2021-11-08 03:20:52

我的问题更多是关于“有可能吗?” “这是正确的方法吗?” 所以让我解释一下我的想法是什么:

我想到了一个系统,它以各种结构获取 XML 文档,但其中的数据结构基本相同。例如,假设每个文档都包含关于一个或多个人的数据。所以人工智能会识别一个名字。文件的其他地方有我们虚构人物的邮寄地址。AI 现在应该“看到”地址并得出结论,它属于我们的人。在其他任何地方,文档中都有一个电话号码。同样,我们的 AI 应该看到我们的人和这个电话号码之间的联系。

如果没有陷阱,这将不是 AI 的工作。如果任务只是查找和映射地址和电话号码等字符串,我们可以简单地使用正则表达式来匹配我们的“目标字符串”。这种情况下的问题是:XML 文档可能包含其他数据,这些数据不属于我们的个人,但例如是一个有效的电话号码,因此将匹配一个正则表达式。

所以最大的问题是:人工智能是否有可能学习这一点,如果可以,有人会使用哪个框架来创建这样的人工智能?


示例 XML 文档:

<?xml version="1.0" encoding="utf-8" ?>
<document>
    <data>
        <foo>
            <bar>
                <person>
                    <name>John Doe</name>
                </person>
            </bar>
            <address>
                <street>Main street 1</street>
                <city>1111 Twilight town</city>
                <country>sample country</country>
            </address>
            <phone>+123 123 123</phone>
        </foo>
        <foo>
            <bar>
                <person>
                    <name>Jane Doe</name>
                </person>
            </bar>
            <address>
                <street>Broadway 42</street>
                <city>4521 Traverse town</city>
                <country>sample country</country>
            </address>
            <phone>+123 412123</phone>
        </foo>
    </data>
    <creator>
        <!-- Note: While this looks like a valid person, -->
        <!-- this data should not be matched by the AI -->
        <name>Sam Smith</name>
        <office>
            <street>Seaside road 5</street>
            <city>4521 Traverse town</city>
            <country>sample country</country>
        </office>
        <phone>+123 555 555</phone>
    </creator>
</document>
2个回答

XML、HTML 和不太正式的语言都非常好地响应在图形框架内进行转换或询问。XML 和 HTML 特别有用,因为它们严格符合树形结构。这意味着任何好的数据组件都可以根据与任何其他“好”数据组件的树距离来衡量。

如果您提取对正则表达式友好的术语并跟踪它们在树中的位置,您可以将这些值转换为通用文档空间向量(它可能只需要是一维的),允许您根据简单的距离度量或异常检测算法识别“好”数据的“好”与“坏”数据的异常部分的集群 - 例如,在信息密度上运行的隔离森林。

这取决于您的数据,以及您可以找到多少数据,理想情况下已经标记了好与坏。

如果您正在寻找可靠的地址内容,那么是的,您可能会在姓名、地址、邮政编码和电话号码上得分,所有这些都显示为紧密连接的集群组,都在一两个节点之内 - 距离一个其他。

同时,包含在其他地方的电话号码的注释不太可能是匹配的。

不同的文档将具有不同的阈值密度,以及不同的异常与一致性比率,因此您手头的任务是找出某种方法来自动调整任何给定文档集上的参数。

过去,我尝试通过将所有内容扁平化为单个文本字符串来针对 html 执行此操作,并且类似的方法产生了一半不错的结果,但是如果您正在查看 XML,那么期望结构会产生是公平的更多信息。

您需要使用典型标签定义“框架”、“模板”或属于共同组成地址或其他类型数据的数据集。因此phonetel等将指示一个电话号码,前提是它们的内容也看起来像一个电话号码。这就是你作为人类如何识别它的方式。因此,您将您的领域知识编码为具有可能属性的实体。然后您尝试匹配属性并识别它们属于哪个实体。您可以拥有多个具有共享属性子集的实体(如公司或个人,它们都有一个地址)。会有其他线索告诉你它是什么。如果名称以“Ltd.”结尾。或“Co”,例如,它将是一家公司。

因此,您混合了用于识别属性的启发式方法,将哪些属性的模板组合起来形成您想要识别的实体类,然后选择最匹配的一个。如果您有几个实体,其中所有填充的是phone,那么您无法真正分辨它是什么并且会丢弃它。在您的示例中,名称与各种实体匹配,但办公室不是一个人的有效属性(除非您确定它是)。过于简单的启发式可能会认为“Sam Smith”是一家公司,它可能具有办公室属性,因此您需要小心设计模板的方式。

将属性放在一起的标准可能是它们位于数据结构的同一子树中。确切的定义实际上取决于您要从中提取的数据和信息类型。

所以是的,这绝对是可能的。我不太确定是哪个框架,但是用您选择的编程语言对其进行编码应该是相当简单的。