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

本文涉及的产品
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 语料库标注与训练模型---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)
相关文章
|
8天前
|
机器学习/深度学习 Python
9-3|使用Python的scikit-learn库来训练一个逻辑回归模型,检测句子是否含有侮辱性内容:
9-3|使用Python的scikit-learn库来训练一个逻辑回归模型,检测句子是否含有侮辱性内容:
|
2月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch与Hugging Face Transformers:快速构建先进的NLP模型
【8月更文第27天】随着自然语言处理(NLP)技术的快速发展,深度学习模型已经成为了构建高质量NLP应用程序的关键。PyTorch 作为一种强大的深度学习框架,提供了灵活的 API 和高效的性能,非常适合于构建复杂的 NLP 模型。Hugging Face Transformers 库则是目前最流行的预训练模型库之一,它为 PyTorch 提供了大量的预训练模型和工具,极大地简化了模型训练和部署的过程。
78 2
|
2月前
|
自然语言处理
【NLP】from glove import Glove的使用、模型保存和加载
使用 from glove import Glove 进行词向量训练、保存和加载的基本示例。
39 2
【NLP】from glove import Glove的使用、模型保存和加载
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【自然语言处理】python之人工智能应用篇——文本生成技术
文本生成是指使用自然语言处理技术,基于给定的上下文或主题自动生成人类可读的文本。这种技术可以应用于各种领域,如自动写作、聊天机器人、新闻生成、广告文案创作等。
53 8
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
【深度学习】探讨最新的深度学习算法、模型创新以及在图像识别、自然语言处理等领域的应用进展
深度学习作为人工智能领域的重要分支,近年来在算法、模型以及应用领域都取得了显著的进展。以下将探讨最新的深度学习算法与模型创新,以及它们在图像识别、自然语言处理(NLP)等领域的应用进展。
94 6
|
2月前
|
机器学习/深度学习 自然语言处理 数据处理
|
2月前
|
自然语言处理
【NLP】如何实现快速加载gensim word2vec的预训练的词向量模型
本文探讨了如何提高使用gensim库加载word2vec预训练词向量模型的效率,提出了三种解决方案:保存模型以便快速重新加载、仅保存和加载所需词向量、以及使用Embedding工具库代替word2vec原训练权重。
134 2
|
2月前
|
Python
python 随机划分图片数据集以及移动标注
这篇文章提供了一个Python脚本,用于随机划分图片数据集为训练集和测试集,并将对应的标注文件移动到相应的子文件夹中,以减少训练使用的数据量。
|
2月前
|
存储 自然语言处理
【NLP】gensim保存存储和加载fasttext词向量模型
【8月更文挑战第3天】如何使用Gensim库中的FastText模型来训练词向量,并演示了如何保存和加载这些训练好的模型。
62 2
|
2月前
|
机器学习/深度学习 存储 自然语言处理
【NLP-新闻文本分类】3 Bert模型的对抗训练
详细介绍了使用BERT模型进行新闻文本分类的过程,包括数据集预处理、使用预处理数据训练BERT语料库、加载语料库和词典后用原始数据训练BERT模型,以及模型测试。
38 1
下一篇
无影云桌面