百度开源的中文分词、词性标注、专名识别的中文自然语言处理工具,提供python java c 调用借口。
安装
pip install lac
LAC使用
对中文语言处理,主要通过调用LAC 类实现
class LAC(object): """docstring for LAC""" def __init__(self, model_path=None, mode='lac', use_cuda=False): super(LAC, self).__init__() utils.check_cuda(use_cuda) if model_path is None: model_path = DEFAULT_SEG if mode == 'seg' else DEFAULT_LAC ......
LAC类的构造函数里,主要两个参数,一个mode,一个path
mode提供了模式设置,默认lac模型, 另一个seg,为分词模型。两种模式的区别在于 是否将 词性 也返回。seg时只返回对文本的分词后列表, lac模式下,返回的列表包含了分词列表,和词性列表,其格式为(word_list, tags_list)
model_path为模型路径,可以加载本地增强训练的模型
mode=seg 分词模型使用 .run()
from LAC import LAC lac = LAC(mode='seg') text = "LAC是个优秀的分词工具" seg_result = lac.run(text) print('分词效果:', seg_result) texts = ["LAC是个优秀的分词工具", "百度是一家高科技公司"] seg_result = lac.run(texts) print('分词效果:', seg_result)
分词效果: [‘LAC’, ‘是’, ‘个’, ‘优秀’, ‘的’, ‘分词’, ‘工具’]
分词效果: [[‘LAC’, ‘是’, ‘个’, ‘优秀’, ‘的’, ‘分词’, ‘工具’], [‘百度’, ‘是’, ‘一家’, ‘高科技’, ‘公司’]]
lac的接口调用方便,直接from LAC import LAC后, 生成一个lac 对象后就可以调用使用,mode设置为seg时,可以分词,调用.run()方法对文本分词
.run()可以直接对文本分词,也可以传入文本的list或者tuple,进行批量分词。
mode=lac 分词模型使用 .run()
mode设置成lac时,和seg的区别在于,对中文文本分词时,也同时将分词后的词性返回。每个句子的输出其切词结果word_list以及对每个单词的标注tags_list,其格式为(word_list, tags_list)
from LAC import LAC lac = LAC(mode='lac') text = "LAC是个优秀的分词工具" seg_result = lac.run(text) print('分词效果:', seg_result) texts = ["LAC是个优秀的分词工具", "百度是一家高科技公司"] seg_result = lac.run(texts) print('分词效果:', seg_result)
分词效果: [[‘LAC’, ‘是’, ‘个’, ‘优秀’, ‘的’, ‘分词’, ‘工具’], [‘nz’, ‘v’, ‘q’, ‘a’, ‘u’, ‘n’, ‘n’]]
分词效果: [[[‘LAC’, ‘是’, ‘个’, ‘优秀’, ‘的’, ‘分词’, ‘工具’], [‘nz’, ‘v’, ‘q’, ‘a’, ‘u’, ‘n’, ‘n’]], [[‘百度’, ‘是’, ‘一家’, ‘高科技’, ‘公司’], [‘ORG’, ‘v’, ‘m’, ‘n’, ‘n’]]]
词性和专名类别标签集合如下表,其中我们将最常用的4个专名类别标记为大写的形式:
标签 | 含义 | 标签 | 含义 | 标签 | 含义 | 标签 | 含义 |
---|---|---|---|---|---|---|---|
n | 普通名词 | f | 方位名词 | s | 处所名词 | nw | 作品名 |
nz | 其他专名 | v | 普通动词 | vd | 动副词 | vn | 名动词 |
a | 形容词 | ad | 副形词 | an | 名形词 | d | 副词 |
m | 数量词 | q | 量词 | r | 代词 | p | 介词 |
c | 连词 | u | 助词 | xc | 其他虚词 | w | 标点符号 |
PER | 人名 | LOC | 地名 | ORG | 机构名 | TIME | 时间 |
定制化功能
如果需要对模型进行加强,也提供了自定义的学习接口,可以学习本地数据,来强化模型。
自定义词典,.load_customization(本地词典),使用后模型在对文本分词时会优先使用本地词典中出现的词作为分词结果
.load_customization()使用
from LAC import LAC
lac = LAC()
# 装载干预词典, sep参数表示词典文件采用的分隔符,为None时默认使用空格或制表符'\t'
lac.load_customization('custom.txt', sep=None)
# 干预后结果
custom_result = lac.run(u"春天的花开秋天的风以及冬天的落阳")
custom.txt样内容
春天/SEASON
花/n 开/v
秋天的风
落 阳
原分词效果:
春天/TIME 的/u 花开/v 秋天/TIME 的/u 风/n 以及/c 冬天/TIME 的/u 落阳/n
lac.load_customization('custom.txt', sep=None)后加载效果
春天/SEASON 的/u 花/n 开/v 秋天的风/n 以及/c 冬天/TIME 的/u 落/n 阳/n
本地增强训练
强化训练,是通过学习本地的数据集,加强模型,将模型存储在本地,可以通过调用使用本地的加强版本模型。加强模型有两种,对应两种分词模型。1种是seq分词,1种是lac词法模型,在分词同时标记词性
seq强化分词训练模型
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')
lac词性分词模型
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')
两种前后训练的调用方式,使用上一样,区别在于本地的训练数据格式,seq下时不需要标记词性,lac时需要
定制化模型和本地增强训练的区别在于,定制化模型本身不修改模型本身,通过字典补丁,来加强对文本的分词效果。本地训练是通过本地的语料库,训练学习,对模型进行了修改,通过本地化路径存储,当使用时加载训练好的模型使用。