本地docker部署libretranslate翻译模型并采用CUDA加速
一、Libretanslate基本介绍 Libretanslate 是一个开源的,基于AI驱动的翻译软件,官方网站提供了在线的翻译功能,并且可以申请 api 密钥去调用 api 将翻译能力嵌入到我们自己的程序或者软件中。当然,官方的github有详细的本地部署教程,如果有能力建议根据官方的 README 部署,本文是对可能遇到的一些问题的补充。本文采用的是 docker 部署,当然官方提供了直接通过 pip 包部署,读者可以根据自己的需求选择。效果图如下: 二. docker 与 nvidia docker 支持的前置条件 首先需要保证你的本地系统已经安装的 docker 环境,建议采用国内的源安装,比如清华源、阿里源等。同时建议配置docker镜像源防止由于网络问题无法拉取镜像。这里不提供安装配置命令,建议读者自行搜索相关资料。 使用 nvidia 的 docker 加速,需要读者本地拥有 nvidia 的显卡,并安装了显卡驱动。如果没有 nvidia 的显卡支持,可以跳过这一部分,进行 cpu 版本的本地部署。 首先要在自己的电脑上安装 nvidia docker 支持,参考的官方地址。根据你的 linux 发行版复制粘贴命令就行了,debian 发行版的安装命令如下: # 添加 apt 源 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \ sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg && \ curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ tee /etc/apt/sources....
Debian12中GoldenDict词典软件的使用
一、GoldenDict基本介绍 GoldenDict 是一款开源的词典软件,它具有高度的定制性,可以自定义软件界面,它支持导入词典数据、调用外部网站和自定义程序等功能,对于需要 在学习中阅读英文文献时非常方便使用。在 Debian12 中可以直接通过 apt 命令下载该软件 sudo apt update sudo apt install goldendict 下载完毕后,软件界面如下: 在上面工具栏的编辑 -> 首选项 -> 界面可以设置界面语言,并且可以配置内置的一些主题风格,本文不讨论如何自定义界面风格。在编辑 -> 首选项 -> 词典可以配置词典数据来源。GoldenDict 支持多种词典来源,包括本地的词典数据、远程词典服务器、调用搜索引擎和调用脚本程序等。本文会给出一些在网络上搜集的本地词典资源(感谢这些资源的提供者),并给出一个调用百度官方api进行翻译的 python 脚本。 二、词典资源配置 1.本地词典资源 打开编辑 -> 首选项 -> 词典 -> 词典来源 -> 文件,这里可以配置词典文件的路径,如果是文件夹路径需要勾上递归搜索,然后点击应用,这样 GoldenDict 会扫描所有指定的词典文件,并为其生成索引。如果词典数量比较多这个过程会比较漫长,这取决于你的电脑的性能。索引生成完毕后这些词典就可以使用了,索引文件会存储在本地磁盘中,下一次打开不需要重新生成了。我自己用的词典资源: 词典资源 提取码: bp47。示例效果如图所示: 2. 调用百度翻译接口 拥有这些本地词典后,GoldenDict 会帮助你从这些本地词典搜索你要查询的单词或者词语,只要你的词典中有对应的记录即可。但是GoldenDict并不支持句子翻译,即它不会把句子拆成一组单词分别去查询,除非你的词典中有这样一条句子的翻译记录。因此我考虑将百度翻译接入到 GoldenDict 中这样方便进行一些简短的句子翻译。 首先需要在百度翻译api注册账户,选择通用翻译服务,进行认证后高级版通用翻译服务每个月会有一定量的免费额度。然后在管理控制台获取你的APP ID和密钥,替换下面代码中的 APP ID 和密钥,并配置日志文件路径: import requests import random import re from hashlib import md5 import sys import time # 设置你自己的appid和appkey appid = 'xxxxxxxxxxxxxxxxxx' appkey = 'xxxxxxxxxxxxxxxxxx' EN_LIMIT = 800 # 每800个英文字符添加一个换行符 ZH_LIMIT = 300 # 每300个汉字添加一个换行符 EN_MIN_NUM = 8 ZH_MIN_NUM = 5 def hasZhChar(text): pattern = re....
C语言使用泰勒展开实现sinx并优化
一、sinx 泰勒展开的C实现 1.sinx 泰勒展开公式 sinx 的泰勒展开如下: $$ sinx = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!} + … + \frac{(-1)^n}{(2n + 1)!}x^{2n+1} $$ 其中 n 从 0 开始计算,我采用的公式形态上是 $x=0$ 处的泰勒展开。实际上我们可以把 $x$ 写成 $x = x + x_0$ 来实现 $x=x_0$ 处的展开 2.C实现sinx泰勒展开 我们通过控制精度来控制展开项数,并且我们只考虑 $0-2\pi$ 的范围,归一化处理我们之后再详细考虑,通过泰勒展开公式我们的 C 程序如下: #include <math.h> #define degree 1e-2 float fun_sin(float x) { float res, term; int i; int factor; // 阶乘 term = x; // 每一项的结果 factor = 1; res = term; for (i = 1; fabs(term) > degree; i++) { factor *= (2 * i) * (2 * i + 1); term = pow(-1, i) * pow(x, 2 * i + 1) / factor; res += term; } return res; } 上面的代码基本是严格按照公式计算的,可惜的是它并不能正常工作,这涉及到计算阶乘时整数溢出的问题。当输入比较小,比如 0....