1、对文本进行前处理:
①当文本长度小于512时,填充其长度。经过各种填充的尝试,发现将原对话再续几遍对分割的效果最好:
while len(inputs) < 512:
inputs += inputs
②将 “小明:” 替换成 “小明,” 【因为太多的“:”会导致语义分割出错】
2、导入模型,开始分割:
from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
p = pipeline(
task=Tasks.document_segmentation,
model='damo/nlp_bert_document-segmentation_chinese-base'
)
result = p(documents=inputs)
result是一个字典,其中的'text'就是分割后的结果,分割后的段落以‘\t’开始,以'\n‘结束,所以进行后处理如下:
tmp = re.split(r'\n\t', re.sub(r'^\t', '', result['text']))
text = list(filter(None, tmp))
此时text是列表,每一个元素都是一个语义相近的一段,分割结束