23、结合多种方法重构条状碎纸文本文件

结合多种方法重构条状碎纸文本文件

1. 问题背景与初步转化

在处理条状碎纸文本文件重构问题(RSSTD)时,我们可以先将其转化为非对称广义旅行商问题(AGTSP)。在构建AGTSP图时,有以下规则:
- 代表同一条状碎片的两个节点之间没有弧。
- 顶点 (v_β) 与代表每条碎片的其他节点通过两条反向弧相连。
- 弧的权重设置为:对于任意弧 (a = (v_{os}^s, v_{os’}^s’)),其中 (s, s’ \in S),(w_a = c(s, s’, o_s, o_{s’}));离开或进入 (v_β) 的弧的权重分别根据 (c(β, s, o_β, o_s)) 或 (c(s, β, o_s, o_β)) 来选择。

这样得到的AGTSP实例的最优解,当从 (v_β) 代表的虚拟碎片开始旅行时,也构成了原RSSTD实例的等成本解。解决AGTSP已有多种方法,如精确方法(分支切割算法)和元启发式方法(遗传算法),还可以将AGTSP实例转化为经典旅行商问题(TSP)来求解。

2. RSSTD进一步转化为TSP

2.1 传统转化方法的问题

基于RSSTD到AGTSP的转化,可进一步将RSSTD转化为TSP。传统方法是先将其转化为非对称旅行商问题(ATSP),再将ATSP转化为TSP,但存在两个主要缺点:一是从AGTSP到ATSP转化时,边的最大成本显著增加,可能导致求解转化实例时出现实际问题;二是从非对称TSP到对称TSP转化时,图中的节点数量翻倍。

2.2 新的转化方法

我们为RSSTD开发了一种新的转化方法,步骤如下:
1. 对于每个碎片 (s \in S),在节点 (v_D^s) 和 (v_U^s) 之间添加两条额外的弧(每个方向一条)。
2. 将这些新弧的权重都设置为零。
3. 交换 ((v_D^s, v_D^{s’})) 和 ((v_U^s, v_D^{s’})) 以及 ((v_D^s, v_U^{s’})) 和 ((v_U^s, v_U^{s’})) 的权重,交换后为相关弧的权重加上一个常数 (M)。
4. 由于集群 (C_β) 仅由一个节点组成,无需对该集群进行转化。

转化后的图是无向图,且任何通过此转化得到的图上的权重最小哈密顿回路都可以重新转化为关于目标函数的最优碎片排列。合适的 (M) 值为 (1 + m \cdot \max_{(s,s’)\in S\times S} c(s, s’, o_S, o’_S))。

3. 成本函数的定义

在RSSTD中,定义合适的成本函数 (c(s, s’, o_s, o_{s’})) 至关重要,用于判断两条碎片在给定方向下匹配的可能性。成本函数需具有斜对称性,且 (c(s, s’, o_s, o_{s’}) \geq 0) 始终成立。

3.1 简单成本函数 (c_1)

最简单的方法是遍历碎片 (s) 右边界的所有像素,并与碎片 (s’) 左边界的对应像素进行比较。若两个对应像素值不同,则 (c_1(s, s’, o_s, o_{s’})) 的值加1:
[c_1(s, s’, o_s, o_{s’}) = \sum_{y = 1}^{h_s} |v_r(s, y, o_s) - v_l(s’, y, o_{s’})|]
该成本函数计算效率高,但在某些情况下会返回误导性信息。

3.2 改进成本函数 (c_2)

为了改进 (c_1) 的不足,我们额外考虑当前评估位置上方和下方两个像素的值:
[c_2(s, s’, o_s, o_{s’}) = \sum_{y = 3}^{h_s - 2} p(s, s’, o_s, o_{s’}, y)]
其中:
[p(s, s’, o_s, o_{s’}, i) =
\begin{cases}
1, & \text{if } p’(s, s’, o_s, o_{s’}, i) \geq \tau \
0, & \text{otherwise}
\end{cases}
]
[p’(s, s’, o_s, o_{s’}, i) = |0.7 \cdot v_r(s, o_s, i) - 0.7 \cdot v_l(s’, o_{s’}, i) + 0.1 \cdot (v_r(s, o_s, i + 1) - v_l(s’, o_{s’}, i + 1)) + 0.1 \cdot (v_r(s, o_s, i - 1) + v_l(s’, o_{s’}, i - 1)) + 0.05 \cdot (v_r(s, o_s, i + 2) + v_l(s’, o_{s’}, i + 2)) + 0.05 \cdot (v_r(s, o_s, i - 2) + v_r(s’, o_{s’}, i - 2))|]
阈值 (\tau) 需谨慎选择,一个合适的值是0.1。

