数据集成中处理语义异质性的方法
一、语义异质性处理基础
在数据集成过程中,引入一定灵活性时,传统挑战在于界定其范围。以往有诸多工作提出了用于集成或检索目的的语义距离,但我们不希望用户指定该距离,因为这并非自然的思考方式。在我们的方法中,用户通过分层字典中的优先级节点自动定义值的类别。若两个值属于同一类别,则认为它们在语义上相近;反之则语义上相远。语义算子会被转换为经典算子,然后由数据库管理系统(DBMS)对从数据源提取的关系执行操作,此转换需要由改编自语言词典的字典提供元数据。
二、元数据库提供的语言知识
2.1 通用语言词典
目前有多个构建电子语言词典的项目正在进行,如 CYC、EDR 和 WordNet 等。这些通用语言词典除了提供词法和句法信息外,还提供单词之间的语义链接,如同义词关系,以及单词与概念、概念与概念之间的链接,如反义关系、上下位关系(is - a)和部分 - 整体关系(part - of)。其中,is - a 链接有助于概念模式的细化,并以“概念层次结构”的形式组织。其他链接由“规范图”支持,用于指定给定动作中涉及的概念之间的预期关系。
通用语言词典在检索模式或数据中名词的语义以进行集成方面非常有帮助,能弥补建模过程中丢失的所有语义。例如,它们可用于检测不同视图对象之间的泛化链接,以及推断每个实体在关系中所扮演的角色。然而,通用语言词典在多源信息系统(MSIS)的数据集成方面存在一些局限性,主要体现在以下三个层面:
1.
词汇方面
:其词汇适用于描述现实世界中最常见的概念,适合知识表示,包括数据库模式,但无法涵盖实例的所有可能值。大多数实例值是特定于其所有者的,只有部分可被视为常用词汇。
2.
链接方面
:提供的链接适用于模式级别,但对于数据层面的问题,还需要其他更贴近数据问题的链接。例如,当同一属性在不同数据源中有不同值时,从对象到属性的基数链接有助于决策,但通用词典中没有此类链接。
3.
规范化方面
:通用词典在一组同义词或概念层次结构的一个分支内不提供偏好选择。
2.2 更合适的语言词典建议
鉴于上述局限性,我们建议丰富语言词典,使其更面向数据调和。以车辆颜色命名的词典为例,颜色在汽车营销中至关重要,常用于许多销售分析。由于颜色命名通常特定于制造商,可能有大量的命名方式。
2.2.1 概念层次结构
语言词典的主要结构是概念层次结构,用于存储“is - a”关系。概念层次结构的叶子节点通常是企业的命名。这种词典的特点是将常用词汇名称和类似代码的名称整合在同一层次结构中。构建这样的词典需要相关企业的合作,因此需要一个自动程序来为词典提供数据。以颜色命名为例,颜色可根据三个基本颜色轴用三个坐标编码。有些颜色在该空间中只有一个点(通常是制造商特定颜色,如“Glacier”),而其他颜色(通常是常见名称颜色,如“red”)则覆盖一个体积。层次结构会自动构建:若一种颜色对应的体积包含另一种颜色的体积(可能是一个点),则前者包含后者。
以下是概念层次结构的示例:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(blue):::process --> B(azure):::process
A --> C(navy):::process
A --> D(light blue):::process
D --> E(Glacier):::process
F(red):::process --> G(vermilion):::process
F --> H(Sevilla):::process
I(green):::process
2.2.2 优先级级别
我们可以直观地在层次结构中引入优先级节点的概念,让用户指定等效值的类别。优先级节点在图中用圆圈表示,如“blue”、“green”和“red”就是优先级节点。优先级节点所诱导的类别由以该优先级节点为根的子树构成,即优先级节点的类别包含其包含的所有值。
优先级节点的选择是任意的,可能因查询而异,用户可以将其作为参数进行更改。这是一种简单自然的方式,让用户无需操作距离即可精确指定语义相近的值的类别。实际上,这种选择通常相当稳定,一个分支的优先级节点通常是该分支中在语言中最常被提及的节点。默认优先级节点可以是在其包含和被包含节点的定义中最常被提及的节点。例如,在常用词典中,“vermilion”和“warm color”的定义都使用了“red”这个命名。
2.2.3 基数链接
为了根据某个标准调和数据,我们需要知道一个对象对于该标准是否可能有多个值。词典存储了数据库领域中熟知的“基数”关系。例如,有一个表存储了从对象到颜色属性的基数关系,部分示例如下:
| 对象 | 颜色属性基数 |
| ---- | ---- |
| 汽车 | 单值 |
| 旗帜 | 多值 |
2.3 优先级级别语言词典提供的断言
借助上述语言层次结构及其优先级级别,词典提供断言来描述两个值之间的现有关系。我们引入了不同类型的断言,分别描述等价关系、包含关系、同类别关系和不同类别关系。这些断言将用于后续描述的语义算子。
1.
等价关系
:两个值 A 和 B 等价,当且仅当它们相等或为同义词。
2.
包含关系
:值 A 包含于值 B,当且仅当在概念层次结构中存在从 A 到 B 的路径(即 B 包含 A),反之则称 A 包含 B。例如,在图 4 的词典中,“Glacier”包含于“light blue”。
3.
同类别关系
:两个值 A 和 B 属于同类别,当且仅当存在一个优先级节点 C 同时包含 A 和 B。例如,在图 4 的词典中,“Azure”和“Navy”属于同类别,因为它们都属于“blue”这个优先级节点。
4.
不同类别关系
:两个值 A 和 B 属于不同类别,当且仅当不存在一个优先级节点同时包含 A 和 B(即它们不属于同类别)。
三、语义算子
3.1 语义算子的表示
语义算子需要用要进行语言匹配的属性集进行参数化。例如,关系 CAR(…, paint,type,…) 和 VEHICLE(…, color,type,…) 的语义并集表示为:SemUnion ((paint,color),(type,type))。当语义灵活性仅涉及一对属性,且这两个属性在两个关系中名称相同时,我们可以简写,如关系 car(…,color,…) 和关系 vehicle(…,color,…) 的 color - SemUnion。同样,其他算子也可进行类似简写,如“color - SemJoin”、“color - SemRestriction”、“color - Intersection”和“color - SemDifference”。
3.2 语义连接算子
语义连接算子(SemJoin)用于处理如“人们购买的汽车座套和汽车是否颜色相同?”这类查询。由于汽车和座套的颜色命名可能因制造商不同而差异很大,对于此类查询,用户并不关心颜色名称的精确匹配,只期望颜色在语言词典的优先级级别上相同。
在 SemJoin 算法中使用语言断言的情况如下:
考虑关系 R1(A1,…Ai,…An) 和 R2(B1,…,Bi - 1,Ai,Bi + 1,…,Bm) 在条件 R1.Ai = R2.Ai 和 Pi(Pi 是一组其他连接谓词,如 R1.A3 = R2.B4)下的 Ai - SemJoin。对于 R1.Ai 和 R2.Ai 的每次匹配比较:
1. 若 R1.Ai 与 R2.Ai 等价,则匹配成功。
2. 若 R1.Ai 包含 R2.Ai,则匹配成功。
3. 若 R1.Ai 包含于 R2.Ai,则匹配成功。
4. 若 R1.Ai 和 R2.Ai 属于同类别,则匹配成功。
5. 若 R1.Ai 和 R2.Ai 属于不同类别,则匹配失败。
可以注意到,SemJoin 算子的结果强烈依赖于优先级级别(同类别情况导致匹配成功,不同类别情况导致匹配失败),这与在查询中引入自然语言的想法一致,因为优先级级别恰好解决了自然语言中“它们颜色是否相同?”这类句子的含义问题。
3.3 语义限制算子
语义限制算子(SemRestriction)旨在回答如“红色汽车是否比其他颜色汽车发生更多事故?”这类查询,即使汽车存储的颜色不是“red”,而是“Vermilion”或“Sevilla”。
在 SemRestriction 算法中使用语言断言的情况如下:
考虑关系 R(A1,…Ai,…An) 在条件 R1.Ai = valA 下的 Ai - SemRestriction。对于 R1.Ai 和 valA 的每次匹配比较:
1. 若 R1.Ai 与 valA 等价,则匹配成功。
2. 若 R1.Ai 包含 valA,则匹配失败。
3. 若 R1.Ai 包含于 valA,则匹配成功。
4. 若 R1.Ai 和 valA 属于同类别,则匹配失败。
5. 若 R1.Ai 和 valA 属于不同类别,则匹配失败。
SemRestriction 算子使用语言词典的层次结构,但不考虑优先级级别。例如,当用户想要所有朱红色汽车时,显然希望得到颜色被朱红色包含的所有汽车,而不考虑优先级级别。若在结果中包含仅知道是红色的汽车,会导致结果中需要区分“是”朱红色的汽车和“可能是”朱红色但也可能是其他红色的汽车,在本工作中未考虑这种情况。
3.4 语义并集算子
在数据仓库系统中,并集算子的作用是判断两个元组是否对应同一对象,并将它们合并到结果关系中。语义并集算子(SemUnion)在技术上可在这两方面提供帮助,但在实践中,它特别适用于正确合并对应同一对象的两个元组。为此,该算子需应用于非键属性。
在 SemUnion 算法中使用语言断言的情况如下:
考虑关系 R1(A1,…Ai,…An) 和 R2(A1,…,Ai,…An) 的 Ai - SemUnion。对于 R1×R2 中所有 Aj(j≠i)值匹配的元组对:
1. 若 R1.Ai 与 R2.Ai 等价,则将两个元组合并。
2. 若 R1.Ai 包含 R2.Ai,则将两个元组合并,且 Ai 的取值选择 R2.Ai。
3. 若 R1.Ai 包含于 R2.Ai,则将两个元组合并,且 Ai 的取值选择 R1.Ai。
4. 若 (R1.Ai 和 R2.Ai 属于同类别) 或 (R1.Ai 和 R2.Ai 属于不同类别):
- 若 R1.Ai 和 R2.Ai 的基数都是单值的,则两个元组不合并,视为不一致。
- 否则,将两个元组插入结果中。
该算法不仅使用了概念层次结构,还使用了语言词典的额外链接,即基数链接。此外,该算子的一个有趣用途是检查元数据库中存储的一些模式间断言的一致性,即模式属性之间的等价断言。若两个属性通过断言表明语义等价,但未发现它们的值在语言上等价,可能意味着这些属性具有不同的含义,需要重新考虑它们之间的语义等价断言。
3.5 语义交集和语义差集算子
语义交集算子(SemIntersection)和语义差集算子(SemDifference)与语义并集算子相似,它们以相同的方式使用语言知识。以下是每个算子的示例:
语义交集示例
| CAR n° | color |
|---|---|
| 1 | azura |
| 2 | vermilion |
| CAR n° | color |
|---|---|
| 1 | blue |
| 2 | blue |
| 3 | red |
语义交集结果:
| CAR n° | color |
| ---- | ---- |
| 1 | azura |
| + INCONSISTENCIES | |
| n° | color |
| 2 | vermilion |
| color | blue |
语义差集示例
| CAR n° | color |
|---|---|
| 1 | azura |
| 2 | vermilion |
| CAR n° | color |
|---|---|
| 1 | blue |
| 2 | blue |
| 3 | red |
| CAR n° | color |
|---|---|
| 1 | 2 |
| 4 | azura |
| vermilion | Glacier |
语义差集结果:
| CAR n° | color |
| ---- | ---- |
| 1 | azura |
| + INCONSISTENCIES | |
| n° | color |
| 2 | vermilion |
| color | blue |
| 4 | Glacier |
四、通过经典代数算子实现算法
语义算子通过嵌入式 SQL 自动修改关系后,调用经典算子进行计算。实现使用 PL/SQL(针对 ORACLE 8 DBMS),在这个原型中,语言词典也使用 ORACLE 8 存储。
4.1 语义连接的实现
为了计算两个关系 R1(…, A,…) 和 R2(…,A,…) 在条件 R1.X = R2.Y(X 是 R1 中包含 A 的一组属性,Y 是 R2 中包含 A 的一组属性)下的 A - 语义连接,需要执行以下三个步骤:
1.
步骤 1
:在 R1 关系的模式中添加一个新属性 SemA,在 R2 关系的模式中也添加一个新属性 SemA。将这两个新关系分别称为 R1’ 和 R2’。
2.
步骤 2
:R1’ 和 R2’ 的实例通过以下算法计算:R1 中的每个元组 r1 转换为 R1’ 中的元组 r1’,将 SemA 的值填充为语言词典中包含 A 的优先级节点。若没有优先级节点包含 A,则该值为 A 本身。若有多个优先级节点包含 A,则 r1 元组在 R1’ 中产生多个元组,每个元组的 SemA 值对应一个优先级节点。对 R2’ 执行相同的过程。
3.
步骤 3
:将 R1 和 R2 在条件 X = Y 下的语义连接转换为 R1’ 和 R2’ 在条件 X’ = Y’ 下的经典连接,其中 X’ = ((X ∪ SemA) - A),Y’ = (Y ∪ SemA) - A。
以下是一个语义连接的示例:
| COVER | color | owner |
| ---- | ---- | ---- |
| | sky | 100 |
| | vermilion | 300 |
| | lemon | 400 |
| CAR | color | owner |
|---|---|---|
| azure | 100 | |
| blue | 200 | |
| red | 300 |
语义连接:CAR.color = COVER.color 且 CAR.owner = COVER.owner
转换为经典连接后:CAR.SemCOLOR = COVER.SemCOLOR 且 CAR.owner = COVER.owner
转换后的关系:
| CAR | color | owner | Semcolor |
| ---- | ---- | ---- | ---- |
| | azure | 100 | blue |
| | blue | 200 | blue |
| | red | 300 | red |
| COVER | color | owner | Semcolor |
|---|---|---|---|
| sky | 100 | blue | |
| vermilion | 300 | red | |
| lemon | 400 | yellow |
一个涉及此类连接的查询示例是“有多少人购买的汽车和座套颜色相同?”这是一个典型的营销问题,结果可能会影响后续的报价。通过上述步骤将语义连接转换为经典连接后,经过投影操作可得到购买座套和汽车颜色相同的人的集合 {100, 300}。
需要注意的是,本文未涉及语义算子执行的优化问题,这可能是该方法的一个弱点。显然,若语义算子在 DBMS 内部实现,它们可以利用一系列优化技术。
五、语义算子实现的详细流程与示例分析
5.1 语义连接实现流程总结
为了更清晰地理解语义连接的实现,我们将上述步骤总结如下:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(开始):::process --> B(添加新属性 SemA 到 R1 和 R2):::process
B --> C(计算 R1' 和 R2' 的实例):::process
C --> D(将语义连接转换为经典连接):::process
D --> E(结束):::process
这个流程图展示了语义连接实现的主要步骤,从添加新属性开始,经过实例计算,最终转换为经典连接。
5.2 语义连接示例的详细分析
以“有多少人购买的汽车和座套颜色相同?”这个查询为例,我们详细分析其执行过程。
-
步骤 1:添加新属性
- 对于关系
CAR
,添加新属性
Semcolor
。
- 对于关系
COVER
,同样添加新属性
Semcolor
。
-
步骤 2:计算实例
- 在
CAR
关系中:
-
azure
对应的优先级节点为
blue
,所以
Semcolor
填充为
blue
。
-
blue
的
Semcolor
为
blue
。
-
red
的
Semcolor
为
red
。
- 在
COVER
关系中:
-
sky
对应的优先级节点为
blue
,
Semcolor
填充为
blue
。
-
vermilion
对应的优先级节点为
red
,
Semcolor
填充为
red
。
-
lemon
对应的优先级节点为
yellow
,
Semcolor
填充为
yellow
。
-
步骤 3:转换为经典连接
- 原语义连接条件
CAR.color = COVER.color 且 CAR.owner = COVER.owner
转换为
CAR.SemCOLOR = COVER.SemCOLOR 且 CAR.owner = COVER.owner
。
- 通过这个经典连接,我们可以得到满足条件的元组,再经过投影操作,得到购买座套和汽车颜色相同的人的集合 {100, 300}。
5.3 语义算子实现的潜在问题与挑战
虽然语义算子的实现提供了处理语义异质性的有效方法,但也存在一些潜在问题和挑战:
1.
性能问题
:如前文所述,语义算子执行的优化未在本文中涉及,这可能导致在处理大规模数据时性能下降。特别是在添加新属性和计算实例的过程中,可能会增加额外的计算开销。
2.
词典维护
:语言词典需要不断更新和维护,以适应新的词汇和语义关系。随着业务的发展和变化,新的颜色命名、概念等可能会出现,需要及时更新词典以保证语义处理的准确性。
3.
优先级节点选择的主观性
:优先级节点的选择是任意的,虽然在实践中通常比较稳定,但不同用户可能会根据自己的需求和理解选择不同的优先级节点,这可能会导致结果的不一致性。
六、语义算子在实际应用中的拓展与思考
6.1 语义算子在不同领域的应用
语义算子的方法可以应用于多个领域,以下是一些具体的应用场景:
1.
电子商务
:在商品搜索和推荐中,处理不同商家对商品属性的不同命名,提高搜索结果的准确性和相关性。例如,不同商家对手机颜色的命名可能不同,通过语义算子可以将这些不同的命名进行统一处理,为用户提供更准确的搜索结果。
2.
医疗领域
:整合不同医疗机构的病历数据,解决医学术语的语义异质性问题。不同医院可能对疾病名称、症状等有不同的表述,语义算子可以帮助将这些数据进行有效的整合和分析。
3.
金融领域
:在金融数据的整合和分析中,处理不同金融机构对金融产品和交易的不同描述。例如,不同银行对理财产品的名称和特点的描述可能存在差异,通过语义算子可以实现数据的统一和比较。
6.2 语义算子与其他技术的结合
为了进一步提高语义算子的性能和效果,可以将其与其他技术结合使用:
1.
机器学习
:利用机器学习算法对语言词典进行自动更新和优化。例如,通过文本挖掘和自然语言处理技术,从大量的文本数据中提取新的语义关系和词汇,自动更新词典。
2.
图数据库
:将语言词典存储在图数据库中,利用图数据库的强大查询和分析能力,提高语义算子的执行效率。图数据库可以更直观地表示语义关系,方便进行复杂的语义查询和推理。
3.
数据挖掘
:结合数据挖掘技术,对语义算子处理后的数据进行深入分析,发现潜在的模式和规律。例如,在电子商务领域,通过数据挖掘可以发现用户对不同颜色商品的偏好,为商家提供更精准的营销策略。
6.3 未来发展方向
随着数据量的不断增加和语义异质性问题的日益复杂,语义算子的研究和应用还有很大的发展空间:
1.
更智能的语义处理
:引入人工智能和深度学习技术,实现更智能的语义理解和处理。例如,利用深度学习模型自动学习语义关系,提高语义算子的准确性和灵活性。
2.
跨领域语义集成
:实现不同领域之间的语义集成,打破领域之间的语义壁垒。例如,将医疗领域和金融领域的数据进行语义集成,为综合分析和决策提供支持。
3.
实时语义处理
:在实时数据处理场景中应用语义算子,满足实时性要求。例如,在实时监控和预警系统中,及时处理和分析语义异质的数据,提供及时的决策支持。
七、总结
本文介绍了处理数据集成中语义异质性的方法,包括语义异质性处理基础、元数据库提供的语言知识、语义算子的定义和实现等内容。通过引入优先级节点、基数链接等概念,以及语义连接、语义限制、语义并集等算子,有效地处理了语义异质性问题。同时,通过经典代数算子实现语义算子的计算,为实际应用提供了可行的解决方案。
然而,语义算子的实现还存在一些问题和挑战,如性能优化、词典维护等。未来,我们可以通过与其他技术的结合,拓展语义算子的应用领域,提高其性能和效果。随着技术的不断发展,语义算子有望在更多领域发挥重要作用,为数据集成和分析提供更强大的支持。
以下是本文主要内容的总结表格:
| 内容模块 | 主要内容 |
| ---- | ---- |
| 语义异质性处理基础 | 用户通过优先级节点定义值的类别,语义算子转换为经典算子执行 |
| 元数据库语言知识 | 通用语言词典的局限性,提出更合适的语言词典建议,包括概念层次结构、优先级级别和基数链接 |
| 语义算子 | 定义了语义连接、语义限制、语义并集、语义交集和语义差集等算子,并说明了其使用语言断言的规则 |
| 算法实现 | 通过嵌入式 SQL 和经典代数算子实现语义算子的计算,以语义连接为例介绍了具体步骤 |
| 潜在问题与挑战 | 性能问题、词典维护、优先级节点选择的主观性 |
| 实际应用拓展 | 在电子商务、医疗、金融等领域的应用,与机器学习、图数据库、数据挖掘等技术的结合 |
| 未来发展方向 | 更智能的语义处理、跨领域语义集成、实时语义处理 |

131

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



