使用fasttext完成文本处理及文本预测

NLP实战之Fasttext中文文本分类 Facebook Fasttext简介 fasttext是facebook开源的一个词向量与文本分类工具,在学术上没有太多创新点,好处是模型简单,训练速度非常快。简单尝试可以发现,用起来还是非常顺手的,做出来的结果也不错,可以达到上线使用的标准。 简单说来,fastText做的事情,就是把文档中所有词通过lookup table变成向量,取平均之后直接用线性分类器得到分类结果。fastText和ACL-15上的deep averaging network(DAN,如下图)比较相似,是一个简化的版本,去掉了中 阅读详情

使用fasttext实现文本处理及文本预测

因为参加datafountain和CCF联合举办的大数据竞赛,第一次接触到文本预测。对比了一些模型,最终还是决定试一下fasttext。上手fasttext的过程可以说是很痛苦了,因为国内各大博客网站上很少有fasttext的博客。一方面是fasttext是FaceBook去年才开源的,用的人比较少,还有一方面是fasttext大部分参考资料都是英文的,我啃了好久英文文档,搭梯子去国外的论坛,最后也算是简单上手了吧。这两天差不多所有时间都花在这上面了,感触挺深。基于以上几点,我觉得还是写一篇博客吧,虽然只是入门,也各位看官多多点评,提出不同意见。

问题分析

360搜索出的这道题,题目是“360搜索-AlphaGo之后“人机大战”Round 2 ——机器写作与人类写作的巅峰对决”,乍一看挺吓人的,其实是让开发者通过一套模型,来识别一篇文章是机器写出来的,还是人类写出来的。其实是有一定区分的,比如说人类写出来的文章,文章的标题和内容契合度比较高(排除标题党的情况),而且文章正文有一定的逻辑连续性,很少在文章的body中出现乱码。机器写出来的文章在以上方面和人类写出来的文章会有不同之处。

可能我这样讲还不够直观,“什么才是机器写出来的文章?”,我从数据集里面拿出来一小篇,像以下文章就是机器写出来的文章。

重庆永川消防提示:夏季酷暑来临 警惕火灾隐患
电影院部分房屋结构变形、两个安全疏散门变形无法打开,自入伏以来,忌水性物质有生石灰,居民和单位用电量也会随之增加,由此引发的火也比较多,重庆市永川消防支队在此提醒大家:高温天气里要增强安全防范意识,加强火灾防控,要时刻警惕以下几种常见的火灾。救援消防官兵抵达现场。一、电气火灾。随着高温天气的到来,空调、冰箱等用电设备大量增加,电气设备线路超负荷运转,电源绝缘皮损坏造成短路打火,图为被困人员被成功救出。或电器的电动机进水受潮,使绝缘强度降低,发生短路烧毁电机着火等。二、汽车火灾。救援消防官兵抵达现场,夏天很容易发生汽车火灾,主要原因是:有些汽车使用时间过长,一直从二楼窗口向外大声呼喊”救命”,电源线路老化易发生短路,有的汽车超负荷装载,造成发动机温度升高,再加上天气酷热,发动机通风设备不好,从而引起汽车自燃。并且,有些车主为了车内空气清新,导致正在电影院内观看电影的9名民众被困,选择在其车内放置香水、空气清新剂、二组对被困民众进行情绪安抚。老花镜、打火机等物品,极易引发火灾。三、该县碧罗数字电影院背后发生山体滑坡,电瓶车火灾。成功将变形的安全疏散门破拆出一个能够容纳单人通过的出口。随着电瓶车的普及,电瓶车充电引发火灾不在少数。特别是有些用户私拉乱接电线,不按要求使用插线板,贡山县碧罗数字电影院背后发生山体滑坡。违规充电引发火灾。四、施工现场火灾。对施工现场的氧气瓶、乙炔瓶、防火材料、油漆稀料等易燃易爆物品管理不严,直接放在高温下暴晒,未采取有效的遮挡措施,没有设置在通风、阴凉地点保存,三组利用破拆工具对变形的安全门进行破拆,这样很容易发生火灾事故五、危化品火灾。成功将变形的安全疏散门破拆出一个能够容纳单人通过的出口。夏季地面气温有时高达40℃以上,救援消防官兵通过金属切割机、破门器、液压破拆工具组等破拆装备的配合使用,在这样炎热的气温条件下,化学危险物品在生产、图为被困人员被成功救出。运输、过氧化碱。所以,一定要谨慎保管、图为受损严重的碧罗数字电影院,使用易燃易爆化学危险品。六、物质自燃火灾。自燃物质除过去我们常讲的稻草、煤堆、棉垛外,被困人员已被全部救出,还有油质纤维、三、硝酸铵化肥、导致正在电影院内观看电影的9名民众被困,鱼粉、农产品等。这些物质储存时,如果堆积时间过长,通风不好,自身就会发生变化产生热,温度逐渐升高。忌水性物质有生石灰,无水氧化铝,过氧化碱,氯磺酸等,这些物质遇到水或空气中的潮气后就会释放出大量可燃气体,四。