4. 解决RSSTD的方法

4.1 通过转化为TSP解决RSSTD

利用前面介绍的RSSTD到TSP的转化以及成本函数 (c_2),可以应用为TSP开发的方法来解决RSSTD。由于TSP图中的节点数总是原RSSTD实例中碎片数的两倍,对于实际问题,精确算法可能不适用。因此,我们使用Applegate等人实现的链式Lin - Kernighan启发式算法来解决转化后的RSSTD。

4.2 通过VNS和人类交互解决RSSTD

即使使用最精确的成本函数和精确求解RSSTD模型,也不一定能得到完全代表原始文档的正确排列。因为成本函数只是对两条碎片相邻可能性的近似度量,文档可能包含不太可能出现的场景,且文本可能按列排列,中间有空隙,在没有更多文档内容特定知识的情况下,很难找到分隔文本块的正确顺序。

我们结合人类知识、经验和直觉与可变邻域搜索(VNS)元启发式算法。人类在面对候选解决方案时,通常能轻松判断哪些部分可能正确排列、哪些碎片不应相邻或哪些部分方向错误。

4.2.1 VNS在HuGS中的应用

我们使用带有嵌入式可变邻域下降(VND)的通用可变邻域搜索(VNS)进行局部改进。VNS基于全局最优解一定是任何可能邻域下的局部最优解这一普遍观察,关键思想是进行局部搜索,并在达到局部最优时以明确定义的方式切换多个邻域结构。

4.2.2 VNS和VND的邻域结构

在我们的方法中,RSSTD的解由三个数组表示:碎片排列 (\pi)、存储每个碎片位置的向量 (p) 和方向向量 (o)。定义了多种移动类型:
| 邻域结构 | 移动类型 | 候选数量 |
| ---- | ---- | ---- |
| (N_1) | (R) | (O(n)) |
| (N_2) | (SW) | (O(n^2)) |
| (N_3) | (SH) | (O(n^2)) |
| (N_4) | (BR) | (O(n^2)) |
| (N_5) | (BS) | (O(n^4)) |

其中,(R) 表示旋转(将一个碎片旋转180°),(SW) 表示交换(交换两个任意元素),(SH) 表示移动(将一个碎片向右或向左移动给定数量),(BR) 表示块旋转(旋转一个区间内的所有碎片并交换相应位置的碎片),(BS) 表示块交换(交换两个任意长度、不重叠的碎片子序列)。

在VND中,按表中顺序考虑这五种邻域结构,使用增量评估方案,每个移动可以在常数时间内评估。VNS的摇晃操作是执行 (i) 个随机交换移动((1 \leq i \leq 4)),初始解使用随机解。

4.3 用户交互

为了将用户交互集成到优化过程中,定义了一组有效的用户移动。所有之前描述的移动类型都包含在允许的用户操作集中,此外,用户还可以:
- 禁止碎片对之间的“错误”邻域关系。
- 锁定“正确”的碎片子序列,在后续优化过程中将其视为原子元碎片。
- 锁定碎片的方向。

这些操作都可以撤销。我们对HuGS框架的扩展提供了一种简单直观的方式来可视化候选解决方案、执行用户操作,或让VNS或基于Lin - Kernighan的方法继续运行一段时间。

5. 实验结果

5.1 实验设置

所有实验在配备4GB RAM的Dual Core AMD Opteron 2214上进行。HuGS框架和VNS方法用Java实现,使用Applegate等人实现的Concorde TSP求解器,并通过Java Native Interface集成到Java环境中。测试实例通过虚拟切割纸质文档生成,忽略实际切割和扫描过程中可能丢失的信息或引入的错误。

5.2 解决方案质量评估

我们将解决方案的质量定义为相对于原始文档正确重构的碎片子序列的数量,正确识别的子序列的长度对质量度量没有影响。这是因为经验观察表明,质量达到5的重构页面上的文本通常相对容易阅读,而质量大于6的解决方案中的文本通常很难或几乎不可能阅读。这种评级方法使我们能够比较不同碎片宽度和/或碎片数量的文档的结果。

5.3 结果比较

我们使用六个测试实例,这些实例使用不同数量的碎片宽度进行切割。实例 (p1) 到 (p5) 是单文本页面,具有不同特征,实例 (p6) 由10页包含打印和手写文本的内容组成。

5.3.1 TSP求解器结果

表2列出了使用TSP求解器在实例 (p1) 到 (p6) 上的结果,分别使用成本函数 (c_1) 和 (c_2),并将CPU时间限制为5秒和50秒。所有值是30次运行的平均质量。可以观察到,特别是对于实例 (p2)、(p4) 和 (p6),使用 (c_2) 获得的质量明显优于使用 (c_1) 获得的质量。即使是短时间运行,标准偏差也很小,将时间限制提高到50秒时,质量改善不明显。日志文件显示,大多数情况下,最终解决方案在0.5秒后找到。对于10页的实例 (p6),结果非常好,例如150个碎片和成本函数 (c_2) 时,10页中只有3或4页的质量为2,其他页质量为1。

