🚀 答案提取模型
本模型基於 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 許可證。