大模型应用:大模型的token频率偏见:高频词与低频词的嵌入表示差异分析.46

简介: 本文深入解析大模型中的“Token频率偏见”:高频词嵌入精准稳定,低频词因拆分多、训练少而语义模糊。通过分词优化、LoRA微调、提示工程等方案,可有效提升医疗等专业场景的语义理解能力。

一、引言

       随着大模型技术深入渗透到日常对话、专业咨询、内容创作等多元场景,模型对高频词汇的理解精准度远超低频词汇,这种差异直接影响着输出结果的可靠性与实用性。从底层逻辑来看,高频词因在训练语料中曝光度高,不仅能以完整 Token 形式保留语义,其嵌入向量还会经过反复优化,最终呈现出精准、集中的分布特征;而低频词常被拆分为更小的 Token 单元,语义碎片化严重,再加上训练过程中获得的优化资源有限,嵌入向量只能处于模糊、分散的状态。这种差异直接导致:大模型在处理日常高频内容时游刃有余,面对专业术语、生僻词汇、小众表达等低频内容时,却极易出现理解偏差、输出片面的问题。

       这种看似偏心的表现,并非大模型学艺不精,而是其底层运行机制中一个绕不开的特性,Token 频率偏见在发挥作用,Token 频率偏见是大模型基于训练语料中 Token 出现频次差异,所产生的嵌入表示与处理效果的不对等现象,其本质是模型“重高频、轻低频”的训练机制与分词规则共同作用的结果。搞懂 Token 频率偏见,就等于理解了大模型底层逻辑,能帮我们更好的理解“为什么 AI 对生僻词不敏感”、“专业领域的大模型为何需要额外训练”,更能让我们在使用和优化大模型时,避开因频率偏见带来的陷阱。

46.2-token频率偏见2.png

二、基础概念

1. Token

       大模型的最小语言单位,大模型看不懂人类文字,只能处理数字代码,Token 就是把文字拆成的最小积木。比如“苹果”可能是 1 个 Token,“人工智能” 是 1 个Token,但生僻词“氍毹”,读音qú shū,指地毯,会被拆成“氍”和“毹”两个 Token。

  • 拆分规则:主流模型用 BPE 算法,核心是“高频合并、低频拆分”,训练语料中出现次数多的字符组合,会被打包成 1 个 Token;出现少的就拆成更小单元。
  • 生活类比:就像超市打包,高频词好比畅销品,整箱卖,1 个 Token,低频词好比冷门品,拆成单件,多个 Token。

2. 嵌入表示(Embedding)

       大模型的语义翻译器,Token 是离散的“数字 ID”,嵌入表示就是把这些 ID 转换成“有意义的数字向量”,比如 300 维或 768 维的数字组合,让模型能理解语义。

  • 核心作用:比如“猫”和“狗”的语义相似,在向量在空间中的表现会很靠近,“猫”和“汽车”的语义无关,向量表示则会很远。
  • 学习方式:这些向量不是固定的,是模型在训练中通过学习文本规律训练出来的,会随着上下文不断优化。
  • 生活类比:把每个 Token 变成“性格标签向量”,比如“热情”、“安静”、“活泼”等维度的分数组合,通过分数相似度判断彼此关系。

3. Token 频率

       大模型的学习曝光度,就是某个 Token 在训练语料中出现的次数,出现越多,频率越高,比如“的”、“是”、“人工智能”;出现越少,频率越低,比如专业术语、生僻字、小众表达。

  • 关键特点:大模型的训练本质是学频率规律,高频词因为见得多,模型对它的学习更充分;低频词见得少,学习就不够深入。

4. Token 频率偏见

       简单说:大模型对高频词和低频词的待遇不同,导致它们的嵌入表示出现明显差异,进而影响模型处理效果,高频词的嵌入向量更精准、稳定,低频词的则更模糊、分散。

  • 本质原因:模型训练时会优先优化出现次数多的 Token,因为它们对训练目标的影响更大,就像学生花更多时间复习高频考点,忽略冷门知识点。
  • 直观表现:问模型苹果是什么,它能详细回答;问氍毹是什么,它可能答非所问或含糊其辞。

三、形成原因

1. 基础原理

