ktextaug
Data augmentation Toolkit for Korean text. It provides transformative text augmentation methods. We will release generative text augmentation methods (mid of April, hopefully)
νκ΅μ΄ ν μ€νΈ μ¦κ° κΈ°λ²μ λͺ¨μλ ν¨ν€μ§μ λλ€. νμ¬λ λ³νμ ν μ€νΈ μ¦κ°κΈ°λ²λ§μ ꡬνν΄λμμΌλ©°, μμ±μ ν μ€νΈ μ¦κ°κΈ°λ² λͺ¨λΈ λν μΆκ°λ μμ μ λλ€. transformers ν¨ν€μ§ λ΄λΆλ₯Ό μ°Έκ³ νλ©΄μ λ§λ€κ³ μμ΅λλ€.
νμ¬ λ²μ Ό: 0.1.9
- TextAugmentation() μ ν΅ν΄ bulk, μ¦ λλμ λ°μ΄ν°λ₯Ό multiprocessing νλλ‘ κ΅¬νλμμ΅λλ€.
- multiprocessing μ΄ κ°λ₯νλλ‘ μ½λλ₯Ό μμ νμ΅λλ€.
- λ Έμ΄μ¦κ° ν¬ν¨λ vocabμ κ°μ§ κΈ°λ³Έ subword tokenizerκ³Ό λ€λ₯Έ ν ν¬λμ΄μ λ€μ λ§λ€μμ΅λλ€.
μΌμ
- 4μ λ§ : μμ± λͺ¨λΈ μΆκ° (μλ μ΄μ ν΄κ²° νμ)
- 5μ : ν μ€νΈ λ° μ²« λ²μ§Έ 곡μ λ¦΄λ¦¬μ¦ ?
Installation
Prerequisites
-
Python >= 3.6
-
Beautifulsoup4>=4.6.0 # for synonym search
-
Googletrans==3.1.0a0 # for backtranslation
-
konlpy>=0.5.2 # for Mecab tokenizer
-
PyKomoran>=0.1.5 # for Komoran tokenizer
-
transformers>=2.6.0 # for subword tokenizer
μμ λ₯Ό ν μ€νΈνκΈ° μν΄μ pandas, parmap μ΄ νμν μ μμ΅λλ€.
command line μ€μΉ μμ:
pip install ktextaug
build from source(latest):
git clone https://github.com/jucho2725/ktextaug.git
python setup.py
Getting Started
ktextaugλ₯Ό μ¬μ©νλ κ°λ¨ν μμ μ λλ€.
ν¨ν€μ§ 0.1.9 λ²μ ΌλΆν΄ κΈ°λ³Έμ μΌλ‘ TextAugmentation() μ μ¬μ©νμ¬ μ²λ¦¬νλ κ²μ κΆμ₯ν©λλ€. multiprocessing μ μ΄μ©νμ¬ λμ©λμ λ°μ΄ν°λ₯Ό λΉ λ₯΄κ² μ²λ¦¬ν μ μλλ‘ λ§λ€μμ΅λλ€.
from ktextaug import TextAugmentation
sample_text = 'λ¬λ¦¬λ κΈ°μ°¨ μμ μ€λ¦½μ μλ€. λ―Έκ΅μ μ¬ν μ΄λκ°μ΄μ μμ¬νμμΈ νμλ μ§μ΄ λ¨κΈ΄ 격μΈμ΄λ€.'
sample_texts = ['νλ‘κ·Έλ¨ κ°λ°μ΄ λλκ³ μλΉμ€κ° μ§νλλ€.', 'λμλ§μ λ³΄κ³ μΆλ€λ©΄ --helpλ₯Ό μ
λ ₯νλ©΄ λλ€.']
agent = TextAugmentation(tokenize_fn="mecab")
print(agent.generate(sample_text)) # default is back_translation
ν¨μλ₯Ό μ§μ λΆλ¬μ€λ κ² λν κ°λ₯ν©λλ€.
from ktextaug import random_swap
text = "μ΄ λ¬Έμ₯μ λ³νμ λ°μ΄ν° μ¦κ°κΈ°λ²μ μμ λ¬Έμ₯μ
λλ€."
tokenizer = bring_it_your_own # ν ν¬λμ΄μ λ μ΄λ€ ν ν¬λμ΄μ λ₯Ό μ¬μ©νλλΌλ μκ΄μμ΅λλ€.
tokens = tokenizer.tokenize(text)
result = random_swap(tokens, 2) # ν ν° μνμ€ λ΄ λ λ¨μ΄μ μμΉλ₯Ό λ³κ²½νλ μμ
(random swap)μ 2ν μνν©λλ€.
print(result)
>>> ['μ΄', 'λ¬Έμ₯', 'μ', 'μμ', 'μ ', 'λ°μ΄ν°', 'κΈ°λ²', 'μ¦κ°', 'μ', 'λ¬Έμ₯', 'λ³ν', 'μ
λλ€', '.']
ν¨ν€μ§μμ μ 곡νλ ννμ λΆμκΈ°(ν ν¬λμ΄μ ) λͺ¨λμ mecab λλ komoranμ λΆλ¬μ΅λλ€. λ ν ν¬λμ΄μ λͺ¨λ λ³λμ μ€μΉκ³Όμ μ΄ νμνλ μλ λ§ν¬λ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ. μνλ ν ν¬λμ΄μ λ₯Ό μ¬μ©ν μλ μμ΅λλ€.
from ktextaug.tokenization_utils import get_tokenize_fn
from ktextaug import random_swap
# get_tokenize_fn ν¨μμ μ¬μ©μμ
tokenize_fn = get_tokenize_fn("mecab")
# OR you can use your own tokenizer
result = random_swap(text_or_words=text,
tokenize_fn=lambda x: x.split(" "), # lambdaλ‘λ μ¬μ© κ°λ₯
rng=Random(seed=2021),
n_swap=2)
More examples
- How_to_use μ κΈ°λ³Έμ μΈ μ¬μ©λ²κ³Ό λ Έμ΄μ¦ μμ±κ³Ό κ΄λ ¨λ μμμ λν΄ μ νμμ΅λλ€.
λ μμΈν μ¬μ© μμλ examples ν΄λ λ΄μ μμλ€μ νμΈν΄μ£ΌμΈμ.(0.1.8 μμ ν μ€νΈ)
-
summarize.py
: κ° κΈ°λ²μ μ¬μ©ν μμλ₯Ό 보μ¬μ€λλ€. -
multiprocessing.py
: .csv νμμ λ°μ΄ν°μ μ λ°μ μ¦κ°λ λ°μ΄ν°μ νμΌμ μ 곡ν΄μ€λλ€. μκ°μ΄ λ§μ΄ μμλλ κΈ°λ²λ€μ multiprocessing μ μ΄μ©νμ¬ μ²λ¦¬νμ΅λλ€.
Test it with sample data(0.1.8 μμ ν μ€νΈ)
λ°μ΄ν° μ¦κ°κΈ°λ²μ μ±λ₯μ νμΈνμ€ μ μλλ‘, λ§€μ° μμ λ°μ΄ν°μ
μ examples/data/
μ μ¬λ €λμμ΅λλ€.
μ΄ λ°μ΄ν°λ nsmc λ°μ΄ν°μ
μ νλ ¨ λ°μ΄ν°μ
μ 1000κ° λλ€ μνλ§ν κ²°κ³Όμ
λλ€.
(μΆμ²: https://github.com/e9t/nsmc)
ν΄λΉ λ°μ΄ν°λ₯Ό κ°μ§κ³ μ¦κ°κΈ°λ²μ μ μ©ν΄μ κ²°κ³Όμ μ°¨μ΄λ₯Ό νμΈν΄μ£ΌμΈμ!
(.csv νμΌμ λ€λ£¨λ μμλ multiprocessing.py
μμ νμΈ κ°λ₯ν©λλ€)
Things to know
- λ Έμ΄μ¦ μμ±μ @hkjeon13(μ νκ·) μ λ Έμ΄μ¦ μμ±μ λ°λμ΅λλ€
https://github.com/hkjeon13/noising-korean
- νκ΅μ΄ λΆμ©μ΄ μ¬μ μ κ²½μ° λ€μ λ§ν¬μ νμΌμ κ·Έλλ‘ κ°μ Έμμ΅λλ€. https://github.com/stopwords-iso/stopwords-ko/blob/master/stopwords-ko.txt
Contribution
μ΄ ν¨ν€μ§λ μ±κ· κ΄λνκ΅ μ μ€κ²½ κ΅μλ μ°κ΅¬μ€ ING-lab μμ μ§νν νλ‘μ νΈλ‘ μμλμμΌλ©°, λΉμ μ°Έμ¬ν μ¬λλ€μ λ€μκ³Ό κ°μ΅λλ€.
- μ‘°μ§μ±, μ νκ·, λ°μ’ ν, μ΄μ ν, μ λ―Όμ
보λ€μνΌ μμ§ ν¨ν€μ§μ λΆμ‘±ν λΆλΆμ΄ λ§μ΅λλ€. Contributorκ° λκ³ μΆμΌμλ€λ©΄, μΈμ λ issue, PR, λ±μ λΆνλ립λλ€ :)
Contact: cju2725@gmail.com
TO DO
- Generative Models μΆκ° μμ (4μ λ§)
- synonym search λμμ΄ λͺ»μ°Ύμμ λ¬Έμ ν΄κ²°
- documentation μμ±
- pkg_resources μ±λ₯ μ€λ²ν€λ κ΄λ ¨ μ΄μ https://docs.python.org/ko/3/library/importlib.html#module-importlib.resources
Acknowledgement
βμ΄ κΈ°μ μ κ³ΌνκΈ°μ μ 보ν΅μ λΆ λ° μ 보ν΅μ κΈ°ννκ°μμ μΈκ³΅μ§λ₯ν΅μ¬μΈμ¬μμ±μ¬μ (μΈκ³΅μ§λ₯λνμμ§μ(μ±κ· κ΄λνκ΅), No.2019-0-00421)μ μ°κ΅¬κ²°κ³Όλ‘ κ°λ°ν κ²°κ³Όλ¬Όμ λλ€.β