python3 使用fasttext 进行文本分类(一定要用linux )

直接上代码 怎么用 ,具体原理 你参照其他人的

 

环境  python3   linux   pycharm

训练语料文件: 具体的文件这里我涉及到业务的问题没办法放出来   格式就是excel 如下图 后面用pandas 处理读取

python3 使用fasttext 进行文本分类(一定要用linux )_第1张图片

这个函数时处理成我们fasttext 能够接受的格式
def writeData(sentences,fileName):
    out=open(fileName,'w',encoding='utf-8')
    for sentence in sentences:
        out.write(sentence+"\n")
def pre_data_process():
    base_dir='./data/你的excel文件名'#data是我自己的文件名,你可以自己改自己的
    df = pd.read_excel(base_dir,encoding ="utf-8")
    df=df.dropna()    #去空行处理
    langue=df['语料'].values.tolist()
    intent=df['原始意图'].values.tolist()
    #分割语句  这个里面你可以用stopwords 进行停用词的处理,我这边没有处理 
    sentences=[]
    for i,j in zip(langue,intent):
        segs=jieba.lcut(str(i)) #分词
        sentences.append(" ".join(segs) + "\t" + "__label__" +j)
    
    random.shuffle(sentences) #乱序处理 必须要
    writeData(sentences,'train_data.txt')

前处理的文本格式变成了最终的模板类型如图:

python3 使用fasttext 进行文本分类(一定要用linux )_第2张图片

import fasttext

classifier=fasttext.supervised('train_data.txt','classifier.model',label_prefix='__label__',min_count=1,word_ngrams=2,bucket= 2000000,lr=0.1,epoch=100,dim=200)

这里 ‘train_data.txt’ 是我上面语料处理后的文件 具体格式见上图  ‘classifier.model’ 是你要生成模型的名称 

后面的参数你可以参照API:https://blog.csdn.net/qq_32023541/article/details/80845913

word_ngrams=2,bucket= 2000000  这个是一个坑 注意设置n-grams 时要有bucket  不然会报错

 

调用训练好的模型:

classifier = fasttext.load_model('./model/classifier.model.bin', label_prefix='__label__')
texts = ' '.join(jieba.lcut(text)) #这里我图方便 后面可以用hanlp 提高分词准确
texts = [texts]
labels_predict = classifier.predict_proba(texts,k=3)[0]# 预测输出结果为二维形式 [('请问', 0.998047), ('委屈', 1.95313e-08), ('倒萨啊', 1.95313e-08)]  输出的top3 的意图及top可能性

 django 做的web 接口如下:

python3 使用fasttext 进行文本分类(一定要用linux )_第3张图片

 

参照 blog :https://blog.csdn.net/john_bh/article/details/79268850#31-fasttext%E6%9C%89%E7%9B%91%E7%9D%A3%E5%AD%A6%E4%B9%A0%E5%88%86%E7%B1%BB

你可能感兴趣的:(python,nlp,fasttext)