feat(lexicon): add custom ASR language model v1 (Sogou + AI/tech brands)
Build a first-version SFCustomLanguageModelData for on-device ASR customization, generated offline on macOS (no app code dependency). - Scripts/lexicon: Python builders for Sogou-derived phrases (scel + SogouPopularDict) and a curated bilingual AI/tech/brand seed lexicon - export_clm.swift / prepare_clm.swift: macOS CLI tools that export the .bin training asset and compile it into LM + Vocab via the Speech framework - Resources/CustomLanguageModel: generated phrases.tsv, manifests, the 129k-phrase .bin, and compiled LM/Vocab assets (zh_CN) - .gitignore: ignore lexicon build cache and Python bytecode Note: Sogou-derived data is for internal experimentation only; the curated AI/tech seed is MIT and safe to ship.
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"version": "v1",
|
||||||
|
"name": "ai-tech-brands",
|
||||||
|
"generated_at": "2026-07-05T08:00:01.226941+00:00",
|
||||||
|
"locale": "zh-Hans",
|
||||||
|
"entry_count": 749,
|
||||||
|
"seed_file": "Scripts/lexicon/seeds/ai_tech_brands_seed.tsv",
|
||||||
|
"license": "MIT (curated seed; OSGKeyboard contributors)",
|
||||||
|
"categories": {
|
||||||
|
"ai_brand": 133,
|
||||||
|
"ai_model": 31,
|
||||||
|
"ai_platform": 20,
|
||||||
|
"ai_term": 116,
|
||||||
|
"dev_tool": 74,
|
||||||
|
"fintech": 7,
|
||||||
|
"tech_company": 280,
|
||||||
|
"tech_leader": 37,
|
||||||
|
"tech_term": 51
|
||||||
|
},
|
||||||
|
"notes": [
|
||||||
|
"Curated bilingual AI brands, tech companies, terminology, and hot words.",
|
||||||
|
"English canonical forms + Chinese aliases for ASR PhraseCount weighting.",
|
||||||
|
"Aliases expanded at build time; canonical column tracks the primary form.",
|
||||||
|
"English post-processing (casing) remains LLM polish responsibility."
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"phrases": "phrases.tsv"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,750 @@
|
|||||||
|
word pinyin source category weight canonical
|
||||||
|
Anthropic ai_tech_seed ai_brand 100 Anthropic
|
||||||
|
anthropic ai_tech_seed ai_brand 100 Anthropic
|
||||||
|
Athropic ai_tech_seed ai_brand 100 Anthropic
|
||||||
|
chat gpt ai_tech_seed ai_brand 100 ChatGPT
|
||||||
|
Chat GPT ai_tech_seed ai_brand 100 ChatGPT
|
||||||
|
ChatGPT ai_tech_seed ai_brand 100 ChatGPT
|
||||||
|
chatgpt ai_tech_seed ai_brand 100 ChatGPT
|
||||||
|
Claude ai_tech_seed ai_brand 100 Claude
|
||||||
|
claude ai_tech_seed ai_brand 100 Claude
|
||||||
|
Claude Opus ai_tech_seed ai_brand 100 Claude
|
||||||
|
Claude Sonnet ai_tech_seed ai_brand 100 Claude
|
||||||
|
deep seek ai_tech_seed ai_brand 100 DeepSeek
|
||||||
|
DeepSeek ai_tech_seed ai_brand 100 DeepSeek
|
||||||
|
deepseek ai_tech_seed ai_brand 100 DeepSeek
|
||||||
|
Deepseek ai_tech_seed ai_brand 100 DeepSeek
|
||||||
|
open ai ai_tech_seed ai_brand 100 OpenAI
|
||||||
|
Open AI ai_tech_seed ai_brand 100 OpenAI
|
||||||
|
OpenAI ai_tech_seed ai_brand 100 OpenAI
|
||||||
|
深度求索 shen du qiu suo ai_tech_seed ai_brand 100 深度求索
|
||||||
|
NVDA ai_tech_seed tech_company 98 Nvidia
|
||||||
|
Nvidia ai_tech_seed tech_company 98 Nvidia
|
||||||
|
nvidia ai_tech_seed tech_company 98 Nvidia
|
||||||
|
英伟达 ai_tech_seed tech_company 98 Nvidia
|
||||||
|
Alibaba ai_tech_seed tech_company 95 Alibaba
|
||||||
|
alibaba ai_tech_seed tech_company 95 Alibaba
|
||||||
|
Alphabet ai_tech_seed tech_company 95 Google
|
||||||
|
Amazon ai_tech_seed tech_company 95 Amazon
|
||||||
|
amazon ai_tech_seed tech_company 95 Amazon
|
||||||
|
Apple ai_tech_seed tech_company 95 Apple
|
||||||
|
apple ai_tech_seed tech_company 95 Apple
|
||||||
|
AWS ai_tech_seed tech_company 95 Amazon
|
||||||
|
Bard ai_tech_seed ai_brand 95 Gemini
|
||||||
|
BYD ai_tech_seed tech_company 95 BYD
|
||||||
|
byd ai_tech_seed tech_company 95 BYD
|
||||||
|
byte dance ai_tech_seed tech_company 95 ByteDance
|
||||||
|
ByteDance ai_tech_seed tech_company 95 ByteDance
|
||||||
|
Bytedance ai_tech_seed tech_company 95 ByteDance
|
||||||
|
Facebook ai_tech_seed tech_company 95 Meta
|
||||||
|
Gemini ai_tech_seed ai_brand 95 Gemini
|
||||||
|
gemini ai_tech_seed ai_brand 95 Gemini
|
||||||
|
Google ai_tech_seed tech_company 95 Google
|
||||||
|
google ai_tech_seed tech_company 95 Google
|
||||||
|
Google Gemini ai_tech_seed ai_brand 95 Gemini
|
||||||
|
GPT ai_tech_seed ai_model 95 GPT
|
||||||
|
gpt-4 ai_tech_seed ai_model 95 GPT
|
||||||
|
GPT-4 ai_tech_seed ai_model 95 GPT
|
||||||
|
GPT-4o ai_tech_seed ai_model 95 GPT
|
||||||
|
gpt4o ai_tech_seed ai_model 95 GPT
|
||||||
|
Huawei ai_tech_seed tech_company 95 Huawei
|
||||||
|
huawei ai_tech_seed tech_company 95 Huawei
|
||||||
|
HW ai_tech_seed tech_company 95 Huawei
|
||||||
|
Kimi ai_tech_seed ai_brand 95 Kimi
|
||||||
|
kimi ai_tech_seed ai_brand 95 Kimi
|
||||||
|
Kimi AI ai_tech_seed ai_brand 95 Kimi
|
||||||
|
Meta ai_tech_seed tech_company 95 Meta
|
||||||
|
meta ai_tech_seed tech_company 95 Meta
|
||||||
|
MI ai_tech_seed tech_company 95 Xiaomi
|
||||||
|
Microsoft ai_tech_seed tech_company 95 Microsoft
|
||||||
|
microsoft ai_tech_seed tech_company 95 Microsoft
|
||||||
|
Moonshot ai_tech_seed ai_brand 95 Kimi
|
||||||
|
Moonshot AI ai_tech_seed ai_brand 95 Kimi
|
||||||
|
MSFT ai_tech_seed tech_company 95 Microsoft
|
||||||
|
Qwen ai_tech_seed ai_brand 95 Qwen
|
||||||
|
qwen ai_tech_seed ai_brand 95 Qwen
|
||||||
|
Qwen2 ai_tech_seed ai_brand 95 Qwen
|
||||||
|
Qwen3 ai_tech_seed ai_brand 95 Qwen
|
||||||
|
RAG ai_tech_seed ai_term 95 RAG
|
||||||
|
rag ai_tech_seed ai_term 95 RAG
|
||||||
|
retrieval augmented generation ai_tech_seed ai_term 95 RAG
|
||||||
|
space x ai_tech_seed tech_company 95 SpaceX
|
||||||
|
Space X ai_tech_seed tech_company 95 SpaceX
|
||||||
|
SpaceX ai_tech_seed tech_company 95 SpaceX
|
||||||
|
Tencent ai_tech_seed tech_company 95 Tencent
|
||||||
|
tencent ai_tech_seed tech_company 95 Tencent
|
||||||
|
Tesla ai_tech_seed tech_company 95 Tesla
|
||||||
|
tesla ai_tech_seed tech_company 95 Tesla
|
||||||
|
Tesla Motors ai_tech_seed tech_company 95 Tesla
|
||||||
|
Transformer ai_tech_seed ai_term 95 Transformer
|
||||||
|
transformer ai_tech_seed ai_term 95 Transformer
|
||||||
|
vibe code ai_tech_seed ai_term 95 vibe coding
|
||||||
|
vibe coding ai_tech_seed ai_term 95 vibe coding
|
||||||
|
Vibe Coding ai_tech_seed ai_term 95 vibe coding
|
||||||
|
Xiaomi ai_tech_seed tech_company 95 Xiaomi
|
||||||
|
xiaomi ai_tech_seed tech_company 95 Xiaomi
|
||||||
|
亚马逊 ai_tech_seed tech_company 95 Amazon
|
||||||
|
千问 ai_tech_seed ai_brand 95 Qwen
|
||||||
|
华为 ai_tech_seed tech_company 95 Huawei
|
||||||
|
变换器 ai_tech_seed ai_term 95 Transformer
|
||||||
|
字节跳动 ai_tech_seed tech_company 95 ByteDance
|
||||||
|
小米 ai_tech_seed tech_company 95 Xiaomi
|
||||||
|
微软 ai_tech_seed tech_company 95 Microsoft
|
||||||
|
检索增强生成 ai_tech_seed ai_term 95 RAG
|
||||||
|
比亚迪 ai_tech_seed tech_company 95 BYD
|
||||||
|
氛围编程 ai_tech_seed ai_term 95 vibe coding
|
||||||
|
脸书 ai_tech_seed tech_company 95 Meta
|
||||||
|
腾讯 ai_tech_seed tech_company 95 Tencent
|
||||||
|
苹果公司 ai_tech_seed tech_company 95 Apple
|
||||||
|
谷歌 ai_tech_seed tech_company 95 Google
|
||||||
|
通义千问 ai_tech_seed ai_brand 95 Qwen
|
||||||
|
阿里 ai_tech_seed tech_company 95 Alibaba
|
||||||
|
阿里巴巴 ai_tech_seed tech_company 95 Alibaba
|
||||||
|
agent ai_tech_seed ai_term 92 智能体
|
||||||
|
Agent ai_tech_seed ai_term 92 智能体
|
||||||
|
AI agent ai_tech_seed ai_term 92 智能体
|
||||||
|
Amazon Web Services ai_tech_seed tech_company 92 AWS
|
||||||
|
aws ai_tech_seed tech_company 92 AWS
|
||||||
|
Baidu ai_tech_seed tech_company 92 Baidu
|
||||||
|
baidu ai_tech_seed tech_company 92 Baidu
|
||||||
|
CATL ai_tech_seed tech_company 92 CATL
|
||||||
|
catl ai_tech_seed tech_company 92 CATL
|
||||||
|
deepseek r1 ai_tech_seed ai_model 92 DeepSeek-R1
|
||||||
|
DeepSeek R1 ai_tech_seed ai_model 92 DeepSeek-R1
|
||||||
|
DeepSeek-R1 ai_tech_seed ai_model 92 DeepSeek-R1
|
||||||
|
Elon Musk ai_tech_seed tech_leader 92 Elon Musk
|
||||||
|
elon musk ai_tech_seed tech_leader 92 Elon Musk
|
||||||
|
GitHub ai_tech_seed tech_company 92 GitHub
|
||||||
|
github ai_tech_seed tech_company 92 GitHub
|
||||||
|
large language model ai_tech_seed ai_term 92 LLM
|
||||||
|
large model ai_tech_seed ai_term 92 大模型
|
||||||
|
LLM ai_tech_seed ai_term 92 LLM
|
||||||
|
llm ai_tech_seed ai_term 92 LLM
|
||||||
|
MCP ai_tech_seed ai_term 92 MCP
|
||||||
|
MCP server ai_tech_seed ai_term 92 MCP
|
||||||
|
model context protocol ai_tech_seed ai_term 92 MCP
|
||||||
|
prompt ai_tech_seed ai_term 92 提示词
|
||||||
|
Prompt ai_tech_seed ai_term 92 提示词
|
||||||
|
R1 ai_tech_seed ai_model 92 DeepSeek-R1
|
||||||
|
tik tok ai_tech_seed tech_company 92 TikTok
|
||||||
|
Tik Tok ai_tech_seed tech_company 92 TikTok
|
||||||
|
TikTok ai_tech_seed tech_company 92 TikTok
|
||||||
|
we chat ai_tech_seed tech_company 92 WeChat
|
||||||
|
WeChat ai_tech_seed tech_company 92 WeChat
|
||||||
|
大模型 da mo xing ai_tech_seed ai_term 92 大模型
|
||||||
|
大语言模型 ai_tech_seed ai_term 92 LLM
|
||||||
|
宁德时代 ai_tech_seed tech_company 92 CATL
|
||||||
|
微信 ai_tech_seed tech_company 92 WeChat
|
||||||
|
抖音海外 ai_tech_seed tech_company 92 TikTok
|
||||||
|
提示词 ti shi ci ai_tech_seed ai_term 92 提示词
|
||||||
|
智能体 zhi neng ti ai_tech_seed ai_term 92 智能体
|
||||||
|
百度 ai_tech_seed tech_company 92 Baidu
|
||||||
|
马斯克 ai_tech_seed tech_leader 92 Elon Musk
|
||||||
|
agentic ai_tech_seed ai_term 90 agent
|
||||||
|
AGI ai_tech_seed ai_term 90 AGI
|
||||||
|
agi ai_tech_seed ai_term 90 AGI
|
||||||
|
alphabet ai_tech_seed tech_company 90 Alphabet
|
||||||
|
Copilot ai_tech_seed ai_brand 90 Copilot
|
||||||
|
copilot ai_tech_seed ai_brand 90 Copilot
|
||||||
|
Cursor ai_tech_seed dev_tool 90 Cursor
|
||||||
|
cursor ai ai_tech_seed dev_tool 90 Cursor
|
||||||
|
Cursor AI ai_tech_seed dev_tool 90 Cursor
|
||||||
|
deepseek v3 ai_tech_seed ai_model 90 DeepSeek-V3
|
||||||
|
DeepSeek V3 ai_tech_seed ai_model 90 DeepSeek-V3
|
||||||
|
DeepSeek-V3 ai_tech_seed ai_model 90 DeepSeek-V3
|
||||||
|
DJI ai_tech_seed tech_company 90 DJI
|
||||||
|
dji ai_tech_seed tech_company 90 DJI
|
||||||
|
dou yin ai_tech_seed tech_company 90 Douyin
|
||||||
|
Doubao ai_tech_seed ai_brand 90 豆包
|
||||||
|
doubao ai_tech_seed ai_brand 90 豆包
|
||||||
|
Douyin ai_tech_seed tech_company 90 Douyin
|
||||||
|
embedding ai_tech_seed ai_term 90 embedding
|
||||||
|
embeddings ai_tech_seed ai_term 90 embedding
|
||||||
|
ERNIE ai_tech_seed ai_brand 90 文心一言
|
||||||
|
Ernie ai_tech_seed ai_brand 90 文心一言
|
||||||
|
fine tuning ai_tech_seed ai_term 90 微调
|
||||||
|
fine-tuning ai_tech_seed ai_term 90 微调
|
||||||
|
GitHub Copilot ai_tech_seed ai_brand 90 Copilot
|
||||||
|
GLM ai_tech_seed ai_brand 90 GLM
|
||||||
|
glm ai_tech_seed ai_brand 90 GLM
|
||||||
|
GLM-4 ai_tech_seed ai_brand 90 GLM
|
||||||
|
GLM-5 ai_tech_seed ai_brand 90 GLM
|
||||||
|
Jensen Huang ai_tech_seed tech_leader 90 Jensen Huang
|
||||||
|
jensen huang ai_tech_seed tech_leader 90 Jensen Huang
|
||||||
|
k8s ai_tech_seed dev_tool 90 Kubernetes
|
||||||
|
K8s ai_tech_seed dev_tool 90 Kubernetes
|
||||||
|
Kubernetes ai_tech_seed dev_tool 90 Kubernetes
|
||||||
|
kubernetes ai_tech_seed dev_tool 90 Kubernetes
|
||||||
|
Lei Jun ai_tech_seed tech_leader 90 雷军
|
||||||
|
lei jun ai_tech_seed tech_leader 90 Lei Jun
|
||||||
|
Li Auto ai_tech_seed tech_company 90 Li Auto
|
||||||
|
li auto ai_tech_seed tech_company 90 Li Auto
|
||||||
|
Llama ai_tech_seed ai_model 90 Llama
|
||||||
|
llama ai_tech_seed ai_model 90 Llama
|
||||||
|
LLaMA ai_tech_seed ai_model 90 Llama
|
||||||
|
Llama 3 ai_tech_seed ai_model 90 Llama
|
||||||
|
Llama 4 ai_tech_seed ai_model 90 Llama
|
||||||
|
LoRA ai_tech_seed ai_term 90 LoRA
|
||||||
|
lora ai_tech_seed ai_term 90 LoRA
|
||||||
|
Microsoft Copilot ai_tech_seed ai_brand 90 Copilot
|
||||||
|
NIO ai_tech_seed tech_company 90 NIO
|
||||||
|
nio ai_tech_seed tech_company 90 NIO
|
||||||
|
prompt engineering ai_tech_seed ai_term 90 prompt
|
||||||
|
Steve Jobs ai_tech_seed tech_leader 90 乔布斯
|
||||||
|
steve jobs ai_tech_seed tech_leader 90 Steve Jobs
|
||||||
|
TSMC ai_tech_seed tech_company 90 TSMC
|
||||||
|
tsmc ai_tech_seed tech_company 90 TSMC
|
||||||
|
X Peng ai_tech_seed tech_company 90 XPeng
|
||||||
|
XPeng ai_tech_seed tech_company 90 XPeng
|
||||||
|
xpeng ai_tech_seed tech_company 90 XPeng
|
||||||
|
Zhipu ai_tech_seed ai_brand 90 GLM
|
||||||
|
乔布斯 qiao bu si ai_tech_seed tech_leader 90 乔布斯
|
||||||
|
低秩适配 ai_tech_seed ai_term 90 LoRA
|
||||||
|
台积电 ai_tech_seed tech_company 90 TSMC
|
||||||
|
大疆 ai_tech_seed tech_company 90 DJI
|
||||||
|
小鹏汽车 ai_tech_seed tech_company 90 XPeng
|
||||||
|
嵌入 ai_tech_seed ai_term 90 embedding
|
||||||
|
微调 wei tiao ai_tech_seed ai_term 90 微调
|
||||||
|
抖音 ai_tech_seed tech_company 90 Douyin
|
||||||
|
文心一言 wen xin yi yan ai_tech_seed ai_brand 90 文心一言
|
||||||
|
智谱 ai_tech_seed ai_brand 90 GLM
|
||||||
|
月之暗面 yue zhi an mian ai_tech_seed ai_brand 90 月之暗面
|
||||||
|
理想 ai_tech_seed tech_company 90 Li Auto
|
||||||
|
理想汽车 ai_tech_seed tech_company 90 Li Auto
|
||||||
|
蔚来 ai_tech_seed tech_company 90 NIO
|
||||||
|
豆包 dou bao ai_tech_seed ai_brand 90 豆包
|
||||||
|
通用人工智能 ai_tech_seed ai_term 90 AGI
|
||||||
|
雷军 lei jun ai_tech_seed tech_leader 90 雷军
|
||||||
|
黄仁勋 ai_tech_seed tech_leader 90 Jensen Huang
|
||||||
|
agentic AI ai_tech_seed ai_term 88 agentic
|
||||||
|
AIGC ai_tech_seed ai_term 88 AIGC
|
||||||
|
aigc ai_tech_seed ai_term 88 AIGC
|
||||||
|
Alipay ai_tech_seed tech_company 88 Ant Group
|
||||||
|
alipay ai_tech_seed tech_company 88 Alipay
|
||||||
|
AMD ai_tech_seed tech_company 88 AMD
|
||||||
|
amd ai_tech_seed tech_company 88 AMD
|
||||||
|
Ant Group ai_tech_seed tech_company 88 Ant Group
|
||||||
|
ant group ai_tech_seed tech_company 88 Ant Group
|
||||||
|
Bilibili ai_tech_seed tech_company 88 Bilibili
|
||||||
|
bilibili ai_tech_seed tech_company 88 Bilibili
|
||||||
|
B站 ai_tech_seed tech_company 88 Bilibili
|
||||||
|
chain of thought ai_tech_seed ai_term 88 chain of thought
|
||||||
|
chain-of-thought ai_tech_seed ai_term 88 chain of thought
|
||||||
|
context window ai_tech_seed ai_term 88 上下文窗口
|
||||||
|
deep mind ai_tech_seed ai_brand 88 DeepMind
|
||||||
|
DeepMind ai_tech_seed ai_brand 88 DeepMind
|
||||||
|
Docker ai_tech_seed tech_company 88 Docker
|
||||||
|
docker ai_tech_seed tech_company 88 Docker
|
||||||
|
dou bao ai_tech_seed ai_brand 88 Doubao
|
||||||
|
ernie ai_tech_seed ai_brand 88 ERNIE
|
||||||
|
function calling ai_tech_seed ai_term 88 function calling
|
||||||
|
gen ai ai_tech_seed ai_term 88 GenAI
|
||||||
|
GenAI ai_tech_seed ai_term 88 GenAI
|
||||||
|
github copilot ai_tech_seed ai_brand 88 GitHub Copilot
|
||||||
|
Google DeepMind ai_tech_seed ai_brand 88 DeepMind
|
||||||
|
GPU ai_tech_seed tech_term 88 GPU
|
||||||
|
gpu ai_tech_seed tech_term 88 GPU
|
||||||
|
Grok ai_tech_seed ai_brand 88 xAI
|
||||||
|
hallucination ai_tech_seed ai_term 88 幻觉
|
||||||
|
he xiao peng ai_tech_seed tech_leader 88 He Xiaopeng
|
||||||
|
He Xiaopeng ai_tech_seed tech_leader 88 何小鹏
|
||||||
|
inference ai_tech_seed ai_term 88 推理
|
||||||
|
Intel ai_tech_seed tech_company 88 Intel
|
||||||
|
intel ai_tech_seed tech_company 88 Intel
|
||||||
|
JD ai_tech_seed tech_company 88 JD.com
|
||||||
|
JD.com ai_tech_seed tech_company 88 JD.com
|
||||||
|
jd.com ai_tech_seed tech_company 88 JD.com
|
||||||
|
Lenovo ai_tech_seed tech_company 88 Lenovo
|
||||||
|
lenovo ai_tech_seed tech_company 88 Lenovo
|
||||||
|
Meituan ai_tech_seed tech_company 88 Meituan
|
||||||
|
meituan ai_tech_seed tech_company 88 Meituan
|
||||||
|
mid journey ai_tech_seed ai_brand 88 Midjourney
|
||||||
|
Mid Journey ai_tech_seed ai_brand 88 Midjourney
|
||||||
|
Midjourney ai_tech_seed ai_brand 88 Midjourney
|
||||||
|
mixture of experts ai_tech_seed ai_term 88 MoE
|
||||||
|
MoE ai_tech_seed ai_term 88 MoE
|
||||||
|
moe ai_tech_seed ai_term 88 MoE
|
||||||
|
multimodal ai_tech_seed ai_term 88 多模态
|
||||||
|
o1 ai_tech_seed ai_model 88 o1
|
||||||
|
O1 ai_tech_seed ai_model 88 o1
|
||||||
|
o3 ai_tech_seed ai_model 88 o3
|
||||||
|
O3 ai_tech_seed ai_model 88 o3
|
||||||
|
openai o1 ai_tech_seed ai_model 88 o1
|
||||||
|
openai o3 ai_tech_seed ai_model 88 o3
|
||||||
|
PDD ai_tech_seed tech_company 88 Pinduoduo
|
||||||
|
Perplexity ai_tech_seed ai_brand 88 Perplexity
|
||||||
|
perplexity ai ai_tech_seed ai_brand 88 Perplexity
|
||||||
|
Perplexity AI ai_tech_seed ai_brand 88 Perplexity
|
||||||
|
Pinduoduo ai_tech_seed tech_company 88 Pinduoduo
|
||||||
|
pinduoduo ai_tech_seed tech_company 88 Pinduoduo
|
||||||
|
Py Torch ai_tech_seed dev_tool 88 PyTorch
|
||||||
|
Python ai_tech_seed dev_tool 88 Python
|
||||||
|
python ai_tech_seed dev_tool 88 Python
|
||||||
|
PyTorch ai_tech_seed dev_tool 88 PyTorch
|
||||||
|
pytorch ai_tech_seed dev_tool 88 PyTorch
|
||||||
|
reasoning ai_tech_seed ai_term 88 推理
|
||||||
|
reasoning model ai_tech_seed ai_term 88 reasoning model
|
||||||
|
Sam Altman ai_tech_seed tech_leader 88 Sam Altman
|
||||||
|
sam altman ai_tech_seed tech_leader 88 Sam Altman
|
||||||
|
Samsung ai_tech_seed tech_company 88 Samsung
|
||||||
|
samsung ai_tech_seed tech_company 88 Samsung
|
||||||
|
SMIC ai_tech_seed tech_company 88 SMIC
|
||||||
|
smic ai_tech_seed tech_company 88 SMIC
|
||||||
|
Sora ai_tech_seed ai_brand 88 Sora
|
||||||
|
sora ai ai_tech_seed ai_brand 88 Sora
|
||||||
|
Sora AI ai_tech_seed ai_brand 88 Sora
|
||||||
|
Stripe ai_tech_seed tech_company 88 Stripe
|
||||||
|
stripe ai_tech_seed tech_company 88 Stripe
|
||||||
|
Taobao ai_tech_seed tech_company 88 Taobao
|
||||||
|
taobao ai_tech_seed tech_company 88 Taobao
|
||||||
|
thinking model ai_tech_seed ai_term 88 reasoning model
|
||||||
|
tool calling ai_tech_seed ai_term 88 function calling
|
||||||
|
Visual Studio Code ai_tech_seed dev_tool 88 VS Code
|
||||||
|
VS Code ai_tech_seed dev_tool 88 VS Code
|
||||||
|
vs code ai_tech_seed dev_tool 88 VS Code
|
||||||
|
VSCode ai_tech_seed dev_tool 88 VS Code
|
||||||
|
x ai ai_tech_seed ai_brand 88 xAI
|
||||||
|
xAI ai_tech_seed ai_brand 88 xAI
|
||||||
|
zhipu ai_tech_seed ai_brand 88 Zhipu AI
|
||||||
|
Zhipu AI ai_tech_seed ai_brand 88 智谱
|
||||||
|
三星 ai_tech_seed tech_company 88 Samsung
|
||||||
|
上下文窗口 shang xia wen chuang kou ai_tech_seed ai_term 88 上下文窗口
|
||||||
|
中芯国际 ai_tech_seed tech_company 88 SMIC
|
||||||
|
京东 ai_tech_seed tech_company 88 JD.com
|
||||||
|
何小鹏 he xiao peng ai_tech_seed tech_leader 88 何小鹏
|
||||||
|
哔哩哔哩 ai_tech_seed tech_company 88 Bilibili
|
||||||
|
多模态 duo mo tai ai_tech_seed ai_term 88 多模态
|
||||||
|
山姆奥特曼 ai_tech_seed tech_leader 88 Sam Altman
|
||||||
|
工具调用 ai_tech_seed ai_term 88 function calling
|
||||||
|
幻觉 huan jue ai_tech_seed ai_term 88 幻觉
|
||||||
|
思维链 ai_tech_seed ai_term 88 chain of thought
|
||||||
|
拼多多 ai_tech_seed tech_company 88 Pinduoduo
|
||||||
|
推理 tui li ai_tech_seed ai_term 88 推理
|
||||||
|
推理模型 ai_tech_seed ai_term 88 reasoning model
|
||||||
|
支付宝 ai_tech_seed tech_company 88 Alipay
|
||||||
|
淘宝 ai_tech_seed tech_company 88 Taobao
|
||||||
|
混合专家 ai_tech_seed ai_term 88 MoE
|
||||||
|
生成式AI ai_tech_seed ai_term 88 GenAI
|
||||||
|
生成式人工智能 ai_tech_seed ai_term 88 AIGC
|
||||||
|
美团 ai_tech_seed tech_company 88 Meituan
|
||||||
|
联想 ai_tech_seed tech_company 88 Lenovo
|
||||||
|
英特尔 ai_tech_seed tech_company 88 Intel
|
||||||
|
蚂蚁集团 ai_tech_seed tech_company 88 Ant Group
|
||||||
|
Adobe ai_tech_seed tech_company 85 Adobe
|
||||||
|
adobe ai_tech_seed tech_company 85 Adobe
|
||||||
|
API ai_tech_seed tech_term 85 API
|
||||||
|
api ai_tech_seed tech_term 85 API
|
||||||
|
Arm ai_tech_seed tech_company 85 Arm
|
||||||
|
arm ai_tech_seed tech_company 85 Arm
|
||||||
|
ARM Holdings ai_tech_seed tech_company 85 Arm
|
||||||
|
ASML ai_tech_seed tech_company 85 ASML
|
||||||
|
asml ai_tech_seed tech_company 85 ASML
|
||||||
|
autonomous driving ai_tech_seed tech_term 85 自动驾驶
|
||||||
|
claude opus ai_tech_seed ai_model 85 Opus
|
||||||
|
claude sonnet ai_tech_seed ai_model 85 Sonnet
|
||||||
|
CUDA ai_tech_seed tech_term 85 CUDA
|
||||||
|
cuda ai_tech_seed tech_term 85 CUDA
|
||||||
|
DALL E ai_tech_seed ai_brand 85 DALL-E
|
||||||
|
DALL-E ai_tech_seed ai_brand 85 DALL-E
|
||||||
|
Dall-E ai_tech_seed ai_brand 85 DALL-E
|
||||||
|
dalle ai_tech_seed ai_brand 85 DALL-E
|
||||||
|
Databricks ai_tech_seed tech_company 85 Databricks
|
||||||
|
databricks ai_tech_seed tech_company 85 Databricks
|
||||||
|
diffusion ai_tech_seed ai_term 85 diffusion
|
||||||
|
Figma ai_tech_seed tech_company 85 Figma
|
||||||
|
figma ai_tech_seed tech_company 85 Figma
|
||||||
|
FSD ai_tech_seed tech_term 85 自动驾驶
|
||||||
|
grok ai_tech_seed ai_brand 85 Grok
|
||||||
|
HF ai_tech_seed ai_platform 85 Hugging Face
|
||||||
|
Honor ai_tech_seed tech_company 85 Honor
|
||||||
|
honor ai_tech_seed tech_company 85 Honor
|
||||||
|
Hugging Face ai_tech_seed ai_platform 85 Hugging Face
|
||||||
|
huggingface ai_tech_seed ai_platform 85 Hugging Face
|
||||||
|
HuggingFace ai_tech_seed ai_platform 85 Hugging Face
|
||||||
|
hun yuan ai_tech_seed ai_brand 85 Hunyuan
|
||||||
|
Hunyuan ai_tech_seed ai_brand 85 混元
|
||||||
|
iFlytek ai_tech_seed ai_brand 85 讯飞
|
||||||
|
iflytek ai_tech_seed ai_brand 85 讯飞
|
||||||
|
Kuaishou ai_tech_seed tech_company 85 Kuaishou
|
||||||
|
kuaishou ai_tech_seed tech_company 85 Kuaishou
|
||||||
|
Mark Zuckerberg ai_tech_seed tech_leader 85 Mark Zuckerberg
|
||||||
|
mark zuckerberg ai_tech_seed tech_leader 85 Mark Zuckerberg
|
||||||
|
MiniMax ai_tech_seed ai_brand 85 MiniMax
|
||||||
|
minimax ai_tech_seed ai_brand 85 MiniMax
|
||||||
|
MiniMax AI ai_tech_seed ai_brand 85 MiniMax
|
||||||
|
Mistral ai_tech_seed ai_brand 85 Mistral
|
||||||
|
mistral ai ai_tech_seed ai_brand 85 Mistral
|
||||||
|
Mistral AI ai_tech_seed ai_brand 85 Mistral
|
||||||
|
NetEase ai_tech_seed tech_company 85 NetEase
|
||||||
|
netease ai_tech_seed tech_company 85 NetEase
|
||||||
|
Netflix ai_tech_seed tech_company 85 Netflix
|
||||||
|
netflix ai_tech_seed tech_company 85 Netflix
|
||||||
|
neural link ai_tech_seed tech_company 85 Neuralink
|
||||||
|
Neural Link ai_tech_seed tech_company 85 Neuralink
|
||||||
|
Neuralink ai_tech_seed tech_company 85 Neuralink
|
||||||
|
next js ai_tech_seed dev_tool 85 Next.js
|
||||||
|
Next.js ai_tech_seed dev_tool 85 Next.js
|
||||||
|
nextjs ai_tech_seed dev_tool 85 Next.js
|
||||||
|
NextJS ai_tech_seed dev_tool 85 Next.js
|
||||||
|
Oppo ai_tech_seed tech_company 85 Oppo
|
||||||
|
oppo ai_tech_seed tech_company 85 Oppo
|
||||||
|
OPPO ai_tech_seed tech_company 85 Oppo
|
||||||
|
Opus ai_tech_seed ai_model 85 Opus
|
||||||
|
Opus 4 ai_tech_seed ai_model 85 Opus
|
||||||
|
Qualcomm ai_tech_seed tech_company 85 Qualcomm
|
||||||
|
qualcomm ai_tech_seed tech_company 85 Qualcomm
|
||||||
|
quantization ai_tech_seed ai_term 85 量化
|
||||||
|
React ai_tech_seed dev_tool 85 React
|
||||||
|
react ai_tech_seed dev_tool 85 React
|
||||||
|
ReactJS ai_tech_seed dev_tool 85 React
|
||||||
|
RLHF ai_tech_seed ai_term 85 RLHF
|
||||||
|
rlhf ai_tech_seed ai_term 85 RLHF
|
||||||
|
Salesforce ai_tech_seed tech_company 85 Salesforce
|
||||||
|
salesforce ai_tech_seed tech_company 85 Salesforce
|
||||||
|
SD ai_tech_seed ai_brand 85 Stable Diffusion
|
||||||
|
Shein ai_tech_seed tech_company 85 Shein
|
||||||
|
shein ai_tech_seed tech_company 85 Shein
|
||||||
|
SHEIN ai_tech_seed tech_company 85 Shein
|
||||||
|
Sonnet ai_tech_seed ai_model 85 Sonnet
|
||||||
|
Sonnet 4 ai_tech_seed ai_model 85 Sonnet
|
||||||
|
Sony ai_tech_seed tech_company 85 Sony
|
||||||
|
sony ai_tech_seed tech_company 85 Sony
|
||||||
|
Spark ai_tech_seed ai_brand 85 星火
|
||||||
|
Stable Diffusion ai_tech_seed ai_brand 85 Stable Diffusion
|
||||||
|
stable diffusion ai_tech_seed ai_brand 85 Stable Diffusion
|
||||||
|
star link ai_tech_seed tech_term 85 Starlink
|
||||||
|
Starlink ai_tech_seed tech_term 85 星链
|
||||||
|
Temu ai_tech_seed tech_company 85 Temu
|
||||||
|
temu ai_tech_seed tech_company 85 Temu
|
||||||
|
Tensor Flow ai_tech_seed dev_tool 85 TensorFlow
|
||||||
|
TensorFlow ai_tech_seed dev_tool 85 TensorFlow
|
||||||
|
tensorflow ai_tech_seed dev_tool 85 TensorFlow
|
||||||
|
Tim Cook ai_tech_seed tech_leader 85 Tim Cook
|
||||||
|
tim cook ai_tech_seed tech_leader 85 Tim Cook
|
||||||
|
Tmall ai_tech_seed tech_company 85 Tmall
|
||||||
|
tmall ai_tech_seed tech_company 85 Tmall
|
||||||
|
tokenizer ai_tech_seed ai_term 85 tokenizer
|
||||||
|
TS ai_tech_seed dev_tool 85 TypeScript
|
||||||
|
TypeScript ai_tech_seed dev_tool 85 TypeScript
|
||||||
|
typescript ai_tech_seed dev_tool 85 TypeScript
|
||||||
|
Uber ai_tech_seed tech_company 85 Uber
|
||||||
|
uber ai_tech_seed tech_company 85 Uber
|
||||||
|
Vivo ai_tech_seed tech_company 85 Vivo
|
||||||
|
vivo ai_tech_seed tech_company 85 Vivo
|
||||||
|
VIVO ai_tech_seed tech_company 85 Vivo
|
||||||
|
vscode ai_tech_seed dev_tool 85 Visual Studio Code
|
||||||
|
Waymo ai_tech_seed tech_company 85 Waymo
|
||||||
|
waymo ai_tech_seed tech_company 85 Waymo
|
||||||
|
William Li ai_tech_seed tech_leader 85 李斌
|
||||||
|
Xcode ai_tech_seed dev_tool 85 Xcode
|
||||||
|
xcode ai_tech_seed dev_tool 85 Xcode
|
||||||
|
Zeekr ai_tech_seed tech_company 85 Zeekr
|
||||||
|
zeekr ai_tech_seed tech_company 85 Zeekr
|
||||||
|
人类反馈强化学习 ai_tech_seed ai_term 85 RLHF
|
||||||
|
分词器 ai_tech_seed ai_term 85 tokenizer
|
||||||
|
天猫 ai_tech_seed tech_company 85 Tmall
|
||||||
|
库克 ai_tech_seed tech_leader 85 Tim Cook
|
||||||
|
快手 ai_tech_seed tech_company 85 Kuaishou
|
||||||
|
扎克伯格 ai_tech_seed tech_leader 85 Mark Zuckerberg
|
||||||
|
扩散模型 ai_tech_seed ai_term 85 diffusion
|
||||||
|
提示工程 ai_tech_seed ai_term 85 prompt engineering
|
||||||
|
星火 xing huo ai_tech_seed ai_brand 85 星火
|
||||||
|
星链 xing lian ai_tech_seed tech_term 85 星链
|
||||||
|
李斌 li bin ai_tech_seed tech_leader 85 李斌
|
||||||
|
极氪 ai_tech_seed tech_company 85 Zeekr
|
||||||
|
梁文锋 liang wen feng ai_tech_seed tech_leader 85 梁文锋
|
||||||
|
混元 hun yuan ai_tech_seed ai_brand 85 混元
|
||||||
|
科大讯飞 ai_tech_seed ai_brand 85 讯飞
|
||||||
|
索尼 ai_tech_seed tech_company 85 Sony
|
||||||
|
网易 ai_tech_seed tech_company 85 NetEase
|
||||||
|
腾讯混元 hun yuan ai_tech_seed ai_brand 85 混元
|
||||||
|
自动驾驶 zi dong jia shi ai_tech_seed tech_term 85 自动驾驶
|
||||||
|
荣耀 ai_tech_seed tech_company 85 Honor
|
||||||
|
讯飞 ai_tech_seed ai_brand 85 讯飞
|
||||||
|
讯飞星火 xing huo ai_tech_seed ai_brand 85 星火
|
||||||
|
量化 liang hua ai_tech_seed ai_term 85 量化
|
||||||
|
高通 ai_tech_seed tech_company 85 Qualcomm
|
||||||
|
01.AI ai_tech_seed ai_brand 82 零一万物
|
||||||
|
AI native ai_tech_seed ai_term 82 AI native
|
||||||
|
AI-native ai_tech_seed ai_term 82 AI native
|
||||||
|
Airbnb ai_tech_seed tech_company 82 Airbnb
|
||||||
|
airbnb ai_tech_seed tech_company 82 Airbnb
|
||||||
|
AI原生 ai_tech_seed ai_term 82 AI native
|
||||||
|
bai chuan ai_tech_seed ai_brand 82 百川
|
||||||
|
Baichuan ai_tech_seed ai_brand 82 百川
|
||||||
|
baichuan ai_tech_seed ai_brand 82 Baichuan
|
||||||
|
blockchain ai_tech_seed tech_term 82 区块链
|
||||||
|
Cloudflare ai_tech_seed tech_company 82 Cloudflare
|
||||||
|
cloudflare ai_tech_seed tech_company 82 Cloudflare
|
||||||
|
Codeium Windsurf ai_tech_seed dev_tool 82 Windsurf
|
||||||
|
Coinbase ai_tech_seed tech_company 82 Coinbase
|
||||||
|
coinbase ai_tech_seed tech_company 82 Coinbase
|
||||||
|
deep research ai_tech_seed ai_term 82 deep research
|
||||||
|
distillation ai_tech_seed ai_term 82 distillation
|
||||||
|
embodied AI ai_tech_seed tech_term 82 具身智能
|
||||||
|
full self driving ai_tech_seed tech_term 82 FSD
|
||||||
|
Geely ai_tech_seed tech_company 82 Geely
|
||||||
|
geely ai_tech_seed tech_company 82 Geely
|
||||||
|
Go ai_tech_seed dev_tool 82 Go
|
||||||
|
golang ai_tech_seed dev_tool 82 Go
|
||||||
|
Golang ai_tech_seed dev_tool 82 Go
|
||||||
|
Groq ai_tech_seed ai_brand 82 Groq
|
||||||
|
groq ai_tech_seed ai_brand 82 Groq
|
||||||
|
GROQ ai_tech_seed ai_brand 82 Groq
|
||||||
|
horizon ai_tech_seed tech_company 82 Horizon Robotics
|
||||||
|
Horizon Robotics ai_tech_seed tech_company 82 Horizon Robotics
|
||||||
|
humanoid robot ai_tech_seed tech_term 82 人形机器人
|
||||||
|
IBM ai_tech_seed tech_company 82 IBM
|
||||||
|
ibm ai_tech_seed tech_company 82 IBM
|
||||||
|
Jeff Bezos ai_tech_seed tech_leader 82 Jeff Bezos
|
||||||
|
jeff bezos ai_tech_seed tech_leader 82 Jeff Bezos
|
||||||
|
ling yi wan wu ai_tech_seed ai_brand 82 零一万物
|
||||||
|
Mongo DB ai_tech_seed tech_company 82 MongoDB
|
||||||
|
MongoDB ai_tech_seed tech_company 82 MongoDB
|
||||||
|
mongodb ai_tech_seed tech_company 82 MongoDB
|
||||||
|
Nintendo ai_tech_seed tech_company 82 Nintendo
|
||||||
|
nintendo ai_tech_seed tech_company 82 Nintendo
|
||||||
|
node js ai_tech_seed dev_tool 82 Node.js
|
||||||
|
Node.js ai_tech_seed dev_tool 82 Node.js
|
||||||
|
nodejs ai_tech_seed dev_tool 82 Node.js
|
||||||
|
NodeJS ai_tech_seed dev_tool 82 Node.js
|
||||||
|
Notion ai_tech_seed tech_company 82 Notion
|
||||||
|
notion ai_tech_seed tech_company 82 Notion
|
||||||
|
NPU ai_tech_seed tech_term 82 NPU
|
||||||
|
npu ai_tech_seed tech_term 82 NPU
|
||||||
|
Ollama ai_tech_seed ai_platform 82 Ollama
|
||||||
|
ollama ai_tech_seed ai_platform 82 Ollama
|
||||||
|
open router ai_tech_seed ai_platform 82 OpenRouter
|
||||||
|
Open Router ai_tech_seed ai_platform 82 OpenRouter
|
||||||
|
open weight ai_tech_seed ai_term 82 open weight
|
||||||
|
open weights ai_tech_seed ai_term 82 open weight
|
||||||
|
OpenRouter ai_tech_seed ai_platform 82 OpenRouter
|
||||||
|
Optimus ai_tech_seed tech_term 82 人形机器人
|
||||||
|
Oracle ai_tech_seed tech_company 82 Oracle
|
||||||
|
oracle ai_tech_seed tech_company 82 Oracle
|
||||||
|
Palantir ai_tech_seed tech_company 82 Palantir
|
||||||
|
palantir ai_tech_seed tech_company 82 Palantir
|
||||||
|
PayPal ai_tech_seed tech_company 82 PayPal
|
||||||
|
paypal ai_tech_seed tech_company 82 PayPal
|
||||||
|
pre-training ai_tech_seed ai_term 82 pretraining
|
||||||
|
pretraining ai_tech_seed ai_term 82 pretraining
|
||||||
|
Redis ai_tech_seed tech_company 82 Redis
|
||||||
|
redis ai_tech_seed tech_company 82 Redis
|
||||||
|
Rust ai_tech_seed dev_tool 82 Rust
|
||||||
|
rust ai_tech_seed dev_tool 82 Rust
|
||||||
|
SaaS ai_tech_seed tech_term 82 SaaS
|
||||||
|
saas ai_tech_seed tech_term 82 SaaS
|
||||||
|
Satya Nadella ai_tech_seed tech_leader 82 Satya Nadella
|
||||||
|
satya nadella ai_tech_seed tech_leader 82 Satya Nadella
|
||||||
|
SDK ai_tech_seed tech_term 82 SDK
|
||||||
|
sdk ai_tech_seed tech_term 82 SDK
|
||||||
|
SenseTime ai_tech_seed tech_company 82 SenseTime
|
||||||
|
sensetime ai_tech_seed tech_company 82 SenseTime
|
||||||
|
Shopify ai_tech_seed tech_company 82 Shopify
|
||||||
|
shopify ai_tech_seed tech_company 82 Shopify
|
||||||
|
Spotify ai_tech_seed tech_company 82 Spotify
|
||||||
|
spotify ai_tech_seed tech_company 82 Spotify
|
||||||
|
step fun ai_tech_seed ai_brand 82 StepFun
|
||||||
|
StepFun ai_tech_seed ai_brand 82 StepFun
|
||||||
|
streaming ai_tech_seed ai_term 82 流式
|
||||||
|
Sundar Pichai ai_tech_seed tech_leader 82 Sundar Pichai
|
||||||
|
sundar pichai ai_tech_seed tech_leader 82 Sundar Pichai
|
||||||
|
swift ui ai_tech_seed dev_tool 82 SwiftUI
|
||||||
|
Swift UI ai_tech_seed dev_tool 82 SwiftUI
|
||||||
|
SwiftUI ai_tech_seed dev_tool 82 SwiftUI
|
||||||
|
vector database ai_tech_seed ai_term 82 vector database
|
||||||
|
Vercel ai_tech_seed tech_company 82 Vercel
|
||||||
|
vercel ai_tech_seed tech_company 82 Vercel
|
||||||
|
Vue ai_tech_seed dev_tool 82 Vue
|
||||||
|
vue ai_tech_seed dev_tool 82 Vue
|
||||||
|
Vue.js ai_tech_seed dev_tool 82 Vue
|
||||||
|
Vue3 ai_tech_seed dev_tool 82 Vue
|
||||||
|
Weibo ai_tech_seed tech_company 82 Weibo
|
||||||
|
weibo ai_tech_seed tech_company 82 Weibo
|
||||||
|
Windsurf ai_tech_seed dev_tool 82 Windsurf
|
||||||
|
windsurf ai_tech_seed dev_tool 82 Windsurf
|
||||||
|
Yi ai_tech_seed ai_brand 82 零一万物
|
||||||
|
人形机器人 ren xing ji qi ren ai_tech_seed tech_term 82 人形机器人
|
||||||
|
任天堂 ai_tech_seed tech_company 82 Nintendo
|
||||||
|
余承东 yu cheng dong ai_tech_seed tech_leader 82 余承东
|
||||||
|
全自动驾驶 ai_tech_seed tech_term 82 FSD
|
||||||
|
具身智能 ju shen zhi neng ai_tech_seed tech_term 82 具身智能
|
||||||
|
区块链 qu kuai lian ai_tech_seed tech_term 82 区块链
|
||||||
|
吉利 ai_tech_seed tech_company 82 Geely
|
||||||
|
向量数据库 ai_tech_seed ai_term 82 vector database
|
||||||
|
商汤 ai_tech_seed tech_company 82 SenseTime
|
||||||
|
地平线 ai_tech_seed tech_company 82 Horizon Robotics
|
||||||
|
开放权重 ai_tech_seed ai_term 82 open weight
|
||||||
|
微博 ai_tech_seed tech_company 82 Weibo
|
||||||
|
流式 liu shi ai_tech_seed ai_term 82 流式
|
||||||
|
深度研究 ai_tech_seed ai_term 82 deep research
|
||||||
|
百川 ai_tech_seed ai_brand 82 百川
|
||||||
|
皮查伊 ai_tech_seed tech_leader 82 Sundar Pichai
|
||||||
|
知识蒸馏 ai_tech_seed ai_term 82 distillation
|
||||||
|
纳德拉 ai_tech_seed tech_leader 82 Satya Nadella
|
||||||
|
蒸馏 ai_tech_seed ai_term 82 distillation
|
||||||
|
贝索斯 ai_tech_seed tech_leader 82 Jeff Bezos
|
||||||
|
阶跃星辰 ai_tech_seed ai_brand 82 StepFun
|
||||||
|
零一万物 ai_tech_seed ai_brand 82 零一万物
|
||||||
|
预训练 ai_tech_seed ai_term 82 pretraining
|
||||||
|
01 ai ai_tech_seed ai_brand 80 01.AI
|
||||||
|
Atlassian ai_tech_seed tech_company 80 Atlassian
|
||||||
|
atlassian ai_tech_seed tech_company 80 Atlassian
|
||||||
|
Broadcom ai_tech_seed tech_company 80 Broadcom
|
||||||
|
broadcom ai_tech_seed tech_company 80 Broadcom
|
||||||
|
Canva ai_tech_seed tech_company 80 Canva
|
||||||
|
canva ai_tech_seed tech_company 80 Canva
|
||||||
|
Codeium ai_tech_seed ai_brand 80 Codeium
|
||||||
|
codeium ai_tech_seed ai_brand 80 Codeium
|
||||||
|
Cohere ai_tech_seed ai_brand 80 Cohere
|
||||||
|
cohere ai_tech_seed ai_brand 80 Cohere
|
||||||
|
computer use ai_tech_seed ai_term 80 computer use
|
||||||
|
computer-use ai_tech_seed ai_term 80 computer use
|
||||||
|
Confluence ai_tech_seed tech_company 80 Atlassian
|
||||||
|
Discord ai_tech_seed tech_company 80 Discord
|
||||||
|
discord ai_tech_seed tech_company 80 Discord
|
||||||
|
eleven labs ai_tech_seed ai_brand 80 ElevenLabs
|
||||||
|
Eleven Labs ai_tech_seed ai_brand 80 ElevenLabs
|
||||||
|
ElevenLabs ai_tech_seed ai_brand 80 ElevenLabs
|
||||||
|
Firebase ai_tech_seed tech_company 80 Firebase
|
||||||
|
firebase ai_tech_seed tech_company 80 Firebase
|
||||||
|
GitLab ai_tech_seed tech_company 80 GitLab
|
||||||
|
gitlab ai_tech_seed tech_company 80 GitLab
|
||||||
|
Horizon ai_tech_seed tech_company 80 地平线
|
||||||
|
Jira ai_tech_seed tech_company 80 Atlassian
|
||||||
|
lang chain ai_tech_seed ai_platform 80 LangChain
|
||||||
|
LangChain ai_tech_seed ai_platform 80 LangChain
|
||||||
|
Langchain ai_tech_seed ai_platform 80 LangChain
|
||||||
|
low altitude economy ai_tech_seed tech_term 80 低空经济
|
||||||
|
Megvii ai_tech_seed tech_company 80 Megvii
|
||||||
|
megvii ai_tech_seed tech_company 80 Megvii
|
||||||
|
on device ai ai_tech_seed ai_term 80 on-device AI
|
||||||
|
on-device AI ai_tech_seed ai_term 80 on-device AI
|
||||||
|
optimus ai_tech_seed tech_term 80 Optimus
|
||||||
|
Reddit ai_tech_seed tech_company 80 Reddit
|
||||||
|
reddit ai_tech_seed tech_company 80 Reddit
|
||||||
|
Rivian ai_tech_seed tech_company 80 Rivian
|
||||||
|
rivian ai_tech_seed tech_company 80 Rivian
|
||||||
|
Runway ai_tech_seed ai_brand 80 Runway
|
||||||
|
runway ai ai_tech_seed ai_brand 80 Runway
|
||||||
|
Runway ML ai_tech_seed ai_brand 80 Runway
|
||||||
|
silicon flow ai_tech_seed ai_platform 80 SiliconFlow
|
||||||
|
Silicon Flow ai_tech_seed ai_platform 80 SiliconFlow
|
||||||
|
SiliconFlow ai_tech_seed ai_platform 80 SiliconFlow
|
||||||
|
Slack ai_tech_seed tech_company 80 Slack
|
||||||
|
slack ai_tech_seed tech_company 80 Slack
|
||||||
|
SLM ai_tech_seed ai_term 80 SLM
|
||||||
|
slm ai_tech_seed ai_term 80 SLM
|
||||||
|
Snowflake ai_tech_seed tech_company 80 Snowflake
|
||||||
|
snowflake ai_tech_seed tech_company 80 Snowflake
|
||||||
|
Supabase ai_tech_seed tech_company 80 Supabase
|
||||||
|
supabase ai_tech_seed tech_company 80 Supabase
|
||||||
|
swe bench ai_tech_seed ai_term 80 SWE-bench
|
||||||
|
SWE bench ai_tech_seed ai_term 80 SWE-bench
|
||||||
|
SWE-bench ai_tech_seed ai_term 80 SWE-bench
|
||||||
|
Terraform ai_tech_seed tech_company 80 Terraform
|
||||||
|
terraform ai_tech_seed tech_company 80 Terraform
|
||||||
|
TPU ai_tech_seed tech_term 80 TPU
|
||||||
|
tpu ai_tech_seed tech_term 80 TPU
|
||||||
|
vLLM ai_tech_seed ai_platform 80 vLLM
|
||||||
|
vllm ai_tech_seed ai_platform 80 vLLM
|
||||||
|
VLLM ai_tech_seed ai_platform 80 vLLM
|
||||||
|
Zoom ai_tech_seed tech_company 80 Zoom
|
||||||
|
zoom ai_tech_seed tech_company 80 Zoom
|
||||||
|
低空经济 di kong jing ji ai_tech_seed tech_term 80 低空经济
|
||||||
|
小语言模型 ai_tech_seed ai_term 80 SLM
|
||||||
|
擎天柱 ai_tech_seed tech_term 80 Optimus
|
||||||
|
旷视 ai_tech_seed tech_company 80 Megvii
|
||||||
|
电脑使用 ai_tech_seed ai_term 80 computer use
|
||||||
|
端侧AI ai_tech_seed ai_term 80 on-device AI
|
||||||
|
benchmark ai_tech_seed ai_term 78 benchmark
|
||||||
|
Block ai_tech_seed fintech 78 Block
|
||||||
|
block ai_tech_seed fintech 78 Block
|
||||||
|
Character AI ai_tech_seed ai_brand 78 Character AI
|
||||||
|
character.ai ai_tech_seed ai_brand 78 Character AI
|
||||||
|
Character.AI ai_tech_seed ai_brand 78 Character AI
|
||||||
|
Cline ai_tech_seed dev_tool 78 Cline
|
||||||
|
cline ai_tech_seed dev_tool 78 Cline
|
||||||
|
Cline AI ai_tech_seed dev_tool 78 Cline
|
||||||
|
Datadog ai_tech_seed tech_company 78 Datadog
|
||||||
|
datadog ai_tech_seed tech_company 78 Datadog
|
||||||
|
Elastic ai_tech_seed tech_company 78 Elastic
|
||||||
|
elastic ai_tech_seed tech_company 78 Elastic
|
||||||
|
Elasticsearch ai_tech_seed tech_company 78 Elastic
|
||||||
|
go global ai_tech_seed tech_term 78 出海
|
||||||
|
Great Wall ai_tech_seed tech_company 78 Great Wall
|
||||||
|
great wall ai_tech_seed tech_company 78 Great Wall
|
||||||
|
Jupyter ai_tech_seed dev_tool 78 Jupyter
|
||||||
|
jupyter ai_tech_seed dev_tool 78 Jupyter
|
||||||
|
Jupyter Notebook ai_tech_seed dev_tool 78 Jupyter
|
||||||
|
Linear ai_tech_seed tech_company 78 Linear
|
||||||
|
linear ai_tech_seed dev_tool 78 Linear
|
||||||
|
linear app ai_tech_seed tech_company 78 Linear
|
||||||
|
Lucid ai_tech_seed tech_company 78 Lucid
|
||||||
|
lucid motors ai_tech_seed tech_company 78 Lucid
|
||||||
|
Lucid Motors ai_tech_seed tech_company 78 Lucid
|
||||||
|
metaverse ai_tech_seed tech_term 78 元宇宙
|
||||||
|
MiniCPM ai_tech_seed ai_brand 78 面壁智能
|
||||||
|
Postman ai_tech_seed dev_tool 78 Postman
|
||||||
|
postman ai_tech_seed dev_tool 78 Postman
|
||||||
|
RAG pipeline ai_tech_seed ai_term 78 RAG pipeline
|
||||||
|
rag pipeline ai_tech_seed ai_term 78 RAG pipeline
|
||||||
|
remote work ai_tech_seed tech_term 78 远程办公
|
||||||
|
Replicate ai_tech_seed ai_platform 78 Replicate
|
||||||
|
replicate ai_tech_seed ai_platform 78 Replicate
|
||||||
|
Replit ai_tech_seed dev_tool 78 Replit
|
||||||
|
replit ai_tech_seed dev_tool 78 Replit
|
||||||
|
Replit Agent ai_tech_seed dev_tool 78 Replit
|
||||||
|
robin hood ai_tech_seed fintech 78 Robinhood
|
||||||
|
Robin Hood ai_tech_seed fintech 78 Robinhood
|
||||||
|
Robinhood ai_tech_seed fintech 78 Robinhood
|
||||||
|
service now ai_tech_seed tech_company 78 ServiceNow
|
||||||
|
ServiceNow ai_tech_seed tech_company 78 ServiceNow
|
||||||
|
Square ai_tech_seed fintech 78 Block
|
||||||
|
square ai_tech_seed fintech 78 Block
|
||||||
|
Twilio ai_tech_seed tech_company 78 Twilio
|
||||||
|
twilio ai_tech_seed tech_company 78 Twilio
|
||||||
|
Visa ai_tech_seed tech_company 78 Visa
|
||||||
|
visa ai_tech_seed tech_company 78 Visa
|
||||||
|
Web 3 ai_tech_seed tech_term 78 Web3
|
||||||
|
Web3 ai_tech_seed tech_term 78 Web3
|
||||||
|
web3 ai_tech_seed tech_term 78 Web3
|
||||||
|
元宇宙 yuan yu zhou ai_tech_seed tech_term 78 元宇宙
|
||||||
|
全球化 chu hai ai_tech_seed tech_term 78 出海
|
||||||
|
出海 chu hai ai_tech_seed tech_term 78 出海
|
||||||
|
基准测试 ai_tech_seed ai_term 78 benchmark
|
||||||
|
远程办公 yuan cheng ban gong ai_tech_seed tech_term 78 远程办公
|
||||||
|
长城汽车 ai_tech_seed tech_company 78 Great Wall
|
||||||
|
面壁智能 mian bi zhi neng ai_tech_seed ai_brand 78 面壁智能
|
||||||
|
Aider ai_tech_seed ai_brand 75 Aider
|
||||||
|
aider ai_tech_seed ai_brand 75 Aider
|
||||||
|
Bitbucket ai_tech_seed tech_company 75 Bitbucket
|
||||||
|
bitbucket ai_tech_seed tech_company 75 Bitbucket
|
||||||
|
circle ci ai_tech_seed dev_tool 75 CircleCI
|
||||||
|
Circle CI ai_tech_seed dev_tool 75 CircleCI
|
||||||
|
CircleCI ai_tech_seed dev_tool 75 CircleCI
|
||||||
|
digital nomad ai_tech_seed tech_term 75 数字游民
|
||||||
|
involution ai_tech_seed tech_term 75 内卷
|
||||||
|
jailbreak ai_tech_seed ai_term 75 jailbreak
|
||||||
|
Jenkins ai_tech_seed dev_tool 75 Jenkins
|
||||||
|
jenkins ai_tech_seed dev_tool 75 Jenkins
|
||||||
|
minicpm ai_tech_seed ai_model 75 MiniCPM
|
||||||
|
Notion AI ai_tech_seed ai_brand 75 Notion AI
|
||||||
|
notion ai ai_tech_seed ai_brand 75 Notion AI
|
||||||
|
Obsidian ai_tech_seed dev_tool 75 Obsidian
|
||||||
|
obsidian ai_tech_seed dev_tool 75 Obsidian
|
||||||
|
Pika ai_tech_seed ai_brand 75 Pika
|
||||||
|
pika ai ai_tech_seed ai_brand 75 Pika
|
||||||
|
Pika Labs ai_tech_seed ai_brand 75 Pika
|
||||||
|
Raycast ai_tech_seed dev_tool 75 Raycast
|
||||||
|
raycast ai_tech_seed dev_tool 75 Raycast
|
||||||
|
Warp ai_tech_seed dev_tool 75 Warp
|
||||||
|
warp terminal ai_tech_seed dev_tool 75 Warp
|
||||||
|
内卷 nei juan ai_tech_seed tech_term 75 内卷
|
||||||
|
数字游民 shu zi you min ai_tech_seed tech_term 75 数字游民
|
||||||
|
越狱 ai_tech_seed ai_term 75 jailbreak
|
||||||
|
面壁 ai_tech_seed ai_model 75 MiniCPM
|
||||||
|
lying flat ai_tech_seed tech_term 72 躺平
|
||||||
|
side hustle ai_tech_seed tech_term 72 副业
|
||||||
|
副业 fu ye ai_tech_seed tech_term 72 副业
|
||||||
|
躺平 tang ping ai_tech_seed tech_term 72 躺平
|
||||||
|
Binary file not shown.
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"bin_bytes" : 1976593,
|
||||||
|
"bin_file" : "OSGKeyboardCLM.bin",
|
||||||
|
"export_seconds" : 0.28117799758911133,
|
||||||
|
"generated_at" : "2026-07-05T08:19:00Z",
|
||||||
|
"identifier" : "com.osgkeyboard.custom-lm.v1",
|
||||||
|
"locale" : "zh_CN",
|
||||||
|
"phrase_count" : 129403,
|
||||||
|
"sources" : {
|
||||||
|
"ai_tech_seed" : 749,
|
||||||
|
"sogou_v1" : 128743
|
||||||
|
},
|
||||||
|
"version" : "1.0.0"
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"client_identifier" : "com.osgkeyboard.custom-lm.v1",
|
||||||
|
"configuration" : {
|
||||||
|
"language_model" : "\/Users\/rocky\/Documents\/OSGKeyboard\/OSGKeyboard\/Resources\/CustomLanguageModel\/v1\/compiled\/LM",
|
||||||
|
"vocabulary" : "\/Users\/rocky\/Documents\/OSGKeyboard\/OSGKeyboard\/Resources\/CustomLanguageModel\/v1\/compiled\/Vocab",
|
||||||
|
"weight" : null
|
||||||
|
},
|
||||||
|
"generated_at" : "2026-07-05T08:24:55Z",
|
||||||
|
"input_bin" : "OSGKeyboardCLM.bin",
|
||||||
|
"input_bin_bytes" : 1976593,
|
||||||
|
"language_model" : "LM",
|
||||||
|
"language_model_bytes" : 6398585,
|
||||||
|
"prepare_seconds" : 28.565693974494934,
|
||||||
|
"vocabulary" : "Vocab",
|
||||||
|
"vocabulary_bytes" : 178816
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"version": "v1",
|
||||||
|
"generated_at": "2026-07-05T07:47:30.162461+00:00",
|
||||||
|
"locale": "zh-Hans",
|
||||||
|
"entry_count": 128743,
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"key": "computer_terms",
|
||||||
|
"label": "计算机词汇大全【官方推荐】",
|
||||||
|
"weight": 5,
|
||||||
|
"raw_count": 10300
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "network_slang_local",
|
||||||
|
"label": "网络流行新词.scel",
|
||||||
|
"weight": 3,
|
||||||
|
"raw_count": 118599
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "sogou_popular_accumulated",
|
||||||
|
"label": "SogouPopularDict accumulated",
|
||||||
|
"weight": 1,
|
||||||
|
"raw_count": 118602
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"notes": [
|
||||||
|
"Sogou-derived data is for internal ASR experimentation only.",
|
||||||
|
"PhraseCount weights map to SFCustomLanguageModelData relative frequencies.",
|
||||||
|
"Higher source weight wins on duplicate words."
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"phrases": "phrases.tsv"
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
Executable
+9
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Full offline CLM pipeline on macOS:
|
||||||
|
# 1) export .bin from TSVs
|
||||||
|
# 2) prepare compiled LM + Vocab
|
||||||
|
set -euo pipefail
|
||||||
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||||
|
cd "$ROOT"
|
||||||
|
"$ROOT/Scripts/lexicon/build-clm-bin.sh" "$@"
|
||||||
|
"$ROOT/Scripts/lexicon/prepare-clm.sh" "$@"
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Build SFCustomLanguageModelData .bin on macOS (requires Speech framework).
|
||||||
|
set -euo pipefail
|
||||||
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||||
|
cd "$ROOT"
|
||||||
|
exec swift "$ROOT/Scripts/lexicon/export_clm.swift" "$@"
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Build the curated AI / tech / brand seed lexicon for OSGKeyboard ASR.
|
||||||
|
|
||||||
|
Reads Scripts/lexicon/seeds/ai_tech_brands_seed.tsv and emits:
|
||||||
|
OSGKeyboard/Resources/CustomLanguageModel/ai-tech-brands/v1/phrases.tsv
|
||||||
|
OSGKeyboard/Resources/CustomLanguageModel/ai-tech-brands/v1/manifest.json
|
||||||
|
|
||||||
|
Each seed row may declare pipe-separated aliases; aliases are expanded into
|
||||||
|
additional phrase rows sharing the same category and weight.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
from collections import Counter
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||||
|
DEFAULT_SEED = REPO_ROOT / "Scripts/lexicon/seeds/ai_tech_brands_seed.tsv"
|
||||||
|
DEFAULT_OUTPUT = REPO_ROOT / "OSGKeyboard/Resources/CustomLanguageModel/ai-tech-brands/v1"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class SeedRow:
|
||||||
|
word: str
|
||||||
|
pinyin: str
|
||||||
|
aliases: tuple[str, ...]
|
||||||
|
category: str
|
||||||
|
weight: int
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class PhraseRow:
|
||||||
|
word: str
|
||||||
|
pinyin: str
|
||||||
|
source: str
|
||||||
|
category: str
|
||||||
|
weight: int
|
||||||
|
canonical: str
|
||||||
|
|
||||||
|
|
||||||
|
def parse_seed_file(seed_path: Path) -> list[SeedRow]:
|
||||||
|
rows: list[SeedRow] = []
|
||||||
|
with seed_path.open(encoding="utf-8") as handle:
|
||||||
|
for line_number, raw_line in enumerate(handle, start=1):
|
||||||
|
line = raw_line.strip()
|
||||||
|
if not line or line.startswith("#"):
|
||||||
|
continue
|
||||||
|
parts = line.split("\t")
|
||||||
|
if len(parts) < 4:
|
||||||
|
print(f"Warning: skip malformed line {line_number}: {line}", file=sys.stderr)
|
||||||
|
continue
|
||||||
|
word = parts[0].strip()
|
||||||
|
pinyin = parts[1].strip() if len(parts) > 1 else ""
|
||||||
|
aliases_raw = parts[2].strip() if len(parts) > 2 else ""
|
||||||
|
category = parts[3].strip() if len(parts) > 3 else "misc"
|
||||||
|
weight_raw = parts[4].strip() if len(parts) > 4 else "80"
|
||||||
|
if not word:
|
||||||
|
continue
|
||||||
|
aliases = tuple(
|
||||||
|
alias.strip()
|
||||||
|
for alias in aliases_raw.split("|")
|
||||||
|
if alias.strip() and alias.strip() != word
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
weight = int(weight_raw)
|
||||||
|
except ValueError:
|
||||||
|
weight = 80
|
||||||
|
rows.append(
|
||||||
|
SeedRow(
|
||||||
|
word=word,
|
||||||
|
pinyin=pinyin,
|
||||||
|
aliases=aliases,
|
||||||
|
category=category,
|
||||||
|
weight=weight,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return rows
|
||||||
|
|
||||||
|
|
||||||
|
def expand_rows(seeds: list[SeedRow]) -> list[PhraseRow]:
|
||||||
|
"""Expand canonical + aliases; dedupe by word keeping highest weight."""
|
||||||
|
merged: dict[str, PhraseRow] = {}
|
||||||
|
|
||||||
|
for seed in seeds:
|
||||||
|
candidates = [(seed.word, seed.pinyin, seed.category, seed.weight, seed.word)]
|
||||||
|
for alias in seed.aliases:
|
||||||
|
# Aliases inherit canonical pinyin only when alias is Chinese.
|
||||||
|
alias_pinyin = seed.pinyin if _contains_cjk(alias) else ""
|
||||||
|
candidates.append((alias, alias_pinyin, seed.category, seed.weight, seed.word))
|
||||||
|
|
||||||
|
for word, pinyin, category, weight, canonical in candidates:
|
||||||
|
if not word:
|
||||||
|
continue
|
||||||
|
row = PhraseRow(
|
||||||
|
word=word,
|
||||||
|
pinyin=pinyin,
|
||||||
|
source="ai_tech_seed",
|
||||||
|
category=category,
|
||||||
|
weight=weight,
|
||||||
|
canonical=canonical,
|
||||||
|
)
|
||||||
|
current = merged.get(word)
|
||||||
|
if current is None or row.weight > current.weight:
|
||||||
|
merged[word] = row
|
||||||
|
|
||||||
|
return sorted(merged.values(), key=lambda item: (-item.weight, item.word.lower()))
|
||||||
|
|
||||||
|
|
||||||
|
def _contains_cjk(text: str) -> bool:
|
||||||
|
return any("\u4e00" <= char <= "\u9fff" for char in text)
|
||||||
|
|
||||||
|
|
||||||
|
def write_outputs(phrases: list[PhraseRow], output_dir: Path, seed_path: Path) -> None:
|
||||||
|
output_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
phrases_path = output_dir / "phrases.tsv"
|
||||||
|
with phrases_path.open("w", encoding="utf-8") as handle:
|
||||||
|
handle.write("word\tpinyin\tsource\tcategory\tweight\tcanonical\n")
|
||||||
|
for row in phrases:
|
||||||
|
handle.write(
|
||||||
|
f"{row.word}\t{row.pinyin}\t{row.source}\t{row.category}\t{row.weight}\t{row.canonical}\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
category_counts = Counter(row.category for row in phrases)
|
||||||
|
manifest = {
|
||||||
|
"version": "v1",
|
||||||
|
"name": "ai-tech-brands",
|
||||||
|
"generated_at": datetime.now(timezone.utc).isoformat(),
|
||||||
|
"locale": "zh-Hans",
|
||||||
|
"entry_count": len(phrases),
|
||||||
|
"seed_file": str(seed_path.relative_to(REPO_ROOT)),
|
||||||
|
"license": "MIT (curated seed; OSGKeyboard contributors)",
|
||||||
|
"categories": dict(sorted(category_counts.items())),
|
||||||
|
"notes": [
|
||||||
|
"Curated bilingual AI brands, tech companies, terminology, and hot words.",
|
||||||
|
"English canonical forms + Chinese aliases for ASR PhraseCount weighting.",
|
||||||
|
"Aliases expanded at build time; canonical column tracks the primary form.",
|
||||||
|
"English post-processing (casing) remains LLM polish responsibility.",
|
||||||
|
],
|
||||||
|
"files": {"phrases": phrases_path.name},
|
||||||
|
}
|
||||||
|
manifest_path = output_dir / "manifest.json"
|
||||||
|
manifest_path.write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def build(seed_path: Path, output_dir: Path) -> int:
|
||||||
|
if not seed_path.exists():
|
||||||
|
print(f"Missing seed file: {seed_path}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
seeds = parse_seed_file(seed_path)
|
||||||
|
phrases = expand_rows(seeds)
|
||||||
|
write_outputs(phrases, output_dir, seed_path)
|
||||||
|
|
||||||
|
print(f"Seed rows: {len(seeds)}")
|
||||||
|
print(f"Expanded unique phrases: {len(phrases)}")
|
||||||
|
print(f"Wrote {output_dir / 'phrases.tsv'}")
|
||||||
|
print(f"Wrote {output_dir / 'manifest.json'}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
parser = argparse.ArgumentParser(description="Build AI/tech brand seed lexicon")
|
||||||
|
parser.add_argument("--seed", type=Path, default=DEFAULT_SEED)
|
||||||
|
parser.add_argument("--output-dir", type=Path, default=DEFAULT_OUTPUT)
|
||||||
|
args = parser.parse_args()
|
||||||
|
return build(args.seed, args.output_dir)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -0,0 +1,184 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Build OSGKeyboard custom ASR lexicon v1 from Sogou-derived sources.
|
||||||
|
|
||||||
|
Sources (experimentation only — Sogou data is non-commercial):
|
||||||
|
1. ASC8384/SogouPopularDict accumulated pinyin TSV
|
||||||
|
2. Local 计算机词汇大全【官方推荐】.scel
|
||||||
|
3. Local 网络流行新词.scel
|
||||||
|
|
||||||
|
Output:
|
||||||
|
OSGKeyboard/Resources/CustomLanguageModel/v1/phrases.tsv
|
||||||
|
OSGKeyboard/Resources/CustomLanguageModel/v1/manifest.json
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import urllib.request
|
||||||
|
from collections import Counter
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from scel_parser import get_scel_info, load_pinyin_tsv, parse_scel_file
|
||||||
|
|
||||||
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||||
|
DEFAULT_OUTPUT_DIR = REPO_ROOT / "OSGKeyboard/Resources/CustomLanguageModel/v1"
|
||||||
|
SOGOU_ACCUMULATED_URL = (
|
||||||
|
"https://raw.githubusercontent.com/ASC8384/SogouPopularDict/main/"
|
||||||
|
"data/sogou_network_words_accumulated_pinyin.tsv"
|
||||||
|
)
|
||||||
|
|
||||||
|
DEFAULT_COMPUTER_SCEL = Path("/Users/rocky/Downloads/计算机词汇大全【官方推荐】.scel")
|
||||||
|
DEFAULT_NETWORK_SCEL = Path("/Users/rocky/Downloads/网络流行新词.scel")
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class SourceSpec:
|
||||||
|
key: str
|
||||||
|
label: str
|
||||||
|
weight: int
|
||||||
|
|
||||||
|
|
||||||
|
SOURCES = [
|
||||||
|
SourceSpec("computer_terms", "计算机词汇大全【官方推荐】", weight=5),
|
||||||
|
SourceSpec("network_slang_local", "网络流行新词.scel", weight=3),
|
||||||
|
SourceSpec("sogou_popular_accumulated", "SogouPopularDict accumulated", weight=1),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def download_accumulated_tsv(destination: Path) -> None:
|
||||||
|
destination.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
with urllib.request.urlopen(SOGOU_ACCUMULATED_URL, timeout=120) as response:
|
||||||
|
destination.write_bytes(response.read())
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class LexiconEntry:
|
||||||
|
word: str
|
||||||
|
pinyin: str
|
||||||
|
source: str
|
||||||
|
weight: int
|
||||||
|
|
||||||
|
|
||||||
|
def merge_entries(sources: list[tuple[SourceSpec, list[tuple[str, str]]]]) -> list[LexiconEntry]:
|
||||||
|
merged: dict[str, LexiconEntry] = {}
|
||||||
|
source_counts: Counter[str] = Counter()
|
||||||
|
|
||||||
|
for spec, entries in sources:
|
||||||
|
for word, pinyin in entries:
|
||||||
|
source_counts[spec.key] += 1
|
||||||
|
current = merged.get(word)
|
||||||
|
candidate = LexiconEntry(word=word, pinyin=pinyin, source=spec.key, weight=spec.weight)
|
||||||
|
if current is None or candidate.weight > current.weight:
|
||||||
|
merged[word] = candidate
|
||||||
|
elif current.weight == candidate.weight and not current.pinyin and pinyin:
|
||||||
|
merged[word] = candidate
|
||||||
|
|
||||||
|
return sorted(merged.values(), key=lambda item: (item.weight * -1, item.word))
|
||||||
|
|
||||||
|
|
||||||
|
def write_outputs(entries: list[LexiconEntry], output_dir: Path, source_stats: dict[str, int]) -> None:
|
||||||
|
output_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
phrases_path = output_dir / "phrases.tsv"
|
||||||
|
with phrases_path.open("w", encoding="utf-8") as handle:
|
||||||
|
handle.write("word\tpinyin\tsource\tweight\n")
|
||||||
|
for entry in entries:
|
||||||
|
handle.write(f"{entry.word}\t{entry.pinyin}\t{entry.source}\t{entry.weight}\n")
|
||||||
|
|
||||||
|
manifest = {
|
||||||
|
"version": "v1",
|
||||||
|
"generated_at": datetime.now(timezone.utc).isoformat(),
|
||||||
|
"locale": "zh-Hans",
|
||||||
|
"entry_count": len(entries),
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"key": spec.key,
|
||||||
|
"label": spec.label,
|
||||||
|
"weight": spec.weight,
|
||||||
|
"raw_count": source_stats.get(spec.key, 0),
|
||||||
|
}
|
||||||
|
for spec in SOURCES
|
||||||
|
],
|
||||||
|
"notes": [
|
||||||
|
"Sogou-derived data is for internal ASR experimentation only.",
|
||||||
|
"PhraseCount weights map to SFCustomLanguageModelData relative frequencies.",
|
||||||
|
"Higher source weight wins on duplicate words.",
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"phrases": phrases_path.name,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
manifest_path = output_dir / "manifest.json"
|
||||||
|
manifest_path.write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def build(
|
||||||
|
*,
|
||||||
|
computer_scel: Path,
|
||||||
|
network_scel: Path,
|
||||||
|
output_dir: Path,
|
||||||
|
skip_download: bool,
|
||||||
|
) -> int:
|
||||||
|
cache_dir = REPO_ROOT / ".cache/lexicon"
|
||||||
|
cache_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
accumulated_tsv = cache_dir / "sogou_network_words_accumulated_pinyin.tsv"
|
||||||
|
|
||||||
|
if not skip_download and not accumulated_tsv.exists():
|
||||||
|
print(f"Downloading {SOGOU_ACCUMULATED_URL} …")
|
||||||
|
download_accumulated_tsv(accumulated_tsv)
|
||||||
|
elif not accumulated_tsv.exists():
|
||||||
|
print(f"Missing accumulated TSV: {accumulated_tsv}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if not computer_scel.exists():
|
||||||
|
print(f"Missing computer scel: {computer_scel}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
if not network_scel.exists():
|
||||||
|
print(f"Missing network scel: {network_scel}", file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
computer_info = get_scel_info(computer_scel)
|
||||||
|
network_info = get_scel_info(network_scel)
|
||||||
|
print(f"Computer dict: {computer_info.name} ({computer_info.word_count} header count)")
|
||||||
|
print(f"Network dict: {network_info.name} ({network_info.word_count} header count)")
|
||||||
|
|
||||||
|
loaded_sources: list[tuple[SourceSpec, list[tuple[str, str]]]] = [
|
||||||
|
(SOURCES[0], parse_scel_file(computer_scel)),
|
||||||
|
(SOURCES[1], parse_scel_file(network_scel)),
|
||||||
|
(SOURCES[2], load_pinyin_tsv(accumulated_tsv)),
|
||||||
|
]
|
||||||
|
|
||||||
|
source_stats = {spec.key: len(entries) for spec, entries in loaded_sources}
|
||||||
|
merged = merge_entries(loaded_sources)
|
||||||
|
write_outputs(merged, output_dir, source_stats)
|
||||||
|
|
||||||
|
print(f"Raw counts: {source_stats}")
|
||||||
|
print(f"Merged unique entries: {len(merged)}")
|
||||||
|
print(f"Wrote {output_dir / 'phrases.tsv'}")
|
||||||
|
print(f"Wrote {output_dir / 'manifest.json'}")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> int:
|
||||||
|
parser = argparse.ArgumentParser(description="Build OSGKeyboard custom ASR lexicon v1")
|
||||||
|
parser.add_argument("--computer-scel", type=Path, default=DEFAULT_COMPUTER_SCEL)
|
||||||
|
parser.add_argument("--network-scel", type=Path, default=DEFAULT_NETWORK_SCEL)
|
||||||
|
parser.add_argument("--output-dir", type=Path, default=DEFAULT_OUTPUT_DIR)
|
||||||
|
parser.add_argument("--skip-download", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
return build(
|
||||||
|
computer_scel=args.computer_scel,
|
||||||
|
network_scel=args.network_scel,
|
||||||
|
output_dir=args.output_dir,
|
||||||
|
skip_download=args.skip_download,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -0,0 +1,272 @@
|
|||||||
|
#!/usr/bin/env swift
|
||||||
|
//
|
||||||
|
// export_clm.swift
|
||||||
|
// OSGKeyboard · offline SFCustomLanguageModelData exporter (macOS 14+)
|
||||||
|
//
|
||||||
|
// Reads merged phrase TSVs and writes a .bin training asset via Speech framework.
|
||||||
|
// Usage:
|
||||||
|
// swift Scripts/lexicon/export_clm.swift
|
||||||
|
// swift Scripts/lexicon/export_clm.swift --max-entries 30000
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Speech
|
||||||
|
|
||||||
|
// MARK: - CLI
|
||||||
|
|
||||||
|
struct CLIOptions {
|
||||||
|
var sogouTSV: URL
|
||||||
|
var aiTechTSV: URL
|
||||||
|
var outputBin: URL
|
||||||
|
var localeID: String
|
||||||
|
var modelID: String
|
||||||
|
var modelVersion: String
|
||||||
|
var maxEntries: Int?
|
||||||
|
|
||||||
|
static func parse() -> CLIOptions {
|
||||||
|
let repoRoot = URL(fileURLWithPath: #filePath)
|
||||||
|
.deletingLastPathComponent()
|
||||||
|
.deletingLastPathComponent()
|
||||||
|
.deletingLastPathComponent()
|
||||||
|
|
||||||
|
var sogou = repoRoot.appendingPathComponent(
|
||||||
|
"OSGKeyboard/Resources/CustomLanguageModel/v1/phrases.tsv"
|
||||||
|
)
|
||||||
|
var aiTech = repoRoot.appendingPathComponent(
|
||||||
|
"OSGKeyboard/Resources/CustomLanguageModel/ai-tech-brands/v1/phrases.tsv"
|
||||||
|
)
|
||||||
|
var output = repoRoot.appendingPathComponent(
|
||||||
|
"OSGKeyboard/Resources/CustomLanguageModel/v1/OSGKeyboardCLM.bin"
|
||||||
|
)
|
||||||
|
var localeID = "zh_CN"
|
||||||
|
var modelID = "com.osgkeyboard.custom-lm.v1"
|
||||||
|
var modelVersion = "1.0.0"
|
||||||
|
var maxEntries: Int?
|
||||||
|
|
||||||
|
var iterator = CommandLine.arguments.dropFirst().makeIterator()
|
||||||
|
while let flag = iterator.next() {
|
||||||
|
switch flag {
|
||||||
|
case "--sogou-tsv":
|
||||||
|
sogou = URL(fileURLWithPath: iterator.next() ?? "")
|
||||||
|
case "--ai-tech-tsv":
|
||||||
|
aiTech = URL(fileURLWithPath: iterator.next() ?? "")
|
||||||
|
case "--output":
|
||||||
|
output = URL(fileURLWithPath: iterator.next() ?? "")
|
||||||
|
case "--locale":
|
||||||
|
localeID = iterator.next() ?? localeID
|
||||||
|
case "--identifier":
|
||||||
|
modelID = iterator.next() ?? modelID
|
||||||
|
case "--version":
|
||||||
|
modelVersion = iterator.next() ?? modelVersion
|
||||||
|
case "--max-entries":
|
||||||
|
maxEntries = Int(iterator.next() ?? "")
|
||||||
|
case "-h", "--help":
|
||||||
|
printUsage()
|
||||||
|
exit(0)
|
||||||
|
default:
|
||||||
|
fputs("Unknown flag: \(flag)\n", stderr)
|
||||||
|
printUsage()
|
||||||
|
exit(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return CLIOptions(
|
||||||
|
sogouTSV: sogou,
|
||||||
|
aiTechTSV: aiTech,
|
||||||
|
outputBin: output,
|
||||||
|
localeID: localeID,
|
||||||
|
modelID: modelID,
|
||||||
|
modelVersion: modelVersion,
|
||||||
|
maxEntries: maxEntries
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
static func printUsage() {
|
||||||
|
print("""
|
||||||
|
export_clm.swift — build SFCustomLanguageModelData .bin on macOS
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--sogou-tsv <path> Sogou merged phrases TSV
|
||||||
|
--ai-tech-tsv <path> AI/tech seed phrases TSV
|
||||||
|
--output <path> Output .bin path
|
||||||
|
--locale <id> Locale identifier (default: zh_CN)
|
||||||
|
--identifier <id> Custom LM identifier
|
||||||
|
--version <ver> Custom LM version string
|
||||||
|
--max-entries <n> Optional cap for smoke tests
|
||||||
|
-h, --help Show help
|
||||||
|
""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - TSV parsing
|
||||||
|
|
||||||
|
struct PhraseEntry: Hashable {
|
||||||
|
let phrase: String
|
||||||
|
let weight: Int
|
||||||
|
let source: String
|
||||||
|
}
|
||||||
|
|
||||||
|
enum TSVLoader {
|
||||||
|
static func load(from url: URL, sourceLabel: String) throws -> [PhraseEntry] {
|
||||||
|
let text = try String(contentsOf: url, encoding: .utf8)
|
||||||
|
var entries: [PhraseEntry] = []
|
||||||
|
|
||||||
|
for (index, rawLine) in text.split(whereSeparator: \.isNewline).enumerated() {
|
||||||
|
let line = String(rawLine)
|
||||||
|
if index == 0, line.lowercased().hasPrefix("word\t") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if line.isEmpty || line.hasPrefix("#") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
let parts = line.split(separator: "\t", omittingEmptySubsequences: false).map(String.init)
|
||||||
|
guard let word = parts.first?.trimmingCharacters(in: .whitespacesAndNewlines), !word.isEmpty else {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Formats:
|
||||||
|
// sogou: word, pinyin, source, weight
|
||||||
|
// ai-tech: word, pinyin, source, category, weight, canonical
|
||||||
|
let weight: Int
|
||||||
|
if parts.count >= 6, let parsed = Int(parts[4]) {
|
||||||
|
weight = parsed
|
||||||
|
} else if parts.count >= 4, let parsed = Int(parts[3]) {
|
||||||
|
weight = parsed
|
||||||
|
} else {
|
||||||
|
weight = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
let source = parts.count >= 3 ? parts[2] : sourceLabel
|
||||||
|
entries.append(PhraseEntry(phrase: word, weight: max(1, weight), source: source))
|
||||||
|
}
|
||||||
|
|
||||||
|
return entries
|
||||||
|
}
|
||||||
|
|
||||||
|
static func merge(_ batches: [[PhraseEntry]]) -> [PhraseEntry] {
|
||||||
|
var merged: [String: PhraseEntry] = [:]
|
||||||
|
for batch in batches {
|
||||||
|
for entry in batch {
|
||||||
|
if let current = merged[entry.phrase] {
|
||||||
|
if entry.weight >= current.weight {
|
||||||
|
merged[entry.phrase] = entry
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
merged[entry.phrase] = entry
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return merged.values.sorted {
|
||||||
|
if $0.weight != $1.weight { return $0.weight > $1.weight }
|
||||||
|
return $0.phrase < $1.phrase
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Export
|
||||||
|
|
||||||
|
enum ExportCLM {
|
||||||
|
static func run() async throws {
|
||||||
|
let options = CLIOptions.parse()
|
||||||
|
let fm = FileManager.default
|
||||||
|
|
||||||
|
guard fm.fileExists(atPath: options.sogouTSV.path) else {
|
||||||
|
throw ExportError.missingInput(options.sogouTSV.path)
|
||||||
|
}
|
||||||
|
guard fm.fileExists(atPath: options.aiTechTSV.path) else {
|
||||||
|
throw ExportError.missingInput(options.aiTechTSV.path)
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs("Loading phrases…\n", stderr)
|
||||||
|
let sogou = try TSVLoader.load(from: options.sogouTSV, sourceLabel: "sogou_v1")
|
||||||
|
let aiTech = try TSVLoader.load(from: options.aiTechTSV, sourceLabel: "ai_tech_seed")
|
||||||
|
var merged = TSVLoader.merge([sogou, aiTech])
|
||||||
|
|
||||||
|
if let cap = options.maxEntries, merged.count > cap {
|
||||||
|
merged = Array(merged.prefix(cap))
|
||||||
|
fputs("Capped to \(cap) entries (--max-entries)\n", stderr)
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs(
|
||||||
|
"Merged \(merged.count) unique phrases (sogou=\(sogou.count), ai-tech=\(aiTech.count))\n",
|
||||||
|
stderr
|
||||||
|
)
|
||||||
|
fputs("Locale=\(options.localeID) identifier=\(options.modelID) version=\(options.modelVersion)\n", stderr)
|
||||||
|
|
||||||
|
let locale = Locale(identifier: options.localeID)
|
||||||
|
let started = Date()
|
||||||
|
|
||||||
|
fputs("Building SFCustomLanguageModelData…\n", stderr)
|
||||||
|
let data = SFCustomLanguageModelData(
|
||||||
|
locale: locale,
|
||||||
|
identifier: options.modelID,
|
||||||
|
version: options.modelVersion
|
||||||
|
) {
|
||||||
|
for entry in merged {
|
||||||
|
SFCustomLanguageModelData.PhraseCount(
|
||||||
|
phrase: entry.phrase,
|
||||||
|
count: entry.weight
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let outputURL = options.outputBin
|
||||||
|
let parent = outputURL.deletingLastPathComponent()
|
||||||
|
try fm.createDirectory(at: parent, withIntermediateDirectories: true)
|
||||||
|
if fm.fileExists(atPath: outputURL.path) {
|
||||||
|
try fm.removeItem(at: outputURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs("Exporting to \(outputURL.path)…\n", stderr)
|
||||||
|
try await data.export(to: outputURL)
|
||||||
|
|
||||||
|
let elapsed = Date().timeIntervalSince(started)
|
||||||
|
let bytes = (try? fm.attributesOfItem(atPath: outputURL.path)[.size] as? NSNumber)?.intValue ?? 0
|
||||||
|
fputs(
|
||||||
|
"Done in \(String(format: "%.1f", elapsed))s — \(outputURL.lastPathComponent) (\(bytes) bytes)\n",
|
||||||
|
stderr
|
||||||
|
)
|
||||||
|
|
||||||
|
let manifestURL = parent.appendingPathComponent("compiled-manifest.json")
|
||||||
|
let manifest: [String: Any] = [
|
||||||
|
"generated_at": ISO8601DateFormatter().string(from: Date()),
|
||||||
|
"locale": options.localeID,
|
||||||
|
"identifier": options.modelID,
|
||||||
|
"version": options.modelVersion,
|
||||||
|
"phrase_count": merged.count,
|
||||||
|
"sources": [
|
||||||
|
"sogou_v1": sogou.count,
|
||||||
|
"ai_tech_seed": aiTech.count,
|
||||||
|
],
|
||||||
|
"bin_file": outputURL.lastPathComponent,
|
||||||
|
"bin_bytes": bytes,
|
||||||
|
"export_seconds": elapsed,
|
||||||
|
]
|
||||||
|
let manifestData = try JSONSerialization.data(withJSONObject: manifest, options: [.prettyPrinted, .sortedKeys])
|
||||||
|
try manifestData.write(to: manifestURL)
|
||||||
|
fputs("Wrote \(manifestURL.path)\n", stderr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ExportError: LocalizedError {
|
||||||
|
case missingInput(String)
|
||||||
|
|
||||||
|
var errorDescription: String? {
|
||||||
|
switch self {
|
||||||
|
case .missingInput(let path):
|
||||||
|
return "Missing input file: \(path)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Task {
|
||||||
|
do {
|
||||||
|
try await ExportCLM.run()
|
||||||
|
exit(0)
|
||||||
|
} catch {
|
||||||
|
fputs("export_clm failed: \(error)\n", stderr)
|
||||||
|
exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dispatchMain()
|
||||||
Executable
+6
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Compile SFCustomLanguageModelData .bin into LM + Vocab on macOS.
|
||||||
|
set -euo pipefail
|
||||||
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||||
|
cd "$ROOT"
|
||||||
|
exec swift "$ROOT/Scripts/lexicon/prepare_clm.swift" "$@"
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
#!/usr/bin/env swift
|
||||||
|
//
|
||||||
|
// prepare_clm.swift
|
||||||
|
// OSGKeyboard · offline custom language model compiler (macOS 14+)
|
||||||
|
//
|
||||||
|
// Takes a SFCustomLanguageModelData .bin and runs:
|
||||||
|
// SFSpeechLanguageModel.prepareCustomLanguageModel(...)
|
||||||
|
//
|
||||||
|
// Usage:
|
||||||
|
// swift Scripts/lexicon/prepare_clm.swift
|
||||||
|
// swift Scripts/lexicon/prepare_clm.swift --input path/to/OSGKeyboardCLM.bin
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Speech
|
||||||
|
|
||||||
|
// MARK: - CLI
|
||||||
|
|
||||||
|
struct PrepareOptions {
|
||||||
|
var inputBin: URL
|
||||||
|
var outputDir: URL
|
||||||
|
var clientIdentifier: String
|
||||||
|
var weight: Double?
|
||||||
|
|
||||||
|
static func parse() -> PrepareOptions {
|
||||||
|
let repoRoot = URL(fileURLWithPath: #filePath)
|
||||||
|
.deletingLastPathComponent()
|
||||||
|
.deletingLastPathComponent()
|
||||||
|
.deletingLastPathComponent()
|
||||||
|
|
||||||
|
var input = repoRoot.appendingPathComponent(
|
||||||
|
"OSGKeyboard/Resources/CustomLanguageModel/v1/OSGKeyboardCLM.bin"
|
||||||
|
)
|
||||||
|
var output = repoRoot.appendingPathComponent(
|
||||||
|
"OSGKeyboard/Resources/CustomLanguageModel/v1/compiled"
|
||||||
|
)
|
||||||
|
var clientID = "com.osgkeyboard.custom-lm.v1"
|
||||||
|
var weight: Double?
|
||||||
|
|
||||||
|
var iterator = CommandLine.arguments.dropFirst().makeIterator()
|
||||||
|
while let flag = iterator.next() {
|
||||||
|
switch flag {
|
||||||
|
case "--input":
|
||||||
|
input = URL(fileURLWithPath: iterator.next() ?? "")
|
||||||
|
case "--output-dir":
|
||||||
|
output = URL(fileURLWithPath: iterator.next() ?? "")
|
||||||
|
case "--client-identifier":
|
||||||
|
clientID = iterator.next() ?? clientID
|
||||||
|
case "--weight":
|
||||||
|
weight = Double(iterator.next() ?? "")
|
||||||
|
case "-h", "--help":
|
||||||
|
printUsage()
|
||||||
|
exit(0)
|
||||||
|
default:
|
||||||
|
fputs("Unknown flag: \(flag)\n", stderr)
|
||||||
|
printUsage()
|
||||||
|
exit(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return PrepareOptions(
|
||||||
|
inputBin: input,
|
||||||
|
outputDir: output,
|
||||||
|
clientIdentifier: clientID,
|
||||||
|
weight: weight
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
static func printUsage() {
|
||||||
|
print("""
|
||||||
|
prepare_clm.swift — compile SFCustomLanguageModelData .bin on macOS
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--input <path> Training .bin (default: OSGKeyboardCLM.bin)
|
||||||
|
--output-dir <path> Directory for compiled LM + Vocab
|
||||||
|
--client-identifier <id> Client identifier (default: com.osgkeyboard.custom-lm.v1)
|
||||||
|
--weight <0.0-1.0> Optional customization weight
|
||||||
|
-h, --help Show help
|
||||||
|
""")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: - Runner
|
||||||
|
|
||||||
|
enum PrepareCLM {
|
||||||
|
static func run() async throws {
|
||||||
|
let options = PrepareOptions.parse()
|
||||||
|
let fm = FileManager.default
|
||||||
|
|
||||||
|
guard fm.fileExists(atPath: options.inputBin.path) else {
|
||||||
|
throw PrepareError.missingInput(options.inputBin.path)
|
||||||
|
}
|
||||||
|
|
||||||
|
try fm.createDirectory(at: options.outputDir, withIntermediateDirectories: true)
|
||||||
|
|
||||||
|
let languageModelURL = options.outputDir.appendingPathComponent("LM")
|
||||||
|
let vocabularyURL = options.outputDir.appendingPathComponent("Vocab")
|
||||||
|
|
||||||
|
// Remove stale outputs so prepare always starts clean.
|
||||||
|
for url in [languageModelURL, vocabularyURL] {
|
||||||
|
if fm.fileExists(atPath: url.path) {
|
||||||
|
try fm.removeItem(at: url)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let configuration: SFSpeechLanguageModel.Configuration
|
||||||
|
if let weight = options.weight {
|
||||||
|
configuration = SFSpeechLanguageModel.Configuration(
|
||||||
|
languageModel: languageModelURL,
|
||||||
|
vocabulary: vocabularyURL,
|
||||||
|
weight: NSNumber(value: weight)
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
configuration = SFSpeechLanguageModel.Configuration(
|
||||||
|
languageModel: languageModelURL,
|
||||||
|
vocabulary: vocabularyURL
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs("Input asset: \(options.inputBin.path)\n", stderr)
|
||||||
|
fputs("Output dir: \(options.outputDir.path)\n", stderr)
|
||||||
|
fputs("Client ID: \(options.clientIdentifier)\n", stderr)
|
||||||
|
|
||||||
|
let inputBytes = (try? fm.attributesOfItem(atPath: options.inputBin.path)[.size] as? NSNumber)?.intValue ?? 0
|
||||||
|
fputs("Preparing custom language model (\(inputBytes) byte asset)…\n", stderr)
|
||||||
|
fputs("This may take several minutes for large lexicons.\n", stderr)
|
||||||
|
|
||||||
|
let started = Date()
|
||||||
|
try await SFSpeechLanguageModel.prepareCustomLanguageModel(
|
||||||
|
for: options.inputBin,
|
||||||
|
clientIdentifier: options.clientIdentifier,
|
||||||
|
configuration: configuration
|
||||||
|
)
|
||||||
|
let elapsed = Date().timeIntervalSince(started)
|
||||||
|
|
||||||
|
let lmBytes = fileSize(at: languageModelURL)
|
||||||
|
let vocabBytes = fileSize(at: vocabularyURL)
|
||||||
|
|
||||||
|
fputs(
|
||||||
|
"Done in \(String(format: "%.1f", elapsed))s — LM=\(lmBytes) bytes, Vocab=\(vocabBytes) bytes\n",
|
||||||
|
stderr
|
||||||
|
)
|
||||||
|
|
||||||
|
let manifestURL = options.outputDir.appendingPathComponent("prepared-manifest.json")
|
||||||
|
let manifest: [String: Any] = [
|
||||||
|
"generated_at": ISO8601DateFormatter().string(from: Date()),
|
||||||
|
"client_identifier": options.clientIdentifier,
|
||||||
|
"input_bin": options.inputBin.lastPathComponent,
|
||||||
|
"input_bin_bytes": inputBytes,
|
||||||
|
"language_model": languageModelURL.lastPathComponent,
|
||||||
|
"language_model_bytes": lmBytes,
|
||||||
|
"vocabulary": vocabularyURL.lastPathComponent,
|
||||||
|
"vocabulary_bytes": vocabBytes,
|
||||||
|
"prepare_seconds": elapsed,
|
||||||
|
"configuration": [
|
||||||
|
"language_model": languageModelURL.path,
|
||||||
|
"vocabulary": vocabularyURL.path,
|
||||||
|
"weight": options.weight as Any,
|
||||||
|
],
|
||||||
|
]
|
||||||
|
let manifestData = try JSONSerialization.data(
|
||||||
|
withJSONObject: manifest,
|
||||||
|
options: [.prettyPrinted, .sortedKeys]
|
||||||
|
)
|
||||||
|
try manifestData.write(to: manifestURL)
|
||||||
|
fputs("Wrote \(manifestURL.path)\n", stderr)
|
||||||
|
}
|
||||||
|
|
||||||
|
private static func fileSize(at url: URL) -> Int {
|
||||||
|
let fm = FileManager.default
|
||||||
|
guard fm.fileExists(atPath: url.path) else { return 0 }
|
||||||
|
return (try? fm.attributesOfItem(atPath: url.path)[.size] as? NSNumber)?.intValue ?? 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PrepareError: LocalizedError {
|
||||||
|
case missingInput(String)
|
||||||
|
|
||||||
|
var errorDescription: String? {
|
||||||
|
switch self {
|
||||||
|
case .missingInput(let path):
|
||||||
|
return "Missing input .bin: \(path)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Task {
|
||||||
|
do {
|
||||||
|
try await PrepareCLM.run()
|
||||||
|
exit(0)
|
||||||
|
} catch {
|
||||||
|
fputs("prepare_clm failed: \(error)\n", stderr)
|
||||||
|
exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dispatchMain()
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Parse Sogou .scel cell dictionaries into (word, pinyin) entries.
|
||||||
|
|
||||||
|
Layout follows the classic SCEL format used by imewlconverter / SogouPopularDict.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import struct
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass(frozen=True)
|
||||||
|
class ScelInfo:
|
||||||
|
word_count: int
|
||||||
|
name: str
|
||||||
|
type_name: str
|
||||||
|
description: str
|
||||||
|
|
||||||
|
|
||||||
|
def _read_uint16(handle) -> int:
|
||||||
|
data = handle.read(2)
|
||||||
|
if not data or len(data) < 2:
|
||||||
|
return 0
|
||||||
|
return struct.unpack("<H", data)[0]
|
||||||
|
|
||||||
|
|
||||||
|
def _read_uint32(handle) -> int:
|
||||||
|
data = handle.read(4)
|
||||||
|
if not data or len(data) < 4:
|
||||||
|
return 0
|
||||||
|
return struct.unpack("<I", data)[0]
|
||||||
|
|
||||||
|
|
||||||
|
def _read_utf16_str(handle, *, offset: int = -1, length: int = 0) -> str:
|
||||||
|
if offset >= 0:
|
||||||
|
handle.seek(offset)
|
||||||
|
if length > 0:
|
||||||
|
data = handle.read(length)
|
||||||
|
end = 0
|
||||||
|
for index in range(0, len(data), 2):
|
||||||
|
if index + 1 < len(data) and data[index] == 0 and data[index + 1] == 0:
|
||||||
|
end = index
|
||||||
|
break
|
||||||
|
if end > 0:
|
||||||
|
data = data[:end]
|
||||||
|
return data.decode("utf-16le", errors="ignore")
|
||||||
|
|
||||||
|
result = bytearray()
|
||||||
|
while True:
|
||||||
|
char = handle.read(2)
|
||||||
|
if not char or len(char) < 2 or (char[0] == 0 and char[1] == 0):
|
||||||
|
break
|
||||||
|
result.extend(char)
|
||||||
|
return result.decode("utf-16le", errors="ignore")
|
||||||
|
|
||||||
|
|
||||||
|
def is_valid_word(word: str) -> bool:
|
||||||
|
if not word or not (1 <= len(word) <= 10):
|
||||||
|
return False
|
||||||
|
allowed_punct = ",。:;?!()【】《》""''、"
|
||||||
|
return all("\u4e00" <= char <= "\u9fff" or char.isdigit() or char in allowed_punct for char in word)
|
||||||
|
|
||||||
|
|
||||||
|
def get_scel_info(scel_path: Path) -> ScelInfo:
|
||||||
|
with scel_path.open("rb") as handle:
|
||||||
|
handle.seek(0x124)
|
||||||
|
word_count = _read_uint32(handle)
|
||||||
|
handle.seek(0x130)
|
||||||
|
name = _read_utf16_str(handle, length=64)
|
||||||
|
handle.seek(0x338)
|
||||||
|
type_name = _read_utf16_str(handle, length=64)
|
||||||
|
handle.seek(0x540)
|
||||||
|
description = _read_utf16_str(handle, length=1024)
|
||||||
|
return ScelInfo(word_count=word_count, name=name, type_name=type_name, description=description)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_scel_file(scel_path: Path) -> list[tuple[str, str]]:
|
||||||
|
"""Return ordered (word, pinyin) pairs from a .scel file."""
|
||||||
|
entries: list[tuple[str, str]] = []
|
||||||
|
|
||||||
|
with scel_path.open("rb") as handle:
|
||||||
|
handle.seek(0x1540)
|
||||||
|
pinyin_count = _read_uint32(handle)
|
||||||
|
pinyin_dict: dict[int, str] = {}
|
||||||
|
for _ in range(pinyin_count):
|
||||||
|
pinyin_idx = _read_uint16(handle)
|
||||||
|
pinyin_len = _read_uint16(handle)
|
||||||
|
pinyin = handle.read(pinyin_len).decode("utf-16le", errors="ignore").strip().lower()
|
||||||
|
pinyin_dict[pinyin_idx] = pinyin
|
||||||
|
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
same_pinyin_count = _read_uint16(handle)
|
||||||
|
pinyin_index_len = _read_uint16(handle)
|
||||||
|
if pinyin_index_len <= 0 or same_pinyin_count <= 0:
|
||||||
|
break
|
||||||
|
|
||||||
|
pinyin_parts: list[str] = []
|
||||||
|
for _ in range(pinyin_index_len // 2):
|
||||||
|
idx = _read_uint16(handle)
|
||||||
|
part = pinyin_dict.get(idx, "")
|
||||||
|
if part:
|
||||||
|
pinyin_parts.append(part)
|
||||||
|
joined_pinyin = " ".join(pinyin_parts).strip()
|
||||||
|
|
||||||
|
for _ in range(same_pinyin_count):
|
||||||
|
word_len = _read_uint16(handle)
|
||||||
|
word = handle.read(word_len).decode("utf-16le", errors="ignore")
|
||||||
|
_ = _read_uint16(handle)
|
||||||
|
_ = _read_uint32(handle)
|
||||||
|
_ = handle.read(6)
|
||||||
|
if is_valid_word(word):
|
||||||
|
entries.append((word, joined_pinyin))
|
||||||
|
except (struct.error, OSError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
return entries
|
||||||
|
|
||||||
|
|
||||||
|
def load_pinyin_tsv(tsv_path: Path) -> list[tuple[str, str]]:
|
||||||
|
entries: list[tuple[str, str]] = []
|
||||||
|
with tsv_path.open(encoding="utf-8") as handle:
|
||||||
|
for raw_line in handle:
|
||||||
|
line = raw_line.strip()
|
||||||
|
if not line:
|
||||||
|
continue
|
||||||
|
word, _, pinyin = line.partition("\t")
|
||||||
|
if word and pinyin:
|
||||||
|
entries.append((word, pinyin.strip()))
|
||||||
|
return entries
|
||||||
@@ -0,0 +1,381 @@
|
|||||||
|
# OSGKeyboard · AI / Tech / Brand seed lexicon (curated, permissive sources only)
|
||||||
|
# Columns: word pinyin aliases category weight
|
||||||
|
# aliases: pipe-separated alternate spellings / ASR confusions
|
||||||
|
# License: curated by OSGKeyboard contributors (MIT). No third-party data bundled.
|
||||||
|
#
|
||||||
|
# --- AI brands & products ---
|
||||||
|
DeepSeek deepseek|Deepseek|deep seek ai_brand 100
|
||||||
|
深度求索 shen du qiu suo ai_brand 100
|
||||||
|
OpenAI open ai|Open AI ai_brand 100
|
||||||
|
ChatGPT chat gpt|Chat GPT|chatgpt ai_brand 100
|
||||||
|
GPT gpt-4|GPT-4|GPT-4o|gpt4o ai_model 95
|
||||||
|
Anthropic anthropic|Athropic|Anthropic ai_brand 100
|
||||||
|
Claude claude|Claude Sonnet|Claude Opus ai_brand 100
|
||||||
|
Google google|Alphabet tech_company 95
|
||||||
|
Gemini gemini|Bard|Google Gemini ai_brand 95
|
||||||
|
Meta meta|Facebook tech_company 95
|
||||||
|
Llama llama|LLaMA|Llama 3|Llama 4 ai_model 90
|
||||||
|
Microsoft microsoft|MSFT tech_company 95
|
||||||
|
Copilot copilot|GitHub Copilot|Microsoft Copilot ai_brand 90
|
||||||
|
GitHub Copilot github copilot ai_brand 88
|
||||||
|
DeepMind deep mind|Google DeepMind ai_brand 88
|
||||||
|
Mistral mistral ai|Mistral AI ai_brand 85
|
||||||
|
Cohere cohere ai_brand 80
|
||||||
|
Perplexity perplexity ai|Perplexity AI ai_brand 88
|
||||||
|
Cursor cursor ai|Cursor AI dev_tool 90
|
||||||
|
Kimi kimi|Kimi AI|Moonshot|Moonshot AI ai_brand 95
|
||||||
|
月之暗面 yue zhi an mian ai_brand 90
|
||||||
|
Qwen qwen|Qwen2|Qwen3|通义千问|千问 ai_brand 95
|
||||||
|
通义千问 tong yi qian wen Qwen|qwen ai_brand 95
|
||||||
|
GLM glm|GLM-4|GLM-5|智谱|Zhipu ai_brand 90
|
||||||
|
智谱 zhi pu GLM|Zhipu AI ai_brand 88
|
||||||
|
Zhipu AI zhipu|智谱 ai_brand 88
|
||||||
|
文心一言 wen xin yi yan ERNIE|Ernie ai_brand 90
|
||||||
|
ERNIE ernie|文心一言 ai_brand 88
|
||||||
|
豆包 dou bao Doubao|doubao ai_brand 90
|
||||||
|
Doubao dou bao|豆包 ai_brand 88
|
||||||
|
混元 hun yuan Hunyuan|腾讯混元 ai_brand 85
|
||||||
|
Hunyuan hun yuan|混元 ai_brand 85
|
||||||
|
星火 xing huo Spark|讯飞星火 ai_brand 85
|
||||||
|
讯飞 iFlytek|iflytek|科大讯飞 ai_brand 85
|
||||||
|
iFlytek iflytek|讯飞 ai_brand 85
|
||||||
|
Midjourney mid journey|Mid Journey ai_brand 88
|
||||||
|
Stable Diffusion stable diffusion|SD ai_brand 85
|
||||||
|
DALL-E dalle|DALL E|Dall-E ai_brand 85
|
||||||
|
Sora sora ai|Sora AI ai_brand 88
|
||||||
|
Hugging Face huggingface|HuggingFace|HF ai_platform 85
|
||||||
|
Ollama ollama ai_platform 82
|
||||||
|
LangChain lang chain|Langchain ai_platform 80
|
||||||
|
vLLM vllm|VLLM ai_platform 80
|
||||||
|
xAI x ai|Grok ai_brand 88
|
||||||
|
Grok grok|xAI ai_brand 85
|
||||||
|
Groq groq|GROQ ai_brand 82
|
||||||
|
Replicate replicate ai_platform 78
|
||||||
|
Runway runway ai|Runway ML ai_brand 80
|
||||||
|
Pika pika ai|Pika Labs ai_brand 75
|
||||||
|
ElevenLabs eleven labs|Eleven Labs ai_brand 80
|
||||||
|
Character AI character.ai|Character.AI ai_brand 78
|
||||||
|
Notion AI notion ai ai_brand 75
|
||||||
|
Windsurf windsurf|Codeium Windsurf dev_tool 82
|
||||||
|
Codeium codeium ai_brand 80
|
||||||
|
Cline cline|Cline AI dev_tool 78
|
||||||
|
Aider aider ai_brand 75
|
||||||
|
Replit replit|Replit Agent dev_tool 78
|
||||||
|
SiliconFlow silicon flow|Silicon Flow ai_platform 80
|
||||||
|
OpenRouter open router|Open Router ai_platform 82
|
||||||
|
DeepSeek-R1 deepseek r1|DeepSeek R1|R1 ai_model 92
|
||||||
|
DeepSeek-V3 deepseek v3|DeepSeek V3 ai_model 90
|
||||||
|
o1 openai o1|O1 ai_model 88
|
||||||
|
o3 openai o3|O3 ai_model 88
|
||||||
|
Sonnet claude sonnet|Sonnet 4 ai_model 85
|
||||||
|
Opus claude opus|Opus 4 ai_model 85
|
||||||
|
MiniMax minimax|MiniMax AI ai_brand 85
|
||||||
|
StepFun step fun|阶跃星辰 ai_brand 82
|
||||||
|
阶跃星辰 jie yue xing chen StepFun ai_brand 80
|
||||||
|
百川 bai chuan|Baichuan ai_brand 82
|
||||||
|
Baichuan baichuan|百川 ai_brand 82
|
||||||
|
零一万物 ling yi wan wu|01.AI|Yi ai_brand 82
|
||||||
|
01.AI 01 ai|零一万物 ai_brand 80
|
||||||
|
面壁智能 mian bi zhi neng MiniCPM ai_brand 78
|
||||||
|
MiniCPM minicpm|面壁 ai_model 75
|
||||||
|
#
|
||||||
|
# --- AI / dev terminology ---
|
||||||
|
Transformer transformer|变换器 ai_term 95
|
||||||
|
RAG rag|检索增强生成|retrieval augmented generation ai_term 95
|
||||||
|
检索增强生成 jian suo zeng qiang sheng cheng RAG ai_term 92
|
||||||
|
LoRA lora|低秩适配 ai_term 90
|
||||||
|
微调 wei tiao fine-tuning|fine tuning ai_term 90
|
||||||
|
fine-tuning fine tuning|微调 ai_term 88
|
||||||
|
MoE moe|mixture of experts|混合专家 ai_term 88
|
||||||
|
混合专家 hun he zhuan jia MoE ai_term 85
|
||||||
|
embedding 嵌入|embeddings ai_term 90
|
||||||
|
嵌入 qian ru embedding ai_term 88
|
||||||
|
tokenizer tokenizer|分词器 ai_term 85
|
||||||
|
幻觉 huan jue hallucination ai_term 88
|
||||||
|
hallucination 幻觉 ai_term 85
|
||||||
|
提示词 ti shi ci prompt|Prompt ai_term 92
|
||||||
|
prompt prompt engineering|提示词 ai_term 90
|
||||||
|
智能体 zhi neng ti agent|Agent|AI agent ai_term 92
|
||||||
|
agent agentic|智能体|AI agent ai_term 90
|
||||||
|
agentic agentic AI|智能体 ai_term 88
|
||||||
|
vibe coding vibe code|Vibe Coding|氛围编程 ai_term 95
|
||||||
|
氛围编程 fen wei bian cheng vibe coding ai_term 90
|
||||||
|
MCP model context protocol|MCP server ai_term 92
|
||||||
|
上下文窗口 shang xia wen chuang kou context window ai_term 88
|
||||||
|
context window 上下文窗口 ai_term 85
|
||||||
|
diffusion 扩散模型 ai_term 85
|
||||||
|
扩散模型 kuo san mo xing diffusion ai_term 82
|
||||||
|
推理 tui li inference|reasoning ai_term 88
|
||||||
|
inference 推理 ai_term 85
|
||||||
|
RLHF rlhf|人类反馈强化学习 ai_term 85
|
||||||
|
chain of thought chain-of-thought|思维链 ai_term 88
|
||||||
|
思维链 si wei lian chain of thought ai_term 85
|
||||||
|
多模态 duo mo tai multimodal ai_term 88
|
||||||
|
multimodal 多模态 ai_term 85
|
||||||
|
AGI agi|通用人工智能 ai_term 90
|
||||||
|
通用人工智能 tong yong ren gong zhi neng AGI ai_term 88
|
||||||
|
LLM llm|大语言模型|large language model ai_term 92
|
||||||
|
大语言模型 da yu yan mo xing LLM ai_term 90
|
||||||
|
大模型 da mo xing LLM|large model ai_term 92
|
||||||
|
SLM slm|小语言模型 ai_term 80
|
||||||
|
量化 liang hua quantization ai_term 85
|
||||||
|
quantization 量化 ai_term 82
|
||||||
|
function calling tool calling|工具调用 ai_term 88
|
||||||
|
工具调用 gong ju diao yong function calling ai_term 85
|
||||||
|
流式 liu shi streaming ai_term 82
|
||||||
|
streaming 流式 ai_term 80
|
||||||
|
AIGC aigc|生成式人工智能 ai_term 88
|
||||||
|
生成式人工智能 sheng cheng shi ren gong zhi neng GenAI|AIGC ai_term 85
|
||||||
|
GenAI gen ai|生成式AI ai_term 88
|
||||||
|
prompt engineering 提示工程 ai_term 85
|
||||||
|
提示工程 ti shi gong cheng prompt engineering ai_term 82
|
||||||
|
reasoning model 推理模型|thinking model ai_term 88
|
||||||
|
推理模型 tui li mo xing reasoning model ai_term 85
|
||||||
|
jailbreak 越狱 ai_term 75
|
||||||
|
越狱 yue yu jailbreak ai_term 72
|
||||||
|
SWE-bench swe bench|SWE bench ai_term 80
|
||||||
|
benchmark 基准测试 ai_term 78
|
||||||
|
open weight open weights|开放权重 ai_term 82
|
||||||
|
开放权重 kai fang quan zhong open weight ai_term 80
|
||||||
|
distillation 蒸馏|知识蒸馏 ai_term 82
|
||||||
|
知识蒸馏 zhi shi zheng liu distillation ai_term 80
|
||||||
|
pretraining pre-training|预训练 ai_term 82
|
||||||
|
预训练 yu xun lian pretraining ai_term 80
|
||||||
|
vector database 向量数据库 ai_term 82
|
||||||
|
向量数据库 xiang liang shu ju ku vector database ai_term 80
|
||||||
|
RAG pipeline rag pipeline ai_term 78
|
||||||
|
AI native AI-native|AI原生 ai_term 82
|
||||||
|
AI原生 AI yuan sheng AI native ai_term 80
|
||||||
|
computer use computer-use|电脑使用 ai_term 80
|
||||||
|
deep research deep research|深度研究 ai_term 82
|
||||||
|
on-device AI on device ai|端侧AI ai_term 80
|
||||||
|
端侧AI duan ce AI on-device AI ai_term 78
|
||||||
|
#
|
||||||
|
# --- US / global tech companies ---
|
||||||
|
SpaceX space x|Space X tech_company 95
|
||||||
|
Tesla tesla|Tesla Motors tech_company 95
|
||||||
|
Apple apple|苹果公司 tech_company 95
|
||||||
|
Microsoft microsoft|微软 tech_company 95
|
||||||
|
Google google|谷歌 tech_company 95
|
||||||
|
Alphabet alphabet|Google tech_company 90
|
||||||
|
Meta meta|Facebook|脸书 tech_company 95
|
||||||
|
Amazon amazon|AWS|亚马逊 tech_company 95
|
||||||
|
AWS aws|Amazon Web Services tech_company 92
|
||||||
|
Nvidia nvidia|NVDA|英伟达 tech_company 98
|
||||||
|
英伟达 ying wei da Nvidia|NVDA tech_company 95
|
||||||
|
AMD amd tech_company 88
|
||||||
|
Intel intel|英特尔 tech_company 88
|
||||||
|
Netflix netflix tech_company 85
|
||||||
|
Uber uber tech_company 85
|
||||||
|
Airbnb airbnb tech_company 82
|
||||||
|
Stripe stripe tech_company 88
|
||||||
|
Shopify shopify tech_company 82
|
||||||
|
Salesforce salesforce tech_company 85
|
||||||
|
Oracle oracle tech_company 82
|
||||||
|
IBM ibm tech_company 82
|
||||||
|
Adobe adobe tech_company 85
|
||||||
|
Spotify spotify tech_company 82
|
||||||
|
Reddit reddit tech_company 80
|
||||||
|
Discord discord tech_company 80
|
||||||
|
Slack slack tech_company 80
|
||||||
|
Zoom zoom tech_company 80
|
||||||
|
Palantir palantir tech_company 82
|
||||||
|
Neuralink neural link|Neural Link tech_company 85
|
||||||
|
Waymo waymo tech_company 85
|
||||||
|
Rivian rivian tech_company 80
|
||||||
|
Lucid lucid motors|Lucid Motors tech_company 78
|
||||||
|
Coinbase coinbase tech_company 82
|
||||||
|
Robinhood robin hood|Robin Hood fintech 78
|
||||||
|
PayPal paypal tech_company 82
|
||||||
|
Block block|Square|square fintech 78
|
||||||
|
Visa visa tech_company 78
|
||||||
|
Samsung samsung|三星 tech_company 88
|
||||||
|
Sony sony|索尼 tech_company 85
|
||||||
|
Nintendo nintendo|任天堂 tech_company 82
|
||||||
|
TSMC tsmc|台积电 tech_company 90
|
||||||
|
台积电 tai ji dian TSMC tech_company 88
|
||||||
|
ASML asml tech_company 85
|
||||||
|
Broadcom broadcom tech_company 80
|
||||||
|
Qualcomm qualcomm|高通 tech_company 85
|
||||||
|
高通 gao tong Qualcomm tech_company 82
|
||||||
|
Arm arm|ARM Holdings tech_company 85
|
||||||
|
Snowflake snowflake tech_company 80
|
||||||
|
Databricks databricks tech_company 85
|
||||||
|
Cloudflare cloudflare tech_company 82
|
||||||
|
Twilio twilio tech_company 78
|
||||||
|
Datadog datadog tech_company 78
|
||||||
|
ServiceNow service now|ServiceNow tech_company 78
|
||||||
|
Atlassian atlassian|Jira|Confluence tech_company 80
|
||||||
|
Canva canva tech_company 80
|
||||||
|
Figma figma tech_company 85
|
||||||
|
Notion notion tech_company 82
|
||||||
|
Linear linear app|Linear tech_company 78
|
||||||
|
Vercel vercel|Next.js tech_company 82
|
||||||
|
Next.js nextjs|NextJS|next js dev_tool 85
|
||||||
|
Vercel vercel tech_company 80
|
||||||
|
Supabase supabase tech_company 80
|
||||||
|
Firebase firebase tech_company 80
|
||||||
|
MongoDB mongodb|Mongo DB tech_company 82
|
||||||
|
Redis redis tech_company 82
|
||||||
|
Elastic elastic|Elasticsearch tech_company 78
|
||||||
|
Docker docker tech_company 88
|
||||||
|
Kubernetes kubernetes|k8s|K8s dev_tool 90
|
||||||
|
k8s kubernetes|Kubernetes dev_tool 88
|
||||||
|
Terraform terraform tech_company 80
|
||||||
|
GitLab gitlab tech_company 80
|
||||||
|
Bitbucket bitbucket tech_company 75
|
||||||
|
Jenkins jenkins dev_tool 75
|
||||||
|
CircleCI circle ci|Circle CI dev_tool 75
|
||||||
|
#
|
||||||
|
# --- Chinese tech companies (English names) ---
|
||||||
|
Huawei huawei|华为|HW tech_company 95
|
||||||
|
华为 hua wei Huawei tech_company 95
|
||||||
|
Xiaomi xiaomi|小米|MI tech_company 95
|
||||||
|
小米 xiao mi Xiaomi tech_company 95
|
||||||
|
ByteDance byte dance|字节跳动|Bytedance tech_company 95
|
||||||
|
字节跳动 zi jie tiao dong ByteDance tech_company 95
|
||||||
|
TikTok tik tok|Tik Tok|抖音海外 tech_company 92
|
||||||
|
Douyin dou yin|抖音 tech_company 90
|
||||||
|
抖音 dou yin Douyin|TikTok tech_company 90
|
||||||
|
Alibaba alibaba|阿里巴巴|阿里 tech_company 95
|
||||||
|
阿里巴巴 a li ba ba Alibaba tech_company 95
|
||||||
|
Taobao taobao|淘宝 tech_company 88
|
||||||
|
淘宝 tao bao Taobao tech_company 88
|
||||||
|
Tmall tmall|天猫 tech_company 85
|
||||||
|
天猫 tian mao Tmall tech_company 85
|
||||||
|
Tencent tencent|腾讯 tech_company 95
|
||||||
|
腾讯 teng xun Tencent tech_company 95
|
||||||
|
WeChat we chat|微信 tech_company 92
|
||||||
|
微信 wei xin WeChat tech_company 92
|
||||||
|
Baidu baidu|百度 tech_company 92
|
||||||
|
百度 bai du Baidu tech_company 92
|
||||||
|
JD.com jd.com|京东|JD tech_company 88
|
||||||
|
京东 jing dong JD.com tech_company 88
|
||||||
|
Meituan meituan|美团 tech_company 88
|
||||||
|
美团 mei tuan Meituan tech_company 88
|
||||||
|
Pinduoduo pinduoduo|拼多多|PDD tech_company 88
|
||||||
|
拼多多 pin duo duo Pinduoduo tech_company 88
|
||||||
|
BYD byd|比亚迪 tech_company 95
|
||||||
|
比亚迪 bi ya di BYD tech_company 95
|
||||||
|
NIO nio|蔚来 tech_company 90
|
||||||
|
蔚来 wei lai NIO tech_company 90
|
||||||
|
XPeng xpeng|小鹏汽车|X Peng tech_company 90
|
||||||
|
小鹏汽车 xiao peng qi che XPeng tech_company 90
|
||||||
|
Li Auto li auto|理想汽车|理想 tech_company 90
|
||||||
|
理想汽车 li xiang qi che Li Auto tech_company 90
|
||||||
|
Zeekr zeekr|极氪 tech_company 85
|
||||||
|
极氪 ji ke Zeekr tech_company 85
|
||||||
|
CATL catl|宁德时代 tech_company 92
|
||||||
|
宁德时代 ning de shi dai CATL tech_company 92
|
||||||
|
DJI dji|大疆 tech_company 90
|
||||||
|
大疆 da jiang DJI tech_company 90
|
||||||
|
SMIC smic|中芯国际 tech_company 88
|
||||||
|
中芯国际 zhong xin guo ji SMIC tech_company 88
|
||||||
|
Lenovo lenovo|联想 tech_company 88
|
||||||
|
联想 lian xiang Lenovo tech_company 88
|
||||||
|
Oppo oppo|OPPO tech_company 85
|
||||||
|
Vivo vivo|VIVO tech_company 85
|
||||||
|
Honor honor|荣耀 tech_company 85
|
||||||
|
荣耀 rong yao Honor tech_company 85
|
||||||
|
Shein shein|SHEIN tech_company 85
|
||||||
|
Temu temu tech_company 85
|
||||||
|
Ant Group ant group|蚂蚁集团|Alipay tech_company 88
|
||||||
|
蚂蚁集团 ma yi ji tuan Ant Group tech_company 88
|
||||||
|
Alipay alipay|支付宝 tech_company 88
|
||||||
|
支付宝 zhi fu bao Alipay tech_company 88
|
||||||
|
Weibo weibo|微博 tech_company 82
|
||||||
|
微博 wei bo Weibo tech_company 82
|
||||||
|
Bilibili bilibili|B站|哔哩哔哩 tech_company 88
|
||||||
|
哔哩哔哩 bi li bi li Bilibili|B站 tech_company 88
|
||||||
|
B站 B zhan Bilibili|哔哩哔哩 tech_company 85
|
||||||
|
NetEase netease|网易 tech_company 85
|
||||||
|
网易 wang yi NetEase tech_company 85
|
||||||
|
Kuaishou kuaishou|快手 tech_company 85
|
||||||
|
快手 kuai shou Kuaishou tech_company 85
|
||||||
|
SenseTime sensetime|商汤 tech_company 82
|
||||||
|
商汤 shang tang SenseTime tech_company 82
|
||||||
|
Megvii megvii|旷视 tech_company 80
|
||||||
|
旷视 kuang shi Megvii tech_company 80
|
||||||
|
Horizon Robotics horizon|地平线 tech_company 82
|
||||||
|
地平线 di ping xian Horizon tech_company 80
|
||||||
|
Geely geely|吉利 tech_company 82
|
||||||
|
吉利 ji li Geely tech_company 80
|
||||||
|
Great Wall great wall|长城汽车 tech_company 78
|
||||||
|
长城汽车 chang cheng qi che Great Wall tech_company 78
|
||||||
|
#
|
||||||
|
# --- Tech leaders (bilingual where useful) ---
|
||||||
|
Elon Musk 马斯克|elon musk tech_leader 92
|
||||||
|
马斯克 ma si ke Elon Musk tech_leader 92
|
||||||
|
Sam Altman sam altman|山姆奥特曼 tech_leader 88
|
||||||
|
Jensen Huang 黄仁勋|jensen huang tech_leader 90
|
||||||
|
黄仁勋 huang ren xun Jensen Huang tech_leader 90
|
||||||
|
Tim Cook 库克|tim cook tech_leader 85
|
||||||
|
库克 ku ke Tim Cook tech_leader 85
|
||||||
|
Satya Nadella satya nadella|纳德拉 tech_leader 82
|
||||||
|
Sundar Pichai sundar pichai|皮查伊 tech_leader 82
|
||||||
|
Mark Zuckerberg mark zuckerberg|扎克伯格 tech_leader 85
|
||||||
|
扎克伯格 zhai ke bo ge Mark Zuckerberg tech_leader 85
|
||||||
|
Jeff Bezos jeff bezos|贝索斯 tech_leader 82
|
||||||
|
雷军 lei jun Lei Jun tech_leader 90
|
||||||
|
Lei Jun lei jun|雷军 tech_leader 90
|
||||||
|
何小鹏 he xiao peng He Xiaopeng|XPeng tech_leader 88
|
||||||
|
He Xiaopeng he xiao peng|何小鹏 tech_leader 88
|
||||||
|
李斌 li bin William Li|NIO tech_leader 85
|
||||||
|
余承东 yu cheng dong tech_leader 82
|
||||||
|
梁文锋 liang wen feng DeepSeek tech_leader 85
|
||||||
|
乔布斯 qiao bu si Steve Jobs tech_leader 90
|
||||||
|
Steve Jobs steve jobs|乔布斯 tech_leader 90
|
||||||
|
#
|
||||||
|
# --- Dev tools & platforms ---
|
||||||
|
GitHub github|GitHub tech_company 92
|
||||||
|
GitLab gitlab tech_company 80
|
||||||
|
VS Code vs code|VSCode|Visual Studio Code dev_tool 88
|
||||||
|
Visual Studio Code vscode|VS Code dev_tool 85
|
||||||
|
Xcode xcode dev_tool 85
|
||||||
|
SwiftUI swift ui|Swift UI dev_tool 82
|
||||||
|
React react|ReactJS dev_tool 85
|
||||||
|
Vue vue|Vue.js|Vue3 dev_tool 82
|
||||||
|
TypeScript typescript|TS dev_tool 85
|
||||||
|
Python python dev_tool 88
|
||||||
|
Rust rust dev_tool 82
|
||||||
|
Go golang|Golang dev_tool 82
|
||||||
|
Node.js nodejs|NodeJS|node js dev_tool 82
|
||||||
|
PyTorch pytorch|Py Torch dev_tool 88
|
||||||
|
TensorFlow tensorflow|Tensor Flow dev_tool 85
|
||||||
|
Jupyter jupyter|Jupyter Notebook dev_tool 78
|
||||||
|
Postman postman dev_tool 78
|
||||||
|
Figma figma dev_tool 85
|
||||||
|
Notion notion dev_tool 82
|
||||||
|
Linear linear dev_tool 78
|
||||||
|
Obsidian obsidian dev_tool 75
|
||||||
|
Raycast raycast dev_tool 75
|
||||||
|
Warp warp terminal|Warp dev_tool 75
|
||||||
|
#
|
||||||
|
# --- Hot internet / product terms ---
|
||||||
|
SaaS saas|SaaS tech_term 82
|
||||||
|
API api|API tech_term 85
|
||||||
|
SDK sdk|SDK tech_term 82
|
||||||
|
GPU gpu|GPU tech_term 88
|
||||||
|
CUDA cuda|CUDA tech_term 85
|
||||||
|
NPU npu|NPU tech_term 82
|
||||||
|
TPU tpu|TPU tech_term 80
|
||||||
|
Web3 web3|Web 3 tech_term 78
|
||||||
|
区块链 qu kuai lian blockchain tech_term 82
|
||||||
|
blockchain 区块链 tech_term 80
|
||||||
|
元宇宙 yuan yu zhou metaverse tech_term 78
|
||||||
|
metaverse 元宇宙 tech_term 75
|
||||||
|
自动驾驶 zi dong jia shi autonomous driving|FSD tech_term 85
|
||||||
|
FSD full self driving|全自动驾驶 tech_term 82
|
||||||
|
人形机器人 ren xing ji qi ren humanoid robot|Optimus tech_term 82
|
||||||
|
Optimus optimus|擎天柱 tech_term 80
|
||||||
|
星链 xing lian Starlink tech_term 85
|
||||||
|
Starlink star link|星链 tech_term 85
|
||||||
|
低空经济 di kong jing ji low altitude economy tech_term 80
|
||||||
|
具身智能 ju shen zhi neng embodied AI tech_term 82
|
||||||
|
embodied AI 具身智能 tech_term 80
|
||||||
|
出海 chu hai go global|全球化 tech_term 78
|
||||||
|
内卷 nei juan involution tech_term 75
|
||||||
|
躺平 tang ping lying flat tech_term 72
|
||||||
|
数字游民 shu zi you min digital nomad tech_term 75
|
||||||
|
远程办公 yuan cheng ban gong remote work tech_term 78
|
||||||
|
副业 fu ye side hustle tech_term 72
|
||||||
|
Reference in New Issue
Block a user