# pip install fasttext-wheel
import fasttext
def demo01():
# 1- 模型训练
model = fasttext.train_supervised(input="../data/cooking_train.txt")
# 2- 模型预测
# 参数解释:k指的是返回top K个预测概率最高的目标值
pred_labels = model.predict(text="Which baking dish is best to bake a banana bread ?",k=3)
print(type(pred_labels)) # 类型是嵌套元组
print(pred_labels)
pred_labels = model.predict(text="how to seperate peanut oil from roasted peanuts at home?",k=5)
print(pred_labels)
# 3- 模型评估
result = model.test(path="../data/cooking_valid.txt")
print(result)
# 将字母全部统一成小写,而且标点符号的前面增加空格
def demo02():
# 训练模型
model = fasttext.train_supervised(input="../data/cooking.pre.train")
# 模型评估
result = model.test(path="../data/cooking.pre.valid")
print(result)
# 增加训练轮次
def demo03():
# 训练模型
model = fasttext.train_supervised(input="../data/cooking.pre.train",epoch=20)
# 模型评估
result = model.test(path="../data/cooking.pre.valid")
print(result)
# 调整学习率
def demo04():
# 训练模型
model = fasttext.train_supervised(input="../data/cooking.pre.train",epoch=20,lr=1)
# 模型评估
result = model.test(path="../data/cooking.pre.valid")
print(result)
def demo05():
# 训练模型
model = fasttext.train_supervised(input="../data/cooking.pre.train",epoch=20,lr=1,wordNgrams=2)
# 模型评估
result = model.test(path="../data/cooking.pre.valid")
print(result)
def demo06():
# 训练模型
# hs:层次softmax
model = fasttext.train_supervised(input="../data/cooking.pre.train",epoch=20,lr=1,wordNgrams=2,loss="hs")
# 模型评估
result = model.test(path="../data/cooking.pre.valid")
print(result)
def demo07():
# 训练模型
# hs:层次softmax
model = fasttext.train_supervised(
input="../data/cooking.pre.train",
autotuneDuration=60*2,
autotuneValidationFile="../data/cooking.pre.valid"
)
# 模型评估
result = model.test(path="../data/cooking.pre.valid")
print(result)
# 将 多标签多分类 问题简化成 单标签多分类的问题。每种分类单独进行训练
def demo08():
# 训练模型
# ova:多标签多分类 问题简化成 单标签多分类的问题
model = fasttext.train_supervised(input="../data/cooking.pre.train", epoch=20, lr=0.1, wordNgrams=2, loss="ova")
# 模型评估
result = model.test(path="../data/cooking.pre.valid")
print(result)
def demo09():
# 训练模型
# ova:多标签多分类 问题简化成 单标签多分类的问题
model = fasttext.train_supervised(input="../data/cooking.pre.train", epoch=20, lr=0.1, wordNgrams=2, loss="ova")
# 保存训练好的模型
model.save_model("../model/fasttext.pkl")
# 加载训练好的模型
model = fasttext.load_model("../model/fasttext.pkl")
pred_labels = model.predict(text="how to seperate peanut oil from roasted peanuts at home?", k=5)
print(pred_labels)
if __name__ == '__main__':
# 1- 模型训练、预测、评估
# demo01() # (3000, 0.15066666666666667, 0.06515784921435779)
# 2- 数据基本处理
# demo02() # (3000, 0.17066666666666666, 0.07380712123396281)
# 3- 增加训练轮次
# demo03() # (3000, 0.486, 0.2101773100764019)
# 4- 调整学习率
# demo04() # (3000, 0.5813333333333334, 0.2514055067031858)
# 5- 设置n-gram参数
# demo05() # (3000, 0.5926666666666667, 0.25630676084762866)
# 6- 调整损失函数:主要是提升了运行速度
# demo06() # (3000, 0.597, 0.25818076978520976)
# 7- 自动超参数调优
# demo07() # (3000, 0.53, 0.22920570851953295)
# 8- 多标签多分类问题
# demo08() # (3000, 0.5286666666666666, 0.2286290903848926)
# 9- 保存模型和重新加载模型
demo09()