CrazyAirhead

疯狂的傻瓜,傻瓜也疯狂——傻方能执著,疯狂才专注!

0%

使用 GLM4-9B 修改语音识别文本错误

说明

在“「定投搜索」工具的一些分享”中有说到,通过 whsiper.cpp 识别的文本不准确的问题,包括存在繁体中文,错误的同音字,没有标点符号,突然增加的一些版权信息和告别语。

已经尝试使用 GLM4 进行文本的修改,修改效果不错。

以下分享此次使用 GLM4-9B 修改语音识别文本错误的过程。

安装Ollama

Ollama 是一个开源项目,是在本地快速跑各种开源大模型的最优选择之一。它的安装过程非常简单。MacOS 和 Windows 都有一键安装包,Download Ollama on macOS,下载后直接安装即可。

安装完成好,可以打开终端,能看到这些信息就说明Ollama已经安装成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ollama

Usage:
ollama [flags]
ollama [command]

Available Commands:
serve Start ollama
create Create a model from a Modelfile
show Show information for a model
run Run a model
pull Pull a model from a registry
push Push a model to a registry
list List models
ps List running models
cp Copy a model
rm Remove a model
help Help about any command

Flags:
-h, --help help for ollama
-v, --version Show version information

安装GLM4

打开 Ollama 官网,搜索glm4, glm4 (ollama.com),复制运行命令ollama run glm4并在终端执行。

1
2
3
4
ollama run glm4

>>> Send a message (/? for help)
#

当其实输入消息时,表示模型已经安装成功,并可使用。

调用

此处直接上代码,prompt 是根据直译、反思、意译:提升 GPT 翻译质量的一种新策略

进行修改的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
public class OllamaUtils {
/**
* https://baoyu.io/blog/prompt-engineering/translator-gpt-prompt-v2
*
* @param prompt
* @return
*/
public static String fixTxt(String prompt) {
String system =
"""
你是精通简体中文的专家,尤其擅长修复文本内容错误。

规则:
- 不要翻译英文。
- 把繁体中文修改成简体中文。
- 修改错别字,如:错误的成语、错误的词组。
- 修改错误的同音字,错误的同音字包括但不限于:
* 孝来 -> 笑来
* 校来 -> 笑来
* 小莱 -> 笑来
* 李孝来 -> 李笑来
* 李小莱 -> 李笑来
* 李少莱 -> 李笑来
* 李小兰 -> 李笑来
* 李校来 -> 李笑来
* 李教来 -> 李笑来
* 健行 -> 践行
* 定头 -> 定投
- 删除无效内容。无效内容包括但不限于:
* 文本段落后的版权说明,如:
1. 优优独播剧场——YoYo Television Series Exclusive
1. 请不吝点赞、订阅、转发、打赏,支持“明镜与点滴”栏目
* 文本段落后的突然的告别语,如:
1. 谢谢
1. 拜拜
1. 谢谢大家
- 添加上合适的标点符号。

策略:
分三步进行修改工作。
1. 根据文本内容进行修改,保持原有格式,不要遗漏任何信息。
2. 根据第一步的修改结果,指出其中存在的具体问题,要准确描述。
3. 根据第一步和第二步的指出的问题,重新修改,同时保持原有格式不变。

返回:
- 只返回重新修改的结果
- 不返回具体问题
- 不返回修改的解释

现在请按照上面的要求从第一行开始修改文本内容。
""";
Kv kv = Kv.create().set("model", "glm4").set("system", system).set("prompt", prompt);
log.info("prompt: {}", prompt);

String result = OllamaUtils.generate(kv);
log.info("result: {}", result);
return result;
}

public static String generate(Kv kv) {
String prompt = kv.getStr("prompt");
if (StrUtil.isBlank(prompt)) {
throw new RuntimeException("prompt is empty");
}

HttpUtils http = HttpUtils.http("http://localhost:11434/api/generate");
String model = kv.getStr("model");
if (StrUtil.isBlank(model)) {
kv.set("model", "glm4");
}

Boolean stream = kv.getBoolean("stream");
if (stream == null) {
kv.set("stream", false);
}

http.bodyJson(ONode.stringify(kv));
try {
HttpResponse response = http.exec("post");
if (response.code() != 200) {
return "";
}

String body = response.bodyAsString();
if (StrUtil.isBlank(body)) {
return "";
}

ONode node = ONode.load(body);
return node.get("response").getString();
} catch (IOException e) {
log.error(e.getMessage(), e);
}

return "";
}
}

测试

1
2
3
4
5
6
7
8
9
class OllamaUtilsTest {

@Test
void generate() {
String txt =
"那么Bitstamp呢确实是一个老牌的这个交易所 然后呢当然现在不大了 以前呢曾经火过 那么再看哈 这位同学发过来的那个陌生人给他的链接 是跟Bitstamp半毛钱关系没有的那么一个链接 我在这里呢就不发那个假的链接了 因为有可能会产生误导";
OllamaUtils.fixTxt(txt);
}
}

输出内容,输出的结果还是让我满意的,最新生成的数据已经开始索引到 ES 里面。

1
2
prompt: 那么Bitstamp呢确实是一个老牌的这个交易所 然后呢当然现在不大了 以前呢曾经火过 那么再看哈 这位同学发过来的那个陌生人给他的链接 是跟Bitstamp半毛钱关系没有的那么一个链接 我在这里呢就不发那个假的链接了 因为有可能会产生误导
result: 那么Bitstamp确实是一个老牌的交易所,然后当然现在不大了。以前呢曾经火过。那么再看哈,这位同学发过来的那个陌生人给他的链接,是跟Bitstamp半毛钱关系没有的那么一个链接。我在这里呢就不发那个假的链接了,因为有可能会产生误导。

欢迎关注我的其它发布渠道