Ubantu 系统下安装fasttext及重要函数

因为最近遇到了一个文本向量化的问题,所以接触了很多fasttext这个工具,原理什么的就不讲,网上实在是太多了.但是我在实验的过程中遇到了很多的问题,其中绝大多数都是安装fasttext问题,我也看到了很多博主说是fasttext是在windows系统上不太好用,我自己觉得确实不太好用,而且直接下的whl安装引用的方式也不太一样,这不是最麻烦的,最要命的是其中函数的参数都不一样.所以换成ubantu系统了.

先安装一下试试:

sudo pip install fasttext

import fasttest 不报错就成功了.

如果报错

error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

说明缺少C++的包

sudo apt-get install build-essential libssl-dev libffi-dev python-dev
sudo apt-get install python3.6-dev  
sudo pip install Cython
sudo pip install fasttext

这样就解决了问题,import fasttext.当然gensim.model的包中也有fasttext,可以调用,但是还是有点区别.

其次关于fasttext的数据格式是有限制的.

#__label__+类别+,+文本数据
__label__1 , Qeemat k lihaz sy behtreen hain yaar

源文件转化为该格式
df = pd.read_csv('train_ANSI.csv', usecols=['review', 'label'], encoding='utf-8')
    for i in range(len(df)):
    	dataTrans = open('sentence.txt', 'a', encoding='utf-8')
		dataTrans.write("__label__" + label + " , " + str(df.iloc[i, 0]) + '\n')
		dataTrans.close()

训练函数


classifier=fasttext.supervised('trainpath','modelpath',label_prefix='__label__')
#label_prefix='__label__',通过这个来分开训练数据中的label
#modelpath 指的是模型保存的路径
#trainpath是训练数据的路径

测试函数

lables=classifier.predict(texts)
#texts 是list格式的数据,并且这个函数只能每一行的输入

#对于多行数据的测试
with open('testData.txt','r',encoding='utf-8') as tD:
    tests = tD.readlines()
    # print(tests)
    for i in range(len(tests)):
        # print(tests[i])
        str1 = tests[i]
        list1 =[]
        list1.append(str1)
        s = [x.strip() for x in list1 if x.strip() != '']#去掉转换数据时产生的'\n'
        #print(s)
        lables = classifier.predict(s)
        print(lables)

以上都是有监督的学习方式,其实在fasttext中其主要存在四个部分

from .fasttext import skipgram
from .fasttext import cbow
from .fasttext import load_model
from .fasttext import supervised

我们可以通过前两个模型来无监督的生产词向量

#skipgram model
model=fasttext.skipgram('unsupervised_train_data.txt','model')
print(model.words)    #打印词向量

#cbow model
model=fasttext.cbow('unsupervised_train_data.txt','model')
print(model.words) 

skipgram与cbow两个模型区别和具体内容就不多赘述,网上很多.
fasttext最大的优点就是处理词语的速度特别的快,并且也能保持精度.

你可能感兴趣的:(算法)