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 算法
199 每月下载量
81KB
1.5K SLoC
bies
本项目中包含的算法将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