页面 时间 30条碎片 50条碎片 100条碎片 150条碎片 300条碎片
(c_1) (c_2) (c_1) (c_2) (c_1) (c_2) (c_1) (c_2) (c_1) (c_2)
(p1) 5s 1.4(0.5) 1.4(0.5) 1.6(0.5) 1.4(0.5) 4.6(0.5) 1.5(0.5) 5.5(0.6) 1.5(0.5) 38.6(0.7) 1.6(0.5)
50s 2.0(0.0) 1.0(0.0) 2.0(0.0) 2.0(0.0) 2.0(0.0) 2.0(0.0) 7.0(0.0) 2.0(0.0) 27.6(0.5) 2.0(0.0)
(p2) 5s 2.4(1.4) 1.5(0.5) 9.4(0.7) 4.1(0.7) 18.2(0.8) 11.8(1.2) 31.9(0.7) 26.5(0.5) 108.1(0.8) 78.3(0.6)
50s 4.0(0.0) 2.0(0.0) 9.0(0.0) 5.0(0.0) 18.0(0.0) 13.0(0.0) 34.0(0.0) 25.0(0.0) 103.3(1.1) 73.0(0.0)
(p3) 5s 1.5(0.5) 1.6(0.5) 1.6(0.5) 1.5(0.5) 1.5(0.5) 1.4(0.5) 1.5(0.5) 1.5(0.5) 7.5(0.5) 1.5(0.5)
50s 1.0(0.0) 2.0(0.0) 1.0(0.0) 2.0(0.0) 1.0(0.0) 1.0(0.0) 2.0(0.0) 1.0(0.0) 8.0(0.0) 1.0(0.0)
(p4) 5s 1.5(0.5) 1.7(0.5) 5.4(0.5) 1.4(0.5) 20.4(0.5) 3.8(1.6) 27.2(1.0) 16.7(0.9) 67.5(0.6) 41.5(0.5)
50s 2.0(0.0) 2.0(0.0) 5.0(0.0) 1.0(0.0) 17.0(0.0) 5.0(0.0) 29.0(0.9) 16.0(0.0) 65.3(0.9) 43.0(0.0)
(p5) 5s 1.3(0.5) 1.5(0.5) 9.4(0.5) 1.4(0.5) 15.4(0.5) 5.5(0.5) 37.7(0.5) 9.4(0.5) 93.3(1.1) 27.4(0.5)
50s 2.0(0.0) 1.0(0.0) 10.0(0.0) 2.0(0.0) 15.0(0.0) 6.0(0.0) 34.5(0.5) 6.0(0.0) 83.8(0.7) 27.0(0.0)
(p6) 5s 1.6(0.5) 1.6(0.5) 1.3(0.5) 1.5(0.5) 1.3(0.4) 1.4(0.5) 14.8(0.8) 4.5(0.5) 107.1(1.6) 14.3(0.7)
50s 2.0(0.0) 2.0(0.0) 2.0(0.0) 2.0(0.0) 1.4(0.5) 2.0(0.0) 4.6(0.5) 5.0(0.0) 15.7(1.0) 14.0(0.0)
5.3.2 VNS结果

表3列出了使用VNS在实例 (p1) 到 (p6) 上的结果。同样可以观察到,在许多情况下,使用 (c_2) 获得的结果优于使用 (c_1) 获得的结果。

页面 30条碎片 50条碎片 100条碎片 150条碎片
(c_1) (c_2) (c_1) (c_2) (c_1) (c_2) (c_1) (c_2)
(p1) 2.0(0.0) 2.0(0.0) 4.0(0.0) 2.0(0.0) 2.5(1.5) 2.0(0.0) 27.7(6.7) 19.5(7.1)
(p2) 2.8(1.3) 2.0(0.0) 11.6(1.4) 4.7(1.2) 20.5(2.2) 14.8(2.5) 37.3(2.0) 26.0(1.8)
(p3) 2.0(0.0) 2.0(0.0) 2.0(0.0) 2.0(0.0) 2.1(0.7) 2.0(0.0) 25.6(7.6) 16.8(6.8)
(p4) 2.0(0.0) 2.0(0.0) 4.3(1.2) 3.2(0.4) 13.2(3.3) 7.1(1.7) 27.8(2.2) 18.7(2.5)
(p5) 2.0(0.0) 2.0(0.0) 10.2(0.4) 2.1(0.4) 17.8(2.8) 6.2(0.6) 41.4(7.3) 19.6(7.6)
(p6) 1.0(0.0) 1.0(0.0) 1.0(0.0) 1.0(0.0) 1.0(0.0) 1.0(0.0) 4.8(1.5) 5.6(1.4)

