LAC, le nom complet de Lexical Analysis of Chinese, est un outil d'analyse lexicale commun développé par le département de traitement du langage naturel de Baidu pour réaliser des fonctions telles que la segmentation des mots chinois, le marquage de parties du discours et la reconnaissance de noms propres. Cet outil présente les caractéristiques et avantages suivants :
Nous introduisons ici principalement l'installation et l'utilisation de Python, ainsi que l'utilisation d'autres langages :
Code compatible avec Python2/3
Installation entièrement automatique : pip install lac
Téléchargement semi-automatique : téléchargez d'abord http://pypi.python.org/pypi/lac/, décompressez et exécutez python setup.py install
Une fois l'installation terminée, vous pouvez entrer lac
ou lac --segonly
ou lac --rank
sur la ligne de commande pour démarrer le service pour une expérience rapide.
Les réseaux domestiques peuvent utiliser l'installation source Baidu, la vitesse d'installation est plus rapide :
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 sortie de chaque phrase est son résultat de segmentation de mots word_list et la tags_list de chaque mot, dont le format est (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])
]
L’ensemble des balises de catégories de parties du discours et de noms propres est le suivant, dans lequel nous marquons en majuscules les quatre catégories de noms propres les plus couramment utilisées :
Étiquette | signification | Étiquette | signification | Étiquette | signification | Étiquette | signification |
---|---|---|---|---|---|---|---|
n | nom commun | f | emplacement nom | s | lieu nom | maintenant | Titre de l'ouvrage |
Nouvelle-Zélande | Autres noms propres | v | verbe commun | vd | verbe adverbe | vn | nom verbe |
un | adjectif | annonce | adverbe | un | nom | d | adverbe |
m | Quantificateur | q | quantificateur | r | pronom | p | préposition |
c | conjonction | toi | particule | xc | Autres mots de fonction | w | Ponctuation |
PAR | nom | LOC | Nom du lieu | ORG | Nom de l'organisation | TEMPS | temps |
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])
]
L'ensemble d'étiquettes pour chaque catégorie d'importance des mots est le suivant. Nous utilisons un dégradé à 4 niveaux pour la classification :
Étiquette | signification | commun dans une partie du discours |
---|---|---|
0 | Mots redondants exprimés dans la requête | p, w, xc... |
1 | Mots faiblement qualifiés dans la requête | r, c, toi... |
2 | Mots fortement qualifiés dans la requête | n, s, v... |
3 | mots clés dans la requête | nz, nw, LOC... |
Sur la base des résultats du modèle, BAC aide également les utilisateurs à configurer des résultats de segmentation personnalisés et des résultats de type de nom propre. Lorsque le modèle prédit un élément correspondant au dictionnaire, il remplace le résultat d'origine par un résultat personnalisé. Afin d'obtenir une correspondance plus précise, nous prenons en charge les longs fragments composés de plusieurs mots en tant qu'élément.
Nous implémentons cette fonction en chargeant un fichier de dictionnaire. Chaque ligne du fichier de dictionnaire représente un élément personnalisé, composé d'un mot ou de plusieurs mots consécutifs, utilisé après chaque mot pour indiquer une étiquette s'il n'y a pas de « / ». label L'étiquette par défaut du modèle sera utilisée. Plus il y a de mots par élément, plus l’effet de l’intervention sera précis.
Exemple de fichier de dictionnaire
Ceci est juste un exemple pour montrer les résultats sous diverses exigences. Le mode de configuration du dictionnaire avec des caractères génériques sera ouvert dans le futur, alors restez à l'écoute.
春天/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
Nous fournissons également une interface de formation incrémentielle. Les utilisateurs peuvent utiliser leurs propres données pour la formation incrémentielle. Tout d'abord, les données doivent être converties au format d'entrée du modèle et tous les fichiers de données sont codés en « UTF-8 :
Échantillon de données
Conformément au format de la plupart des ensembles de données de segmentation de mots open source, les espaces sont utilisés comme marqueurs de segmentation de mots, comme indiqué ci-dessous :
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' )
exemples de données
Sur la base des données de segmentation des mots, chaque mot est marqué avec sa partie du discours ou sa catégorie d'entité sous la forme de "/type". Il est à noter que la formation à l'analyse lexicale ne prend actuellement en charge que les données dont le système d'étiquettes est cohérent avec le nôtre. Nous ouvrirons également la prise en charge du nouveau système de balises à l'avenir, alors restez à l'écoute.
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 vous utilisez BAC dans vos travaux universitaires, veuillez ajouter les citations suivantes. Nous sommes très heureux que BAC puisse vous aider dans vos travaux académiques.
@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}
}
Nous invitons les développeurs à contribuer au code de BAC. Si vous développez de nouvelles fonctionnalités et trouvez des bugs... vous êtes invités à soumettre des demandes Pull et des problèmes à Github.