4个版本

0.2.2 2024年5月28日
0.2.1 2023年4月14日
0.2.0 2023年1月26日
0.1.1 2022年5月17日

#364 in 算法

Download history 146/week @ 2024-05-26 13/week @ 2024-06-02 4/week @ 2024-06-09 1/week @ 2024-06-16

199 每月下载量

Unicode-3.0

81KB
1.5K SLoC

bies crates.io

本项目中包含的算法将BIES矩阵(LSTM分割神经网络的输出)转换为具体的段边界。在BIES中,B = 段的开始;I = 段内部;E = 段的结束;S = 单个段(开始和结束)。

这些算法始终产生有效的断点位置(在图形群边界处);它们不假设神经网络总是预测有效位置。

示例

例如,假设你有以下BIES矩阵

|   B   |   I   |   E   |   S   |
|-------|-------|-------|-------|
| 0.01  | 0.01  | 0.01  | 0.97  |
| 0.97  | 0.01  | 0.01  | 0.01  |
| 0.01  | 0.97  | 0.01  | 0.01  |
| 0.01  | 0.97  | 0.01  | 0.01  |
| 0.01  | 0.01  | 0.97  | 0.01  |
| 0.01  | 0.01  | 0.01  | 0.97  |
| 0.97  | 0.01  | 0.01  | 0.01  |
| 0.01  | 0.01  | 0.97  | 0.01  |

此矩阵解析为

01234567
SBIIESBE

然后断点为:0、1、5和8(四个段)。

但是,算法的BIES可能无效。例如,“BEE”无效,因为第二个“E”没有结束任何单词。本项目中算法的目的是保证始终输出有效的断点和BIES。

算法

实现了以下算法

1a: 按顺序遍历字符串中的每个图形群边界。查看边界周围的代码点的BIES向量。在那个边界处,只有有效的结果是{EB, ES, SB, SS}(断点)或{II, BI, IE, BE}(无断点)。将有效断点和无断点概率的总和,并基于哪个总和更高来决定是否插入断点。对字符串中的所有图形群边界重复此操作。输出是一个单词边界列表,如果需要可以将其转换回BIES。

1b: 与1a相同,但不是取总和,而是取单个最大值。

2a: 逐个遍历BIES序列中的每个元素。对于每个元素,查看包含该元素及其两个相邻元素的元组。通过归纳,假设元组中的第一个元素是正确的。现在,根据元素之后是否有代码点边界,计算所有有效的BIES元组的概率,并根据这些结果,选择当前元素最可能的价值。

3a: 逐一检查字符串中所有可能的BIES的概率。此算法具有指数级运行时间。

更多信息

有关开发、作者、贡献等更多信息,请访问ICU4X 主页

依赖项

~2.5MB
~51K SLoC