Task6 简单神经网络

1. 文本表示:从one-hot到word2vec。

one-hot :个人理解为是有0和1两位数字组成的一个向量如果为1的标示此地方就代表一个词或者字。维度自己可以根据数据量的大小定义。

word2vec:是把词和字可以转换成向量的一个方法,要比one-hot好。word2vec可以标示两词语之间的相似性,one-hot就不行一个词就代表一个词。

1.1 词袋模型:离散、高维、稀疏。

   离散:无法衡量词向量之间的关系
    比如酒店、宾馆、旅社 三者都只在某一个固定的位置为 1 ,所以找不到三者的关系,各种度量(与或非、距离)都不合适,即太稀疏,很难捕捉到文本的含义。
高维:词表维度随着语料库增长膨胀,n-gram 序列随语料库膨胀更快。
数据稀疏: 数据都没有特征多,数据有 100 条,特征有 1000 个

1.2 分布式表示:连续、低维、稠密。word2vec词向量原理并实践,用来表示文本。

    

2. 走进FastText

2.1 FastText的原理。

   原理不是很懂:说一下区别吧

相似处:

     图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。

    都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。

不同处:

     模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用。

     模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容。

两者本质的不同,体现在 h-softmax的使用:

      Word2vec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax  也会生成一系列的向量,但最终都被抛弃,不会使用。

       fastText则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)

fastText是一个能用浅层网络取得和深度网络相媲美的精度,并且分类速度极快的算法。按照作者的说法“在标准的多核CPU上,能够训练10亿词级别语料库的词向量在10分钟之内,能够分类有着30万多类别的50多万句子在1分钟之内”。但是它也有自己的使用条件,它适合类别特别多的分类问题,如果类别比较少,容易过拟合。

2.2 利用FastText模型进行文本分类。 

# set params
dim=10
lr=0.005
epoch=1
min_count=1
word_ngrams=3
bucket=2000000
thread=4
silent=1
label_prefix='__label__'

# Train the classifier
classifier = ft.supervised(input_file, output, dim=dim, lr=lr, epoch=epoch,
    min_count=min_count, word_ngrams=word_ngrams, bucket=bucket,
    thread=thread, silent=silent, label_prefix=label_prefix)

    

猜你喜欢

转载自blog.csdn.net/cs123456789dn/article/details/88428918
今日推荐