标签: language-model

使用NCE或采样softmax训练TensorFlow语言模型

我正在调整TensorFlow RNN教程来训练一个NCE丢失或采样softmax的语言模型,但我仍然想报告困惑.然而,我得到的困惑是非常奇怪的:对于NCE我得到几百万(太可怕了!)而对于采样softmax,我在一个纪元后获得了700的PPL(太好了,不是真的吗?!).我不知道我做错了什么.

这是我对PTBModel的改编:

class PTBModel(object):
  """The PTB model."""

  def __init__(self, is_training, config, loss_function="softmax"):
    ...
    w = tf.get_variable("proj_w", [size, vocab_size])
    w_t = tf.transpose(w)
    b = tf.get_variable("proj_b", [vocab_size])

    if loss_function == "softmax":
      logits = tf.matmul(output, w) + b
      loss = tf.nn.seq2seq.sequence_loss_by_example(
          [logits],
          [tf.reshape(self._targets, [-1])],
          [tf.ones([batch_size * num_steps])])
      self._cost = cost = tf.reduce_sum(loss) / batch_size
    elif loss_function == "nce":
      num_samples = 10
      labels = tf.reshape(self._targets, [-1,1])
      hidden = output
      loss = tf.nn.nce_loss(w_t, b,                           
                            hidden,
                            labels,
                            num_samples, 
                            vocab_size)
    elif loss_function == "sampled_softmax":
      num_samples = …
Run Code Online (Sandbox Code Playgroud)

language-model lstm tensorflow softmax

5
推荐指数
1
解决办法
1114
查看次数

使用张量流预测句子的概率

我正在使用这种预训练的张量流模型,并试图获得一个句子的概率。我的主要任务是,从几句话中找出概率最大的句子。

使用此代码,我可以预测下一个单词。

bazel-bin/lm_1b/lm_1b_eval --mode sample \
                           --prefix "I love that I" \
                           --pbtxt data/graph-2016-09-10.pbtxt \
                           --vocab_file data/vocab-2016-09-10.txt  \
                           --ckpt 'data/ckpt-*'
Run Code Online (Sandbox Code Playgroud)

但是,如何从许多句子列表中得出句子的概率呢?

python-2.7 language-model tensorflow recurrent-neural-network

5
推荐指数
0
解决办法
335
查看次数

了解Keras LSTM中的字符级嵌入

我是Keras RNN结构中语言模型实现的新手.我有一个具有以下统计数据的离散单词数据集(不是来自单个段落),

  1. 总字数:1953年
  2. 不同字符总数:33(包括START,END和*)
  3. 单词中的最大长度(字符数)为10

