avatar
文章
85
标签
47
分类
18
首页
归档
标签
分类
关于
很多时候不懂事NLLB与SentencePiece在MoeTranslate中的技术实现 返回首页
搜索
首页
归档
标签
分类
关于

NLLB与SentencePiece在MoeTranslate中的技术实现

发表于2026-04-09|更新于2026-04-09|面试准备
|浏览量:
文章作者: azuki
文章链接: https://blog.azuki.top/interviewnllb/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 很多时候不懂事!
面试实习
上一篇
LeetCode70 - 最小栈
📝 题目描述 题目链接:最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。 示例: 123456789101112131415161718示例 1:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,null,-3,null,0,-2]解释:MinStack minStack = new MinStack();minStack.push...
下一篇
LeetCode69 - 有效的括号
📝 题目描述 题目链接:有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例: 1234567891011121314151617181920212223242526272829示例 1:输入:s = "()"输出:true示例 2:输入:s = "()[]{}"输出:true示例 3:输入:s = "(]"输出:false示例 4:输入:s = "([])"输出:true示例 5:输入:s = "([)]"输出:false 提示: 1 <= s.length <= 10^4 s 仅由括号 '()[]{}' 组成 💡 解题思路 方法一:栈 思路很简单,遇见左括号,直接入栈;遇见右括号: 判断栈是否为空,为空则说明上来就是右括号,直接返回 fal...
相关推荐
2026-04-04
面试问答
avatar
azuki
记录一些琐碎的事物
文章
85
标签
47
分类
18
GitHub
公告
This is my Blog
目录
  1. 1. 目录
  2. 2. 1. 技术栈总览
  3. 3. 2. NLLB模型背景知识
    1. 3.1. 2.1 什么是NLLB
    2. 3.2. 2.2 模型架构
    3. 3.3. 2.3 语言标记机制
    4. 3.4. 2.4 项目中使用的模型规模
  4. 4. 3. SentencePiece分词器原理
    1. 4.1. 3.1 什么是SentencePiece
    2. 4.2. 3.2 BPE算法原理
    3. 4.3. 3.3 为什么NLLB使用SentencePiece
  5. 5. 4. 系统架构与完整翻译流程
    1. 5.1. 4.1 类层级关系
    2. 5.2. 4.2 完整翻译流程(以"你好世界"中→英翻译为例)
  6. 6. 5. JNI桥接机制详解
    1. 6.1. 5.1 为什么需要JNI
    2. 6.2. 5.2 架构层次
    3. 6.3. 5.3 本地库加载
    4. 6.4. 5.4 指针传递模式
    5. 6.5. 5.5 JNI函数命名规范
    6. 6.6. 5.6 数据类型转换
    7. 6.7. 5.7 暴露给Java层的native方法
  7. 7. 6. 分词(Tokenization)实现详解
    1. 7.1. 6.1 文本预处理阶段
    2. 7.2. 6.2 SentencePiece BPE编码
    3. 7.3. 6.3 Token ID偏移校正(核心难点)
    4. 7.4. 6.4 语言标记ID的计算
    5. 7.5. 6.5 最终输入序列的构造
  8. 8. 7. ONNX Runtime推理引擎详解
    1. 8.1. 7.1 为什么使用ONNX Runtime
    2. 8.2. 7.2 模型初始化
    3. 8.3. 7.3 模型拆分设计
    4. 8.4. 7.4 Encoder执行流程
  9. 9. 8. 自回归解码与KV-Cache优化详解
    1. 9.1. 8.1 自回归解码的基本原理
    2. 9.2. 8.2 KV-Cache机制
    3. 9.3. 8.3 本项目中KV-Cache的两种类型
    4. 9.4. 8.4 KV-Cache的具体数据形状
    5. 9.5. 8.5 Greedy Search解码
    6. 9.6. 8.6 目标语言标记的注入方式
    7. 9.7. 8.7 Early Stop机制
  10. 10. 9. 解码(Detokenization)实现详解
    1. 10.1. 9.1 Token ID到文本的转换
    2. 10.2. 9.2 特殊字符 ▁ 的处理
    3. 10.3. 9.3 为什么使用逐Token解码而非批量解码
  11. 11. 10. 工程优化与设计考量
    1. 11.1. 10.1 内存管理
    2. 11.2. 10.2 线程模型
    3. 11.3. 10.3 异步初始化
    4. 11.4. 10.4 翻译取消支持
  12. 12. 11. 面试高频问题与回答建议
    1. 12.1. Q1: 为什么选择在端侧部署NLLB模型,而不是调用云端API?
    2. 12.2. Q2: 什么是SentencePiece?为什么NLLB需要它?
    3. 12.3. Q3: 解释一下JNI在项目中的作用和工作原理
    4. 12.4. Q4: 什么是KV-Cache?为什么要使用它?
    5. 12.5. Q5: Token ID为什么需要做偏移校正?
    6. 12.6. Q6: 为什么模型被拆分为4个ONNX文件?
    7. 12.7. Q7: Greedy Search和Beam Search有什么区别?为什么选择Greedy Search?
    8. 12.8. Q8: 整个翻译过程的性能瓶颈在哪里?
    9. 12.9. Q9: 翻译长文本时是怎么处理的?
    10. 12.10. Q10: 如果让你优化这个端侧翻译系统,你会从哪些方面入手?
最新文章
LeetCode70 - 最小栈2026-04-10
NLLB与SentencePiece在MoeTranslate中的技术实现2026-04-09
LeetCode69 - 有效的括号2026-04-08
LeetCode68 - 寻找两个正序数组的中位数2026-04-08
LeetCode67 - 寻找旋转排序数组中的最小值2026-04-08
© 2024 - 2026 By azuki框架 Hexo 8.1.1|主题 Butterfly 5.5.3
搜索
数据加载中