Transformadores CKIP
Este proyecto proporciona modelos tradicionales de transformadores chinos (incluidos Albert, Bert, GPT2) y las herramientas de PNL (incluida la segmentación de palabras, el etiquetado de parte del voz, el reconocimiento de entidad nombrado).
Este proyecto proporciona el modelo de transformadores en chino tradicional (incluidos Albert, Bert, GPT2) y herramientas de procesamiento de lenguaje natural (incluida la marca verbal de palabras, el marcado de parte del voz y el reconocimiento de entidades).
Git
https://github.com/ckiplab/ckip-transformers
Pypi
https://pypi.org/project/ckip-transformers
Documentación
https://ckip-transformers.readthedocs.io
Manifestación
https://ckip.iis.sinica.edu.tw/service/transformers
Colaboradores
- Mu Yang en CKIP (autor y mantenedor).
- Wei-yun ma en CKIP (mantenedor).
Paquetes relacionados
- CkipTagger: una biblioteca NLP china alternativa con el uso de bilstm.
- CKIP CORENLP Toolkit: una biblioteca NLP china con más tareas y utilidades de PNL.
Modelos
También puede usar nuestros modelos previos a la biblioteca de Transformers Huggingface directamente: https://huggingface.co/ckiplab/.
Puede descargar el modelo previo al petróleo en https://huggingface.co/ckiplab/.
- Modelos de idiomas
- Albert Tiny:
ckiplab/albert-tiny-chinese - Base de Albert:
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 tareas de PNL
- Albert Tiny-Segmentación de palabras:
ckiplab/albert-tiny-chinese-ws - Albert Tiny-Etiquetado de parte de voz:
ckiplab/albert-tiny-chinese-pos - Albert Tiny-Reconocimiento de la entidad nombrada:
ckiplab/albert-tiny-chinese-ner - Base Albert-Segmentación de palabras:
ckiplab/albert-base-chinese-ws - Base Albert-Etiquetado de parte del voz:
ckiplab/albert-base-chinese-pos - Base Albert-Reconocimiento de la entidad nombrada:
ckiplab/albert-base-chinese-ner - Bert Tiny-Segmentación de palabras:
ckiplab/bert-tiny-chinese-ws - Bert Tiny-Etiquetado de parte del voz:
ckiplab/bert-tiny-chinese-pos - Bert Tiny-Reconocimiento de la entidad nombrada:
ckiplab/bert-tiny-chinese-ner - Base Bert-Segmentación de palabras:
ckiplab/bert-base-chinese-ws - Base Bert-Etiquetado de parte de voz:
ckiplab/bert-base-chinese-pos - Base Bert-Reconocimiento de la entidad nombrada:
ckiplab/bert-base-chinese-ner
Uso de modelo
Puede usar nuestro modelo directamente desde la biblioteca Transformers de Huggingface.
Puede usar nuestros modelos directamente a través de la suite Transformers de Huggingface.
pip install -U transformers
Utilice BertTokenizerfast como tokenizer y reemplace ckiplab/albert-tiny-chinese y ckiplab/albert-tiny-chinese-ws por cualquier modelo que necesite en el siguiente ejemplo.
Utilice el BertTokenizerFast incorporado y reemplace ckiplab/albert-tiny-chinese y ckiplab/albert-tiny-chinese-ws en el siguiente ejemplo con cualquier nombre de modelo que desee 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 fin
Para ajustar nuestro modelo en sus propios conjuntos de datos, consulte el siguiente ejemplo de los Transformers de Huggingface.
Puede consultar los siguientes ejemplos para ajustar nuestro modelo a su propio conjunto de datos.
- 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
Recuerde establecer --tokenizer_name bert-base-chinese para usar tokenizador chino.
Recuerde establecer --tokenizer_name bert-base-chinese para usar correctamente el tokenizador en chino.
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
...
Rendimiento del modelo
La siguiente es una comparación de rendimiento entre nuestro modelo y otros modelos.
Los resultados se prueban en un corpus tradicional chino.
La siguiente es una comparación del rendimiento de nuestro modelo con otros modelos.
Cada tarea se prueba en el conjunto de pruebas chinas tradicionales.
| Modelo | #Parametros | Perplejidad† | WS (F1) ‡ | Pos (acc) ‡ | Ner (f1) ‡ |
|---|
| ckiplab/Albert-Tiny-chines | 4m | 4.80 | 96.66% | 94.48% | 71.17% |
| ckiplab/Albert-Base-chines | 11m | 2.65 | 97.33% | 95.30% | 79.47% |
| ckiplab/bert-tiny-chines | 12m | 8.07 | 96.98% | 95.11% | 74.21% |
| ckiplab/bert-base-china | 102m | 1.88 | 97.60% | 95.67% | 81.18% |
| ckiplab/gpt2-pequeño chino | 4m | 16.94 | - | - | - |
| CKIPLAB/GPT2-BASE-CHINESE | 102m | 8.36 | - | - | - |
| | | | | |
| Voidful/Albert_chinese_Tiny | 4m | 74.93 | - | - | - |
| Voidful/Albert_chinese_Base | 11m | 22.34 | - | - | - |
| Bert-Base-china | 102m | 2.53 | - | - | - |
† Perplejidad; Cuanto más pequeño, mejor.
† Grado de confusión; Cuanto más pequeño sea el número, mejor.
‡ WS: segmentación de palabras; POS: parte de voz; Ner: reconocimiento de entidad nombrada; Cuanto más grande, mejor.
‡ WS: verbo verbo; POS: marca de parte de voz; Ner: reconocimiento de entidad; Cuanto mayor sea el número, mejor.
Corpus de entrenamiento
Los modelos de idiomas están capacitados en los conjuntos de datos Zhwiki y CNA; Las tareas WS y POS están capacitadas en el conjunto de datos ASBC; Las tareas NER están capacitadas en el conjunto de datos Ontonotes.
Los modelos de idiomas anteriores están capacitados en los conjuntos de datos Zhwiki y CNA; La palabra verbo-try (WS) y los modelos de tareas de etiquetado de parte de voz (POS) están entrenados en el conjunto de datos ASBC; Los modelos de tareas de reconocimiento de entidad (NER) están capacitados en el conjunto de datos Ontonotes.
- Zhwiki: https://dumps.wikimedia.org/zhwiki/
Texto de Wikipedia chino (volcado 20200801), traducido a tradicional usando OPENCC.
Artículo de Wiki chino (versión 20200801), traducido al chino tradicional usando OpenCC.
- CNA: https://catalog.ldc.upenn.edu/ldc2011t13
La quinta edición china Gigaword - CNA (Agencia Central de Noticias).
China Gigaword Quinta Edición - CNA (Agencia Central de Noticias).
- ASBC: http://asbc.iis.sinica.edu.tw
Academia Sinica Balanced Corpus of Modern Chinese Version 4.0.
Cuarta edición del corpus equilibrado chino de la Academia Central de Ciencias.
- Ontonotes: https://catalog.ldc.upenn.edu/ldc2013t19
Ontonotes Release 5.0, parte china, traducida a tradicional usando OpenCC.
Ontonotes Quinta edición, parte china, traducida al chino tradicional usando OpenCC.
Aquí hay un resumen de cada corpus.
La siguiente es una lista de cada conjunto de datos.
| Conjunto de datos | #Documentos | #Pauta | #Cargadores | Tipo de línea |
|---|
| CNA | 2,559,520 | 13,532,445 | 1.219,029,974 | Párrafo |
| Zhwiki | 1,106,783 | 5,918,975 | 495,446,829 | Párrafo |
| ASBC | 19,247 | 1.395.949 | 17,572,374 | Cláusula |
| Ontonotes | 1.911 | 48,067 | 1.568.491 | Oración |
Aquí está la división del conjunto de datos utilizada para modelos de idiomas.
El siguiente es el corte de datos utilizado para entrenar modelos de idiomas.
| CNA+Zhwiki | #Documentos | #Pauta | #Cargadores |
|---|
| Tren | 3.606.303 | 18,986,238 | 4,347,517,682 |
| Enchufe | 30,000 | 148,077 | 32,888,978 |
| Prueba | 30,000 | 151,241 | 35,216,818 |
Aquí está la división del conjunto de datos utilizada para la segmentación de palabras y los modelos de etiquetado de parte de voz.
El siguiente es el corte de conjunto de datos utilizado para entrenar verbo de palabras y modelos de marcado de parte de voz.
| ASBC | #Documentos | #Pauta | #Palabras | #Cargadores |
|---|
| Tren | 15,247 | 1.183,260 | 9,480,899 | 14,724,250 |
| Enchufe | 2,000 | 52,677 | 448,964 | 741,323 |
| Prueba | 2,000 | 160,012 | 1.315.129 | 2,106,799 |
Aquí está la división del conjunto de datos utilizada para la segmentación de palabras y modelos de reconocimiento de entidades nombrados.
El siguiente es el corte de datos utilizado para entrenar modelos de identificación de entidades.
| Ontonotes | #Documentos | #Pauta | #Cargadores | #Entidades con nombre |
|---|
| Tren | 1,511 | 43,362 | 1.367.658 | 68,947 |
| Enchufe | 200 | 2,304 | 93,535 | 7,186 |
| Prueba | 200 | 2,401 | 107,298 | 6.977 |
Herramientas de PNL
El paquete también proporciona las siguientes herramientas NLP.
Nuestra suite también proporciona las siguientes herramientas de procesamiento del lenguaje natural.
- (Ws) segmentación de palabras
- (Pos) etiquetado de parte del voz
- (Ner) reconocimiento de entidad nombrado
Instalación
pip install -U ckip-transformers
Requisitos:
- Python 3.6+
- Pytorch 1.5+
- Huggingface Transformers 3.5+
Uso de herramientas de NLP
Vea aquí para obtener detalles de la API.
Para API detalladas, ver aquí.
El script completo de este ejemplo es https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
El perfil completo de los siguientes ejemplos se puede encontrar en https://github.com/ckiplab/ckip-transformers/blob/master/example/example.py.
1. Módulo de importación
from ckip_transformers . nlp import CkipWordSegmenter , CkipPosTagger , CkipNerChunker
2. Modelos de carga
Proporcionamos varios modelos previos a las herramientas NLP.
Proporcionamos algunos modelos previamente capacitados para herramientas de lenguaje natural.
# Initialize drivers
ws_driver = CkipWordSegmenter ( model = "bert-base" )
pos_driver = CkipPosTagger ( model = "bert-base" )
ner_driver = CkipNerChunker ( model = "bert-base" )
También se puede cargar sus propios puntos de control utilizando nuestros controladores.
También puede usar nuestras herramientas para capacitar a sus propios 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 GPU, uno puede especificar la ID del dispositivo mientras inicializa los controladores. Establecer en -1 (predeterminado) para deshabilitar la GPU.
El dispositivo se puede especificar al declarar un interruptor de palabras para usar la GPU. Establecer en -1 (valor preestablecido) significa que la GPU no se usa.
# Use CPU
ws_driver = CkipWordSegmenter ( device = - 1 )
# Use GPU:0
ws_driver = CkipWordSegmenter ( device = 0 )
3. Ejecutar la tubería
La entrada para la segmentación de palabras y el reconocimiento de entidad nombrada deben ser una lista de oraciones.
La entrada para el etiquetado de parte del discurso debe ser una lista de palabras (la salida de la segmentación de palabras).
La entrada para la identificación del verbo y la entidad debe ser una lista de oraciones.
La entrada de etiquetas de parte del discurso debe ser una lista de palabras.
# Input text
text = [
"傅達仁今將執行安樂死,卻突然爆出自己20年前遭緯來體育台封殺,他不懂自己哪裡得罪到電視台。" ,
"美國參議院針對今天總統布什所提名的勞工部長趙小蘭展開認可聽證會,預料她將會很順利通過參議院支持,成為該國有史以來第一位的華裔女性內閣成員。" ,
"空白 也是可以的~" ,
]
# Run pipeline
ws = ws_driver ( text )
pos = pos_driver ( ws )
ner = ner_driver ( text )
El controlador POS segmentará automáticamente la oración internamente usando sus caracteres ',,。::;;!!??' mientras ejecuta el modelo. (Las oraciones de salida se concatenarán hacia atrás). Puede establecer delim_set en cualquier caracteres que desee.
Puede establecer use_delim=False para deshabilitar esta característica o establecer use_delim=True en WS y NER Driver para habilitar esta función.
La herramienta de marcado de parte del discurso se usará automáticamente ',,。::;;!!??' Los caracteres de ETC cortan las oraciones antes de ejecutar el modelo (las oraciones de salida se recogerán automáticamente). El parámetro delim_set se puede configurar para usar otros caracteres para cortar.
Además, puede especificar use_delim=False ha deshabilitado esta función, o que use_delim=True se ha habilitado cuando el verbo excusa e identificación de entidad.
# 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 ' )
Puede especificar batch_size y max_length para utilizar mejor los recursos de su máquina.
También puede establecer batch_size y max_length para hacer un mejor uso de los recursos de su máquina.
# Sets the batch size and maximum sentence length
ws = ws_driver ( text , batch_size = 256 , max_length = 128 )
4. Mostrar 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á a punto de realizar la eutanasia, pero de repente fue expuesto que fue prohibido por Weilai Sports Station hace 20 años. No sabía dónde ofendió la estación de televisión.
Fu Daren (NB) realizará (d) eutanasia (VC) (NA), pero (Commacategory) surgió repentinamente de que (VJ) fue prohibido por (NH) hace 20 años (ND) (NG) y (Commacategoría) He (NH) no entiende dónde (VK) se ofendió (VC) TV Station (NCD). (Categoría de Period)
Nertoken (word = 'fu daren', ner = 'persona', idx = (0, 3))
Nertoken (word = '20 años ', ner =' date ', idx = (18, 21))
Nertoken (Word = 'Weilai Sports Station', ner = 'org', idx = (23, 28))
El Senado de los Estados Unidos celebró una audiencia de reconocimiento sobre el Secretario de Trabajo Zhao Xiaolan nominado por el presidente Bush hoy. Se espera que ella pase con éxito el apoyo del Senado y se convierta en la primera miembro del gabinete chino del país en la historia.
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) se convirtió en (vg) el país (NES) (NC) siempre (d) el primer gabinete (NA) de la mujer (NA) (NA) (NA) (D). (Categoría de Period)
Nertoken (word = 'U.S. Senate', ner = 'org', idx = (0, 5))
Nertoken (word = 'Today', ner = 'loc', idx = (7, 9))
Nertoken (word = 'bush', ner = 'persona', idx = (11, 13))
Nertoken (Word = 'Ministro de Trabajo', Ner = 'org', idx = (17, 21))
Nertoken (word = 'elección', ner = 'persona', idx = (21, 24))
Nertoken (word = 'audiencia de reconocimiento', ner = 'event', idx = (26, 31))
Nertoken (word = 'senate', ner = 'org', idx = (42, 45))
Nertoken (word = 'primero', ner = 'ordinal', idx = (56, 58))
Nertoken (word = 'chino', ner = 'norp', idx = (60, 62))
El blanco también está bien
En blanco (VH) (Whitespace) también (d) es (shi) Can (VH) (t) ~ (FW)
Rendimiento de herramientas de PNL
La siguiente es una comparación de rendimiento entre nuestra herramienta y otras herramientas.
La siguiente es una comparación del rendimiento de nuestras herramientas con otras herramientas.
CKIP Transformers vs Monpa y Jeiba
| Herramienta | WS (F1) | POS (ACC) | WS+POS (F1) | Ner (F1) |
|---|
| Base de ckip bert | 97.60% | 95.67% | 94.19% | 81.18% |
| Base de ckip Albert | 97.33% | 95.30% | 93.52% | 79.47% |
| Ckip bert pequeño | 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 proporciona solo 3 tipos de etiquetas en NER.
† La identificación de la entidad de MONPA solo proporciona tres marcadores.
CKIP Transformers vs CkipPager
Los siguientes resultados se prueban en un conjunto de datos diferente. †
El siguiente experimento se prueba en otro conjunto de datos. †
| Herramienta | WS (F1) | POS (ACC) | WS+POS (F1) | Ner (F1) |
|---|
| Base de ckip bert | 97.84% | 96.46% | 94.91% | 79.20% |
| Ckiptagag | 97.33% | 97.20% | 94.75% | 77.87% |
† Aquí se reacio/probamos nuestro modelo Bert utilizando el mismo conjunto de datos con ckipPagger.
† Realizamos/probamos nuestro modelo Bert en el mismo conjunto de datos que CkipPagerGer.
Licencia
Copyright (c) 2023 CKIP Lab bajo la licencia GPL-3.0.