LAC, el nombre completo de Análisis Léxico del Chino, es una herramienta de análisis léxico conjunto desarrollada por el Departamento de Procesamiento del Lenguaje Natural de Baidu para realizar funciones como la segmentación de palabras chinas, el etiquetado de partes del discurso y el reconocimiento de nombres propios. Esta herramienta tiene las siguientes características y ventajas:
Aquí presentamos principalmente la instalación y el uso de Python y el uso de otros lenguajes:
Código compatible con Python2/3
Instalación completamente automática: pip install lac
Descarga semiautomática: primero descargue http://pypi.python.org/pypi/lac/, descomprima y ejecute python setup.py install
Una vez completada la instalación, puede ingresar lac
o lac --segonly
o lac --rank
en la línea de comando para iniciar el servicio y disfrutar de una experiencia rápida.
Las redes domésticas pueden utilizar la instalación fuente de Baidu, la velocidad de instalación es más rápida:
pip install lac -i https://mirror.baidu.com/pypi/simple
from LAC import LAC
# 装载分词模型
lac = LAC ( mode = 'seg' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
seg_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
seg_result = lac . run ( texts )
【单样本】:seg_result = [LAC, 是, 个, 优秀, 的, 分词, 工具]
【批量样本】:seg_result = [[LAC, 是, 个, 优秀, 的, 分词, 工具], [百度, 是, 一家, 高科技, 公司]]
from LAC import LAC
# 装载LAC模型
lac = LAC ( mode = 'lac' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
lac_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
lac_result = lac . run ( texts )
La salida de cada oración es el resultado de la segmentación de palabras lista_palabras y la lista_etiquetas de cada palabra, cuyo formato es (lista_palabras, lista_etiquetas)
【单样本】: lac_result = ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n])
【批量样本】:lac_result = [
([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n]),
([LAC, 是, 个, 优秀, 的, 分词, 工具], [nz, v, q, a, u, n, n])
]
El conjunto de etiquetas de categorías de parte del discurso y de nombres propios es el siguiente, en el que marcamos en mayúsculas las cuatro categorías de nombres propios más utilizadas:
Etiqueta | significado | Etiqueta | significado | Etiqueta | significado | Etiqueta | significado |
---|---|---|---|---|---|---|---|
norte | sustantivo común | F | ubicación sustantivo | s | lugar sustantivo | noroeste | título del trabajo |
Nueva Zelanda | Otros nombres propios | v | verbo común | enfermedad venérea | adverbio verbo | vn | sustantivo verbo |
a | adjetivo | anuncio | adverbio | un | sustantivo | d | adverbio |
metro | Cuantificador | q | cuantificador | r | pronombre | pag | preposición |
do | conjunción | tu | partícula | xc | Otras palabras funcionales | w | Puntuación |
POR | nombre | LOC | Topónimo | ORG | Nombre de la organización | TIEMPO | tiempo |
from LAC import LAC
# 装载词语重要性模型
lac = LAC ( mode = 'rank' )
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
rank_result = lac . run ( text )
# 批量样本输入, 输入为多个句子组成的list,平均速率会更快
texts = [ u"LAC是个优秀的分词工具" , u"百度是一家高科技公司" ]
rank_result = lac . run ( texts )
【单样本】:rank_result = [['LAC', '是', '个', '优秀', '的', '分词', '工具'],
[nz, v, q, a, u, n, n],[3, 0, 0, 2, 0, 3, 1]]
【批量样本】:rank_result = [
(['LAC', '是', '个', '优秀', '的', '分词', '工具'],
[nz, v, q, a, u, n, n], [3, 0, 0, 2, 0, 3, 1]),
(['百度', '是', '一家', '高科技', '公司'],
[ORG, v, m, n, n], [3, 0, 2, 3, 1])
]
El conjunto de etiquetas para cada categoría de importancia de palabras es el siguiente. Usamos un gradiente de 4 niveles para la clasificación:
Etiqueta | significado | común en parte del discurso |
---|---|---|
0 | Palabras redundantes expresadas en la consulta. | p, w, xc... |
1 | Palabras débilmente calificadas en consulta | r, c, u... |
2 | Palabras fuertemente calificadas en consulta | n, s, v... |
3 | palabras centrales en consulta | Nueva Zelanda, Nuevo Gales del Sur, LOC... |
Sobre la base de la salida del modelo, LAC también ayuda a los usuarios a configurar resultados de segmentación personalizados y salida del tipo de nombre adecuado. Cuando el modelo predice un elemento que coincide con el diccionario, reemplazará el resultado original con un resultado personalizado. Para lograr una coincidencia más precisa, admitimos fragmentos largos compuestos de varias palabras como un elemento.
Implementamos esta función cargando un archivo de diccionario. Cada línea del archivo de diccionario representa un elemento personalizado, que consta de una palabra o varias palabras consecutivas. Se usa '/' después de cada palabra para indicar una etiqueta. etiqueta Se utilizará la etiqueta predeterminada del modelo. Cuantas más palabras haya por ítem, más preciso será el efecto de la intervención.
Ejemplo de archivo de diccionario
Este es solo un ejemplo para mostrar los resultados bajo varios requisitos. El modo de configurar el diccionario con comodines se abrirá en el futuro, así que estad atentos.
春天/SEASON
花/n 开/v
秋天的风
落 阳
from LAC import LAC
lac = LAC ()
# 装载干预词典, sep参数表示词典文件采用的分隔符,为None时默认使用空格或制表符't'
lac . load_customization ( 'custom.txt' , sep = None )
# 干预后结果
custom_result = lac . run ( u"春天的花开秋天的风以及冬天的落阳" )
春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n
春天/SEASON 的/u 花/n 开/v 秋天的风/n 以及/c 冬天/TIME 的/u 落/n 阳/n
También proporcionamos una interfaz de entrenamiento incremental. Los usuarios pueden usar sus propios datos para el entrenamiento incremental. Primero, los datos deben convertirse al formato de entrada del modelo y todos los archivos de datos están codificados en "UTF-8":
Muestra de datos
De acuerdo con el formato de la mayoría de los conjuntos de datos de segmentación de palabras de código abierto, los espacios se utilizan como marcadores de segmentación de palabras, como se muestra a continuación:
LAC 是 个 优秀 的 分词 工具 。
百度 是 一家 高科技 公司 。
春天 的 花开 秋天 的 风 以及 冬天 的 落阳 。
from LAC import LAC
# 选择使用分词模型
lac = LAC ( mode = 'seg' )
# 训练和测试数据集,格式一致
train_file = "./data/seg_train.tsv"
test_file = "./data/seg_test.tsv"
lac . train ( model_save_dir = './my_seg_model/' , train_data = train_file , test_data = test_file )
# 使用自己训练好的模型
my_lac = LAC ( model_path = 'my_seg_model' )
datos de muestra
Según los datos de segmentación de palabras, cada palabra se marca con su parte del discurso o categoría de entidad en forma de "/tipo". Vale la pena señalar que la capacitación en análisis léxico actualmente solo admite datos cuyo sistema de etiquetas sea consistente con el nuestro. También abriremos soporte para el nuevo sistema de etiquetas en el futuro, así que estad atentos.
LAC/nz 是/v 个/q 优秀/a 的/u 分词/n 工具/n 。/w
百度/ORG 是/v 一家/m 高科技/n 公司/n 。/w
春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n 。/w
from LAC import LAC
# 选择使用默认的词法分析模型
lac = LAC ()
# 训练和测试数据集,格式一致
train_file = "./data/lac_train.tsv"
test_file = "./data/lac_test.tsv"
lac . train ( model_save_dir = './my_lac_model/' , train_data = train_file , test_data = test_file )
# 使用自己训练好的模型
my_lac = LAC ( model_path = 'my_lac_model' )
.
├── python # Python调用的脚本
├── c++ # C++调用的代码
├── java # Java调用的代码
├── Android # Android调用的示例
├── README.md # 本文件
└── CMakeList.txt # 编译C++和Java调用的脚本
Si utiliza LAC en su trabajo académico, agregue las siguientes citas. Nos complace mucho que LAC pueda ayudarte en tu trabajo académico.
@article{jiao2018LAC,
title={Chinese Lexical Analysis with Deep Bi-GRU-CRF Network},
author={Jiao, Zhenyu and Sun, Shuqi and Sun, Ke},
journal={arXiv preprint arXiv:1807.01882},
year={2018},
url={https://arxiv.org/abs/1807.01882}
}
Damos la bienvenida a los desarrolladores para que contribuyan con código a LAC. Si desarrolla nuevas funciones y encuentra errores... puede enviar solicitudes de extracción y problemas a Github.