CKIP -Transformatoren
Dieses Projekt bietet traditionelle Modelle für chinesische Transformatoren (einschließlich Albert, Bert, GPT2) und NLP-Tools (einschließlich Wortsegmentierung, Speech-Tagging, benannte Entitätserkennung).
Dieses Projekt liefert das Transformatorenmodell in traditionellen Chinesen (einschließlich Albert, Bert, GPT2) und Tools für die Verarbeitung von natürlichen Sprachen (einschließlich Wortverbverb-Markierung, Speech-Markierung und Entitätserkennung).
Git
https://github.com/ckiplab/ckip-transformers
Pypi
https://pypi.org/project/ckip-transformers
Dokumentation
https://ckip-transformers.readthedocs.io
Demo
https://ckip.iis.sinica.edu.tw/service/transformers
Mitwirkende
- Mu yang bei CKIP (Autor & Betreuer).
- Wei-Yun MA bei CKIP (Betreuer).
Verwandte Pakete
- Ckiptagger: Eine alternative chinesische NLP -Bibliothek unter Verwendung von BILSTM.
- CKIP Corenlp Toolkit: Eine chinesische NLP -Bibliothek mit mehr NLP -Aufgaben und -versorgungsunternehmen.
Modelle
Sie können auch unsere vorbereiteten Modelle mit der Bibliothek von Huggingface -Transformatoren direkt verwenden: https://huggingface.co/ckiplab/.
Sie können das vorgezogene Modell unter https://huggingface.co/ckiplab/ herunterladen.
- Sprachmodelle
- Albert Tiny:
ckiplab/albert-tiny-chinese - Albert Base:
ckiplab/albert-base-chinese - Bert Tiny:
ckiplab/bert-tiny-chinese - Bert Base:
ckiplab/bert-base-chinese - GPT2 TINY:
ckiplab/gpt2-tiny-chinese - GPT2-Basis:
ckiplab/gpt2-base-chinese
- NLP -Aufgabenmodelle
- Albert Tiny-Wortsegmentierung:
ckiplab/albert-tiny-chinese-ws - Albert Tiny-Teil des Speech-Tagging:
ckiplab/albert-tiny-chinese-pos - ALBERT TINY-NAMIGE-INDITY-Anerkennung:
ckiplab/albert-tiny-chinese-ner - Albert Base-Wortsegmentierung:
ckiplab/albert-base-chinese-ws -
ckiplab/albert-base-chinese-pos Basi - ALBERT BASE-NAMET-INDITY-Anerkennung:
ckiplab/albert-base-chinese-ner - Bert Tiny-Wortsegmentierung:
ckiplab/bert-tiny-chinese-ws - Bert Tiny-Teil des Speech-Taggings:
ckiplab/bert-tiny-chinese-pos - Bert Tiny-Named-Ide-Anerkennung:
ckiplab/bert-tiny-chinese-ner - Bert Base-Wortsegmentierung:
ckiplab/bert-base-chinese-ws - Bert Base-Teil des Speech-Tagging:
ckiplab/bert-base-chinese-pos - Bert-Basis-Namentity-Anerkennung:
ckiplab/bert-base-chinese-ner
Modellnutzung
Sie können unser Modell direkt aus der Transformers Library des Huggingface verwenden.
Sie können unsere Modelle direkt über die Transformers Suite des Suggingface verwenden.
pip install -U transformers
Bitte verwenden Sie BertTokenizerfast als Tokenizer und ersetzen Sie ckiplab/albert-tiny-chinese und ckiplab/albert-tiny-chinese-ws durch jedes Modell, das Sie im folgenden Beispiel benötigen.
Bitte verwenden Sie den eingebauten BertTokenizerfast und ersetzen Sie ckiplab/albert-tiny-chinese und ckiplab/albert-tiny-chinese-ws im folgenden Beispiel mit jedem Modellnamen, den Sie verwenden möchten.
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
Model feinmodell
Um unser Modell auf Ihren eigenen Datensätzen zu bestrafen, lesen Sie bitte das folgende Beispiel aus den Transformers von Huggingface.
Sie können sich auf die folgenden Beispiele verweisen, um unser Modell auf Ihren eigenen Datensatz zu optimieren.
- https://github.com/huggingface/transformers/tree/master/examples
- https://github.com/huggingface/transformers/tree/master/examples/pytorch/glanguage-modeling
- https://github.com/huggingface/transformers/tree/master/examples/pytorch/token-classification
Denken Sie daran --tokenizer_name bert-base-chinese zu setzen, um chinesische Tokenizer zu verwenden.
Denken Sie daran --tokenizer_name bert-base-chinese zu setzen, um den Tokenizer auf Chinesisch korrekt zu verwenden.
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
...
Modellleistung
Das Folgende ist ein Leistungsvergleich zwischen unserem Modell und anderen Modellen.
Die Ergebnisse werden an einem traditionellen chinesischen Korpus getestet.
Das Folgende ist ein Vergleich der Leistung unseres Modells mit anderen Modellen.
Jede Aufgabe wird im traditionellen chinesischen Testsatz getestet.
| Modell | #PARAMETERS | Verwirrung† | WS (F1) ‡ | Pos (ACC) ‡ | Ner (F1) ‡ |
|---|
| CKIplab/Albert-Tiny-Chinese | 4m | 4.80 | 96,66% | 94,48% | 71,17% |
| CKIplab/Albert-Base-Chinese | 11m | 2.65 | 97,33% | 95,30% | 79,47% |
| CKIplab/Bert-Tiny-Chinese | 12 m | 8.07 | 96,98% | 95,11% | 74,21% |
| CKIplab/Bert-Base-Chinese | 102 m | 1,88 | 97,60% | 95,67% | 81,18% |
| CKIPLAB/GPT2-TINY-CHINESE | 4m | 16.94 | - | - | - |
| CKIplab/GPT2-Base-Chinese | 102 m | 8.36 | - | - | - |
| | | | | |
| voidful/Albert_chinese_tiny | 4m | 74,93 | - | - | - |
| voidful/Albert_Chinese_base | 11m | 22.34 | - | - | - |
| Bert-Base-Chinese | 102 m | 2.53 | - | - | - |
† Verwirrung; Je kleiner, desto besser.
† Verwirrungsabschluss; Je kleiner die Zahl ist, desto besser.
‡ WS: Wortsegmentierung; POS: Teil der Sprache; NER: Erkennung benannter Entbindlichkeit; Je größer desto besser.
‡ WS: Verb Verb; POS: Teil der Sprache; NER: Entitätserkennung; Je größer die Zahl, desto besser.
Trainingskorpus
Die Sprachmodelle werden auf den Datensätzen Zhwiki und CNA trainiert. Die WS- und POS -Aufgaben werden auf dem ASBC -Datensatz trainiert. Die NER -Aufgaben werden im Datensatz von Ontonotes geschult.
Die obigen Sprachmodelle werden in den Zhwiki- und CNA -Datensätzen trainiert. Die Modelle mit Wortverb-Try (WS) und Teil der Speech-Tagging (POS) werden am ASBC-Datensatz trainiert. Die Aufgabenmodelle (Entity Recognition) werden auf dem Datensatz von Ontonotes geschult.
- Zhwiki: https://dumps.wikimedia.org/zhwiki/
Chinesischer Wikipedia -Text (20200801 Dump), übersetzt mit OpenCC in traditionelles.
Der Artikel des chinesischen Wiki (Version 20200801), übersetzt in traditionelle Chinesen mit OpenCC.
- CNA: https://catalog.ldc.upenn.edu/ldc2011t13
Chinesische Gigaword Fünfte Ausgabe - CNA (Zentrale Nachrichtenagentur) Teil.
Chinesische Gigaword Fünfte Ausgabe - CNA (Zentrale Nachrichtenagentur).
- ASBC: http://asbc.iis.sinica.edu.tw
Academia Sinica Balanced Corpus der modernen chinesischen Release 4.0.
Vierte Ausgabe des chinesischen Balanced Corpus der Central Academy of Sciences.
- Ontonotes: https://catalog.ldc.upenn.edu/ldc2013t19
Ontonotes Release 5.0, chinesischer Teil, übersetzt mit OpenCC in traditionelles.
Die fünfte Ausgabe von Ontonotes, chinesischer Teil, übersetzt mit OpenCC in traditionelle Chinesen.
Hier ist eine Zusammenfassung jedes Korpus.
Das Folgende ist eine Liste jedes Datensatzes.
| Datensatz | #Unterlagen | #Lines | #Characters | Zeilenart |
|---|
| CNA | 2.559.520 | 13.532.445 | 1,219.029.974 | Absatz |
| Zhwiki | 1,106.783 | 5,918,975 | 495.446.829 | Absatz |
| ASBC | 19.247 | 1.395.949 | 17.572.374 | Klausel |
| Ontonotes | 1,911 | 48.067 | 1,568.491 | Satz |
Hier ist der Datensatz -Split, der für Sprachmodelle verwendet wird.
Das Folgende ist der Datensatzschnitt, der zum Trainieren von Sprachmodellen verwendet wird.
| CNA+Zhwiki | #Unterlagen | #Lines | #Characters |
|---|
| Zug | 3.606.303 | 18.986.238 | 4,347.517.682 |
| Dev | 30.000 | 148.077 | 32.888,978 |
| Prüfen | 30.000 | 151.241 | 35,216,818 |
Hier ist der Datensatz-Split, der für die Word-Segmentierung und die modellierten Segmentierungen und Teil-Speech-Tagging-Modelle verwendet wird.
Das Folgende ist das Datensatzabschnitt, mit dem das Wortverb-Verb und die markierten Markierungsmodelle für Speech-Marke trainiert werden.
| ASBC | #Unterlagen | #Lines | #Words | #Characters |
|---|
| Zug | 15.247 | 1.183.260 | 9.480.899 | 14.724.250 |
| Dev | 2.000 | 52,677 | 448,964 | 741,323 |
| Prüfen | 2.000 | 160.012 | 1,315,129 | 2,106.799 |
Hier ist der Datensatz -Split, der für die Wortsegmentierung und die benannten Entitätserkennungsmodelle verwendet wird.
Das Folgende ist der Datensatzschnitt, der zur Schulung von Entitäts -Identifikationsmodellen verwendet wird.
| Ontonotes | #Unterlagen | #Lines | #Characters | #Benannte Entsorgungen |
|---|
| Zug | 1,511 | 43.362 | 1,367.658 | 68.947 |
| Dev | 200 | 2.304 | 93.535 | 7,186 |
| Prüfen | 200 | 2.401 | 107.298 | 6,977 |
NLP -Werkzeuge
Das Paket bietet auch die folgenden NLP -Tools.
Unsere Suite bietet auch die folgenden Tools zur Verarbeitung natürlicher Sprache.
- (WS) Wortsegmentierung
- (POS) Teil des Speech-Taggings
- (NER) genannte Entitätserkennung
Installation
pip install -U ckip-transformers
Anforderungen:
- Python 3.6+
- Pytorch 1.5+
- Umarmungsface -Transformatoren 3.5+
NLP -Werkzeuge Nutzung
Hier finden Sie API -Details.
Ausführliche APIs finden Sie hier.
Das vollständige Skript dieses Beispiels ist https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
Das vollständige Profil der folgenden Beispiele finden Sie unter https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
1. Modul importieren
from ckip_transformers . nlp import CkipWordSegmenter , CkipPosTagger , CkipNerChunker
2. Lastmodelle
Wir bieten mehrere vorbereitete Modelle für die NLP -Tools.
Wir bieten einige vorgeschriebene Modelle für natürliche Sprachwerkzeuge.
# Initialize drivers
ws_driver = CkipWordSegmenter ( model = "bert-base" )
pos_driver = CkipPosTagger ( model = "bert-base" )
ner_driver = CkipNerChunker ( model = "bert-base" )
Man kann auch ihre eigenen Kontrollpunkte mit unseren Treibern laden.
Sie können auch unsere Tools verwenden, um Ihre eigenen Modelle zu trainieren.
# 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" )
Um GPU zu verwenden, kann man die Geräte -ID angeben, während die Treiber initialisiert werden. Setzen Sie auf -1 (Standard), um die GPU zu deaktivieren.
Das Gerät kann angegeben werden, wenn ein Wortschalter für die Verwendung der GPU deklariert wird. Eingestellt auf -1 (voreingestellter Wert) bedeutet, dass die GPU nicht verwendet wird.
# Use CPU
ws_driver = CkipWordSegmenter ( device = - 1 )
# Use GPU:0
ws_driver = CkipWordSegmenter ( device = 0 )
3. Rennen Sie Pipeline
Die Eingabe für die Word-Segmentierung und die Erkennung der benannten Entsorgung muss eine Liste von Sätzen sein.
Die Eingabe für das Tagging für ein Speech-Tag muss eine Liste der Wörter (die Ausgabe der Wortsegmentierung) sein.
Die Eingabe für Verb- und Entitätsidentifikation muss eine Liste von Sätzen sein.
Die Eingabe von Teil-von-Speech-Tags muss eine Liste der Wörter enthalten.
# Input text
text = [
"傅達仁今將執行安樂死,卻突然爆出自己20年前遭緯來體育台封殺,他不懂自己哪裡得罪到電視台。" ,
"美國參議院針對今天總統布什所提名的勞工部長趙小蘭展開認可聽證會,預料她將會很順利通過參議院支持,成為該國有史以來第一位的華裔女性內閣成員。" ,
"空白 也是可以的~" ,
]
# Run pipeline
ws = ws_driver ( text )
pos = pos_driver ( ws )
ner = ner_driver ( text )
Der POS -Treiber segmentiert den Satz automatisch intern mit den Charakteren ',,。::;;!!??' beim Ausführen des Modells. (Die Ausgabesätze werden zurückgeklemmt.) Sie können delim_set auf alle gewünschten Zeichen setzen.
Sie können use_delim=False festlegen, um diese Funktion zu deaktivieren, oder use_delim=True in WS- und NER -Treiber festlegen, um diese Funktion zu aktivieren.
Das markierte markierte Teil des Speech-Markierungswerkzeugs wird automatisch verwendet ',,。::;;!!??' ETC -Zeichen schneiden Sätze vor der Ausführung des Modells (die Ausgabesätze werden automatisch abgeholt). Der Parameter delim_set kann so eingestellt werden, dass andere Zeichen zum Schneiden verwendet werden.
Darüber hinaus können Sie angeben, use_delim=False diese Funktion deaktiviert hat oder dass use_delim=True bei der Ausreden und Entitätsinsorien aktiviert wurde.
# 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 ' )
Sie können batch_size und max_length angeben, um Ihre Maschinenressourcen besser zu nutzen.
Sie können auch batch_size und max_length festlegen, um Ihre Maschinenressourcen besser zu nutzen.
# Sets the batch size and maximum sentence length
ws = ws_driver ( text , batch_size = 256 , max_length = 128 )
4. Ergebnisse zeigen
# 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 ist kurz davor, Sterbehilfe durchzuführen, aber plötzlich wurde er vor 20 Jahren von Weilai Sportstation verboten. Er wusste nicht, wo er den Fernsehsender beleidigt hatte.
Fu Daren (NB) wird (d) (VC) Stectionasia (NA) durchführen, aber (Commacategory) brach plötzlich aus, dass (VJ) von (NH) vor 20 Jahren verboten wurde (ND) (NG) und (Commacategory) er (NH) nicht versteht, wo (VK) er verweist (VC) TV -Sender (NC). (Periodenkategorie)
Nertoken (word = 'fu daren', ner = 'person', idx = (0, 3))
Nertoken (Word = '20 Jahre ', Ner =' Datum ', idx = (18, 21))
Nertoken (Word = 'Weilai Sportstation', Ner = 'org', idx = (23, 28))
Der US -Senat hielt eine Anerkennung über den Arbeitsminister Zhao Xiaolan ab, das heute von Präsident Bush nominiert wurde. Es wird erwartet, dass sie die Unterstützung des Senats erfolgreich bestehen und das erste chinesische Kabinettsmitglied des Landes in der Geschichte werden wird.
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) wurde (vg) das (NES) Land (NC) hat immer (d) das erste (neu) chinesische (NA) Frau (NA) Kabinett (NA) Mitglied (NA). (Periodenkategorie)
Nertoken (Word = 'US -Senat', ner = 'org', idx = (0, 5))
Nertoken (Word = 'Today', Ner = 'loc', idx = (7, 9))
Nertoken (word = 'bush', ner = 'person', idx = (11, 13))
Nertoken (Word = 'Arbeitsminister', Ner = 'org', idx = (17, 21))
Nertoken (Word = 'wählen', ner = 'Person', idx = (21, 24))
Nertoken (Word = 'Anerkennung Hören', Ner = 'Ereignis', idx = (26, 31))
Nertoken (Word = 'Senat', Ner = 'org', idx = (42, 45))
Nertoken (word = 'first', ner = 'ordinal', idx = (56, 58))
Nertoken (Word = 'Chinese', ner = 'norp', idx = (60, 62))
Blank ist auch in Ordnung
Leer (VH) (Whitespace) ist auch (d) (shi) Can (vh) (t) ~ (fw)
Leistung von NLP Tools
Das Folgende ist ein Leistungsvergleich zwischen unserem Tool und anderen Tools.
Das Folgende ist ein Vergleich der Leistung unserer Tools mit anderen Tools.
CKIP -Transformers gegen Monpa & Jeiba
| Werkzeug | WS (F1) | Pos (ACC) | WS+POS (F1) | Ner (F1) |
|---|
| CKIP Bert Basis | 97,60% | 95,67% | 94,19% | 81,18% |
| CKIP Albert Base | 97,33% | 95,30% | 93,52% | 79,47% |
| CKIP Bert winzig | 96,98% | 95,08% | 93,13% | 74,20% |
| CKIP Albert Tiny | 96,66% | 94,48% | 92,25% | 71,17% |
| | | | |
| Monpa † | 92,58% | - | 83,88% | - |
| JIBA | 81,18% | - | - | - |
† Monpa liefert nur 3 Arten von Tags in NER.
† Die Identifizierung der Entität von Monpa liefert nur drei Marker.
CKIP -Transformatoren gegen Ckiptagger
Die folgenden Ergebnisse werden auf einem anderen Datensatz getestet. †
Das folgende Experiment wird in einem anderen Datensatz getestet. †
| Werkzeug | WS (F1) | Pos (ACC) | WS+POS (F1) | Ner (F1) |
|---|
| CKIP Bert Basis | 97,84% | 96,46% | 94,91% | 79,20% |
| Ckiptagger | 97,33% | 97,20% | 94,75% | 77,87% |
† Hier haben wir unser Bert -Modell mit demselben Datensatz mit Ckiptagger umgeschrieben/getestet.
† Wir werden unser Bert -Modell auf demselben Datensatz wie Ckiptagger erneut übertragen/testen.
Lizenz
Copyright (C) 2023 CKIP Lab unter der GPL-3.0-Lizenz.