特别是在考虑5秒的时间限制时,我们的方法明显优于Ukovich等人的方法。在对实例 (p6) 进行340条碎片的测试中,30次运行中有16次达到最优解,其他情况只有一页质量为2,其他页完全重构。

综上所述,通过将RSSTD转化为TSP以及结合VNS和人类交互的方法,在解决条状碎纸文本文件重构问题上取得了较好的效果,并且改进的成本函数 (c_2) 通常能提供比 (c_1) 更好的解决方案质量。

6. 方法总结与流程梳理

6.1 整体方法总结

为了解决条状碎纸文本文件重构问题(RSSTD),我们采用了多种方法相结合的策略。首先将RSSTD转化为非对称广义旅行商问题(AGTSP),再进一步转化为经典旅行商问题(TSP)进行求解。同时,结合可变邻域搜索(VNS)元启发式算法和人类交互,充分发挥人类的知识、经验和直觉,提高解决方案的质量。

6.2 流程梳理

下面是解决RSSTD问题的整体流程:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px

    A([开始]):::startend --> B(将RSSTD转化为AGTSP):::process
    B --> C(将AGTSP转化为TSP):::process
    C --> D{选择求解方法}:::process
    D -->|TSP求解器| E(使用链式Lin - Kernighan启发式算法求解):::process
    D -->|VNS和人类交互| F(初始化VNS):::process
    F --> G(执行VNS和VND搜索):::process
    G --> H(人类交互):::process
    H --> I{是否达到满意解}:::process
    I -->|否| G
    I -->|是| J([结束]):::startend
    E --> J

具体步骤如下:
1. 问题转化
- 将RSSTD问题转化为AGTSP,构建AGTSP图,设置弧的权重。
- 通过新的转化方法将AGTSP转化为TSP,避免传统方法的缺点。
2. 求解方法选择
- TSP求解器 :使用链式Lin - Kernighan启发式算法求解转化后的TSP问题。
- VNS和人类交互
- 初始化VNS,使用随机解作为初始解。
- 执行VNS和VND搜索,根据定义的邻域结构进行局部搜索和摇晃操作。
- 引入人类交互,人类可以进行碎片排列调整、禁止邻域关系、锁定碎片序列和方向等操作。
- 判断是否达到满意解,如果未达到则继续进行VNS和VND搜索,直到达到满意解或满足终止条件。

7. 关键技术点分析

7.1 成本函数的选择

成本函数在RSSTD问题中起着关键作用,它直接影响到解决方案的质量。通过实验结果可以看出,改进的成本函数 (c_2) 通常比简单成本函数 (c_1) 表现更好。这是因为 (c_2) 不仅考虑了当前像素的匹配情况,还额外考虑了当前评估位置上方和下方两个像素的值,能够更准确地判断两条碎片在给定方向下的匹配可能性。

7.2 VNS和人类交互的优势

VNS元启发式算法通过切换多个邻域结构,能够跳出局部最优解,提高搜索的全局性能。而人类交互的引入,充分利用了人类的知识、经验和直觉,能够处理成本函数无法准确判断的情况,如文档中的特殊场景和文本排列方式。通过两者的结合,可以显著提高解决方案的质量和准确性。

7.3 新转化方法的意义

将AGTSP转化为TSP的新方法避免了传统方法中边成本增加和节点数量翻倍的问题,使得问题的求解更加高效和可行。新方法通过添加零权重弧和交换弧的权重,使得转化后的图成为无向图,并且能够保证权重最小哈密顿回路可以重新转化为最优碎片排列。

8. 实际应用与展望

8.1 实际应用

条状碎纸文本文件重构问题在许多领域都有实际应用,如文件恢复、历史文献修复、情报分析等。通过本文介绍的方法,可以有效地提高碎纸文本文件的重构效率和质量,为这些领域的工作提供有力支持。

8.2 展望

虽然本文提出的方法在实验中取得了较好的效果,但仍然存在一些可以改进的地方。例如,可以进一步优化成本函数,考虑更多的特征信息,提高成本函数的准确性。同时,可以探索更高效的搜索算法和人类交互方式,减少求解时间和提高用户体验。此外,对于包含彩色或灰度信息的文档,可以扩展模型,充分利用这些信息提高重构质量。

总之,通过不断地研究和改进,我们有望在条状碎纸文本文件重构问题上取得更好的成果,为实际应用提供更强大的技术支持。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值