Skip to main content

Aim to be a convenient NLP library with the help from HuggingFace

Project description

Welcome to that-nlp-library

Install

pip install that_nlp_library

High-Level Overview

Supervised Learning

For supervised learning, the main pipeline contains 2 parts:

Text Data Controller: TextDataController (for text processing)

Here is a list of processings that you can use (in order). You also can skip any processing if you want to.

Here is an example of the Text Controller for a classification task (predict Division Name), without any text preprocessing. The code will also tokenize your text field.

tdc = TextDataController.from_csv('sample_data/Womens_Clothing_Reviews.csv',
                                  main_text='Review Text',
                                  label_names='Division Name',
                                  sup_types='classification',                                  
                                 )
tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
tdc.process_and_tokenize(tokenizer,max_length=100,shuffle_trn=True)

And here is an example when all processings are applied

from underthesea import text_normalize
import nlpaug.augmenter.char as nac

# define the augmentation function
def nlp_aug(x,aug=None):
    results = aug.augment(x)
    if not isinstance(x,list): return results[0]
    return results
aug = nac.KeyboardAug(aug_char_max=3,aug_char_p=0.1,aug_word_p=0.07)
nearby_aug_func = partial(nlp_aug,aug=aug)

# initialize the TextDataController
tdc = TextDataController.from_csv(dset,
                                  main_text='Review Text',
                                  
                                  # metadatas
                                  metadatas='Title',
                                  
                                  # label
                                  label_names='Division Name',
                                  sup_types='classification',
                                  label_tfm_dict={'Division Name': lambda x: x if x!='Initmates' else 'Intimates'},
                                  
                                  # row filter
                                  filter_dict={'Review Text': lambda x: x is not None,
                                               'Division Name': lambda x: x is not None,
                                              },
                                              
                                  # text transformation
                                  content_transformation=[text_normalize,str.lower],
                                  
                                  # validation split
                                  val_ratio=0.2,
                                  stratify_cols=['Division Name'],
                                  
                                  # upsampling
                                  upsampling_list=[('Division Name',lambda x: x=='Intimates')]
                                  
                                  # text augmentation
                                  content_augmentations=nearby_aug_func
                                 )

tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
tdc.process_and_tokenize(tokenizer,max_length=100,shuffle_trn=True)

For an in-depth tutorial on Text Controller for Supervised Learning (TextDataController), please visit here

This library also a streamed version of Text Controller (TextDataControllerStreaming), allowing you to work with data without having it entirely on your hard drive. You can still perform all the processings in the non-streamed version, except for Train/Validation split (which means you have to define your validation set beforehand), and Upsampling.

For more details on streaming, visit here.

If you are curious on the time and space efficiency between streamed and non-streamed version, visit the benchmark here

Model and ModelController

The library can perform the following:

  • Classification (simple tutorial)

  • Regression

  • Multilabel classification

  • Multiheads, where each head can be either classification or regression

    • “Multihead” is when your model needs to predict multiple outputs at once, for example, given a sentence (e.g. a review on an e-commerce site), you have to predict what category the sentence is about, and the sentiment of the sentence, and maybe the rating of the sentence.

    • For the above example, this is a 3-head problem: classification (for category), classification (for sentiment), and regression (for rating from 1 to 5)

  • For 2-head classification where there’s hierarchical relationship between the first output and the second output (e.g. the first output is level 1 clothing category, and the second output is the level 2 clothing subcategory), you can utilize two specific approaches for this use-case: training with conditional probability, or with deep hierarchical classification

Decoupling of Text Controller and Model Controller

In this library, you can either use TextDataController only to handle all the text processings, and have the final processed-HuggingFace-DatasetDict returned to you. But if you have your own processed DatasetDict, you can skip the text controller and use only the ModelController for training your data. There’s a quick tutorial on this decoupling here

Language Modeling

For language modeling, the main pipeline also contains 2 parts

Text Data Controlelr for Language Model: TextDataLMController

Similarly to TextDatController, TextDataLMController also provide a list of processings (except for Label Processing, Upsampling and Text Augmentation). The controller also allow tokenization line-by-line or by token concatenation. Visit the tutorial here

There’s also a streamed version (TextDataLMControllerStreaming)

Language Model Controller: ModelLMController

The library can train a masked language modeling (BERT, roBERTa …) or a causal language model (GPT) either from scratch or from existing pretrained language models.

Hidden States Extraction

The library also allow you to extract the hidden states of your choice, for further analysis

Documentation

Visit https://anhquan0412.github.io/that-nlp-library/

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

that-nlp-library-0.1.5.tar.gz (46.6 kB view details)

Uploaded Source

Built Distribution

that_nlp_library-0.1.5-py3-none-any.whl (59.9 kB view details)

Uploaded Python 3

File details

Details for the file that-nlp-library-0.1.5.tar.gz.

File metadata

  • Download URL: that-nlp-library-0.1.5.tar.gz
  • Upload date:
  • Size: 46.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.10

File hashes

Hashes for that-nlp-library-0.1.5.tar.gz
Algorithm Hash digest
SHA256 b8b3dbfd4ca96efb8c2e76d26344c81f455b1775be475974c77c5344a1c5a759
MD5 2083dbe8b619a3aed3827ff1877a01cd
BLAKE2b-256 c4ff93e30e7b6e72116255dd68f5b070402fc5d0aee38fbfbd336ee59916f069

See more details on using hashes here.

File details

Details for the file that_nlp_library-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for that_nlp_library-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 040d4ea67a464d7e7f6616bc2f22d698f7dfddc4040ce28e0b9d9dd70506c0a3
MD5 e6e756c8ae9b5b2669c8be9fdb922682
BLAKE2b-256 7d6453311b7b51963d2b17fff84eaa3aa7e922d0151acaa638508a723471611c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page