NLP01词嵌入(基于动手学mxnet框架,这样的文章还有9篇,)

学了本文你能学到什么?仅供学习,如有疑问,请留言。。。

 

目录

 

随手单词

Word2vec小结

Word2vec知识补充

Word2vec2个分类之一CBOW (Continuous Bag-of-Words)

Word2vec2个分类之二Skip-gram

N-Gram模型知识链接

代码实战


 

随手单词



词嵌入(Word Embedding)
分布式向量(Distributional Vectors)
连续文字袋模型  Continuous Bag-of-Words Model
负采样(negative sampling)
神经语言模型(Neural Language Model)
循环神经网络(Recurrent Neural Networks)
神经概率语言模型(Neural Probabilistic Language Model,NPLM)
长短期记忆模型(Long Short Term Memory)
神经网络语言模型(Neural Network Language Model,NNLM)
NER:命名实体识别(Named Entity Recognition,简称NER)又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等
SRL:语义角色标注 (Semantic Role Labeling, SRL)是一种浅层的语义分析技术,标注句子中某些短语为给定谓词的论元 (语义角色) ,如施事、受事、时间和地点等。其能够对问答系统、信息抽取和机器翻译等应用产生推动作用。
POS tagging:词性标注(Part-of-Speech tagging 或POS tagging),又称词类标注或者简称标注,是指为分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程。
 

词嵌入(Word Embedding)或者分布式向量(Distributional Vectors)是将自然语言表示的单词转换为计算机能够理解的向量或矩阵形式的技术

Word2vec小结



词向量是用来表示词的向量。把词映射为实数域向量的技术也叫词嵌入。
word2vec包含跳字模型和连续词袋模型。跳字模型假设基于中心词来生成背景词。连续词袋模型假设基于背景词来生成中心词。
词向量是用来表示词的向量。把词映射为实数域向量的技术也叫词嵌入(word embedding)。
word2vec包含跳字模型(skip-gram)和连续词袋模型(continuous bag of words,CBOW)。
跳字模型假设基于中心词来生成背景词。连续词袋模型假设基于背景词来生成中心词。
 

Word2vec知识补充


由于任何两个不同词的 one-hot 向量的余弦相似度都为 0,多个不同词之间的相似度难以通过 one-hot 向量准确地体现出来。
Word2vec 工具的提出正是为了解决上面这个问题 [1]。它将每个词表示成一个定长的向量,并使得这些向量能较好地表达不同词之间的相似和类比关系。
Word2vec 工具包含了两个模型:跳字模型(skip-gram)[2] 和连续词袋模型(continuous bag of words,简称 CBOW)[3]

作者:肥了个大西瓜
链接:https://www.jianshu.com/p/9eab3894ae8a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


深入理解Word2vec
Word2vec有基于Hierarchical Softmax和基于Negative Sampling两种方式,从两种方式分别讲解了CBOW和Skip-gram的数学构建思路和过程,由于这两个模型是相反的过程,

 

Word2vec2个分类之一CBOW (Continuous Bag-of-Words)



补充:CBOW模型:
cbow,连续的词袋模型,就是将文本看成是一个一个单独的词,然后通过一个位置附近的词来推出这个位置可能的值。
cbow网络包括3层:输入层,投影层,输出层
同跳字模型不一样的一点在于,我们一般使用连续词袋模型的背景词向量作为词的表征向量。
CBOW的思想是取目标词w的上下文(前后相邻词)而不是仅之前的词作为预测前提,类似于共现矩阵的窗口,
不同于NLM的是,Context(w)的向量不再是前后连接,而是求和,我们记为,此外还将NLM的隐藏层去掉了。 当然最大的区别还是在输出层,
基于Hierarchical Softmax的CBOW输出层为一颗霍夫曼树,叶子节点为语料中的词汇,构建依据便是各词的出现频数;
基于Negative Sampling则是用随机负采样代替霍夫曼树的构建。

 


对于单词w,
基于Hierarchical Softmax将其频数用来构建霍夫曼树,正负样本标签取自结点左右编码;
基于Negative Sampling将其频数作为随机采样线段的子长度,正负样本标签取自从语料中随机取出的词是否为目标词,构造复杂度小于前者。

 

Word2vec2个分类之二Skip-gram

 

 Skip-gram是CBOW的相反操作,输入输出稍有不同。通过得到一个词,预测它周围词的概率。

在跳字模型中,每个词被表示成两个 d 维向量,用来计算条件概率。

//训练结束后,对于词典中的任一索引为 i的词,我们均得到该词作为中心词和背景词的两组词向量 vi和 ui。
在自然语言处理应用中,一般使用跳字模型的中心词向量作为词的表征向量。

 

N-Gram模型知识链接



哈夫曼树的构造     https://blog.csdn.net/shuangde800/article/details/7341289
自然语言处理词向量模型-word2vec    https://www.cnblogs.com/tianqizhi/p/9278790.html ci
词嵌人(word2vec) https://www.jianshu.com/p/9eab3894ae8a


代码实战

from gensim.models import word2vec

sentences = word2vec.Text8Corpus("C:/traindataw2v.txt")  # 加载语料
model = word2vec.Word2Vec(sentences,size=200)# 训练skip-gram模型; 默认window=5
#计算2词相似度/相关程度
y1 = model.similarity("")
#计算某个词相关词列表

"""
参数说明
sentences=None              #就是每一行每一行的句子,但是句子长度不要过大,简单的说就是上图的样子
  size=100
  alpha=0.025               #定义训练的向量的长度
  window=5                  #在一个句子中,当前词和预测词的最大距离
  min_count=5               #字典截断.,词频少于min_count次数的单词会被丢弃掉
  max_vocab_size=None       #词向量构建期间的RAM限制。如果所有不重复单词个数超过这个值,则就消除掉其中最不频繁的一个,None表示没有限制
  sample=1e-3               #高频词汇的随机负采样的配置阈值,默认为1e-3,范围是(0,1e-5)
  seed=1
  workers=3                 #设置多线程训练模型,机器的核数越多,训练越快
  min_alpha=0.0001
  sg=0                      #这个是训练时用的算法,当为0时采用的是CBOW算法,当为1时会采用skip-gram
  hs=0                      #如果为1则会采用hierarchica·softmax策略,Hierarchical Softmax是一种对输出层进行优化的策略,输出层从原始模型的利用softmax计算概率值改为了利用Huffman树计算概率值。如果设置为0(默认值),则负采样策略会被使用
  negative=5                #如果大于0,那就会采用负采样,此时该值的大小就表示有多少个“noise words”会被使用,通常设置在(5-20),默认是5,如果该值设置成0,那就表示不采用负采样
  cbow_mean=1               #在采用cbow模型时,此值如果是0,就会使用上下文词向量的和,如果是1(默认值),就会采用均值
  hashfxn=hash              #hash函数来初始化权重。默认使用python的hash函数
  iter=5                    #迭代次数,默认为5
  null_word=0       
  trim_rule=None            # 用于设置词汇表的整理规则,指定那些单词要留下,哪些要被删除。可以设置为None(min_count会被使用)或者一个接受(word, count, min_count)并返回utils.RULE_DISCARD,utils.RULE_KEEP或者utils.RULE_DEFAULT,这个设置只会用在构建词典的时候,不会成为模型的一部分
  sorted_vocab=1            #如果为1(defau·t),则在分配word index 的时候会先对单词基于频率降序排序。
  batch_words=MAX_WORDS_IN_BATCH            #每一批传递给每个线程单词的数量,默认为10000,如果超过该值,则会被截断
"""

 

你可能感兴趣的:(python深度学习)