LAC, o nome completo de Análise Lexical do Chinês, é uma ferramenta conjunta de análise lexical desenvolvida pelo Departamento de Processamento de Linguagem Natural do Baidu para realizar funções como segmentação de palavras chinesas, marcação de classes gramaticais e reconhecimento de nomes próprios. Esta ferramenta possui os seguintes recursos e vantagens:
Aqui apresentamos principalmente a instalação e uso de Python e o uso de outras linguagens:
Código compatível com Python2/3
Instalação totalmente automática: pip install lac
Download semiautomático: primeiro baixe http://pypi.python.org/pypi/lac/, descompacte e execute python setup.py install
Após a conclusão da instalação, você pode inserir lac
ou lac --segonly
ou lac --rank
na linha de comando para iniciar o serviço e obter uma experiência rápida.
Redes domésticas podem usar a instalação de origem do Baidu, a velocidade de instalação é mais 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 )
A saída de cada frase é o resultado da segmentação de palavras word_list e a tags_list de cada palavra, cujo formato é (word_list, tags_list)
【单样本】: lac_result = ([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n])
【批量样本】:lac_result = [
([百度, 是, 一家, 高科技, 公司], [ORG, v, m, n, n]),
([LAC, 是, 个, 优秀, 的, 分词, 工具], [nz, v, q, a, u, n, n])
]
O conjunto de tags de classe gramatical e de categoria de nome próprio é o seguinte, no qual marcamos as quatro categorias de nome próprio mais comumente usadas em letras maiúsculas:
Rótulo | significado | Rótulo | significado | Rótulo | significado | Rótulo | significado |
---|---|---|---|---|---|---|---|
n | substantivo comum | f | localização substantivo | é | lugar substantivo | agora | Título do trabalho |
Nova Zelândia | Outros nomes próprios | v | verbo comum | vd | verbo advérbio | vn | substantivo verbo |
um | adjetivo | anúncio | advérbio | um | substantivo | d | advérbio |
eu | Quantificador | q | quantificador | R | pronome | p | preposição |
c | conjunção | você | partícula | xc | Outras palavras funcionais | c | Pontuação |
POR | nome | LOC | Nome do lugar | ORGANIZAÇÃO | Nome da organização | TEMPO | tempo |
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])
]
O conjunto de rótulos para cada categoria de importância da palavra é o seguinte. Usamos gradiente de 4 níveis para classificação:
Rótulo | significado | comum em parte do discurso |
---|---|---|
0 | Palavras redundantes expressas na consulta | p, w, xc... |
1 | Palavras fracamente qualificadas na consulta | r, c, você... |
2 | Palavras fortemente qualificadas na consulta | n, s, v... |
3 | palavras principais na consulta | nz, nw, LOC ... |
Com base na saída do modelo, o LAC também oferece suporte aos usuários para configurar resultados de segmentação personalizados e saída de tipo de nome adequado. Quando o modelo prevê um item que corresponde ao dicionário, ele substituirá o resultado original por um resultado personalizado. Para obter uma correspondência mais precisa, apoiamos fragmentos longos compostos por múltiplas palavras como um item.
Implementamos esta função carregando um arquivo de dicionário. Cada linha do arquivo de dicionário representa um item personalizado, consistindo em uma palavra ou várias palavras consecutivas que são usadas após cada palavra para indicar um rótulo se não houver '/'. label O rótulo padrão do modelo será usado. Quanto mais palavras por item, mais preciso será o efeito da intervenção.
Exemplo de arquivo de dicionário
Este é apenas um exemplo para mostrar os resultados sob vários requisitos. O modo de configuração do dicionário com curingas será aberto futuramente, portanto fique atento.
春天/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
Também fornecemos uma interface de treinamento incremental. Os usuários podem usar seus próprios dados para treinamento incremental. Primeiro, os dados precisam ser convertidos no formato de entrada do modelo e todos os arquivos de dados são codificados em "UTF-8".
Amostra de dados
Consistente com o formato da maioria dos conjuntos de dados de segmentação de palavras de código aberto, os espaços são usados como marcadores de segmentação de palavras, conforme mostrado abaixo:
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' )
dados de amostra
Com base nos dados de segmentação de palavras, cada palavra é marcada com sua classe gramatical ou categoria de entidade na forma de "/tipo". Vale a pena notar que o treinamento em análise lexical atualmente suporta apenas dados cujo sistema de rótulos é consistente com o nosso. Também abriremos suporte para o novo sistema de tags no futuro, portanto, fique atento.
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调用的脚本
Se você usa LAC em seu trabalho acadêmico, adicione as seguintes citações. Estamos muito satisfeitos que o LAC possa ajudá-lo em seu trabalho 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}
}
Congratulamo-nos com os desenvolvedores que contribuem com código para a LAC. Se você desenvolver novos recursos e encontrar bugs... você pode enviar solicitações Pull e problemas ao Github.