本仓库用于存放《自然语言处理:基于预训练模型的方法》(作者:车万翔、郭江、崔一鸣)一书各章节的示例代码。
expected = np.outer(row_totals, col_totals) / total # 获得每个元素的分母
【数学符号】一节中,【线性代数】部分【矩阵A与矩阵B的Hardamard乘积】中,Hardamard的拼写应该为Hadamard。
书中2.1.2节:3.奇异值分解小节(17页)中,矩阵V的维度应为|C| x r,即$\bm{V} \in \mathbb{R}^{|\mathbb{C}| \times r}$。
书中3.4.3节convert_t2s.py:
f_in = open(sys.argv[0], "r")
修正为
f_in = open(sys.argv[1], "r")
wikidata_cleaning.py:f_in = open(sys.argv[0], 'r')
修正为
f_in = open(sys.argv[1], 'r')
此外,为了兼容Python 3.7以上版本,将remove_control_chars函数修改为:
def remove_control_chars(in_str): control_chars = ''.join(map(chr, list(range(0, 32)) + list(range(127, 160)))) control_chars = re.compile('[%s]' % re.escape(control_chars)) return control_chars.sub('', in_str)
Vocab类的__init__与build方法有误,修正为:class Vocab: def __init__(self, tokens=None): self.idx_to_token = list() self.token_to_idx = dict() if tokens is not None: if "<unk>" not in tokens: tokens = tokens + ["<unk>"] for token in tokens: self.idx_to_token.append(token) self.token_to_idx[token] = len(self.idx_to_token) - 1 self.unk = self.token_to_idx['<unk>'] @classmethod def build(cls, text, min_freq=1, reserved_tokens=None): token_freqs = defaultdict(int) for sentence in text: for token in sentence: token_freqs[token] += 1 uniq_tokens = ["<unk>"] + (reserved_tokens if reserved_tokens else []) uniq_tokens += [token for token, freq in token_freqs.items() \ if freq >= min_freq and token != "<unk>"] return cls(uniq_tokens)
MLP模型类是基于EmbeddingBag的MLP实现,与4.6.3节的MLP实现有所区别,具体如下:class MLP(nn.Module): def __init__(self, vocab_size, embedding_dim, hidden_dim, num_class): super(MLP, self).__init__() self.embedding = nn.EmbeddingBag(vocab_size, embedding_dim) self.linear1 = nn.Linear(embedding_dim, hidden_dim) self.activate = F.relu self.linear2 = nn.Linear(hidden_dim, num_class) def forward(self, inputs, offsets): embedding = self.embedding(inputs, offsets) hidden = self.activate(self.linear1(embedding)) outputs = self.linear2(hidden) log_probs = F.log_softmax(outputs, dim=1) return log_probs
ELMoLstmEncoder类的forward函数实现有误,修正为:def forward(self, inputs, lengths): batch_size, seq_len, input_dim = inputs.shape rev_idx = torch.arange(seq_len).unsqueeze(0).repeat(batch_size, 1) for i in range(lengths.shape[0]): rev_idx[i,:lengths[i]] = torch.arange(lengths[i]-1, -1, -1) rev_idx = rev_idx.unsqueeze(2).expand_as(inputs) rev_idx = rev_idx.to(inputs.device) rev_inputs = inputs.gather(1, rev_idx) forward_inputs, backward_inputs = inputs, rev_inputs stacked_forward_states, stacked_backward_states = [], [] for layer_index in range(self.num_layers): # 将`lengths`转移到CPU以兼容最新的PyTorch版本 packed_forward_inputs = pack_padded_sequence( forward_inputs, lengths.cpu(), batch_first=True, enforce_sorted=False) packed_backward_inputs = pack_padded_sequence( backward_inputs, lengths.cpu(), batch_first=True, enforce_sorted=False) # 前向 forward_layer = self.forward_layers[layer_index] packed_forward, _ = forward_layer(packed_forward_inputs) forward = pad_packed_sequence(packed_forward, batch_first=True)[0] forward = self.forward_projections[layer_index](forward) stacked_forward_states.append(forward) # 后向 backward_layer = self.backward_layers[layer_index] packed_backward, _ = backward_layer(packed_backward_inputs) backward = pad_packed_sequence(packed_backward, batch_first=True)[0] backward = self.backward_projections[layer_index](backward) # 使用rev_idx将序列转换回原始顺序 stacked_backward_states.append(backward.gather(1, rev_idx)) forward_inputs, backward_inputs = forward, backward # stacked_forward_states: [batch_size, seq_len, projection_dim] * num_layers # stacked_backward_states: [batch_size, seq_len, projection_dim] * num_layers return stacked_forward_states, stacked_backward_states
tokenize()函数存在问题,请按如下进行修正。def tokenize(examples): return tokenizer(examples['hypothesis'], examples['premise'], truncation=True, padding='max_length')
修正为
def tokenize(examples): return tokenizer(examples['sentence1'], examples['sentence2'], truncation=True, padding='max_length')
loss = (torch.sum(word_embeds * context_embeds, dim=1) + word_biases + context_biases - log_counts) ** 2
修正为
loss = (torch.sum(word_embeds * context_embeds, dim=1, keepdim=True) + word_biases + context_biases - log_counts) ** 2


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI 集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

