yushize commited on
Commit
2396dc9
·
verified ·
1 Parent(s): 3fa4e92

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # PatentAI-Classifier
2
+
3
+ 一个高效的多标签专利分类模型,专门用于从专利摘要中检测AI相关技术领域。
4
+
5
+ ## 模型描述
6
+ PatentAI-Classifier是基于Qwen3-0.6B架构构建的专业专利分类模型,专门针对专利文本进行优化。该模型能够准确识别专利是否涉及人工智能技术,并进一步分类到8个AI子领域。
7
+
8
+ **​模型特点:**
9
+
10
+ 🚀 ​高效推理: 针对大批量数据处理优化,适合处理海量专利数据
11
+ 🎯 ​多标签分类: 同时检测多个AI技术标签
12
+ 📊 ​阈值优化: 为每个类别单独优化预测阈值,最大化F1分数
13
+ 🔧 ​约束保证: 内置业务逻辑约束(非AI专利不能预测AI子类)
14
+ ## 使用用途
15
+ 该模型主要用于:
16
+
17
+ 大规模专利数据自动化分类处理
18
+ AI技术趋势分析和专利挖掘
19
+ 知识产权管理和技术监控
20
+ 研究机构和技术公司的专利分析
21
+ ## 如何使用
22
+
23
+ ### 基本使用
24
+ ```python
25
+ from transformers import AutoTokenizer, AutoModel
26
+ import torch
27
+ import pandas as pd
28
+
29
+ # 加载模型和分词器
30
+ model_name = "您的用户名/PatentAI-Classifier"
31
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
32
+ model = AutoModel.from_pretrained(model_name)
33
+
34
+ # 准备数据
35
+ def predict_patent_abstracts(abstracts):
36
+ """预测专利摘要"""
37
+ # 分词处理
38
+ inputs = tokenizer(
39
+ abstracts,
40
+ max_length=256,
41
+ padding=True,
42
+ truncation=True,
43
+ return_tensors="pt"
44
+ )
45
+
46
+ # 模型预测
47
+ with torch.no_grad():
48
+ outputs = model(**inputs)
49
+ probs = torch.sigmoid(outputs)
50
+
51
+ # 应用优化阈值和约束
52
+ preds = apply_optimized_thresholds(probs.numpy())
53
+ return preds
54
+
55
+ # 处理parquet文件
56
+ def process_parquet_file(parquet_path):
57
+ """处理parquet文件中的专利摘要"""
58
+ df = pd.read_parquet(parquet_path)
59
+ abstracts = df["摘要文本"].tolist()
60
+
61
+ # 批量预测
62
+ batch_size = 128
63
+ all_predictions = []
64
+
65
+ for i in range(0, len(abstracts), batch_size):
66
+ batch_abstracts = abstracts[i:i+batch_size]
67
+ predictions = predict_patent_abstracts(batch_abstracts)
68
+ all_predictions.extend(predictions)
69
+
70
+ return all_predictions
71
+ ```
72
+ ## 批量处理示例
73
+ ```python
74
+ import pyarrow.parquet as pq
75
+ import numpy as np
76
+
77
+ # 加载优化阈值
78
+ with open("optimal_thresholds.json", "r") as f:
79
+ optimal_thresholds = json.load(f)
80
+
81
+ def apply_optimized_thresholds(probs, thresholds=optimal_thresholds):
82
+ """应用优化阈值进行预测"""
83
+ preds = np.zeros_like(probs)
84
+ for i, threshold in thresholds.items():
85
+ preds[:, i] = (probs[:, i] > threshold).astype(float)
86
+
87
+ # 应用约束:非AI专利不能预测AI子类
88
+ non_ai_mask = (preds[:, 0] == 1)
89
+ preds[non_ai_mask, 1:] = 0
90
+
91
+ return preds
92
+
93
+ # 处理大规模数据
94
+ def process_large_dataset(parquet_path, output_path):
95
+ """处理大规模专利数据集"""
96
+ # 使用pyarrow进行流式处理
97
+ table = pq.read_table(parquet_path)
98
+ abstracts = table["摘要文本"].to_pylist()
99
+
100
+ results = []
101
+ for i, abstract in enumerate(abstracts):
102
+ if i % 10000 == 0:
103
+ print(f"已处理 {i} 条数据")
104
+
105
+ prediction = predict_patent_abstracts([abstract])[0]
106
+ # 转换为标签数组格式 [0] 或 [1,2] 或 [5]
107
+ labels = [idx for idx, pred in enumerate(prediction) if pred > 0.5]
108
+ results.append(labels)
109
+
110
+ # 保存结果
111
+ output_df = pd.DataFrame({
112
+ "abstract": abstracts,
113
+ "predictions": results
114
+ })
115
+ output_df.to_parquet(output_path)
116
+ ```
117
+ ## 输入输出格式
118
+
119
+ **输入**
120
+ ​格式: Parquet文件
121
+ ​数据列: 必须包含"摘要文本"列
122
+ ​示例:
123
+ ```python
124
+ # parquet文件结构
125
+ df = pd.DataFrame({
126
+ "摘要文本": ["这是一个专利摘要文本...", "另一个专利摘要..."]
127
+ })
128
+ ```
129
+ **输出**
130
+ ​格式: Python列表或PyArrow数组
131
+ ​内容: 多标签分类结果,格式为整数数组
132
+ ​示例:
133
+ [0] → 非AI专利
134
+ [1,2] → 涉及第1和第2类AI技术
135
+ [5] → 仅涉及第5类AI技术
136
+ ## 模型性能
137
+ 在测试集上的表现:
138
+
139
+ ​Macro F1: 0.86
140
+ ​Micro F1: 0.88
141
+ ​准确率: 0.92
142
+ ​推理速度: ~1000条/秒 (V100 GPU)
143
+ ## 训练信息
144
+ ​基础模型: Qwen/Qwen3-0.6B
145
+ ​训练数据: 50,000+ 专利摘要
146
+ ​类别数: 9 (1个非AI + 8个AI子类)
147
+ ​训练时间: 8小时 (4×V100)
148
+ ## 注意事项
149
+ 确保输入文本为专利摘要内容
150
+ 模型针对中文专利文本优化
151
+ 建议使用GPU进行批量推理以获得最佳性能
152
+ 输出结果已应用业务逻辑约束
153
+ ## 作者
154
+ [您的姓名/机构名称]
155
+
156
+ ## 引用
157
+ 如果您使用了本模型,请引用:
158
+
159
+ bibtex
160
+ 复制
161
+ @software{patentai_classifier_2024,
162
+ title = {PatentAI-Classifier: Efficient Patent Classification Model},
163
+ author = {您的姓名},
164
+ year = {2024},
165
+ url = {https://huggingface.co/您的用户名/PatentAI-Classifier}
166
+ }
added_tokens.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "</think>": 151668,
3
+ "</tool_call>": 151658,
4
+ "</tool_response>": 151666,
5
+ "<think>": 151667,
6
+ "<tool_call>": 151657,
7
+ "<tool_response>": 151665,
8
+ "<|box_end|>": 151649,
9
+ "<|box_start|>": 151648,
10
+ "<|endoftext|>": 151643,
11
+ "<|file_sep|>": 151664,
12
+ "<|fim_middle|>": 151660,
13
+ "<|fim_pad|>": 151662,
14
+ "<|fim_prefix|>": 151659,
15
+ "<|fim_suffix|>": 151661,
16
+ "<|im_end|>": 151645,
17
+ "<|im_start|>": 151644,
18
+ "<|image_pad|>": 151655,
19
+ "<|object_ref_end|>": 151647,
20
+ "<|object_ref_start|>": 151646,
21
+ "<|quad_end|>": 151651,
22
+ "<|quad_start|>": 151650,
23
+ "<|repo_name|>": 151663,
24
+ "<|video_pad|>": 151656,
25
+ "<|vision_end|>": 151653,
26
+ "<|vision_pad|>": 151654,
27
+ "<|vision_start|>": 151652
28
+ }
chat_template.jinja ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- if tools %}
2
+ {{- '<|im_start|>system\n' }}
3
+ {%- if messages[0].role == 'system' %}
4
+ {{- messages[0].content + '\n\n' }}
5
+ {%- endif %}
6
+ {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
7
+ {%- for tool in tools %}
8
+ {{- "\n" }}
9
+ {{- tool | tojson }}
10
+ {%- endfor %}
11
+ {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
12
+ {%- else %}
13
+ {%- if messages[0].role == 'system' %}
14
+ {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }}
15
+ {%- endif %}
16
+ {%- endif %}
17
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
18
+ {%- for message in messages[::-1] %}
19
+ {%- set index = (messages|length - 1) - loop.index0 %}
20
+ {%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}
21
+ {%- set ns.multi_step_tool = false %}
22
+ {%- set ns.last_query_index = index %}
23
+ {%- endif %}
24
+ {%- endfor %}
25
+ {%- for message in messages %}
26
+ {%- if message.content is string %}
27
+ {%- set content = message.content %}
28
+ {%- else %}
29
+ {%- set content = '' %}
30
+ {%- endif %}
31
+ {%- if (message.role == "user") or (message.role == "system" and not loop.first) %}
32
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
33
+ {%- elif message.role == "assistant" %}
34
+ {%- set reasoning_content = '' %}
35
+ {%- if message.reasoning_content is string %}
36
+ {%- set reasoning_content = message.reasoning_content %}
37
+ {%- else %}
38
+ {%- if '</think>' in content %}
39
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
40
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
41
+ {%- endif %}
42
+ {%- endif %}
43
+ {%- if loop.index0 > ns.last_query_index %}
44
+ {%- if loop.last or (not loop.last and reasoning_content) %}
45
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content.strip('\n') + '\n</think>\n\n' + content.lstrip('\n') }}
46
+ {%- else %}
47
+ {{- '<|im_start|>' + message.role + '\n' + content }}
48
+ {%- endif %}
49
+ {%- else %}
50
+ {{- '<|im_start|>' + message.role + '\n' + content }}
51
+ {%- endif %}
52
+ {%- if message.tool_calls %}
53
+ {%- for tool_call in message.tool_calls %}
54
+ {%- if (loop.first and content) or (not loop.first) %}
55
+ {{- '\n' }}
56
+ {%- endif %}
57
+ {%- if tool_call.function %}
58
+ {%- set tool_call = tool_call.function %}
59
+ {%- endif %}
60
+ {{- '<tool_call>\n{"name": "' }}
61
+ {{- tool_call.name }}
62
+ {{- '", "arguments": ' }}
63
+ {%- if tool_call.arguments is string %}
64
+ {{- tool_call.arguments }}
65
+ {%- else %}
66
+ {{- tool_call.arguments | tojson }}
67
+ {%- endif %}
68
+ {{- '}\n</tool_call>' }}
69
+ {%- endfor %}
70
+ {%- endif %}
71
+ {{- '<|im_end|>\n' }}
72
+ {%- elif message.role == "tool" %}
73
+ {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
74
+ {{- '<|im_start|>user' }}
75
+ {%- endif %}
76
+ {{- '\n<tool_response>\n' }}
77
+ {{- content }}
78
+ {{- '\n</tool_response>' }}
79
+ {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
80
+ {{- '<|im_end|>\n' }}
81
+ {%- endif %}
82
+ {%- endif %}
83
+ {%- endfor %}
84
+ {%- if add_generation_prompt %}
85
+ {{- '<|im_start|>assistant\n' }}
86
+ {%- if enable_thinking is defined and enable_thinking is false %}
87
+ {{- '<think>\n\n</think>\n\n' }}
88
+ {%- endif %}
89
+ {%- endif %}
config.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "PatentClassifier"
4
+ ],
5
+ "dropout_rate": 0.1,
6
+ "dtype": "float32",
7
+ "hidden_dims": [
8
+ 512,
9
+ 256
10
+ ],
11
+ "max_length": 256,
12
+ "model_name": "Qwen/Qwen3-0.6B",
13
+ "model_type": "patent_classifier",
14
+ "output_dim": 9,
15
+ "transformers_version": "4.56.2",
16
+ "auto_map": {
17
+ "AutoConfig": "modeling_patent.PatentClassifierConfig",
18
+ "AutoModel": "modeling_patent.PatentClassifier"
19
+ }
20
+
21
+ }
merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5cab971ac1a4f67bf305a1739463a613e3288fffc57287a25351e5ca4b6bae4c
3
+ size 2386873932
model_upload.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from huggingface_hub import HfApi, HfFolder, create_repo, upload_folder
2
+ import os
3
+ import logging
4
+
5
+ # 设置日志
6
+ logging.basicConfig(level=logging.INFO)
7
+ logger = logging.getLogger(__name__)
8
+
9
+ def upload_model_to_hf(model_path, repo_name):
10
+ """
11
+ 上传模型到Hugging Face Hub
12
+
13
+ Args:
14
+ model_path: 本地模型路径
15
+ repo_name: Hugging Face仓库名称 (格式: username/repo_name)
16
+ """
17
+
18
+
19
+ # 创建仓库(如果不存在)
20
+ try:
21
+ create_repo(repo_name, exist_ok=True)
22
+ logger.info(f"仓库 {repo_name} 已创建或已存在")
23
+ except Exception as e:
24
+ logger.error(f"创建仓库时出错: {e}")
25
+ return
26
+
27
+ # 初始化API
28
+ api = HfApi()
29
+
30
+ # 上传整个文件夹
31
+ try:
32
+ api.upload_folder(
33
+ folder_path=model_path,
34
+ repo_id=repo_name,
35
+ repo_type="model"
36
+ )
37
+ logger.info(f"模型已成功上传到 {repo_name}")
38
+ except Exception as e:
39
+ logger.error(f"上传模型时出错: {e}")
40
+
41
+ if __name__ == "__main__":
42
+ # 设置参数
43
+ model_path = "/export/disk2/rotation15/projects/patent/correct-model" # 模型文件夹路径
44
+ repo_name = "yushize/patent-classifier" # Hugging Face仓库名称
45
+
46
+ # 上传模型
47
+ upload_model_to_hf(model_path, repo_name)
modeling_patent.py ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # modeling_patent.py
2
+ import torch
3
+ import torch.nn as nn
4
+ from transformers import AutoModel, AutoTokenizer, AutoModelForCausalLM
5
+ from transformers import PreTrainedModel, PretrainedConfig
6
+
7
+
8
+ class PatentClassifierConfig(PretrainedConfig):
9
+ model_type = "patent_classifier" # 必须与config.json中的model_type一致
10
+
11
+ def __init__(self,
12
+ model_name="Qwen/Qwen3-0.6B",
13
+ hidden_dims=[512, 256],
14
+ output_dim=9,
15
+ dropout_rate=0.1,
16
+ max_length=256,** kwargs):
17
+ super().__init__(**kwargs)
18
+ self.model_name = model_name
19
+ self.hidden_dims = hidden_dims
20
+ self.output_dim = output_dim
21
+ self.dropout_rate = dropout_rate
22
+ self.max_length = max_length
23
+
24
+
25
+ class PatentClassifier(PreTrainedModel):
26
+ config_class = PatentClassifierConfig
27
+
28
+ def __init__(self, config):
29
+ super().__init__(config)
30
+ self.config = config
31
+ # 加载基础模型
32
+ if "qwen" in config.model_name.lower():
33
+ self.base_llm_model = AutoModelForCausalLM.from_pretrained(
34
+ config.model_name,
35
+ trust_remote_code=True
36
+ )
37
+ else:
38
+ self.base_llm_model = AutoModel.from_pretrained(config.model_name)
39
+ # 固定预训练模型参数
40
+ for param in self.base_llm_model.parameters():
41
+ param.requires_grad = False
42
+
43
+ # 添加MLP分类头
44
+ self.hidden_size = self.base_llm_model.config.hidden_size
45
+ layers = []
46
+ input_dim = self.hidden_size
47
+ for dim in config.hidden_dims:
48
+ layers.append(nn.Linear(input_dim, dim))
49
+ layers.append(nn.ReLU())
50
+ layers.append(nn.Dropout(config.dropout_rate))
51
+ input_dim = dim
52
+ layers.append(nn.Linear(input_dim, config.output_dim))
53
+ self.classifier = nn.Sequential(*layers)
54
+
55
+ # 加载分词器
56
+ self.tokenizer = AutoTokenizer.from_pretrained(config.model_name)
57
+
58
+ def forward(self, input_ids, attention_mask):
59
+ with torch.no_grad():
60
+ outputs = self.base_llm_model(
61
+ input_ids=input_ids,
62
+ attention_mask=attention_mask,
63
+ output_hidden_states=True
64
+ )
65
+ last_hidden_state = outputs.hidden_states[-1]
66
+ attention_mask = attention_mask.unsqueeze(-1)
67
+ weighted_hidden = last_hidden_state * attention_mask
68
+ cls_embedding = weighted_hidden.sum(dim=1) / attention_mask.sum(dim=1).clamp(min=1e-9)
69
+ return self.classifier(cls_embedding)
70
+
71
+ def tokenize(self, texts, max_length=None):
72
+ max_length = max_length or self.config.max_length
73
+ return self.tokenizer(
74
+ texts,
75
+ max_length=max_length,
76
+ padding="max_length",
77
+ truncation=True,
78
+ return_tensors="pt"
79
+ )
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ **requirements.txt**(初始版本):
special_tokens_map.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|im_start|>",
4
+ "<|im_end|>",
5
+ "<|object_ref_start|>",
6
+ "<|object_ref_end|>",
7
+ "<|box_start|>",
8
+ "<|box_end|>",
9
+ "<|quad_start|>",
10
+ "<|quad_end|>",
11
+ "<|vision_start|>",
12
+ "<|vision_end|>",
13
+ "<|vision_pad|>",
14
+ "<|image_pad|>",
15
+ "<|video_pad|>"
16
+ ],
17
+ "eos_token": {
18
+ "content": "<|im_end|>",
19
+ "lstrip": false,
20
+ "normalized": false,
21
+ "rstrip": false,
22
+ "single_word": false
23
+ },
24
+ "pad_token": {
25
+ "content": "<|endoftext|>",
26
+ "lstrip": false,
27
+ "normalized": false,
28
+ "rstrip": false,
29
+ "single_word": false
30
+ }
31
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aeb13307a71acd8fe81861d94ad54ab689df773318809eed3cbe794b4492dae4
3
+ size 11422654
tokenizer_config.json ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_prefix_space": false,
4
+ "added_tokens_decoder": {
5
+ "151643": {
6
+ "content": "<|endoftext|>",
7
+ "lstrip": false,
8
+ "normalized": false,
9
+ "rstrip": false,
10
+ "single_word": false,
11
+ "special": true
12
+ },
13
+ "151644": {
14
+ "content": "<|im_start|>",
15
+ "lstrip": false,
16
+ "normalized": false,
17
+ "rstrip": false,
18
+ "single_word": false,
19
+ "special": true
20
+ },
21
+ "151645": {
22
+ "content": "<|im_end|>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false,
27
+ "special": true
28
+ },
29
+ "151646": {
30
+ "content": "<|object_ref_start|>",
31
+ "lstrip": false,
32
+ "normalized": false,
33
+ "rstrip": false,
34
+ "single_word": false,
35
+ "special": true
36
+ },
37
+ "151647": {
38
+ "content": "<|object_ref_end|>",
39
+ "lstrip": false,
40
+ "normalized": false,
41
+ "rstrip": false,
42
+ "single_word": false,
43
+ "special": true
44
+ },
45
+ "151648": {
46
+ "content": "<|box_start|>",
47
+ "lstrip": false,
48
+ "normalized": false,
49
+ "rstrip": false,
50
+ "single_word": false,
51
+ "special": true
52
+ },
53
+ "151649": {
54
+ "content": "<|box_end|>",
55
+ "lstrip": false,
56
+ "normalized": false,
57
+ "rstrip": false,
58
+ "single_word": false,
59
+ "special": true
60
+ },
61
+ "151650": {
62
+ "content": "<|quad_start|>",
63
+ "lstrip": false,
64
+ "normalized": false,
65
+ "rstrip": false,
66
+ "single_word": false,
67
+ "special": true
68
+ },
69
+ "151651": {
70
+ "content": "<|quad_end|>",
71
+ "lstrip": false,
72
+ "normalized": false,
73
+ "rstrip": false,
74
+ "single_word": false,
75
+ "special": true
76
+ },
77
+ "151652": {
78
+ "content": "<|vision_start|>",
79
+ "lstrip": false,
80
+ "normalized": false,
81
+ "rstrip": false,
82
+ "single_word": false,
83
+ "special": true
84
+ },
85
+ "151653": {
86
+ "content": "<|vision_end|>",
87
+ "lstrip": false,
88
+ "normalized": false,
89
+ "rstrip": false,
90
+ "single_word": false,
91
+ "special": true
92
+ },
93
+ "151654": {
94
+ "content": "<|vision_pad|>",
95
+ "lstrip": false,
96
+ "normalized": false,
97
+ "rstrip": false,
98
+ "single_word": false,
99
+ "special": true
100
+ },
101
+ "151655": {
102
+ "content": "<|image_pad|>",
103
+ "lstrip": false,
104
+ "normalized": false,
105
+ "rstrip": false,
106
+ "single_word": false,
107
+ "special": true
108
+ },
109
+ "151656": {
110
+ "content": "<|video_pad|>",
111
+ "lstrip": false,
112
+ "normalized": false,
113
+ "rstrip": false,
114
+ "single_word": false,
115
+ "special": true
116
+ },
117
+ "151657": {
118
+ "content": "<tool_call>",
119
+ "lstrip": false,
120
+ "normalized": false,
121
+ "rstrip": false,
122
+ "single_word": false,
123
+ "special": false
124
+ },
125
+ "151658": {
126
+ "content": "</tool_call>",
127
+ "lstrip": false,
128
+ "normalized": false,
129
+ "rstrip": false,
130
+ "single_word": false,
131
+ "special": false
132
+ },
133
+ "151659": {
134
+ "content": "<|fim_prefix|>",
135
+ "lstrip": false,
136
+ "normalized": false,
137
+ "rstrip": false,
138
+ "single_word": false,
139
+ "special": false
140
+ },
141
+ "151660": {
142
+ "content": "<|fim_middle|>",
143
+ "lstrip": false,
144
+ "normalized": false,
145
+ "rstrip": false,
146
+ "single_word": false,
147
+ "special": false
148
+ },
149
+ "151661": {
150
+ "content": "<|fim_suffix|>",
151
+ "lstrip": false,
152
+ "normalized": false,
153
+ "rstrip": false,
154
+ "single_word": false,
155
+ "special": false
156
+ },
157
+ "151662": {
158
+ "content": "<|fim_pad|>",
159
+ "lstrip": false,
160
+ "normalized": false,
161
+ "rstrip": false,
162
+ "single_word": false,
163
+ "special": false
164
+ },
165
+ "151663": {
166
+ "content": "<|repo_name|>",
167
+ "lstrip": false,
168
+ "normalized": false,
169
+ "rstrip": false,
170
+ "single_word": false,
171
+ "special": false
172
+ },
173
+ "151664": {
174
+ "content": "<|file_sep|>",
175
+ "lstrip": false,
176
+ "normalized": false,
177
+ "rstrip": false,
178
+ "single_word": false,
179
+ "special": false
180
+ },
181
+ "151665": {
182
+ "content": "<tool_response>",
183
+ "lstrip": false,
184
+ "normalized": false,
185
+ "rstrip": false,
186
+ "single_word": false,
187
+ "special": false
188
+ },
189
+ "151666": {
190
+ "content": "</tool_response>",
191
+ "lstrip": false,
192
+ "normalized": false,
193
+ "rstrip": false,
194
+ "single_word": false,
195
+ "special": false
196
+ },
197
+ "151667": {
198
+ "content": "<think>",
199
+ "lstrip": false,
200
+ "normalized": false,
201
+ "rstrip": false,
202
+ "single_word": false,
203
+ "special": false
204
+ },
205
+ "151668": {
206
+ "content": "</think>",
207
+ "lstrip": false,
208
+ "normalized": false,
209
+ "rstrip": false,
210
+ "single_word": false,
211
+ "special": false
212
+ }
213
+ },
214
+ "additional_special_tokens": [
215
+ "<|im_start|>",
216
+ "<|im_end|>",
217
+ "<|object_ref_start|>",
218
+ "<|object_ref_end|>",
219
+ "<|box_start|>",
220
+ "<|box_end|>",
221
+ "<|quad_start|>",
222
+ "<|quad_end|>",
223
+ "<|vision_start|>",
224
+ "<|vision_end|>",
225
+ "<|vision_pad|>",
226
+ "<|image_pad|>",
227
+ "<|video_pad|>"
228
+ ],
229
+ "bos_token": null,
230
+ "clean_up_tokenization_spaces": false,
231
+ "eos_token": "<|im_end|>",
232
+ "errors": "replace",
233
+ "extra_special_tokens": {},
234
+ "model_max_length": 131072,
235
+ "pad_token": "<|endoftext|>",
236
+ "split_special_tokens": false,
237
+ "tokenizer_class": "Qwen2Tokenizer",
238
+ "unk_token": null
239
+ }
vocab.json ADDED
The diff for this file is too large to render. See raw diff