Transformateurs CKIP
Ce projet fournit des modèles de transformateurs chinois traditionnels (y compris des outils Albert, Bert, GPT2) et NLP (y compris la segmentation des mots, le marquage d'une partie du discours, la reconnaissance de l'entité nommée).
Ce projet fournit le modèle Transformers en chinois traditionnel (y compris Albert, Bert, GPT2) et des outils de traitement du langage naturel (y compris le marquage des verbes de mots, le marquage de la parole et la reconnaissance des entités).
Git
https://github.com/ckiplab/ckip-transformateurs
PYPI
https://pypi.org/project/ckip-transformateurs
Documentation
https://ckip-transformateurs.readthedocs.io
Démo
https://ckip.iis.sinica.edu.tw/service/transformers
Contributeurs
- Mu Yang à CKIP (auteur et mainteneur).
- Wei-yun Ma à CKIP (mainteneur).
Packages connexes
- CKIPTAGGER: Une autre bibliothèque NLP chinoise avec utilisant Bilstm.
- CKIP Corenlp Toolkit: une bibliothèque NLP chinoise avec plus de tâches et utilitaires NLP.
Modèles
Vous pouvez également utiliser directement nos modèles pré-entraînés avec HuggingFace Transformers Library: https://huggingface.co/ckipLab/.
Vous pouvez télécharger le modèle pré-entraîné sur https://huggingface.co/ckiplab/.
- Modèles de langue
- Albert Tiny:
ckiplab/albert-tiny-chinese - Base d'Albert:
ckiplab/albert-base-chinese - Bert Tiny:
ckiplab/bert-tiny-chinese - Bert Bert:
ckiplab/bert-base-chinese - Gpt2 minuscule:
ckiplab/gpt2-tiny-chinese - Base GPT2:
ckiplab/gpt2-base-chinese
- Modèles de tâches NLP
- Albert Tiny - Segmentation des mots:
ckiplab/albert-tiny-chinese-ws - Albert Tiny - Tagging de dispositif de disposition:
ckiplab/albert-tiny-chinese-pos - Albert Tiny - Reconnaissance de l'entalité nommée:
ckiplab/albert-tiny-chinese-ner - Base d'Albert - Segmentation des mots:
ckiplab/albert-base-chinese-ws - ALBERT BASE - Tagging partie-parole:
ckiplab/albert-base-chinese-pos - Base d'Albert - Reconnaissance de l'entité nommée:
ckiplab/albert-base-chinese-ner - Bert Tiny - Segmentation des mots:
ckiplab/bert-tiny-chinese-ws - Bert Tiny - Tagging de dispositif de disposition:
ckiplab/bert-tiny-chinese-pos - Bert Tiny - Reconnaissance de l'entité nommée:
ckiplab/bert-tiny-chinese-ner - Bert Base - Segmentation des mots:
ckiplab/bert-base-chinese-ws - BERT BASE - Tagging partie de discours:
ckiplab/bert-base-chinese-pos - Bert Bert - Reconnaissance de l'entité nommée:
ckiplab/bert-base-chinese-ner
Utilisation du modèle
Vous pouvez utiliser notre modèle directement à partir de la bibliothèque Transformers de HuggingFace.
Vous pouvez utiliser nos modèles directement via la suite Transformers de Huggingface.
pip install -U transformers
Veuillez utiliser Berttokenzerfast comme Tokenizer et remplacer ckiplab/albert-tiny-chinese et ckiplab/albert-tiny-chinese-ws par n'importe quel modèle dont vous avez besoin dans l'exemple suivant.
Veuillez utiliser le BertoKenizerFast intégré et remplacer ckiplab/albert-tiny-chinese et ckiplab/albert-tiny-chinese-ws dans l'exemple suivant avec n'importe quel nom de modèle que vous souhaitez utiliser.
from transformers import (
BertTokenizerFast ,
AutoModelForMaskedLM ,
AutoModelForCausalLM ,
AutoModelForTokenClassification ,
)
# masked language model (ALBERT, BERT)
tokenizer = BertTokenizerFast . from_pretrained ( 'bert-base-chinese' )
model = AutoModelForMaskedLM . from_pretrained ( 'ckiplab/albert-tiny-chinese' ) # or other models above
# casual language model (GPT2)
tokenizer = BertTokenizerFast . from_pretrained ( 'bert-base-chinese' )
model = AutoModelForCausalLM . from_pretrained ( 'ckiplab/gpt2-base-chinese' ) # or other models above
# nlp task model
tokenizer = BertTokenizerFast . from_pretrained ( 'bert-base-chinese' )
model = AutoModelForTokenClassification . from_pretrained ( 'ckiplab/albert-tiny-chinese-ws' ) # or other models above
Modèle de réglementation
Pour affiner notre modèle sur vos propres ensembles de données, veuillez vous référer à l'exemple suivant de Transformers de HuggingFace.
Vous pouvez vous référer aux exemples suivants pour affiner notre modèle à votre propre ensemble de données.
- https://github.com/huggingface/transformers/tree/master/examples
- https://github.com/huggingface/transformers/tree/master/examples/pytorch/language-modeling
- https://github.com/huggingface/transformers/tree/master/examples/pytorch/token-classification
N'oubliez pas de définir --tokenizer_name bert-base-chinese afin d'utiliser le tokenizer chinois.
N'oubliez pas de définir --tokenizer_name bert-base-chinese pour utiliser correctement le tokenzer en chinois.
python run_mlm.py
--model_name_or_path ckiplab/albert-tiny-chinese # or other models above
--tokenizer_name bert-base-chinese
...
python run_ner.py
--model_name_or_path ckiplab/albert-tiny-chinese-ws # or other models above
--tokenizer_name bert-base-chinese
...
Performance du modèle
Ce qui suit est une comparaison de performances entre notre modèle et d'autres modèles.
Les résultats sont testés sur un corpus chinois traditionnel.
Ce qui suit est une comparaison des performances de notre modèle avec d'autres modèles.
Chaque tâche est testée dans l'ensemble de tests chinois traditionnel.
| Modèle | #Parameters | Perplexité† | Ws (f1) ‡ | Pos (acc) ‡ | Ner (f1) ‡ |
|---|
| CKIPLAB / Albert-Tiny-chinois | 4m | 4.80 | 96,66% | 94,48% | 71,17% |
| CKIPLAB / Albert-Base-Chinese | 11m | 2.65 | 97,33% | 95,30% | 79,47% |
| ckiplab / bert-tin-chinois | 12m | 8.07 | 96,98% | 95,11% | 74,21% |
| CKIPLAB / BERT-BASE-Chinese | 102m | 1.88 | 97,60% | 95,67% | 81,18% |
| CKIPLAB / GPT2-TINY-CHINEIS | 4m | 16.94 | - | - | - |
| CKIPLAB / GPT2-base-chinois | 102m | 8.36 | - | - | - |
| | | | | |
| vide / albert_chinese_tiny | 4m | 74.93 | - | - | - |
| Noterful / Albert_Chinese_Base | 11m | 22.34 | - | - | - |
| bert-bassin-chinois | 102m | 2.53 | - | - | - |
† Perplexité; le plus petit, mieux c'est.
† Degré de confusion; Plus le nombre est petit, mieux c'est.
‡ WS: segmentation des mots; POS: partie du discours; Ner: reconnaissance de l'entalité nommée; Plus le plus est grand, mieux c'est.
‡ WS: verbe verbe; POS: Marque d'une partie du discours; Ner: reconnaissance de l'entité; Plus le nombre est grand, mieux c'est.
Corpus de formation
Les modèles de langue sont formés sur les ensembles de données Zhwiki et CNA; Les tâches WS et POS sont formées sur l'ensemble de données ASBC; Les tâches NER sont formées sur l'ensemble de données Ontonotes.
Les modèles de langue ci-dessus sont formés sur les ensembles de données Zhwiki et CNA; Les modèles de tâches du mot verbe-rythme (WS) et d'une partie du discours (POS) sont formés sur l'ensemble de données ASBC; Les modèles de tâches de reconnaissance de l'entité (NER) sont formés sur l'ensemble de données Ontonotes.
- Zhwiki: https://dumps.wikimedia.org/zhwiki/
Texte de wikipedia chinois (vidage 20200801), traduit par traditionnel à l'aide d'OpenCC.
L'article du wiki chinois (version 20200801), traduit en chinois traditionnel à l'aide d'OpenCC.
- CNA: https://catalog.ldc.upenn.edu/ldc2011t13
Cinquième édition chinoise de Gigaword - CNA (Central News Agency).
Cinquième édition chinoise de Gigaword - CNA (Central News Agency).
- ASBC: http://asbc.iis.sinica.edu.tw
Academia Sinica Balanced Corpus of Modern Chinese Release 4.0.
Quatrième édition du corpus chinois équilibré de l'Académie centrale des sciences.
- Ontonotes: https://catalog.ldc.upenn.edu/LDC2013T19
La version 5.0 d'Ontonotes, partie chinoise, traduite par traditionnel à l'aide d'OpenCC.
Ontonotes Fifth Edition, Part chinois, traduit en chinois traditionnel à l'aide d'OpenCC.
Voici un résumé de chaque corpus.
Ce qui suit est une liste de chaque ensemble de données.
| Ensemble de données | #Documents | #Lines | #Characters | Type de ligne |
|---|
| CNA | 2 559,520 | 13 532 445 | 1 219 029 974 | Paragraphe |
| Zhwiki | 1 106 783 | 5 918 975 | 495 446 829 | Paragraphe |
| ASBC | 19 247 | 1 395 949 | 17 572 374 | Clause |
| Ontonotes | 1 911 | 48 067 | 1 568 491 | Phrase |
Voici la division de l'ensemble de données utilisé pour les modèles de langage.
Ce qui suit est la coupe de données utilisées pour former des modèles de langage.
| CNA + Zhwiki | #Documents | #Lines | #Characters |
|---|
| Former | 3 606 303 | 18 986 238 | 4 347 517 682 |
| Dev | 30 000 | 148 077 | 32 888 978 |
| Test | 30 000 | 151 241 | 35 216 818 |
Voici la division de l'ensemble de données utilisé pour la segmentation des mots et les modèles de marquage de discours.
Ce qui suit est la coupe de données utilisée pour former des modèles de marquage verbe de verbe de mots et de marquage d'une partie de la parole.
| ASBC | #Documents | #Lines | #Mots | #Characters |
|---|
| Former | 15 247 | 1 183 260 | 9 480 899 | 14 724 250 |
| Dev | 2 000 | 52 677 | 448 964 | 741,323 |
| Test | 2 000 | 160 012 | 1 315 129 | 2 106 799 |
Voici la division de l'ensemble de données utilisé pour la segmentation des mots et les modèles de reconnaissance d'entités nommés.
Ce qui suit est la coupe de l'ensemble de données utilisé pour former des modèles d'identification d'entité.
| Ontonotes | #Documents | #Lines | #Characters | # Named-entities |
|---|
| Former | 1,511 | 43 362 | 1 367 658 | 68 947 |
| Dev | 200 | 2 304 | 93 535 | 7.186 |
| Test | 200 | 2 401 | 107 298 | 6 977 |
Outils PNL
Le package fournit également les outils NLP suivants.
Notre suite fournit également les outils de traitement du langage naturel suivant.
- (Ws) segmentation des mots
- (Pos) Tagage de dispositif
- (NER) Nommé la reconnaissance des entités
Installation
pip install -U ckip-transformers
Exigences:
- Python 3.6+
- Pytorch 1.5+
- HuggingFace Transformers 3.5+
Utilisation des outils PNL
Voir ici pour les détails de l'API.
Pour des API détaillées, voyez ici.
Le script complet de cet exemple est https://github.com/ckiplab/ckip-transformateurs/blob/master/example/example.py.
Le profil complet des exemples suivants peut être trouvé sur https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
1. Module d'importation
from ckip_transformers . nlp import CkipWordSegmenter , CkipPosTagger , CkipNerChunker
2. Modèles de chargement
Nous fournissons plusieurs modèles pré-entraînés pour les outils PNL.
Nous fournissons des modèles pré-formés pour les outils en langage naturel.
# Initialize drivers
ws_driver = CkipWordSegmenter ( model = "bert-base" )
pos_driver = CkipPosTagger ( model = "bert-base" )
ner_driver = CkipNerChunker ( model = "bert-base" )
On peut également charger ses propres points de contrôle en utilisant nos pilotes.
Vous pouvez également utiliser nos outils pour former vos propres modèles.
# Initialize drivers with custom checkpoints
ws_driver = CkipWordSegmenter ( model_name = "path_to_your_model" )
pos_driver = CkipPosTagger ( model_name = "path_to_your_model" )
ner_driver = CkipNerChunker ( model_name = "path_to_your_model" )
Pour utiliser GPU, on peut spécifier l'ID de périphérique lors de l'initialisation des pilotes. Définissez -1 (par défaut) pour désactiver le GPU.
Le périphérique peut être spécifié lors de la déclaration d'un disjoncteur de mots pour utiliser le GPU. Défini sur -1 (valeur prédéfinie) signifie que le GPU n'est pas utilisé.
# Use CPU
ws_driver = CkipWordSegmenter ( device = - 1 )
# Use GPU:0
ws_driver = CkipWordSegmenter ( device = 0 )
3. Exécuter le pipeline
L'entrée pour la segmentation des mots et la reconnaissance de l'entité nommée doit être une liste de phrases.
L'entrée pour le marquage d'une partie du discours doit être une liste de mots (la sortie de la segmentation des mots).
L'entrée pour l'identification du verbe et de l'entité doit être la liste des phrases.
L'entrée des balises de disposition doit être une liste de mots.
# Input text
text = [
"傅達仁今將執行安樂死,卻突然爆出自己20年前遭緯來體育台封殺,他不懂自己哪裡得罪到電視台。" ,
"美國參議院針對今天總統布什所提名的勞工部長趙小蘭展開認可聽證會,預料她將會很順利通過參議院支持,成為該國有史以來第一位的華裔女性內閣成員。" ,
"空白 也是可以的~" ,
]
# Run pipeline
ws = ws_driver ( text )
pos = pos_driver ( ws )
ner = ner_driver ( text )
Le pilote POS segmentera automatiquement la phrase en interne en utilisant ses caractères ',,。::;;!!??' Tout en exécutant le modèle. (Les phrases de sortie seront concaténées.) Vous pouvez définir delim_set sur tous les caractères que vous souhaitez.
Vous pouvez définir use_delim=False pour désactiver cette fonctionnalité, ou définir use_delim=True dans WS et NER Driver pour activer cette fonctionnalité.
L'outil de marquage de la partie du discours sera automatiquement utilisé ',,。::;;!!??' Les caractères etc. coupent les phrases avant d'exécuter le modèle (les phrases de sortie seront automatiquement ramassées). Le paramètre delim_set peut être défini pour utiliser d'autres caractères à couper.
De plus, vous pouvez spécifier use_delim=False a désactivé cette fonction, ou que use_delim=True a été activée lorsque les excuses verbales et l'identification de l'entité.
# Enable sentence segmentation
ws = ws_driver ( text , use_delim = True )
ner = ner_driver ( text , use_delim = True )
# Disable sentence segmentation
pos = pos_driver ( ws , use_delim = False )
# Use new line characters and tabs for sentence segmentation
pos = pos_driver ( ws , delim_set = ' n t ' )
Vous pouvez spécifier batch_size et max_length pour mieux utiliser vos ressources machine.
Vous pouvez également définir batch_size et max_length pour mieux utiliser vos ressources de machine.
# Sets the batch size and maximum sentence length
ws = ws_driver ( text , batch_size = 256 , max_length = 128 )
4. Afficher les résultats
# Pack word segmentation and part-of-speech results
def pack_ws_pos_sentece ( sentence_ws , sentence_pos ):
assert len ( sentence_ws ) == len ( sentence_pos )
res = []
for word_ws , word_pos in zip ( sentence_ws , sentence_pos ):
res . append ( f" { word_ws } ( { word_pos } )" )
return " u3000 " . join ( res )
# Show results
for sentence , sentence_ws , sentence_pos , sentence_ner in zip ( text , ws , pos , ner ):
print ( sentence )
print ( pack_ws_pos_sentece ( sentence_ws , sentence_pos ))
for entity in sentence_ner :
print ( entity )
print () Fu Daren est sur le point d'effectuer l'euthanasie, mais soudain, il a été exposé qu'il a été interdit par Weilai Sports Station il y a 20 ans. Il ne savait pas où il a offensé la chaîne de télévision.
Fu Daren (NB) (D) effectuera (VC) l'euthanasie (NA), mais (Commacategory) a soudainement éclaté que (VJ) il a été interdit par (NH) il y a 20 ans (ND) (NG) et (Commacategory) Il (NH) ne comprend pas où (VK) il a offensé (VC) Station télévisée (NCD). (PeriodCategory)
NERTOKIN (Word = 'FU Darin', Ner = 'Person', idx = (0, 3))
NERTOKIN (Word = '20 ans ', ner =' date ', idx = (18, 21))
NERTOKIN (Word = 'Weilai Sports Station', Ner = 'org', idx = (23, 28))
Le Sénat américain a tenu une audience de reconnaissance sur le secrétaire au travail Zhao Xiaolan nommé aujourd'hui par le président Bush. On s'attend à ce qu'elle adoptera avec succès le soutien du Sénat et deviendra la première femme membre du Cabinet chinois du pays de l'histoire.
The United States (Nc) Senate (Nc) is aimed at (P) Today (Nd) President (Na) Bush (Nb) nominated (VC) Secretary of Labor (Na) Zhao Xiaolan (Nb) held a (VC) recognition (VC) hearing (Na), and (COMMACATEGORY) expected (VE) She will (D) very smoothly (VH) passed (VC) Senate (Nc) supported (VC) and (Commacategory) est devenu (vg) le pays (NES) (NC) a toujours (d) le premier (NA) (NA) (NA) Cabinet (NA) Cabinet (NA) membre (NA). (PeriodCategory)
Nertoken (Word = 'U.S. Sénat', ner = 'org', idx = (0, 5))
NERTOKIN (Word = 'Today', Ner = 'LOC', IDX = (7, 9))
NERTOKIN (Word = 'Bush', Ner = 'Person', idx = (11, 13))
Nertoken (Word = 'Ministre du Travail', Ner = 'org', IDX = (17, 21))
NERTOKIN (Word = 'Choosei', Ner = 'Person', idx = (21, 24))
NERTOKIN (Word = 'REMBERNIGRING ADURD', NER = 'EVENT', IDX = (26, 31))
NERTOKIN (Word = 'Sénat', ner = 'org', idx = (42, 45))
NERTOKIN (Word = 'First', Ner = 'Ordinal', idx = (56, 58))
NERTOKIN (Word = 'Chinese', Ner = 'NORP', IDX = (60, 62))
Vide est ok aussi
Vide (vh) (espace blanc) est également (d) est (shi) can (vh) (t) ~ (fw)
Performances des outils NLP
Ce qui suit est une comparaison de performances entre notre outil et d'autres outils.
Ce qui suit est une comparaison des performances de nos outils avec d'autres outils.
CKIP Transformers vs Monpa & Jeiba
| Outil | WS (F1) | POS (ACC) | WS + POS (F1) | Ner (F1) |
|---|
| CKIP Bert Base | 97,60% | 95,67% | 94,19% | 81,18% |
| CKIP Albert Base | 97,33% | 95,30% | 93,52% | 79,47% |
| Ckip bert minuscule | 96,98% | 95,08% | 93,13% | 74,20% |
| CKIP Albert Tiny | 96,66% | 94,48% | 92,25% | 71,17% |
| | | | |
| Monpa † | 92,58% | - | 83,88% | - |
| Jeiba | 81,18% | - | - | - |
† MONPA ne fournit que 3 types de balises dans NER.
† L'identification de l'entité de MonPA ne fournit que trois marqueurs.
CKIP Transformers vs CKIPTAGG
Les résultats suivants sont testés sur un ensemble de données différent. †
L'expérience suivante est testée dans un autre ensemble de données. †
| Outil | WS (F1) | POS (ACC) | WS + POS (F1) | Ner (F1) |
|---|
| CKIP Bert Base | 97,84% | 96,46% | 94,91% | 79,20% |
| Ckiptagger | 97,33% | 97,20% | 94,75% | 77,87% |
† Ici, nous avons recyclé / testé notre modèle Bert en utilisant le même ensemble de données avec CKIPTAGGAGE.
† Nous recyclons / testons notre modèle Bert sur le même ensemble de données que CKIPTAGG.
Licence
Copyright (C) 2023 CKIP Lab sous la licence GPL-3.0.