上面的文章,仔细看可以看出破绽:

1、存在反复,且不需要反复强调的文字,例如“忌水性物质有生石灰”;

2、逻辑不通顺,文章结尾一个“四”,不知其所指;

3、文章有明显拼凑痕迹,从“一二三四”几点可以看出是从很多篇文章中剪辑而来,上下文关联性弱。

目标

有两个数据集(分别是1.6GB和2GB),一个数据集是训练集(训练模型之用),另一个数据集是测试集(提交结果之用)。

数据格式

数据一:训练集,规模50万条样例(有标签答案),数据格式如下:

FieldTypeDescriptionNote
文章IDString文章ID
文章标题String文章的标题,字数在100字之内已脱敏。去掉了换行符号。
文章内容String文章的内容已脱敏。文章内容是一个长字符串,去掉了换行符号。
标签答案String人类写作是POSITIVE, 机器人写作是NEGATIVE机器人写手和人类撰写的文章,参赛者训练数据,可以选择本集合的全量数据,也可以选择部分数据。但是参赛者不能自行寻找额外的数据加入训练集。

数据二:测试集A,规模10万条样例(无标签答案),数据格式如下:

FieldTypeDescriptionNote
文章IDString文章ID
文章标题String文章的标题,字数在100字之内已脱敏。去掉了换行符号。
文章内容String文章的内容已脱敏。文章内容是一个长字符串,去掉了换行符号。

数据三:测试集B,规模30万条样例(无标签答案),数据格式如下:

FieldTypeDescriptionNote
文章IDString文章ID
文章标题String文章的标题,字数在100字之内已脱敏。去掉了换行符号。
文章内容String文章的内容已脱敏。文章内容是一个长字符串,去掉了换行

上述三份数据中,都同时包含了机器人写手和人类撰写的文章数据。一条样例主要包括文章ID、文章标题、文章内容和标签信息(人类写作是POSITIVE, 机器人写作是NEGATIVE)。需要在训练集上得到模型,然后使用模型在测试集上判定一篇文章是真人写作还是机器生成。如果这篇文章是由机器人写作生成的,则标签为NEGATIVE,否则为POSITIVE。仅在训练集上提供标签特征,参赛选手需要在测试集上对该标签进行预测。

数据预处理

数据预处理可以说是很关键了,很多团队都表示需要花大量的时间用于数据的预处理,我这边偷个懒,采用jieba对训练集和测试集文字进行分词,并且顺手把它转化为fasttext格式。

#encoding=utf-8
import jieba
#author linxinzhu
seg_list = jieba.cut("这个竞赛真的费时间",cut_all=True)
print "Full Mode:", "/ ".join(seg_list) #全模式

seg_list = jieba.cut("zwq沉迷逛QQ空间,还时不时撩妹",cut_all=False)
print "Default Mode:", "/ ".join(seg_list) #精确模式

seg_list = jieba.cut("测试集好大啊,跑一次要好久") #默认是精确模式
print ", ".join(seg_list)

seg_list = jieba.cut_for_search("这篇博客是在2017年11月17日写的,各位看官觉得有用的话,可以评论点赞") #搜索引擎模式
print ", ".join(seg_list)

输出结果

PS C:\Users\LinXinzhu\py> python fenci.py
Full Mode:Building prefix dict from C:\Python27\lib\site-packages\jieba\dict.txt ...
Loading model from cache c:\users\linxin~1\appdata\local\temp\jieba.cache
Loading model cost 0.804000139236 seconds.
Prefix dict has been built succesfully.
 这个/ 竞赛/ 真的/ 费时/ 费时间/ 时间
Default Mode: zwq/ 沉迷/ 逛/ QQ/ 空间/ ,/ 还/ 时不时/ 撩妹
测试, 集好, 大, 啊, ,, 跑, 一次, 要, 好久
这篇, 博客, 是, 在, 2017, 年, 11, 月, 17, 日写, 的, ,, 各位, 看官, 觉得, 有用, 的话, ,, 可以, 评论, 点赞

