CKIP Transformers
Proyek ini menyediakan model Transformers Tiongkok tradisional (termasuk Albert, Bert, GPT2) dan alat NLP (termasuk segmentasi kata, penandaan sebagian, pengenalan entitas bernama).
Proyek ini menyediakan model Transformers dalam bahasa Cina tradisional (termasuk Albert, Bert, GPT2) dan alat pemrosesan bahasa alami (termasuk penandaan kata kerja kata kerja, penandaan bagian-of-speech, dan pengenalan entitas).
Git
https://github.com/ckiplab/ckip-transformers
Pypi
https://pypi.org/project/ckip-transformers
Dokumentasi
https://ckip-transformers.readthedocs.io
Demo
https://ckip.iis.sinica.edu.tw/service/transformers
Kontributor
- Mu Yang di CKIP (Penulis & Pemelihara).
- Wei-yun Ma di CKIP (Pemelihara).
Paket terkait
- CKIptagger: Perpustakaan NLP Cina alternatif dengan menggunakan BILSTM.
- CKIP CORENLP Toolkit: Perpustakaan NLP Cina dengan lebih banyak tugas dan utilitas NLP.
Model
Anda juga dapat menggunakan model pretrained kami dengan perpustakaan HuggingFace Transformers secara langsung: https://huggingface.co/ckiplab/.
Anda dapat mengunduh model pretrained di https://huggingface.co/ckiplab/.
- Model bahasa
- Albert Tiny:
ckiplab/albert-tiny-chinese - Pangkalan Albert:
ckiplab/albert-base-chinese - Bert Tiny:
ckiplab/bert-tiny-chinese - BASE BERT:
ckiplab/bert-base-chinese - GPT2 TINY:
ckiplab/gpt2-tiny-chinese - Basis GPT2:
ckiplab/gpt2-base-chinese
- Model tugas NLP
- Albert Tiny-Segmentasi Kata:
ckiplab/albert-tiny-chinese-ws - Albert Tiny-Part-of-Speech Tagging:
ckiplab/albert-tiny-chinese-pos - Albert Tiny-Pengakuan Namis-Entity:
ckiplab/albert-tiny-chinese-ner - Albert Base-Segmentasi kata:
ckiplab/albert-base-chinese-ws - Albert Base-Tagging bagian-dari-pidato:
ckiplab/albert-base-chinese-pos - Pangkalan Albert-Pengenalan Namis-Entity:
ckiplab/albert-base-chinese-ner - Bert Tiny-Segmentasi Kata:
ckiplab/bert-tiny-chinese-ws - Bert Tiny-Part-of-Speech Tags:
ckiplab/bert-tiny-chinese-pos - Bert Tiny-Named-Entity Recognition:
ckiplab/bert-tiny-chinese-ner - Bert Base-Segmentasi Kata:
ckiplab/bert-base-chinese-ws - Bert Base-Part-of-Speech Tags:
ckiplab/bert-base-chinese-pos - Bert Base-Pengakuan Namis-Entity:
ckiplab/bert-base-chinese-ner
Penggunaan model
Anda dapat menggunakan model kami langsung dari Perpustakaan Transformers HuggingFace.
Anda dapat menggunakan model kami langsung melalui suite Transformers Huggingface.
pip install -U transformers
Harap gunakan Berttokenizerfast sebagai tokenizer, dan ganti ckiplab/albert-tiny-chinese dan ckiplab/albert-tiny-chinese-ws oleh model apa pun yang Anda butuhkan dalam contoh berikut.
Harap gunakan Berttokenizerfast built-in dan ganti ckiplab/albert-tiny-chinese dan ckiplab/albert-tiny-chinese-ws dalam contoh berikut dengan nama model apa pun yang ingin Anda gunakan.
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 fine-tunning
Untuk memperbaiki model kami pada dataset Anda sendiri, silakan merujuk ke contoh berikut dari Transformers HuggingFace.
Anda dapat merujuk pada contoh-contoh berikut untuk menyempurnakan model kami ke set data Anda sendiri.
- 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-clasifikasi
Ingatlah untuk mengatur --tokenizer_name bert-base-chinese untuk menggunakan tokenizer Cina.
Ingatlah untuk mengatur --tokenizer_name bert-base-chinese untuk menggunakan tokenizer dalam bahasa Cina dengan benar.
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
...
Kinerja model
Berikut ini adalah perbandingan kinerja antara model kami dan model lainnya.
Hasilnya diuji pada korpus tradisional Tiongkok.
Berikut ini adalah perbandingan kinerja model kami dengan model lain.
Setiap tugas diuji dalam set tes Cina tradisional.
| Model | #Parameters | Kebingungan† | WS (F1) ‡ | POS (ACC) ‡ | Ner (f1) ‡ |
|---|
| CKIPLAB/ALBERT-TINE-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 | 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-Chinese | 4m | 16.94 | - | - | - |
| CKIPLAB/GPT2-BASE-CHINESE | 102m | 8.36 | - | - | - |
| | | | | |
| batal/albert_chinese_tiny | 4m | 74.93 | - | - | - |
| batal/albert_chinese_base | 11m | 22.34 | - | - | - |
| Bert-Base-Chinese | 102m | 2.53 | - | - | - |
† Kebingungan; Semakin kecil semakin baik.
† Gelar Kebingungan; Semakin kecil angkanya, semakin baik.
‡ WS: Segmentasi kata; POS: bagian-of-speech; Ner: pengakuan namanya-entitas; semakin besar semakin baik.
‡ WS: kata kerja kata kerja; POS: Tanda bagian-dari-pidato; Ner: pengakuan entitas; Semakin besar angkanya, semakin baik.
Pelatihan corpus
Model bahasa dilatih pada dataset Zhwiki dan CNA; Tugas WS dan POS dilatih pada dataset ASBC; Tugas NER dilatih pada dataset Ontonotes.
Model bahasa di atas dilatih pada set data Zhwiki dan CNA; Model tugas kata verb-coba (WS) dan sebagian penagihan (POS) dilatih pada set data ASBC; Model tugas Entity Recognition (NER) dilatih pada set data Ontonotes.
- Zhwiki: https://dumps.wikimedia.org/zhwiki/
Teks Wikipedia Cina (dump 20200801), diterjemahkan ke tradisional menggunakan opencc.
Artikel Wiki Cina (versi 20200801), diterjemahkan ke dalam bahasa Cina tradisional menggunakan Opencc.
- CNA: https://catalog.ldc.upenn.edu/ldc2011t13
Edisi Kelima Gigaword Cina - CNA (Kantor Berita Sentral) Bagian.
Edisi Kelima Gigaword Cina - CNA (Kantor Berita Pusat).
- ASBC: http://asbc.iis.sinica.edu.tw
Academia Sinica Balanced Corpus dari Modern Chinese Release 4.0.
Edisi Keempat Corpus Balanced Chinese dari Central Academy of Sciences.
- Ontonotes: https://catalog.ldc.upenn.edu/ldc2013t19
Ontonotes Release 5.0, bagian Cina, diterjemahkan ke tradisional menggunakan opencc.
Ontonotes Fifth Edition, bagian Cina, diterjemahkan ke dalam bahasa Cina tradisional menggunakan Opencc.
Berikut adalah ringkasan dari setiap korpus.
Berikut ini adalah daftar setiap set data.
| Dataset | #Documents | #Lines | #Characters | Tipe garis |
|---|
| CNA | 2.559.520 | 13.532.445 | 1.219.029.974 | Ayat |
| Zhwiki | 1.106.783 | 5.918.975 | 495.446.829 | Ayat |
| ASBC | 19.247 | 1.395.949 | 17.572.374 | Ayat |
| Ontonotes | 1.911 | 48.067 | 1.568.491 | Kalimat |
Berikut adalah dataset split yang digunakan untuk model bahasa.
Berikut ini adalah potongan dataset yang digunakan untuk melatih model bahasa.
| CNA+Zhwiki | #Documents | #Lines | #Characters |
|---|
| Kereta | 3.606.303 | 18.986.238 | 4.347.517.682 |
| Dev | 30.000 | 148.077 | 32.888.978 |
| Tes | 30.000 | 151.241 | 35.216.818 |
Berikut adalah dataset split yang digunakan untuk segmentasi kata dan model penandaan bagian-dari-pidato.
Berikut ini adalah pemotongan dataset yang digunakan untuk melatih kata kerja kata kerja kata dan model penandaan sebagian.
| ASBC | #Documents | #Lines | #Kata-kata | #Characters |
|---|
| Kereta | 15.247 | 1.183.260 | 9.480.899 | 14.724.250 |
| Dev | 2.000 | 52.677 | 448.964 | 741.323 |
| Tes | 2.000 | 160.012 | 1.315.129 | 2.106.799 |
Berikut adalah perpecahan dataset yang digunakan untuk segmentasi kata dan model pengenalan entitas yang disebut.
Berikut ini adalah potongan dataset yang digunakan untuk melatih model identifikasi entitas.
| Ontonotes | #Documents | #Lines | #Characters | #Named-Entities |
|---|
| Kereta | 1.511 | 43.362 | 1.367.658 | 68.947 |
| Dev | 200 | 2.304 | 93.535 | 7.186 |
| Tes | 200 | 2.401 | 107.298 | 6.977 |
Alat NLP
Paket ini juga menyediakan alat NLP berikut.
Suite kami juga menyediakan alat pemrosesan bahasa alami berikut.
- (WS) Segmentasi kata
- (POS) Tagging bagian-of-speech
- (Ner) pengakuan entitas bernama
Instalasi
pip install -U ckip-transformers
Persyaratan:
- Python 3.6+
- Pytorch 1.5+
- Huggingface Transformers 3.5+
Penggunaan Alat NLP
Lihat di sini untuk detail API.
Untuk API terperinci, lihat di sini.
Skrip lengkap dari contoh ini adalah https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
Profil lengkap dari contoh-contoh berikut dapat ditemukan di https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
1. Modul Impor
from ckip_transformers . nlp import CkipWordSegmenter , CkipPosTagger , CkipNerChunker
2. Model Muat
Kami menyediakan beberapa model pretrained untuk alat NLP.
Kami menyediakan beberapa model pra-terlatih untuk alat bahasa alami.
# Initialize drivers
ws_driver = CkipWordSegmenter ( model = "bert-base" )
pos_driver = CkipPosTagger ( model = "bert-base" )
ner_driver = CkipNerChunker ( model = "bert-base" )
Seseorang juga dapat memuat pos pemeriksaan mereka sendiri menggunakan driver kami.
Anda juga dapat menggunakan alat kami untuk melatih model Anda sendiri.
# 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" )
Untuk menggunakan GPU, orang dapat menentukan ID perangkat saat menginisialisasi driver. Diatur ke -1 (default) untuk menonaktifkan GPU.
Perangkat dapat ditentukan saat mendeklarasikan pemutus kata untuk menggunakan GPU. Diatur ke -1 (nilai preset) berarti bahwa GPU tidak digunakan.
# Use CPU
ws_driver = CkipWordSegmenter ( device = - 1 )
# Use GPU:0
ws_driver = CkipWordSegmenter ( device = 0 )
3. Jalankan pipa
Input untuk segmentasi kata dan pengakuan namanya-entitas harus merupakan daftar kalimat.
Input untuk penandaan bagian-dari-speech harus merupakan daftar daftar kata (output dari segmentasi kata).
Input untuk kata kerja dan identifikasi entitas harus merupakan daftar kalimat.
Input dari tag bagian-of-speech harus daftar daftar kata.
# Input text
text = [
"傅達仁今將執行安樂死,卻突然爆出自己20年前遭緯來體育台封殺,他不懂自己哪裡得罪到電視台。" ,
"美國參議院針對今天總統布什所提名的勞工部長趙小蘭展開認可聽證會,預料她將會很順利通過參議院支持,成為該國有史以來第一位的華裔女性內閣成員。" ,
"空白 也是可以的~" ,
]
# Run pipeline
ws = ws_driver ( text )
pos = pos_driver ( ws )
ner = ner_driver ( text )
Driver POS akan secara otomatis mensegmentasikan kalimat secara internal menggunakan karakter di sana ',,。::;;!!??' Saat menjalankan model. (Kalimat output akan digabungkan kembali.) Anda dapat mengatur delim_set ke karakter apa pun yang Anda inginkan.
Anda dapat mengatur use_delim=False untuk menonaktifkan fitur ini, atau atur use_delim=True in ws dan ner driver untuk mengaktifkan fitur ini.
Alat penandaan sebagian akan digunakan secara otomatis ',,。::;;!!??' ETC karakter memotong kalimat sebelum mengeksekusi model (kalimat output akan secara otomatis diambil). Parameter delim_set dapat diatur untuk menggunakan karakter lain untuk dipotong.
Selain itu, Anda dapat menentukan use_delim=False telah menonaktifkan fungsi ini, atau bahwa use_delim=True telah diaktifkan ketika kata kerja alasan dan identifikasi entitas.
# 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 ' )
Anda dapat menentukan batch_size dan max_length untuk memanfaatkan sumber daya mesin Anda dengan lebih baik.
Anda juga dapat mengatur batch_size dan max_length untuk memanfaatkan sumber daya mesin Anda dengan lebih baik.
# Sets the batch size and maximum sentence length
ws = ws_driver ( text , batch_size = 256 , max_length = 128 )
4. Tunjukkan hasil
# 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 akan melakukan euthanasia, tetapi tiba -tiba dia terpapar bahwa dia dilarang oleh Weilai Sports Station 20 tahun yang lalu. Dia tidak tahu di mana dia menyinggung stasiun TV.
Fu Daren (NB) akan (D) melakukan (VC) Euthanasia (NA), tetapi (komakat) tiba -tiba pecah bahwa (VJ) ia dilarang oleh (NH) 20 tahun yang lalu (ND) (NG) dan (Commacategory) ia (NH) tidak mengerti di mana (VK) ia menyinggung stasiun TV (VC) TV (NCD). (Kategori periode)
Nertoken (word = 'fu daren', ner = 'person', idx = (0, 3))
Nertoken (word = '20 tahun ', ner =' date ', idx = (18, 21))
Nertoken (word = 'stasiun olahraga weilai', ner = 'org', idx = (23, 28)))
Senat A.S. mengadakan sidang pengakuan tentang Sekretaris Tenaga Kerja Zhao Xiaolan yang dicalonkan oleh Presiden Bush hari ini. Diharapkan bahwa dia akan berhasil melewati dukungan Senat dan menjadi anggota kabinet perempuan Tiongkok pertama di negara itu dalam sejarah.
Senat Amerika Serikat (NC) (NC) ditujukan untuk (P) hari ini (ND) Presiden (NA) Bush (NB) yang dicalonkan (VC) Sekretaris Tenaga Kerja (NA) Zhao Xiaolan (NB) yang diperkirakan (VC) (VC) (VC) (VC) (VC) (VC), dan (VC) (VC), dan (VC) (VC) (VC) (VC) (VC), dan (VC) (VC) (VC) (VC) (VC) (VC) (VC) (VC) (VC) (VC) (VC) (VC) (VC) (VC) (VC) SUMPORTION (VC) LUAR BIASA (D) (Commacategory) menjadi (VG) Negara (NES) (NC) selalu (d) anggota China (NEU) China (NA) Woman (NA) Kabinet (NA) (NA) (NA). (Kategori periode)
Nertoken (word = 'u.s. Senate', ner = 'org', idx = (0, 5))
Nertoken (word = 'hari ini', ner = 'loc', idx = (7, 9))
Nertoken (word = 'bush', ner = 'person', idx = (11, 13))
Nertoken (word = 'Menteri Buruh', ner = 'org', idx = (17, 21))
Nertoken (word = 'pilihi', ner = 'person', idx = (21, 24))
Nertoken (word = 'pendengaran pengakuan', ner = 'event', idx = (26, 31))
Nertoken (word = 'senate', ner = 'org', idx = (42, 45))
Nertoken (word = 'pertama', ner = 'ordinal', idx = (56, 58)))
Nertoken (word = 'cina', ner = 'norp', idx = (60, 62))
Blank juga oke
Blank (VH) (whitespace) juga (d) adalah (shi) can (vh) (t) ~ (fw)
Kinerja Alat NLP
Berikut ini adalah perbandingan kinerja antara alat kami dan alat lainnya.
Berikut ini adalah perbandingan kinerja alat kami dengan alat lain.
CKIP Transformers vs Monta & Jeiba
| Alat | WS (F1) | POS (ACC) | WS+POS (F1) | Ner (f1) |
|---|
| CKIP Bert Base | 97,60% | 95,67% | 94,19% | 81,18% |
| Pangkalan CKIP ALBERT | 97,33% | 95,30% | 93,52% | 79,47% |
| CKIP Bert Tiny | 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 hanya menyediakan 3 jenis tag di NER.
† Identifikasi entitas MONPA hanya menyediakan tiga penanda.
CKIP Transformers vs Ckiptagger
Hasil berikut diuji pada dataset yang berbeda. †
Eksperimen berikut diuji dalam dataset lain. †
| Alat | 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% |
† Di sini kami melatih kembali/menguji model BERT kami menggunakan dataset yang sama dengan CKIptagger.
† Kami melatih kembali/menguji model BERT kami pada dataset yang sama dengan CKIptagger.
Lisensi
Hak Cipta (C) 2023 CKIP Lab di bawah lisensi GPL-3.0.