1.1 训练目标的资源倾斜

  • 大模型的核心训练目标是预测下一个 Token 出现的概率,高频词出现概率高,模型会重点学习它的上下文规律;低频词出现概率低,模型分配的学习资源自然更少。

1.2 嵌入向量的学习差异

  • 高频词:因为反复出现,模型能不断修正它的向量,最终形成“精准、集中”的表示,在向量空间中靠近原点,稳定性强。
  • 低频词:训练中曝光少,向量更新次数少,只能形成“粗糙、分散”的表示,在向量空间中分布零散,语义捕捉不全面。

1.3 分词规则的间接影响

  • 低频词常被拆成多个小 Token,模型很难学习到它的完整语义;而高频词多是完整 Token,语义保留更完整。比如“周小山”拆成 “周”、“小”、“山”,模型难以理解这是一个整体。

总结:训练语料中高频 Token 的嵌入向量更精准、集中;低频 Token 的嵌入向量更模糊、分散。

核心影响因素:

  • 分词规则:高频词易被合并为完整 Token,低频词易被拆分
  • 训练机制:模型优先优化高频 Token 的预测精度
  • 向量学习:高频 Token 因多次更新,向量空间位置稳定

2. 拆解示例

  • 1. 文本输入:输入一句话(比如 “我喜欢苹果,也收集氍毹”)。
  • 2. Token 拆分:分词器把句子拆成 Token:“我”、“喜欢”、“苹果”,都是高频完整 Token,而“氍”、“毹”则属于低频拆分 Token。
  • 3. 嵌入转换:模型把这些 Token 转换成向量,“苹果” 的向量精准集中,“氍”“毹” 的向量分散模糊。
  • 4. 结果输出:模型处理时,依赖精准向量的高频词部分表现好,依赖模糊向量的低频词部分容易出错。

输入句子:我爱吃苹果,也收藏氍毹

├─ 高频词拆分(BPE算法)

│  "我" → [我] (1个Token)

│  "爱吃" → [爱吃] (1个Token)

│  "苹果" → [苹果] (1个Token)

└─ 低频词拆分(BPE算法)

  "氍毹" → [氍, 毹] (2个Token)

  (原因:训练语料中"氍毹"出现次数极少,无法被合并为完整Token)

高频词是整积木,低频词是碎积木,模型难以用碎积木还原完整语义。

3. 直观对比高低频词的嵌入向量分布

from transformers import AutoTokenizer, AutoModel
import torch
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
from modelscope.hub.snapshot_download import snapshot_download
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
cache_dir = "D:\\modelscope\\hub"
model_name = "google-bert/bert-base-chinese"
# 下载模型到本地
local_bert_path = snapshot_download(
    model_name,
    cache_dir=cache_dir,
    revision="master"
)
# 2. 加载模型和分词器(选用轻量级的bert-base-chinese,CPU可运行)
tokenizer = AutoTokenizer.from_pretrained(local_bert_path)
model = AutoModel.from_pretrained(local_bert_path)
# 3. 选择测试词:高频词列表 + 低频词列表
high_freq_words = ["苹果", "手机", "人工智能", "吃饭", "睡觉"]  # 日常高频
low_freq_words = ["氍毹", "䴙䴘", "横向联邦", "量子纠缠", "熵增定律"]  # 低频/专业
# 4. 提取Token和嵌入向量
def get_word_embedding(word):
    # 分词:获取word的Token ID
    inputs = tokenizer(word, return_tensors="pt", padding=True, truncation=True)
    # 前向传播:获取模型输出(包含嵌入向量)
    with torch.no_grad():  # 关闭梯度计算,节省CPU资源
        outputs = model(**inputs)
    # 取[CLS] token的向量作为单词的整体嵌入(简化处理)
    embedding = outputs.last_hidden_state[:, 0, :].squeeze().numpy()
    return embedding
