MCPcopy Create free account
hub / github.com/FireRedTeam/FireRedASR / LlmTokenizerWrapper

Class LlmTokenizerWrapper

fireredasr/tokenizer/llm_tokenizer.py:11–105  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9
10
11class LlmTokenizerWrapper:
12 @classmethod
13 def build_llm_tokenizer(cls, llm_path, use_flash_attn=False):
14 tokenizer = AutoTokenizer.from_pretrained(llm_path)
15 if use_flash_attn:
16 tokenizer.padding_side = "left"
17 else:
18 tokenizer.padding_side = "right"
19 special_tokens_dict = {"additional_special_tokens": [DEFAULT_SPEECH_TOKEN]}
20 tokenizer.add_special_tokens(special_tokens_dict)
21 return tokenizer
22
23 @classmethod
24 def clean_text(cls, origin_text):
25 """remove punc, remove space between Chinese and keep space between English"""
26 # remove punc
27 text = re.sub("[,。?!,\.!?《》()\·“”、\\/]", "", origin_text)
28 # merge space
29 text = re.sub("\s+", " ", text)
30
31 # remove space between Chinese and keep space between English
32 pattern = re.compile(r'([\u3400-\u4dbf\u4e00-\u9fff])') # Chinese
33 parts = pattern.split(text.strip())
34 parts = [p for p in parts if len(p.strip()) > 0]
35 text = "".join(parts)
36 text = text.strip()
37
38 text = text.lower()
39 return text
40
41 @classmethod
42 def preprocess_texts(cls, origin_texts, tokenizer, max_len, decode=False):
43 messages = []
44 clean_texts = []
45 for i, origin_text in enumerate(origin_texts):
46 text = cls.clean_text(origin_text)
47 clean_texts.append(text)
48 text = text if not decode else ""
49 message = [
50 {"role": "user", "content": f"{DEFAULT_SPEECH_TOKEN}请转写音频为文字"},
51 {"role": "assistant", "content": text},
52 ]
53 messages.append(message)
54
55 texts = []
56 if not decode:
57 TEMPLATE = "{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content']}}{% if loop.last %}{{ '<|im_end|>'}}{% else %}{{ '<|im_end|>\n' }}{% endif %}{% endfor %}"
58 else:
59 TEMPLATE = "{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content']}}{% if loop.last %}{{''}}{% else %}{{ '<|im_end|>\n' }}{% endif %}{% endfor %}"
60 for i, msg in enumerate(messages):
61 texts.append(
62 tokenizer.apply_chat_template(
63 msg,
64 tokenize=True,
65 chat_template=TEMPLATE,
66 add_generation_prompt=False,
67 padding="longest",
68 max_length=max_len,

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected