NLP实践五-----nn基础(fasttext实践)

文章目录

      • 简要原理
      • 代码实践

简要原理

fastText的两个任务是分类和训练词向量,传统的word2vec把语料库的每个单词当作原子的,为每个单词生成一个词向量,而fastText是对每个字符进行处理的,也就是字符级别的n_gram:参考:https://www.zhihu.com/search?type=content&q=fasttext
NLP实践五-----nn基础(fasttext实践)_第1张图片
上图表示fastText的模型架构.
fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。

序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。

fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。

fastText 模型架构和 Word2Vec 中的 CBOW 模型很类似。不同之处在于,fastText 预测标签,而 CBOW 模型预测中间词。

代码实践

使用参考:https://jepsonwong.github.io/2018/05/02/fastText/
https://github.com/salestock/fastText.py
https://blog.csdn.net/qq_32023541/article/details/80844036



"""
.txt 文件格式  :
__label__ word1 word2  
__label__ word1 word2  word3

"""

val=pd.read_csv(path_val)
test=pd.read_csv(path_test)




clf=ff.train_supervised('train.txt',label='__label__',epoch=30)
# 保存模型
clf.save_model('model.model')
#load model
clf=ff.load_model('model.model')
#predict ,预测结果,输入list,输出label,和prob,K表示输出最可能的几个
label,prob=clf.predict(list(train['content'].values),k=1)
print(label)

#直接进行评测,输入标准的文件获取的是(个数,准确率,召回率)
result=clf.test('val.txt')
print(result)

训练词向量:
参考文章:https://blog.csdn.net/sinat_26917383/article/details/83041424

from gensim.models import FastText
sentences = [["你", "是", "谁"], ["我", "是", "中国人"]]

model = FastText(sentences, #输入的数据list
                 size=4,#词向量的大小
                 window=3, #上下文窗口次数
                 min_count=1, #忽略小于此大小的单词 默认5
                 iter=10,    #epoch
                 min_n = 2 ,  #char n_gram的最小长度
                 max_n = 2,   #char n_gram 的最大长度
                 word_ngrams = 1  #如果为1,使用子单词(n-grams)信息丰富单词向量。如果是0,这就相当于Word2Vec
                 )
#字典
word_voc_dict=model.wv.vocab
print(word_voc_dict)
word_voc_list = model.wv.index2word
print(word_voc_list)
print(model['你']) # 词向量获得的方式
print(model.wv['你']) # 词向量获得的方式
print(model.wv.vectors)     #词向量组
print(model.wv.vectors_ngrams)   #基于单词的n-ngram的向量组
print(model.wv.num_ngram_vectors)   #n_ngram的数量

你可能感兴趣的:(nlp学习)