精华内容
下载资源
问答
  • 如何高质量增量训练lac分词模型
    千次阅读
    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分词工具以及4.1.2版本的gensim。在实际应用的过程中,待分词的文本都会具有一定规模。因此,附加了pandas批量分词处理。本文介绍通过anaconda创建虚拟环境、安装依赖,通过百度LAC工具对文本进行...

    前言

            分词与词向量训练是NLP的基础任务。目前,很多基础教程基于jieba和gensim3.8构建词向量。本人想写一个新一点版本的教程。故采用了百度lac分词工具以及4.1.2版本的gensim。同时,在实际应用的过程中,待分词的文本都会具有一定规模。因此,附加了pandas读入文本的批量分词处理。

    本文介绍通过anaconda创建虚拟环境、安装依赖,通过百度LAC工具对文本进行分词,采用gensim工具获得词向量。

    目录

    前言

    一、安装基础环境以及依赖

    二、使用步骤

    1.引入库

    2.读入数据

    3.构建LAC分词器

    4.分批次对数据进行分词

    5.采用gensim中word2vec方法进行词向量的训练

     6.调用训练好的词向量

    总结



    一、安装基础环境以及依赖

    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:04
    jieba分词词性对照表 词性编码 词性名称 注 解 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时间

    两者对比:

    序号

    词性

    jiebaLAC
    1

    形语素

    Ag 
    2

    形容词

    aa
    3

    副形词

    adad
    4

    名形词

    anan
    5

    区别词

    b 
    6

    连词

    cc
    7

    副语素

    dg 
    8

    副词

    dd
    9

    叹词

    e 
    10

    方位词

    ff
    11

    语素

    g 
    12

    前接成分

    h 
    13

    成语

    i 
    14

    简称略语

    j 
    15

    后接成分

    k 
    16

    习用语

    l 
    17

    数词

    mm
    18

    名语素

    Ng 
    19

    名词

    nn
    20

    人名

    nrnr  /  PER
    21

    地名

    nsns  /  LOC
    22

    机构团体

    ntnt  /  ORG
    23

    其他专名

    nznz
    24

    拟声词

    o 
    25

    介词

    pp
    26

    量词

    qq
    27

    代词

    rr
    28

    处所词

    ss
    29

    时语素

    tg 
    30

    时间词

    tt     /  TIME
    31

    助词

    uu
    32

    动语素

    vg 
    33

    动词

    vv
    34

    副动词

    vdvd
    35

    名动词

    vnvn
    36

    标点符号

    ww
    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

    命令执行完成之后,返回的信息如下所示

    image

    安装注意事项

    1. LAC有1.0 和2.0 ,在码云中显示的是1.0,但是并没有特意标明,1.0 的版本安装过程非常比较麻烦,安装过程也容易出错,建议大家可以去github查看LAC 2.0的安装方式
    2. 如果你是windows系统想用wsl去安装,不要使用WSL1.0,因为他不支持LAC的依赖组件paddle,也就没办法正确安装LAC了
    3. LAC 安装需要注意你的Python版本,不能大于3.7,笔者做实验的时候使用的Python3.8版本,结果报了如下错误

    image

    三、 运行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

    命令执行之后,返回的分词词汇标注信息如下所示

    image

    从上面图片可以看到,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

    命令执行之后,返回的分词词汇标注信息如下所示

    image

    在上图中我们可以看到,这次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...
  • text = u"LAC是个优秀的分词工具" lac_result = lac.run(text) print(lac_result) # 批量样本输入, 输入为多个句子组成的list,平均速率更快 texts = [u"LAC是个优秀的分词工具", u"百度是一家高科技公司"] lac_...
  • 出于项目需要,打算采用LAC作为主要分词工具了。 jieba 首先说一下jieba,这个安装使用都比较简单,推荐的也比较多,比如在《python中文自然语言处理基础与实战》一书中,就是推荐了jieba。 重要依赖包:paddle...
  • LAC功能在于中文分词、词性标注、NER,对于基本的词法分析效果还是蛮不错的,如下为其对应词性和ner标签:写这篇博客的目的也是在于进一步梳理思路和过程,毕竟当时还是踩了一些坑的,写下来,于人于己都方便!...
  • 星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术文 | 匿名大佬编 | 北大小才女小轶本文将为大家介绍如何使用百度开源的词法分析工具LAC实现个性化分词(附代码),并展示LA...
  • 一、背景笔者2年前写过一篇《PHP使用elasticsearch搜索安装及分词方法》的文章,记录了使用ES的分词的实现步骤,最近又需要用到分词,在网上发现一个百度的中文分词项目,中文词法分析(LAC) ,决定使用一番,并把...
  • 中文分词、词性标注、专名识别等功能,经过分析比较最终选择了百度LAC(Lexical Analysis of Chinese)。 由于baidu/lac 2.1依赖paddlepaddle最高1.8.5(使用2.1会报错lac 2.1.2 depends on paddlepaddle>=1.6)...
  • 文本分词、词性标注和命名实体识别都是自然语言处理领域里面很基础的任务,他们的精度决定了下游任务的精度,今天在查资料的时候无意间发现了一个很好玩的开源项目,具体查了一下才知道这是百度开源的一个主要用于...
  • 中文分词(Word Segmentation)是将连续的自然语言文本,切分出具有语义合理性和完整性的词汇序列的过程。因为在汉语中,词是承担语义的最基本单位,切词是文本分类、情感分析、信息检索等众多自然语言处理任务的基础...
  • 分词训练2. 词法分析训练文件结构效果原理参考文献 简介 LAC全称Lexical Analysis of Chinese,是百度NLP(自然语言处理部)研发的一款词法分析工具,可实现中文分词、词性标注、专名识别等功能。 LAC分词、词性...
  • 上一篇文章讲的是基于词典和AC自动机的快速分词。基于词典的分词有一个明显的优点,就是便于维护,容易适应领域。如果迁移到新的领域,那么只需要添加对应的领域新词,就可以实现较好地分词。当然,好的、适应领域的...
  • 2LAC模型简介:Lexical Analysis of Chinese,简称 LAC,是一个联合的词法分析模型,能整体性地完成中文分词、词性标注、专名识别任务。在百度自建数据集上评测,LAC效果:Precision=88.0%,Recall=88.7%,F1-...
  • 2.百度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 ...
  • 主要是读取文本,然后进行分词、词干提取、去停用词、计算词频,有界面,很实用
  • 一、在线分词 1、哈工大主干分析,有词性标记 https://ltp.ai/demo.html 2、百度在线词法分析,也就包含分词 https://ai.baidu.com/tech/nlp_basic/lexical
  • 2lac 分词 3、公司根据自己领域内数据训练并封装的分词工具jimi 分词,对外未公开。 今天重点聊聊前两个大众比较熟知的分词工具 1、jieba 分词 支持四种分词模式: 精确模式,试图将句子最精确地切开,适合文本...
  • 一、elasticsearch6 ansj分词简介 二、elasticsearch6 ansj分词安装 三、elasticsearch6 ansj分词配置 四、elasticsearch6 ansj分词使用 五,总结 一ansj介绍 nsj_seg分词器个人觉得是开源分词器里最强悍...
  • NLP----Baidu-中文词法分析(LAC

    千次阅读 2018-08-02 17:29:23
    LAC是一个联合的词法分析模型,整体性地完成中文分词、词性标注、专名识别任务。LAC既可以认为是Lexical Analysis of Chinese的首字母缩写,也可以认为是LAC Analyzes Chinese的递归缩写。 LAC基于一个堆叠的...
  • jieba分词的源码解析,并从零实现自己的分词
  • 前言 LAC基于一个堆叠的双向GRU结构,在长文本上准确复刻了百度AI开放平台上的词法分析算法。效果方面,分词、词性、专名识别的整体准确率95.5%;...个人使用百度LAC进行分词体验极佳,特在此推荐。本...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 366
精华内容 146
关键字:

2 lac 分词