| --- |
| license: mit |
| language: |
| - en |
| - zh |
| tags: |
| - text2text-generation |
| - text-humanizer |
| - rewriting |
| - writing-assistant |
| - bilingual |
| - responsible-ai |
| pipeline_tag: text2text-generation |
| base_model: |
| - google-t5/t5-small |
| - uer/t5-small-chinese-cluecorpussmall |
| inference: true |
| widget: |
| - text: "It is important to note that this robust solution serves as a testament to our commitment to innovation. Moreover, we leverage cutting-edge technology." |
| - text: "值得注意的是,在当今快速发展的时代,我们通过赋能团队来助力企业实现降本增效。" |
| --- |
| |
| # Humanize Text Model (Lynote) |
|
|
| A lightweight bilingual (English/Chinese) humanizer: two small T5-seq2seq |
| checkpoints in one repository that rewrite AI-flavored prose into more |
| natural, human-flavored prose. |
|
|
| - **`en/`** — fine-tuned `google-t5/t5-small` (English) |
| - **`zh/`** — fine-tuned `uer/t5-small-chinese-cluecorpussmall` (Chinese) |
|
|
| ## What it does |
|
|
| - Removes high-confidence AI clichés and formulaic phrases (e.g. |
| *"it is important to note that"*, *"moreover"*, *"值得注意的是"*, |
| *"降本增效"*). |
| - Keeps already-human prose nearly untouched (identity learning). |
| - Preserves numbers, URLs, file paths, code and quoted text (protected with |
| `PROTECTED_N` placeholders during generation, restored afterwards). |
| - Routes automatically by language (CJK ratio detection). |
|
|
| ## What it is NOT |
|
|
| This is a **writing-quality aid**, not a tool for evading AI detectors. |
| Detector scores are probabilistic, and no humanizer can guarantee that text |
| will be classified as human. Please use it responsibly: |
| do not use it to misrepresent authorship in academic, legal, or disciplinary |
| contexts. |
|
|
| ## Quickstart |
|
|
| ```bash |
| pip install transformers torch |
| ``` |
|
|
| ```python |
| from humanize import Humanizer # the wrapper bundled in this repo |
| |
| h = Humanizer() # loads this repo (en/ and zh/ sub-checkpoints) |
| print(h.humanize( |
| "It is important to note that this robust solution serves as a " |
| "testament to our commitment. Moreover, we leverage cutting-edge " |
| "technology." |
| )) |
| print(h.humanize("值得注意的是,我们通过赋能团队来实现降本增效。")) |
| ``` |
|
|
| Raw `transformers` usage (no wrapper): |
|
|
| ```python |
| from transformers import T5ForConditionalGeneration, T5Tokenizer |
| |
| model = T5ForConditionalGeneration.from_pretrained("Lynote/humanize-text-model/en") |
| tokenizer = T5Tokenizer.from_pretrained("Lynote/humanize-text-model/en") |
| inputs = tokenizer("It is important to note that this is robust.", return_tensors="pt") |
| print(tokenizer.decode(model.generate(**inputs, max_length=128)[0], skip_special_tokens=True)) |
| ``` |
|
|
| For Chinese use the `zh/` sub-checkpoint with `BertTokenizer`. |
|
|
| ## Training data |
|
|
| The corpus is generated deterministically from the editing principles of the |
| Lynote reference projects (`humanize-text`, `humanize-text-skill`, |
| `humanizer-lite`): |
|
|
| 1. **AI → human**: formulaic clause combinations rewritten by a conservative |
| rule engine, |
| 2. **human → human (identity)**: clean prose unchanged, so the model learns |
| not to rewrite good text, |
| 3. **mixed**: clean prose with one injected cliché that must be removed, |
| 4. **protected spans**: examples with URLs, numbers, code and quotes. |
|
|
| Reproduce: |
|
|
| ```bash |
| python scripts/build_dataset.py --out data # 14.7k pairs (en + zh) |
| python scripts/train.py --lang en --epochs 3 # -> checkpoints/humanize-text-model/en |
| python scripts/train.py --lang zh --epochs 3 # -> checkpoints/humanize-text-model/zh |
| python scripts/evaluate.py # benchmark on held-out test |
| pytest tests/ # full test suite |
| ``` |
|
|
| ## Evaluation (held-out test, 500 AI->human + all identity/protected pairs) |
|
|
| | Metric | Value | |
| |---|---| |
| | Corpus BLEU vs rule reference | **99.2** | |
| | Cliché removal rate | **100.0%** (435/435) | |
| | Identity stability (clean prose, n=67) | **73.1%** | |
| | Protected-span preservation (n=253) | **96.8%** | |
| | Throughput (MPS) | ~218 chars/s | |
|
|
| ## Limitations |
|
|
| - Trained on synthetic text; real-world inputs may need light post-editing. |
| - One checkpoint per language (English / Chinese); other languages are not |
| specifically trained. |
| - Long inputs are truncated to 256 tokens. |
| - It is a conservative editor: it will not add stylistic richness that is |
| absent from the source text. |
|
|
| ## License |
|
|
| MIT. Base models: `google-t5/t5-small` (Apache-2.0) and |
| `uer/t5-small-chinese-cluecorpussmall` (Apache-2.0). |
|
|