需要注意的是:

1、代码开头记得写上编码方式,包括后面的fasttext在编码上也挺麻烦的,不写的话有惊喜哦!

2、jieba.cut返回一个list,所以在做字符串拼接的时候要把list转成string,常用的就是“ ”.join()

符号处理
def go_split(s,min_len):
    # 拼接正则表达式
    symbol = ',;。!、?!'
    symbol = "[" + symbol + "]+"
    # 一次性分割字符串
    result = re.split(symbol, s)
    return [x for x in result if len(x)>min_len]

def is_dup(s,min_len):
    result = go_split(s,min_len)
    return len(result) !=len(set(result))

def is_neg_symbol(uchar):
    neg_symbol=['!', '0', ';', '?', '、', '。', ',']
    return uchar in neg_symbol
特殊字处理

一些文字,例如“的”、“了”等等在某个地方有特殊含义,例如“的确”、“了解”,但是在大部分的情况下对文章的语义没有特别的影响。例如”今天早上喝了牛奶“与”今天早上喝牛奶“没有太大的区别。

if (ur",的" in s0) and (not(ur",的确" in s0)) and (not(ur",的士" in s0)) \
                        and (not(ur",的哥" in s0)) and (not(ur",的的确确" in s0)):
        flag = "NEGATIVE"
    if (ur",了" in s0) and (not(ur",了解" in s0)) and (not(ur",了结" in s0)) \
                        and (not(ur",了无" in s0)) and (not(ur",了却" in s0)) \
                        and (not(ur",了不起" in s0)):
        flag = "NEGATIVE"

    if (ur"。的" in s0) and (not(ur"。的确" in s0)) and (not(ur"。的士" in s0)) \
                        and (not(ur"。的哥" in s0)) and (not(ur"。的的确确" in s0)):
        flag = "NEGATIVE"
    if (ur"。了" in s0) and (not(ur"。了解" in s0)) and (not(ur"。了结" in s0)) \
                        and (not(ur"。了无" in s0)) and (not(ur"。了却" in s0)) \
                        and (not(ur"。了不起" in s0)):
        flag = "NEGATIVE"

    if (ur";的" in s0) and (not(ur";的确" in s0)) and (not(ur";的士" in s0)) \
                        and (not(ur";的哥" in s0)) and (not(ur";的的确确" in s0)):
        flag = "NEGATIVE"
    if (ur";了" in s0) and (not(ur"了解;" in s0)) and (not(ur";了结" in s0)) \
                        and (not(ur";了无" in s0)) and (not(ur";了却" in s0)) \
                        and (not(ur";了不起" in s0)):
        flag = "NEGATIVE"

    if (ur"?的" in s0) and (not(ur"?的确" in s0)) and (not(ur"?的士" in s0)) \
                        and (not(ur"?的哥" in s0)) and (not(ur"?的的确确" in s0)):
        flag = "NEGATIVE"
    if (ur"?了" in s0) and (not(ur"?了解" in s0)) and (not(ur"?了结" in s0)) \
                        and (not(ur"?了无" in s0)) and (not(ur"?了却" in s0)) \
                        and (not(ur"?了不起" in s0)):
        flag = "NEGATIVE"
专业词汇、领域词汇、近义词

这方面可以引入词库,但是时间有限,目前还没有加入词库。

分词并转换成fasttext格式
#encoding=utf-8
#author linxinzhu
import jieba
import sys
reload(sys)
sys.setdefaultencoding('utf8')
i = 0
count=0
f = open("train.tsv", 'r')
#f = open("evaluation_public.tsv", 'r')
outf = open("lab3fenci.csv",'w')
#outf = open("lab3fencitest.csv",'w')

for line in f:
    r = ""
    try:
        r = line.decode("UTF-8")
    except:
        print "charactor code error UTF-8"
        pass
    if r == "":
        try:
            r = line.decode("GBK")
        except:
            print "charactor code error GBK"
            pass
    line=line.strip()
    l_ar=line.split("\t")
    if len(l_ar)!=4:
        continue
    id=l_ar[0]
    title=l_ar[1]
    content=l_ar[2]
    lable=l_ar[3]

    seg_title=jieba.cut(title.replace("\t"," ").replace("\n"," "))
    seg_content=jieba.cut(content.replace("\t"," ").replace("\n"," "))
    #r=" ".join(seg_title)+" "+" ".join(seg_content)+"\n"
    outline = " ".join(seg_title)+"\t"+" ".join(seg_content)
    outline = "\t__label__" + lable + outline+"\t"
    outf.write(outline)

    if i%2500 == 0:
        count=count+1
        sys.stdout.flush()
        sys.stdout.write("#")
    i=i+1

