Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >问句类型分类器

问句类型分类器

作者头像
luxuantao
发布于 2021-02-24 06:18:15
发布于 2021-02-24 06:18:15
41200
代码可运行
举报
文章被收录于专栏:Fdu弟中弟Fdu弟中弟
运行总次数:0
代码可运行

到目前为止,复旦的不倒翁问答系统只能回答事实类问题,不具备闲聊功能,为了真正做到“不倒问答”,我使用 fasttext 做了一个问句类型分类器,用来判断是事实类问题还是闲聊问题,效果好的出奇。

数据集

闲聊部分的数据集使用的是青云数据集,这个数据集很脏(里面有很多不文明的话),大概长这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
南京在哪里 	 在这里了
咋死???红烧还是爆炒 	 哦了哦了哦了,咱聊点别的吧
你个小骚货,哥哥的巴操你爽不爽? 	 不要这样说嘛!很不文明哦
额麻麻怎么会有那玩意儿 	 无法理解您的话,获取帮助请发送 help
拿尿冲一冲 	 今天这天气很适合聊天的说
那重点是什么 	 好话不分轻重!
章子怡新宠 	 夜曲小三

前面是问题,后面是答案,这里我们只需要问题。

事实类问题是从学长们的遗留代码中找到的,也不知道是哪来的(咱也不敢问),大概长这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
许嵩哪里人!
预期结果导向法的摘要主要写了什么?
功夫的产品类型有哪些?
有谁知道鞭打快牛这个词语怎样用
id设计的专业代码是多少?
西奈半岛属于哪个国家
西门社区的交通位置在哪?

好了,接下来要把数据处理成 fasttext 想要的样子,这里我用0表示闲聊,1表示事实类问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
__label__0 , 不要 每次 都 是 这句 撒
__label__0 , 不要 你 抱
__label__1 , 女人 左手 无名指 戴 戒指 代表 什么
__label__1 , 请问 师范生 技能 适应 于 哪些 人群
__label__1 , 请问 连连看 5 是 什么 语言 的 游戏
__label__0 , 充满 了 我 的 想像
__label__0 , 算 算数
__label__1 , 昀 朵 是 谁 的 粉丝
__label__1 , 根据 声波 测距 原理 开发 出 的 水下 探测器 是
__label__1 , 张 老庄 村 对 战役 有 啥 影响

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import random
import jieba 


data = []

with open('question_corpus.txt', 'r', encoding='utf-8') as f:
	for line in f.readlines():
		line = line.strip(' ?!,.?!,。\n\t\r')
		data.append((' '.join(jieba.lcut(line)), 1))
		# re = '' #是否只保留中文
		# for ch in line:
		# 	if '\u4e00' <= ch <= '\u9fff':
		# 		re += ch
		# if re:
		# 	data.append((re, 1))

with open('qingyun.tsv', 'r', encoding='utf-8') as f:
	for line in f.readlines():
		line = line.split('\t')[0].strip(' ?!,.?!,。\n\t\r')
		data.append((' '.join(jieba.lcut(line)), 0))
		# re = ''
		# for ch in line:
		# 	if '\u4e00' <= ch <= '\u9fff':
		# 		re += ch
		# if re:
		# 	data.append((re, 0))

random.shuffle(data)

with open('text_classification_data.txt', 'w', encoding='utf-8') as f:
	for each in data:
		text, label = each
		f.write(text)
		f.write('\t')
		f.write(str(label))
		f.write('\n')

with open('text_classification_data.txt', 'r', encoding='utf-8') as f:
	with open('text_classification_data_train.txt', 'w', encoding='utf-8') as f1:
		with open('text_classification_data_test.txt', 'w', encoding='utf-8') as f2:
			data = f.readlines()
			length = len(data)
			train_length = int(length * 0.8)
			for i in range(train_length):
				text, label = data[i].split('\t')
				f1.write(f'__label__{label[:-1]} , {text}\n')
			for i in range(train_length, length):
				text, label = data[i].split('\t')
				f2.write(f'__label__{label[:-1]} , {text}\n')

分类器

这里使用的是 fasttext 进行文本分类,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import fasttext.FastText as fasttext
import numpy as np
import os
import jieba 


