CKIP 변압기
이 프로젝트는 전통적인 중국 트랜스포머 모델 (Albert, Bert, GPT2 포함) 및 NLP 도구 (단어 세분화, 부품 태깅, 엔터티 인식이라는 이름의 부품 태깅 포함)를 제공합니다.
이 프로젝트는 전통적인 중국어 (Albert, Bert, GPT2 포함) 및 자연 언어 처리 도구 (단어 동사 동사 표시, 부분-연사 표시 및 엔터티 인식 포함)의 Transformers 모델을 제공합니다.
git
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
기고자
- CKIP의 Mu Yang (저자 및 관리자).
- CKIP의 Wei-Yun MA (관리자).
관련 패키지
- CKIPTAGGER : BILSTM을 사용하는 대체 중국 NLP 라이브러리.
- CKIP CORENLP 툴킷 : 더 많은 NLP 작업 및 유틸리티가있는 중국 NLP 라이브러리.
모델
또한 포옹 페이스 트랜스포머 라이브러리와 함께 사전에 사기꾼 모델을 사용할 수도 있습니다 : https://huggingface.co/ckiplab/.
https://huggingface.co/ckiplab/에서 사전 취사 모델을 다운로드 할 수 있습니다.
- 언어 모델
- Albert Tiny :
ckiplab/albert-tiny-chinese - Albert Base :
ckiplab/albert-base-chinese - Bert Tiny :
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-이름이 지정된 인식 :
ckiplab/albert-tiny-chinese-ner - Albert Base-단어 세분화 :
ckiplab/albert-base-chinese-ws - Albert Base-부품 태그 :
ckiplab/albert-base-chinese-pos - Albert Base-이름이 지정된 엔티티 인식 :
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 - 버트베이스-단어 세분화 :
ckiplab/bert-base-chinese-ws - BERT BASE-부품 태그 :
ckiplab/bert-base-chinese-pos - Bert Base-명명 된 엔티티 인식 :
ckiplab/bert-base-chinese-ner
모델 사용
Huggingface의 Transformers 라이브러리에서 직접 모델을 사용할 수 있습니다.
Huggingface의 Transformers Suite를 통해 직접 모델을 사용할 수 있습니다.
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의 Transformers의 다음 예제를 참조하십시오.
다음 예제를 참조하여 모델을 자신의 데이터 세트에 미세 조정할 수 있습니다.
- 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
중국 토큰 화기를 사용하려면 --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
...
모델 성능
다음은 모델과 다른 모델 간의 성능 비교입니다.
결과는 전통적인 중국 코퍼스에서 테스트됩니다.
다음은 모델의 성능을 다른 모델과 비교 한 것입니다.
각 작업은 전통적인 중국 테스트 세트에서 테스트됩니다.
| 모델 | #parameters | 당황† | 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 | 12m | 8.07 | 96.98% | 95.11% | 74.21% |
| ckiplab/bert-base-chinese | 102m | 1.88 | 97.60% | 95.67% | 81.18% |
| ckiplab/gpt2- 테니-치즈 | 4m | 16.94 | - | - | - |
| CKIPLAB/GPT2-베이스-중국 | 102m | 8.36 | - | - | - |
| | | | | |
| voidful/albert_chinese_tiny | 4m | 74.93 | - | - | - |
| voidful/albert_chinese_base | 11m | 22.34 | - | - | - |
| 베르트-베이스-차이나 | 102m | 2.53 | - | - | - |
† 당혹감; 작을수록 좋습니다.
† 혼란 학위; 숫자가 작을수록 좋습니다.
‡ WS : 단어 세분화; POS : 부품; NER : 명명 된 엔티티 인식; 클수록 좋습니다.
‡ WS : 동사 동사; POS : 부품 마크; NER : 엔티티 인식; 숫자가 클수록 좋습니다.
훈련 코퍼스
언어 모델은 Zhwiki 및 CNA 데이터 세트에 대한 교육을받습니다. WS 및 POS 작업은 ASBC 데이터 세트에서 교육됩니다. NER 작업은 Ontonotes 데이터 세트에서 교육됩니다.
위의 언어 모델은 Zhwiki 및 CNA 데이터 세트에 대해 훈련됩니다. Verb-Trate (WS) 및 POS (Stepeech Tagging) 작업 모델은 ASBC 데이터 세트에서 교육됩니다. 엔티티 인식 (NER) 작업 모델은 Ontonotes 데이터 세트에서 교육됩니다.
- Zhwiki : https://dumps.wikimedia.org/zhwiki/
OpenCC를 사용하여 전통적인 것으로 번역 된 중국 Wikipedia Text (20200801 덤프).
OpenCC를 사용하여 전통적인 중국어로 번역 된 중국 위키의 기사 (20200801 버전).
- CNA : https://catalog.ldc.upenn.edu/ldc2011t13
중국 Gigaword 5 판 - CNA (Central News Agency) 부분.
중국 Gigaword 5 판 - CNA (중앙 통신사).
- ASBC : http://asbc.iis.sinica.edu.tw
현대 중국 릴리스 4.0의 학계 시카 균형 코퍼스.
중국 과학 아카데미의 중국 균형 잡힌 코퍼스의 네 번째 판.
- Ontonotes : https://catalog.ldc.upenn.edu/ldc2013t19
Ontonotes Release 5.0, Chinese Part는 OpenCC를 사용하여 전통적인 것으로 번역되었습니다.
Ontonotes Fifth Edition, Chinese Part, OpenCC를 사용하여 전통적인 중국어로 번역되었습니다.
다음은 각 코퍼스의 요약입니다.
다음은 각 데이터 세트의 목록입니다.
| 데이터 세트 | #서류 | #윤곽 | #문자 | 라인 유형 |
|---|
| CNA | 2,559,520 | 13,532,445 | 1,219,029,974 | 절 |
| Zhwiki | 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 | #서류 | #윤곽 | #문자 |
|---|
| 기차 | 3,606,303 | 18,986,238 | 4,347,517,682 |
| Dev | 30,000 | 148,077 | 32,888,978 |
| 시험 | 30,000 | 151,241 | 35,216,818 |
다음은 워드 세분화 및 부분-연설 태깅 모델에 사용되는 데이터 세트 분할입니다.
다음은 단어 동사 동사와 부품 마킹 모델을 훈련시키는 데 사용되는 데이터 세트 절단입니다.
| ASBC | #서류 | #윤곽 | #단어 | #문자 |
|---|
| 기차 | 15,247 | 1,183,260 | 9,480,899 | 14,724,250 |
| Dev | 2,000 | 52,677 | 448,964 | 741,323 |
| 시험 | 2,000 | 160,012 | 1,315,129 | 2,106,799 |
다음은 단어 세분화 및 명명 된 엔티티 인식 모델에 사용되는 데이터 세트 분할입니다.
다음은 엔티티 식별 모델을 훈련시키는 데 사용되는 데이터 세트 컷입니다.
| Ontonotes | #서류 | #윤곽 | #문자 | #명명-엔티티 |
|---|
| 기차 | 1,511 | 43,362 | 1,367,658 | 68,947 |
| Dev | 200 | 2,304 | 93,535 | 7,186 |
| 시험 | 200 | 2,401 | 107,298 | 6,977 |
NLP 도구
패키지는 다음 NLP 도구도 제공합니다.
우리의 스위트는 또한 다음 자연어 처리 도구를 제공합니다.
- (WS) 단어 세분화
- (POS) 부품 태그 태깅
- (NER) 지명 된 엔티티 인식
설치
pip install -U ckip-transformers
요구 사항 :
- 파이썬 3.6+
- Pytorch 1.5+
- Huggingface Transformers 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" )
GPU를 사용하려면 드라이버를 초기화하는 동안 장치 ID를 지정할 수 있습니다. GPU를 비활성화하려면 -1 (기본값)으로 설정하십시오.
GPU를 사용하도록 단어 차단기를 선언 할 때 장치를 지정할 수 있습니다. -1 (사전 설정 값)으로 설정하면 GPU가 사용되지 않음을 의미합니다.
# 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 설정하거나 WS 및 NER 드라이버에서 use_delim=True 설정 하여이 기능을 활성화 할 수 있습니다.
부품 연사 마킹 도구가 자동으로 사용됩니다 ',,。::;;!!??' 등 캐릭터는 모델을 실행하기 전에 문장을 잘라냅니다 (출력 문장은 자동으로 선택됩니다). 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 () Fu Daren은 안락사를 공연하려고하지만 갑자기 20 년 전 Weilai Sports Station에 의해 금지되었다는 노출되었습니다. 그는 자신이 TV 방송국에서 어디에서 기분을 상하게했는지 몰랐다.
Fu Daren (NB) (D)은 (VC) 안락사 (NA)를 수행 할 것이지만 (Commacategory)는 갑자기 (VJ) 20 년 전 (ND) (ND) (NG)와 (Commacategory)에 의해 금지 된 (VC)가 (VK) TV 스테이션 (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))
미국 상원은 오늘 부시 대통령이 지명 한 Zhao Xiaolan의 노동부 장관에 대한 인정 청문회를 개최했다. 그녀는 상원의지지를 성공적으로 통과시키고 역사상 최초의 여성 중국 내각 회원이 될 것으로 예상됩니다.
미국 (NC) 상원 (NC)은 (P) (ND) (ND) 대통령 (NA) 부시 (NA) 부시 (NB) 지명 (VC) 노동부 (NA) Zhao Xiaolan (VC) 청문회 (VC) 청문회 (NA) 및 (Commacategory) (VH) (VH) (VC) (VC)를 통과 할 예정입니다 (VC) (VC)를 대상으로합니다. (Commacategory)가되었다 (VG) (NES) 국가 (NC)는 항상 (d) 최초의 (NEU) 중국인 (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 = '노동부 장관', ner = 'org', idx = (17, 21))
nertoken (Word = 'chelecti', ner = 'person', idx = (21, 24))
nertoken (Word = 'continkgember anconduredgement wearment', ner = 'event', idx = (26, 31))
nertoken (Word = 'senate', ner = 'org', idx = (42, 45))
nertoken (Word = 'fird', ner = 'ordinal', idx = (56, 58))
nertoken (단어 = '중국어', ner = 'norp', idx = (60, 62))
빈도 괜찮습니다
blank (vh) (whitespace)는 (d) is (shi) can (vh) (t) ~ (fw)
NLP 도구 성능
다음은 도구와 다른 도구 간의 성능 비교입니다.
다음은 도구의 성능을 다른 도구와 비교 한 것입니다.
CKIP 변압기 대 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% |
| | | | |
| MONPA † | 92.58% | - | 83.88% | - |
| 제이바 | 81.18% | - | - | - |
† MONPA는 NER에서 3 가지 유형의 태그 만 제공합니다.
† MONPA의 엔티티 식별은 3 개의 마커 만 제공합니다.
CKIP 변압기 대 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% |
† 여기서 우리는 ckiptagger와 동일한 데이터 세트를 사용하여 Bert 모델을 재교육/테스트했습니다.
† 우리는 ckiptagger와 동일한 데이터 세트에서 Bert 모델을 재교육/테스트합니다.
특허
GPL-3.0 라이센스에 따른 저작권 (C) 2023 CKIP Lab.