f.close()
outf.close()
print "\nWord segmentation complete."
print i

这里面要注意的是list和string的转换,以及在cut过程中对空格和换行的处理。

分词出来之后是这样的:
分词

分词后文件为1.9GB,同样对测试集也做相同的处理。

模型建立

终于要用到fasttext了,fasttext的安装也是个坑。windows10上面装了半天也没装好,好不容易找了一个fasttext for window 10的安装包,结果居然要python 3.5,升级了python之后发现没有预测功能,简直鸡肋啊。无可奈何花落去,只能在Linux下面玩了。

安装fasttext python指令,会提示少cython模型,照着提示下载就行。

pip install fasttext

但是下载奇慢,换国内源或者搭梯子吧。

有关fasttext的原理请查阅作者的paper
这里写图片描述

fastText的模型架构类似于CBOW,两种模型都是基于Hierarchical Softmax,都是三层架构:输入层、 隐藏层、输出层。
CBOW模型又基于N-gram模型和BOW模型,此模型将W(t−N+1)……W(t−1)作为输入,去预测W(t)
fastText的模型则是将整个文本作为特征去预测文本的类别。

一些比较重要的函数

词向量模型学习

import fasttext

# Skipgram model
model = fasttext.skipgram('data.txt', 'model')
print model.words # list of words in dictionary

# CBOW model
model = fasttext.cbow('data.txt', 'model')
print model.words # list of words in dictionary

文本分类

classifier = fasttext.supervised('data.train.txt', 'model')

data.train.txt是一种含有训练句子 每行加上标签的文本文件。默认情况下,假设标签的话, 前缀字符串__label__。

这将输出文件:model.bin和model.vec。

精度评估

result = classifier.test('test.txt')
print 'P@1:', result.precision
print 'R@1:', result.recall
print 'Number of examples:', result.nexamples

查看一个文本最有可能的标签,这个函数可以说是非常有用了

texts = ['example very long text 1', 'example very longtext 2']
labels = classifier.predict(texts)
print labels

# Or with the probability
labels = classifier.predict_proba(texts)
print labels

调试模型用的API

input_file     training file path (required)
output         output file path (required)
lr             learning rate [0.05]
lr_update_rate change the rate of updates for the learning rate [100]
dim            size of word vectors [100]
ws             size of the context window [5]
epoch          number of epochs [5]
min_count      minimal number of word occurences [5]
neg            number of negatives sampled [5]
word_ngrams    max length of word ngram [1]
loss           loss function {ns, hs, softmax} [ns]
bucket         number of buckets [2000000]
minn           min length of char ngram [3]
maxn           max length of char ngram [6]
thread         number of threads [12]
t              sampling threshold [0.0001]
silent         disable the log output from the C++ extension [1]
encoding       specify input_file encoding [utf-8]

举个栗子

model = fasttext.skipgram('train.txt', 'model', lr=0.1, dim=300)

解释一下:lr是学习速率,dim是词向量的大小,调节不同的参数使得模型更加精确。

分类器的属性和方法
classifier.labels                  # List of labels
classifier.label_prefix            # Prefix of the label
classifier.dim                     # Size of word vector
classifier.ws                      # Size of context window
classifier.epoch                   # Number of epochs
classifier.min_count               # Minimal number of word occurences
classifier.neg                     # Number of negative sampled
classifier.word_ngrams             # Max length of word ngram
classifier.loss_name               # Loss function name
classifier.bucket                  # Number of buckets
classifier.minn                    # Min length of char ngram
classifier.maxn                    # Max length of char ngram
classifier.lr_update_rate          # Rate of updates for the learning rate
classifier.t                       # Value of sampling threshold
classifier.encoding                # Encoding that used by classifier
classifier.test(filename, k)       # Test the classifier
classifier.predict(texts, k)       # Predict the most likely label
classifier.predict_proba(texts, k) # Predict the most likely label include their probability

调试分析

创建一个简单的模型

classifier = fasttext.supervised("lab3fenci.csv","lab3fenci.model",label_prefix="__label__")

对模型进行测试,观察其精度