现在,我想构建一个接受角色并预测单词中下一个角色的模型.我填写了所有单词,以便它们具有相同的长度.所以我的输入是Word_input,形状为1953 x 9,目标是1953 x 9 x 33.我也想使用嵌入层.所以我的网络架构是,

    self.wordmodel=Sequential()
    self.wordmodel.add(Embedding(33,embedding_size,input_length=9))
    self.wordmodel.add(LSTM(128, return_sequences=True))
    self.wordmodel.add(TimeDistributed(Dense(33)))
    self.wordmodel.compile(loss='mse',optimizer='rmsprop',metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

作为示例,带有填充的单词"CAT"表示

输入网络 - START CAT END****(9个字符)

目标相同--- CAT END*****(9个字符)

因此,对于TimeDistributed输出,我正在测量网络预测和目标的差异.我还将其设置batch_size为1.因此,在读取每个样本字后,网络将重置其状态.

我的问题是我在概念上做得对吗?每当我进行训练时,准确度都会降低56%左右.

请赐教.谢谢.

python embedding language-model lstm keras

5
推荐指数
1
解决办法
3893
查看次数

spaCy型号sm、md、lg之间的区别

我可以看到,在英语 spaCy 模型中,中型模型的性能优于小模型,而大型模型的性能优于中型模型 - 但只是略微优于。然而,在模型的描述中,写到它们都是在 OntoNotes 上训练的。md 和 lg 的向量是个例外,它们已在 CommonCrawl 上进行了训练。因此,如果所有模型都在同一数据集(OntoNotes)上进行训练,并且唯一的区别是向量,那么为什么不需要向量的任务会有性能差异呢?我很想了解有关每个模型及其训练设置等的更多信息,但似乎这些信息并不容易获得。

language-model spacy

4
推荐指数
1
解决办法
2494
查看次数

计算pytorch中的困惑度

我刚刚使用 pytorch 训练了一个 LSTM 语言模型。这个类的主体是这样的:

class LM(nn.Module):
    def __init__(self, n_vocab, 
                       seq_size, 
                       embedding_size, 
                       lstm_size, 
                       pretrained_embed):

        super(LM, self).__init__()
        self.seq_size = seq_size
        self.lstm_size = lstm_size
        self.embedding = nn.Embedding.from_pretrained(pretrained_embed, freeze = True)
        self.lstm = nn.LSTM(embedding_size,
                            lstm_size,
                            batch_first=True)
        self.fc = nn.Linear(lstm_size, n_vocab)

    def forward(self, x, prev_state):
        embed = self.embedding(x)
        output, state = self.lstm(embed, prev_state)
        logits = self.fc(output)

        return logits, state
Run Code Online (Sandbox Code Playgroud)

现在我想写一个函数来计算一个句子的好坏,基于经过训练的语言模型(一些分数,如困惑度等)

我有点困惑,我不知道我应该如何计算这个。
类似的样本会有很大用处。

python nlp language-model pytorch

4
推荐指数
1
解决办法
5526
查看次数

如何使用KenLM计算困惑?

假设我们以此为基础建立了一个模型:

$ wget https://gist.githubusercontent.com/alvations/1c1b388456dc3760ffb487ce950712ac/raw/86cdf7de279a2b9bceeb3adb481e42691d12fbba/something.txt
$ lmplz -o 5 < something.txt > something.arpa
Run Code Online (Sandbox Code Playgroud)

从困惑公式(https://web.stanford.edu/class/cs124/lec/languagemodeling.pdf

应用逆对数公式的总和以获取内部变量,然后取第n个根,则困惑度异常小:

>>> import kenlm
>>> m = kenlm.Model('something.arpa')

# Sentence seen in data.
>>> s = 'The development of a forward-looking and comprehensive European migration policy,'
>>> list(m.full_scores(s))
[(-0.8502398729324341, 2, False), (-3.0185394287109375, 3, False), (-0.3004383146762848, 4, False), (-1.0249041318893433, 5, False), (-0.6545327305793762, 5, False), (-0.29304179549217224, 5, False), (-0.4497605562210083, 5, False), (-0.49850910902023315, 5, False), (-0.3856896460056305, 5, False), (-0.3572353720664978, 5, False), (-1.7523181438446045, 1, False)]
>>> n = len(s.split()) …
Run Code Online (Sandbox Code Playgroud)

python nlp language-model kenlm perplexity

3
推荐指数
1
解决办法
2748
查看次数

微调 LM 与快速设计 LLM

是否有可能对像 Roberta 这样的小得多的语言模型(例如客户服务数据集)进行微调,并获得与使用部分数据集提示 GPT-4 所获得的结果一样好的结果?

经过微调的 Roberta 模型能否学会以对话方式遵循指令,至少对于这样的小领域?

有没有任何论文或文章可以根据经验探讨这个问题?

language-model roberta roberta-language-model gpt-4 large-language-model

3
推荐指数
1
解决办法
2130
查看次数

如何为使用keras训练的语言模型计算困惑?

在Windows 10上使用Python 2.7 Anaconda

我已经训练了一个GRU神经网络来使用keras构建语言模型:

print('Build model...')
model = Sequential()
model.add(GRU(512, return_sequences=True, input_shape=(maxlen, len(chars))))
model.add(Dropout(0.2))
model.add(GRU(512, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(len(chars)))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
Run Code Online (Sandbox Code Playgroud)

如何计算这种语言模型的困惑?例如,NLTK为其模型提供了困惑度计算功能。

python nlp language-model keras

2
推荐指数
1
解决办法
3049
查看次数

Keras LSTM / GRU语言模型的输入形状

我正在尝试在Keras中训练单词级别的语言模型。

我的X和Y的形状均为(90582L,517L)

当我尝试拟合此模型时:

print('Build model...')
model = Sequential()
model.add(GRU(512, return_sequences=True, input_shape=(90582, 517)))
model.add(Dropout(0.2))
model.add(GRU(512, return_sequences=True))
model.add(Dropout(0.2))
model.add(TimeDistributedDense(1))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
model.fit(x_pad, y_pad, batch_size=128, nb_epoch=2)
Run Code Online (Sandbox Code Playgroud)

我得到错误:

Exception: Error when checking model input: 
expected gru_input_7 to have 3 dimensions, but got array with shape (90582L, 517L)
Run Code Online (Sandbox Code Playgroud)

我需要一些有关输入形状应该如何的指导?我已经对各种组合进行了反复试验,但似乎我误解了一些基本知识。

在Keras文本生成示例中,X矩阵具有3个维度。我不知道第三维应该是什么。

python nlp language-model lstm keras

2
推荐指数
1
解决办法
9191
查看次数

使用领域文本预训练 BERT/RoBERTa 语言模型,预计需要多长时间?哪个更快?

我想使用域语料库(情感相关文本)预训练 BERT 和 RoBERTa MLM。使用50k~100k字需要多长时间。由于 RoBERTa 没有接受过预测下一个句子目标的训练,一个训练目标比 BERT 少,并且具有更大的小批量和学习率,我认为 RoBERTa 会快得多?

language-model bert-language-model huggingface-transformers

2
推荐指数
1
解决办法
1028
查看次数