محولات CKIP
يوفر هذا المشروع نماذج المحولات الصينية التقليدية (بما في ذلك ألبرت و BERT و GPT2) وأدوات NLP (بما في ذلك تجزئة الكلمات ، وعلامات جزء من الكلام ، والتعرف على الكيان المسماة).
يوفر هذا المشروع نموذج Transformers باللغة الصينية التقليدية (بما في ذلك Albert و Bert و GPT2) وأدوات معالجة اللغة الطبيعية (بما في ذلك وضع علامة في فعل الكلمات ، وعلامة جزء من الكلام ، والتعرف على الكيانات).
غيت
https://github.com/ckiplab/ckip-transformers
pypi
https://pypi.org/project/ckip-transformers
الوثائق
https://ckip-transformers.readthedocs.io
العرض التوضيحي
https://ckip.iis.sinica.edu.tw/service/transformers
المساهمين
- Mu Yang في CKIP (مؤلف وصيور).
- Wei-yun MA في CKIP (SANGERAINER).
الحزم ذات الصلة
- ckiptagger: مكتبة صينية NLP بديلة مع استخدام BILSTM.
- مجموعة أدوات CKIP Corenlp: مكتبة NLP صينية مع المزيد من مهام NLP والمرافق.
النماذج
يمكنك أيضًا استخدام نماذجنا المسبقة مع مكتبة Luggingface Transformers مباشرة: https://huggingface.co/ckiplab/.
يمكنك تنزيل النموذج المسبق على https://huggingface.co/ckiplab/.
- نماذج اللغة
- ألبرت تيني:
ckiplab/albert-tiny-chinese - قاعدة ألبرت:
ckiplab/albert-base-chinese - بيرت تيني:
ckiplab/bert-tiny-chinese - قاعدة بيرت:
ckiplab/bert-base-chinese - GPT2 Tiny:
ckiplab/gpt2-tiny-chinese - قاعدة GPT2:
ckiplab/gpt2-base-chinese
- نماذج مهمة NLP
- Albert Tiny-تجزئة الكلمات:
ckiplab/albert-tiny-chinese-ws - Albert Tiny-علامات جزء من الكلام:
ckiplab/albert-tiny-chinese-pos - Albert Tiny-Name-Entity التعرف:
ckiplab/albert-tiny-chinese-ner - قاعدة ألبرت-تجزئة الكلمات:
ckiplab/albert-base-chinese-ws - قاعدة ألبرت-علامات جزء من الكلام:
ckiplab/albert-base-chinese-pos - قاعدة Albert-Name-Entity التعرف:
ckiplab/albert-base-chinese-ner - Bert Tiny-تجزئة الكلمات:
ckiplab/bert-tiny-chinese-ws - Bert Tiny-علامات جزء من الكلام:
ckiplab/bert-tiny-chinese-pos - Bert Tiny-Named-Entity التعرف:
ckiplab/bert-tiny-chinese-ner - Bert Base-تجزئة الكلمات:
ckiplab/bert-base-chinese-ws - قاعدة بيرت-علامات جزء من الكلام:
ckiplab/bert-base-chinese-pos - Bert Base-Named-Entity التعرف:
ckiplab/bert-base-chinese-ner
استخدام النموذج
يمكنك استخدام نموذجنا مباشرة من مكتبة Transformers في HuggingFace.
يمكنك استخدام نماذجنا مباشرة من خلال مجموعة Transformers الخاصة بـ HuggingFace.
pip install -U transformers
يرجى استخدام BertTokenizerfast كـ Tokenizer ، واستبدال ckiplab/albert-tiny-chinese و ckiplab/albert-tiny-chinese-ws بواسطة أي نموذج تحتاجه في المثال التالي.
يرجى استخدام berttokenizerfast المدمج واستبدال ckiplab/albert-tiny-chinese و ckiplab/albert-tiny-chinese-ws في المثال التالي مع أي اسم طراز تريد استخدامه.
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
نموذج صرف جيد
لتوفيق نموذجنا على مجموعات البيانات الخاصة بك ، يرجى الرجوع إلى المثال التالي من محولات HuggingFace.
يمكنك الرجوع إلى الأمثلة التالية لضبط نموذجنا إلى مجموعة البيانات الخاصة بك.
- 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/xamples/pytorch/token-classification
تذكر أن تقوم بتعيين- --tokenizer_name bert-base-chinese من أجل استخدام الرمز المميز الصيني.
تذكر أن تقوم بتعيين- --tokenizer_name bert-base-chinese لاستخدام الرمز المميز باللغة الصينية بشكل صحيح.
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
...
أداء النموذج
فيما يلي مقارنة بين الأداء بين نموذجنا والنماذج الأخرى.
يتم اختبار النتائج على مجموعة صينية تقليدية.
فيما يلي مقارنة بين أداء نموذجنا مع النماذج الأخرى.
يتم اختبار كل مهمة في مجموعة الاختبار الصينية التقليدية.
| نموذج | #حدود | الحيرة † | WS (F1) ‡ | POS (ACC) ‡ | ner (f1) ‡ |
|---|
| Ckiplab/Albert-Tiny-Chinese | 4M | 4.80 | 96.66 ٪ | 94.48 ٪ | 71.17 ٪ |
| Ckiplab/Albert-Base-Chinese | 11 م | 2.65 | 97.33 ٪ | 95.30 ٪ | 79.47 ٪ |
| ckiplab/bert-tiny-chinese | 12 م | 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 | - | - | - |
| | | | | |
| voidful/albert_chinese_tiny | 4M | 74.93 | - | - | - |
| voidful/albert_chinese_base | 11 م | 22.34 | - | - | - |
| بيرت-القاعدة الصينية | 102m | 2.53 | - | - | - |
† الحيرة. كلما كان ذلك أفضل.
† درجة الارتباك أصغر الرقم ، كان ذلك أفضل.
‡ WS: تجزئة الكلمات ؛ نقاط البيع: جزء من الكلام. NER: NOME-ENTITY التعرف ؛ كلما كان ذلك أفضل.
‡ WS: الفعل الفعل ؛ نقاط البيع: علامة جزء من الكلام ؛ NER: التعرف على الكيان ؛ أكبر الرقم ، كان ذلك أفضل.
مجموعة تدريب
يتم تدريب نماذج اللغة على مجموعات بيانات Zhwiki و CNA ؛ يتم تدريب مهام WS و POS على مجموعة بيانات ASBC ؛ يتم تدريب مهام NER على مجموعة بيانات Ontonotes.
يتم تدريب نماذج اللغة أعلاه على مجموعات بيانات Zhwiki و CNA ؛ يتم تدريب نماذج مهمة كلمة VERB-VERB (WS) ونماذج علامات العلامات الجزئية (POS) على مجموعة بيانات ASBC ؛ يتم تدريب نماذج مهمة التعرف على الكيان (NER) على مجموعة بيانات Ontonotes.
- Zhwiki: https://dumps.wikimedia.org/zhwiki/
نص ويكيبيديا الصيني (20200801 DUMP) ، ترجم إلى التقليدية باستخدام OPENCC.
مقالة ويكي الصينية (إصدار 20200801) ، ترجم إلى الصينيين التقليديين باستخدام OpenCC.
- CNA: https://catalog.ldc.upenn.edu/ldc2011t13
الجزء الصيني Gigaword الطبعة الخامسة - CNA (وكالة الأنباء المركزية) جزء.
الطبعة الخامسة الصينية Gigaword - CNA (وكالة الأنباء المركزية).
- ASBC: http://asbc.iis.sinica.edu.tw
Academia Sinica مجموعة متوازنة من الإصدار الصيني الحديث 4.0.
الطبعة الرابعة من مجموعة الصينيين المتوازنة في الأكاديمية المركزية للعلوم.
- Ontonotes: https://catalog.ldc.upenn.edu/ldc2013t19
إصدار Ontonotes 5.0 ، الجزء الصيني ، ترجم إلى التقليدية باستخدام OpenCC.
Ontonotes الطبعة الخامسة ، الجزء الصيني ، ترجم إلى الصينيين التقليديين باستخدام OpenCC.
هنا ملخص لكل مجموعة.
فيما يلي قائمة بكل مجموعة بيانات.
| مجموعة البيانات | #وثائق | #lines | #Characters | نوع الخط |
|---|
| CNA | 2،559،520 | 13،532،445 | 1،219،029،974 | فقرة |
| تشويكي | 1،106،783 | 5،918،975 | 495،446،829 | فقرة |
| ASBC | 19،247 | 1،395،949 | 17،572،374 | بند |
| ontonotes | 1،911 | 48،067 | 1،568،491 | جملة |
فيما يلي تقسيم مجموعة البيانات المستخدمة في نماذج اللغة.
فيما يلي مجموعة البيانات المستخدمة لتدريب نماذج اللغة.
| CNA+Zhwiki | #وثائق | #lines | #Characters |
|---|
| يدرب | 3،606،303 | 18،986،238 | 4،347،517،682 |
| ديف | 30000 | 148،077 | 32،888،978 |
| امتحان | 30000 | 151،241 | 35،216،818 |
فيما يلي تقسيم مجموعة البيانات المستخدمة في تجزئة الكلمات ونماذج وضع علامات على جزء الكلام.
ما يلي هو قطع مجموعة البيانات المستخدمة لتدريب الفعل الفعل الكلمات ونماذج وضع علامة على جزء الكلام.
| ASBC | #وثائق | #lines | #كلمات | #Characters |
|---|
| يدرب | 15،247 | 1،183،260 | 9،480،899 | 14،724،250 |
| ديف | 2000 | 52،677 | 448،964 | 741323 |
| امتحان | 2000 | 160،012 | 1،315،129 | 2،106،799 |
فيما يلي تقسيم مجموعة البيانات المستخدمة في تجزئة الكلمات ونماذج التعرف على الكيان المسماة.
فيما يلي مجموعة البيانات المستخدمة لتدريب نماذج تعريف الكيانات.
| ontonotes | #وثائق | #lines | #Characters | #المسمى |
|---|
| يدرب | 1،511 | 43362 | 1،367،658 | 68،947 |
| ديف | 200 | 2،304 | 93،535 | 7،186 |
| امتحان | 200 | 2401 | 107298 | 6،977 |
أدوات NLP
توفر الحزمة أيضًا أدوات NLP التالية.
يوفر جناحنا أيضًا أدوات معالجة اللغة الطبيعية التالية.
- (WS) تجزئة الكلمات
- (نقاط البيع) وضع علامة على جزء من الكلام
- (NER) اسم التعرف على الكيان
تثبيت
pip install -U ckip-transformers
متطلبات:
- بيثون 3.6+
- Pytorch 1.5+
- محولات Huggingface 3.5+
استخدام أدوات NLP
انظر هنا للحصول على تفاصيل API.
لتوبيس مفصل ، انظر هنا.
البرنامج النصي الكامل لهذا المثال هو https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
يمكن العثور على الملف الشخصي الكامل للأمثلة التالية على https://github.com/ckiplab/ckip-transformers/blob/master/example/xample.py.
1. وحدة الاستيراد
from ckip_transformers . nlp import CkipWordSegmenter , CkipPosTagger , CkipNerChunker
2. نماذج الحمل
نحن نقدم العديد من النماذج المسبقة لأدوات NLP.
نحن نقدم بعض النماذج التي تم تدريبها مسبقًا لأدوات اللغة الطبيعية.
# Initialize drivers
ws_driver = CkipWordSegmenter ( model = "bert-base" )
pos_driver = CkipPosTagger ( model = "bert-base" )
ner_driver = CkipNerChunker ( model = "bert-base" )
يمكن للمرء أيضًا تحميل نقاط التفتيش الخاصة به باستخدام برامج التشغيل لدينا.
يمكنك أيضًا استخدام أدواتنا لتدريب النماذج الخاصة بك.
# 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" )
لاستخدام GPU ، يجوز للمرء تحديد معرف الجهاز أثناء تهيئة برامج التشغيل. ضبط على -1 (افتراضي) لتعطيل GPU.
يمكن تحديد الجهاز عند إعلان قواطع الكلمات لاستخدام وحدة معالجة الرسومات. التعيين على -1 (القيمة المسبقة) يعني أن وحدة معالجة الرسومات لا تستخدم.
# Use CPU
ws_driver = CkipWordSegmenter ( device = - 1 )
# Use GPU:0
ws_driver = CkipWordSegmenter ( device = 0 )
3. تشغيل خط الأنابيب
يجب أن يكون المدخلات لتجزئة الكلمات والتعرف على الدائر المسماة قائمة بالجمل.
يجب أن تكون إدخال وضع علامة على جزء الكلام قائمة قائمة بالكلمات (إخراج تجزئة الكلمات).
يجب أن تكون مدخلات التعرف على الفعل وتحديد الكيان قائمة بالجمل.
يجب أن تكون إدخال علامات جزء الكلام قائمة بقائمة الكلمات.
# Input text
text = [
"傅達仁今將執行安樂死,卻突然爆出自己20年前遭緯來體育台封殺,他不懂自己哪裡得罪到電視台。" ,
"美國參議院針對今天總統布什所提名的勞工部長趙小蘭展開認可聽證會,預料她將會很順利通過參議院支持,成為該國有史以來第一位的華裔女性內閣成員。" ,
"空白 也是可以的~" ,
]
# Run pipeline
ws = ws_driver ( text )
pos = pos_driver ( ws )
ner = ner_driver ( text )
سيقوم برنامج تشغيل POS تلقائيًا بتقسيم الجملة داخليًا باستخدام أحرف ',,。::;;!!??' أثناء تشغيل النموذج. (سيتم تسلسل جمل الإخراج مرة أخرى.) يمكنك تعيين delim_set على أي أحرف تريدها.
يمكنك تعيين use_delim=False لتعطيل هذه الميزة ، أو تعيين use_delim=True في برنامج تشغيل WS و NER لتمكين هذه الميزة.
سيتم استخدام أداة وضع علامة جزء الكلام تلقائيًا ',,。::;;!!??' تُقطع الأحرف ETC الجمل قبل تنفيذ النموذج (سيتم التقاط جمل الإخراج تلقائيًا). يمكن تعيين معلمة delim_set لاستخدام أحرف أخرى لقطعها.
بالإضافة إلى ذلك ، يمكنك تحديد use_delim=False قام بتعطيل هذه الوظيفة ، أو أنه تم تمكين use_delim=True عندما أعذار الفعل وتحديد الكيان.
# 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 ' )
يمكنك تحديد batch_size و max_length لاستخدام موارد الجهاز بشكل أفضل.
يمكنك أيضًا تعيين batch_size و max_length للاستفادة بشكل أفضل من موارد الجهاز الخاصة بك.
# Sets the batch size and maximum sentence length
ws = ws_driver ( text , batch_size = 256 , max_length = 128 )
4. إظهار النتائج
# 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 () فو دارين على وشك أداء القتل الرحيم ، ولكن فجأة تعرض أنه تم حظره من قبل محطة ويلاي الرياضية قبل 20 عامًا. لم يكن يعرف أين أساء إلى محطة التلفزيون.
فو دارين (NB) سوف (د) أداء (VC) القتل الرحيم (NA) ، ولكن (commacategory) اندلع فجأة أنه (VJ) تم حظره من قبل (NH) قبل 20 عامًا (ND) (NG) و (Commacategory) HE (NH) لا يفهم أين (VK) الذي قام بإهتمامه (VC) للتلفزيون (NCD). (الفترة الفترة)
Nertoken (Word = 'fu daren' ، ner = 'person' ، idx = (0 ، 3))
Nertoken (Word = '20 years '، ner =' date '، idx = (18 ، 21))
Nertoken (Word = 'Weilai Sports Station' ، ner = 'org' ، idx = (23 ، 28))
عقد مجلس الشيوخ الأمريكي جلسة استماع لوزراء العمل تشاو شياوولان ترشيحه الرئيس بوش اليوم. من المتوقع أنها ستقدم بنجاح دعم مجلس الشيوخ وتصبح أول عضو في مجلس الوزراء الصيني في البلاد في التاريخ.
يهدف مجلس الشيوخ بالولايات المتحدة (NC) (NC) إلى (P) اليوم (ND) الرئيس (NA) بوش (NB) وزير العمل (VC) (NA) Zhao Xiaolan (NB) الذي عقد (VC) (VC) SEN (VC) SEN (VC) SEN (VC). أصبحت (Commacategory) (VG) البلد (NES) (NC) دائمًا (د) أول عضو في مجلس الوزراء الصيني (NA) (NA) (NA) (NA). (الفترة الفترة)
Nertoken (Word = 'U.S. SENATE' ، ner = 'org' ، idx = (0 ، 5))
Nertoken (Word = 'Today "، ner =' loc '، idx = (7 ، 9))
Nertoken (Word = 'Bush' ، ner = 'person' ، idx = (11 ، 13))
Nertoken (Word = 'Minist of Labor' ، ner = 'org' ، idx = (17 ، 21))
nertoken (Word = 'Cyechisti' ، ner = 'person' ، idx = (21 ، 24))
Nertoken (Word = 'AndraNshorting Hearing' ، ner = 'event' ، idx = (26 ، 31))
Nertoken (Word = 'Senate' ، ner = 'org' ، idx = (42 ، 45))
Nertoken (Word = 'First' ، ner = 'Ordinal' ، idx = (56 ، 58))
Nertoken (Word = 'Chinese' ، ner = 'norp' ، idx = (60 ، 62))
فارغ على ما يرام أيضا
فارغة (VH) (المسافة البيضاء) هي أيضًا (د) هي (shi) Can (VH) (t) ~ (fw)
أداء أدوات NLP
فيما يلي مقارنة بين الأداء بين أدائنا والأدوات الأخرى.
فيما يلي مقارنة بين أداء أدواتنا بأدوات أخرى.
CKIP Transformers vs Monpa & Jeiba
| أداة | WS (F1) | POS (ACC) | WS+POS (F1) | NER (F1) |
|---|
| قاعدة CKIP BERT | 97.60 ٪ | 95.67 ٪ | 94.19 ٪ | 81.18 ٪ |
| قاعدة 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 ٪ |
| | | | |
| مونبا † | 92.58 ٪ | - | 83.88 ٪ | - |
| جيبا | 81.18 ٪ | - | - | - |
† MONPA يوفر فقط 3 أنواع من العلامات في NER.
† تحديد كيان Monpa يوفر فقط ثلاث علامات.
CKIP Transformers vs Ckiptagger
يتم اختبار النتائج التالية على مجموعة بيانات مختلفة. †
يتم اختبار التجربة التالية في مجموعة بيانات أخرى. †
| أداة | WS (F1) | POS (ACC) | WS+POS (F1) | NER (F1) |
|---|
| قاعدة CKIP BERT | 97.84 ٪ | 96.46 ٪ | 94.91 ٪ | 79.20 ٪ |
| ckiptagger | 97.33 ٪ | 97.20 ٪ | 94.75 ٪ | 77.87 ٪ |
† هنا قمنا بإعادة تدريب/اختبار نموذج BERT الخاص بنا باستخدام نفس مجموعة البيانات مع ckiptagger.
† نقوم بإعادة تدريب/اختبار نموذج BERT الخاص بنا على نفس مجموعة البيانات مثل ckiptagger.
رخصة
حقوق الطبع والنشر (C) 2023 CKIP Lab تحت ترخيص GPL-3.0.