自然语言处理( NLP )Subword Models

word2vec

一个人读书时,如果遇到了生僻的词,一般能根据上下文大概猜出生僻词的意思,而 Word2Vec 正是很好的捕捉了这种人类的行为。它的缺点是hicontext 很小,没有使用全局的cooccur,所以实际上对cooccur的利用很少

GloVe

词义相近的词对贡献次数多,词义差得比较远的词对共现次数比较少,但其实他们的区分度并不明显。相比于word2vec,因为golve更容易并行化,所以速度更快,达到67.1%的准确率,只需要花4h12m。

由于GloVe算法本身使用了全局信息,自然内存费的也就多一些,相比之下,word2vec在这方面节省了很多资源。

可以看出glove这个模型,有借鉴推荐系统中的FM(Factorization Machines)的思想,在推荐系统中,参数代表用户对特定商品的偏好,用一个偏移量来描述是合理的,但直接应用到词向量中,就不是很合理了。word2vec里是没有参数,所以会觉得word2vec效果好些,应用更加普及。

N-Gram

N-Gram是一种基于统计语言模型的算法。
其基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

模型基于这样的假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。

N-Gram的应用
常见有搜索引擎(Google或者Baidu)、或者输入法的猜想或者提示。在使用谷歌时,输入一个或几个词,搜索框通常会以下拉菜单的形式给出几个像下图一样的备选,这些备选其实是在猜想你想要搜索的那个词串。

再者,用输入法输入一个汉字的时候,输入法通常可以联系出一个完整的词,例如输入一个“刘”字,通常输入法会提示是否要输入的是“刘备”,这其实是以N-Gram模型为基础来实现的。
n-gram的n大小对性能的影响

  1. n更大的时候
    n: 对下一个词出现的约束性信息更多,更大的辨别力,但是更稀疏,并且n-gram的总数也更多,为 [公式] 个(V为词汇表的大小)
  2. n更小的时候
    在训练语料库中出现的次数更多,更可靠的统计结果,更高的可靠性 ,但是约束信息更少

fastText

fastText结合了自然语言处理和机器学习中最成功的理念。这些包括了使用词袋以及n-gram袋表征语句,还有使用子词(subword)信息,并通过隐藏表征在类别间共享信息。

fastText的架构和word2vec中的CBOW的架构类似,因为它们的作者都是Facebook的科学家Tomas Mikolov,而且确实fastText也算是word2vec所衍生出来的。
自然语言处理( NLP )Subword Models_第1张图片fastText模型架构:
其中x1,x2,…,xN−1,xNx1,x2,…,xN−1,xN表示一个文本中的n-gram向量,每个特征是词向量的平均值。这和前文中提到的cbow相似,cbow用上下文去预测中心词,而此处用全部的n-gram去预测指定类别。
自然语言处理( NLP )Subword Models_第2张图片fastText是一个能用浅层网络取得和深度网络相媲美的精度,并且分类速度极快的算法。按照作者的说法“在标准的多核CPU上,能够训练10亿词级别语料库的词向量在10分钟之内,能够分类有着30万多类别的50多万句子在1分钟之内”。但是它也有自己的使用条件,它适合类别特别多的分类问题,如果类别比较少,容易过拟合。

你可能感兴趣的:(自然语言处理( NLP )Subword Models)