word2vec

从word2vec到node2vec

三世轮回 提交于 2020-02-03 20:53:27
word2vec 1. 什么是word2vec 在自然语言处理任务(NLP)中,最细粒度是词语,所以处理NLP问题,首先要处理好词语。 由于所有自然语言中的词语,都是人类的抽象总结,是符号形式的。而对于数学模型,如果要建立词语到词性关系的映射,必须使用数值形式的输入。因此,需要把他们都嵌入到一个数学空间中,就叫词嵌入(word embedding),而word2vec就是词嵌入的一种。 大部分有监督机器学习模型都可以归结为: f(x) -> y 在NLP中,把x看作一个句子里的一个词语,y是这个词语的上下文词语,那么这里的f,便是NLP中经常出现的『语言模型』(language model)。这个模型的目的,便是判断(x,y)这个样本是否符合自然语言的法则。 word2vec便是来源于这种思想,但是它最终的目的不在于把f训练的完美,而是关心模型输出的模型参数,是否能够完整地向量化整个句子。 2. Skip-gram和CBOW模型 对于上面提到的语言模型 如果是用一个词语作为输入,预测其上下文,这个模型叫做『Skip-gram』模型。 如果是拿一个词语的上下文作为输入,预测这个词语本身,则是『CBOW』模型。 2.1. Skip-gram和CBOW的简单情形 一个例子。y是x的上下文,当y只取上下文中的一个词语时,语言模型变成: 用当前词x预测它的下一个词y

gensim加载词向量文件

♀尐吖头ヾ 提交于 2020-02-01 12:18:02
# -*- coding: utf-8 -*- # author: huihui # date: 2020/1/31 7:58 下午 ''' 根据语料训练词向量,并保存向量文件 ''' import os import sys import gensim os.reload(sys) sys.setdefaultencoding('utf-8') # 需要提前分词 input_file = "corp_seg.txt" sentences = gensim.models.word2vec.Text8Corpus(input_file) # 训练词向量 model = gensim.models.word2vec.Word2Vec(sentences, sg=1, size=100, window=5, min_count=1, negative=3, sample=0.001, hs=1, workers=40) # 保存词向量文件 model.save("corp_word2vec.model") model.wv.save_word2vec_format("corp_word2vec.txt") # 加载词向量文件 model = gensim.models.word2vec.Word2Vec.load("corp_word2vec.model") model = gensim

Word2Vec实践

拥有回忆 提交于 2020-01-31 16:29:36
Word2Vec实践 1 gensim word2vec API概述 2 模型训练 1、读取数据 2、数据预处理 3、模型训练 4、效果测试 3 与Fasttext对比 1 Fasttext简介 2 Fasttext模型训练 3 两者对比 之前了解过Word2Vec的原理,但是没有做过项目实践,这次得到一批专利数据,所以自己上手实践一下。 数据参考: https://github.com/newzhoujian/LCASPatentClassification 1 gensim word2vec API概述 在gensim中,word2vec 相关的API都在包gensim.models.word2vec中。和算法有关的参数都在类gensim.models.word2vec.Word2Vec中。算法需要注意的参数有: 1) sentences: 我们要分析的语料,可以是一个列表,或者从文件中遍历读出。后面我们会有从文件读出的例子。 2) size: 词向量的维度,默认值是100。这个维度的取值一般与我们的语料的大小相关,如果是不大的语料,比如小于100M的文本语料,则使用默认值一般就可以了。如果是超大的语料,建议增大维度。 3) window:即词向量上下文最大距离,这个参数在我们的算法原理篇中标记为c,window越大,则和某一词较远的词也会产生上下文关系。默认值为5

NLP笔记(word embedding)

喜夏-厌秋 提交于 2020-01-28 16:18:02
目录 word embedding 语言表示 语言模型 词的分布式表示 word2vec 以前的word嵌入方法在今天仍然很重要 Word2Vec等方法的局限 针对NLP中的一些基本概念和知识,做一些摘记 word embedding 语言表示 语言表示 研究的是如何把自然语言文本转化为可以被算法模型处理的数据 目前使用得比较多的语言表示方法被称为:“基于词的分布式表示(distributed representation)” Harris 在 1954 年提出的 分布假说( distributional hypothesis) 为这一设想提供了理论基础: 上下文相似的词,其语义也相似 。 Firth 在 1957 年对分布假说进行了进一步阐述和明确:词的语义由其上下文决定( a word is characterized by thecompany it keeps) 语言模型 常见的语言模型包括:N元文法模型(N-gram Model)、unigram model、bigram model、trigram model等等 词的分布式表示 词的分布式表示方法一般分为3类,分别是: 基于矩阵的分布式表示,基于聚类的分布式表示,基于神经网络的分布式表示 常见到的 Global Vector 模型( GloVe模型) 是一种对“词-词”矩阵进行分解从而得到词表示的方法,属于

word2vec - KeyError: “word X not in vocabulary”

