语料库标注与训练模型---Python自然语言处理(7)

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
简介: 语料库标注与训练模型---Python自然语言处理(7)

前言


通过前面博文的学习,我们知道在处理自然语言之时,肯定会用到语料库。目前,常用的语料库有PKU(人民日报语料库),MSR(微软亚洲研究院语料库)。而因为PKU是1998年时公开的,随着时代的发展,其分词早已经不大符合大众习惯。加之其手动编写有很多失误。所以,我们将在后面的博文中使用MSR语料库。


语料库就绪之后,就可以开始训练了。相信接触过机器学习的读者,或多或少都对训练并不陌生。训练指的是,给定样本集估计模型参数的过程。对于自然语言处理来说,训练指的是统计N元语法频次。有了频次,通过极大似然估计以及平滑策略,我们就可以估计任意句子的概率分布,就得到语言模型。本篇主要讲解一元语法与二元语法。


加载语料库


在处理自然语言时,我们首先要做的是加载语料库。而HanLP库提供了许多封装好的工具,对于这些通过空格符分割的分词语料库来讲,可以利用HanLP库提供的CorpusLoader.convert2SentencelList加载。


具体代码如下:

if __name__ == "__main__":
    CorpusLoader = SafeJClass('com.hankcs.hanlp.corpus.document.CorpusLoader')
    sents = load_cws_corpus(r"E:\ProgramData\Anaconda3\Lib\site-packages\pyhanlp\static\data\test\icwb2-data\gold\msr_test_gold.utf8")
    for sent in sents:
        print(sent)


运行之后,效果如下:


这里,每一个List都是个语句,且都已经分词成功。


统计语法


一元语法其实就是单词,如果把单词与词频写成纯文本格式,就得到了一部词频词典。有些语料库含有人工标注的词性,因此词典格式还是要支持词性,这也就是HanLP词典格式的涉及初衷。


在HanLP中,一元语法的统计功能由DictionaryMaker提供,二元语法统计由NatureDictionaryMaker提供。通过NatureDictionaryMaker类,我们可以统计一元语法模型,与二元语法模型。


详细代码实现如下:

if __name__ == "__main__":
    NatureDictionaryMaker = SafeJClass('com.hankcs.hanlp.corpus.dictionary.NatureDictionaryMaker')
    CorpusLoader = SafeJClass('com.hankcs.hanlp.corpus.document.CorpusLoader')
    sents = load_cws_corpus(r"E:\ProgramData\Anaconda3\Lib\site-packages\pyhanlp\static\data\test\icwb2-data\gold\msr_test_gold.utf8")
    for sent in sents:
        for word in sent:
            word.setLabel("n")
    maker = NatureDictionaryMaker()
    maker.compute(sents)
    maker.saveTxtTo("123")


运行之后,我们会在同级的项目目录下生成3个文件:


123.txt:一元语法模型

123.ngram.txt:二元语法模型

123.tr.txt:词性标注

具体效果如下:

如上图所示,它们之间用空格分开,分别代表的意思是:单词,词性,词性频次。还有图片没截取到的符号“末##末“,这个符号代表句子结尾,”始##始“代表句子开头。

而二元模型中,@符号分割开二元语法中的两个单词,空格后面是二元语法的频次。


下面,我们再来把该二元模型的搭建转换成通用的函数,毕竟本人用MSR语料库,并不代表所有人都用。通用的方法可以导入任意词典搭建语法模型。

def load_cws_corpus(corpus_path):
    CorpusLoader = SafeJClass('com.hankcs.hanlp.corpus.document.CorpusLoader')
    return CorpusLoader.convert2SentenceList(corpus_path)
#传入语料库路径以及导出模型的名称路径
def train_model(corpus_path,model_path):
    NatureDictionaryMaker = SafeJClass('com.hankcs.hanlp.corpus.dictionary.NatureDictionaryMaker')
    sents = load_cws_corpus(corpus_path)
    for sent in sents:
        for word in sent:
            word.setLabel("n")
    maker = NatureDictionaryMaker()
    maker.compute(sents)
    maker.saveTxtTo(model_path)
相关文章
|
4天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能舆情监测与分析
【8月更文挑战第16天】 使用Python实现深度学习模型:智能舆情监测与分析
21 1
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】python之人工智能应用篇——文本生成技术
文本生成是指使用自然语言处理技术,基于给定的上下文或主题自动生成人类可读的文本。这种技术可以应用于各种领域,如自动写作、聊天机器人、新闻生成、广告文案创作等。
19 8
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的应用进展
深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。
14 6
|
4天前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
14 1
|
4天前
|
机器学习/深度学习 自然语言处理 数据处理
|
1天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能医疗影像识别与诊断
【8月更文挑战第19天】 使用Python实现深度学习模型:智能医疗影像识别与诊断
8 0
|
2天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能娱乐与虚拟现实技术
【8月更文挑战第18天】 使用Python实现深度学习模型:智能娱乐与虚拟现实技术
5 0
|
3天前
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能城市交通管控与优化
【8月更文挑战第17天】 使用Python实现深度学习模型:智能城市交通管控与优化
3 0
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】TF-IDF算法在人工智能方面的应用,附带代码
TF-IDF算法在人工智能领域,特别是自然语言处理(NLP)和信息检索中,被广泛用于特征提取和文本表示。以下是一个使用Python的scikit-learn库实现TF-IDF算法的简单示例,并展示如何将其应用于文本数据。
116 65
|
1天前
|
机器学习/深度学习 自然语言处理
深度学习在自然语言处理中的应用与挑战
【8月更文挑战第19天】深度学习技术已成为自然语言处理(NLP)领域的一股不可忽视的力量,它通过模拟人脑处理信息的方式,极大地推动了语言识别、机器翻译、情感分析等任务的发展。然而,技术的快速进步也带来了新的挑战,包括数据依赖性强、模型可解释性差等问题。本文将深入探讨深度学习在NLP中的主要应用及其面临的技术障碍,并展望未来的发展方向。