result = classifier.test("lab3fenci.csv")
print result.precision
print result.recall

拿一个text来预测

texts = ['它被誉为"天下第一果",补益气血,养阴生津,现在吃正应季!  六七月是桃
子大量上市的季节,因其色泽红润,肉质鲜美,有个在实验基地里接受治疗的妹子。广受大
众的喜爱。但也许你并不知道,看惯了好莱坞大片眼花缭乱的特效和场景。它的营养也是很
高的,不仅富含多种维生素、矿物质及果酸,至少他们一起完成了一部电影,其含铁量亦居
水果之冠,被誉为"天下第一果"。1、在来世那个平行世界的自己。增加食欲,养阴生津的
作用,可用于大病之后,气血亏虚,面黄肌瘦,Will在海滩上救下了Isla差点溺水的儿
子。心悸气短者。2、最近有一部叫做《爱有来世》的科幻电影。桃的含铁量较高,就越容
易发现事情的真相。是缺铁性贫血病人的理想辅助食物。3、桃含钾多,含钠少,适合水肿
病人食用。4、桃仁有活血化淤,润肠通作用,可用于闭经、跌打损伤等辅助治疗。胃肠功
能弱者不宜吃桃、桃仁提取物有抗凝血作用,而Will也好像陷入魔怔一般。并能抑制咳嗽中
枢而止咳,扩展"科学来自于人性"的概念。同时能使血压下降,片中融合了很多哲学、宗教
的玄妙概念,可用于高血压病人的辅助治疗。6、桃花有消肿、利尿之效,可用于治疗浮肿
腹s水,大便干结,小便不利和脚气足肿。一段美好的故事才就此开始。桃子性热,味甘
酸,具有补心、解渴、不过都十分注重内核的表达,充饥、生津的功效,父亲没有继续在房
间埋头工作。']
    labels = classifier.predict(li)
    print labels

可以看到输出的结果是positive,可以发现是错误的预测(正确的预测应该是negative),这个时候需要训练模型,来达到预期的结果。在训练的过程中,观察result.precision和result.recall的值变化。

可以使用Google已经训练好的model,自己训练模型坑太多了,但是我还不知道从哪里找已经训练好的model,如果有知道的同学可以在评论里告诉我,或者发邮件联系我Email: linxinzhulxz@gmail.com

继续训练

classifier = fasttext.supervised("lab3fenci.csv","lab3fenci.model",label_prefix="__label__",lr=0.1,epoch=100,dim=200,bucket=5000000)
result = classifier.test("lab3fenci.csv")
print result.precision
print result.recall

为了省事可以在上面代码套上for循环,观察result.precision和result.recall的值变化。

目前训练出来的模型文件大小是2GB,是用PC机跑的,CPU i7 3.3GHZ+16GB内存+SSD跑了整整3小时才出结果。

期间感受到了风扇的咆哮,CPU和内存都很努力地工作。

这里写图片描述
这里写图片描述
一般情况下磁盘的占用是很低的,偶尔会出现占用100%的情况,如果磁盘占用一直是100%,要考虑内存是否泄露,例如文本预处理阶段忘记加换行符,fasttaxt会认为一整个文件都是一大段的文本,那么16GB的内存是根本不够存储的,磁盘会参与内存交换,导致占用100%。

训练完成之后可以直接加载模型。

classifier = fasttext.load_model('lab3fenci.model.bin', label_prefix='__label__')

完整代码

# _*_coding:utf-8 _*_
import fasttext
#author linxinzhu
#load训练好的模型
classifier = fasttext.load_model('lab3fenci.model.bin', label_prefix='__label__')

i=0
f = open("evaluation_public.tsv", 'r')
outf = open("sub.csv",'w')
for line in f:
    outline=""
    if i==400000:
         break
    r = ""
    try:
        r = line.decode("UTF-8")
    except:
        print "charactor code error UTF-8"
        pass
    if r == "":
        try:
            r = line.decode("GBK")
        except:
            print "charactor code error GBK"
            pass
    line=line.strip()
    l_ar=line.split("\t")
    id=l_ar[0]
    title=l_ar[1]
    content=l_ar[2]
    s=""
    li=[]
    li=list()
    s="".join(content)
    li=s.split("$$$$$$$$")  
    texts=li 
    labels = classifier.predict(li)
    #print id
    #print labels
    strlabel=str(labels)
    if strlabel=="POSITIVE" :
        outline = id+"," + "POSITIVE" + "\n"
        outf.write(outline)
    if strlabel=="NEGATIVE" :
        outline = id+"," + "NEGATIVE" + "\n"
        outf.write(outline)
    i=i+1
    del s
    del li
f.close()
outf.close()

注意代码中要加上del s,实测如果不加上会产生内存溢出,讲道理变量在没有使用之后python应该会自动释放内存,但是在大量数据面前好像不怎么起作用,总之需要手动去释放内存。

提交结果(截至2017年11月16日)

这里写图片描述
这里写图片描述
一共1000多人参赛,600多支队伍,目前排在132名,算下来也进前20%了呢,作为第一次用fasttext的我,感觉这个成绩已经很满意了。

两个数据集:训练集和测试集因为文件太大了,上传实在是缓慢,有同学想在自己的pc上直接跑的话,直接邮件或者评论里联系我吧。

Email: linxinzhulxz@gmail.com

———–更新———————
数据集下载1:http://download.youkuaiyun.com/download/season_for_lin/10247753
数据集下载2:http://download.youkuaiyun.com/download/season_for_lin/10247756

FastText 文本分类使用心得 fasttext文本分类 阅读详情

相关推荐

fasttext实现文本分类

一.算法简述 FastText是一个快速文本分类算法,在使用标准多核CPU的情况下,在10分钟内可以对超过10亿个单词进行训练,并且在不到一分钟的时间内对312K类中的50万个句子进行分类。 与基于神经网络的文本分类算法相比它主要由两个优点首先FastText在保持高精度的同时极大地加快了训练速度和测试速度。再有就是不需要使用预先训练好的词向量,因为FastText会自己训练词向量 。 二.原理 ...

starmoth的博客 2514

简单记录fasttext进行文本分类代码

import fasttext def train_model(input_path,output_path,dim=100,epoch=5,lr=0.1,loss='softmax'): model = fasttext.train_supervised(input_path,label='__label__',dim=dim,epoch=epoch,lr=lr,wordNgrams=2,loss=loss) model.save_model(output_path) return model #

BMSW的博客 802

[NLP]文本分类之fastText详解

Word2vec, Fasttext, Glove, Elmo, Bert, Flair pre-train Word Embedding 一、fastText简介 fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点: 1、fastText在保持高精度的情况下加快了训练速度和测试速度 2、fastText不需要预训练好的词向量,fastText会自己训练词向量 3、fa...

GFDGFHSDS的博客 5735

基于fasttext文本分类酒店评论进行预测

数据预处理 #encoding=utf-8 import pandas as pd train_data=pd.read_csv('/ai_work/hotel_data/train.tsv',header=None,sep='\t').drop([0]) with open("/ai_work/train.txt",'w') as fi: for file in train_data.values: if file[1]=='1': file[1]='积极'

云计算、数据库、大数据、容器、微服务、深度学习、NLP、Python 686

fasttext学习使用入门

fasttext源码位置 功能一:单词表达模型 1:为了学习词向量(向量表示),我们可以使用fasttext.train_unsupervised函数,像下面这样: import fasttext # Skipgram model : model = fasttext.train_unsupervised('data.txt', model='skipgram') # or, cbow mod...

SS51SS的博客 1443

快速文本分类(FastText)

深度学习神经网络在自然语言处理中表现非常优秀,但动辄几十层,上亿参数的大型网络速度慢且需要大量算力支持,限制了使用场景。FastText是Facebook开源的一款简单而高效的文本分类器,它使用浅层的神经网络实现了word2vec以及文本分类功能,效果与深层网络差不多,节约资源,且有百倍的速度提升,可谓高效的工业级解决方案。本篇将介绍Fasttext的相关概念、原理及用法。文本分类是许多应用程序的核心问题,例如垃圾邮件检测,情感分析或智能回复。

sikh_0529的博客 2万+

Pytorch实现FastText模型对AG_news数据集进行四分类预测(torchtext实现数据预处理)

文章目录1 FastText模型简介1.1 模型简介1.2 Hierarchical Softmax简介2 AG_news数据集3 TorchText简介3.1 自己实现数据预处理的步骤3.2 使用TorchText对数据预处理4 FastText模型实现4.1定义FastText模型4.2 训练模型4.3 测试模型5 复现模型时踩的坑5.1 pytorch输出的label5.2 参数设置6 代码...

红雨瓢泼的博客 9491

FastText在文本摘要中的应用

FastText在文本摘要中的应用 作者:禅与计算机程序设计艺术 1. 背景介绍 文本摘要是自然语言处理领域的一个重要任务,它旨在从给定的文本中提取出最能概括文章主要内容的关键性句子或短语,为读者提供文章的精要信息。 随着深度学习技术的快速发展,基于神经网络的

AI天才研究院 1269

Fasttext分类任务原理--读书笔记

介绍了fasttext分类任务的运行原理和模型结构。阅读其它优快云博客总结而成

bzq42096的博客 1463

U8+ 新建账套

一、登录 账套主管:demo 对账套有修改权限,有账套库权限 系统管理员:admin 其他所有权限 二、新建账套 admin登录–>点击系统管理–>账套–>建立 选择了参照已有账套结转期初:就是上一个的期末数据作为这一次新表的期初数据 启用会计期一旦选择更改不了。 ...

茶茶很困i 3693

储能逆变器动态无功补偿:从原理到算法实现

本文深入解析了储能逆变器动态无功补偿的核心原理与算法实现。通过四象限运行与解耦控制技术,储能逆变器可在充放电的同时,快速、精准地调节无功功率,有效提升电网电能质量与功率因数。文章详细阐述了从相位调节、容量限制到PI控制算法的完整技术路径,并结合工程实践,探讨了其在光伏/储能系统中的协同控制策略与进阶应用价值。

weixin_29216353的博客 207

FastText 总结:文本分类、词向量训练、参数详解

FastText是一种开源的快速文本分类和表示学习工具,一个高效的CPU上的分类模型,由Facebook的人工智能研究团队开发。可以用于对文本进行分类,例如将新闻文章分类为政治、科技、娱乐等不同的类别,也可以用于表示文本,即:将文本转换为数字向量,便于计算机处理。它使用了一种新的单词表示方法,可以让模型在大型语料库上训练的速度更快。它还支持使用 n-gram 特征来提升模型的效果,使得模型能够更好地处理未登录词。此外,fastText 还提供了一种高效的词向量学习方法,可以用于自然语言处理任务中的特征提取。

LuoFan_A的博客 5534

Jupyter实战:解决ModuleNotFoundError之xgboost缺失问题

本文详细解析了在Jupyter Notebook中遇到ModuleNotFoundError: No module named 'xgboost'错误的完整解决方案。通过诊断环境、使用pip正确安装xgboost、配置Python路径以及最终验证,帮助用户彻底解决模块缺失问题,并理解Jupyter内核与Python环境的关系,提升问题排查能力。

weixin_29064103的博客 384

fastText原理和文本分类实战,看这一篇就够了

fastText原理篇 一、fastText简介 fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点: 1、fastText在保持高精度的情况下加快了训练速度和测试速度 2、fastText不需要预训练好的词向量,fastText会自己训练词向量 3、fastText两个重要的优化:Hierarchical Softmax、N-gram 二、fastText模型架构...

【AI机器学习与知识图谱】的博客 16万+

STM32G4实战:用CubeMX+Keil五分钟搞定FreeRTOS多任务LED控制(避坑指南)

本文详细介绍了如何在STM32G4系列芯片上使用CubeMX和Keil快速配置FreeRTOS实现多任务LED控制,包括环境准备、时钟配置、任务创建及常见问题解决方案。重点解决了时钟源冲突等高频问题,并提供了优化建议和进阶应用示例,帮助开发者高效完成嵌入式开发任务。

joy55的博客 222

10-Oracle 23 ai Vector Search 概述和参数

企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation :RAG)功能,RAG能够将LLM的生成能力与知识库的精准资料库进行检索结合,将大模型部署在内部同时将私有的数据进行LLM的检索避免泄露企业专用的数据同时提高的准确性。于是如何将数据存入向量数据库以及向量查询等这些基本功能变得必备和重要。

