word2vec的实践

本文介绍了word2vec的理论基础,并通过Python的gensim库进行实践操作,包括模型训练和向量表示。在遇到gensim库版本更新导致的API变化时,进行了适配调整。同时,讨论了如何处理不同长度的样本和空值问题。实验结果显示,word2vec在特征工程中可能不如TF-IDF有效,尤其是在大型数据集上。最后,提出了使用词袋模型和doc2vec作为进一步处理长文本的可能方案。
摘要由CSDN通过智能技术生成

一 序

理论部分,可以看之前 NLP学习笔记 36-word2vec

当然自己觉得整理的不够好,hanlp作者的一篇是结合代码分析的《word2vec原理推导与代码分析》

二  验证

整体流程

使用 gensim

这个就是最简单的,这里的数据集就是一个分词之后的。如果单纯试验,从网上找对应的数据集就好。

如果是自己的数据(比如原始的文本),那就需要分词处理后生成。

遇到的问题:我开始参照网上的通常写法:

word2vec.Word2Vec(sentences, size=200) 

Getting "__init__() got an unexpected keyword argument  'size'

size参数主要是用来向量的维度。新版本的API已经改名了。

model = word2vec.Word2Vec(cutWords_list,vector_size=100,window=5, min_count=1)

python的Gensim包升级版本后,里面很多调用方法已经发生了改变。几年前别人写的文章,你现在新安装的不一定好使。比如这个版本得加上wv才可以 。这是我的安装信息

Using legacy 'setup.py install' for smart-open, since package 'wheel' is not installed.

Installing collected packages: smart-open, gensim

    Running setup.py install for smart-open ... done

Successfully installed gensim-4.0.0 smart-open-4.2.0

效果:

某个词的向量:

同义词

比较词的相似度:

问题2 :特征工程

各个样本的长度不一,我们现在有了基于词的word2vec映射数据对应到训练数据,那么以句子或者段(我的测试数据对应场景通常在20字以下,就是问答的提问)改怎么办呢?

网上大佬们给出了各种方向,没有机器资源测试,我能用的只是低配的小mac来试验下.

大佬说的第一种就是使用bag of words的方法,第二种就是doc2vec。我还是先尝试用简单的词向量处理来试试。

用numpy方法计算

模型训练:LR

上面是2000条的数据,如果用2w条跑,

超参数C太大不好,容易过拟合。之前那篇 机器学习在医疗咨询分类的应用 ,可见使用了word2vec之后。准确率持平。但是没有TFIDF那么大稀疏的矩阵。

这种在百万级样本会体会的更加明显。

遇到的问题:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

这个是里面有空值。numpy怎么替换还不会。但是可以训练之前验证下。

上面的np.isnan()=true 就是有空值了。

****************************************

两个层面: 算法原理与工程化(主要是Python)都是入门,缺一不可。

只看别人的blog,尤其是自己不会的,不动手跑下代码是印象不深刻的。尤其是整理好的高质量的打标签数据集太重要了。

   

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值