中文自然语言处理--基于fasttext中文短文本分类

FastText 是 facebook 开源的一个词向量与文本分类工具,模型简单,训练速度非常快。FastText 做的事情,就是把文档中所有词通过 lookup table 变成向量,取平均后直接用线性分类器得到分类结果。

# 导入fasttext模块
import fasttext

# 以cooking.stackexchange.txt为训练集训练模型model
model = fasttext.train_supervised(input='./fasttext-data/data_train.txt',
                                  wordNgrams=2, label_prefix='__label__')
'''
# 使用自动超参数调优方法进行模型调优
# autotuneValidationFile参数需要指定验证数据集所在路径,
# 它将在验证集上使用随机搜索方法寻找可能最优的超参数.
# 使用autotuneDuration参数可以控制随机搜索的时间, 默认是300s,
# 根据不同的需求, 我们可以延长或缩短时间.
model = fasttext.train_supervised(input='./fasttext-data/data_train.txt',
                                  wordNgrams=2, label_prefix='__label__',
                                  autotuneValidationFile='./fasttext-data/data_val.txt',
                                  autotuneDuration=500)
'''

#保存模型
model.save_model('./fasttext-classify_model.bin')
#加载模型
# 使用fasttext的load_model进行模型的重加载
model = fasttext.load_model('./fasttext-classify_model.bin')
# 预测某串字符串的标签
label_to_cate = {0:'被老公打', 1:'被老婆打', 2:'被儿子打', 3:'被女儿打'}
# 默认返回1个概率最高的标签
labels = model.predict("报警人 老婆 打用 扫把 在场 人伤 无需 民警 到场。")
print(labels)
print(label_to_cate[int(labels[0][0][-1])])
# k=3表示,返回3个预测标签
print(model.predict("报警人 老公 现跑 小区 物业公司 人无事 民警 到场。", k=2))
# 可以同时预测多个字符串
print(model.predict(["报警人 儿子 民警 到场", "报警人 老公 民警 到场。"]))

# 预测某字符的精准率Precision和召回率Recall
# 1、定义print_result函数
def print_results(N, p, r):
    print("N\t" + str(N))
    print("P@{}\t{:.3f}".format(1, p))
    print("R@{}\t{:.3f}".format(1, r))

# 2、调用test函数进行预测
result = model.test("./fasttext-data/data_test.txt")
print(result)
print_results(*model.test("./fasttext-data/data_test.txt"))

你可能感兴趣的:(中文自然语言处理,中文自然语言处理,fasttext,文本分类)