CKIP Transformers
Этот проект предоставляет традиционные модели китайских трансформаторов (включая инструменты Albert, Bert, GPT2) и NLP (включая сегментацию слова, тегинги, часть речи, признание сущности).
Этот проект предоставляет модель трансформаторов в традиционных инструментах китайского языка (включая Альберт, Берт, GPT2) и инструменты обработки естественного языка (включая маркировку глагола глагола слова, маркировку части речи и распознавание сущности).
Git
https://github.com/ckiplab/ckip-transformers
Пипи
https://pypi.org/project/ckip-transformers
Документация
https://ckip-transformers.readthedocs.io
Демо
https://ckip.iis.sinica.edu.tw/service/transformers
Участники
- Му Ян в CKIP (автор и сопровождающий).
- Вей-Юн Ма в CKIP (сопровождающий).
Связанные пакеты
- Ckipgagger: альтернативная китайская библиотека NLP с использованием Bilstm.
- CKIP CORENLP Toolkit: китайская библиотека NLP с большим количеством задач NLP и утилиты.
Модели
Вы также можете использовать наши предварительные модели с библиотекой трансформаторов HuggingFace.
Вы можете скачать предварительную модель по адресу https://huggingface.co/ckiplab/.
- Языковые модели
- Альберт Тини:
ckiplab/albert-tiny-chinese - Альберт База:
ckiplab/albert-base-chinese - Bert Tiny:
ckiplab/bert-tiny-chinese - БЕРТ БАЗИНА:
ckiplab/bert-base-chinese - GPT2 Tiny:
ckiplab/gpt2-tiny-chinese - GPT2 BASE:
ckiplab/gpt2-base-chinese
- Модели задач NLP
- Альберт Тини-Сегментация слова:
ckiplab/albert-tiny-chinese-ws - Альберт Тини-Часть речи текс:
ckiplab/albert-tiny-chinese-pos - Альберт Тини-Признание названного суда:
ckiplab/albert-tiny-chinese-ner - Основание Альберта-Сегментация слова:
ckiplab/albert-base-chinese-ws - База Альберта-Часть речи:
ckiplab/albert-base-chinese-pos - База Альберта-Признание названного суда:
ckiplab/albert-base-chinese-ner - Bert Tiny-Сегментация слова:
ckiplab/bert-tiny-chinese-ws - Bert Tiny-Часть речи:
ckiplab/bert-tiny-chinese-pos - Bert Tiny-Признание названного суда:
ckiplab/bert-tiny-chinese-ner - BERT BASE-Сегментация слова:
ckiplab/bert-base-chinese-ws - BERT BASE-Часть речи:
ckiplab/bert-base-chinese-pos - BERT BASE-Признание с именем-энтином:
ckiplab/bert-base-chinese-ner
Модель использования
Вы можете использовать нашу модель непосредственно из библиотеки Transformers.
Вы можете использовать наши модели непосредственно через набор Transformers.
pip install -U transformers
Пожалуйста, используйте Berttokenizerfast в качестве токенизатора и замените ckiplab/albert-tiny-chinese и ckiplab/albert-tiny-chinese-ws на любую модель, которая вам нужна в следующем примере.
Пожалуйста, используйте встроенный Berttokenizer и замените 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
Моделируя тонкая
Чтобы точно настроить нашу модель на своих собственных наборах данных, пожалуйста, обратитесь к следующему примеру от Transformers 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/examples/pytorch/token-classiation
Не забудьте установить --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 | 4 м | 4.80 | 96,66% | 94,48% | 71,17% |
| Ckiplab/Albert-Base-Chinese | 11m | 2.65 | 97,33% | 95,30% | 79,47% |
| Ckiplab/Bert-Niny-Chinese | 12 м | 8.07 | 96,98% | 95,11% | 74,21% |
| CKIPLAB/BERT-BASE-Chinese | 102 м | 1.88 | 97,60% | 95,67% | 81,18% |
| CKIPLAB/GPT2-CININGE-Chinese | 4 м | 16.94 | - | - | - |
| CKIPLAB/GPT2-BASE-Chinese | 102 м | 8.36 | - | - | - |
| | | | | |
| voidful/albert_chinese_tiny | 4 м | 74,93 | - | - | - |
| voidful/albert_chinese_base | 11m | 22.34 | - | - | - |
| БЕРТ-Базе-Китайз | 102 м | 2.53 | - | - | - |
† недоумение; Чем меньше, тем лучше.
† Степень путаницы; Чем меньше число, тем лучше.
‡ WS: сегментация слова; POS: часть речи; Нер: признание названного энти; Чем больше, тем лучше.
‡ WS: глагол; POS: часть речи; Нер: признание сущности; Чем больше число, тем лучше.
Учебный корпус
Языковые модели обучаются наборах данных Zhwiki и CNA; Задачи WS и POS обучаются на наборе данных ASBC; Задачи NER обучаются на наборе данных Ontonotes.
Приведенные выше языковые модели обучаются на наборах данных Zhwiki и CNA; Модели задач с глаголом (WS) и частичной тегинги (POS) обучаются на наборе данных ASBC; Модели задач распознавания сущности (NER) обучаются наборе данных Ontonotes.
- Zhwiki: https://dumps.wikimedia.org/zhwiki/
Китайский текст Википедии (20200801 свалки), переведенный в традиционный с использованием OpenCC.
Китайская статья Вики (версия 20200801), переведенная в традиционный китайский язык с использованием OpenCC.
- CNA: https://catalog.ldc.upenn.edu/ldc2011t13
Китайский Гигаворд Пятое издание - часть CNA (Центральное информационное агентство).
Китайский Гигаворд Пятое издание - CNA (Центральное информационное агентство).
- ASBC: http://asbc.iis.sinica.edu.tw
Академия Синика Сбалансированный корпус современного китайского выпуска 4.0.
Четвертое издание китайского сбалансированного корпуса Центральной академии наук.
- Ontonotes: https://catalog.ldc.upenn.edu/ldc2013t19
Ontonotes Release 5.0, китайская часть, переведена на традиционное использование OpenCC.
Пятое издание Ontonotes, китайская часть, переведена в традиционные китайцы с использованием OpenCC.
Вот краткое изложение каждого корпуса.
Ниже приведен список каждого набора данных.
| Набор данных | #Documents | #Линии | #HARACTERS | Тип линии |
|---|
| 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 | Пункт |
| Онтонот | 1911 | 48 067 | 1568 491 | Предложение |
Вот разделение набора данных, используемое для языковых моделей.
Ниже приводится набор данных, используемый для обучения языковых моделей.
| CNA+Zhwiki | #Documents | #Линии | #HARACTERS |
|---|
| Тренироваться | 3606 303 | 18 986 238 | 4 347 517 682 |
| Девчонка | 30 000 | 148 077 | 32 888 978 |
| Тест | 30 000 | 151 241 | 35,216,818 |
Вот разделение набора данных, используемое для сегментации слов и моделей тегов частичной речи.
Ниже приводится резка наборов данных, используемая для обучения глагола слов и моделей маркировки частичной речи.
| ASBC | #Documents | #Линии | #Words | #HARACTERS |
|---|
| Тренироваться | 15 247 | 1183 260 | 9 480 899 | 14 724 250 |
| Девчонка | 2000 | 52 677 | 448,964 | 741,323 |
| Тест | 2000 | 160,012 | 1 315,129 | 2106,799 |
Вот разделение набора данных, используемое для сегментации слов и названных моделей распознавания объектов.
Ниже приводится набор данных, используемый для обучения моделей идентификации сущностей.
| Онтонот | #Documents | #Линии | #HARACTERS | #Названный въезд |
|---|
| Тренироваться | 1511 | 43,362 | 1 367 658 | 68 947 |
| Девчонка | 200 | 2 304 | 93 535 | 7,186 |
| Тест | 200 | 2401 | 107,298 | 6 977 |
Инструменты NLP
Пакет также предоставляет следующие инструменты NLP.
Наш набор также предоставляет следующие инструменты обработки естественного языка.
- (WS) Сегментация слов
- (POS) Часть речи
- (Ner) названное признание сущности
Установка
pip install -U ckip-transformers
Требования:
- Python 3.6+
- Pytorch 1,5+
- Трансформаторы Huggingface 3.5+
Использование инструментов NLP
Смотрите здесь для деталей API.
Для получения подробных API, см. Здесь.
Полный сценарий этого примера-https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
Полный профиль следующих примеров можно найти по адресу https://github.com/ckiplab/ckip-transformers/blob/master/example/example.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" )
Чтобы использовать графический процессор, можно указать идентификатор устройства при инициализации драйверов. Установите в -1 (по умолчанию), чтобы отключить графический процессор.
Устройство может быть указано при объявлении выключателя слов для использования графического процессора. Установка в -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 для включения этой функции.
Инструмент маркировки в рече будет автоматически ',,。::;;!!??' И т.д. Параметр 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) будет (D) выполнить (vc) эвтаназию (Na), но (Commacatory) внезапно разразилась, что (VJ) он был запрещен (NH) 20 лет назад (ND) (NG) и (Commacategory) он (NH) не понимает (VK) он нарушил (VC) (NCD). (Периодическая категория)
Nertoken (word = 'fu daren', ner = 'person', idx = (0, 3))
Nertoken (word = '20 лет ', ner =' date ', idx = (18, 21))
Nertoken (Word = 'Weilai Sports Station', ner = 'org', idx = (23, 28))
Сенат США провел слушание по признанию министра труда Чжао Сяоолана, назначенного президентом Бушем сегодня. Ожидается, что она успешно пройдет поддержку в Сенате и станет первой женщиной -членом китайского кабинета китайского кабинета страны в истории.
Соединенные Штаты (NC) Сенат (NC) предназначены для (P) сегодня (ND) президента (NA) BUSH (NB), назначенного (VC) Секретаря труда (NA) Чжао Сяолана (NB), проведенного (VC) Распознавание (VC) слушания (NA) и (Commacatery) ожидаем (VE), и (V) (VC) (VC) (VC) (VC) SO) (VC). (Commacategory) стала (VG) Страна (NES) (NC) всегда (D) первого (NEU) китайского (NA) женщины (NA) члена (NA) (NA). (Периодическая категория)
Nertoken (word = 'u.s. Senate', ner = 'org', idx = (0, 5))
Nertoken (word = 'сегодня', ner = 'loc', idx = (7, 9))
Nertoken (word = 'bush', ner = 'person', idx = (11, 13))
Nertoken (Word = 'Министр труда', ner = 'org', idx = (17, 21))
Nertoken (word = 'seleci', ner = 'person', idx = (21, 24))
Nertoken (word = 'Слух подтверждения', ner = 'event', idx = (26, 31))
Nertoken (word = 'senate', ner = 'org', idx = (42, 45))
Nertoken (word = 'first', ner = 'ordrinal', idx = (56, 58))
Nertoken (word = 'китайский', ner = 'norp', idx = (60, 62))
Бланк тоже в порядке
Бланк (VH) (пробел) также (D) IS (SHI) CAN (VH) (T) ~ (FW)
Производительность инструментов NLP
Ниже приводится сравнение производительности между нашим инструментом и другими инструментами.
Ниже приводится сравнение производительности наших инструментов с другими инструментами.
CKIP Transformers против Monpa & Jeiba
| Инструмент | 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 Tiny | 96,98% | 95,08% | 93,13% | 74,20% |
| CKIP Albert Tiny | 96,66% | 94,48% | 92,25% | 71,17% |
| | | | |
| Монпа † | 92,58% | - | 83,88% | - |
| Jeiba | 81,18% | - | - | - |
† Monpa предоставляет только 3 типа тегов в NER.
† Идентификация сущности Monpa предоставляет только три маркера.
CKIP Transformers против CKIPTGERGER
Следующие результаты тестируются на другом наборе данных. †
Следующий эксперимент тестируется в другом наборе данных. †
| Инструмент | Ws (f1) | POS (ACC) | WS+POS (F1) | Ner (f1) |
|---|
| CKIP BERT BASE | 97,84% | 96,46% | 94,91% | 79,20% |
| Ckipgger | 97,33% | 97,20% | 94,75% | 77,87% |
† Здесь мы перепровеили/протестировали нашу модель BERT, используя тот же набор данных с CKIPTGERGER.
† Мы перепроверяем/проверяем нашу модель BERT на том же наборе данных, что и CKIPTGER.
Лицензия
Copyright (C) 2023 Ckip Lab по лицензии GPL-3.0.