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

开篇

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

gensim训练词向量

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

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

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

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

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

下面是我处理完的数据

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

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

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

gensim 词向量

加载词向量

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

猜你喜欢

转载自blog.csdn.net/ding_xiaofei/article/details/80957083