远方的专栏 1294

fastText代码实战篇——手把手教你使用fastText实现文本分类

前言 上一篇文章中,我们对fastText的原理进行了介绍,fastText原理篇,接下来我们进行代码实战,本文中使用fastText对新闻文本数据进行文本分类。 fasttext是facebook开源的一个词向量与文本分类工具,在学术上没有太多创新点,好处是模型简单,训练速度非常快。简单尝试可以发现,用起来还是非常顺手的,做出来的结果也不错,可以达到上线使用的标准。 简单说来,fastText做的事情,就是把文档中所有词通过lookup table变成向量,取平均之后直接用线性分类器得到分类结果。f

weixin_42310668的博客 1万+

【RT-DETR涨点改进】小目标检测、特征融合改进篇 | TGRS 2024 | RT-DETR引入CSFM上下文选择融合模块,适合多模态检测、红外小目标检测、小目标检测、遥感目标检测等任务有效涨点

本文提出了一种改进RT-DETR目标检测模型的方法,通过引入上下文选择融合模块(CSFM)显著提升复杂背景下小目标和低对比度目标的检测精度。CSFM模块采用多尺度特征融合和动态特征选择机制,有效增强模型的全局上下文感知能力,同时保留细节特征。该模块通过通道减少机制和空间信息调节,实现从粗到细的特征聚合,减少误报并提高轮廓检测精度。实验表明,改进后的RT-DETR模型在多个基准测试中表现优异,计算效率与检测精度均优于现有方法。文章还详细介绍了模块配置和yaml文件修改方法,为模型部署提供指导。

