!pip install transformers
import tensorflow as tf
from transformers import TFAutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('gpt2')
model = TFAutoModelForCausalLM.from_pretrained('gpt2')
input_ids = tokenizer.encode('I like this movie', return_tensors='tf')
result = model.generate(input_ids, max_length=50)
tokenizer.decode(result[0])
"I like this movie. I like the way it's set up. I like the way it's set up. I like the way it's set up. I like the way it's set up. I like the way it's set up."
from collections import Counter
def score(res):
counter = Counter()
tokens = res.numpy()
for i in range(0, len(tokens) - 3):
trigram = tokens[i:i+3]
trigram = tuple(trigram)
counter[trigram] += 1
return len(counter) / sum(counter.values())
0.2765957446808511
with tf.GradientTape() as tape:
output = model(result, labels=result)
s = score(result[0])
loss = (s - 0.5) * output[0]
mean_loss = tf.reduce_mean(loss)
grads = tape.gradient(mean_loss, model.trainable_variables)
opt = tf.keras.optimizers.Adam(learning_rate=5e-4, epsilon=1e-08)
opt.apply_gradients(zip(grads, model.trainable_variables))
result = model.generate(input_ids, max_length=50)
tokenizer.decode(result[0])
'I like this movie:\n\n"The first time I saw the video, I was shocked," said Mr. Karpinski, who was born in Moscow in 1991. "It was a very beautiful moment."\n\nThe Russian government has been'