Isi Penting Generator HuggingFace product description style#

Generate a long text with product description style given isi penting (important facts).

This tutorial is available as an IPython notebook at Malaya/example/isi-penting-generator-huggingface-product-description-style.

Results generated using stochastic methods.

[1]:
%%time
import malaya
from pprint import pprint
/home/husein/dev/malaya/malaya/tokenizer.py:208: FutureWarning: Possible nested set at position 3386
  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))
/home/husein/dev/malaya/malaya/tokenizer.py:208: FutureWarning: Possible nested set at position 3904
  self.tok = re.compile(r'({})'.format('|'.join(pipeline)))
CPU times: user 3.34 s, sys: 3.29 s, total: 6.63 s
Wall time: 2.57 s

List available HuggingFace#

[2]:
malaya.generator.isi_penting.available_huggingface()
[2]:
Size (MB) ROUGE-1 ROUGE-2 ROUGE-L Suggested length
mesolitica/finetune-isi-penting-generator-t5-small-standard-bahasa-cased 242.0 0.246203 0.058961 0.15159 1024.0
mesolitica/finetune-isi-penting-generator-t5-base-standard-bahasa-cased 892.0 0.246203 0.058961 0.15159 1024.0

Load HuggingFace#

Transformer Generator in Malaya is quite unique, most of the text generative model we found on the internet like GPT2 or Markov, simply just continue prefix input from user, but not for Transformer Generator. We want to generate an article or karangan like high school when the users give ‘isi penting’.

def huggingface(model: str = 'mesolitica/finetune-isi-penting-generator-t5-base-standard-bahasa-cased', **kwargs):
    """
    Load HuggingFace model to generate text based on isi penting.

    Parameters
    ----------
    model: str, optional (default='mesolitica/finetune-isi-penting-generator-t5-base-standard-bahasa-cased')
        Check available models at `malaya.generator.isi_penting.available_huggingface()`.

    Returns
    -------
    result: malaya.torch_model.huggingface.IsiPentingGenerator
    """
[3]:
model = malaya.generator.isi_penting.huggingface()

generate#

def generate(
    self,
    strings: List[str],
    mode: str = 'surat-khabar',
    **kwargs,
):
    """
    generate a long text given a isi penting.

    Parameters
    ----------
    strings : List[str]
    mode: str, optional (default='surat-khabar')
        Mode supported. Allowed values:

        * ``'surat-khabar'`` - news style writing.
        * ``'tajuk-surat-khabar'`` - headline news style writing.
        * ``'artikel'`` - article style writing.
        * ``'penerangan-produk'`` - product description style writing.
        * ``'karangan'`` - karangan sekolah style writing.

    **kwargs: vector arguments pass to huggingface `generate` method.
        Read more at https://huggingface.co/docs/transformers/main_classes/text_generation

    Returns
    -------
    result: List[str]
    """

Good thing about HuggingFace#

In generate method, you can do greedy, beam, sampling, nucleus decoder and so much more, read it at https://huggingface.co/blog/how-to-generate

And recently, huggingface released https://huggingface.co/blog/introducing-csearch

[9]:
isi_penting = ['ayam yang sihat dan sejahtera', 'nasi ayam yang sedap dan lazat', 'kedai bernama Husein Nasi Ayam']
[5]:
pprint(model.generate(isi_penting, mode = 'penerangan-produk',
    do_sample=True,
    max_length=256,
    top_k=50,
    top_p=0.95,))
You're using a T5TokenizerFast tokenizer. Please note that with a fast tokenizer, using the `__call__` method is faster than using a method to encode the text followed by a call to the `pad` method to get a padded encoding.
['Husein Nasi Ayam yang lazat adalah nasi ayam yang lazat dengan kicap dan '
 'rasa yang luar biasa. Dijual dalam paket (6.5 ons), ia adalah makanan yang '
 'boleh anda gunakan untuk berseronok, menikmati masa terawat anda dan juga '
 'memberikan rasa ayam yang lazat kepada keluarga anda. Husein mempunyai '
 'rangkaian kedai bernama Husein Nasi Ayam. Setiap nasi yang kami buat di '
 'rumah, perniagaan (dan kemudian menjual), dilengkapi dengan ayam yang sihat '
 'dan sejahtera dan merupakan sumber protein dan serat yang sangat baik. Ia '
 'mempunyai bahan semula jadi, seperti madu, barli dan bayam yang berfungsi '
 'sebagai pengisi dan juga tauhu, menjadikan Husein sebagai makanan yang '
 'menyeronokkan. Sama ada anda memulakan hari dengan makanan ringan seperti '
 'nasi ayam, atau makan sandwic yang hebat seperti nasi ayam, makanan kami '
 'adalah bahagian yang paling beraroma dan sangat sedap untuk makan dalam '
 'keluarga anda.']
[11]:
pprint(model.generate(isi_penting, mode = 'penerangan-produk',
    do_sample=True,
    max_length=256,
    penalty_alpha=0.8, top_k=4,))
['Husein Nasi Ayam (1.5oz, 5.5oz) adalah makanan yang lazat, sihat dan '
 'sejahtera untuk anjing dan kucing. "Nasi yang enak dan enak ini adalah '
 'makanan yang lazat yang dibuat dengan ayam yang sihat dan sejahtera. Kami '
 'mempunyai nasi ayam yang sedap dan lazat yang boleh didapati di kedai '
 'bernama Husein Nasi Ayam."']