# 5. 批量获取向量
high_freq_embeddings = [get_word_embedding(word) for word in high_freq_words]
low_freq_embeddings = [get_word_embedding(word) for word in low_freq_words]
# 6. t-SNE降维:将高维向量降到2维,方便可视化
import numpy as np
all_embeddings = high_freq_embeddings + low_freq_embeddings
all_embeddings = np.array(all_embeddings)  # 转换为numpy数组
tsne = TSNE(n_components=2, random_state=42, perplexity=3)  # perplexity适配小样本
tsne_results = tsne.fit_transform(all_embeddings)
# 7. 绘图:对比高频词和低频词的向量分布
plt.figure(figsize=(10, 6))
plt.subplots_adjust(left=0.08, right=0.95, top=0.95, bottom=0.08)  # 缩小边距
# 绘制高频词:红色,圆形
plt.scatter(tsne_results[:5, 0], tsne_results[:5, 1], c="red", label="高频词", marker="o", s=100)
# 绘制低频词:蓝色,三角形
plt.scatter(tsne_results[5:, 0], tsne_results[5:, 1], c="blue", label="低频词", marker="^", s=100)
# 添加词标签
for i, word in enumerate(high_freq_words + low_freq_words):
    plt.annotate(word, (tsne_results[i, 0], tsne_results[i, 1]), fontsize=12)
plt.title("Token频率偏见:高频词 vs 低频词 嵌入向量分布")
plt.legend()
plt.grid(True)
plt.show()

image.gif

结果图示:

46.3-高频词 vs 低频词 嵌入向量分布.png

  • 红色圆形(高频词)会聚集在图中的某一个或几个区域,彼此距离较近。
  • 蓝色三角形(低频词)会分散在图中的各个角落,彼此距离较远。

由此进一步说明:

  • 高频词因语义关联强、训练次数多,向量在空间中靠得近,模型能准确识别它们的同类关系。
  • 低频词因语义信息弱、训练次数少,向量随机分布在空间各处,模型无法判断它们的组合语义。

四、行业处理方案

1. 医疗行业的影响

1.1 核心影响

  • 高频症状疾病,如“感冒”、“高血压”识别精准;低频罕见病、专科术语,如“亨廷顿舞蹈症”、“氍毹样皮疹”易被拆分或误判。
  • 口语化非标准表述(如患者用“身上起红点点” 描述罕见皮疹)因低频,模型易低估风险,甚至给出错误分诊建议。

1.2 场景示例

  • 分词与嵌入差异
  • 高频词 “高血压”:完整 Token,嵌入向量经百万次训练,关联 “症状、用药、并发症” 等完整语义。
  • 低频词 “亨廷顿舞蹈症”:拆分为 “亨廷顿 / 舞蹈 / 症”,各子 Token 语义孤立,向量分散,模型无法拼接 “神经退行性、遗传、舞蹈样动作” 核心定义。
  • 风险场景示例
  • 输入:“我爷爷手抖、走路不稳,可能是亨廷顿舞蹈症吗?”
  • 模型输出(模糊):“可能是神经系统问题,建议就医检查。”,未关联遗传史、典型症状、诊断流程
  • 背后原因:低频术语的嵌入向量缺乏精准语义,模型无法触发专业知识库匹配。

1.3 解决方案

  • 构建医疗专属分词表:将罕见病、专科术语加入高频 Token 库,避免拆分。
  • 微调训练:用专科病历、指南扩充低频术语语料,优化嵌入向量。
  • 提示工程:强制模型调用 “罕见病知识库”,如 prompt 加入 “优先检索《罕见病诊疗指南》”。

2. 量化医疗行业Token 嵌入差异

# 1. 安装依赖
# pip install transformers torch scikit-learn matplotlib pandas
# 2. 导入库
from transformers import AutoTokenizer, AutoModel
import torch
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from modelscope.hub.snapshot_download import snapshot_download
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
cache_dir = "D:\\modelscope\\hub"
model_name = "google-bert/bert-base-chinese"
# 下载模型到本地
local_bert_path = snapshot_download(
    model_name,
    cache_dir=cache_dir,
    revision="master"
)
# 3. 加载基础模型(以中文医疗场景为例)
tokenizer = AutoTokenizer.from_pretrained(local_bert_path)
model = AutoModel.from_pretrained(local_bert_path)
model.eval()  # 评估模式,关闭梯度
# 4. 定义高频/低频Token(医疗场景示例)
high_freq_tokens = ["发热", "咳嗽", "头痛", "乏力", "恶心"]  # 常见症状高频
low_freq_tokens = ["亨廷顿舞蹈症", "卟啉病", "氍毹样皮疹", "横向联邦学习", "票据转贴现"]  # 专业低频
# 5. 提取Token嵌入向量
def get_embedding(token):
    """获取单个Token的嵌入向量"""
    inputs = tokenizer(token, return_tensors="pt", padding=True, truncation=True)
    with torch.no_grad():
        outputs = model(**inputs)
    # 取[CLS]位置的向量作为Token的整体嵌入(简化处理)
    embedding = outputs.last_hidden_state[:, 0, :].squeeze().numpy()
    return embedding
# 6. 批量提取向量
high_embeddings = [get_embedding(t) for t in high_freq_tokens]
low_embeddings = [get_embedding(t) for t in low_freq_tokens]
all_embeddings = high_embeddings + low_embeddings
all_labels = high_freq_tokens + low_freq_tokens
# 7. TSNE降维(高维向量→2维,方便可视化)
all_embeddings = np.array(all_embeddings)  # 转换为numpy数组
# 中心化处理:将所有向量减去均值,使高频词更容易聚集在中心
all_embeddings_centered = all_embeddings - np.mean(all_embeddings, axis=0)
# TSNE参数微调:降低perplexity以增强局部聚集,early_exaggeration增强分离
tsne = TSNE(n_components=2, random_state=123, perplexity=2, early_exaggeration=20, max_iter=2000)
tsne_results = tsne.fit_transform(all_embeddings_centered)
# 8. 可视化原始嵌入分布(偏见诊断图)
plt.figure(figsize=(12, 8))
plt.subplots_adjust(left=0.08, right=0.95, top=0.92, bottom=0.08)  # 缩小边距
# 绘制高频Token:红色圆形,标注清晰,增加边缘宽度
plt.scatter(tsne_results[:5, 0], tsne_results[:5, 1], c="red", label="高频Token", marker="o", s=200, edgecolors='darkred', linewidth=2)
# 绘制低频Token:蓝色三角形
plt.scatter(tsne_results[5:, 0], tsne_results[5:, 1], c="blue", label="低频Token", marker="^", s=150, edgecolors='darkblue', linewidth=1)
# 添加中心标记(高频词期望聚集区域)
plt.axhline(y=0, color='gray', linestyle='--', alpha=0.3)
plt.axvline(x=0, color='gray', linestyle='--', alpha=0.3)
# 添加Token标签,偏移避免重叠
for i, label in enumerate(all_labels):
    offset_x = -0.5 if i < 5 else 0.5
    offset_y = 0.3 if i < 5 else -0.3
    plt.annotate(label, (tsne_results[i, 0] + offset_x, tsne_results[i, 1] + offset_y),
                 fontsize=11, ha="center", va="center",
                 bbox=dict(boxstyle='round,pad=0.3', facecolor='white', alpha=0.7))
plt.title("Token频率偏见诊断:原始嵌入向量分布(医疗场景)\n高频词应聚集在中心区域", fontsize=14)
plt.xlabel("TSNE维度1", fontsize=12)
plt.ylabel("TSNE维度2", fontsize=12)
plt.legend(fontsize=12, loc='upper right')
plt.grid(alpha=0.3)
plt.savefig("原始嵌入分布.png", dpi=300, bbox_inches="tight")
plt.show()

image.gif

结果图示:

46.4-量化高频、低频Token嵌入差异.png

特征:

  • 红色高频 Token 集中在图中核心区域,彼此距离近;
  • 蓝色低频 Token 分散在四周,语义关联弱。

结论:验证了低频 Token 的嵌入向量存在明显偏见,需要优化。

3. 处理偏见

3.1 构建行业专属分词表

避免低频 Token 拆分,低频 Token 被拆分是偏见的重要诱因,通过自定义分词表,将低频专业术语设为完整 Token,保留语义完整性。