def train_model(ipt=None, opt=None, model='', dim=100, epoch=5, lr=0.1, loss='softmax'):
    np.set_printoptions(suppress=True)
    if os.path.isfile(model):
        classifier = fasttext.load_model(model)
    else:
        classifier = fasttext.train_supervised(ipt, label='__label__', 
          minCount=1, dim=dim, epoch=epoch, lr=lr, wordNgrams=2, loss=loss)
        """
          训练一个监督模型, 返回一个模型对象
          @param input:           训练数据文件路径
          @param lr:              学习率
          @param dim:             向量维度
          @param ws:              cbow模型时使用
          @param epoch:           次数
          @param minCount:        词频阈值, 小于该值在初始化时会过滤掉
          @param minCountLabel:   类别阈值,类别小于该值初始化时会过滤掉
          @param minn:            构造subword时最小char个数
          @param maxn:            构造subword时最大char个数
          @param neg:             负采样
          @param wordNgrams:      n-gram个数
          @param loss:            损失函数类型, softmax, ns: 负采样, hs: 分层softmax
          @param bucket:          词扩充大小, [A, B]: A语料中包含的词向量, B不在语料中的词向量
          @param thread:          线程个数, 每个线程处理输入数据的一段, 0号线程负责loss输出
          @param lrUpdateRate:    学习率更新
          @param t:               负采样阈值
          @param label:           类别前缀
          @param verbose:         ??
          @param pretrainedVectors: 预训练的词向量文件路径, 如果word出现在文件夹中初始化不再随机
          @return model object
        """
        classifier.save_model(opt)
    return classifier

dim = 50
lr = 0.5
epoch = 5
model = f'data_dim{str(dim)}_lr0{str(lr)}_iter{str(epoch)}.model'

classifier = train_model(ipt='text_classification_data_train.txt',
                         opt=model,
                         model=model,
                         dim=dim, epoch=epoch, lr=lr
                         )

# 整体的结果为(测试数据量,precision,recall):
result = classifier.test('text_classification_data_test.txt')
print(result)

if __name__ == '__main__':
    while True:
        s = input('请输入问句:')
        s = s.strip(' ?!,.?!,。\n\t\r')
        print(classifier.predict(' '.join(jieba.lcut(s))))

训练的速度出奇的快,基本上都在半分钟以内,而且准确度和召回率都在98%以上。

