利用LLM从零开始完成语义分析

238 阅读5分钟

利用大语言模型(Large Language Models, LLMs)进行语义分析是一种高效且强大的方法,能够深入理解文本的含义、情感、意图、实体关系等。以下是系统化、可执行的步骤,帮助你从零开始使用大语言模型完成语义分析任务。


✅ 一、明确语义分析目标

首先,确定你要解决的语义分析任务类型:

任务类型示例
情感分析判断一段评论是正面、负面还是中性
主题分类将新闻分为“科技”、“体育”、“财经”等类别
命名实体识别(NER)从文本中提取人名、地点、组织等
意图识别用户说“我想订机票”,识别出“订票”意图
文本蕴含(NLI)判断两句话是否逻辑一致或矛盾
语义相似度比较两个句子是否表达相同意思
共指消解判断“他”指的是前文哪个实体
问答与信息抽取从文档中提取结构化信息

🔍 建议:初学者可从“情感分析”或“文本分类”入手。


✅ 二、选择合适的大语言模型

根据需求选择本地或云端的 LLM:

1. 开源模型(可本地部署)

  • 推荐工具:OllamavLLMHugging Face Transformers
  • 常用模型:
    • llama3 / llama3:instruct(通用能力强)
    • qwen(通义千问,中文强)
    • mistral / mixtral(英文表现优秀)
    • nomic-embed-text / mxbai-embed-large(用于嵌入和相似度)

2. 商业API(简单易用)

  • OpenAI:gpt-3.5-turbo, gpt-4
  • Anthropic:Claude
  • 百度:文心一言
  • 阿里:通义千问API
  • 讯飞:星火大模型

✅ 推荐组合:

  • 快速验证 → 使用 OpenAI 或 Ollama + llama3
  • 中文场景 → 使用 qwenernie-bot

✅ 三、执行步骤(以“情感分析”为例)

我们以“对用户评论进行情感分析”为例,展示完整流程。

🧩 步骤 1:准备数据

"这家餐厅食物很棒,服务也很热情!" → 正面
"等了半小时还没上菜,太失望了。" → 负面

可以是CSV、JSON、数据库或实时输入。


🧩 步骤 2:设计提示词(Prompt Engineering)

设计清晰、结构化的提示语,引导模型输出期望格式。

prompt = """
你是一个情感分析专家。请分析以下文本的情感倾向,并只返回一个词:正面、负面 或 中性。

文本:{text}

情感:
"""

✅ 提示技巧:

  • 明确输出格式(如 JSON、标签)
  • 提供示例(few-shot prompting)可提升准确率

🧩 步骤 3:调用大模型进行推理

方式一:使用 Ollama(本地运行)

# 启动 Ollama 并拉取模型
ollama pull llama3
import ollama

def analyze_sentiment(text):
    prompt = f"""
    你是一个情感分析专家。请分析以下文本的情感倾向,并只返回一个词:正面、负面 或 中性。
    
    文本:{text}
    
    情感:
    """
    response = ollama.generate(model='llama3', prompt=prompt)
    return response['response'].strip()

# 示例
text = "这部电影太烂了,完全不值得一看。"
sentiment = analyze_sentiment(text)
print("情感:", sentiment)  # 输出:负面

方式二:使用 OpenAI API

from openai import OpenAI

client = OpenAI(api_key="your-api-key")

def analyze_sentiment_gpt(text):
    response = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "你是情感分析专家,只返回:正面、负面、中性"},
            {"role": "user", "content": text}
        ],
        max_tokens=10
    )
    return response.choices[0].message.content.strip()

🧩 步骤 4:后处理与结构化输出

对模型输出进行清洗和标准化:

def clean_sentiment(raw_output):
    raw_output = raw_output.lower()
    if "正面" in raw_output or "positive" in raw_output:
        return "正面"
    elif "负面" in raw_output or "negative" in raw_output:
        return "负面"
    else:
        return "中性"

🧩 步骤 5:批量处理与评估

texts = [
    "服务很好,下次还会来!",
    "价格贵,体验差。",
    "一般般,没什么特别的。"
]

results = []
for t in texts:
    raw = analyze_sentiment(t)
    clean = clean_sentiment(raw)
    results.append({"text": t, "sentiment": clean, "raw": raw})

import pandas as pd
df = pd.DataFrame(results)
print(df)

🧩 步骤 6:评估与优化

  • 人工抽样检查:随机检查100条结果,计算准确率。
  • 引入few-shot示例提升一致性:
示例1:
文本:食物很美味,环境优雅。
情感:正面

示例2:
文本:客服态度恶劣,退款也不处理。
情感:负面

现在请分析:
文本:{new_text}
情感:
  • 可加入 置信度评分多模型投票 提高鲁棒性。

✅ 四、进阶应用(可选)

应用方法
实时语义分析结合 FastAPI 构建 REST API
语义搜索用嵌入模型生成向量 + FAISS/Chroma 检索
自动摘要使用 LLM 提取关键语义
意图+实体联合识别设计结构化输出 JSON schema

✅ 五、完整执行流程图

[原始文本][数据清洗与预处理][设计Prompt(含示例)][调用LLM(本地/云端)][解析并标准化输出][存储结果 + 人工评估][迭代优化Prompt或模型]

✅ 六、注意事项

项目建议
成本控制本地模型(Ollama)适合大批量处理
中文支持优先选择 qwenllama3-chineseernie
输出一致性固定输出格式 + 后处理校验
隐私安全敏感数据避免使用公有云API
性能优化批量推理、缓存重复文本结果

✅ 七、推荐工具栈总结

用途推荐工具
本地运行Ollama + llama3 / qwen
嵌入与相似度nomic-embed-text, mxbai-embed-large
向量检索FAISS, Chroma
API服务FastAPI + Uvicorn
可视化分析Pandas + Matplotlib / Power BI

✅ 结语

大语言模型让语义分析变得前所未有的简单和强大。通过以下四步法即可快速落地:

  1. 定义任务(情感、分类、抽取等)
  2. 选择模型(本地或云端)
  3. 设计Prompt + 调用API
  4. 解析输出 + 评估优化

💡 如果你有具体任务(如“分析客服对话中的用户情绪”),我可以为你定制完整的代码和Prompt模板。

欢迎继续提问!