查看原文
其他

NLP初学教程:word2vec实践

集智俱乐部 集智俱乐部 2018-12-21
小林的话对于之前从未接触NLP以及linux的小白来说,可能很简单的问题都是最终结果的障碍,所以大神不要看了。不管怎样坚持下去,总有解决的办法。
语料:
通常,在统计自然语言处理中实际上不可能观测到大规模的语言实例。所以,人们简单地用文本作为替代,并把文本中的上下文关系作为现实世界中语言的上下文关系的替代品。我们把一个文本集合称为语料库(Corpus),当有几个这样的文本集合的时候,我们称之为语料库集合(Corpora)。
word2vec介绍:
word2vec是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。word2vec是Google在2013年提出的一款开源工具,其是一个Deep Learning(深度学习)模型(实际上该模型层次较浅,严格上还不能算是深层模型,如果word2vec上层再套一层与具体应用相关的输出层,如Softmax,便更像是一个深层模型),它将词表征成实数值向量,采用CBOW(Continuous Bag-Of-Words Model,连续词袋模型)和Skip-Gram(Continuous Skip-GramModel)两种模型。
word2vec使用:
word2vec源码是linux下的c语言写的,如果要在windows下编译,需要用到Cygwin,其他的虚拟机安装linux系统可以自行尝试。Cygwin就是在windows平台上运行类Unix的模拟环境。安装需要半个小时左右,之后在Cygwin里面编译Word2vec,不需要改任何代码。

小林的话cygwin的安装,之前没有使用过,只是听说过看安装过虚拟机运行linux系统,所以从头开始啊,安装了多次,因为有些包没有加载

第一步

Linux环境
首先在windows下安装linux环境模拟器,推荐cygwin

下载地址:http://www.cygwin.com/install.html
(1)选择安装的路径
▲图1-1

(2)选择安装包的路径
▲图1-2

(3)第一次安装就选择Direct Connection吧
▲图1-3

(4)选择163镜像下载,速度比较快http://mirrors.163.com
▲图1-4

(5)因为word2vec需要linux环境,在安装时注意:因为默认安装下没有安装make命令工具(后面要用到),所以在安装时,选择package时,需要选择Devel与Utils模块,如下图所示:
▲图1-5

(6)后面一直点击确认安装就好了,安装之后,在桌面上出现这个图标:
▲图1-6

第二步

word2vec的下载与使用
(1)下载word2vec 下载地址,https://github.com/dav/word2vec
This tool provides an efficient implementation of the continuous bag-of-words and skip-gram architectures for computing vector representations of words. These representations can be subsequently used in many natural language processing applications and for further research.

下载之后是这样的(不包括,最后的那个word.txt):
▲图2-1
小林的话之前没有使用过cygwin以及linux相关的软件,所以直接在cygwin终端窗口make的时候总是出错。

(2)打开cygwin,切换到下载的这个word2vec文件下,进入./src文件夹(在Windows窗口看到的是下面的文件),然后在cygwin窗口输入make,回车:
▲图2-2-1
▲图2-2-2

make之后,会在bin文件中生成一些可执行文件,在windows窗口下可以看到:
▲图2-2-3
▲图2-2-4

(3)cd bin 进入bin文件夹之后,在cygwin窗口输入以下代码(因为要使用bin文件中的word2vec.exe)
代码:
time ./word2vec -train 2.txt -output 3.txt -cbow 1 -size 100 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 0 -iter 15
-train "data/2.txt" 表示在指定的语料库上训练模型,2.txt这个是要训练的语料库,对于中文来说是已经分词好,处理好的语料库关于分词在最后说明
-cbow 1 表示用cbow模型,设成0表示用skip-gram模型
-size 100 词向量的维度为100
-window 8 训练窗口的大小为8   即考虑一个单词的前八个和后八个单词-negative 25 -hs 0  是使用negative sample还是HS算法
-sample 1e-4 采用阈值
-threads 20 线程数
-binary 0 输出文件保存成非二进制 
-iter 15 迭代次数

