-
2022-01-29 16:16:46
LAC 是百度开源的高质量分词工具(GRU+CRF),其提供增量训练的接口,形如:
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',mode = 'seg')
如何针对不同的业务场景,来优化分词结果呢?
最简单的方式,就是构建与场景相关的训练语料,增量训练lac模型。
笔者有一个小思路:
构建一个高质量的词库(如jieba词典、搜狗词库),根据jieba分词或原始lac分词,过滤出分词结果都在词库中的语料,并优化语料(合并分太细的词,切开分太粗的词),最后增量训练,done。更多相关内容 -
基于LAC分词与gensim的词向量训练,pandas批量中文分词
2021-12-17 15:07:35本文采用了百度lac分词工具以及4.1.2版本的gensim。在实际应用的过程中,待分词的文本都会具有一定规模。因此,附加了pandas批量分词处理。本文介绍通过anaconda创建虚拟环境、安装依赖,通过百度LAC工具对文本进行...前言
分词与词向量训练是NLP的基础任务。目前,很多基础教程基于jieba和gensim3.8构建词向量。本人想写一个新一点版本的教程。故采用了百度lac分词工具以及4.1.2版本的gensim。同时,在实际应用的过程中,待分词的文本都会具有一定规模。因此,附加了pandas读入文本的批量分词处理。
本文介绍通过anaconda创建虚拟环境、安装依赖,通过百度LAC工具对文本进行分词,采用gensim工具获得词向量。
目录
一、安装基础环境以及依赖conda create -n env_name python = 3.7 conda activate env_name pip install pandas pip install lac pip install matplotlib pip install jupyter notebook # pip install pytorch == 1.7.1 cpuonly -c pytorch pip install gensim pip install tqdm
env_name 填入自己想起的anaconda环境名称
anaconda环境的激活方式,conda activate env_name
由于历史版本和操作环境不同可能为activate (windows) 或 source activate (linux)
pip install / conda install package 可安装需要安装的环境依赖,package为包名
二、使用步骤
1.引入库import pandas as pd from tqdm import tqdm from LAC import LAC from gensim.models import word2vec import time
2.读入数据all_train = pd.read_csv('./dataset/train.csv') all_train['sentence'] = all_train['sentence'].str.strip() ##这里假定 all_train['sentence'] 是待分词的句子列
3.构建LAC分词器,读取停用词
lac = LAC(mode = 'seg') #lac.load_custonization(vocab, sep = '^') #停用词设置 stopwords = set() file = open("stopwords.txt", 'r', encoding = 'utf-8'): for line in file: stopwords.add(line.strip()) file.close()
百度LAC分词器有 seg 、lac、rank三种模式:
seg模式:单纯分词
lac模型:显示分词、词性
rank模式: 显示词分词、词性、词重要性(如问答检索场景)
可以采用 lac.load_custonization方法加载个性化词典配置,具体功能可参考:GitHub - baidu/lac: 百度NLP:分词,词性标注,命名实体识别,词重要性
4.分批次对数据进行分词
def get_cutwords(line): sen = lac.run(line) #采用lac进行分词,返回list sen = [i for i in sen if i not in stopwords] return " ".join(sen) all_train['cut'] = '' n = 10 epcho = int(len(all_train) / n) print('length of file', len(all_train)) for i in tqdm(range(n)): all_train['cut'][i*epcho: (i+1)*epcho] = all_train['sentence'][i*epcho: (i+1)*epcho].apply(get_cutwords) all_train['cut'][n*epcho:] = all_train['sentence'][n*epcho:].apply(get_cutwords) all_train['cut'].to_csv('./w2v_trainset/train.txt', header = None, encoding = 'utf-8', index = False)
此处为了防止文件太大考虑内存受限,分片切分然后合并,如果资源足够无需这样的处理。
如果文件还是太大可以采用多线程的方式调用 get_cutwords 方法
5.采用gensim中word2vec方法进行词向量的训练
sentences = word2vec.LineSentence('./w2v_trainset/train.txt') print('sentence loaded') num_feature = 300 min_word_counts = 7 num_worker = 8 context = 7 downsampling = 1e-3 model = word2vec.Word2Vec(sentences, workers = num_worker, vector_size = num_feature, min_count = min_word_counts, sg = 1, window = context, sample = downsampling) print('trained') model.save('./w2v_model/allw2v.model') print('finish')
6.调用训练好的词向量
from gensim.models import KeyedVectors word2vec = KeyedVectors.load('./w2v_model/allw2v.model') vocab = list(word2vec.wv.key_to_index) test_string = '今天心情真好啊' cut_result = lac.run(test_string) cut_result = [i for i in cut_result if i in vocab] #w2v_result = [word2vec.wv[i] for i in cut_result] #w2v_result = [word2vec.wv[cut_result]] sen_vec = np.mean(word2vec.wv[cut_result], axis = 0)
gensim中的word2vec文档可见一下链接:(本文采用gensim版本为4.1.2)
models.word2vec – Word2vec embeddings — gensim
总结以上就是今天要讲的内容,本文简介了采用百度LAC和gensim的word2vec工具,构建词向量的流程。
-
jieba分词和LAC分词词性对比表
2020-07-23 11:20:04jieba分词词性对照表 词性编码 词性名称 注 解 Ag 形语素 形容词性语素。形容词代码为 a,语素代码g前面置以A。 a 形容词 取...jieba分词词性对照表
标注 解释 标注 解释 标注 解释 a 形容词 mq 数量词 tg 时语素 ad 副形词 n 名词 u 助词 ag 形语素 ng 例:义 乳 亭 ud 例:得 an 名形词 nr 人名 ug 例:过 b 区别词 nrfg 也是人名 uj 例:的 c 连词 nrt 也是人名 ul 例:了 d 副词 ns 地名 uv 例:地 df 例:不要 nt 机构团体 uz 例:着 dg 副语素 nz 其他专名 v 动词 e 叹词 o 拟声词 vd 副动词 f 方位词 p 介词 vg 动语素 g 语素 q 量词 vi 例:沉溺于 等同于 h 前接成分 r 代词 vn 名动词 i 成语 rg 例:兹 vq 例:去浄 去过 唸过 j 简称略语 rr 人称代词 x 非语素字 k 后接成分 rz 例:这位 y 语气词 l 习用语 s 处所词 z 状态词 m 数词 t 时间词 zg 例:且 丗 丟 词性编码
词性名称
注 解 Ag
形语素
形容词性语素。形容词代码为 a,语素代码g前面置以A。
a
形容词
取英语形容词 adjective的第1个字母。
ad
副形词
直接作状语的形容词。形容词代码 a和副词代码d并在一起。
an
名形词
具有名词功能的形容词。形容词代码 a和名词代码n并在一起。 b
区别词
取汉字“别”的声母。 c
连词
取英语连词 conjunction的第1个字母。 dg
副语素
副词性语素。副词代码为 d,语素代码g前面置以D。 d
副词
取 adverb的第2个字母,因其第1个字母已用于形容词。 e
叹词
取英语叹词 exclamation的第1个字母。 f
方位词
取汉字“方” g
语素
绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。 h
前接成分
取英语 head的第1个字母。 i
成语
取英语成语 idiom的第1个字母。 j
简称略语
取汉字“简”的声母。 k
后接成分
l
习用语
习用语尚未成为成语,有点“临时性”,取“临”的声母。 m
数词
取英语 numeral的第3个字母,n,u已有他用。 Ng
名语素
名词性语素。名词代码为 n,语素代码g前面置以N。 n
名词
取英语名词 noun的第1个字母。 nr
人名
名词代码 n和“人(ren)”的声母并在一起。 ns
地名
名词代码 n和处所词代码s并在一起。 nt
机构团体
“团”的声母为 t,名词代码n和t并在一起。 nz
其他专名
“专”的声母的第 1个字母为z,名词代码n和z并在一起。 o
拟声词
取英语拟声词 onomatopoeia的第1个字母。 p
介词
取英语介词 prepositional的第1个字母。 q
量词
取英语 quantity的第1个字母。 r
代词
取英语代词 pronoun的第2个字母,因p已用于介词。 s
处所词
取英语 space的第1个字母。 tg
时语素
时间词性语素。时间词代码为 t,在语素的代码g前面置以T。 t
时间词
取英语 time的第1个字母。 u
助词
取英语助词 auxiliary vg
动语素
动词性语素。动词代码为 v。在语素的代码g前面置以V。 v
动词
取英语动词 verb的第一个字母。 vd
副动词
直接作状语的动词。动词和副词的代码并在一起。 vn
名动词
指具有名词功能的动词。动词和名词的代码并在一起。 w
标点符号
x
非语素字
非语素字只是一个符号,字母 x通常用于代表未知数、符号。 y
语气词
取汉字“语”的声母。 z
状态词
取汉字“状”的声母的前一个字母。 un
未知词
不可识别词及用户自定义词组。取英文Unkonwn首两个字母。(非北大标准,CSW分词中定义) LAC分词词性对照表
词性和专名类别标签集合如下表,其中词性标签24个(小写字母),专名类别标签4个(大写字母)。这里需要说明的是,人名、地名、机名和时间四个类别,在上表中存在两套标签(PER / LOC / ORG / TIME 和 nr / ns / nt / t),被标注为第二套标签的词,是模型判断为低置信度的人名、地名、机构名和时间词。开发者可以基于这两套标签,在四个类别的准确、召回之间做出自己的权衡。
标签 含义 标签 含义 标签 含义 标签 含义 n 普通名词 f 方位名词 s 处所名词 t 时间 nr 人名 ns 地名 nt 机构名 nw 作品名 nz 其他专名 v 普通动词 vd 动副词 vn 名动词 a 形容词 ad 副形词 an 名形词 d 副词 m 数量词 q 量词 r 代词 p 介词 c 连词 u 助词 xc 其他虚词 w 标点符号 PER 人名 LOC 地名 ORG 机构名 TIME 时间 两者对比:
序号 词性
jieba LAC 1 形语素
Ag 2 形容词
a a 3 副形词
ad ad 4 名形词
an an 5 区别词
b 6 连词
c c 7 副语素
dg 8 副词
d d 9 叹词
e 10 方位词
f f 11 语素
g 12 前接成分
h 13 成语
i 14 简称略语
j 15 后接成分
k 16 习用语
l 17 数词
m m 18 名语素
Ng 19 名词
n n 20 人名
nr nr / PER 21 地名
ns ns / LOC 22 机构团体
nt nt / ORG 23 其他专名
nz nz 24 拟声词
o 25 介词
p p 26 量词
q q 27 代词
r r 28 处所词
s s 29 时语素
tg 30 时间词
t t / TIME 31 助词
u u 32 动语素
vg 33 动词
v v 34 副动词
vd vd 35 名动词
vn vn 36 标点符号
w w 37 非语素字
x 38 语气词
y 39 状态词
z 40 未知词
un 41 作品名 nw 42 其他虚词 xc -
中文分词工具(LAC) 试用笔记
2020-07-07 00:00:00笔者2年前写过一篇《PHP使用elasticsearch搜索安装及分词方法》的文章,记录了使用ES的分词的实现步骤,最近又需要用到分词,在网上发现一个百度的中文分词项目,中文词法分析(LAC) ,决定使用一番,并把这次试用...一、背景
笔者2年前写过一篇《PHP使用elasticsearch搜索安装及分词方法》的文章,记录了使用ES的分词的实现步骤,最近又需要用到分词,在网上发现一个百度的中文分词项目,中文词法分析(LAC) ,决定使用一番,并把这次试用通过文章记录下来,给有需要的朋友一个参考吧
中文词法分析LAC 支持Python、C++、JAVA、Android 用接口调用,其他语言的话就需要开发者自己自行封装了,笔者这次决定使用Python进行实验,在文中也会把相关代码给贴出来,给大家作为一个参考
二 安装LAC
LAC2.0 的安装方式非常简单,直接使用pip安装即可,但是国内访问pip软件源可能比较慢,因此我们可以用上加速地址,参考命令如下所示
pip3 install lac -i https://mirror.baidu.com/pypi/simple
命令执行完成之后,返回的信息如下所示
安装注意事项
- LAC有1.0 和2.0 ,在码云中显示的是1.0,但是并没有特意标明,1.0 的版本安装过程非常比较麻烦,安装过程也容易出错,建议大家可以去github查看LAC 2.0的安装方式
- 如果你是windows系统想用wsl去安装,不要使用WSL1.0,因为他不支持LAC的依赖组件
paddle
,也就没办法正确安装LAC了 - LAC 安装需要注意你的Python版本,不能大于3.7,笔者做实验的时候使用的Python3.8版本,结果报了如下错误
三、 运行DEMO
为了验证是否已经将LAC安装成功,这里笔者运行了一下DEMO示例代码,首先新建了一个代码文件
lac.py
,然后将demo代码复制进去,代码如下所示# -*- coding: utf-8 -*- from LAC import LAC # 装载分词模型 lac = LAC(mode='seg') # 单个样本输入,输入为Unicode编码的字符串 text = u"大王叫我来巡山" seg_result = lac.run(text) print(seg_result) # 批量样本输入, 输入为多个句子组成的list,平均速率会更快 texts = [u"山里有个庙", u"庙里有个老和尚跟一个小和尚"] seg_result = lac.run(texts) print(seg_result)
接着使用Python运行这个文件,执行命令如下
python lac.py
命令执行之后,返回的分词词汇标注信息如下所示
从上面图片可以看到,LAC已经将一段文本进行了分词,说明我们安装LAC成功,
LAC 除了可以进行分词之外,还可以用来做词性标注与实体识别,我们接着继续运行demo代码,笔者首先新建了一个代码文件
lac2.py
,然后将用来做词性标注和实体识别的demo代码复制进去,代码如下所示from LAC import LAC # 装载LAC模型 lac = LAC(mode='lac') # 单个样本输入,输入为Unicode编码的字符串 text = u"我想涨工资" lac_result = lac.run(text) print(lac_result) # 批量样本输入, 输入为多个句子组成的list,平均速率更快 texts = [u"汤青松长得好帅", u"我喜欢做安全开发工程师"] lac_result = lac.run(texts) print(lac_result)
接着使用Python运行这个文件,执行命令如下
python lac2.py
命令执行之后,返回的分词词汇标注信息如下所示
在上图中我们可以看到,这次LAC不仅返回了分词结果,还返回另外一个词汇类型的list,笔者粗略的核对了一下,基本都能对应上,比如笔者的名字标识为
PER 人名
类型,好帅
标示为a 形容词
类型下面是词性和专名类别标签集合,其中我们将最常用的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 时间 四、试用感想
LAC是一个非常不错的分词工具,并不是用来直接为业务提供搜索支持,而是作为一个搜索引擎的基础工具;
比如当你想将网站的文章标题用于站内搜索,使用LAC进行了分词,分词之后这些数据你还需要额外的存储,用来作为搜索使用,因为LAC只提供分词功能,所以感觉LAC适合作为分词搜索引擎的一部分,如果你想用来分词搜索站内信息,倒不如ES的那么方便。
笔者也好奇LAC项目的适用场景是什么?从LAC项目的产品口中得知回答如下:
LAC适用场景更多是与实体识别相关的,比如知识图谱,知识问答,信息抽取等,也可以作为其他模型算法的基础工具,因为其分词粒度是以实体作为粒度的,同时兼具实体识别的效果,而在搜索引擎中一般使用的分词粒度会更小一些,或者同时提供多种粒度,如果要面向搜索的分词,还需要用户自行进行微调模型
-
作者:汤青松
日期:2020-07-07
-
中文分词
2020-12-24 15:23:57只有java版本,但是机器学习主要是基于python的 (2).效果指标为行完美率和字完美率,该指标不妥,特别是句子越长,越无意义,(3). 每种分词工具评测的算法太多了,这里仅评比了默认的分词算法。基于此,我做了一个j... -
百度NLP工具LAC初体验:分词,词性标注,命名实体识别
2020-12-07 15:29:18text = u"LAC是个优秀的分词工具" lac_result = lac.run(text) print(lac_result) # 批量样本输入, 输入为多个句子组成的list,平均速率更快 texts = [u"LAC是个优秀的分词工具", u"百度是一家高科技公司"] lac_... -
分词jieba和LAC的对比使用记录
2022-01-18 19:38:52出于项目需要,打算采用LAC作为主要分词工具了。 jieba 首先说一下jieba,这个安装使用都比较简单,推荐的也比较多,比如在《python中文自然语言处理基础与实战》一书中,就是推荐了jieba。 重要依赖包:paddle... -
Java/Python调用百度LAC进行词法分析实现
2020-12-24 15:23:58LAC功能在于中文分词、词性标注、NER,对于基本的词法分析效果还是蛮不错的,如下为其对应词性和ner标签:写这篇博客的目的也是在于进一步梳理思路和过程,毕竟当时还是踩了一些坑的,写下来,于人于己都方便!... -
开源词法分析工具LAC重大升级!打造属于自己的个性化分词器!
2020-07-21 12:30:00星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 匿名大佬编 | 北大小才女小轶本文将为大家介绍如何使用百度开源的词法分析工具LAC实现个性化分词(附代码),并展示LA... -
java中文分词工具_中文分词工具(LAC) 试用笔记
2020-11-20 16:02:21一、背景笔者2年前写过一篇《PHP使用elasticsearch搜索安装及分词方法》的文章,记录了使用ES的分词的实现步骤,最近又需要用到分词,在网上发现一个百度的中文分词项目,中文词法分析(LAC) ,决定使用一番,并把... -
第2讲:python-3.8安装baidu/lac 2.1,开启中文分词之旅。
2021-11-09 21:23:24中文分词、词性标注、专名识别等功能,经过分析比较最终选择了百度LAC(Lexical Analysis of Chinese)。 由于baidu/lac 2.1依赖paddlepaddle最高1.8.5(使用2.1会报错lac 2.1.2 depends on paddlepaddle>=1.6)... -
基于百度开源项目LAC实现文本分词、词性标注和命名实体识别
2020-07-09 15:12:39文本分词、词性标注和命名实体识别都是自然语言处理领域里面很基础的任务,他们的精度决定了下游任务的精度,今天在查资料的时候无意间发现了一个很好玩的开源项目,具体查了一下才知道这是百度开源的一个主要用于... -
Python-百度的中文开源词法分析工具LAC
2019-08-11 02:22:12中文分词(Word Segmentation)是将连续的自然语言文本,切分出具有语义合理性和完整性的词汇序列的过程。因为在汉语中,词是承担语义的最基本单位,切词是文本分类、情感分析、信息检索等众多自然语言处理任务的基础... -
《自然语言处理实战入门》第三章 :中文分词原理及相关组件简介 ---- 工业级词法分析组件百度LAC2.0
2020-11-27 00:41:19分词训练2. 词法分析训练文件结构效果原理参考文献 简介 LAC全称Lexical Analysis of Chinese,是百度NLP(自然语言处理部)研发的一款词法分析工具,可实现中文分词、词性标注、专名识别等功能。 LAC在分词、词性... -
【中文分词系列】 2. 基于切分的新词发现
2021-01-14 10:25:08上一篇文章讲的是基于词典和AC自动机的快速分词。基于词典的分词有一个明显的优点,就是便于维护,容易适应领域。如果迁移到新的领域,那么只需要添加对应的领域新词,就可以实现较好地分词。当然,好的、适应领域的... -
Linux系统 安装飞桨PaddleHub+LAC实现词法分析 实现加载自定义词典分词 (解决Lac服务启动报错问题、解决...
2021-09-01 16:21:142、LAC模型简介:Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务。在百度自建数据集上评测,LAC效果:Precision=88.0%,Recall=88.7%,F1-... -
基于百度LAC2.0的词云图生成——各大分词工具实战比较
2020-06-27 14:26:002.百度LAC2.0介绍 根据百度官方消息,LAC全称Lexical Analysis of Chinese,是百度NLP(自然语言处理部)研发的一款词法分析工具,可实现中文分词、词性标注、专名识别等功能。 百度方面宣称,LAC在分词、词性、专名... -
python-LAC使用方法的相关总结
2021-12-01 09:37:47代码如下: from LAC import LAC ... text = u"LAC是个优秀的分词工具" seg_result = lac.run(text) print(seg_result) # 批量样本输入, 输入为多个句子组成的list,平均速率会更快 texts = [u"LAC是个 -
Python LAC使用
2022-03-31 14:11:33使用lac分词 1、需求 目前有一系列带有人名、机构的信息,需要将人名和机构名剥离梳理。python lac库可以实现精准定位分词。 2、参考文档 安装lac前的一些依赖关系解决,需要python版本3.7 ... -
文本分类之词频统计(分词、词干提取、去停用词、计算词频,有界面)
2019-02-13 12:39:15主要是读取文本,然后进行分词、词干提取、去停用词、计算词频,有界面,很实用 -
NLP分词和在线分词大总结
2020-05-25 18:24:08一、在线分词 1、哈工大主干分析,有词性标记 https://ltp.ai/demo.html 2、百度在线词法分析,也就包含分词 https://ai.baidu.com/tech/nlp_basic/lexical -
自然语言处理(NLP)任务中常用的分词工具及底层算法支持
2021-12-08 14:23:332、lac 分词 3、公司根据自己领域内数据训练并封装的分词工具jimi 分词,对外未公开。 今天重点聊聊前两个大众比较熟知的分词工具 1、jieba 分词 支持四种分词模式: 精确模式,试图将句子最精确地切开,适合文本... -
ElasticSearch6.2.2 ansj分词插件使用和其它比较
2019-12-20 18:22:36一、elasticsearch6 ansj分词简介 二、elasticsearch6 ansj分词安装 三、elasticsearch6 ansj分词配置 四、elasticsearch6 ansj分词使用 五,总结 一ansj介绍 nsj_seg分词器个人觉得是开源分词器里最强悍... -
NLP----Baidu-中文词法分析(LAC)
2018-08-02 17:29:23LAC是一个联合的词法分析模型,整体性地完成中文分词、词性标注、专名识别任务。LAC既可以认为是Lexical Analysis of Chinese的首字母缩写,也可以认为是LAC Analyzes Chinese的递归缩写。 LAC基于一个堆叠的... -
jieba分词的源码解析,并从零实现自己的分词器
2022-04-09 20:12:36jieba分词的源码解析,并从零实现自己的分词器 -
利用百度超大规模预训练模型进行分词 paddlehub
2019-05-30 14:24:48前言 LAC基于一个堆叠的双向GRU结构,在长文本上准确复刻了百度AI开放平台上的词法分析算法。效果方面,分词、词性、专名识别的整体准确率95.5%;...个人使用百度LAC进行分词体验极佳,特在此推荐。本...