pytorch jax gpt2 text-generation transformers salesken license:apache-2.0

---
tags: salesken
license: apache-2.0
inference: false

---

We attempted an entailment-encouraging text generation model to generate content , given a short phrase . 

Some the generated sentences like below, for the phrase "data science beginner", really got us excited about the potential applications:

<b> ['Where can I find a list of questions, tutorials, and resources for getting a data scientist job?
'Do you know of any research articles about how to improve your skills as a Data Science/Data Management Programmer? ',
'What are the pros and cons to having a Data Science/Data Mining Masters? '] .</b>



Utility of the model ? Automate your conversational AI training data creation process by feeding some meaningful phrases to the model , to generate entailment-encouraging sentences; select the most diverse sentences and generate semantic variations for these, using our paraphrase generation model (https://huggingface.co/salesken/paraphrase_generation), and rank the generated sentence encouraging diversity by using our NLG ranker model (https://huggingface.co/salesken/paraphrase_diversity_ranker)


```python
from transformers import AutoTokenizer, AutoModelWithLMHead  
import pprint
import torch
if torch.cuda.is_available():
    device = torch.device("cuda")
else:
    device = "cpu"
    
    
tokenizer = AutoTokenizer.from_pretrained("salesken/content_generation_from_phrases") 
model = AutoModelWithLMHead.from_pretrained("salesken/content_generation_from_phrases").to(device)


input_query=["data science beginner"]
query = "<|startoftext|> " + input_query[0] + " ~~"

input_ids = tokenizer.encode(query.lower(), return_tensors='pt').to(device)
sample_outputs = model.generate(input_ids,
                                do_sample=True,
                                num_beams=1, 
                                max_length=256,
                                temperature=0.9,
                                top_k = 30,
                                num_return_sequences=100)
content = []
for i in range(len(sample_outputs)):
    r = tokenizer.decode(sample_outputs[i], skip_special_tokens=True).split('||')[0]
    r = r.split(' ~~ ')[1]
    if r not in content:
        content.append(r)

pprint.pprint(content)
```

You may use our ranker model to rank the generated content to encourage diversity.

https://huggingface.co/salesken/paraphrase_diversity_ranker


```
from transformers import AutoTokenizer, AutoModelForSequenceClassification  
import torch
import pandas as pd
import numpy as np
rank_tokenizer = AutoTokenizer.from_pretrained("salesken/paraphrase_diversity_ranker")
rank_model = AutoModelForSequenceClassification.from_pretrained("salesken/paraphrase_diversity_ranker")

content_pairs=list(pd.MultiIndex.from_product([input_query, content]))

features = rank_tokenizer(content_pairs,  padding=True, truncation=True, return_tensors="pt")
rank_model.eval()
with torch.no_grad():
    scores = rank_model(**features).logits
    label_mapping = ['surface_level_variation', 'semantic_variation']
    labels = [label_mapping[score_max] for score_max in scores.argmax(dim=1)]

generated_content= np.array(content)[scores[:,1].sort(descending=True).indices].tolist()


```

