深入解析CSV表格列类型推断:从系统构建到实验验证
在处理CSV表格数据时,准确推断列类型是一项关键任务。下面将详细介绍一种用于CSV表格理解的列类型推断方法,涵盖类型系统、类型识别器、推断方法、可视化与调整以及实验结果等方面。
类型系统
类型系统由三种类型组成:简单类型(ST)、混合类型(MT)和联合类型(UT)。
-
简单类型
:包括基本域(如整数、布尔值、小数、日期)和特定应用域(如税务代码、增值税号、货币、电子邮件、市政名称、省份或大都市名称、地区名称、邮政编码),这些类型可以从字符串中提取。
-
混合类型
:是一种记录类型,与一组用于从字符串中提取记录类型的模式相关联。形式上,混合类型是一个三元组 ⟨m, rec(t1, …, th), {p1, …, pk}⟩,其中 m 是系统或用户定义的名称,t1, …, th 是简单类型,{p1, …, pk} 是一组模式。模式是一个序列 [c0, t1, c1, …, th, ch],其中 c0, c1, …, ch 是终端符号,用于分隔简单类型的值。
-
示例
:对于字符串 “Via Settala N. 32” 和 “Num. 92 di via friuli”,可以关联模式 [{streetName}, ” N. “,{streetNumber}] 和 [“Num. “,{streetNumber},” di “, {streetName}],它们都遵循 rec(streetName, streetNumber) 类型。
-
联合类型
:用于表示同一列中不同类型实例的出现。形式上,若 {¯t1, …, ¯tl} 是简单或混合类型的集合,则 union(¯t1, …, ¯tl) 是联合类型。
-
示例
:CF 列包含税务代码和增值税号值,其类型为 union(codFisc,PIVA);RAG.SOC./COGNOME 列包含公司名称和个人姓氏两种信息,其类型为 union(surname,companyName)。
类型识别器
为了识别符合给定类型约束的值,每个简单类型 t ∈ ST 都与一个类型识别器相关联。类型 t 的识别器 Rect 是一个函数,当值 v 是 t 的有效实例时返回 true,否则返回 false。
-
简单类型识别器的三种类型
:
1.
有限可枚举类型
:当类型 t 的实例是有限且可枚举时使用。例如,国家、地区、市政、邮政编码(精确)、布尔值、性别、姓名、姓氏和产品类型等。
2.
正则表达式类型
:当类型实例可以通过正则表达式确定时使用。例如,为识别意大利车牌开发了 20 多个正则表达式,如 “^[a-zA-Z]{2}\s?[0-9]{3}\s?[a-zA-z]{2}\$”。
3.
预定义包类型
:当值遵循给定格式且有预定义包可用于识别时使用。例如,使用 Python 代码检查电子邮件、税务代码、增值税号、地址、整数、小数、年份、空字符串。
-
混合类型识别器
:
- 对于提取姓名和姓氏,将值按空格和常见终端符号拆分为术语列表,然后使用基于集合的识别器,考虑意大利常见姓名和姓氏的集合。
- 对于识别地址组件,使用 libpostal 库,该库常用于自然语言处理,利用 OpenStreetMap(OSM)数据库的位置名称。
- 还开发了一种利用从常见字符串中提取的模式集合的识别器,将值与可用模式进行比较,若匹配则认为该值是与模式相关联的混合类型的实例。
类型推断方法
由于类型系统中简单类型丰富且实际数据可能存在错误,表格中的值可能同时属于不同类型或不属于任何类型。因此,采用机器学习方法推断单个值和整个列的最可能类型。
-
主要模型:识别器集成与决策树
- 为确定表格中单个值的类型,采用一组二进制识别器,将其结果输入决策树。
- 对于列 j 中的每个值 vi,j,决策树接收每个识别器的预测向量和列的平均预测向量。
- 每个识别器 Recr 应用于列 j 中的每个值 vi,j,生成一个 R 布尔值向量 Pri,j = ⟨Pri,j,1, Pri,j,2, …, Pri,j,R⟩。
- 每个识别器 Recr 计算其在列 j 中值的平均值 Prj,r,生成列 j 的识别器平均值向量 Prj =< Prj,1, Prj,2, …, Prj,R >。
- 对于每个值 vi,j,通过连接上述两个向量构建向量 Pri,j conc =< Prj, Pri,j >,作为决策树的输入,用于预测值 vi,j 的类型。
- 根据决策树为列 j 中值预测的类型,确定列的潜在类型集合 PType(j),然后通过预定义阈值 σ 确定列的类型 Typecol j。
- 若 (t, ot) ∈ PType(j) 且 ot / Σ(¯t,¯o)∈PType(j) ¯o ≥ σ,则 t 属于 Typecol j。
- Typecol j 可以包含单个类型或联合类型的成员,不属于该集合且非空的值被标记为错误,用户可通过图形用户界面检查和修复。
-
训练数据模拟
:由于债务机构提供的数据集未标记且存在错误,标记数据耗时且数据量不足以训练简单模型,因此生成与原始表格相似的合成表格。
- 为每个感兴趣的简单类型创建数据集,生成具有相似结构的文档,包含从数据集中提取的值。
- 模拟真实文档,生成具有可变列数和行数的文档,注意数据之间的相关性。
- 为使生成的文档更真实,添加空值和错误,空值通过随机替换某些值实现,部分自动生成的值被替换为列类型的错误值,但避免在相似值列中引入错误以防止误分类。
- 最后,为每个值标记其类型,空值标记为 “empty”,错误值标记为 “error”。
-
替代模型
:考虑了随机森林(由 500 个决策树组成,每个使用与单个决策树相同的参数)和多层感知器(MLP,由 3 个密集层组成,分别有 64、32 和 1 个神经元,使用 ReLU 激活函数,最后一层使用 Sigmoid 激活函数,优化器为 Nadam)。
-
模型训练和测试
:生成 12,000 个合成表格,随机分割 10 次,10,000 个用于训练,2,000 个用于验证集。决策树使用最大深度为 20,采用 Gini 准则和类不平衡感知权重进行训练。在验证集上,模型的平均 AUPRC 和 AUROC 分数分别为 0.98 和 0.995。通过 Wilcoxon 符号秩检验比较不同方法,未发现统计学上的显著差异。由于决策树训练速度最快且最易解释,因此选择使用它。
可视化与类型调整
经过机器学习方法处理后,将提取的表格展示给用户进行验证和调整。
-
表格展示
:表格第一行报告列模式,随后是每个列的下拉菜单,包含推断的类型。若报告多个类型,则它们是联合类型的成员,使用不同背景颜色区分实例;混合类型使用不同文本颜色表示。若列中的数据类型相同,背景为白色;若值缺失,单元格背景为黄色;若值被认为是列的错误,单元格背景为红色,列类型也标记为红色。
-
图形界面
:
-
列类型更改界面
:界面顶部报告列名和所有推断的类型(第一个为当前类型),中央部分左右分割,左侧报告当前类型(混合类型为类型组件列表),右侧为下拉菜单(混合类型为下拉菜单列表),用户可指定新类型。底部包含当前列类型的值示例,修改列类型会传播到所有值。
-
单个值类型更改界面
:与列类型更改界面类似,不同之处在于可以同时更改同一列中其他值的类型。
-
混合类型识别界面
:左侧面板报告简单类型的类别,用户选择类别和类型后,可选择能被该类型标记的子字符串。点击 “应用” 按钮,系统会查找遵循相同模式的其他字符串并标记相应类型,用户可决定模式应用正确的值,对于无法识别相同模式的字符串,需手动标记。
实验结果
进行实验评估机器学习算法的类型预测能力,使用 12,000 个合成表格训练模型,2,000 个表格进行测试。将训练好的模型用于推断债务机构提供的 40 个不同 CSV 文档的列类型,这些文档至少有 50 行,列数在 8 到 70 之间,推断联合类型的最小阈值设置为 20%。
-
评估指标
:手动检查获得的表格,确定以下三种列类型:
-
正确列
:预测类型与列内容匹配。
-
兼容列
:预测类型正确但不是最合适的(如街道号码被预测为整数类型)。
-
错误列
:预测类型与列内容不匹配(如类型为税务代码但列中也包含增值税号)。
-
实验结果分析
:计算 “正确列” 和 “正确且兼容列” 相对于总列数的频率,定义十个频率范围对文档进行分类。结果表明,对于 30 个文档,能够推断出超过 80% 列的正确且兼容类型(仅考虑正确类型时为 21 个文档);只有 1 个文档能够推断出少于 65% 列的正确且兼容类型(仅考虑正确类型时为 3 个文档)。低性能文档的原因是类型系统中未包含大量混合类型,导致算法无法正确识别正确类型。
综上所述,通过构建类型系统、开发类型识别器、采用机器学习推断方法以及提供可视化和调整界面,该方法在 CSV 表格列类型推断方面取得了较好的效果,但在处理复杂混合类型时仍有改进空间。
下面用 mermaid 流程图展示类型推断的主要流程:
graph TD;
A[开始] --> B[数据准备:生成合成表格];
B --> C[应用类型识别器];
C --> D[构建输入向量];
D --> E[决策树预测值类型];
E --> F[确定列的潜在类型];
F --> G[根据阈值确定列类型];
G --> H[可视化与调整];
H --> I[实验评估];
I --> J[结束];
| 类型 | 描述 | 示例 |
|---|---|---|
| 简单类型 | 基本域和特定应用域 | 整数、布尔值、税务代码、电子邮件 |
| 混合类型 | 记录类型与模式关联 | rec(streetName, streetNumber) |
| 联合类型 | 同一列中不同类型实例 | union(codFisc, PIVA) |
深入解析CSV表格列类型推断:从系统构建到实验验证(续)
技术细节深入剖析
在前面介绍了类型系统、识别器、推断方法、可视化与调整以及实验结果等方面的基础内容,下面进一步深入剖析其中的技术细节。
类型系统的设计考量
类型系统设计为包含简单类型、混合类型和联合类型,是为了能够全面且灵活地表示CSV表格中各种复杂的数据类型。简单类型提供了基础的数据域,如整数、布尔值等,这些是数据最基本的组成部分。而混合类型则允许将不同简单类型组合成一个复合类型,通过模式来从字符串中提取这些复合信息,这在处理具有特定格式的数据时非常有用,例如地址信息。联合类型则解决了同一列中可能存在多种不同类型数据的问题,使得类型系统更加贴近实际数据的多样性。
例如,在实际的业务数据中,一个列可能既包含个人的身份证号,又包含企业的统一社会信用代码,使用联合类型就可以准确地表示这种情况。
识别器的实现原理
简单类型识别器的三种类型各有其适用场景。有限可枚举类型的识别器基于集合查找,这种方式简单直接,适用于那些值的范围有限且明确的类型,如国家、地区等。正则表达式类型的识别器则利用正则表达式的强大匹配能力,对于具有特定格式要求的数据,如车牌号码、电子邮件地址等,能够高效地进行识别。预定义包类型的识别器借助现有的成熟库和代码,如Python中的相关库,来处理一些常见的数据类型检查,提高了开发效率和准确性。
对于混合类型识别器,不同的实现方式针对不同的应用场景。提取姓名和姓氏的方法基于语言和文化的特点,通过对常见姓名和姓氏的集合匹配来实现。而使用libpostal库识别地址组件,则充分利用了自然语言处理和地理信息数据库的优势,能够更准确地解析地址信息。利用模式集合的识别器则提供了一种灵活的方式,通过匹配常见模式来识别混合类型,增强了系统的适应性。
机器学习模型的选择与优化
在类型推断方法中,选择决策树作为主要模型是经过多方面考虑的。决策树具有直观的解释性,能够清晰地展示每个特征对类型预测的影响,这对于理解模型的决策过程和调试非常有帮助。同时,决策树的训练速度相对较快,在处理大规模数据时具有一定的优势。
在训练决策树时,使用最大深度为20和Gini准则,以及类不平衡感知权重,这些参数的选择是为了优化模型的性能。最大深度的设置可以防止决策树过拟合,Gini准则用于衡量节点的纯度,帮助决策树更好地进行划分。类不平衡感知权重则考虑了数据集中不同类型样本数量的差异,避免模型偏向于数量较多的类型。
与随机森林和多层感知器(MLP)的比较实验表明,虽然三种模型在性能上没有显著的统计学差异,但决策树在训练速度和可解释性方面具有明显优势,因此最终被选择使用。
实际应用中的挑战与解决方案
在实际应用中,CSV表格列类型推断可能会遇到各种挑战,下面针对一些常见问题提出相应的解决方案。
数据质量问题
实际数据中可能存在大量的错误和缺失值,这会影响类型推断的准确性。例如,一个列中原本应该是日期类型的数据,可能存在一些格式错误或者空值。为了解决这个问题,在数据预处理阶段,可以对数据进行清洗和修复。对于缺失值,可以根据业务规则进行填充,如使用默认值或者基于其他列的值进行估算。对于格式错误的数据,可以通过正则表达式或者其他规则进行修正。
在生成合成表格时,也考虑了数据质量问题,添加了空值和错误值,使得训练的模型能够更好地适应实际数据中的不完美情况。
复杂混合类型的识别
如实验结果所示,当数据中存在大量未包含在类型系统中的混合类型时,算法的性能会受到影响。为了应对这个问题,可以不断扩展类型系统,添加新的混合类型和相应的模式。同时,可以利用用户反馈机制,当用户在可视化界面中发现某些数据无法正确识别时,允许用户手动定义模式和类型,然后将这些信息反馈给系统进行学习和更新。
另外,可以结合自然语言处理的技术,对数据进行更深入的语义分析,以提高对复杂混合类型的识别能力。
模型的可扩展性
随着业务的发展和数据的变化,可能需要不断添加新的类型和识别器。为了保证模型的可扩展性,在系统设计时应该采用模块化的架构。将类型系统、识别器、推断模型等各个部分进行解耦合,使得可以方便地添加新的类型和识别器,而不会对整个系统造成太大的影响。
例如,当需要添加一种新的简单类型时,只需要在类型系统中定义该类型,并实现相应的识别器,然后将其集成到现有的推断流程中即可。
未来发展趋势
随着数据量的不断增长和数据类型的日益复杂,CSV表格列类型推断技术也将不断发展。以下是一些可能的未来发展趋势。
与大数据和云计算的结合
随着大数据技术的发展,CSV表格可能会以海量数据的形式存在于分布式系统中。将类型推断技术与大数据和云计算相结合,可以实现对大规模数据的高效处理。例如,利用云计算的强大计算能力,并行处理多个CSV文件的类型推断任务,提高处理速度。
同时,大数据平台提供的数据存储和管理功能,可以更好地支持类型系统的扩展和模型的训练,使得模型能够不断学习和适应新的数据模式。
智能化和自动化程度的提高
未来的类型推断系统可能会更加智能化和自动化。通过引入深度学习和强化学习等技术,系统可以自动学习数据中的模式和规律,无需人工手动定义大量的类型和模式。例如,系统可以自动识别新出现的数据类型,并自动生成相应的识别器和推断规则。
另外,系统可以实现自动的数据清洗和预处理,减少人工干预,提高数据处理的效率和准确性。
跨领域的应用拓展
CSV表格是一种广泛使用的数据格式,在不同的领域都有应用。未来,类型推断技术可能会拓展到更多的领域,如医疗、金融、教育等。在这些领域中,数据的类型和格式更加复杂,对类型推断的准确性和可靠性要求也更高。通过将类型推断技术与各领域的专业知识相结合,可以为不同领域提供更精准的数据分析和处理支持。
总结
CSV表格列类型推断是一项复杂而重要的任务,涉及到类型系统的设计、识别器的开发、机器学习模型的应用以及可视化和调整等多个方面。通过本文介绍的方法和技术,能够有效地推断CSV表格中列的类型,提高数据的理解和处理能力。
虽然目前的方法在实验中取得了较好的效果,但仍然面临着一些挑战,如复杂混合类型的识别和数据质量问题等。未来,随着技术的不断发展,类型推断技术将朝着智能化、自动化和跨领域应用的方向发展,为各个领域的数据处理和分析提供更强大的支持。
下面用 mermaid 流程图展示从数据问题处理到未来发展的流程:
graph TD;
A[数据质量问题] --> B[数据清洗与修复];
B --> C[复杂混合类型识别挑战];
C --> D[扩展类型系统与利用用户反馈];
D --> E[模型可扩展性设计];
E --> F[与大数据和云计算结合];
F --> G[智能化和自动化程度提高];
G --> H[跨领域应用拓展];
| 挑战 | 解决方案 |
|---|---|
| 数据质量问题 | 数据清洗、填充缺失值、修正格式错误 |
| 复杂混合类型识别 | 扩展类型系统、用户反馈学习、结合自然语言处理 |
| 模型可扩展性 | 模块化架构设计 |
通过以上的分析和探讨,希望能够为从事CSV表格数据处理和分析的人员提供有益的参考和启示,推动该领域技术的不断发展和应用。
超级会员免费看
1406

被折叠的 条评论
为什么被折叠?



