1.文本表示按照力度划分:字级别、词级别、句子级别 文本表示按照量级划分: 字粒度:把每个字变成向量; 词粒度:把每个词变成向量; 句粒度:把每个句子变成向量。 文本表示按照另一个量级去分: 离散型的表示: 分布式表示:embedding 1.embedding:概念:在one_hot基础上随机一张表,然后one_hot矩阵与随机表相乘。(词汇表有多大,随 机的表就有多少行,想把一个字变成多少维的向量,那么随机的表就有多少列) 例如:ihello,词汇表有5个,因此one_hot可以表示为6行5列,此时随机的表行数为5,列数设置:想把一个字变成多少维的向量,那么随机的表就有多少列 作用:通过embedding把一个one_hot稀疏的向量,变成一个稠密的向量。 小知识:1.用one_hot编码出来的变量是离散的,embedding从离散变成了分布; 2.embedding表是随机的,所以随机出来的表不好,但是它可以跟随模型一起训练,因此它最终一定是比one_hot好的。
#tensorflow代码 import numpy as np import torch import torch.nn as nn from collections import Counter mstr = '我们是一家人啊啊' word_counter = Counter() for i in mstr: word_counter.update(i) word_list = [i[0] for i in word_counter.most_common()] word_dict = {} for i,j in enumerate(word_list): word_dict[j] = i word_ids = [] for i in mstr: word_ids.append(word_dict[i]) word_ids = np.array([word_ids]) class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.C = nn.Embedding(5,10) def forward(self,X): out = self.C(X) return out word_ids_tensor = torch.tensor(word_ids) model = Model() out = model(word_ids_tensor) print(out.data.numpy())
#torch代码
import numpy as np import torch import torch.nn as nn from collections import Counter mstr = '我们是一家人啊啊' word_counter = Counter() for i in mstr: word_counter.update(i) word_list = [i[0] for i in word_counter.most_common()] word_dict = {} for i,j in enumerate(word_list): word_dict[j] = i word_ids = [] for i in mstr: word_ids.append(word_dict[i]) word_ids = np.array([word_ids]) class Model(nn.Module): def __init__(self): super(Model, self).__init__() self.C = nn.Embedding(5,10) def forward(self,X): out = self.C(X) return out word_ids_tensor = torch.tensor(word_ids) model = Model() out = model(word_ids_tensor) print(out.data.numpy())