🚀 MorphBERT-Large: ロシア語の形態素分割
このリポジトリには、CrabInHoney/morphbert-large-morpheme-segmentation-ru
モデルが含まれています。これは、ロシア語の単語の形態素分割のためにファインチューニングされた大規模なトランスフォーマーベースのシステムです。このモデルは、与えられた単語の各文字を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
は強力なトランスフォーマーアーキテクチャを使用しており、文字レベルでの形態解析をより正確に予測することを目的としています。モデルが大規模であるため、小規模版(CrabInHoney/morphbert-tiny-morpheme-segmentation-ru)と比較して、ロシア語の単語の構成形態素をより正確に判断することができます。
このモデルはゼロから学習されたもので、そのアーキテクチャの複雑さはbert-baseに匹敵します。
主要な特徴:
- タスク: 形態素分割(文字レベルのトークン分類)
- 言語: ロシア語 (ru)
- アーキテクチャ: トランスフォーマー (BERT base -like)
- ラベル: ['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 |
ディスク占有容量 |
~342 MB |
💻 使用例
基本的な使用法
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を達成しています。
制限事項
- 語彙外の単語、新語、または学習データに十分に表現されていない高度に複雑な形態構造では、性能が異なる場合があります。
- このモデルは厳密に文字レベルで動作し、より広範な語彙や構文の文脈を組み込んでいません。
- 形態素境界の曖昧なケースは、学習中に学習されたパターンに基づいて解決される場合があり、エッジケースでは言語規則と必ずしも一致しない可能性があります。
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。