获取词向量的方法及训练词向量的理解

本文深入探讨深度学习中Embedding层的重要作用,讲解词向量的获取与训练方法,包括使用网络embedding层、FastText及预训练模型如BERT。同时,文章提供了详细的FastText训练流程和BERT中文预训练模型应用实例。
概述
  • Embedding,中文直译为“嵌入”,常被翻译为“向量化”或者“向量映射”,在深度学习中,Embedding技术对于深度学习非常重要,甚至可以说是深度学习的“基本核心操作”。深度学习网络中作为Embedding层,完成从高维稀疏特征向量到低维稠密特征向量的转换。 使用One-hot编码对类别、Id型特征进行编码,导致样本特征向量极度稀疏,而深度学习的结构特点使其不利于稀疏特征向量的处理,因此几乎所有的深度学习都会由Embedding层负责将高维稀疏特征向量转换成稠密低维特征向量
常用的获取词向量的方法
  • 利用网络embedding层训练词向量,
  • FastText工具快速生成词向量,
  • 使用预训练模型获取词向量。
如何训练词向量
  1. 网络embedding层训练词向量:embedding层训练词向量时,需要设置两个参数,分别是词汇总数和词嵌入维度,首先需要将一个句子(选择合适的句子的序列长度,因为截断或补齐也会给最终效果带来影响)中的每一个词完成word2id的过程,获取每一个词的id方法有(1.通过keras下的tokenizer方法获取总次数数以及词 索引的对应关系 2.编程代码完成一一映射)。词嵌入维度一般的设置大些,参考值为300到500,
模型中加入embedding层
nn.Embedding(vocab_size,embedding_dim)
  1. FastText训练词向量过程
过程:获取数据,训练词向量,模型超参数设置,模型效果检验,模型保存与加载

1.获取数据(英语维基百科的部分网页信息, 它的大小在300M左右
)
[root@bhs fastte]# wget -c http://mattmahoney.net/dc/enwik9.zip -P data

[root@bhs data]# unzip enwik9.zip 
[root@bhs data]# ll
total 1291608
-rw-r--r-- 1 root root 1000000000 Jun  1  2011 enwik9
-rw-r--r-- 1 root root  322592222 Sep  2  2011 enwik9.zip
-rw-r--r-- 1 root root       1995 May 24 00:17 wikifil.pl
查看下载的数据
[root@bhs data]# more enwik9
<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch
emaLocation="http://www.mediawiki.org/xml/export-0.3/ http://www.mediawiki.org/xml/export-0.3.xsd" version="0.3" xml:lang
="en">
  <siteinfo>
    <sitename>Wikipedia</sitename>
    <base>http://en.wikipedia.org/wiki/Main_Page</base>
    <generator>MediaWiki 1.6alpha</generator>
    <case>first-letter</case>
      <namespaces>
      <namespace key="-2">Media</namespace>
      <namespace key="-1">Special</namespace>
      <namespace key="0" />
      <namespace key="1">Talk</namespace>
      <namespace key="2">User</namespace>
      <namespace key="3">User talk</namespace>
      <namespace key="4">Wikipedia</namespace>
      <namespace key="5">Wikipedia talk</namespace>

数据处理
使用wikifil.pl文件处理脚本来清除XML/HTML格式的内容
[root@bhs data]# perl wikifil.pl enwik9 > fil
输出结果为由空格分割的单词
[root@bhs data]# more fil 
 anarchism originated as a term of abuse first used against early working class radicals including the diggers of the eng
lish revolution and the sans culottes of the french revolution whilst the term is still used in a pejorative way to descr

2.训练词向量

# 在训练词向量过程中, 我们可以设定很多常用超参数来调节我们的模型效果,
# 无监督训练模式: 'skipgram' 或者 'cbow', 默认为'skipgram', 在实践中,skipgram模式在利用子词方面比cbow更好.
# 词嵌入维度dim: 默认为100, 但随着语料库的增大, 词嵌入的维度往往也要更大.
# 数据循环次数epoch: 默认为5, 但当你的数据集足够大, 可能不需要那么多次.
# 学习率lr: 默认为0.05, 根据经验, 建议选择[0.01,1]范围内.
# 使用的线程数thread: 默认为12个线程, 一般建议和你的cpu核数相同


model=fasttext.train_unsupervised('./fil','cbow',dim=300,epoch=1,lr=0.1,thread=2)
Read 124M words
Number of words:  218316
Number of labels: 0
Progress: 100.0% words/sec/thread:   26829 lr:  0.000000 avg.loss:  1.507921 ETA:   0h 0m 0s

3.模型效果检验
# 检查单词向量质量的一种简单方法就是查看其邻近单词, 通过我们主观来判断这些邻近单词是否与目标单词相关来粗略评定模型效果好坏.
查找"小狗"的邻近单词, 我们可以发现与小狗有关的词汇.
>>> model.get_nearest_neighbors('dog')
[(0.8416129350662231, 'catdog'), (0.7638700604438782, 'sleddog'), (0.7467442154884338, 'dogcow'),<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值