🚀 RuBERTExtSumGazeta
本項目基於 rubert-base-cased 模型,開發了用於抽取式文本摘要的模型,可有效處理相關文本的摘要提取任務。
🚀 快速開始
如何使用
你可以通過以下 Colab 鏈接體驗:link
import razdel
from transformers import AutoTokenizer, BertForTokenClassification
model_name = "IlyaGusev/rubert_ext_sum_gazeta"
tokenizer = AutoTokenizer.from_pretrained(model_name)
sep_token = tokenizer.sep_token
sep_token_id = tokenizer.sep_token_id
model = BertForTokenClassification.from_pretrained(model_name)
article_text = "..."
sentences = [s.text for s in razdel.sentenize(article_text)]
article_text = sep_token.join(sentences)
inputs = tokenizer(
[article_text],
max_length=500,
padding="max_length",
truncation=True,
return_tensors="pt",
)
sep_mask = inputs["input_ids"][0] == sep_token_id
current_token_type_id = 0
for pos, input_id in enumerate(inputs["input_ids"][0]):
inputs["token_type_ids"][0][pos] = current_token_type_id
if input_id == sep_token_id:
current_token_type_id = 1 - current_token_type_id
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits[0, :, 1]
logits = logits[sep_mask]
logits, indices = logits.sort(descending=True)
logits, indices = logits.cpu().tolist(), indices.cpu().tolist()
pairs = list(zip(logits, indices))
pairs = pairs[:3]
indices = list(sorted([idx for _, idx in pairs]))
summary = " ".join([sentences[idx] for idx in indices])
print(summary)
✨ 主要特性
本模型基於 rubert-base-cased 構建,可實現抽取式文本摘要功能。
📦 安裝指南
文檔未提供具體安裝步驟,暫不展示。
💻 使用示例
基礎用法
import razdel
from transformers import AutoTokenizer, BertForTokenClassification
model_name = "IlyaGusev/rubert_ext_sum_gazeta"
tokenizer = AutoTokenizer.from_pretrained(model_name)
sep_token = tokenizer.sep_token
sep_token_id = tokenizer.sep_token_id
model = BertForTokenClassification.from_pretrained(model_name)
article_text = "..."
sentences = [s.text for s in razdel.sentenize(article_text)]
article_text = sep_token.join(sentences)
inputs = tokenizer(
[article_text],
max_length=500,
padding="max_length",
truncation=True,
return_tensors="pt",
)
sep_mask = inputs["input_ids"][0] == sep_token_id
current_token_type_id = 0
for pos, input_id in enumerate(inputs["input_ids"][0]):
inputs["token_type_ids"][0][pos] = current_token_type_id
if input_id == sep_token_id:
current_token_type_id = 1 - current_token_type_id
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits[0, :, 1]
logits = logits[sep_mask]
logits, indices = logits.sort(descending=True)
logits, indices = logits.cpu().tolist(), indices.cpu().tolist()
pairs = list(zip(logits, indices))
pairs = pairs[:3]
indices = list(sorted([idx for _, idx in pairs]))
summary = " ".join([sentences[idx] for idx in indices])
print(summary)
高級用法
文檔未提供高級用法代碼示例,暫不展示。
📚 詳細文檔
預期用途與限制
限制與偏差
- 該模型在處理 Gazeta.ru 的文章時效果較好,但對於其他機構的文章,可能會出現領域偏移的問題。
訓練數據
訓練過程
文檔未提供具體訓練過程信息,暫不展示。
評估結果
評估腳本:https://github.com/IlyaGusev/summarus/blob/master/evaluate.py
評估參數:--language ru --tokenize-after --lower
文檔未提供具體評估結果信息,暫不展示。
📄 許可證
本項目採用 apache-2.0
許可證。