🚀 答案提取模型
本模型基于 camembert-base 模型进行微调,用于标记分类任务。其目标是识别可能作为问题答案的标记序列。
🚀 快速开始
安装依赖
确保你已经安装了 transformers
库,可以使用以下命令进行安装:
pip install transformers
运行示例代码
以下是使用该模型的示例代码:
from transformers import AutoTokenizer, AutoModelForTokenClassification
import numpy as np
model_name = "lincoln/camembert-squadFR-fquad-piaf-answer-extraction"
loaded_tokenizer = AutoTokenizer.from_pretrained(model_name)
loaded_model = AutoModelForTokenClassification.from_pretrained(model_name)
text = "La science des données est un domaine interdisciplinaire qui utilise des méthodes, des processus,\
des algorithmes et des systèmes scientifiques pour extraire des connaissances et des idées de nombreuses données structurelles et non structurées.\
Elle est souvent associée aux données massives et à l'analyse des données."
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)
✨ 主要特性
- 基于
camembert-base
模型进行微调,适用于法语问答数据。
- 可识别文本中可能作为问题答案的标记序列。
📦 安装指南
要使用此模型,你需要安装 transformers
库:
pip install transformers
💻 使用示例
基础用法
from transformers import AutoTokenizer, AutoModelForTokenClassification
import numpy as np
model_name = "lincoln/camembert-squadFR-fquad-piaf-answer-extraction"
loaded_tokenizer = AutoTokenizer.from_pretrained(model_name)
loaded_model = AutoModelForTokenClassification.from_pretrained(model_name)
text = "La science des données est un domaine interdisciplinaire qui utilise des méthodes, des processus,\
des algorithmes et des systèmes scientifiques pour extraire des connaissances et des idées de nombreuses données structurelles et non structurées.\
Elle est souvent associée aux données massives et à l'analyse des données."
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)
📚 详细文档
训练数据
训练集是 SquadFR、fquad 和 piaf 数据集的组合。每个上下文中的答案都被标记为 "ANS"。
数据集规模(上下文数量):
- 训练集: 24652
- 测试集: 1370
- 验证集: 1370
训练过程
训练在 Tesla K80 显卡上进行,具体参数如下:
训练过程中,模型在一定步数后似乎出现了过拟合现象,损失曲线如下:

模型评估
该模型的性能不佳,预测结果需要进行修正以保证一致性。标记分类任务具有一定难度,因为模型需要在已知问题的情况下识别标记组。
模型性能曲线如下:

注意事项
⚠️ 重要提示
该模型仅为概念验证(POC),我们不保证其性能。
🔧 技术细节
模型架构
本模型基于 camembert-base
进行微调,用于标记分类任务。
训练数据
训练数据由 SquadFR、fquad 和 piaf 数据集组成,这些数据集涵盖了丰富的法语问答数据。
训练参数
- 批量大小:16
- 权重衰减:0.01
- 学习率:2x10-5,线性衰减
- 总步数:1000
过拟合问题
从损失曲线来看,模型在训练后期出现了过拟合现象,可能需要调整训练参数或增加正则化方法。
📄 许可证
本项目采用 MIT 许可证。