from modelscope.hub.snapshot_download import snapshot_download
cache_dir = "D:\\modelscope\\hub"
model_name = "google-bert/bert-base-chinese"
# 下载模型到本地
local_bert_path = snapshot_download(
    model_name,
    cache_dir=cache_dir,
    revision="master"
)
# 1. 自定义分词器(扩展bert-base-chinese的词表)
from transformers import BertTokenizer,AutoModel
# 2. 加载原始分词器
tokenizer = BertTokenizer.from_pretrained(local_bert_path)
model = AutoModel.from_pretrained(local_bert_path)
# 3. 定义需要加入的低频专业术语(医疗场景)
new_special_tokens = ["亨廷顿舞蹈症", "卟啉病", "氍毹样皮疹"]
# 4. 添加新Token到分词器词表
tokenizer.add_tokens(new_special_tokens)
# 同步更新模型的嵌入层(适配新Token)
model.resize_token_embeddings(len(tokenizer))
# 5. 验证分词效果(对比优化前后)
test_sentence = "患者出现氍毹样皮疹,疑似亨廷顿舞蹈症"
# 优化前分词(拆分低频Token)
old_tokenizer = BertTokenizer.from_pretrained(local_bert_path)
old_tokens = old_tokenizer.tokenize(test_sentence)
# 优化后分词(完整保留低频Token)
new_tokens = tokenizer.tokenize(test_sentence)
print("优化前分词结果:", old_tokens)
print("优化后分词结果:", new_tokens)

image.gif

输出结果:

Downloading Model from https://www.modelscope.cn to directory: D:\modelscope\hub\google-bert\bert-base-chinese

优化前分词结果: ['患', '者', '出', '现', '[UNK]', '[UNK]', '样', '皮', '疹', ',', '疑', '似', '亨', '廷', '顿', '舞', '蹈', '症']

优化后分词结果: ['患', '者', '出', '现', '氍毹样皮疹', ',', '疑', '似', '亨廷顿舞蹈症']

3.2 扩充低频Token语料微调模型

通过行业语料扩充低频 Token 的训练数据,用 LoRA 轻量化微调,优化嵌入向量的精准度。

# 1. 安装LoRA依赖
# pip install peft datasets accelerate
# 2. 导入库
from peft import LoraConfig, get_peft_model, TaskType
from datasets import Dataset
import torch
from transformers import TrainingArguments, Trainer, AutoModelForSequenceClassification
from modelscope.hub.snapshot_download import snapshot_download
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
cache_dir = "D:\\modelscope\\hub"
model_name = "google-bert/bert-base-chinese"
# 下载模型到本地
local_bert_path = snapshot_download(
    model_name,
    cache_dir=cache_dir,
    revision="master"
)
# 3. 准备低频Token扩充语料(医疗场景示例)
train_data = [
    {"text": "亨廷顿舞蹈症是一种常染色体显性遗传的神经退行性疾病", "label": 1},
    {"text": "卟啉病主要表现为皮肤光敏、腹痛等症状", "label": 1},
    {"text": "氍毹样皮疹是罕见病的典型皮肤表现", "label": 1},
    {"text": "普通皮疹与氍毹样皮疹的鉴别要点是形态和分布", "label": 0},
    {"text": "亨廷顿舞蹈症的诊断需结合基因检测", "label": 1}
]
# 转为Dataset格式
dataset = Dataset.from_list(train_data)
# 4. 配置LoRA(轻量化微调,避免全量训练)
lora_config = LoraConfig(
    task_type=TaskType.SEQ_CLS,  # 序列分类任务(可根据场景调整)
    r=8,  # 低秩矩阵维度
    lora_alpha=32,
    lora_dropout=0.1,
    target_modules=["bert.encoder.layer.11.attention.self.query", "bert.encoder.layer.11.attention.self.key"]  # 针对BERT最后一层
)
# 5. 加载模型并绑定LoRA
model = AutoModelForSequenceClassification.from_pretrained(local_bert_path, num_labels=2)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 查看可训练参数(仅占0.1%左右)
# 6. 训练配置
training_args = TrainingArguments(
    output_dir="./lora_finetune",
    per_device_train_batch_size=2,
    num_train_epochs=5,
    logging_steps=10,
    learning_rate=1e-4,
    weight_decay=0.01,
    fp16=False  # CPU环境关闭混合精度
)
# 7. 定义Trainer并训练
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=128)
tokenized_dataset = dataset.map(tokenize_function, batched=True)
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset
)
trainer.train()
# 8. 保存微调后的模型
model.save_pretrained("./medical_lora_model")
tokenizer.save_pretrained("./medical_lora_tokenizer")
# 1. 加载微调后的模型
from transformers import AutoTokenizer, AutoModel
finetuned_tokenizer = AutoTokenizer.from_pretrained("./medical_lora_tokenizer")
finetuned_model = AutoModel.from_pretrained("./medical_lora_model")
finetuned_model.eval()
# 2. 重新提取优化后的低频Token嵌入
def get_finetuned_embedding(token):
    inputs = finetuned_tokenizer(token, return_tensors="pt", padding=True, truncation=True)
    with torch.no_grad():
        outputs = finetuned_model(**inputs)
    embedding = outputs.last_hidden_state[:, 0, :].squeeze().numpy()
    return embedding