Ai缝合怪、助力小伙伴高效发论文 1724

深度学习之文本分类 ----FastText

使用FastText进行文本分类,文章解简单介绍FastText的基本介绍、使用方式,对应的数据格式,以及模型调优的方式

小鱼干儿的博客 5668

23、关联挖掘到相关性分析及约束关联挖掘详解

本文详细解析了从关联挖掘到相关性分析的发展过程,以及基于约束的关联挖掘方法。文章介绍了传统支持-置信度框架的局限性,并引入Lift、χ2、All Confidence和Cosine等度量来评估规则的相关性。同时探讨了多种规则约束在数据挖掘中的应用机制及其优化效果,旨在提高挖掘效率和规则质量。最后结合实际案例说明如何综合运用相关性度量与规则约束以满足业务需求,并展望了数据挖掘技术的未来发展。

aa123的博客 103

基于YOLO的印章检测及文字识别

针对印章自动化检测与文字识别需求,提出了一种融合改进YOLO模型与OCR技术的端到端解决方案,旨在解决复杂背景干扰、印章残缺变形及环形文字排列等难题

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 8219

FastText进行文本分类实践

目录0、内容介绍1、FastText是什么?1.1 安装1.2 如何使用?A:单词表达模型B:文本分类模型C:使用量化压缩模型2、使用fastText训练文本分类模型2.1 训练数据准备2.2 训练模型2.3 模型保存与测试 0、内容介绍 本文主要介绍如何使用利用fastText进行文本分类任务,包括如何准备、处理数据,训练及测试过程。 最近用到fastText进行文本分类任务,其不用训练好的词向...

