LAC全称Lexical Analysis of Chinese,是百度自然语言处理部研发的一款联合的词法分析工具,实现中文分词、词性标注、专名识别等功能。该工具具有以下特点与优势:
- 效果好:通过深度学习模型联合学习分词、词性标注、专名识别任务,词语重要性,整体效果F1值超过0.91,词性标注F1值超过0.94,专名识别F1值超过0.85,效果业内领先。
- 效率高:精简模型参数,结合Paddle预测库的性能优化,CPU单线程性能达800QPS,效率业内领先。
- 可定制:实现简单可控的干预机制,精准匹配用户词典对模型进行干预。词典支持长片段形式,使得干预更为精准。
- 调用便捷:支持一键安装,同时提供了Python、Java和C++调用接口与调用示例,实现快速调用和集成。
- 支持移动端: 定制超轻量级模型,体积仅为2M,主流千元手机单线程性能达200QPS,满足大多数移动端应用的需求,同等体积量级效果业内领先。
安装与使用
LAC是以PYTHON包的形式提供服务的,安装非常简单,基于anaconda环境,执行如下命令即可:
pip install lac
编写测试用例:
分词/切词用例:
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)
print(seg_result)
texts = [u"豆豆很帅", u"豆豆爸爸是一名工程师"]
seg_result = lac.run(texts)
print(seg_result)
分词/切词运行结果:
词性标注与实体识别:
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)
print(lac_result)
texts = [u"豆豆很帅", u"豆豆爸爸是一名工程师"]
seg_result = lac.run(texts)
print(seg_result)
输出结果:
每个句子的输出其切词结果word_list以及对每个单词的标注tags_list,其格式为(word_list, tags_list)
词性和专名类别标签集合如下表,其中我们将最常用的4个专名类别标记为大写的形式:
词语重要性分析:
from LAC import LAC
# 装载词语重要性模型
lac = LAC(mode='rank')
# 单个样本输入,输入为Unicode编码的字符串
text = u"LAC是个优秀的分词工具"
lac_result = lac.run(text)
# 批量样本输入, 输入为多个句子组成的list,平均速率更快
texts = [u"LAC是个优秀的分词工具", u"百度是一家高科技公司"]
lac_result = lac.run(texts)
print(lac_result)
texts = [u"豆豆很帅", u"豆豆爸爸是一名工程师"]
seg_result = lac.run(texts)
print(seg_result)
运行结果:
词语重要性各类别标签集合如下表,我们使用4-Level梯度进行分类:
关于F1指标
细心的你应该注意到,上面提到的性能指标中有一项F1指标,F1是综合考量召回率和精确率得到的一个统计维度,经过查找资料,它的定义为:
所以,精确率越高F1越好,召回率越高F1也越好。
当F1为1的时候,说明:
令x=precision,y=recall,所以:
函数图形为:
可以看到,在X,Y的值域范围内,只有一个点满足F1=1的要求,那就是:
召回率==精确率==1
这个条件意味着什么呢,通俗点说,就是所有的正样本都被找到了,并且找到的都是正样本。没有出错。
以新冠筛查为例,如果某次的普查F1为1,那说明,精准防疫的目标已经达到,范围内的所有新冠阳性都被找到,并且找到的都是阳性患者,召回律100%,精确率100%,显然,要达到F1指标为1的程度,是非常不容易的。