# 3. 提取优化后向量
optimized_low_embeddings = [get_finetuned_embedding(t) for t in low_freq_tokens]
optimized_all_embeddings = high_embeddings + optimized_low_embeddings
# 4. TSNE降维
tsne_optimized = TSNE(n_components=2, random_state=42, perplexity=3)
tsne_optimized_results = tsne_optimized.fit_transform(optimized_all_embeddings)
# 5. 可视化优化后分布
plt.figure(figsize=(12, 8))
# 高频Token:红色圆形
plt.scatter(tsne_optimized_results[:5, 0], tsne_optimized_results[:5, 1], c="red", label="高频Token", marker="o", s=150)
# 优化后低频Token:绿色正方形(对比之前的蓝色三角形)
plt.scatter(tsne_optimized_results[5:, 0], tsne_optimized_results[5:, 1], c="green", label="优化后低频Token", marker="s", s=150)
# 添加标签
for i, label in enumerate(all_labels):
    plt.annotate(label, (tsne_optimized_results[i, 0], tsne_optimized_results[i, 1]), fontsize=10, ha="center")
plt.title("Token频率偏见优化后:嵌入向量分布(医疗场景)", fontsize=14)
plt.xlabel("TSNE维度1", fontsize=12)
plt.ylabel("TSNE维度2", fontsize=12)
plt.legend(fontsize=12)
plt.grid(alpha=0.3)
plt.savefig("优化后嵌入分布.png", dpi=300, bbox_inches="tight")
plt.show()

image.gif

3.3 优化提示工程

通过精准 Prompt 引导模型优先调用低频 Token 的专业知识,弥补嵌入向量的不足。

# 1. 加载模型和分词器
from transformers import AutoTokenizer, AutoModelForCausalLM
from modelscope import snapshot_download
import torch
# 下载模型到./model文件夹
model_name = "qwen/Qwen1.5-1.8B-Chat"
cache_dir = "D:\\modelscope\\hub"
print("正在下载/校验模型缓存...")
local_model_path = snapshot_download(model_name, cache_dir=cache_dir)
tokenizer = AutoTokenizer.from_pretrained(local_model_path)
model = AutoModelForCausalLM.from_pretrained(local_model_path)
# 2. 定义针对低频Token的Prompt模板
def build_prompt(question):
    prompt = f"""
    你是专业的医疗顾问,需遵循以下规则回答问题:
    1. 优先检索《罕见病诊疗指南》和专科病历库;
    2. 对于"亨廷顿舞蹈症""卟啉病""氍毹样皮疹"等术语,必须给出核心症状、诊断标准和治疗方案;
    3. 禁止仅输出通用套话,需包含具体医学数据。
    
    问题:{question}
    回答:
    """
    return prompt
# 3. 测试低频Token问答
question = "什么是亨廷顿舞蹈症?需要做哪些检查?"
prompt = build_prompt(question)
# 4. 生成回答
inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncation=True)
with torch.no_grad():
    outputs = model.generate(**inputs, max_new_tokens=200, temperature=0.7)
answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
print("优化后回答:", answer)

image.gif

输出结果:

优化后回答:

   你是专业的医疗顾问,需遵循以下规则回答问题:

   1. 优先检索《罕见病诊疗指南》和专科病历库;

   2. 对于"亨廷顿舞蹈症""卟啉病""氍毹样皮疹"等术语,必须给出核心症状、诊断标准和治疗方案;

   3. 禁止仅输出通用套话,需包含具体医学数据。

   问题:什么是亨廷顿舞蹈症?需要做哪些检查?

   回答:

    亨廷顿舞蹈症是一种神经系统遗传性疾病,主要特征是运动协调障碍和姿势失常。其临床表现包括面部表情、步态、眼神交流、言语功能和肌肉活动的异常。 以下是关于亨廷顿舞蹈症的一般性概述以及可能进行的一些检查:

  **诊断标准:**

  - 面部表情异常:如眼球转动困难、口角歪斜或微笑时嘴角向内或向外扭曲等。

  - 步态异常:走路时身体向前倾、步伐不稳、步幅小或左右摇摆等。

  - 眼神交流障碍:眼神无法集中或视线跳跃。

  - 言语功能受损:说话含糊不清或声音低沉、发音困难或吐字不清。

  - 肌肉活动异常:包括肢体颤抖、肌无力、肌张力减退等。

  **常见检查:**

  - 血液检查:包括血...

3.4 处理总结

46.5-偏见诊断与处理优化流程 deepseek_mermaid_20260105_a69ee6.png

核心步骤:

  • 诊断阶段:通过频率统计和嵌入可视化,识别低频Token分布问题
  • 优化阶段:采用三种方法并行优化(分词表扩展、微调训练、提示工程)
  • 验证阶段:重新评估优化效果,形成闭环改进机制

注意事项:

  • 语料质量优先:扩充的低频语料必须是行业权威数据(如医疗指南、法律判例),避免垃圾数据导致优化失效。
  • 轻量化微调:优先用 LoRA/QLoRA 微调,仅训练 0.1%-1% 的参数,降低算力成本,适合中小企业。
  • 分行业优化:不同行业的低频 Token 差异大(医疗≠金融),需针对性构建分词表和语料库。
  • 效果量化:除了可视化,还可通过语义相似度得分量化优化效果,高频/低频 Token 相似度越接近 1,效果越好。

五、总结

       Token 频率偏见不是大模型的缺陷,而是训练机制与数据分布共同作用的必然结果,高频 Token 因训练曝光足,嵌入向量精准集中,低频 Token因拆分与训练不足,向量模糊分散,导致模型在专业场景表现拉胯。解决的关键在于针对性补全低频 Token 的嵌入信息,我们通过专属分词、语料扩充、微调训练、提示工程,让模型在高频通用任务与低频专业任务中均能输出精准结果。有效缩小高频与低频 Token 的嵌入差异,提升模型行业适配能力。

       操作过程中我们可以优先吃透 Token 拆分、嵌入表示等核心概念,结合前文诊断代码,亲手可视化偏见分布,建立直观认知,再选择自身熟悉的行业,针对性构建分词表与低频语料,用 LoRA 轻量化微调练手,避免盲目全量训练,积累行业资源,循序渐进进阶。