第三步

关于训练的语料库以及相关的处理

本次要求的是训练中文的语料库,中文语料库涉及到分词的过程。首先第一次训练就使用小一点的文本看一下什么样的流程,后面再找好点的语料库。
第一次训练,推荐找一本1M左右的小说,txt文档,放到word文档,把标点替换成空格,分词可以使用ansj工具,把ansj的jar包导入java工程,然后可以创建下面的类(自己写的),首先读文件-按照行来处理,分词,写文件完成分词的过程。

代码:
public class Ansj {public static void main(String[] args) throws Exception {  String infilepath="D:\\1.txt";//源文件String outfilepath="D:\\2.txt";//分词之后的文件BufferedReader readfile = new BufferedReader (new InputStreamReader(new FileInputStream(infilepath),"GB2312"));BufferedWriter writefile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfilepath),"GB2312"));String line = "";while((line= readfile.readLine())!= null){  System.out.println(line);writefile.write(ToAnalysis.parse(line).toString());writefile.flush(); //刷新缓冲区的数据到文件       }  readfile.close();writefile.close();       System.out.println("分词结束");     }  

训练出来之后,可能会出现连续两个空格的情况,可以放到word里面进行替换,处理好。下面是我分词之后的结果。
席地而坐 在 这 繁华 忙碌 的 城市 下 丢掉 一切 本 不 该 有的 压力 自由 地 畅想 着 聊 着 小炎喝 着 啤酒 忽然 眼泪 止 不 住 地 流 他 趴 在 桌子 上 哭 周围 的 人 看 他 一眼 然后 继续 吃 着 聊 着 因为 在 大排档 吃 久 了 的 人 都 习惯 看到 陌生人 的 眼泪 了 他 叫 着 学 姐 的 名字 哭 着 嘶喊 着 他 打 掉 了 那 瓶 啤酒 啤酒 的 玻璃 碴儿 落 到 了 他 穿 短裤 的 腿 上 他 的 腿 破 了 可 是 他 继续 哭 着 他 没有 感觉 到 腿 还 流 着 血 只 是 回忆 往事 让 他 疼 得 难受 他 说 不要 离开 我 求 你 不要 离开 我 不要 说 我 是 小孩子 我 已经 长大 了 我 已经 长大 了 ! 我 的 眼泪 在 眼睛 里 打 转 因为 我 知道 他 在 这 两年 事业 最 好 的 时候 都 是 单身 他 哭 累 了 抬 起 头 我 看到 他 红红的 眼睛 他 说 我 能 打 个 电话 给 她 吗  我 点点头 他 拿 出 电话 熟练 地 拨 出 了 那 串 已经 背熟 了 的 号码 电话 那 头 接通 两 人 都 没有 说话 他 只 是 一直 在 哭 哭 了 很 久 然后 说 对不起 那时 我 是 个 孩子 此时此刻 他 就 这么 像 个 孩子 一样 眼泪 掉 到 了 皮鞋 上 鼻涕 流 到 了 西 装 上 小炎 在 大排档 哭 得 睡着 了 我 和 兄弟 抬 他 到 宾馆 忽然 他 的 电话 响 了 一串 没有 存储 姓名 的 号码 我 接 了 那 头 却 没有 声音 我 说 我 是 尚龙 那 边 说 尚龙 告诉 他 让 他 好 好 的 幸福 点 第二天 起床 日子 还 会 像 原来 一样 继续 过 小炎 还 会 踏 上 回 美国 的 路 我 也 还 会 继续 干 自己 该 干 的 事 其实 我们 都 一样 无论 过去 多 美好 故事 多 动听 我们 都 要 回 到 现实 都 要 跟 青春 说 再 见 我们 嘲笑 小炎 昨天 哭 得 像 狗 一样 追问 两 人 之间 到底 发生 了 什么 他 不好意思 地 说 我 有 那么 失态 吗  我 说 真 后悔 没 带 个 dv 给 你 小子 都 拍 下 来 小炎 笑 着 说 至少 比 你 个 单身 狗 强 就 这样 他 也 学会 了 开玩笑 他 临走 前 我们 又 路过 了 那 家 大排档 小炎 愣 了 一会儿 说 我 想 买 几串 肉 我们 一起 吃 我 笑 着 说 你 放心 剩下 的 我 打包 回去 友情 岁月 有人 说 朋友 平时 不 用 多 联系 需要 的 时候 打 个 电话 他 总 在 身边 而 我 认为 朋友 不仅 需要 的 时候 在 身边 平时 偶尔 也 要 联系 联系 无论 距离 多 远 心 总 在 彼此 身边 就 好 可 感动 的 是 断 了 好 久 的 朋友 忽然 在 夜深人静 的 时候 打 了 一个 电话 然后 哭 着 说 了 一句 对不起 这个 故事 我 酝酿 了 五年 不 知道 如何 收 笔 终于 因为 那 个 电话 让 彼此 内心 深处 的 结 释然 这 结局 或许 不 圆满 但 不 完美 却 是 永恒 青春 的 呼啸 岁月 的 纠缠 就 让 我们 随着 成长 一同 默默 地 缅怀 吧 猴子 跟 我 是 高中 同学 准确 地 说 我们 不 算 同学 他 只是 我 的 朋友 因为 学习 不好 他 没 考上 高中 去 了 隔壁 的 中专 那时 古惑仔 风靡一时 隔壁 中专 的 学生 总是 把 头发 留 得 长长的 成群结队 地 在 我们 学校 门口 晃悠 他们 对 着 女生 吹 口哨 甚至 把 男生 拦 在 一个 角落 “ 谈谈 ” 接着 拉拉扯扯 久而久之 大家 一 听到 他们 学校 的 人 又 来 了 都 会 绕道 而 走 我 和 猴子 的 关系 很 好 高中 那 几年 他 教 我 社会 上 的 东西 我 教 他 学习 那时 我 无意 混迹 于 江湖 只 想 考 个 不错 的 大学 然后 安安静静 地 过 一生 可 青春 不 给 我 安静 的 时光 一天 下午 我 ......    

分词出来之后的这个文件是对应是2.txt文件,不过名字可以自己另外定义。    
在cygwin窗口输入:time ./word2vec -train 2.txt-output 3.txt -cbow 1 -size 100 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 0 -iter 15
可以在word2vec/bin文件夹中看到训练出来的文件3.txt,如果之前选择的binary 0,这个文件可以直接在Windows下打开看到,看到的是下面的结果或者通过vi 2.txt在Linux环境下看到。
▲图:3-1

如果是乱码,可以使用notepad进行格式的转换
▲图:3-2


排版:澈水清泉

校对:澈水清泉

终审:Jake




让苹果砸得更猛烈些吧!!!



集智著作:《走近2050:注意力、互联网与人工智能》





←识别二维码购买~


随着人工智能程序AlphaGo以4:1的大比分战胜人类围棋世界冠军李世石,机器将征服人类的担忧正在甚嚣尘上。《走近2050:注意力、互联网与人工智能》则为我们描绘了一幅人机和谐共生、协同演化的全新场景。在看得见的未来,人类将越来越多地沉浸于五花八门的虚拟世界以获取各式体验,与此同时,我们将心甘情愿地将自己的注意力源源不断地输入给机器世界以促使它们进化。


本书从注意力的角度解读了包括互联网、人工智能、众包、人类计算、计算机游戏、虚拟现实在内的技术领域及其对社会生活的影响,还创造性地提出了一系列全新的概念:占意理论、图灵机-参与者模型、“游戏+”时代、意本家、自动游戏设计、自动化创业、占意通货、许愿树,等等。所有这些将为我们理解技术与人类的关系、透视人类社会的未来发展和走向提供深刻的洞察。







长按识别二维码,关注集智Club微信,

让我们离科学探索更近一步。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存