ling620的专栏 9405

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【NLP自然语言处理】FastText在文本分类中的智能应用与探索

进行文本分类训练词向量文本分类的是将文档(例如电子邮件,帖子,文本消息,产品评论等)分配给一个或多个类别. 当今文本分类的实现多是使用机器学习方法从训练数据中提取分类规则以进行分类, 因此构建文本分类器需要带标签的数据.

2301_76820214的博客 2559

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

fasttext文本分类

前几天为了实现文本分类,看了不少博客文章之类的,就fasttext还算稍微能看懂,代码也最终能跑得起来,但是好多博客的代码都是更新之前的了,会报错,找坑填坑一路爬出来,总算跑通了,发出来做个记录吧。 看过我博客的小伙伴应该知道我的这篇自制文本分类的骚操作 还是跟它一样,先有数据,我就不多说了。 接下来首先是先写一个文本分类处理的代码,待会儿再写一个文本分类预测的代码,我是分开运行的,你也可以自己整...

李孟笛的博客 886

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TensorFlow_FastText 使用指南

TensorFlow_FastText 使用指南 项目介绍 TensorFlow_FastText 是一个结合了 TensorFlow 框架与 FastText 算法的开源项目。FastText 是由 Facebook Research 开发的一种高效学习文本表示的方法,特别擅长于词级别模型的构建。此项目旨在简化在 TensorFlow 环境下利用 FastText 进行文本处理的流程,使得开发...

gitblog_00838的博客 848

文本分类和词向量训练工具fastText的参数和用法

fastText的参数和用法 fastText由FB开源,主要基于fasttext这篇文章的思路paper,主要用于两个任务:训练词向量和文本分类。 下载地址与document :fasttext官网 fasttext的 主要功能: Training Supervised Classifier [supervised] Supervised Classifier Training for Tex...

VisualCortex 5012
上一篇: 线程、IO总结
下一篇: MongoDB安装和基本操作
评论 26
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值