Midsummra commited on
Commit
7802eae
·
verified ·
1 Parent(s): 91b0d25

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +38 -19
README.md CHANGED
@@ -14,7 +14,6 @@ CNMBert
14
  [Github](https://github.com/IgarashiAkatuki/zh-CN-Multi-Mask-Bert)
15
 
16
  # zh-CN-Multi-Mask-Bert (CNMBert)
17
-
18
  ![image](https://github.com/user-attachments/assets/a888fde7-6766-43f1-a753-810399418bda)
19
 
20
  ---
@@ -41,12 +40,12 @@ CNMBert
41
 
42
  ### CNMBert
43
 
44
- | Model | 模型权重 | Memory Usage (FP16) | QPS | MRR | Acc |
45
- | --------------- | ----------------------------------------------------------- | ------------------- | ----- | ----- | ----- |
46
- | CNMBert-Default | [Huggingface](https://huggingface.co/Midsummra/CNMBert) | 0.4GB | 12.56 | 58.88 | 49.13 |
47
- | CNMBert-MoE | [Huggingface](https://huggingface.co/Midsummra/CNMBert-MoE) | 0.8GB | 3.20 | 60.56 | 51.09 |
48
 
49
- * 所有模型均在相同的150万条wiki以及知乎语料下训练
50
  * QPS 为 queries per second (由于没有使用c重写predict所以现在性能很糟...)
51
  * MRR 为平均倒数排名(mean reciprocal rank)
52
  * Acc 为准确率(accuracy)
@@ -56,7 +55,7 @@ CNMBert
56
  ```python
57
  from transformers import AutoTokenizer, BertConfig
58
 
59
- from CustomBertModel import fixed_predict
60
  from MoELayer import BertWwmMoE
61
  ```
62
 
@@ -75,34 +74,54 @@ model = BertWwmMoE.from_pretrained('Midsummra/CNMBert-MoE', config=config).to('c
75
  预测词语
76
 
77
  ```python
78
- print(fixed_predict("我有两千kq", "kq", model, tokenizer)[:5])
79
- print(fixed_predict("快去给魔理沙看b吧", "b", model, tokenizer[:5]))
80
  ```
81
 
82
  > ['块钱', 1.2056937473156175], ['块前', 0.05837443749364857], ['开千', 0.0483869208528063], ['可千', 0.03996622172280445], ['口气', 0.037183335575008414]
83
 
84
  > ['病', 1.6893256306648254], ['吧', 0.1642467901110649], ['呗', 0.026976384222507477], ['包', 0.021441461518406868], ['报', 0.01396679226309061]
85
 
86
- ### 如何微调模型
87
 
88
- 请参考TrainExample.ipynb,在数据集的格式上,只要保证csv的第一列为要训练的语料即可。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
- ### Q&A
91
 
92
- Q: 这玩意的速度太慢啦!!!
93
 
94
- A: 已经有计划拿C重写predict了,,,
95
 
 
96
 
 
97
 
98
- Q: 这玩意的准确度好差啊
99
 
100
- A: 因为是在很小的数据集(200w)上进行的预训练,所以泛化能力很差很正常,,,可以在更大数据集或者更加细分的领域进行微调,具体微调方式和[Chinese-BERT-wwm](https://github.com/ymcui/Chinese-BERT-wwm)差别不大,只需要将`DataCollactor`替换为`CustomBertModel.py`中的`DataCollatorForMultiMask`。
101
 
102
  ### 引用
103
-
104
  如果您对CNMBert的具体实现感兴趣的话,可以参考
105
-
106
  ```
107
  @misc{feng2024cnmbertmodelhanyupinyin,
108
  title={CNMBert: A Model For Hanyu Pinyin Abbreviation to Character Conversion Task},
@@ -113,4 +132,4 @@ A: 因为是在很小的数据集(200w)上进行的预训练,所以泛化能
113
  primaryClass={cs.CL},
114
  url={https://arxiv.org/abs/2411.11770},
115
  }
116
- ```
 
14
  [Github](https://github.com/IgarashiAkatuki/zh-CN-Multi-Mask-Bert)
15
 
16
  # zh-CN-Multi-Mask-Bert (CNMBert)
 
17
  ![image](https://github.com/user-attachments/assets/a888fde7-6766-43f1-a753-810399418bda)
18
 
19
  ---
 
40
 
41
  ### CNMBert
42
 
43
+ | Model | 模型权重 | Memory Usage (FP16) | Model Size | QPS | MRR | Acc |
44
+ | --------------- | ----------------------------------------------------------- | ------------------- | ---------- | ----- | ----- | ----- |
45
+ | CNMBert-Default | [Huggingface](https://huggingface.co/Midsummra/CNMBert) | 0.4GB | 131M | 12.56 | 59.70 | 49.74 |
46
+ | CNMBert-MoE | [Huggingface](https://huggingface.co/Midsummra/CNMBert-MoE) | 0.8GB | 329M | 3.20 | 61.53 | 51.86 |
47
 
48
+ * 所有模型均在相同的200万条wiki以及知乎语料下训练
49
  * QPS 为 queries per second (由于没有使用c重写predict所以现在性能很糟...)
50
  * MRR 为平均倒数排名(mean reciprocal rank)
51
  * Acc 为准确率(accuracy)
 
55
  ```python
56
  from transformers import AutoTokenizer, BertConfig
57
 
58
+ from CustomBertModel import predict
59
  from MoELayer import BertWwmMoE
60
  ```
61
 
 
74
  预测词语
75
 
76
  ```python
77
+ print(predict("我有两千kq", "kq", model, tokenizer)[:5])
78
+ print(predict("快去给魔理沙看b吧", "b", model, tokenizer[:5]))
79
  ```
80
 
81
  > ['块钱', 1.2056937473156175], ['块前', 0.05837443749364857], ['开千', 0.0483869208528063], ['可千', 0.03996622172280445], ['口气', 0.037183335575008414]
82
 
83
  > ['病', 1.6893256306648254], ['吧', 0.1642467901110649], ['呗', 0.026976384222507477], ['包', 0.021441461518406868], ['报', 0.01396679226309061]
84
 
85
+ ---
86
 
87
+ ```python
88
+ # 默认的predict函数使用束搜索
89
+ def predict(sentence: str,
90
+ predict_word: str,
91
+ model,
92
+ tokenizer,
93
+ top_k=8,
94
+ beam_size=16, # 束宽
95
+ threshold=0.005, # 阈值
96
+ fast_mode=True, # 是否使用快速模式
97
+ strict_mode=True): # 是否对输出结果进行检查
98
+
99
+ # 使用回溯的无剪枝暴力搜索
100
+ def backtrack_predict(sentence: str,
101
+ predict_word: str,
102
+ model,
103
+ tokenizer,
104
+ top_k=10,
105
+ fast_mode=True,
106
+ strict_mode=True):
107
+ ```
108
 
109
+ > 由于BERT的自编码特性,导致其在预测MASK时,顺序不同会导致预测结果不同,如果启用`fast_mode`,则会正向和反向分别对输入进行预测,可以提升一点准确率(2%左右),但是会带来更大的性能开销。
110
 
111
+ > `strict_mode`会对输入进行检查,以判断其是否为一个真实存在的汉语词汇。
112
 
113
+ ### 如何微调模型
114
 
115
+ 请参考[TrainExample.ipynb](https://github.com/IgarashiAkatuki/CNMBert/blob/main/TrainExample.ipynb),在数据集的格式上,只要保证csv的第一列为要训练的语料即可。
116
 
117
+ ### Q&A
118
 
119
+ Q: 感觉这个东西准确度有点低啊
120
 
121
+ A: 可以尝试设置`fast_mode`和`strict_mode`为`False`。 模型是在很小的数据集(200w)上进行的预训练,所以泛化能力不足很正常,,,可以在更大数据集或者更加细分的领域进行微调,具体微调方式和[Chinese-BERT-wwm](https://github.com/ymcui/Chinese-BERT-wwm)差别不大,只需要将`DataCollactor`替换为`CustomBertModel.py`中的`DataCollatorForMultiMask`。
122
 
123
  ### 引用
 
124
  如果您对CNMBert的具体实现感兴趣的话,可以参考
 
125
  ```
126
  @misc{feng2024cnmbertmodelhanyupinyin,
127
  title={CNMBert: A Model For Hanyu Pinyin Abbreviation to Character Conversion Task},
 
132
  primaryClass={cs.CL},
133
  url={https://arxiv.org/abs/2411.11770},
134
  }
135
+ ```