唯一的缺点是保存下来的模型很大。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用fasttext实现文本处理及文本预测
因为参加datafountain和CCF联合举办的大数据竞赛,第一次接触到文本预测。对比了一些模型,最终还是决定试一下fasttext。上手fasttext的过程可以说是很痛苦了,因为国内各大博客网站上很少有fasttext的博客。一方面是fasttext是FaceBook去年才开源的,用的人比较少,还有一方面是fasttext大部分参考资料都是英文的,我啃了好久英文文档,搭梯子去国外的论坛,最后也算是简单上手了吧。这两天差不多所有时间都花在这上面了,感触挺深。基于以上几点,我觉得还是写一篇博客吧,虽然只
机器学习AI算法工程
2018/03/15
8.8K0
使用fasttext实现文本处理及文本预测
Python3 使用fastText进行文本分类 新闻分类
这篇论文的模型非常之简单,之前了解过word2vec的同学可以发现这跟CBOW的模型框架非常相似。
大鹅
2021/06/15
3.2K0
[1023]fastText文本分类算法
github:https://github.com/facebookresearch/fastText pypi:https://pypi.org/project/fasttext/
周小董
2021/07/19
9000
[1023]fastText文本分类算法
NLP学习之使用pytorch搭建textCNN模型进行中文文本分类
最近花周末两天时间利用pytorch实现了TextCNN进行了中文文本分类,在此进行记录。 相关代码详见:https://github.com/PingHGao/textCNN_pytorch
全栈程序员站长
2022/09/13
1.4K1
基于深度学习的文本分类应用!
在基于机器学习的文本分类中,我们介绍了几种常见的文本表示方法:One-hot、Bags of Words、N-gram、TF-IDF。这些方法存在两个共同的问题:一是转换得到的向量维度很高,需要较长的训练实践;二是没有考虑到单词与单词之间的关系,只是进行了统计。
Datawhale
2020/08/17
6560
fastText细节及实践
fastText模型是类似CBOW的三层结构,关于这个结构的介绍,很多博客都讲了,这里我不多赘述,我主要叙述一下其中的部分细节
mathor
2020/06/18
1.3K1
fastText细节及实践
fastrtext︱R语言使用facebook的fasttext快速文本分类算法
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/78367905
悟乙己
2019/05/26
1.1K0
文本分类实战: 机器学习vs深度学习算法对比(附代码)
这几周因为在做竞赛所以没怎么看论文刷题写博客,今天抽时间把竞赛用到的东西总结一下。先试水了一个很小众的比赛–文因互联,由AI100举办,参赛队不足20个,赛题类型是文本分类。选择参赛的主要原因是其不像阿里们举办的竞赛那样,分分钟就干一件事就是特征工程和调参,然后数据又多又乱,不适合入门。其次一个原因就是目前我的研究方向就是NLP,之前也做过一个文本分类的东西,所以就参赛了。这里将主要介绍我在比赛中用到的几个模型,从理论到代码实现进行总结。 1,数据集 大家可以到竞赛官网查看赛题并下载数据集,数据集中主要包
机器学习AI算法工程
2018/03/15
2.6K0
文本分类实战:  机器学习vs深度学习算法对比(附代码)
keras知识点
所有的函数都在keras.preprocessing 分别有text ,sequence, image
润森
2019/08/29
5060
利用RNN进行中文文本分类(数据集是复旦中文语料)
数据预处理参考利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) ,现在我们有了分词后的train_jieba.txt和test_jieba.txt,看一下部分内容:
西西嘛呦
2020/10/28
1.3K0
利用RNN进行中文文本分类(数据集是复旦中文语料)
文本分类(六):使用fastText对文本进行分类--小插曲
http://blog.csdn.net/lxg0807/article/details/52960072
bear_fish
2018/09/19
1.7K0
轻松搞懂Word2vec / FastText+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
本人在大三期间做了一个关于“疫苗接种”主题的舆情分析,主要涉及的技术有:爬虫(微博和知乎评论)、数据清洗、文本特征提取、建立模型(SVM、BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention)、文本摘要等。
全栈程序员站长
2022/09/13
1.3K1
轻松搞懂Word2vec / FastText+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类
利用transformer进行中文文本分类(数据集是复旦中文语料)
和之前介绍的不同,重构了些代码,为了使整个流程更加清楚,我们要重新对数据进行预处理。
西西嘛呦
2020/11/04
4.9K0
利用transformer进行中文文本分类(数据集是复旦中文语料)
fasttext工具
FastText 是由 Facebook AI Research (FAIR) 开发的一款高效文本处理工具包,主要用于文本分类和词向量表示。
@小森
2024/12/28
1300
fasttext工具
使用Facebook的FastText简化文本分类
本博客提供了详细的分步教程,以便使用FastText进行文本分类。为此,我们选择在Amazon.com上对客户评论进行情绪分析,并详细说明如何抓取特定产品的评论以便对他们进行情绪分析。
银河1号
2019/04/11
2.2K0
使用Facebook的FastText简化文本分类
书写自动智慧:探索Python文本分类器的开发与应用:支持二分类、多分类、多标签分类、多层级分类和Kmeans聚类
文本分类器,提供多种文本分类和聚类算法,支持句子和文档级的文本分类任务,支持二分类、多分类、多标签分类、多层级分类和Kmeans聚类,开箱即用。python3开发。
汀丶人工智能
2023/10/11
5460
书写自动智慧:探索Python文本分类器的开发与应用:支持二分类、多分类、多标签分类、多层级分类和Kmeans聚类
使用python语言编写常见的文本分类算法
自然语言处理中一个很常见的操作就是文本分类,比如一组新闻文本,通过分类模型,将新闻文本分为政治、体育、军事、娱乐、财经等等几大类。那么分类第一步就是文本向量化,前一篇博客讲了一些,本文可以说是前文的实践版本。本文主要介绍一些常见的文本分类模型,说是介绍,其实主要以代码和结果为主,并不会详细的介绍每个算法的思想、原理、推导过程等,那样的话,估计可以写一个7、8篇的系列了,另外我也发现很多博客都是理论为主,代码非常少,给人的感觉就是这件事我弄明白了,但具体如何干不知道,讲的似乎很难、很神秘,没有相应代码,让人望而生畏。所以本文还是偏工程一些,阅读本文的同学希望已经有了这些文本分类算法的理论基础。先说说我用的数据,约20万短文本,包含8个大类,分别为:餐饮、交通、购物、娱乐、居家等,每个大类约25000条数据,文本平均20个字左右,最短的文本仅有2个字。如下面所示:
全栈程序员站长
2022/09/06
5650
使用python语言编写常见的文本分类算法
Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)
项目连接:百度AIstudio直接fork我的项目就可以复现 Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)
汀丶人工智能
2022/12/21
8880
Paddlenlp之UIE分类模型【以情感倾向分析新闻分类为例】含智能标注方案)
基于机器学习的情感分析方法
上次课程我们介绍了基于情感词典的情感分析方法,本节课我们尝试基于机器学习的情感分析方法,以电影中文文本情感分析为例,最常见的就是对电影评论数据进行情感分类,如积极情感(positive)、消极情感(negative)等。而目前可以用来处理这类问题的机器学习模型有很多,如朴素贝叶斯、逻辑回归、SVM、CNN等等,本文采用深度学习TextCNN模型进行电影评论数据的情感分类,下面看其具体实现的过程。
用户7569543
2021/02/02
4.5K1
《PaddlePaddle从入门到炼丹》十二——自定义文本数据集分类
我们在第五章学习了循环神经网络,在第五章中我们使用循环神经网络实现了一个文本分类的模型,不过使用的数据集是PaddlePaddle自带的一个数据集,我们并没有了解到PaddlePaddle是如何使用读取文本数据集的,那么本章我们就来学习一下如何使用PaddlePaddle训练自己的文本数据集。我们将会从中文文本数据集的制作开始介绍,一步步讲解如何使用训练一个中文文本分类神经网络模型。
夜雨飘零
2020/05/01
1.5K0
推荐阅读
相关推荐
使用fasttext实现文本处理及文本预测
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验