语言: 俄语
许可证: Apache-2.0
库名称: transformers
标签:
- 俄语
- 语素分割
- 标记分类
- 形态BERT
- BERT
- 俄文
- 俄语
管道标签: 标记分类
MorphBERT-Large:俄语语素分割模型
本仓库包含CrabInHoney/morphbert-large-morpheme-segmentation-ru
模型,这是一个基于大型Transformer架构、专门针对俄语词语素分割任务进行微调的系统。该模型将输入单词的每个字符分类为25种语素类别之一:['END', 'END1', 'HYPH', 'HYPH1', 'LINK', 'LINK1', 'LINK2', 'LINK3', 'POSTFIX', 'PREF', 'PREF1', 'PREF2', 'ROOT', 'ROOT1', 'ROOT2', 'ROOT3', 'ROOT4', 'ROOT5', 'SUFF', 'SUFF1', 'SUFF2', 'SUFF3', 'SUFF4', 'SUFF5', 'SUFF6']
模型描述
morphbert-large-morpheme-segmentation-ru
采用强大的Transformer架构,专注于字符级别的形态分析预测。由于其较大规模,该模型在解析俄语单词构成语素方面比小型版本(CrabInHoney/morphbert-tiny-morpheme-segmentation-ru)具有更高准确度。
该模型通过从头训练获得,架构复杂度与bert-base相当。
核心特性:
- 任务: 语素分割(字符级标记分类)
- 语言: 俄语(ru)
- 架构: Transformer(类BERT base)
- 标签集: ['END', 'END1', 'HYPH', 'HYPH1', 'LINK', 'LINK1', 'LINK2', 'LINK3', 'POSTFIX', 'PREF', 'PREF1', 'PREF2', 'ROOT', 'ROOT1', 'ROOT2', 'ROOT3', 'ROOT4', 'ROOT5', 'SUFF', 'SUFF1', 'SUFF2', 'SUFF3', 'SUFF4', 'SUFF5', 'SUFF6']
模型规格:
- 参数量: ~8550万
- 张量类型: F32
- 磁盘占用: ~342MB
使用方式
可通过Hugging Face的transformers
库轻松调用,该模型以字符为单位处理单词。
from transformers import AutoTokenizer, AutoModelForTokenClassification
import torch
model_name = "CrabInHoney/morphbert-large-morpheme-segmentation-ru"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForTokenClassification.from_pretrained(model_name)
model.eval()
def analyze(word):
tokens = list(word)
encoded = tokenizer(tokens, is_split_into_words=True, return_tensors="pt", truncation=True, max_length=34)
with torch.no_grad():
logits = model(**encoded).logits
predictions = logits.argmax(dim=-1)[0]
word_ids = encoded.word_ids()
output = []
current_label = None
current_chunk = []
for i, word_idx in enumerate(word_ids):
if word_idx is not None and word_idx < len(tokens):
label_id = predictions[i].item()
label = model.config.id2label[label_id]
token = tokens[word_idx]
if label == current_label:
current_chunk.append(token)
else:
if current_chunk:
chunk_str = "".join(current_chunk)
output.append(f"{chunk_str}:{current_label}")
current_chunk = [token]
current_label = label
if current_chunk:
chunk_str = "".join(current_chunk)
output.append(f"{chunk_str}:{current_label}")
return " / ".join(output)
for word in ["масляный", "предчувствий", "тарковский", "кот", "подгон", "сине-белый", "шторы", "абажур", "дедлайн", "веб-сайт", "адаптированная", "формообразующий"]:
print(f"{word} → {analyze(word)}")
预测示例
масляный → масл:ROOT / ян:SUFF / ый:END
предчувствий → пред:PREF / чу:ROOT / в:SUFF / ств:SUFF1 / ий:END
тарковский → тарк:ROOT / ов:SUFF / ск:SUFF1 / ий:END
кот → кот:ROOT
подгон → под:PREF / гон:ROOT
сине-белый → син:ROOT / е:LINK / -:HYPH / бел:ROOT1 / ый:END
шторы → штор:ROOT / ы:END
абажур → абажур:ROOT
дедлайн → дедлайн:ROOT
веб-сайт → веб:ROOT / -:HYPH / сайт:ROOT1
адаптированная → адапт:ROOT / ир:SUFF / ова:SUFF1 / нн:SUFF2 / ая:END
формообразующий → форм:ROOT / о:LINK / образу:ROOT1 / ющ:SUFF / ий:END
性能表现
在评估数据集上达到约0.99的字符级准确率。
局限性
- 对于训练数据中未充分体现的生僻词、新造词或复杂形态结构,性能可能不稳定
- 仅基于字符级别分析,未整合更广泛的词汇或句法上下文
- 在语素边界模糊情况下,模型的判断可能受训练模式影响,与语言学规范存在边缘性差异