词向量的意思就是通过一个数字组成的向量来表示一个词,这个向量的构成可以有很多种。其中,比较简单的方式就是所谓的one-hot向量。
假设在一个语料集合中,一种有n个不同的词,则可以使用一个长度为n的向量,对于第i个词 ( i = 0... n − 1 ) (i=0...n-1) (i=0...n−1),向量index=i处值为1外,向量其他位置的值都为0,这样就可以唯一地通过一个 [ 0 , 0 , 1 , . . . , 0 , 0 ] [0,0,1,...,0,0] [0,0,1,...,0,0]形式的向量表示一个词。one-hot向量比较简单也容易理解,但是有很多问题。比如当加入新词时,整个向量的长度会改变,并且存在维度过高难以计算的问题,以及向量的表示方法很难体现两个词之间的关系。
sklearn实现one-hot encode
from sklearn import preprocessing
enc = preprocessing.OneHotEncoder() # 创建对象
enc.fit([[0,0,3],[1,1,0],[0,2,1],[1,0,2]]) # 拟合
array = enc.transform([[0,1,3]]).toarray() # 转化
print(array)
当今互联网迅猛发展,每天都在产生大量的文本、图片、语音和视频数据,要对这些数据进行处理并从中挖掘出有价值的信息,离不开NLP,其中统计语言模型 就是很重要的一环,它是所有NLP的基础,被广泛应用于语音识别、机器翻译、分词、词性标注和信息检索等任务。
2013年Google开源了一款直接计算低微词向量的工具----Word2Vec,不仅能够在百万级的词典亿级数据集上高效训练,而且能够很好的度量词与词之间的相似性。
对原始NNLM的改进:
word2vec两种训练方式:
word2vec两种优化方式:
所以说Word2vec一共可以有四种模型。具体参考Word2Vec
生成的是今年某狐算法大赛的100维的词向量,allcontent是分词后的数据
from gensim.models import Word2Vec
word2vec_dir = './vector/word2vec.model'
vector_size = 100
print('word2vec')
if not os.path.exists(word2vec_dir):
model = Word2Vec(all_content, size=vector_size, min_count=1, workers=20, iter=20, window=8)
model.save(word2vec_dir)
else:
model = Word2Vec.load(word2vec_dir)
word2vec中的数学原理详解
词向量(从one-hot到word2vec)
one-hot向量与word2vec