赞
踩
此篇文章的基础知识部分总结了一些别人的文章解释,环境为Windows10下的python3.5版本,需要的包为gensim。代码很简要,不足之处请说明。
词向量(word2vec)是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。
在自然语言处理(NLP)相关任务中,要将自然语言交给机器学习中的算法来处理,通常需要首先将语言数学化,因为机器不是人,机器只认数学符号。向量是人把自然界的东西抽象出来交给机器处理的东西,基本上可以说向量是人对机器输入的主要方式了。
词向量就是用来将语言中的词进行数学化的一种方式,顾名思义,词向量就是把一个词表示成一个向量。NLP 中最直观,也是到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。 在word2vec中则采用分布式表征,在向量维数比较大的情况下,每一个词都可以用元素的分布式权重来表示,因此,向量的每一维都表示一个特征向量,作用于所有的单词,而不是简单的元素和值之间的一一映射。
语言模型包括文法语言模型和统计语言模型。一般我们指的是统计语言模型。统计语言模型: 统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列S = 〈w1, · · · , wT 〉 ∈ Vn,统计语言模型赋予这个序列一个概率P(S),来衡量S 符合自然语言的语法和语义规则的置信度。用一句简单的话说,语言模型就是计算一个句子的概率大小。常见的统计语言模型有N元文法模型(N-gram Model),最常见的是unigram model、bigram model、trigram model等等。形式化讲,统计语言模型的作用是为一个长度为 m 的字符串确定一个概率分布 P(w1; w2; :::; wm),表示其存在的可能性,其中 w1 到 wm 依次表示这段文本中的各个词。本文所用到的语言模型为skip-gram,skip-gram模型的输入是一个单词wIwI,它的输出是wIwI的上下文wO,1,...,wO,CwO,1,...,wO,C,上下文的窗口大小为CC。
Hanlp分词的主要代码如下图:
实现代码如下:
- # -*- coding: utf-8 -*-
- import warnings
- warnings.filterwarnings(action='ignore', category=UserWarning, module='gensim')
- from gensim.models import word2vec
- import logging
-
- # 主程序
- logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
- sentences = word2vec.Text8Corpus(u"D:\wiki\语料.txt") # 加载语料
- n_dim=300
- # 训练skip-gram模型;
- model = word2vec.Word2Vec(sentences, size=n_dim, min_count=5,sg=1)
- # 计算两个词的相似度/相关程度
- y1 = model.similarity(u"陕西省", u"山西省")
- print(y1)
- print("--------")
- # 寻找对应关系
- print(u"计算机-智能,速度-")
- y3 = model.most_similar([u'智能', u'速度'], [u'计算机'], topn=3)
- for item in y3:
- print(item[0], item[1])

存储、加载模型可以在加载模型之后继续使用句子来进一步训练模型。存储、加载模型的方法如下:
通过本次实验,了解到神经网络在自然语言中的运用,通过将语言数学化,达到计算机可以识别的地步。向量是人把自然界的东西抽象出来交给机器处理的东西,基本上可以说向量是人对机器输入的主要方式了。在本次试验中用到word2vct工具来计算相似度和寻找对应关系组,Word2vec包换两种语言模型一个是词袋模型另一个是skip-gram模型,但是这里用python进行编程,python版本下只有skip-gram模型,所以本文通过skip-gram来输出词语的权重,即300维的词向量。在输入数据之前,要对数据进行分词处理并去除停用词。模型训练完毕后,保存模型以便后续的使用或者完善。此次试验,加深了我对词向量的理解和运用,对于计算相似度的方法有了新的认识。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。