You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保存训练好的NLTK葡萄牙语Unigram词性标注器

保存与加载训练好的NLTK UnigramTagger

这问题太戳痛点了——训练词性标注器尤其是针对大语料的时候,耗时真的不短,能直接复用训练好的模型绝对能省不少事!咱们可以用Python的序列化工具来搞定,最常用的就是pickle(标准库不用额外装),或者针对大对象更高效的joblib。

方法一:使用pickle序列化

1. 修改训练函数,添加保存逻辑

你可以在训练完标注器后,直接把它写入文件,替换原来的训练函数就行:

import nltk
import pickle
from nltk.corpus import mac_morpho

def train_and_save_unigram_tagger(save_path='portuguese_uni_tagger.pkl'):
    p_train = 0.9
    tagged_sents = mac_morpho.tagged_sents()
    size = int(len(tagged_sents)*p_train)
    train_sents = tagged_sents[:size]
    test_sents = tagged_sents[size:]
    
    uni_tagger = nltk.UnigramTagger(train_sents)
    print("Test accuracy =", uni_tagger.evaluate(test_sents))
    
    # 把训练好的标注器写入文件
    with open(save_path, 'wb') as f:
        pickle.dump(uni_tagger, f)
    print(f"标注器已保存到 {save_path}")
    return uni_tagger

第一次运行时调用这个函数,就能把训练好的uni_tagger存成.pkl文件,之后就不用再重复训练啦。

2. 加载已保存的标注器

之后每次启动程序,直接从文件加载标注器即可:

import pickle
import nltk

def load_unigram_tagger(load_path='portuguese_uni_tagger.pkl'):
    with open(load_path, 'rb') as f:
        uni_tagger = pickle.load(f)
    print("标注器加载完成")
    return uni_tagger

调用load_unigram_tagger()就能直接拿到训练好的标注器,直接用它做词性标注就行。

方法二:使用joblib(适合大模型)

如果你的标注器文件体积较大,joblib的序列化效率会更高,它在处理大对象时比pickle更高效。首先得安装joblib:

pip install joblib

保存标注器

训练完成后执行这段代码:

import joblib

# 把标注器保存到文件
joblib.dump(uni_tagger, 'portuguese_uni_tagger.joblib')

加载标注器

需要使用时直接加载:

uni_tagger = joblib.load('portuguese_uni_tagger.joblib')

小提醒

  • 保存和加载时尽量保持NLTK版本一致,避免版本不兼容导致加载失败;
  • 如果训练时依赖的语料库路径或其他资源有变动,加载后的标注器可能会出问题,尽量保持运行环境一致;
  • 不要随意修改保存的模型文件,否则会导致加载失败。

内容的提问来源于stack exchange,提问作者mgruppi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:20