fasttext介绍和实践(科室推荐)

数据抽取:
获取主诉信息(主诉是医生对病人的症状及发展情况描述)、病人性别、年龄、科室信息

fasttext官网:https://fasttext.cc/docs/en/supervised-tutorial.html

fasttext介绍

FastText是Facebook研究团队创建的一个库,用于高效计算word representation和执行文本分类,可以在几秒内完成其他算法几天才可以完成的任务。

实践注意事项

数据预处理:

  • 由于有些主诉相同时,挂的科室也不一样,需要进一步处理,如删除某个类别的数据。比如发现中医科的病人主诉很杂乱,决定删除该科室数据
  • 实践中发现,fasttext对输入数据的格式要求为这种:__label__类别,文本。“,”需要与文本间隔至少1个空格,如下第一行。文本第一个数字是性别,第二个数字是年龄,之后的是主诉信息
__label__神经内科 , 1 25 睡 眠 障 碍 1 月
__label__神经内科,0 80 吐 字 欠 清 、 吞 咽 困 难 5

如果为第二行格式,则模型会将0也作为预测输出。

  • 做文本分类时可以先用简单模型试下,再用复杂的模型慢慢调试。模型结果很大区别于数据质量

参数选择:按照官方推荐的参数选择即可,可以多试几下,注意n-gram不要太大,不然容易过拟合

fasttext使用

参照官网
常用方法:

import fasttext
#训练模型
classifier = fasttext.train_supervised(input='train_data.txt', lr=1.0, epoch=25, wordNgrams=3, bucket=200000, dim=50, loss='hs')

#验证,返回类似(数量,accuracy,f1)
classifier.test('train_data.txt')

#保存和加载模型
classifier.save_model('fasttext_classifier.ftz')
model = fasttext.load_model('fasttext_classifier.ftz')

#预测结果,在输出3个最有可能的类别下,输出预测概率大于0.1的类别
model.predict("",k=3,threshold=0.1)

代码

主要三个模块:数据处理成fasttext格式,训练模型(多换几个参数)

代码如下:

由于内网,代码是用手机照的,不够清晰之处,敬请见谅
get_target_department是将医院科室与标准科室做对应,返回类似{‘消化内科门诊’:消化内科},键是该医院科室,值是标准科室

导包
在这里插入图片描述
数据处理(把数据很少的科室数据删除,不做该科室预测,将科室转换为标准科室),生成模型
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
验证效果,效果还不错,训练集f1达到98%,验证集也有90%,fasttext很强大

在这里插入图片描述

提高

更多信息:除了主诉,加上现病史信息

统一粒度:科室粒度不一,需要统一粒度

有些删除的科室,如中医科虽然有很多噪音,但是,可以也许通过算法降噪,找到特征

使用多家机构数据,提高模型泛化性

TEXTCNN:
效果差不多,造成结果差异大的是通道数,10轮后loss就趋于平缓了,如果加了batch_norm(卷积,池化后),收敛会更快
模型代码:在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值