语言:
许可证: mit
数据集:
标签:
答案抽取模型
该模型基于camembert-base进行微调,用于标记分类任务。其目标是识别可能作为问题答案的标记序列。
训练数据
训练集由SquadFR、fquad和piaf数据集拼接而成。每个上下文中的答案均被标注为"ANS"标签。
数据规模(上下文数量):
- 训练集: 24,652
- 测试集: 1,370
- 验证集: 1,370
训练过程
使用Tesla K80显卡进行训练:
模型在后续训练中表现出过拟合现象:

模型评估
当前模型性能欠佳,预测后需进行修正才能保证一致性。由于模型需要基于潜在问题识别标记组,这项分类任务具有挑战性。

使用说明
本模型仅为概念验证,不保证实际性能
from transformers import AutoTokenizer, AutoModelForTokenClassification
import numpy as np
model_name = "lincoln/camembert-squadFR-fquad-piaf-answer-extraction"
loaded_tokenizer = AutoTokenizer.from_pretrained(model_path)
loaded_model = AutoModelForTokenClassification.from_pretrained(model_path)
text = "数据科学是一个跨学科领域,它使用科学方法、流程、算法和系统从大量结构化和非结构化数据中提取知识和见解。该领域常与大数据和数据分析相关联。"
inputs = loaded_tokenizer(text, return_tensors="pt", return_offsets_mapping=True)
outputs = loaded_model(inputs.input_ids).logits
probs = 1 / (1 + np.exp(-outputs.detach().numpy()))
probs[:, :, 1][0] = np.convolve(probs[:, :, 1][0], np.ones(2), 'same') / 2
sentences = loaded_tokenizer.tokenize(text, add_special_tokens=False)
prob_answer_tokens = probs[:, 1:-1, 1].flatten().tolist()
offset_start_mapping = inputs.offset_mapping[:, 1:-1, 0].flatten().tolist()
offset_end_mapping = inputs.offset_mapping[:, 1:-1, 1].flatten().tolist()
threshold = 0.4
entities = []
for ix, (token, prob_ans, offset_start, offset_end) in enumerate(zip(sentences, prob_answer_tokens, offset_start_mapping, offset_end_mapping)):
entities.append({
'entity': 'ANS' if prob_ans > threshold else 'O',
'score': prob_ans,
'index': ix,
'word': token,
'start': offset_start,
'end': offset_end
})
for p in entities:
print(p)