是否可以从Python端自定义TensorFlow CTC实现中的光束记分器?我在评论CTCBeamSearchDecoder C++类构造函数时看到了这种可能性,但是想知道如何为Python用户提供这个功能?
我们遇到的具体问题是将语言模型插入基于CTC的语音解码器.语言模型可能是预先训练的TensorFlow子图,能够输出光束得分调整的概率.但我们需要一种方法将其注入射线得分手.
我正在研究一种复发语言模型.要学习可用于初始化我的语言模型的单词嵌入,我使用的是gensim的word2vec模型.训练之后,word2vec模型为词汇表中的每个单词保存两个向量:单词嵌入(输入/隐藏矩阵的行)和上下文嵌入(隐藏/输出矩阵的列).
作为概括这个帖子有这两个嵌入矢量组合至少三种常用的方法:
但是,我找不到关于最佳策略的适当论文或报告.所以我的问题是:
相关(但未答复)的问题:
我正在开发一个语言模型,例如https://pytorch.org/tutorials/beginner/transformer_tutorial.html的语言模型。
\n\n我不清楚 - 这里是否需要位置编码?\n据我了解 - 对于语言翻译任务来说这是必要的,因为解码器应该能够在编码器的序列中定位先前输出的单词。\n但是在没有解码器的语言建模中是否有必要?
\n\n编码器输出中的单词是否可能被打乱?
\n\n编辑:
\n\n原论文中没有任何解释。我没有在教程中找到解释(就像这里https://kazemnejad.com/blog/transformer_architecture_positional_encoding/)。
\n\n我不明白这一点:
\n\n“由于句子中的每个单词同时流经 Transformer\xe2\x80\x99s 编码器/解码器堆栈,因此模型本身\xe2\x80\x99t 对每个单词没有任何位置/顺序感。”
\n\n从我的角度来看,Transformer 编码器具有有关顺序的信息,因为它的输入是有序序列(类似于 RNN)。
\n\n我尝试从模型中删除位置编码。它可以工作,但性能较差。
\n\n将这种位置编码添加到 RNN 中有用吗?它可以提高其性能吗?
\n我想在我的数据集和 GCP VM 实例上微调 Starcoder ( https://huggingface.co/bigcode/starcoder )。
文档中称,为了训练模型,他们使用了 512 个 Tesla A100 GPU,花了 24 天。
我还在 HuggingFace 的文件部分中看到了模型(.bin)文件(https://huggingface.co/bigcode/starcoder/tree/main)
模型总大小约为64GB
根据所有这些信息,
deep-learning language-model pytorch huggingface large-language-model
Moses是一个建立机器翻译模型的软件.并且KenLM是摩西使用的事实语言模型软件.
我有一个16GB文本的文本文件,我用它来构建一个语言模型:
bin/lmplz -o 5 <text > text.arpa
Run Code Online (Sandbox Code Playgroud)
生成的文件(text.arpa)为38GB.然后我将语言模型二进制化:
bin/build_binary text.arpa text.binary
Run Code Online (Sandbox Code Playgroud)
二进制语言模型(text.binary)增长到71GB.
在moses训练翻译模型后,您应该使用MERT算法调整模型的权重.这可以通过https://github.com/moses-smt/mosesdecoder/blob/master/scripts/training/mert-moses.pl完成.
MERT适用于小型语言模型,但使用大型语言模型,需要相当长的时间才能完成.
我做了谷歌搜索,发现了KenLM的过滤器,它承诺将语言模型过滤到更小的尺寸:https://kheafield.com/code/kenlm/filter/
但我对如何使其发挥作用毫无头绪.命令帮助给出:
$ ~/moses/bin/filter
Usage: /home/alvas/moses/bin/filter mode [context] [phrase] [raw|arpa] [threads:m] [batch_size:m] (vocab|model):input_file output_file
copy mode just copies, but makes the format nicer for e.g. irstlm's broken
parser.
single mode treats the entire input as a single sentence.
multiple mode filters to multiple sentences in parallel. Each sentence is on …Run Code Online (Sandbox Code Playgroud) https://spacy.io/models/en#en_vectors_web_lg 表示该模型包含 110 万个密钥,但 https://nlp.stanford.edu/projects/glove/ 表示 Glove 向量包含 220 万个词汇
我可以知道缺少哪些词汇吗?
非常感谢。
我很好奇是否可以在文本生成中使用迁移学习,并在特定类型的文本上重新训练/预训练。
例如,拥有一个预训练的 BERT 模型和一个小的医学(或任何“类型”)文本语料库,创建一个能够生成医学文本的语言模型。假设您没有大量的“医学文本”,这就是您必须使用迁移学习的原因。
把它作为一个管道,我会把它描述为:
这听起来很熟悉吗?抱脸可以吗?
deep-learning language-model transfer-learning bert-language-model huggingface-transformers
我正在微调语言模型,并计算训练和验证损失以及训练和验证困惑度。在我的程序中,它是通过损失的指数来计算的。我知道较低的困惑度代表更好的语言模型,并且想知道一个好的模型的值范围是多少。任何帮助表示赞赏。谢谢。
我有一组不同长度的非零序列,我使用 Keras LSTM 对这些序列进行建模。我使用 Keras Tokenizer 进行标记化(标记从 1 开始)。为了使序列具有相同的长度,我使用填充。
填充的示例:
# [0,0,0,0,0,10,3]
# [0,0,0,0,10,3,4]
# [0,0,0,10,3,4,5]
# [10,3,4,5,6,9,8]
Run Code Online (Sandbox Code Playgroud)
为了评估模型是否能够泛化,我使用了 70/30 比率的验证集。在每个 epoch 结束时,Keras 都会显示训练和验证的准确性。
我最大的疑问是使用 padding 时Keras 验证准确性是否可靠。因为验证集可以简单地是 0 的序列 --> [0,0,0]。由于有很多 0 的序列(由于填充),模型可以轻松地学习并正确预测 0 的序列,从而创建假的高验证精度。换句话说,模型可能学习零序列,而不学习真实序列。
那么,填充会影响 Keras 中的验证准确性吗?
machine-learning deep-learning language-model keras tensorflow
我正在实现一个变压器,并且一切正常,包括使用scaled_dot_product_attentionPyTorch 2.0 中的新功能的注意力。然而,我只会进行因果关注,因此使用该is_causal=True标志来提高效率似乎是有意义的。只要 k、v 和 q 张量具有相同的大小,这也符合我的预期。
但我不确定如何在此模式下将过去的(缓存的)键/值传递给函数。如果 k、v 张量比 q 宽,我需要一个与 k/v 一样宽、与 q 一样高的矩形掩模,并屏蔽掉右上角的三角形。如果我自己构建这样一个掩码并将其传递给函数,一切都很好。我得到的行为类似于典型的因果关注,其中过去的标记被完全关注,而新的标记(有查询)被因果关注。
不过,根据文档,is_causal=True这相当于使用以下构建的掩码:
attn_mask = torch.ones(L, S, dtype=torch.bool).tril(diagonal=0)
Run Code Online (Sandbox Code Playgroud)
其中 L 和 S 分别是查询长度和键/值长度。这使得除了左下三角形部分之外的所有部分都被屏蔽,该部分部分涉及过去的标记,而根本不涉及新的标记。这种因果模式是否不适合我的用例,或者我错过了什么?
假设我有以下张量:
q = torch.rand((1, n_heads, 3, head_dim))
k = torch.rand((1, n_heads, 6, head_dim))
v = torch.rand((1, n_heads, 6, head_dim))
attn_output = torch.nn.functional.scaled_dot_product_attention(q, k, v, attn_mask=None, is_causal=True)
Run Code Online (Sandbox Code Playgroud)
其中 k 和 v 更宽,因为它们连接到先前推理过程的缓存结果上。scaled_dot_product_attention应用以下掩码:
[[0, -inf, -inf, -inf, -inf, -inf]
[0, 0, …Run Code Online (Sandbox Code Playgroud) language-model ×10
nlp ×2
python ×2
pytorch ×2
tensorflow ×2
gensim ×1
huggingface ×1
keras ×1
moses ×1
n-gram ×1
perplexity ×1
spacy ×1
word2vec ×1