赞
踩
记录一下自己使用gensim的word2vec训练中文字向量的实验过程,环境:windows10+python 3.6
1.准备工作
pip install gensim
我用这个方法过程中出现了一些错误,通过输入以下命令得以解决
conda install mingw libpython
pip uninstall gensim
conda install gensim
conda install mingw libpython
若安装过程中出现提示错误“无Cython模块”,需要输入命令
pip install Cython
pip install jieba
2.训练中文数据语料
从百度上随便下载的一个夏至未至.txt小说,链接:https://pan.baidu.com/s/1Fz5pS7_58UxKVpttPbLxPA 提取码:eu8t
3.预料预处理–jieba分词
import jieba import jieba.analyse #from gensim.test.utils import common_texts, get_tmpfile #from gensim.models import word2vec jieba.suggest_freq('傅小司', True) jieba.suggest_freq('立夏', True) jieba.suggest_freq('陆之昂', True) jieba.suggest_freq('遇见', True) jieba.suggest_freq('程七七', True) jieba.suggest_freq('段桥', True) jieba.suggest_freq('李嫣然', True) jieba.suggest_freq('青田', True) jieba.suggest_freq('颜末', True) jieba.suggest_freq('伍凯', True) jieba.suggest_freq('罗旭', True) jieba.suggest_freq('杰迅', True) with open('./夏至未至.txt',encoding='utf-8') as f: document = f.read() # document_decode = document.decode('GBK') document_cut = jieba.cut(document) # print ' '.join(jieba_cut) //如果打印结果,则分词效果消失,后面的result无法显示 result = ' '.join(document_cut) with open('./夏至未至_segment.txt', 'w',encoding="utf-8") as f2: f2.write(result)
将分词之后的语料结果保存在“夏至未至_segment.txt”中,部分结果如下:
_ 分节 阅读 _ 1 1995 - 2005 夏至 未至 》 序言 : 离 夏天 最远 的 地方 我们 所 看见 的 世界 — — 香 樟树 是 流动 的 绿色 , 阳光 在 午后 变得 透明 , 蜿蜒 向 所有 它 可以 到达 的 地方 , 不远处 的 公交车站 传来 繁忙 的 声响 , 因为 瞌睡 而 睡着 的 人 , 投下 一 颤 一 颤 的 影子 , 蛛网 在 墙角 隐隐约约 。 空气 里 绷着 平缓 而 舒畅 的 节奏 , 像是 永远 停 在 了 这 一点 , 以至于 完全 不用 考虑 它 的 将来 会 演变 出 怎样 的 走向 。 我们 所 看见 的 这个 世界 , 如果 没有 遭遇 时间 的 裁量 , 如果 没有 遇见 脱轨 的 速度 , 如果 没有 被 点燃 怠尽 , 最后 如同 一 截 掉落 的 烟灰 , 吹散 在 空气 里 , 状若 无物 … … 那么 , 也许 它 将 永远 带上 香 樟树 凛冽 的 清香 , 以 一个 完美 的 截面 , 停留 在 这个 离 夏天 最近 的 地方 。 四维 带来 的 这 一本 《 1995 - 2005 夏至 未至 》 , 是 将 我们 送到 了 哪个 季节 , 在 那里 葬 着 怎样 的 脚印 , 遗落 了 怎样 的 琴音 , 让 我们 要 想 , 要说 , 要 形容 , 却 总 也 找 不到 合适 的 思路 。 只有 深 烙 在 大脑皮层 下 的 那些 美好 , 带上 花瓣 的 脉络 , 以 仿佛 再也不会 遭遇 冬天 般的 骄傲 , 将 我们 迷惑 进 了 这 一 整个 消失 了 季节 的 迷局 。 他 让 出现 在 我们 记忆 中 的 夏天 , 在 翠绿 墨绿 草绿 中 渐变 , 他 让 空气 里 膨胀 着 温暖 的 阳光 和 风信子 的 碎屑 , 有 谁 走来 轻轻 一 挥手 , 仿佛 能够 带走 些微 的 香气 , 他 让 每个 年轻 的 生命 都 在 这里 舒展 着 自己 无暇 的 身体 , 压住 哪片 绿草 的 地方 , 觉得 痒痒 起来 。 浅川 的 草 , 也许 没有 其他 地方 四季 常绿 的 名贵 , 可 它们 又会在 每年 夏天 来临 的 时候 变成 覆盖 了 整个 城市 的 音符 。 立夏 在 这里 走过 了 。 傅小司 夹 着 画板 看 女生 怎样 像 一艘 白色 的 小船 从 绿色 的 湖面 中 划开 长长的 一条线 , 他 的 眼神 在 无意识 中 温柔 一片 。 陆之昂 躺 在 他 脚边 , 嘴里 咬 着 半根 小草 茎 , 微微 笑 着 , 阳光 太 猛烈 的 关系 , 皱出 立体 的 眉眼 。 这 就是 故事 里 的 某 一天 , 轻描淡写 的 一天 而已 。 傅小司 和 陆之昂 的 继续 言语 攻击 , 立夏 拉着 遇见 的 手 说 我们 去 买 饮料 喝 好不好 。 仿佛 在 这个 被 青白色 软壳 包裹 的 世界 中 , 可以 彻底 相信 它 永远 不会 被 孵化 , 永远 可以 为 我们 描摹 着 这样 浪漫 而 温暖 的 细节 , 在 安静 的 背景 乐中 , 成为 一首 绵长 的 抒情曲 。 四维 将 大段 笔墨 用来 描写 这样 的 时光 , 其中 虽 伴有 轻快 的 节奏 , 却 只是 调剂 在 一出 浪漫 而 缓慢 的 底音 上 , 在 这里 我们 可以 亲眼目睹 那些 男生女生 是 怎样 一步步 地 从 他们 逐渐 清晰 的 意识 中 发现 了 彼此 的 存在 , 是 怎样 凭借 自己 的 年少 享受 了 谁 也 无法 享受 的 真实 。 仿佛 落 在 画室 里 、 走廊 上 、 楼梯口 、 学校 的 香 樟树下 的 所有 秘密 , 最后 都 能 串 成行 , 串成 完整 的 一份 心绪 。 他 让 每个 女生 的 脸红 都 带上 了 浪漫 的 原因 , 也 使 每个 男生 的 决心 都 下 得 铿锵有力 。 你 可以 看见 的 吧 , 那些 发生 在 他们 或者 发生 在 自己 身边 的 事情 怎么 被 书写 成 我们 心里 一个 暗暗 惊讶 的 呼喊 。 那些 在 文字 的 润饰 下 , 散发 了 别样 的 光彩 的 少年 们 , 是 怎样 以 他们 的 眼神 , 想要 找到 更远 的 将来 , 自己 的 路 。 这是 一段 长时间 的 陶醉 。 好象 什么 都 要 以 最 完美 的 姿态 展现 在 你 面前 , 每个 角色 的 性格 各异 , 以及 他们 的 所作所为 , 综合 在 一起 后 , 产生 了 这样 一段 青春 。 虽然 是 最 简单 的 暗恋 , 是 最 平常 的 校园 , 是 最 普遍 的 少女 情怀 , 却 又 因为 四维 的 述说 , 每个 人物 尽心 的 演绎 , 在 我们 走 到 某个 拐角 的 时候 突然 被 抓住 , 随后 动弹不得 地 在 故事 的 美丽 下 被 冲得 不成 原形 。 好似 他 愿意 为 我们 营造 这样 美好 的 局面 , 陆之昂 与 傅小司 两种 不同 类型 的 男生 又 同样 吸引 人 , 遇见 的 登场 就让 人 印象 深刻 , 随后 她 的 各种 所作所为 更让人 感觉 她 的 倔强 , 天在 地 在 下 , 中间 只有 她 一般 的 倔强 , 立夏 的 如同 所有 温柔 善良 的 小姑娘 一样 , 呵出 体内 的 热气 让 人 感觉 她 的 温暖 , 手拉着 朋友 摇 啊 摇 的 , 不时 掉 一掉 眼泪 。 甚至 连 短短 几场 出现 的 青田 , 也 会 用 一两句 说话 也 某个 角度 下 的 特写 让 人 揪心 。 这些 在 故事 中 附首 可见 的 塑造 笔墨 , 让 《 1995 - 2005 夏至 未至 》 给 以 了 我们 一种 欣喜 而 难以自拔 的 幻觉 。 好似 天堂 和 梦幻 原来 触手可及 , 云层 上 的 鼓音 可以 落向 地面 。 有些 段落 该 怎么 说 。 透着 初夏 腥辣 的 热气 , 附和 着 知 了 叫声 而 变得 无比 漫长 的 下午 , 立夏 在 傅小司 的 图画 中 寻找 她 可以 想象 的 美好 , 此刻 的 幸福感 几乎 可以 蔓延到 每个 人 身上 , 我们 也 都 乐意 相信 这个 冷淡 干净 双眼 常常 落 在 远方 的 男生 , 会 真的 和 这个 普通 而 可爱 的 女孩子 , 以 他们 的 青春 为基 , 留下 幸福 的 纹理 。 直到 命运 的 齿轮 在 转动 中 终于 倾覆 了 原先 的 大厦 , 让 他们 从 柔软 无害 的 生命 层中 直接 走进 人世 的 第二层 , 才 发现 “ 未来 ” 并 不是 能 对付 一切 的 挡箭牌 , 它 是 个 巨大 的 重量 , 牵着 人 悠悠 地 往下坠 。 而 想要 往 哪里 , 想要 和 谁 去 , 都 由不得 自己 来 决定 。 伸出 去 的 手 , 握到 荆棘 的 刺 , 干脆利落 地 插进 皮肤 。 我 不 知道 该 怎么 去 描述 那些 离开 了 校园 的 他们 , 好似 原先 听见 了 天堂 的 音鼓 , 却 只是 缓缓 飘落 向 人间 的 小小 馈赠 , 一场 雪 , 下 了 , 积了 , 最后 化 了 , 人间 依然 是 人间 。 踩下去 的 脚印 清晰 记录 你 一路 迷失 的 过程 。 原来 青春 就是 这样 脆弱 到 无法 挽留 的 东西 。 四维 终究 没有 放过 他们 , 更 没有 放过 我们 。 他 让 每个 人物 都 在 命运 的 潮水 中 偏离 了 自己 的 航道 , 而 我们 只是 以 无力 的 观看 者 在 一边 , 听见 自己 的 叹息声 , 却 还是 走过 辛酸 的 一站 , 走过 无奈 的 一站 , 走过 悲伤 的 一站 。 随之 发现自己 竟 早已 在精神上 被 施与 了 苦刑 , 灵魂 也 好似 受过 了 鞭笞 , 而 回头 看看 过去 , 那些 在 过去 的 少年 们 的 身影 , 仿佛 还 在 浅川 的 山坡 上 睡 得 像 个 小 动物 。 光线 饱满 地 停留 在 她们 的 额头 上 。 整个 《 1995 - 2005 夏至 未至 》 的 时间跨度 达到 十年 , 十年间 可以 发生 的 事 有 太 多 了 , 让 年轻 失去 它们 翠绿色 的 汁液 , 让 一 整个 城市 又 换 了 新 的 流行 , 让 我们 有太多 懊悔 难以 追及 , 让 每个 从 校园 中 走出 的 人 忘记 他 当时 那张 纯白 的 脸 。 而 四维 给予 立夏 他们 的 , 同样 是 一段 又 一段 大起 大伏 的 命运 。 既有 告白 的 暖意 融人 , 也 有 噩耗 的 晴天霹雳 , 在 我们 几乎 还 来不及 细细 琢磨 的 时刻 , 新 的 变动 又 来 了 , 还 来不及 治疗 旧 伤口 , 新 的 伤痕 又 添加 了 , 好似 在 飓风 中 丢掉 呼吸 , 整个 人 被 逐渐 剥夺走 了 小时候 的 信仰 。 四维 用 这样 明显 的 剧烈 对比 , 把 故事 放在 飞速 旋转 的 两片 风车 中间 , 气流 交错 , 小小的 纸片 进去 后变 被 撕成 碎片 。 当 我们 还 没有 做好 完全 的 心理准备 , 我们 还 停留 在 那样 脉脉 的 时光 上 , 以为 从此 都 可以 用 相同 的 幸福 来 期盼 随后 , 当 我们 看着 傅小司 坐飞机 去 了 上海 , 他 和 立夏 各分 了 一只 耳机 , 那时 我们 的 微笑 还 停留 在 嘴角 , 心里 的 潮水 还 没有 退去 , 却 浑然不知 随后 他们 将 面临 的 各种 不幸 , 究竟 有 多么 庞 大而 无法
4.word2vec训练词向量
# -*- coding: utf-8 -*- # import jieba # import jieba.analyse from gensim.test.utils import common_texts, get_tmpfile from gensim.models import word2vec # # jieba.suggest_freq('傅小司', True) # jieba.suggest_freq('立夏', True) # jieba.suggest_freq('陆之昂', True) # jieba.suggest_freq('遇见', True) # jieba.suggest_freq('程七七', True) # jieba.suggest_freq('段桥', True) # jieba.suggest_freq('李嫣然', True) # jieba.suggest_freq('青田', True) # jieba.suggest_freq('颜末', True) # jieba.suggest_freq('伍凯', True) # jieba.suggest_freq('罗旭', True) # jieba.suggest_freq('杰迅', True) # # with open('./夏至未至.txt',encoding='utf-8') as f: # document = f.read() # # # document_decode = document.decode('GBK') # # document_cut = jieba.cut(document) # # print ' '.join(jieba_cut) //如果打印结果,则分词效果消失,后面的result无法显示 # result = ' '.join(document_cut) # with open('./夏至未至_segment.txt', 'w',encoding="utf-8") as f2: # f2.write(result) #加载语料 sentences = word2vec.LineSentence('./夏至未至_segment.txt') #训练语料 path = get_tmpfile("word2vec.model") #创建临时文件 model = word2vec.Word2Vec(sentences,hs=1,min_count=1,window=3,size=50) model.save("word2vec.model")
这样word2vec词向量训练完成。
5.加载模型
model = word2vec.Word2Vec.load("word2vec.model")
6.word2vec训练的词向量4个简单应用:
1.输出某一个词对应的字向量表示
print(model.wv['傅小司'])
这里训练字向量维度是50,因此输出一个1*50维度的向量列表形式
[ 0.02614833 0.62730306 -0.08763303 -0.86082494 -0.6132983 0.26367593
0.13664652 0.30541402 0.13677499 -0.8614811 0.28373545 -1.1140975
-0.79072624 0.53347707 -1.6480855 0.37601948 -1.7206652 -1.1474216
-0.7762522 1.1137716 0.21274179 -0.17867644 -0.39348873 0.26208463
-0.2918493 0.45645487 0.6006337 0.4919964 -1.1038567 1.1408666
0.22714685 0.00733417 -0.3033878 0.7466161 -0.8410811 0.6223441
-0.34520924 0.4519869 -0.12482037 -0.7459157 0.9827534 -0.4562803
0.26689863 0.7035787 0.27264267 0.81484836 -0.01554343 1.354976
0.03141693 0.71394193]
print(model.wv.doesnt_match(u"傅小司 立夏 陆之昂 夏天".split()))
word2vec完成的很好,输出“夏天”。前三个词均是小说主人公名字,准确识别出“夏天”不同于其他三个。
req_count = 3
for key in model.wv.similar_by_word('傅小司', topn =100):
if len(key[0]) > 1:
req_count -= 1
print(key[0], key[1])
if req_count == 0:
break
结果:
陆之昂 0.984142005443573
遇见 0.9545912742614746
立夏 0.947914719581604
都是小说中的角色名,后面的小数是两个词之间的相似度。
print(model.wv.similarity('傅小司', '陆之昂'))
print(model.wv.similarity('可乐', '立夏'))
用了两个例子,一对都是人名,另一对是人名和物名,结果如下:
0.9841419586152907
0.807439792185031
很明显,都是人名相似度比人名和物名之间的相似度高得多。over~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。