Skip to content

jiojio 使用说明文档

冬日新雨 edited this page May 3, 2022 · 14 revisions

jiojio 使用说明文档

分词-添加正则

  • 添加正则意味着能够处理邮箱、URL、电话号码、身份证号、ip地址等方便使用正则抽取,但难以使用模型处理的情况。
  • jiojio中,cws_rule参数默认为False
>>> import jiojio
>>> jiojio.init(cws_rule=True)
>>> words = jiojio.cut('如有问题可以邮箱联系我们:[email protected],或者访问我们的 链接https://youjj.com.cn/kfes/f43/index.html')
>>> print(words)
# ['如', '有', '问题', '可以', '邮箱', '联系', '我们', ':', '[email protected]', ',', '或者', '访问', '我们', '的', ' ', '链接', 'https://youjj.com.cn/kfes/f43/index.html']
  • 正则之所以方便处理上述类型,原因在于其具有较为固定的正则表达式,即规律清晰明确。
  • 模型之所以难以处理上述类型,原因在于上述类型基本上字符串长度都大于10,这对于CRF模型抽取前后上下文特征是异常困难的,特征数量将向指数级爆炸增长,且过于稀疏的训练数据会对模型造成结果和特征的模糊性,导致模型预测效果下降。

分词-增加词典

  • 增加词典可以方便模型即时应对一些模型未见过的新词模型错分的词等。
  • jiojio中默认不加载任何词典。
>>> import jiojio
>>> jiojio.init(user_dict='/path/to/dictionary.txt')
>>> words = jiojio.cut('欧盟各成员国内部也存在着种种分歧。')
>>> print(words)
# ['欧盟', '各', '成员国', '内部', '也, '存在', '着', '种种', '分歧', '。']
  • 词典格式参考 用户自定义词典
  • jiojio 中的词典并非非黑即白地匹配文本,并将匹配的文本抽取,而是采用一种柔性的方式进行抽取,它利用了CRF算法迭代计算的特性。
  • 词典中,包括词汇本身,以及其权重两部分,权重越大,则该词越容易被识别。其中权重可以不填写,默认为1

分词-调整 Viterbi 算子

  • 在分词任务中,采用了BI标签标注标准。该标准不存在标签转移概率为0的情况。因此在极大程度上,在分词推理过程中,可以不经过 Viterbi算法,不采用转移参数。得到的F1值仅有微弱下降。
  • jiojio中默认with_viterbi参数为False
>>> import jiojio
>>> jiojio.init(with_viterbi=True)
>>> words = jiojio.cut('我爱北京天安门!')
>>> print(words)

# ['我', '爱', '北京', '天安门', '!']

词性标注

  • jiojio中,pos参数控制是否返回词性标注结果,默认为False
>>> import jiojio
>>> jiojio.init(pos=True)
>>> words, tags = jiojio.cut('致我们终将逝去的青春。')
>>> print([word + '/' + tag for word, tag in zip(words, tags)])
# [[]
  • 词性标注的类型对照表参考 jiojio/pos/pos_types.yml,其中model_type指的是模型训练的类型,rule_type指的是,当 pos_rule 为 True时,采用正则抽取出的词性类型。delete_type可忽略不计。
  • 注意
    • 由于词性标注模型模型较大,故当初次加载时,代码会自动下载词性标注模型。如感到下载模型网速十分地龟,请提 issue 让我知道。
    • 若无法连接公网,采用离线方式操作时,则需下载相应的词性标注模型 default_pos_model.zip,解压至jiojio/models/default_pos_model目录下,该目录下应当包含features.jsonweights.npzparams.json等文件。

词性标注-添加正则

  • jiojio中,pos_rule参数控制是否返回词性标注结果,默认为False
>>> import jiojio
>>> jiojio.init(pos=True, pos_rule=True)
>>> words, tags = jiojio.cut('致我们终将逝去的青春,小说请发送至邮箱[email protected]。')
>>> print([word + '/' + tag for word, tag in zip(words, tags)])
# [[]]
  • 注意:当cws_rule为 True,而pos_rule为 False 时,返回的结果仍然不带有规则类型,如urlemail等。
  • 正则之所以方便处理上述类型,原因在于其具有较为固定的正则表达式,即规律清晰明确。
  • 模型之所以难以处理上述类型,原因在于上述类型基本上字符串长度都大于10,这对于CRF模型抽取前后上下文特征是异常困难的,特征数量将向指数级爆炸增长,且过于稀疏的训练数据会对模型造成结果和特征的模糊性,导致模型预测效果下降。