[12]:
isi_penting = ['sabun lembut untuk kulit anda',
               'sabun bebas dari DNA babi',
               '44 herba dipetik oleh ibu tunggal yang cantik lagi ayu',
               'sabun bebas dari kes rasuah SPRM',]
[13]:
pprint(model.generate(isi_penting, do_sample=True, mode = 'penerangan-produk',
    max_length=256,
    top_k=50,
    top_p=0.95, ))
['IKUTI SETIAP STICKES KINTIFULS (R): Ini adalah formulasi lengkap tanpa sabun '
 'lembut, bebas gula dan peluntur. * IKUTI SETIAP STICKES KINTIFULS (R): Ini '
 'adalah sabun bebas dari DNA babi dan 44 herba dipetik oleh ibu tunggal yang '
 'cantik lagi ayu, yang mengandungi protein yang penting untuk tubuh dan '
 'badan.']
[15]:
pprint(model.generate(isi_penting, mode = 'penerangan-produk',
    do_sample=True,
    max_length=256,
    penalty_alpha=0.8, top_k=4,))
['"Sesiapa yang mempunyai kulit yang sangat sensitif akan melihat sabun lembut '
 'untuk kulit anda. Ini adalah sabun bebas dari DNA babi, dan 44 herba dipetik '
 'oleh ibu tunggal yang cantik lagi ayu. Ia adalah sabun semula jadi dan bebas '
 'dari kes rasuah SPRM. "']

If you give better isi penting, the results will be much better.

[16]:
# https://ms.wikipedia.org/wiki/Burger_Ramly
isi_penting = ['Penubuhan Makma Mikrobiologi',
               'mengawal kualiti produk',
               'memastikan produknya adalah suci',
               'satu tempat penyelidikan dan pembangunan produk',
              'peralatan teknologi tinggi']
[17]:
pprint(model.generate(isi_penting, do_sample=True, mode = 'penerangan-produk',
    max_length=256,
    top_k=50,
    top_p=0.95, ))
['Penubuhan Makma Mikrobiologi adalah satu langkah ke depan untuk memastikan '
 'produknya adalah suci. Dalam masa beberapa tahun, beberapa teknologi telah '
 'mendapat pengiktirafan antarabangsa dan telah menjadi sumber utama kepada '
 'banyak industri seperti farmaseutikal, kesihatan, keselamatan makanan dan '
 'sebagainya. Penubuhan Makma Mikrobiologi adalah satu langkah di dalam '
 'memastikan produknya adalah suci. Inovasi dan peralatan teknologi tinggi '
 'dalam dunia pembuatan telah menyumbang kepada perkembangan mereka selama '
 'lebih dari satu abad. Sebagai satu venue penyelidikan dan pembangunan '
 'produk, kami telah memberikan banyak sokongan dalam menentukan inovasi dan '
 'cabaran dengan teliti. Sebagai satu pasukan kami melakukan ini untuk '
 'memastikan penyelesaian dan peraturan kami dapat dilaksanakan dengan '
 'berkesan dengan cara yang yang tepat, sambil masih mempunyai semua inovasi '
 'yang harus dilakukan. Kami komited untuk menyediakan sumber yang luar biasa '
 'dan di pasaran untuk menjadikan teknologi kami menjadi standard industri.']
[18]:
pprint(model.generate(isi_penting, mode = 'penerangan-produk',
    do_sample=True,
    max_length=256,
    penalty_alpha=0.8, top_k=4,))
['Penubuhan Makma Mikrobiologi adalah untuk menyediakan penyelesaian untuk '
 'masalah yang berkaitan dengan patogen, mikroorganisma, kulat, kulat, virus '
 'dan penyakit yang berkaitan dengan penggunaan dan penggunaannya. Ia '
 'bertujuan untuk mengawal kualiti produk yang digunakan, memastikan produknya '
 'adalah suci dan selamat untuk digunakan. Ia juga bertujuan untuk memastikan '
 'produknya adalah produk yang selamat dan bersih untuk digunakan dan juga '
 'untuk digunakan dengan peralatan teknologi tinggi yang lain. Penubuhan Makma '
 'Mikrobiologi adalah untuk menyediakan penyelesaian untuk masalah yang '
 'berkaitan dengan patogen, mikroorganisma, kulat, kulat, virus dan penyakit '
 'yang berkaitan dengan penggunaan dan penggunaannya. Ia bertujuan untuk '
 'mengawal kualiti produk yang digunakan, memastikan produknya adalah suci dan '
 'selamat untuk digunakan dan juga juga untuk digunakan dengan peralatan '
 'teknologi tinggi yang lain. Ia bertujuan untuk memastikan produknya adalah '
 'suci dan selamat untuk digunakan dan juga untuk digunakan dengan peralatan '
 'teknologi tinggi yang lain. Ia adalah satu tempat penyelidikan dan '
 'pembangunan produk yang terletak di dalam dan luar negara dan mempunyai '
 'kemudahan dan kemudahan yang luas yang membolehkan anda membuat penyelidikan '
 'dan pembangunan produk yang selamat dan bersih untuk digunakan dan juga '
 'dengan peralatan teknologi tinggi yang lain.']