indoml / code7_gpt2.py
dwivediishivam's picture
Code Files
225a1cb
Raw History Blame Contribute Delete
2.75 kB
# -*- coding: utf-8 -*-
"""code7_gpt2.ipynb
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/drive/1LlzuHqU-HhK-u9FJmKMJKmwSUvksslQ8
"""
!pip install transformers torch
!pip install accelerate -U
from google.colab import files
import zipfile
import os
uploaded = files.upload()
for fn in uploaded.keys():
print('User uploaded file "{name}" with length {length} bytes'.format(
name=fn, length=len(uploaded[fn])))
if fn.endswith('.zip'):
with zipfile.ZipFile(fn, 'r') as zip_ref:
zip_ref.extractall()
print(f"Files from '{fn}' unzipped in the current directory!")
else:
print(f"'{fn}' is not a zip file.")
os.listdir()
!pip install transformers
import json
from transformers import GPT2Tokenizer, GPT2LMHeadModel
# Load surprise data
with open('surprise.data', 'r') as data_file:
data = [json.loads(line) for line in data_file]
with open('surprise.solution', 'r') as solution_file:
solutions = [json.loads(line) for line in solution_file]
intent_map = {item['indoml_id']: item['intent'] for item in solutions}
intents = [intent_map[item['indoml_id']] for item in data]
utt = [item['utt'] for item in data]
label_map = {intent: i for i, intent in enumerate(set(intents))}
# Load GPT-2 model and tokenizer
tokenizer = GPT2Tokenizer.from_pretrained("gpt2-medium")
model = GPT2LMHeadModel.from_pretrained("gpt2-medium").eval()
def get_intent(utterance):
input_text = f"Detect the intent of the following sentence:\n'{utterance}'\nThe possible intents are: {', '.join(label_map.keys())}."
input_ids = tokenizer.encode(input_text, return_tensors='pt')
output = model.generate(input_ids, max_length=200, num_return_sequences=1, temperature=0.8)
output_text = tokenizer.decode(output[0], skip_special_tokens=True)
# Extract the intent from the output text
intent = output_text.split('\n')[-1].strip()
return intent
# Get intents for the test data
with open('massive_test.data', 'r') as test_file:
test_data = [json.loads(line) for line in test_file]
test_utterances = [item['utt'] for item in test_data]
predicted_intents = [get_intent(utterance) for utterance in test_utterances]
# Create submission file
submission_data = [{"indoml_id": int(item["indoml_id"]), "intent": intent} for item, intent in zip(test_data, predicted_intents)]
submission_filename = 'massive_test_submission.predict'
with open(submission_filename, 'w') as submission_file:
for item in submission_data:
submission_file.write(json.dumps(item) + '\n')
# If you want to zip the file as in the sample
import zipfile
with zipfile.ZipFile("submission.zip", "w") as zipf:
zipf.write(submission_filename)