大城市里の小女人 提交于 2020-01-25 08:22:27
问题 Using the Word2Vec implementation of the module gensim in order to construct word embeddings for the sentences I do have in a plain text file. Despite the word happy is defined in the vocabulary, getting the error KeyError: "word 'happy' not in vocabulary" . Tried to apply the given the answers to a similar question, but did not work. Hence, posted my own question. Here is the code: try: data = [] with open(TXT_PATH, 'r', encoding='utf-8') as txt_file: for line in txt_file: for part in line

UnicodeDecodeError error when loading word2vec

夙愿已清 提交于 2020-01-24 15:11:04
问题 Full Description I am starting to work with word embedding and found a great amount of information about it. I understand, this far, that I can train my own word vectors or use previously trained ones, such as Google's or Wikipedia's, which are available for the English language and aren't useful to me, since I am working with texts in Brazilian Portuguese . Therefore, I went on a hunt for pre-trained word vectors in Portuguese and I ended up finding Hirosan's List of Pretrained Word

关于意图识别的一些整理理解(一)

帅比萌擦擦* 提交于 2020-01-20 21:13:56
自然语言处理意图识别 自然语言处理一直是机器学习方面的一个难题,最近在参加竞赛时需要进行意图识别的相关探索学习,本文大致对我个人对意图识别的理解和做法进行一个简要的整理。 开始时思考的其实并不容易,因为作为大学生对机器学习和深度学习的底子比较薄,并且做过的跟机器学习有关的项目勉勉强强只能算是有一个,所以开始整理思路时就参考了《美团机器学习实践》这本书,确实获益匪浅,光笔记我就用typora打了40多页,确实值得大家去看一下。 从中我大概了解了整个自然语言处理的综合步骤以及相关做法,然后对意图识别这个名词有了一定的了解,它可以说是电商搜索和推荐的开门砖,从用户的搜索输入中提取最为关键的分类信息,即查找用户搜索的相关商品的门类,再从本门类(无论一级分类如食物、旅游或者二级分类面食类、肉类等精细分类)搜索或者执行推荐算法推荐相似度较高的产品时(当然这种推荐不包括如adaboost这样的相关性商品推荐),会大大减小搜索耗时以及推荐复杂度,很好的节省了系统开销,可以说是大型互联网公司搜索系统的必备杀器。 其中不妨有参考各路大神的代码,如有雷同,还请见谅。 这次意图识别为了同时提高准确率和召回率,我选择使用组合模型进行相应的处理,通过结合ElasticSearch的精确以及快速搜索功能以及综合word2vec词语相似度和LSTM模型两种方法来完成意图准确识别 本文使用的工具和包较多,大体罗列下

Gensim Doc2Vec Exception AttributeError: 'str' object has no attribute 'words'

≯℡__Kan透↙ 提交于 2020-01-17 07:49:08
问题 I am learning Doc2Vec model from gensim library and using it as follows: class MyTaggedDocument(object): def __init__(self, dirname): self.dirname = dirname def __iter__(self): for fname in os.listdir(self.dirname): with open(os.path.join(self.dirname, fname),encoding='utf-8') as fin: print(fname) for item_no, sentence in enumerate(fin): yield LabeledSentence([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no]) sentences =

word2vec——高效word特征提取

╄→尐↘猪︶ㄣ 提交于 2020-01-15 12:33:53
继上次分享了 经典统计语言模型 ,最近公众号中有很多做NLP朋友问到了关于word2vec的相关内容, 本文就在这里整理一下做以分享。 本文分为 概括word2vec 相关工作 模型结构 Count-based方法 vs. Directly predict 几部分,暂时没有加实验章节,但其实感觉word2vec一文中实验还是做了很多工作的,希望大家有空最好还是看一下~ 概括word2vec 要解决的问题: 在神经网络中学习将word映射成连续(高维)向量, 其实就是个词语特征求取。 特点: 1. 不同于之前的计算cooccurrence次数方法,减少计算量 2. 高效 3. 可以轻松将一个新句子/新词加入语料库 主要思想:神经网络语言模型可以用两步进行训练:1. 简单模型求取word vector; 在求取特征向量时,预测每个词周围的词作为cost 2. 在word vector之上搭建N-gram NNLM,以输出词语的概率为输出进行训练。 相关工作 在传统求取word的空间向量表征时, LSA 将词和文档映射到潜在语义空间,从而去除了原始向量空间中的一些“噪音”,但它无法保存词与词之间的linear regularities; LDA 是一个三层贝叶斯概率模型,包含词、主题和文档三层结构。文档到主题服从Dirichlet分布,主题到词服从多项式分布, 但是只要训练数据大了,

Calculate perplexity of word2vec model

牧云@^-^@ 提交于 2020-01-15 04:51:53
问题 I trained Gensim W2V model on 500K sentences (around 60K) words and I want to calculate the perplexity. What will be the best way to do so? for 60K words, how can I check what will be a proper amount of data? Thanks 回答1: If you want to calculate the perplexity, you have first to retrieve the loss. On the gensim.models.word2vec.Word2Vec constructor, pass the compute_loss=True parameter - this way, gensim will store the loss for you while training. Once trained, you can call the get_latest