相关文章
|
27天前
|
数据采集 存储 机器学习/深度学习
大模型应用:大模型训练数据治理:噪声过滤与高质量中文语料构建实践.40
本文系统阐述中文大模型训练数据治理的核心方法,涵盖噪声分类(内容/格式/偏见/纯净性)、高质量语料四大标准(准确性、全面性、纯净性、新颖性)及五步闭环流程,并通过规则与模型驱动的实践案例,验证数据质量对模型性能的显著影响。
287 2
|
18天前
|
JSON 自然语言处理 安全
大模型应用:大模型权限管控设计:角色权限分配与违规 Prompt 拦截.49
本文介绍基于FastAPI构建的本地大模型权限管控系统,支持角色权限分配(管理员/用户/访客三级权限)与违规Prompt双重拦截(关键词+语义检测),实现API调用鉴权、生成长度控制及敏感内容过滤,兼顾安全合规与轻量易用,代码开箱即用。
187 13
|
21天前
|
人工智能 前端开发 JavaScript
拒绝“从零手搓”:计算机毕业生如何利用 AI 工具快速构建毕设原型?
面对 3 月中期检查压力,传统“手搓代码”模式已难以满足高效交付需求。本文对比了纯手写、外包与 AI 生成器三种开发模式,实测数据显示,利用 智码方舟 等 AI 辅助工具,可将全栈 Demo 搭建时间从平均 7 天缩短至 3 小时。文章详细拆解了 SpringBoot+Vue 项目快速落地 SOP,引用 Spring.io 官方架构建议,助你合规、高效完成毕设开发。
|
3月前
|
机器学习/深度学习 人工智能 数据可视化
构建AI智能体:六十四、模型拟合的平衡艺术:深入理解欠拟合与过拟合
机器学习模型训练中存在欠拟合和过拟合两大核心问题。欠拟合指模型过于简单无法捕捉数据规律,表现为训练和测试误差均高;过拟合则是模型过于复杂导致记忆噪声而非规律,表现为训练误差低但测试误差高。解决欠拟合需增加模型复杂度(如多项式回归、决策树)或改进特征工程;解决过拟合则需限制复杂度(如降低树深度)、增加正则化或使用集成方法。MSE是关键的评估指标,良好拟合表现为训练集和测试集MSE均适中且接近。掌握这一平衡艺术是构建泛化能力强、稳健模型的关键。
738 16
|
24天前
|
人工智能 自然语言处理 前端开发
告别Agent Skills, 拥抱 Agent Apps
在AI Agent时代,传统GUI为人类设计,而LLM缺乏视觉、双手与持续感知能力。AOTUI(面向Agent的文本界面)应运而生:以语义化Markdown替代像素渲染,用类型化引用(如`Contact:contacts[2]`)实现“选择”,以Tool函数调用替代鼠标操作,构建专为LLM优化的离散快照式交互范式。
228 9
|
23天前
|
JSON API 数据安全/隐私保护
大模型应用:大模型的本地 API 服务:FastAPI 封装与接口鉴权.44
本文详解本地大模型API的接口发布与鉴权调试,重点介绍Postman工具实操。涵盖FastAPI封装原理、API Key与极简JWT两种鉴权方式,深入解析JWT结构(Header/Payload/Signature)、无状态验证、过期机制及完整调用流程,助开发者安全、高效调试本地大模型服务。
385 7
|
21天前
|
人工智能 安全 Linux
从0到1上手OpenClaw(Clawdbot):阿里云计算巢/本地部署+免费百炼API配置+Skill集成实操手册
OpenClaw(曾用名Clawdbot、Moltbot)作为2026年最热门的开源AI智能体工具,核心优势在于本地部署、数据隐私可控、技能插件化扩展,能够通过自然语言指令完成办公自动化、代码开发、文件管理等各类任务,真正实现“让AI替人干活”。其功能发挥高度依赖大模型的语义理解能力,而阿里云百炼作为国内成熟的大模型服务平台,不仅为新用户提供免费调用额度,还能与OpenClaw无缝对接,成为新手零成本解锁AI能力的最优选择。
551 3
|
19天前
|
存储 机器学习/深度学习 人工智能
大模型应用:大模型本地部署的磁盘空间优化:模型分片存储与按需加载.48
本文详解大模型本地部署的磁盘与显存优化方案:通过分片存储(将大模型切分为多个小文件)与按需加载(运行时动态加载所需分片),显著降低硬件门槛。以Qwen1.5-1.8B为例,完整演示分片生成、索引构建、完整性校验、加载测试及跨分区部署,确保效果不降、资源占用大减。
263 19
|
24天前
|
机器学习/深度学习 数据采集 自然语言处理
大模型应用:多尺度注意力解析:大模型特征提取的基础概念与应用价值.43
本文深入浅出解析多尺度注意力机制:对比单尺度局限,阐明其“细粒度+粗粒度”并行提取与动态融合的核心原理;结合文本案例“小明在图书馆看书”,图解流程、剖析代码实现,助你掌握这一提升大模型长文本与多模态理解能力的关键技术。
142 20
|
29天前
|
存储 机器学习/深度学习 人工智能
大模型应用:通俗理解大模型量化:从概念到实践的原理流程完整拆解.38
大模型量化是通过降低参数精度(如FP32→INT8),在几乎不损精度的前提下,显著压缩模型体积、提升推理速度、降低硬件门槛与功耗的关键技术,使大模型得以落地手机、PC等端侧设备。
381 16

热门文章

最新文章