因为最近遇到了一个文本向量化的问题,所以接触了很多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最大的优点就是处理词语的速度特别的快,并且也能保持精度.