Transformadores CKIP
Este projeto fornece aos modelos tradicionais de transformadores chineses (incluindo Albert, Bert, GPT2) e ferramentas de PNL (incluindo segmentação de palavras, marcação de parte de fala, nomeado reconhecimento de entidade).
Este projeto fornece o modelo Transformers no chinês tradicional (incluindo Albert, Bert, GPT2) e ferramentas de processamento de linguagem natural (incluindo marcação verbal de palavras, marcação de parte da fala e reconhecimento de entidades).
Git
https://github.com/ckiplab/ckip-ransformers
Pypi
https://pypi.org/project/ckip-ransformers
Documentação
https://ckip-transformers.readthedocs.io
Demonstração
https://ckip.iis.sinica.edu.tw/service/transformers
Colaboradores
- Mu Yang em CKIP (autor e mantenedor).
- Wei-yun ma no ckip (mantenedor).
Pacotes relacionados
- CKIPGAGGER: Uma biblioteca de NLP chinesa alternativa com o uso do BILSTM.
- Kit de ferramentas CKIP CORENLP: uma biblioteca de NLP chinesa com mais tarefas e utilitários de PNL.
Modelos
Você também pode usar nossos modelos pré -treinados com a Biblioteca de Transformers do Huggingface diretamente: https://huggingface.co/ckiplab/.
Você pode baixar o modelo pré -terenciado em https://huggingface.co/ckiplab/.
- Modelos de idiomas
- Albert Tiny:
ckiplab/albert-tiny-chinese - Albert Base:
ckiplab/albert-base-chinese - Bert Tiny:
ckiplab/bert-tiny-chinese - Base Bert:
ckiplab/bert-base-chinese - GPT2 Tiny:
ckiplab/gpt2-tiny-chinese - Base GPT2:
ckiplab/gpt2-base-chinese
- Modelos de tarefas do PNL
- Albert Tiny-Segmentação de palavras:
ckiplab/albert-tiny-chinese-ws - Albert Tiny-marcação de parte do fala:
ckiplab/albert-tiny-chinese-pos - Albert Tiny-Nomeado Reconhecimento de Enteridade:
ckiplab/albert-tiny-chinese-ner - Albert Base-Segmentação de palavras:
ckiplab/albert-base-chinese-ws - Albert Base-marcação de parte de fala:
ckiplab/albert-base-chinese-pos - ALBERT BASE-RECONHECIMENTO DE INCIDADE:
ckiplab/albert-base-chinese-ner - Bert Tiny-Segmentação de palavras:
ckiplab/bert-tiny-chinese-ws - Bert Tiny-marcação de parte de fala:
ckiplab/bert-tiny-chinese-pos - Bert Tiny-reconhecimento de entidade denominada:
ckiplab/bert-tiny-chinese-ner - BERT BASE-Segmentação de palavras:
ckiplab/bert-base-chinese-ws - Base Bert-marcação de parte de fala:
ckiplab/bert-base-chinese-pos - BERT BASE-RECONHECIMENTO DE INCIDADE:
ckiplab/bert-base-chinese-ner
Uso do modelo
Você pode usar nosso modelo diretamente da Biblioteca Transformers do Huggingface.
Você pode usar nossos modelos diretamente através da suíte Transformers do Huggingface.
pip install -U transformers
Use o BertTokenizerfast como tokenizer e substitua ckiplab/albert-tiny-chinese e ckiplab/albert-tiny-chinese-ws por qualquer modelo necessário no exemplo a seguir.
Use o BertTokenizerfast interno e substitua ckiplab/albert-tiny-chinese e ckiplab/albert-tiny-chinese-ws no exemplo a seguir com qualquer nome de modelo que você deseja usar.
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
Modelo de ajuste fino
Para ajustar nosso modelo em seus próprios conjuntos de dados, consulte o exemplo a seguir dos Transformers do Huggingface.
Você pode consultar os exemplos a seguir para ajustar nosso modelo ao seu próprio conjunto de dados.
- 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
Lembre-se de definir --tokenizer_name bert-base-chinese para usar o tokenizador chinês.
Lembre-se de definir --tokenizer_name bert-base-chinese para usar corretamente o tokenizer em chinês.
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
...
Desempenho do modelo
A seguir, é apresentada uma comparação de desempenho entre nosso modelo e outros modelos.
Os resultados são testados em um corpus tradicional chinês.
A seguir, é apresentada uma comparação do desempenho do nosso modelo com outros modelos.
Cada tarefa é testada no conjunto de testes tradicional chinês.
| Modelo | #Parameters | Perplexidade† | 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-bashe-chinese | 102m | 1.88 | 97,60% | 95,67% | 81,18% |
| ckiplab/gpt2 tiny-chinese | 4m | 16.94 | - | - | - |
| ckiplab/gpt2-Base-chinese | 102m | 8.36 | - | - | - |
| | | | | |
| anulado/albert_chinese_tiny | 4m | 74.93 | - | - | - |
| anulado/albert_chinese_base | 11m | 22.34 | - | - | - |
| Bert-Base-Chinese | 102m | 2.53 | - | - | - |
† perplexidade; quanto menor, melhor.
† Grau de confusão; Quanto menor o número, melhor.
‡ WS: segmentação de palavras; POS: parte da fala; NER: reconhecimento de entidade nomeada; quanto maior, melhor.
‡ WS: verbo verbo; POS: marca de parte da fala; NER: reconhecimento de entidades; Quanto maior o número, melhor.
Corpus de treinamento
Os modelos de idiomas são treinados nos conjuntos de dados Zhwiki e CNA; As tarefas WS e PDV são treinadas no conjunto de dados ASBC; As tarefas NER são treinadas no conjunto de dados Ontonotes.
Os modelos de idiomas acima são treinados nos conjuntos de dados Zhwiki e CNA; Os modelos de tarefas da palavra verb-th) e tag de marcação de parte do discurso (POS) são treinados no conjunto de dados do ASBC; Os modelos de tarefas de reconhecimento de entidades (NER) são treinados no conjunto de dados ontonotes.
- Zhwiki: https://dumps.wikimedia.org/zhwiki/
Texto chinês da Wikipedia (dump 20200801), traduzido para o tradicional usando o OpenCC.
O artigo da Wiki chinês (versão 20200801), traduzida para chinês tradicional usando o OpenCC.
- CNA: https://catalog.ldc.upenn.edu/ldc2011t13
Quinta edição chinesa Gigaword - CNA (Central News Agency) Parte.
Quinta edição chinesa Gigaword - CNA (Agência de Notícias Central).
- ASBC: http://asbc.iis.sinica.edu.tw
Academia Sinica Balanced Corpus of Modern Chinese Release 4.0.
Quarta edição do corpus balanceado chinês da Academia Central de Ciências.
- Ontontotes: https://catalog.ldc.upenn.edu/ldc2013t19
Ontonotes Release 5.0, parte chinesa, traduzida para o tradicional usando o OpenCC.
Ontonotes Quinta edição, parte chinesa, traduzida para chinês tradicional usando o OpenCC.
Aqui está um resumo de cada corpus.
A seguir, é apresentada uma lista de cada conjunto de dados.
| Conjunto de dados | #Documents | #Linhas | #Characters | Tipo de linha |
|---|
| Cna | 2.559.520 | 13.532.445 | 1.219.029.974 | Parágrafo |
| Zhwiki | 1.106.783 | 5.918.975 | 495.446.829 | Parágrafo |
| ASBC | 19.247 | 1.395.949 | 17.572.374 | Cláusula |
| Ontonotes | 1.911 | 48.067 | 1.568.491 | Frase |
Aqui está a divisão do conjunto de dados usada para modelos de idiomas.
A seguir, é apresentado o corte do conjunto de dados usado para treinar modelos de linguagem.
| Cna+zhwiki | #Documents | #Linhas | #Characters |
|---|
| Trem | 3.606.303 | 18.986.238 | 4.347.517.682 |
| Dev | 30.000 | 148.077 | 32.888.978 |
| Teste | 30.000 | 151.241 | 35.216.818 |
Aqui está a divisão do conjunto de dados usada para segmentação de palavras e modelos de marcação de parte de fala.
A seguir, é apresentado o corte do conjunto de dados usado para treinar verbos de palavras e modelos de marcação de parte da fala.
| ASBC | #Documents | #Linhas | #Palavras | #Characters |
|---|
| Trem | 15.247 | 1.183.260 | 9.480.899 | 14.724.250 |
| Dev | 2.000 | 52.677 | 448.964 | 741.323 |
| Teste | 2.000 | 160.012 | 1.315.129 | 2.106.799 |
Aqui está a divisão do conjunto de dados usada para segmentação de palavras e modelos de reconhecimento de entidade nomeados.
A seguir, o corte do conjunto de dados usado para treinar modelos de identificação de entidades.
| Ontonotes | #Documents | #Linhas | #Characters | #Denome-in-entidades |
|---|
| Trem | 1.511 | 43.362 | 1.367.658 | 68.947 |
| Dev | 200 | 2.304 | 93.535 | 7.186 |
| Teste | 200 | 2.401 | 107.298 | 6.977 |
Ferramentas de PNL
O pacote também fornece as seguintes ferramentas PNL.
Nossa suíte também fornece as seguintes ferramentas de processamento de linguagem natural.
- (WS) Segmentação de palavras
- (POS) marcação de parte de fala
- (NER) nomeado reconhecimento de entidade
Instalação
pip install -U ckip-transformers
Requisitos:
- Python 3.6+
- Pytorch 1.5+
- Huggingface Transformers 3.5+
Uso do PNL Tools
Veja aqui para obter detalhes da API.
Para APIs detalhadas, veja aqui.
O script completo deste exemplo é https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
O perfil completo dos exemplos a seguir pode ser encontrado em https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
1. Módulo de importação
from ckip_transformers . nlp import CkipWordSegmenter , CkipPosTagger , CkipNerChunker
2. Modelos de carga
Fornecemos vários modelos pré -rastreados para as ferramentas de PNL.
Fornecemos alguns modelos pré-treinados para ferramentas de linguagem natural.
# Initialize drivers
ws_driver = CkipWordSegmenter ( model = "bert-base" )
pos_driver = CkipPosTagger ( model = "bert-base" )
ner_driver = CkipNerChunker ( model = "bert-base" )
Também se pode carregar seus próprios pontos de verificação usando nossos drivers.
Você também pode usar nossas ferramentas para treinar seus próprios modelos.
# 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" )
Para usar a GPU, pode -se especificar ID do dispositivo durante a inicialização dos drivers. Defina como -1 (padrão) para desativar a GPU.
O dispositivo pode ser especificado ao declarar um disjuntor de palavras para usar a GPU. Definido como -1 (valor predefinido) significa que a GPU não é usada.
# Use CPU
ws_driver = CkipWordSegmenter ( device = - 1 )
# Use GPU:0
ws_driver = CkipWordSegmenter ( device = 0 )
3. Execute o pipeline
A entrada para a segmentação de palavras e o reconhecimento de entidade nomeada deve ser uma lista de frases.
A entrada para marcação de parte do fala deve ser uma lista de palavras (a saída da segmentação de palavras).
A entrada para a identificação de verbos e entidades deve ser uma lista de frases.
A entrada de tags de parte do fala deve ser uma lista de palavras.
# Input text
text = [
"傅達仁今將執行安樂死,卻突然爆出自己20年前遭緯來體育台封殺,他不懂自己哪裡得罪到電視台。" ,
"美國參議院針對今天總統布什所提名的勞工部長趙小蘭展開認可聽證會,預料她將會很順利通過參議院支持,成為該國有史以來第一位的華裔女性內閣成員。" ,
"空白 也是可以的~" ,
]
# Run pipeline
ws = ws_driver ( text )
pos = pos_driver ( ws )
ner = ner_driver ( text )
O driver POS segmentará automaticamente a frase internamente usando os caracteres lá ',,。::;;!!??' enquanto executa o modelo. (As frases de saída serão concatenadas de volta.) Você pode definir delim_set para qualquer caractere que desejar.
Você pode definir use_delim=False para desativar esse recurso ou definir use_delim=True no driver WS e NER para ativar esse recurso.
A ferramenta de marcação de parte da fala será usada automaticamente ',,。::;;!!??' Os caracteres etc. cortar frases antes de executar o modelo (as frases de saída serão retiradas automaticamente). O parâmetro delim_set pode ser definido para usar outros caracteres para cortar.
Além disso, você pode especificar use_delim=False desativou essa função ou que use_delim=True foi ativado quando desculpas verbais e identificação de entidade.
# 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 ' )
Você pode especificar batch_size e max_length para melhor utilizar seus recursos de máquina.
Você também pode definir batch_size e max_length para fazer melhor uso dos recursos da sua máquina.
# Sets the batch size and maximum sentence length
ws = ws_driver ( text , batch_size = 256 , max_length = 128 )
4. Mostre resultados
# 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 está prestes a realizar eutanásia, mas de repente ele foi exposto por ter sido banido pela estação de esportes de Weilai há 20 anos. Ele não sabia onde ofendeu a estação de TV.
Fu Daren (NB) (d) executará (VC) Eutanásia (NA), mas (Commacategoria) de repente eclodiu que (VJ) ele foi proibido por (NH) há 20 anos (ND) (NG) e (NC category) que ele (NH) não entende (VK) ele (VC) e a estação de TV (NC). (Categoria de período)
NERTOKEN (Word = 'fu daren', ner = 'pessoa', idx = (0, 3))
NERTOKEN (Word = '20 anos ', NER =' DATE ', IDX = (18, 21))
NERTOKEN (Word = 'Weilai Sports Station', Ner = 'Org', Idx = (23, 28))
O Senado dos EUA realizou uma audiência de reconhecimento sobre o secretário do Trabalho Zhao Xiaolan indicado pelo Presidente Bush hoje. Espera -se que ela aproveite com sucesso o apoio ao Senado e se torne a primeira membro do gabinete chinesa do país na história.
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) tornou -se (VG) o país (NES) (NC) sempre (d) o primeiro (neu) o Gabinete da Mulher Chinesa (NA) (NA) (NA) (NA). (Categoria de período)
NERTOKEN (Word = 'U.S. Senado', Ner = 'Org', Idx = (0, 5))
NERTOKEN (Word = 'Today', Ner = 'Loc', Idx = (7, 9))
NERTOKEN (Word = 'Bush', Ner = 'Pessoa', Idx = (11, 13))
NERTOKEN (Word = 'Ministro do Trabalho', Ner = 'Org', Idx = (17, 21))
NERTOKEN (Word = 'escolhai', ner = 'pessoa', idx = (21, 24))
NERTOKEN (Word = 'Audição de reconhecimento', NER = 'Evento', Idx = (26, 31))
NERTOKEN (Word = 'Senado', Ner = 'Org', Idx = (42, 45))
NERTOKEN (Word = 'Primeiro', Ner = 'Ordinal', Idx = (56, 58))
NERTOKEN (Word = 'Chinese', Ner = 'Norp', Idx = (60, 62))
Em branco está ok também
Blank (VH) (WhiteSpace) também é (d) é (shi) pode (vh) (t) ~ (fw)
Desempenho das ferramentas do NLP
A seguir, é apresentada uma comparação de desempenho entre nossa ferramenta e outras ferramentas.
A seguir, é apresentada uma comparação do desempenho de nossas ferramentas com outras ferramentas.
CKIP Transformers vs Monpa & Jeiba
| Ferramenta | WS (F1) | POS (ACC) | WS+POS (F1) | NER (F1) |
|---|
| Base CKIP Bert | 97,60% | 95,67% | 94,19% | 81,18% |
| Base CKIP Albert | 97,33% | 95,30% | 93,52% | 79,47% |
| Ckip Bert minúsculo | 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% | - | - | - |
† O MONPA fornece apenas 3 tipos de tags no NER.
† A identificação da entidade da MONPA fornece apenas três marcadores.
CKIP Transformers vs ckiptagge
Os seguintes resultados são testados em um conjunto de dados diferente. †
O experimento a seguir é testado em outro conjunto de dados. †
| Ferramenta | WS (F1) | POS (ACC) | WS+POS (F1) | NER (F1) |
|---|
| Base CKIP Bert | 97,84% | 96,46% | 94,91% | 79,20% |
| Ckiptagger | 97,33% | 97,20% | 94,75% | 77,87% |
† Aqui fizemos o Rething/testamos nosso modelo BERT usando o mesmo conjunto de dados com o CKIPTAGGER.
† Nós restringimos/testamos nosso modelo BERT no mesmo conjunto de dados que o CKIPTAGGER.
Licença
Copyright (C) 2023 CKIP LAB sob a licença GPL-3.0.