库名称: transformers
标签:
- 分块处理
- RAG
许可证: mit
数据集:
- bookcorpus/bookcorpus
- JeanKaddour/minipile
语言:
- 英文
基础模型:
- answerdotai/ModernBERT-large
Chonky modernbert large v1
Chonky 是一款能够智能地将文本分割成有意义的语义块的Transformer模型。该模型可用于RAG系统。
模型描述
该模型处理文本并将其划分为语义连贯的片段。这些分块可以作为RAG流程的一部分,输入到基于嵌入的检索系统或语言模型中。
⚠️该模型在长度为1024的序列上进行了微调(默认情况下ModernBERT支持最长8192的序列)。
使用方法
我为这个模型开发了一个小型Python库:chonky
使用示例如下:
from chonky import ParagraphSplitter
# 首次运行时会下载transformer模型
splitter = ParagraphSplitter(
model_id="mirth/chonky_modernbert_large_1",
device="cpu"
)
text = """大学前我在校外主要专注两件事:写作和编程。我不写论文,而是写当时(可能现在也是)初学者该写的短篇小说。我的故事很糟糕,几乎没有情节,只有情感强烈的角色——我以为这样能让故事显得深刻。九年级时(13-14岁),我第一次尝试在学区用于"数据处理"的IBM 1401上编程。这台机器恰好在初中地下室,我和朋友Rich Draves获准使用。那里就像迷你邦德反派巢穴,各种外星机器模样的设备——CPU、磁盘驱动器、打印机、读卡器——架设在荧光灯下的高架地板上。"""
for chunk in splitter(text):
print(chunk)
print("--")
示例输出
大学前我在校外主要专注两件事:写作和编程。我不写论文,而是写当时(可能现在也是)初学者该写的短篇小说。
--
我的故事很糟糕,几乎没有情节,只有情感强烈的角色——我以为这样能让故事显得深刻。九年级时(13-14岁),我第一次尝试在学区用于"数据处理"的IBM 1401上编程。
--
这台机器恰好在初中地下室,我和朋友Rich Draves获准使用。
--
那里就像迷你邦德反派巢穴,各种外星机器模样的设备——CPU、磁盘驱动器、打印机、读卡器——架设在荧光灯下的高架地板上。
--
也可以使用标准NER流程:
from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline
model_name = "mirth/chonky_modernbert_large_1"
tokenizer = AutoTokenizer.from_pretrained(model_name, model_max_length=1024)
id2label = {
0: "O",
1: "分隔符",
}
label2id = {
"O": 0,
"分隔符": 1,
}
model = AutoModelForTokenClassification.from_pretrained(
model_name,
num_labels=2,
id2label=id2label,
label2id=label2id,
)
pipe = pipeline("ner", model=model, tokenizer=tokenizer, aggregation_strategy="simple")
text = """大学前我在校外主要专注两件事:写作和编程。我不写论文,而是写当时(可能现在也是)初学者该写的短篇小说。我的故事很糟糕,几乎没有情节,只有情感强烈的角色——我以为这样能让故事显得深刻。九年级时(13-14岁),我第一次尝试在学区用于"数据处理"的IBM 1401上编程。这台机器恰好在初中地下室,我和朋友Rich Draves获准使用。那里就像迷你邦德反派巢穴,各种外星机器模样的设备——CPU、磁盘驱动器、打印机、读卡器——架设在荧光灯下的高架地板上。"""
pipe(text)
示例输出
[
{'entity_group': '分隔符', 'score': np.float32(0.91590524), 'word': '小说。', 'start': 209, 'end': 218},
{'entity_group': '分隔符', 'score': np.float32(0.6210419), 'word': '处理"', 'start': 455, 'end': 468},
{'entity_group': '分隔符', 'score': np.float32(0.7071036), 'word': '。', 'start': 652, 'end': 653}
]
训练数据
模型使用minipile和bookcorpus数据集的段落进行分块训练。
评估指标
minipile数据集的分词指标:
指标 |
值 |
F1分数 |
0.85 |
精确率 |
0.87 |
召回率 |
0.82 |
准确率 |
0.99 |
bookcorpus数据集的分词指标:
指标 |
值 |
F1分数 |
0.79 |
精确率 |
0.85 |
召回率 |
0.74 |
准确率 |
0.99 |
硬件配置
模型在单张H100显卡上进行了数小时的微调训练。