深度学习中文NLP任务实战(一):中文词向量的训练

释放双眼,带上耳机,听听看~!

开篇

最近在做相似度检测的项目,由于是公司的实战项目,所以处理的都是中文,自己也算个小白,所以写一个入门的教程吧。这是第一篇,中文词向量的训练。

gensim训练词向量

首先我们为什么要自己训练词向量呢?为什么不直接使用别人训练好的词向量呢。原因也很简单,当我们处理特定领域的数据的时候,很多领域词在其他公共语料里面是没有的,这就必须要求我们能够训练自己的词向量,来处理特定领域的数据。

数据来源于蚂蚁金服的人工智能比赛,数据不是公开的,所以我不放出数据,有兴趣的可以去参加比赛。

数据大概是这样,下图所示是没有经过分词处理的

当然这样的数据是不能直接训练词向量的,首先我们要做的还是分词,这边采用的哈工大开源的pyltp,为了保证有些业务新词不会被错分,我还加如了业务新词词典lexicon,里面包括了花呗之类的词,因为pyltp会把花呗分词为花、呗。
下面放出我分词的函数代码,大家有什么疑问可以在我的博客下面留言


1
2
3
4
5
6
7
8
9
10
11
12
13
1def word_cut(sentence):
2    LTP_DATA_DIR = 'C:\\Users\\d84105613\\ltp_data'
3    cws_model_path = os.path.join(LTP_DATA_DIR, 'cws.model')
4    segmentor = Segmentor()  # 初始化实例
5    segmentor.load_with_lexicon(cws_model_path, 'lexicon')  # 加载模型
6    words = segmentor.segment(sentence)
7    segmentor.release()
8    words = list(words)
9    print(len(set(words)))
10    words = [c for c in words if c not in punctuation]
11    return ' '.join(words)
12
13

下面是我处理完的数据

到这里,我们就可以来训练我们的词向量了,我们直接使用gensim来训练,简单快捷。


1
2
3
4
5
1def word2vecTrain(text):
2    model = Word2Vec(LineSentence(text), size=300, window=5, min_count=5, workers=multiprocessing.cpu_count())
3    model.save('Word2VecModel.m')
4    model.wv.save_word2vec_format('Word2VecModel.vector', binary=False)
5

这里有两篇比较好的参考博客,关于训练词向量的
gensim 词向量

gensim 词向量

加载词向量


1
2
1model = KeyedVectors.load_word2vec_format('Word2VecModel.vector',binary=False)
2

给TA打赏
共{{data.count}}人
人已打赏
安全运维

基于spring boot和mongodb打造一套完整的权限架构(三)【抽象实现类和swagger的实现】

2021-12-11 11:36:11

安全运维

Ubuntu上NFS的安装配置

2021-12-19 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索