<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>haoblog</title>
	<atom:link href="https://bithao.com.cn/feed/" rel="self" type="application/rss+xml" />
	<link>https://bithao.com.cn/</link>
	<description>hao</description>
	<lastBuildDate>Mon, 27 Apr 2026 06:55:39 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://bithao.com.cn/wp-content/uploads/2022/06/cropped-haoblog_logo.png</url>
	<title>haoblog</title>
	<link>https://bithao.com.cn/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>揭开 AI Agent评估的奥秘</title>
		<link>https://bithao.com.cn/2026/04/27/%e6%8f%ad%e5%bc%80-ai-agent%e8%af%84%e4%bc%b0%e7%9a%84%e5%a5%a5%e7%a7%98/</link>
					<comments>https://bithao.com.cn/2026/04/27/%e6%8f%ad%e5%bc%80-ai-agent%e8%af%84%e4%bc%b0%e7%9a%84%e5%a5%a5%e7%a7%98/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 06:43:46 +0000</pubDate>
				<category><![CDATA[LLM]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=2082</guid>

					<description><![CDATA[<div><img width="300" height="169" src="https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-300x169.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" fetchpriority="high" srcset="https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-300x169.png 300w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-1024x576.png 1024w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-768x432.png 768w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-1536x864.png 1536w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-2048x1153.png 2048w" sizes="(max-width: 300px) 100vw, 300px" /></div>
<p>原文：https://www.anthropic.com/engineering/demystifying-evals-for-a ...</p>
<p><a href="https://bithao.com.cn/2026/04/27/%e6%8f%ad%e5%bc%80-ai-agent%e8%af%84%e4%bc%b0%e7%9a%84%e5%a5%a5%e7%a7%98/">揭开 AI Agent评估的奥秘</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="169" src="https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-300x169.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" srcset="https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-300x169.png 300w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-1024x576.png 1024w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-768x432.png 768w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-1536x864.png 1536w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-2048x1153.png 2048w" sizes="(max-width: 300px) 100vw, 300px" /></div>
<p class="wp-block-paragraph">原文：<a href="https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents" target="_blank"  rel="nofollow" >https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents</a></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">这篇文章由 Anthropic 工程团队于 2026 年 1 月发布，是一篇关于如何系统性地评估（Evaluations / Evals）AI 智能体（AI Agents）的实战指南。文章的核心观点是：<strong>“没有评估体系的团队在生产环境中无异于‘盲目飞行’（Flying blind），根本无法区分真正的性能退化（Regression）和系统的随机噪音”</strong>。</p>
</blockquote>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="576" src="https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-1024x576.png" alt="" class="wp-image-2084" srcset="https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-1024x576.png 1024w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-300x169.png 300w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-768x432.png 768w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-1536x864.png 1536w, https://bithao.com.cn/wp-content/uploads/2026/04/1777272923-image-2048x1153.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">评估是 AI Agent 走向严肃软件工程的基础。以下是文章的核心要点总结：</p>



<h3 class="wp-block-heading">1. 为什么 Agent 的评估比传统 LLM 更难？</h3>



<ul class="wp-block-list">
<li><strong>从单轮转向多轮（Multi-turn）</strong>：传统大模型的评估通常是“提示词-回复-打分”的单轮模式。而 Agent 涉及多步推理、工具调用（Tool use）、修改环境状态等复杂操作。</li>



<li><strong>误差的传播与复合</strong>：在多步操作中，早期的一个小错误可能会像滚雪球一样在后续步骤中被放大并导致彻底偏离目标。</li>



<li><strong>非确定性（Non-determinism）</strong>：Agent 在相同任务下可能表现出不同的行为路径。更棘手的是，它们常常能找到出乎意料的“捷径”或“漏洞”来完成任务，导致死板的基准测试在误判它们“失败”时，用户反而觉得是“成功”的。</li>
</ul>



<h3 class="wp-block-heading">2. 推荐的三种评分器（Graders）组合</h3>



<p class="wp-block-paragraph">为了应对复杂性，Anthropic 建议结合使用以下三种评分机制：</p>



<ul class="wp-block-list">
<li><strong>基于代码的评分器（Code-based graders）</strong>：如单元测试、正则匹配、静态分析或状态检查。
<ul class="wp-block-list">
<li><em>特点</em>：速度快、成本低、客观且可复现。</li>



<li><em>缺点</em>：过于死板，容易对 Agent 找出的有效但非标准的解决方案产生误判。</li>
</ul>
</li>



<li><strong>基于模型的评分器（Model-based / LLM-as-a-judge）</strong>：让另一个大模型根据评分细则进行打分或进行成对比较。
<ul class="wp-block-list">
<li><em>特点</em>：极其灵活，能处理细微差别和带有主观性质的标准。</li>



<li><em>缺点</em>：自身具有非确定性，需要不断的人工校准。</li>
</ul>
</li>



<li><strong>人类评分员（Human graders）</strong>：人工审核。
<ul class="wp-block-list">
<li><em>特点</em>：代表“黄金标准”，保真度最高。</li>



<li><em>缺点</em>：极其缓慢且昂贵。通常用于小规模抽查、A/B 测试或为模型评分器做校准对齐。</li>
</ul>
</li>
</ul>



<h3 class="wp-block-heading">3. 两类不同目标的评估集</h3>



<p class="wp-block-paragraph">评估不应一成不变，文章建议将其分为两种不同目的的测试集：</p>



<ul class="wp-block-list">
<li><strong>能力评估（Capability Evals）</strong>：“这个 Agent 究竟能做到什么？”。这类评估通常面临最具挑战性的前沿任务，初始通过率往往很低，它为你提供了一座“需要攀登的山峰”。</li>



<li><strong>回归评估（Regression Evals）</strong>：“它原来的功能还没坏吧？”。当 Agent 掌握了能力评估中的某项技能后，该测试用例就会“毕业”进入回归测试集。这里的通过率应保持在近乎 100%，它的作用是作为安全网，防止你在优化新功能时把老系统搞崩溃。</li>
</ul>



<h3 class="wp-block-heading">4. 解决“非确定性”的指标设计</h3>



<p class="wp-block-paragraph">由于 Agent 每次运行的轨迹可能不同，简单的单次测试无法反映真实水平。文章推荐针对性地使用不同指标：</p>



<ul class="wp-block-list">
<li><strong>pass@k</strong>：在 $k$ 次尝试中只要成功 1 次就算通过。用于衡量模型能力的“上限”和潜力。</li>



<li><strong>pass^k</strong>（连续成功）：连续 $k$ 次尝试必须全部成功。用于衡量模型在生产环境中行为的“绝对可靠性”。</li>
</ul>



<h3 class="wp-block-heading">5. 高价值的最佳实践与建议</h3>



<ul class="wp-block-list">
<li><strong>尽早开始，以评测驱动开发（Eval-driven development）</strong>：不要等系统庞大时再建评估。建议初期先手写 20-50 个核心任务，明确“成功的定义”（类似测试驱动开发 TDD）。等待的时间越长，构建评估体系的难度就越大。</li>



<li><strong>务必阅读执行日志（Read the transcripts!）</strong>：这是验证评估质量的唯一方法。不要只看最终的评分，你必须去看 Agent 的执行轨迹。很多时候评估跑出了“失败”，实际上是因为 Agent 找到了比参考答案更好、更聪明的解法，只是评分器没有预料到。</li>



<li><strong>构建正反平衡的测试集</strong>：不要只测试 Agent“应该做什么”（例如：遇到不懂的问题应该去搜索网页），也要测试它“不该做什么”（例如：问它常识问题时不要过度搜索）。偏科的评估会训练出行为极端的 Agent。</li>



<li><strong>区分生成内容与执行路径</strong>：通常来说，评估 Agent <strong>最终产生了什么结果（Outcome）</strong>，比评估它<strong>具体通过什么路径完成（Transcript/Path）</strong>更加有效且稳健。</li>
</ul>



<h3 class="wp-block-heading"><strong>总结：</strong></h3>



<p class="wp-block-paragraph">Anthropic 的这篇文章指出，AI 行业的壁垒正在发生转移。模型、提示词和数据正在商品化，而<strong>系统性、科学地衡量 Agent 性能的“评估能力”，才是区分一个玩具 Demo 和成熟商业产品的真正护城河</strong>。建立可靠的评估体系（Evals）虽然前期枯燥且投入大，但它的价值会在整个 AI Agent 的生命周期中产生复利。</p>
<p><a href="https://bithao.com.cn/2026/04/27/%e6%8f%ad%e5%bc%80-ai-agent%e8%af%84%e4%bc%b0%e7%9a%84%e5%a5%a5%e7%a7%98/">揭开 AI Agent评估的奥秘</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2026/04/27/%e6%8f%ad%e5%bc%80-ai-agent%e8%af%84%e4%bc%b0%e7%9a%84%e5%a5%a5%e7%a7%98/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Deepagents学习</title>
		<link>https://bithao.com.cn/2026/02/05/deepagents%e5%ad%a6%e4%b9%a0/</link>
					<comments>https://bithao.com.cn/2026/02/05/deepagents%e5%ad%a6%e4%b9%a0/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Thu, 05 Feb 2026 05:02:41 +0000</pubDate>
				<category><![CDATA[LLM]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=2061</guid>

					<description><![CDATA[<div><img width="300" height="169" src="https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-300x169.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-300x169.png 300w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-1024x576.png 1024w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-768x432.png 768w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image.png 1080w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>1. 介绍 官方文档：https://docs.langchain.com/oss/python/deepagents/overv ...</p>
<p><a href="https://bithao.com.cn/2026/02/05/deepagents%e5%ad%a6%e4%b9%a0/">Deepagents学习</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="169" src="https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-300x169.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-300x169.png 300w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-1024x576.png 1024w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-768x432.png 768w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image.png 1080w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<h2 class="wp-block-heading">1. 介绍</h2>



<p class="wp-block-paragraph">官方文档：https://docs.langchain.com/oss/python/deepagents/overview</p>



<p class="wp-block-paragraph">中文文档：https://langchain-doc.cn/v1/python/deepagents/overview.html</p>



<p class="wp-block-paragraph"><code><a href="https://pypi.org/project/deepagents/" target="_blank"  rel="nofollow" >DeepAgents</a></code> 是一个独立库，用于构建能够处理复杂多步骤任务的代理。深度代理基于 LangGraph，灵感来自 Claude Code、Deep Research 和 Manus 等应用程序，具备规划功能、用于上下文管理的文件系统以及生成子代理的能力。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-1024x576.png" alt="" class="wp-image-2063" srcset="https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-1024x576.png 1024w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-300x169.png 300w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image-768x432.png 768w, https://bithao.com.cn/wp-content/uploads/2026/02/1770267724-image.png 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>何时使用Deepagents</strong></p>



<p class="wp-block-paragraph">当你想构建能够：</p>



<ul class="wp-block-list">
<li>处理需要规划和分解的复杂多步骤任务</li>



<li>通过文件系统工具管理大量上下文</li>



<li>将工作委托给专门的子代理以实现上下文隔离</li>



<li>跨对话和线程持续保存记忆</li>
</ul>



<p class="wp-block-paragraph">如果想构建更简单的代理，可以考虑使用 LangChain 的 <code><a href="https://docs.langchain.com/oss/python/langchain/agents" target="_blank"  rel="nofollow" >create_agent</a></code> 或构建自定义的 <a href="https://docs.langchain.com/oss/python/langgraph/overview" target="_blank"  rel="nofollow" >LangGraph</a> 工作流程。</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://momenta.feishu.cn/space/api/box/stream/download/asynccode/?code=MGI3MWE2NDU3YjY4NWMyOTIxNzkyMmE4M2ZiMDBmNTRfYlpDcHZHenJCVVRsNzEzUm5UVU1CT0NxV3JGaGVudWZfVG9rZW46UDV5WGJvekFabzV1OEZ4bUhRNGNhOWlybnllXzE3NzAyNjc1Mzg6MTc3MDI3MTEzOF9WNA" alt=""/></figure>
</div>


<h2 class="wp-block-heading">2. 安装</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>python</td><td>&gt;=3.11</td></tr></tbody></table></figure>



<pre class="wp-block-code"><code>pip install deepagents
# 其他依赖: <a href="https://docs.langchain.com/oss/python/integrations/chat" target="_blank"  rel="nofollow" >LangChain 模型对象</a>&nbsp;富文本控制台
pip install langchain_openai rich</code></pre>



<h2 class="wp-block-heading">3. 第一个例程</h2>



<p class="wp-block-paragraph">agent.py</p>



<pre class="wp-block-code"><code>import argparse
import asyncio
from langchain_openai import ChatOpenAI
from deepagents import create_deep_agent
from langchain_core.messages import SystemMessage, HumanMessage
from deepagents.backends import FilesystemBackend
from console import *

model_config = {
    "model": "YOU_MODEL",
    "base_url": "YOU_BASE_URL",
    "api_key": "YOU_API_KEY",
    "temperature": 0.1,
    "extra_body": {}# {"reasoning_effort": "medium"}
}

async def main(prompt: str):
    agent = create_deep_agent(
        model=ChatOpenAI(**model_config),
        memory=&#91;"./AGENTS.md"],
        skills=&#91;"./skills"],
        # tools=&#91;],
        backend=FilesystemBackend(root_dir=r"/home/ywh/workspace/deepagent", virtual_mode=True),    # 设置virtual_mode，root_dir才会有效，否则root_dir是根目录
    )
    display = AgentDisplay()
    console.print()

    # Agent执行循环 - 使用 astream 获取流式状态
    with Live(display.spinner, console=console, refresh_per_second=10, transient=True) as live:
        async for chunk in agent.astream(
            {"messages": &#91;("user", prompt)]},
            config={"configurable": {"thread_id": "deepagent-demo"}},
            stream_mode="values",
        ):
            if "messages" in chunk:
                messages = chunk&#91;"messages"]
                if len(messages) &gt; display.printed_count:
                    # Temporarily stop spinner to print
                    live.stop()
                    for msg in messages&#91;display.printed_count:]:
                        display.print_message(msg)
                    display.printed_count = len(messages)
                    # Resume spinner
                    live.start()
                    live.update(display.spinner)

    console.print()
    console.print("&#91;bold green]✓ Done!&#91;/]")
        

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="agent script.")
    parser.add_argument('-p', '--prompt', type=str, required=True, help='user prompt')
    args = parser.parse_args()
    asyncio.run(main(prompt=args.prompt))</code></pre>



<p class="wp-block-paragraph">console.py</p>



<pre class="wp-block-code"><code>
from rich.console import Console
from rich.live import Live
from rich.markdown import Markdown
from rich.panel import Panel
from rich.spinner import Spinner
from rich.text import Text
from langchain_core.messages import AIMessage, HumanMessage, ToolMessage
console = Console()

class AgentDisplay:
    """Manages the display of agent progress."""

    def __init__(self):
        self.printed_count = 0
        self.current_status = ""
        self.spinner = Spinner("dots", text="Thinking...")

    def update_status(self, status: str):
        self.current_status = status
        self.spinner = Spinner("dots", text=status)

    def print_message(self, msg):
        """Print a message with nice formatting."""
        if isinstance(msg, HumanMessage):
            console.print(Panel(str(msg.content), title="You", border_style="blue"))

        elif isinstance(msg, AIMessage):
            content = msg.content
            if isinstance(content, list):
                text_parts = &#91;p.get("text", "") for p in content if isinstance(p, dict) and p.get("type") == "text"]
                content = "\n".join(text_parts)

            if content and content.strip():
                console.print(Panel(Markdown(content), title="Agent", border_style="green"))

            if msg.tool_calls:
                for tc in msg.tool_calls:
                    name = tc.get("name", "unknown")
                    args = tc.get("args", {})

                    console.print(f"  &#91;bold cyan]&gt;&gt; {name}...&#91;/]")

        elif isinstance(msg, ToolMessage):
            console.print(f"  &#91;bold cyan]✓ {msg.content}&#91;/]")</code></pre>



<figure class="wp-block-image"><img decoding="async" src="https://momenta.feishu.cn/space/api/box/stream/download/asynccode/?code=MTQ0Y2ZjNTZlM2M2MjI0Yzg0OTQwOTE0NGZiMjIxMThfVWlvTDJ0OHF5d1VtRkJCMlROc2JacDdDbHd2ZEluOUJfVG9rZW46UUJIU2JOb2tkb01GVFl4VmlzamNOZ3VibmRlXzE3NzAyNjc1Mzg6MTc3MDI3MTEzOF9WNA" alt=""/></figure>



<p class="wp-block-paragraph">这样就完成一个类claude code的可定制化agent。</p>
<p><a href="https://bithao.com.cn/2026/02/05/deepagents%e5%ad%a6%e4%b9%a0/">Deepagents学习</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2026/02/05/deepagents%e5%ad%a6%e4%b9%a0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>自然语言处理笔记</title>
		<link>https://bithao.com.cn/2025/12/26/%e8%87%aa%e7%84%b6%e8%af%ad%e8%a8%80%e5%a4%84%e7%90%86%e7%ac%94%e8%ae%b0/</link>
					<comments>https://bithao.com.cn/2025/12/26/%e8%87%aa%e7%84%b6%e8%af%ad%e8%a8%80%e5%a4%84%e7%90%86%e7%ac%94%e8%ae%b0/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Fri, 26 Dec 2025 02:19:25 +0000</pubDate>
				<category><![CDATA[LLM]]></category>
		<category><![CDATA[Fine-tuning]]></category>
		<category><![CDATA[RAG]]></category>
		<category><![CDATA[Transformer]]></category>
		<category><![CDATA[大语言模型]]></category>
		<category><![CDATA[注意力机制]]></category>
		<category><![CDATA[深度学习基础]]></category>
		<category><![CDATA[词向量]]></category>
		<category><![CDATA[语言模型与词向量]]></category>
		<category><![CDATA[预训练语言模型]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=2007</guid>

					<description><![CDATA[<div><img width="300" height="259" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示-300x259.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示-300x259.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示.png 531w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>1 深度学习基础 交叉熵损失（Cross-Entropy Loss）是衡量两个概率分布差异的函数，最早由信息论领域的 Claude ...</p>
<p><a href="https://bithao.com.cn/2025/12/26/%e8%87%aa%e7%84%b6%e8%af%ad%e8%a8%80%e5%a4%84%e7%90%86%e7%ac%94%e8%ae%b0/">自然语言处理笔记</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="259" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示-300x259.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示-300x259.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示.png 531w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<h2 class="wp-block-heading">1 深度学习基础</h2>



<p class="wp-block-paragraph"><strong>交叉熵损失（Cross-Entropy Loss）</strong>是衡量两个概率分布差异的函数，最早由信息论领域的 Claude Shannon 提出。交叉熵损失广泛应用于机器学习和深度学习模型中，尤其在<strong>分类任务</strong>中用于优化模型性能。<br>$$<br>L_{CE}=-\sum_{i=1}^ny_i\log(\hat{y_i})<br>$$<br>其中， $y_i$是<strong>真实标签</strong>， $\hat{y_i}$是模型预测的<strong>概率分布</strong>，$n$是分类<strong>类别的数量</strong>。</p>



<p class="wp-block-paragraph">交叉熵损失度量了模型输出的概率分布$\hat{y_i}$和真实标签分布$y_i$之间的差异。交叉熵越小，表示两个分布越接近，即预测的类别概率分布越接近真实标签。交叉熵损失的目标是最小化该值，使得模型输出的预测概率与真实标签的分布尽可能接近。</p>



<p class="wp-block-paragraph"><strong>梯度下降法</strong><br>$$<br>\theta^i=\theta^{i-1}-\eta\nabla C(\theta^{i-1})<br>$$</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="567" height="379" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766713260-image.png" alt="" class="wp-image-2010" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766713260-image.png 567w, https://bithao.com.cn/wp-content/uploads/2025/12/1766713260-image-300x201.png 300w" sizes="auto, (max-width: 567px) 100vw, 567px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>反向传播算法</strong>：先前馈计算每一层的状态和激活值，直到最后一层；反向传播计算每一层的误差；计算每一层参数的偏导数，并更新参数。<br>$$<br>\delta^{L-1}=\sigma^{\prime}(Z^{L-1})\cdot(W^L)^\top\delta^L<br>$$<br>其中，$\delta^{L-1}$是我们需要计算的目标，即 第 L-1 层的误差项。$\delta^L$是 第 L 层的误差项，是计算的起点。$\sigma^{\prime}(Z^{L-1})$是激活函数 σ 在第 L-1 层神经元的加权输入$Z^{L-1}$处的导数值。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="596" height="444" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766713380-image.png" alt="" class="wp-image-2011" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766713380-image.png 596w, https://bithao.com.cn/wp-content/uploads/2025/12/1766713380-image-300x223.png 300w" sizes="auto, (max-width: 596px) 100vw, 596px" /></figure>
</div>


<p class="wp-block-paragraph">梯度消失问题：在神经网络中误差反向传播的过程中，其中需要用到激活函数$\sigma(Z^{L-1})$的导数误差从输出层反向传播时每层都要乘激活函数导数。这样当激活函数导数值小于 1 时 ，误差经过每一层传递都会不断衰减，当网络很深时甚至消失。</p>



<p class="wp-block-paragraph">解决梯度梯度消失问题方法：</p>



<ul class="wp-block-list">
<li>选择合适的激活函数</li>



<li>用复杂的门结构代替激活函数</li>



<li>残差结构</li>
</ul>



<p class="wp-block-paragraph">解决过拟合问题方法：</p>



<ul class="wp-block-list">
<li>Dropout</li>



<li>损失函数加入适当的正则项</li>
</ul>



<p class="wp-block-paragraph"><strong>CNN</strong>有三个结构上的特性：卷积（局部连接、权重共享）、池化（空间或时间上的次采样）。</p>



<p class="wp-block-paragraph">DNN、CNN 输入、输出定长；处理输入、输出变长问题效率不高。 而自然语言处理中的语句通常其长度不固定。解决方法：RNN（循环神经网络）。</p>



<p class="wp-block-paragraph"><strong>RNN</strong>核心思想： 将处理问题在时序上分解为一系列相同的“单元”，单元的神经网络可以在时序上展开，且能将上一时刻的结果传递给下一时刻，整个网络按时 间轴展开。即可变长。</p>



<p class="wp-block-paragraph"><strong>LSTM</strong>（长短时记忆神经网络）：LSTM单元不仅接受$x_t$和$h_{t-1}$，还需建立一个机制(维持一个细胞状态$C_t$) 能<br>保留前面远处结点信息在长距离传播中不会被丢失。LSTM 通过设计“门”结构实现保留信息和选择信息功能。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="617" height="200" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766713980-image.png" alt="" class="wp-image-2016" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766713980-image.png 617w, https://bithao.com.cn/wp-content/uploads/2025/12/1766713980-image-300x97.png 300w" sizes="auto, (max-width: 617px) 100vw, 617px" /></figure>
</div>


<p class="wp-block-paragraph">遗忘门、输入门、输出门</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="678" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714128-LSTM-1024x678.png" alt="" class="wp-image-2046" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714128-LSTM-1024x678.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714128-LSTM-300x199.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714128-LSTM-768x508.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714128-LSTM.png 1369w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>GRU</strong>：简化LSTM，输入门和遗忘门合并为更新门（更新门决定隐状态保留放弃部分）。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="658" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714106-GRU-1024x658.png" alt="" class="wp-image-2041" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714106-GRU-1024x658.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714106-GRU-300x193.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714106-GRU-768x494.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714106-GRU.png 1212w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading">2 语言模型与词向量</h2>



<p class="wp-block-paragraph">语言模型基本概念：用句子$S=w_1,w_2,…,w_n$ 的概率 $p(S)$ 刻画句子的合理性（统计自然语言处理的基础模型）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="868" height="508" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714130-n-gram.png" alt="" class="wp-image-2047" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714130-n-gram.png 868w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714130-n-gram-300x176.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714130-n-gram-768x449.png 768w" sizes="auto, (max-width: 868px) 100vw, 868px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>隐马尔科夫模型：</strong>该模型是一个双重随机过程，我们无法观测具体的状态序列，只知道状态转移的概率，即模型的状态转换过程是不可观察的（隐蔽的） 而可观察事件的随机过程是隐蔽状态转换过程的随机函数。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="787" height="596" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714110-HMM1.png" alt="" class="wp-image-2042" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714110-HMM1.png 787w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714110-HMM1-300x227.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714110-HMM1-768x582.png 768w" sizes="auto, (max-width: 787px) 100vw, 787px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="873" height="993" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714113-HMM2.png" alt="" class="wp-image-2043" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714113-HMM2.png 873w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714113-HMM2-264x300.png 264w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714113-HMM2-768x874.png 768w" sizes="auto, (max-width: 873px) 100vw, 873px" /></figure>
</div>


<h3 class="wp-block-heading">词向量</h3>



<p class="wp-block-paragraph">词的表示：自然语言问题要用计算机处理时，第一步要找一种方法把这些符号数字化，成为计 算机方便处理的形式化表示。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="531" height="458" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示.png" alt="" class="wp-image-2030" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示.png 531w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714068-词的表示-300x259.png 300w" sizes="auto, (max-width: 531px) 100vw, 531px" /></figure>
</div>


<p class="wp-block-paragraph">神经网络词向量：不计算词之间的共现频度，直接用“基于词的上下文词来预测当前词”或“基于当前词预测上下文词”的方法构造构造<strong>低维稠密向量</strong>作为词的分布式表示。</p>



<p class="wp-block-paragraph">神经语言模型：用神经网络方法学习语言模型参数（<strong>NLP 里程碑成果</strong>）</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="857" height="568" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714070-神经语言模型.png" alt="" class="wp-image-2031" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714070-神经语言模型.png 857w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714070-神经语言模型-300x199.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714070-神经语言模型-768x509.png 768w" sizes="auto, (max-width: 857px) 100vw, 857px" /></figure>
</div>


<p class="wp-block-paragraph">词的 One-Hot 表示：用一个非常长的、只包含一个1和大量0的向量来表示一个词。每个词的 one-hot 向量长度等于词汇表的大小。向量中，只有该词对应索引的位置是1，其他位置全是0。</p>



<p class="wp-block-paragraph">Look-up 表（查找表，通常指 Embedding Layer/嵌入层）：一个可以学习的“密码本”或“花名册”，它将<strong>高维稀疏</strong>的 one-hot 向量“翻译”成<strong>低维稠密</strong>且有意义的向量（即<strong>词向量</strong>）。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="854" height="605" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714132-NNLM.png" alt="" class="wp-image-2048" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714132-NNLM.png 854w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714132-NNLM-300x213.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714132-NNLM-768x544.png 768w" sizes="auto, (max-width: 854px) 100vw, 854px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="866" height="449" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714037-RNNLM.png" alt="" class="wp-image-2019" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714037-RNNLM.png 866w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714037-RNNLM-300x156.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714037-RNNLM-768x398.png 768w" sizes="auto, (max-width: 866px) 100vw, 866px" /></figure>
</div>


<p class="wp-block-paragraph">RNNLM 模型可以保留每个词的全部历史信息，不需简化为n-gram。引入词向量作为输入后不需要数据平滑。</p>



<p class="wp-block-paragraph">Mikolov等人在2013年，同时提出CBOW（Continuous Bag-of-Words）和Skip-gram模型。主要针对NNLM训练复杂度过高的问题进行改进，简化模型，保留核心部分，以更高效的方法获取词向量。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="825" height="572" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714100-CBOWskip-gram.png" alt="" class="wp-image-2039" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714100-CBOWskip-gram.png 825w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714100-CBOWskip-gram-300x208.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714100-CBOWskip-gram-768x532.png 768w" sizes="auto, (max-width: 825px) 100vw, 825px" /></figure>
</div>


<p class="wp-block-paragraph">Word2Vec主要包含两种模型：Skip-Gram（跳字模型）和CBOW（Continuous Bag of Words，连续词袋模型）。</p>



<p class="wp-block-paragraph">Skip-Gram与CBOW模型的主要差异在于训练方式：Skip-Gram 通过中心词预测上下文词汇，类似于“由点及面”的扩展；而CBOW则是利用上下文词汇预测中心词，类似于“由面定点”的填充。前者注重于从局部到整体的推理，后者则强调整体对局部的反映。</p>



<p class="wp-block-paragraph">模型真正的目标不是完美地完成这个预测任务，而是在完成这个任务的过程中，让模型学会的权重参数能够很好地捕捉词语的语义和语法信息。<strong>模型训练好之后，词向量是输入层到隐藏层的权重矩阵。</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="778" height="544" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714067-Word2vec.png" alt="" class="wp-image-2029" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714067-Word2vec.png 778w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714067-Word2vec-300x210.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714067-Word2vec-768x537.png 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /></figure>
</div>


<h2 class="wp-block-heading">3 预训练语言模型</h2>



<p class="wp-block-paragraph">动态词向量（ELMo）的核心理念：一个词的向量表示是基于其<strong>完整的上下文动态生成</strong>的。同一个词在不同的句子中会有不同的向量。</p>



<ol class="wp-block-list">
<li>Word2Vec是“一个词，一个向量”；ELMo是“一个实例（occurrence）一个向量”。</li>



<li><strong>解决一词多义：</strong> 这是ELMo最大的贡献。它能为“我今天吃了一个苹果”和“我买了一部苹果手机”中的两个“苹果”生成不同的向量，准确捕捉其语义差异。</li>
</ol>



<h3 class="wp-block-heading">注意力机制</h3>



<p class="wp-block-paragraph">注意力机制是一种模拟人类认知注意力的计算技术，用于处理序列数据（如文本）。其核心思想是：对于给定的查询（Query），模型通过计算查询与一系列键（Key）的相似度（如点积），生成注意力权重（经softmax归一化），然后使用这些权重对对应的值（Value）进行<strong>加权求和</strong>，从而突出输入中相关信息的重要性。简单来说，它允许模型动态地聚焦于输入的不同部分，而不是平等对待所有元素。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="836" height="587" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714085-Attention1.png" alt="" class="wp-image-2035" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714085-Attention1.png 836w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714085-Attention1-300x211.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714085-Attention1-768x539.png 768w" sizes="auto, (max-width: 836px) 100vw, 836px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="804" height="591" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714087-Attention2.png" alt="" class="wp-image-2036" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714087-Attention2.png 804w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714087-Attention2-300x221.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714087-Attention2-768x565.png 768w" sizes="auto, (max-width: 804px) 100vw, 804px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>自注意力（Self-Attention）</strong>：是注意力机制的特殊形式，其中查询、键和值均来自同一输入序列。这使得每个位置可以直接关注序列中的所有其他位置，从而捕获序列内部的长期依赖关系。例如，在句子中，一个词可以通过自注意力直接与句首或句尾的词交互，无需像RNN那样逐步传递信息。这显著提高了模型对全局上下文的理解能力，避免了梯度消失问题。</p>



<p class="wp-block-paragraph"><strong>多头注意力（Multi-Head Attention）</strong>：通过使用多个独立的注意力头（每个头学习不同的查询、键、值投影），模型能够并行地从多个子空间（如语法、语义、语用等角度）捕获多样化的上下文信息。多个头的输出被拼接和线性变换，集成不同视角的注意力模式。这种设计增强了模型的表示能力，使其能更鲁棒地处理复杂语言结构（如歧义或长距离依赖），防止过拟合到单一模式。<strong>多头就是做多次同样的事情（参数不共享），然后把结果拼接。</strong></p>



<ul class="wp-block-list">
<li>长距离依赖建模困难</li>



<li>上下文理解</li>
</ul>



<h3 class="wp-block-heading">Transformer</h3>



<p class="wp-block-paragraph"><strong>Transformer</strong>的原始结构。它包含两个主要部分：</p>



<ul class="wp-block-list">
<li><strong>编码器</strong>：<strong>双向编码</strong>，擅长<strong>理解</strong>和<strong>表征</strong>输入。它是双向的，在计算每个词的表示时，可以同时看到其左右上下文的所有词。</li>



<li><strong>解码器</strong>：<strong>单向自回归</strong>，擅长<strong>生成</strong>序列。它是单向的，在计算当前词的表示时，只能看到它左边（之前）的词，这是为了在生成时不会“偷看”到未来的答案。</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="562" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714046-Transformer-1024x562.png" alt="" class="wp-image-2022" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714046-Transformer-1024x562.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714046-Transformer-300x165.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714046-Transformer-768x422.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714046-Transformer.png 1197w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="539" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714054-Transformer1-1024x539.png" alt="" class="wp-image-2024" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714054-Transformer1-1024x539.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714054-Transformer1-300x158.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714054-Transformer1-768x405.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714054-Transformer1.png 1213w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="476" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714056-Transformer2-1024x476.png" alt="" class="wp-image-2025" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714056-Transformer2-1024x476.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714056-Transformer2-300x140.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714056-Transformer2-768x357.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714056-Transformer2.png 1225w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="564" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714058-Transformer3-1024x564.png" alt="" class="wp-image-2026" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714058-Transformer3-1024x564.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714058-Transformer3-300x165.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714058-Transformer3-768x423.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714058-Transformer3.png 1192w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="555" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714062-Transformer4-1024x555.png" alt="" class="wp-image-2027" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714062-Transformer4-1024x555.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714062-Transformer4-300x163.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714062-Transformer4-768x416.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714062-Transformer4.png 1225w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="541" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714064-Transformer5-1024x541.png" alt="" class="wp-image-2028" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714064-Transformer5-1024x541.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714064-Transformer5-300x159.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714064-Transformer5-768x406.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714064-Transformer5.png 1232w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="446" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714051-Transformer_code-1024x446.png" alt="" class="wp-image-2023" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714051-Transformer_code-1024x446.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714051-Transformer_code-300x131.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714051-Transformer_code-768x334.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714051-Transformer_code.png 1041w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>GPT 模型结构：</strong>GPT 采⽤了 Transformer 的 Decoder 部分，并且每个⼦层只有⼀个 Masked Multi Self-Attention（768 维向量和 12 个 Attention Head）和⼀个 Feed Forward，模型共叠加使用了 12 层的 Decoder普通transformer解码器层的编码器-解码器注意力子层。</p>



<p class="wp-block-paragraph"><strong>Bert 模型结构：</strong>使用堆叠的双向Transformer Encoder，在所有层中共同依赖于左右上下文基础版是12个Encoder (12层 )；高级版24个Encoder (24层 )。</p>



<p class="wp-block-paragraph"><strong>BART 模型结构：</strong>BART采用标准Transformer结构</p>



<p class="wp-block-paragraph"><strong>T5：</strong>给整个NLP 预训练模型领域提供了一个通用框架，把所有NLP任务都转化成一种形式(Text-to-Text)，通过这样的方式可以用同样的模型，同样的损失函数，同样的训练过程，同样的解码过程来完成所有 NLP 任务。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="692" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714042-T5-1024x692.png" alt="" class="wp-image-2021" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714042-T5-1024x692.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714042-T5-300x203.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714042-T5-768x519.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714042-T5.png 1161w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading">4 大语言模型</h2>



<h3 class="wp-block-heading"><strong>RAG</strong></h3>



<p class="wp-block-paragraph">基于LLM的检索式生成模型，包括检索器 Retriever、生成式语言模型LLM、知识库 knowledge Base</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="585" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714092-BM25-1024x585.png" alt="" class="wp-image-2037" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714092-BM25-1024x585.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714092-BM25-300x171.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714092-BM25-768x439.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714092-BM25.png 1180w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="525" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714103-DPR-1024x525.png" alt="" class="wp-image-2040" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714103-DPR-1024x525.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714103-DPR-300x154.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714103-DPR-768x394.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714103-DPR.png 1183w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">上下文学习（In-context Learning）是一种学习范式，是现代自然语言处理领域中一种重要的学习方法，尤其在使用大规模，尤其在使用大规模预训练模型时，它允许模型在给定的上下文中进行学习和推理，而无需真正更新模型参数。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="577" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714134-RAG-1024x577.png" alt="" class="wp-image-2049" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714134-RAG-1024x577.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714134-RAG-300x169.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714134-RAG-768x433.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714134-RAG.png 1037w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="551" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714034-RAG总结-1024x551.png" alt="" class="wp-image-2017" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714034-RAG总结-1024x551.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714034-RAG总结-300x161.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714034-RAG总结-768x413.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714034-RAG总结.png 1137w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">Fine-tuning</h3>



<p class="wp-block-paragraph">微调（Fine-tuning）：预训练好的模型然后在特定任务的数据上进行进一步的训练。这个过程通常涉及对模型的权重进行微小的调整，以使其更好地适应特定的任务，得到最终能力各异的模型。</p>



<p class="wp-block-paragraph">大模型微调的方法：</p>



<ul class="wp-block-list">
<li><strong>全量微调</strong>通过在预训练的大型模型基础上调整所有层和参数，使其适应特定任务。这一过程使用较小的学习率和特定任务的数据进行，可以充分利用预训练模型的通用特征，但可能需要更多的计算资源。</li>



<li><strong>参数高效微调（PEFT）</strong>技术旨在通过最小化微调参数的数量和计算复杂度，来提高预训练模型在新任务上的性能，从而缓解大型预训练模型的训练成本。PEFT包括LORA、QLoRA、Adapter Tuning、Prefix Tuning、Prompt Tuning、P-Tuning及P-Tuning v2等。</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="854" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766715183-image-1024x854.png" alt="" class="wp-image-2051" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766715183-image-1024x854.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766715183-image-300x250.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766715183-image-768x641.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766715183-image.png 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="620" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714072-Adapter1-1024x620.png" alt="" class="wp-image-2032" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714072-Adapter1-1024x620.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714072-Adapter1-300x182.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714072-Adapter1-768x465.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714072-Adapter1.png 1135w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="579" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714076-Adapter2-1024x579.png" alt="" class="wp-image-2033" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714076-Adapter2-1024x579.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714076-Adapter2-300x170.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714076-Adapter2-768x434.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714076-Adapter2.png 1144w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Adapter模块的添加导致模型整体参数量增加，降低了模型推理时的性能。 与全量微调相比Adapter在训练时快60%，但是在推理时慢4%-6%。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="629" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714115-LoRa1-1024x629.png" alt="" class="wp-image-2044" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714115-LoRa1-1024x629.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714115-LoRa1-300x184.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714115-LoRa1-768x472.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714115-LoRa1.png 1118w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="547" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766714124-LoRa2-1024x547.png" alt="" class="wp-image-2045" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766714124-LoRa2-1024x547.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714124-LoRa2-300x160.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714124-LoRa2-768x411.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766714124-LoRa2.png 1143w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Lora没有推理延迟，但需要预先指定每个增量矩阵的秩r ，忽略了在微调预训练模型时，权重矩阵的重要性在不同模块和层之间存在显著差异。LoRA 块大小固定，训练后无法修改，如果需要调整矩阵的秩，只能从头开始训练。优化并找到不同秩下面的最优模型是一个繁琐的过程。</p>
<p><a href="https://bithao.com.cn/2025/12/26/%e8%87%aa%e7%84%b6%e8%af%ad%e8%a8%80%e5%a4%84%e7%90%86%e7%ac%94%e8%ae%b0/">自然语言处理笔记</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2025/12/26/%e8%87%aa%e7%84%b6%e8%af%ad%e8%a8%80%e5%a4%84%e7%90%86%e7%ac%94%e8%ae%b0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>大模型后训练强化学习方法-GRPO&#038;PPO</title>
		<link>https://bithao.com.cn/2025/08/07/%e5%a4%a7%e6%a8%a1%e5%9e%8b%e5%90%8e%e8%ae%ad%e7%bb%83%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95-grpoppo/</link>
					<comments>https://bithao.com.cn/2025/08/07/%e5%a4%a7%e6%a8%a1%e5%9e%8b%e5%90%8e%e8%ae%ad%e7%bb%83%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95-grpoppo/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Thu, 07 Aug 2025 04:34:38 +0000</pubDate>
				<category><![CDATA[LLM]]></category>
		<category><![CDATA[GRPO]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=1909</guid>

					<description><![CDATA[<div><img width="300" height="153" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-300x153.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-300x153.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-1024x521.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-768x391.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image.png 1080w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>1. 前言 在大语言模型进行微调的流程中，一般在监督微调（Supervised Fine-Tuning，SFT）阶段之后，进一步通 ...</p>
<p><a href="https://bithao.com.cn/2025/08/07/%e5%a4%a7%e6%a8%a1%e5%9e%8b%e5%90%8e%e8%ae%ad%e7%bb%83%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95-grpoppo/">大模型后训练强化学习方法-GRPO&amp;PPO</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="153" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-300x153.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-300x153.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-1024x521.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-768x391.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image.png 1080w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<h2 class="wp-block-heading">1. 前言</h2>



<p class="wp-block-paragraph">在大语言模型进行微调的流程中，一般在监督微调（Supervised Fine-Tuning，SFT）阶段之后，进一步通过强化学习对模型进行优化可以显著提升其性能。而<strong>群体相对策略优化（Group Relative Policy Optimization，GRPO），就是使用在该阶段，替换传统的近端策略优化（Proximal Policy Optimization</strong>，<strong>PPO）算法。</strong></p>



<p class="wp-block-paragraph"><strong>PPO</strong>是OpenAI在2017提出的一种强化学习算法，适用于对 LLM 进行微调。PPO 的目标是通过最大化以下替代目标函数来优化策略模型。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="109" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766026843-image-1024x109.png" alt="" class="wp-image-1935" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766026843-image-1024x109.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766026843-image-300x32.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766026843-image-768x82.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766026843-image.png 1088w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>GRPO</strong>不再需要像PPO那样加入额外的价值函数近似<strong><em>，</em>而是直接使用多个采样输出的平均奖励作为Baseline</strong>，显著减少了训练资源的使用。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="533" height="78" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766026938-image.png" alt="" class="wp-image-1936" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766026938-image.png 533w, https://bithao.com.cn/wp-content/uploads/2025/12/1766026938-image-300x44.png 300w" sizes="auto, (max-width: 533px) 100vw, 533px" /></figure>
</div>


<h2 class="wp-block-heading">2. GRPO与PPO的区别</h2>



<p class="wp-block-paragraph">PPO基于优势函数估计和 KL 散度约束的策略优化。</p>



<p class="wp-block-paragraph">1. 利用价值网络（Critic网络）估计状态价值<math data-latex="V"><semantics><mi>V</mi><annotation encoding="application/x-tex">V</annotation></semantics></math>，使用广义优势函数（GAE ）估计优势<math data-latex="A"><semantics><mi>A</mi><annotation encoding="application/x-tex">A</annotation></semantics></math>。</p>



<ul class="wp-block-list">
<li>估计优势函数GAE：核心思想是通过时间差分（TD）误差的加权和，估计优势函数。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="815" height="317" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766028477-image.png" alt="" class="wp-image-1938" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766028477-image.png 815w, https://bithao.com.cn/wp-content/uploads/2025/12/1766028477-image-300x117.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766028477-image-768x299.png 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="357" height="50" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766028834-image.png" alt="" class="wp-image-1939" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766028834-image.png 357w, https://bithao.com.cn/wp-content/uploads/2025/12/1766028834-image-300x42.png 300w" sizes="auto, (max-width: 357px) 100vw, 357px" /></figure>



<ul class="wp-block-list">
<li><math data-latex="γ"><semantics><mi>γ</mi><annotation encoding="application/x-tex">γ</annotation></semantics></math>（折扣因子）：<math data-latex="γ"><semantics><mi>γ</mi><annotation encoding="application/x-tex">γ</annotation></semantics></math> 越小，智能体越关注即时奖励（短视）；<math data-latex="γ"><semantics><mi>γ</mi><annotation encoding="application/x-tex">γ</annotation></semantics></math> 越大，智能体越考虑长期收益（但可能导致训练不稳定）。</li>



<li><math data-latex="λ"><semantics><mi>λ</mi><annotation encoding="application/x-tex">λ</annotation></semantics></math>（GAE权衡参数）：<math data-latex="λ=0"><semantics><mrow><mi>λ</mi><mo>=</mo><mn>0</mn></mrow><annotation encoding="application/x-tex">λ=0</annotation></semantics></math>，仅使用单步TD误差（低方差，高偏差），等价于原始策略梯度；<math data-latex="λ=1"><semantics><mrow><mi>λ</mi><mo>=</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">λ=1</annotation></semantics></math>：使用无限步MC误差（高方差，低偏差），接近蒙特卡洛估计；</li>
</ul>



<p class="wp-block-paragraph">2. 构建带 KL 惩罚的目标函数进行策略更新</p>



<ul class="wp-block-list">
<li>KL散度定义：它衡量的是<strong>同一个随机变量X的两个概率分布P和Q之间的差异</strong>。注意，它衡量的是用分布Q来近似分布P时所损失的信息量。从信息论的角度解释，KL散度 = 交叉熵 - 信息熵。</li>
</ul>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="303" height="55" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766030790-image.png" alt="" class="wp-image-1941" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766030790-image.png 303w, https://bithao.com.cn/wp-content/uploads/2025/12/1766030790-image-300x54.png 300w" sizes="auto, (max-width: 303px) 100vw, 303px" /></figure>
</div></div>



<div class="wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow"><div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" width="277" height="29" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766030822-image.png" alt="" class="wp-image-1943" style="width:277px;height:auto"/></figure>
</div></div>
</div>



<ul class="wp-block-list">
<li>KL惩罚项：策略模型和参考模型之间的KL散度来正则化，有四种。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="835" height="625" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766031263-image.png" alt="" class="wp-image-1944" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766031263-image.png 835w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031263-image-300x225.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031263-image-768x575.png 768w" sizes="auto, (max-width: 835px) 100vw, 835px" /></figure>



<ul class="wp-block-list">
<li><strong>PPO使用K1作为惩罚项加入奖励中；GRPO使用K3作为惩罚项直接加到损失中。</strong>GRPO目标是省去Critic网络，直接用Reward的统计量（均值和标准差）来替代优势函数，简化计算。</li>
</ul>



<h2 class="wp-block-heading">3. 模型结构</h2>



<p class="wp-block-paragraph">1. GRPO模型结构：Policy Model-&gt;Reference Model+Reward Model-&gt;Group Computation</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="521" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-1024x521.png" alt="" class="wp-image-1945" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-1024x521.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-300x153.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image-768x391.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766031414-image.png 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">2. Policy Loss：</p>



<ul class="wp-block-list">
<li>PPO：剪裁后的替代目标函数<br><br>在奖励中加入 KL 惩罚项<br></li>



<li>GRPO：剪裁后的替代目标函数+策略模型和参考模型之间的 KL 散度来正则化<br><br>优势函数估计<br></li>
</ul>



<p class="wp-block-paragraph">3. Reference Model：基准模型，用于防止训练过程中模型过度偏移原始分布，确保稳定性。</p>



<p class="wp-block-paragraph">4. Reward Model：</p>



<ul class="wp-block-list">
<li>最常见的Reward Model有两种：(i) Outcome Reward Model (ORM)：这种模型关注的是最终结果的质量，即模型生成的输出是否满足目标要求。ORM通过对生成的最终答案进行评分，来评估模型的表现。(ii) Process Reward Model (PRM)：与ORM不同，PRM不仅仅关注最终答案，还对模型的推理过程进行评分。PRM在生成答案的过程中逐步激励或惩罚模型，引导模型朝着更可解释、更稳定的推理路径发展。</li>



<li>论文<a href="https://arxiv.org/abs/2504.02495" target="_blank"  rel="nofollow" >arxiv.org</a>区分了三种奖励生成范式（Reward Generation Paradigms）主要方法：标量、半标量和生成式。(a) 标量方法为给定的查询和响应分配标量值。(标量值是一个单一的数值，通常用来表示某种评价或奖励。)(b) 半标量方法生成文本判断，称为“批评”，以及标量奖励值。(批评是一种更详细的反馈，以文本形式呈现。)(c) 生成方法只生成批评作为文本奖励，可以从中提取奖励值。评分模式 (Scoring Patterns) 主要有两种：(i) 点式 (Pointwise)：这种方法独立地为每一个给定的回复分配一个分数。它可以接受单个或多个回复作为输入，并为每个回复都给出一个评估。(ii) 成对 (Pairwise)：这种方法主要考虑两个回复之间的相对偏好。模型通常会判断在给定的两个回复中，哪一个更好。虽然这种方法可以扩展到处理多个回复，但通常需要额外的技术。</li>



<li>3种奖励生成范式+2种评分模式组成5种Reward Model(a) 标量 (Scalar) + (i) 点式 (Pointwise) - 代表方法：Bradley-Terry(a) 标量 (Scalar) + (ii) 成对 (Pairwise) - 代表方法：PairRM(b) 半标量 (Semi-Scalar) + (i) 点式 (Pointwise) - 代表方法：CLoud(b)/(c) 生成式 (Generative) + (ii) 成对 (Pairwise) - 代表方法：LLM-as-a-Judge / TokenProb(c) 生成式 (Generative) + (i) 点式 (Pointwise) - 代表方法：GRM</li>
</ul>



<p class="wp-block-paragraph">DeepSeek R1 Reward Model由准确性奖励（Accuracy rewards）和格式奖励（Format rewards）组成。</p>



<ul class="wp-block-list">
<li>Accuracy rewards：评估模型的回复是否准确。基于规则的。</li>



<li>Format rewards：强制模型将思考过程放在'&lt;think&gt;'和'&lt;/think&gt;'之间。</li>
</ul>



<p class="wp-block-paragraph">DeepSeek 生成式奖励模型（GRM）将自原则批评调整（SPCT）用于逐点GRMs，SPCT 由两个阶段组成：<strong>拒绝性微调（</strong>RFT<strong>）</strong>，作为冷启动，以及<strong>基于规则的在线RL</strong>，通过推进生成的原则实现强化通用奖励的生成。SPCT也在GRM中培养这些行为，以实现推理时间缩放。</p>



<ul class="wp-block-list">
<li>拒绝性微调：核心理念是使 GRM 能够以正确的格式并针对各种输入类型生成<strong>原则（Principles）</strong>和<strong>评论（Critiques）</strong>。（通过在微调过程中主动过滤掉低质量或无信息量的训练数据来提高GRM的质量和可靠性。）点式 GRM，对于每个查询和相应的响应，都要进行 NRFT 次采样。以生成可能的轨迹 ？{Principles, Critiques, Raw_Reward}剔除预测奖励（Predicted Reward）与真实奖励（Ground Truth）不一致的轨迹（不正确），以及查询和回复中所有 NRFT 轨迹都正确的轨迹（太容易）。</li>
</ul>



<ul class="wp-block-list">
<li>基于规则的在线RL：采用GRPO算法框架，使用基于规则的ORM</li>
</ul>



<ol class="wp-block-list">
<li>GRM根据查询x和多个回复y_i，实时生成对应的奖励Principles和Critiques。</li>



<li>Predicted Reward，与​​Ground Truth（基于规则生成）进行比对。</li>



<li>只有一个回复（n=1），模型Predicted Reward Sj等于基于规则给的Ground Truth rj，奖励为1。多个回复（n>1），模型Predicted Reward Sj’最大，刚好对应的Ground Truth也是最大的，奖励为1。其他情况，奖励为-1。</li>
</ol>



<h2 class="wp-block-heading">参考文献</h2>



<p class="wp-block-paragraph"><a href="https://zhuanlan.zhihu.com/p/21046265072" target="_blank" rel="noreferrer noopener" rel="nofollow" >详解DeepSeek-R1核心强化学习算法：GRPO</a><br><a href="https://zhuanlan.zhihu.com/p/549145459" target="_blank"  rel="nofollow" >GAE 广义优势估计</a><br><a href="https://zhuanlan.zhihu.com/p/1888641323361342824" target="_blank"  rel="nofollow" >PPO、GRPO等RL中的KL散度计算方法及实现</a><br>Guo D, Yang D, Zhang H, et al. Deepseek-r1: Incentivizing reasoning capability in llms via reinforcement learning[J]. arXiv preprint arXiv:2501.12948, 2025.<br>Shao Z, Wang P, Zhu Q, et al. Deepseekmath: Pushing the limits of mathematical reasoning in open language models[J]. arXiv preprint arXiv:2402.03300, 2024.</p>
<p><a href="https://bithao.com.cn/2025/08/07/%e5%a4%a7%e6%a8%a1%e5%9e%8b%e5%90%8e%e8%ae%ad%e7%bb%83%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95-grpoppo/">大模型后训练强化学习方法-GRPO&amp;PPO</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2025/08/07/%e5%a4%a7%e6%a8%a1%e5%9e%8b%e5%90%8e%e8%ae%ad%e7%bb%83%e5%bc%ba%e5%8c%96%e5%ad%a6%e4%b9%a0%e6%96%b9%e6%b3%95-grpoppo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>OpenWebUI配置Pipelines连接自定义Langgraph模型</title>
		<link>https://bithao.com.cn/2025/06/29/openwebui%e9%85%8d%e7%bd%aepipelines%e8%bf%9e%e6%8e%a5%e8%87%aa%e5%ae%9a%e4%b9%89langgraph%e6%a8%a1%e5%9e%8b/</link>
					<comments>https://bithao.com.cn/2025/06/29/openwebui%e9%85%8d%e7%bd%aepipelines%e8%bf%9e%e6%8e%a5%e8%87%aa%e5%ae%9a%e4%b9%89langgraph%e6%a8%a1%e5%9e%8b/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Sun, 29 Jun 2025 01:32:59 +0000</pubDate>
				<category><![CDATA[LLM]]></category>
		<category><![CDATA[Langgraph]]></category>
		<category><![CDATA[OpenWebUI]]></category>
		<category><![CDATA[Pipelines]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=1872</guid>

					<description><![CDATA[<div><img width="300" height="151" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-300x151.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-300x151.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-1024x515.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-768x386.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-1536x772.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-2048x1030.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>一、OpenWebUI 1. 安装OpenWebUI 下面内容都是通过PiP部署的，非docker。 2. 开启OpenWebUI ...</p>
<p><a href="https://bithao.com.cn/2025/06/29/openwebui%e9%85%8d%e7%bd%aepipelines%e8%bf%9e%e6%8e%a5%e8%87%aa%e5%ae%9a%e4%b9%89langgraph%e6%a8%a1%e5%9e%8b/">OpenWebUI配置Pipelines连接自定义Langgraph模型</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="151" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-300x151.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-300x151.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-1024x515.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-768x386.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-1536x772.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-2048x1030.png 2048w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<h2 class="wp-block-heading">一、OpenWebUI</h2>



<h3 class="wp-block-heading">1. 安装OpenWebUI</h3>



<p class="wp-block-paragraph">下面内容都是通过PiP部署的，非docker。</p>



<pre class="wp-block-code"><code># 官方要求python3.11
pip3 install open-webui</code></pre>



<h3 class="wp-block-heading">2. 开启OpenWebUI服务</h3>



<pre class="wp-block-code"><code>open-webui serve</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="168" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751124224-image-1024x168.png" alt="" class="wp-image-1875" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751124224-image-1024x168.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751124224-image-300x49.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751124224-image-768x126.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751124224-image-1536x252.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/06/1751124224-image-2048x337.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">开启后，在127.0.0.1:8080访问openwebui网页。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="597" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751124394-image-1024x597.png" alt="" class="wp-image-1876" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751124394-image-1024x597.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751124394-image-300x175.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751124394-image-768x448.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751124394-image-1536x896.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/06/1751124394-image-2048x1195.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">因为我的云服务只有2G，跑不了这么多服务，我把OpenWebUI部署在本地，通过Frp内网穿透实现外部访问。</p>



<h2 class="wp-block-heading">二、Pipelines</h2>



<p class="wp-block-paragraph">官方文档：<a href="https://docs.openwebui.com/pipelines/" target="_blank"  rel="nofollow" >管道 | 开放式 WebUI --- ⚡ Pipelines | Open WebUI</a></p>



<h3 class="wp-block-heading">1. <strong>克隆 Pipelines 存储库：</strong></h3>



<pre class="wp-block-code"><code>git clone https://github.com/open-webui/pipelines.git
cd pipelines</code></pre>



<h3 class="wp-block-heading">2. <strong>安装所需的依赖项：</strong></h3>



<pre class="wp-block-code"><code>pip install -r requirements.txt</code></pre>



<h3 class="wp-block-heading">3. <strong>启动 Pipelines 服务器</strong></h3>



<pre class="wp-block-code"><code>sh ./start.sh
# 出现Linux 运行 sh 脚本有 \r 字符的问题
# 解决方法：sudo sed -i 's/\r//' test.shsudo sed -i 's/\r//' test.sh</code></pre>



<h3 class="wp-block-heading">4. 连接<strong>Pipelines 服务器</strong></h3>



<p class="wp-block-paragraph">OpenWebUI 设置-外部连接，添加 URL 设置为&nbsp;<code>http://localhost:9099</code>，将 API 密钥（默认）设置为&nbsp;<code>0p3n-w3bu!</code></p>



<p class="wp-block-paragraph">点击验证，弹出已验证服务器连接的提示，表面Pipelines启动成功。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="597" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751127351-image-1024x597.png" alt="" class="wp-image-1879" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751127351-image-1024x597.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751127351-image-300x175.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751127351-image-768x448.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751127351-image-1536x896.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/06/1751127351-image-2048x1195.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">三、Langgraph</h2>



<p class="wp-block-paragraph">上述步骤，连通OpenWebUI和Pipelines，现在需要在Pipelines中配置Langgraph。</p>



<p class="wp-block-paragraph">langgraph pipeline案例路径在：pipelines/examples/pipelines/integrations/langgraph_pipeline</p>



<p class="wp-block-paragraph">里面有两个文件：</p>



<ol class="wp-block-list">
<li>langgraph_example.py ：langgraph的程序</li>



<li>langgraph_stream_pipeline.py：提供与langgraph程序连接的数据管道，里面定义了langgraph的Pipeline类，这个文件不用改，使用的时候需要copy到pipelines/pipelines/目录下，重启pipelines服务即可加载langgraph_example模型。</li>
</ol>



<h3 class="wp-block-heading">1. langgraph_example.py</h3>



<p class="wp-block-paragraph">找到其中llm配置，改成自己的API。</p>



<pre class="wp-block-code"><code>llm = ChatOpenAI(
    model="deepseek-r1-250120",
    temperature=0.1,
    base_url='https://ark.cn-beijing.volces.com/api/v3',
    api_key='***********************************'
)</code></pre>



<p class="wp-block-paragraph">启动langgraph程序，steam里面默认是9000。</p>



<pre class="wp-block-code"><code>uvicorn langgraph_example:app --reload --port 9000 --host 127.0.0.1</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="281" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751128209-image-1024x281.png" alt="" class="wp-image-1881" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751128209-image-1024x281.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128209-image-300x82.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128209-image-768x210.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128209-image.png 1482w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">启动成功。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="182" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751128291-image-1024x182.png" alt="" class="wp-image-1882" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751128291-image-1024x182.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128291-image-300x53.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128291-image-768x136.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128291-image.png 1131w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">2. langgraph_stream_pipeline.py</h3>



<p class="wp-block-paragraph">把pipelines/examples/pipelines/integrations/langgraph_pipeline/langgraph_stream_pipeline.py复制到pipelines/pipelines/下。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="424" height="387" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751128397-image.png" alt="" class="wp-image-1883" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751128397-image.png 424w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128397-image-300x274.png 300w" sizes="auto, (max-width: 424px) 100vw, 424px" /></figure>
</div>


<p class="wp-block-paragraph">重启Pipelines，自动加载Pipelines/Pipelines/下的所有module，加载成功。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="177" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751128496-image-1024x177.png" alt="" class="wp-image-1884" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751128496-image-1024x177.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128496-image-300x52.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128496-image-768x133.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128496-image.png 1131w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">并产生一个新的文件夹langgraph_stream_pipeline</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="424" height="426" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751128627-image.png" alt="" class="wp-image-1885" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751128627-image.png 424w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128627-image-300x300.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751128627-image-150x150.png 150w" sizes="auto, (max-width: 424px) 100vw, 424px" /></figure>
</div>


<h2 class="wp-block-heading">四、Frp</h2>



<p class="wp-block-paragraph"><a href="https://github.com/fatedier/frp/releases" target="_blank"  rel="nofollow" >Releases · fatedier/frp</a></p>



<p class="wp-block-paragraph">根据系统内核选择相应的frp</p>



<pre class="wp-block-code"><code># linux查看内核 x86_64, AMD64, i386-&gt;AMD | aarch64, arm64, ARM-&gt;​​ARM​
uname -m
# windows查看内核，cmd
echo %PROCESSOR_ARCHITECTURE%</code></pre>



<h3 class="wp-block-heading">1. 服务端</h3>



<p class="wp-block-paragraph">frps配置，还可以配置http服务等等</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="475" height="110" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751129017-image.png" alt="" class="wp-image-1887" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751129017-image.png 475w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129017-image-300x69.png 300w" sizes="auto, (max-width: 475px) 100vw, 475px" /></figure>
</div>


<p class="wp-block-paragraph">启动frps</p>



<pre class="wp-block-code"><code>./frps -c frps.toml</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="339" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751129141-image-1024x339.png" alt="" class="wp-image-1888" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751129141-image-1024x339.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129141-image-300x99.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129141-image-768x254.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129141-image.png 1131w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">2. 客户端</h3>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="427" height="312" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751129287-image.png" alt="" class="wp-image-1890" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751129287-image.png 427w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129287-image-300x219.png 300w" sizes="auto, (max-width: 427px) 100vw, 427px" /></figure>
</div>


<p class="wp-block-paragraph">启动frpc</p>



<pre class="wp-block-code"><code>frpc -c frpc.toml</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="139" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751129192-image-1024x139.png" alt="" class="wp-image-1889" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751129192-image-1024x139.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129192-image-300x41.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129192-image-768x105.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129192-image.png 1440w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">在服务器端反向代理6000端口，就可以实现外部访问了。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="646" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751129365-image-1024x646.png" alt="" class="wp-image-1891" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751129365-image-1024x646.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129365-image-300x189.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129365-image-768x485.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129365-image-1536x970.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/06/1751129365-image-2048x1293.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">五、效果</h2>



<p class="wp-block-paragraph">可以自定义langgraph实现更强的功能。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="515" src="https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-1024x515.png" alt="" class="wp-image-1892" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-1024x515.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-300x151.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-768x386.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-1536x772.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/06/1751159463-a1cf6faf2bc3f078e61a5723e98a69c-2048x1030.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



如果您觉得内容有用，扫码👉<i class="fa-solid fa-piggy-bank fa-sm"></i>支持一下。
<p><a href="https://bithao.com.cn/2025/06/29/openwebui%e9%85%8d%e7%bd%aepipelines%e8%bf%9e%e6%8e%a5%e8%87%aa%e5%ae%9a%e4%b9%89langgraph%e6%a8%a1%e5%9e%8b/">OpenWebUI配置Pipelines连接自定义Langgraph模型</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2025/06/29/openwebui%e9%85%8d%e7%bd%aepipelines%e8%bf%9e%e6%8e%a5%e8%87%aa%e5%ae%9a%e4%b9%89langgraph%e6%a8%a1%e5%9e%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>华为乾崑智能汽车解决方案-学习</title>
		<link>https://bithao.com.cn/2025/06/02/%e5%8d%8e%e4%b8%ba%e4%b9%be%e5%b4%91%e6%99%ba%e8%83%bd%e6%b1%bd%e8%bd%a6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88-%e5%ad%a6%e4%b9%a0/</link>
					<comments>https://bithao.com.cn/2025/06/02/%e5%8d%8e%e4%b8%ba%e4%b9%be%e5%b4%91%e6%99%ba%e8%83%bd%e6%b1%bd%e8%bd%a6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88-%e5%ad%a6%e4%b9%a0/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Mon, 02 Jun 2025 14:24:28 +0000</pubDate>
				<category><![CDATA[7788(其他)]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=1786</guid>

					<description><![CDATA[<div><img width="300" height="141" src="https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image-300x141.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image-300x141.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image-768x360.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image.png 790w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>1 多模态数据融合 模态表示是将不同感官或交互方式的数据（如文本、图像、声音等）转换为计算机可理解和处理的形式，以便进行后续的计算 ...</p>
<p><a href="https://bithao.com.cn/2025/06/02/%e5%8d%8e%e4%b8%ba%e4%b9%be%e5%b4%91%e6%99%ba%e8%83%bd%e6%b1%bd%e8%bd%a6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88-%e5%ad%a6%e4%b9%a0/">华为乾崑智能汽车解决方案-学习</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="141" src="https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image-300x141.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image-300x141.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image-768x360.png 768w, https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image.png 790w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<h2 class="wp-block-heading">1 多模态数据融合</h2>



<p class="wp-block-paragraph">模态表示是将不同感官或交互方式的数据（如文本、图像、声音等）转换为计算机可理解和处理的形式，以便进行后续的计算、分析和融合。多模态融合能够充分利用不同模态之间的互补性，它将抽取自不同模态的信息整合成一个稳定的多模态表征。从数据处理的层次角度将多模态融合分为数据级融合、特征级融合和目标级融合。</p>



<ul class="wp-block-list">
<li>（a）数据级融合，也称为像素级融合或原始数据融合，是在最底层的数据级别上进行融合。这种融合方式通常发生在数据预处理阶段，即将来自不同模态的原始数据直接合并或叠加在一起，形成一个新的数据集。</li>



<li>（b）特征级融合是在特征提取之后、决策之前进行的融合。不同模态的数据首先被分别处理，提取出各自的特征表示，然后将这些特征表示在某一特征层上进行融合。</li>



<li>（c）目标级融合，也称为决策级融合或后期融合，是在各个单模态模型分别做出决策之后进行的融合。每个模态的模型首先独立地处理数据并给出自己的预测结果（如分类标签、回归值等），然后将这些预测结果进行整合以得到最终的决策结果。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="568" src="https://bithao.com.cn/wp-content/uploads/2025/06/1748873886-image.png" alt="" class="wp-image-1788" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1748873886-image.png 722w, https://bithao.com.cn/wp-content/uploads/2025/06/1748873886-image-300x236.png 300w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">多模态人工智能（Multimodal Artificial Intelligence）涉及各种类型的数据（如图像、文本或从不同传感器收集的数据）、特征工程（如提取、组合/融合）和决策（如多数票）。随着架构越来越复杂，多模态神经网络可以将特征提取、特征融合和决策过程整合到一个模型中。这些过程之间的界限越来越模糊。[1]提出了一种新的细粒度分类法，将最先进的（SOTA）模型分为五类：编码器-解码器方法、注意机制方法、图神经网络方法（GNN）、生成神经网络方法（GenNN）和其他基于约束的方法。</p>



<h2 class="wp-block-heading">2 华为智驾系统ADS</h2>



<p class="wp-block-paragraph">华为ADS采用"激光雷达（Lidar）+毫米波雷达（Radar）+视觉摄像头（Camera）+超声波传感器（IMU）"的多模态融合方案。决策层，基于深度学习的混合决策模型，融合规则驱动与数据驱动方法。</p>



<p class="wp-block-paragraph">ADS3.0架构仅车端，采用端到端大模型，其中感知部分使用GOD（通用障碍物识别）大感知网络，而决策规划部分通过PDP（预测-决策-规划）网络来实现，同时添加本能安全网络提升表现。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="790" height="370" src="https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image.png" alt="" class="wp-image-1789" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image.png 790w, https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image-300x141.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1748873999-image-768x360.png 768w" sizes="auto, (max-width: 790px) 100vw, 790px" /></figure>
</div>


<p class="wp-block-paragraph">ADS4架构增加云端的世界引擎，难例扩散生成模型，安全强化学习。车端为全模态感知、MoE混合专家模型。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="865" height="244" src="https://bithao.com.cn/wp-content/uploads/2025/06/1748874053-image.png" alt="" class="wp-image-1791" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1748874053-image.png 865w, https://bithao.com.cn/wp-content/uploads/2025/06/1748874053-image-300x85.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1748874053-image-768x217.png 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /></figure>



<p class="wp-block-paragraph">Tokenizer 是一种将原始数据（如文字、图像或视频）转化为模型可以处理的基础单位（即 Token）的工具。Token是否能够代表原始数据的含义，直接影响模型的输入质量和后续处理效率。</p>



<ul class="wp-block-list">
<li>文字由于其离散性，主要以基于词表的方法构建Tokenizer，因此变体较少。</li>



<li>图像或者视频没有类似文字的“离散语义单位”，需要通过人工设计或模型提取来划分为 token 表示。主要代表模型：VIT（Vision Transformer）。</li>
</ul>



<h2 class="wp-block-heading">3 华为鸿蒙座舱</h2>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="865" height="348" src="https://bithao.com.cn/wp-content/uploads/2025/06/1748874174-image.png" alt="" class="wp-image-1792" srcset="https://bithao.com.cn/wp-content/uploads/2025/06/1748874174-image.png 865w, https://bithao.com.cn/wp-content/uploads/2025/06/1748874174-image-300x121.png 300w, https://bithao.com.cn/wp-content/uploads/2025/06/1748874174-image-768x309.png 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /></figure>



<h2 class="wp-block-heading">参考</h2>



<p class="wp-block-paragraph"><a href="https://blog.csdn.net/star_nwe/article/details/143416379" target="_blank"  rel="nofollow" ><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">一文彻底搞懂多模态：模态表示、多模态融合、跨模态对齐-CSDN博客</mark></a><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color"><br></mark></strong><a href="https://auto.huawei.com/cn/" target="_blank"  rel="nofollow" ><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">华为乾崑智能汽车解决方案</mark></a><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color"><br></mark></strong><a href="https://zhuanlan.zhihu.com/p/5723467791" target="_blank"  rel="nofollow" ><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">华为乾崑ADS1.0到4.0全面梳理，D5激光雷达2025 年将发布 - 知乎</mark></a><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color"><br></mark></strong><a href="https://zhuanlan.zhihu.com/p/20152349985" target="_blank"  rel="nofollow" ><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">多模态Tokenizer总结 - 知乎</mark></a><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color"><br></mark></strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">[1] </mark><a><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">Fei Zhao, Chengcui Zhang, and Baocheng Geng. 2024. Deep Multimodal Data Fusion. ACM Comput. Surv. 56, 9, Article 216 (September 2024), 36 pages. https://doi.org/10.1145/3649447</mark></a></p>
<p><a href="https://bithao.com.cn/2025/06/02/%e5%8d%8e%e4%b8%ba%e4%b9%be%e5%b4%91%e6%99%ba%e8%83%bd%e6%b1%bd%e8%bd%a6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88-%e5%ad%a6%e4%b9%a0/">华为乾崑智能汽车解决方案-学习</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2025/06/02/%e5%8d%8e%e4%b8%ba%e4%b9%be%e5%b4%91%e6%99%ba%e8%83%bd%e6%b1%bd%e8%bd%a6%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88-%e5%ad%a6%e4%b9%a0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Yolov5实时检测CS2中警和匪</title>
		<link>https://bithao.com.cn/2025/05/31/yolov5%e5%ae%9e%e6%97%b6%e6%a3%80%e6%b5%8bcs2%e4%b8%ad%e8%ad%a6%e5%92%8c%e5%8c%aa/</link>
					<comments>https://bithao.com.cn/2025/05/31/yolov5%e5%ae%9e%e6%97%b6%e6%a3%80%e6%b5%8bcs2%e4%b8%ad%e8%ad%a6%e5%92%8c%e5%8c%aa/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Sat, 31 May 2025 12:01:43 +0000</pubDate>
				<category><![CDATA[DeepLearn(深度学习)]]></category>
		<category><![CDATA[CS2]]></category>
		<category><![CDATA[Yolov5]]></category>
		<category><![CDATA[目标检测]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=1722</guid>

					<description><![CDATA[<div><img width="300" height="172" src="https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-300x172.jpg" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-300x172.jpg 300w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-1024x587.jpg 1024w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-768x440.jpg 768w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-1536x880.jpg 1536w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>好久没更新了，这次借国科大深度学习作业来更新一下，挺有意思的。 1 模型训练 1.1 图像数据获取 要想做自己的目标检测，得找相关 ...</p>
<p><a href="https://bithao.com.cn/2025/05/31/yolov5%e5%ae%9e%e6%97%b6%e6%a3%80%e6%b5%8bcs2%e4%b8%ad%e8%ad%a6%e5%92%8c%e5%8c%aa/">Yolov5实时检测CS2中警和匪</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="172" src="https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-300x172.jpg" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-300x172.jpg 300w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-1024x587.jpg 1024w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-768x440.jpg 768w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-1536x880.jpg 1536w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p class="wp-block-paragraph">好久没更新了，这次借国科大深度学习作业来更新一下，挺有意思的。</p>



<h2 class="wp-block-heading">1 模型训练</h2>



<h3 class="wp-block-heading">1.1 图像数据获取</h3>



<p class="wp-block-paragraph">要想做自己的目标检测，得找相关的数据集，可以自己采集和标注，也可以找开源的，这里我找了个开源的CS2警匪标注数据。</p>



<p class="wp-block-paragraph">CS2警匪标注数据<a href="https://github.com/ZeeChono/Yolov8-CS2-detection/tree/main/data" target="_blank"  rel="nofollow" ><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-luminous-vivid-orange-color">Yolov8-CS2-detection/data at main · ZeeChono/Yolov8-CS2-detection</mark></a></p>



<p class="wp-block-paragraph">新建一个数据集文件夹dataset，把images和labels放到dataset里。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="816" height="384" src="https://bithao.com.cn/wp-content/uploads/2025/05/1748683590-image.png" alt="" class="wp-image-1724" srcset="https://bithao.com.cn/wp-content/uploads/2025/05/1748683590-image.png 816w, https://bithao.com.cn/wp-content/uploads/2025/05/1748683590-image-300x141.png 300w, https://bithao.com.cn/wp-content/uploads/2025/05/1748683590-image-768x361.png 768w" sizes="auto, (max-width: 816px) 100vw, 816px" /></figure>
</div>


<h3 class="wp-block-heading">1.2 配置训练参数</h3>



<p class="wp-block-paragraph">数据集配置文件cs2.yaml</p>



<ul class="wp-block-list">
<li>修改path、train、val、test的目录路径为自定义数据集路径</li>



<li>类别为CT、T、CTh、Th</li>
</ul>



<pre class="wp-block-code"><code># Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# COCO128 dataset https://www.kaggle.com/datasets/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Example usage: python train.py --data coco128.yaml
# parent
# ├── yolov5
# └── datasets
#     └── coco128  ← downloads here (7 MB)

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: &#91;path/to/imgs1, path/to/imgs2, ..]
path: ./datasets # dataset root dir
train: images/train # train images (relative to 'path') 128 images
val: images/val # val images (relative to 'path') 128 images
test: # test images (optional)

# Classes
names:
  0: CT
  1: T
  2: CTh
  3: Th

# Download script/URL (optional)
#download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco128.zip</code></pre>



<p class="wp-block-paragraph">模型配置文件yolov5m_CS2.yaml</p>



<p class="wp-block-paragraph">在models目录下，拷贝yolov5m.yaml为自定义，修改</p>



<ul class="wp-block-list">
<li>nc改为4</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="631" height="385" src="https://bithao.com.cn/wp-content/uploads/2025/05/1748684327-image.png" alt="" class="wp-image-1726" srcset="https://bithao.com.cn/wp-content/uploads/2025/05/1748684327-image.png 631w, https://bithao.com.cn/wp-content/uploads/2025/05/1748684327-image-300x183.png 300w" sizes="auto, (max-width: 631px) 100vw, 631px" /></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="740" height="572" src="https://bithao.com.cn/wp-content/uploads/2025/05/1748684489-image.png" alt="" class="wp-image-1727" srcset="https://bithao.com.cn/wp-content/uploads/2025/05/1748684489-image.png 740w, https://bithao.com.cn/wp-content/uploads/2025/05/1748684489-image-300x232.png 300w" sizes="auto, (max-width: 740px) 100vw, 740px" /></figure>
</div>


<h3 class="wp-block-heading">1.3 训练</h3>



<pre class="wp-block-code"><code>python train.py --cfg models/yolov5m_CS2.yaml --data datasets/cs2.yaml --weights yolov5m6.pt --epoch 150 --batch-size 32</code></pre>



<p class="wp-block-paragraph">我用的北京超算云平台，pytorch环境配置</p>



<pre class="wp-block-code"><code># 创建虚拟环境
conda create -n py39 python=3.9
# 激活/退出
conda activate text
conda deactivate text
# 设置源
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 下载依赖包
pip install -r requirements.txt</code></pre>



<p class="wp-block-paragraph">任务脚本run.sh</p>



<pre class="wp-block-code"><code>#!/bin/bash

module load anaconda/2020.11
module load cuda/11.7
source activate py39dlywh

python train.py --cfg models/yolov5m_CS2.yaml --data datasets/cs2.yaml --weights yolov5m6.pt --epoch 150 --batch-size 32</code></pre>



<p class="wp-block-paragraph">提交任务</p>



<pre class="wp-block-code"><code>sbatch --gpus=1 ./run.sh</code></pre>



<p class="wp-block-paragraph">查看日志</p>



<pre class="wp-block-code"><code>tail -f slurm-&#91;id].out</code></pre>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="447" src="https://bithao.com.cn/wp-content/uploads/2025/05/1748684917-cd39a9b561ec74c8c3b9b6654040709-1024x447.png" alt="" class="wp-image-1728" srcset="https://bithao.com.cn/wp-content/uploads/2025/05/1748684917-cd39a9b561ec74c8c3b9b6654040709-1024x447.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/05/1748684917-cd39a9b561ec74c8c3b9b6654040709-300x131.png 300w, https://bithao.com.cn/wp-content/uploads/2025/05/1748684917-cd39a9b561ec74c8c3b9b6654040709-768x336.png 768w, https://bithao.com.cn/wp-content/uploads/2025/05/1748684917-cd39a9b561ec74c8c3b9b6654040709.png 1245w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">训练结果</p>



<p class="wp-block-paragraph">run/train/exp最后一个，最好的模型权重weight/best.pt</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="241" height="403" src="https://bithao.com.cn/wp-content/uploads/2025/05/1748684999-image.png" alt="" class="wp-image-1729" srcset="https://bithao.com.cn/wp-content/uploads/2025/05/1748684999-image.png 241w, https://bithao.com.cn/wp-content/uploads/2025/05/1748684999-image-179x300.png 179w" sizes="auto, (max-width: 241px) 100vw, 241px" /></figure>
</div>


<p class="wp-block-paragraph">验证集效果</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="587" src="https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-1024x587.jpg" alt="" class="wp-image-1730" srcset="https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-1024x587.jpg 1024w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-300x172.jpg 300w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-768x440.jpg 768w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred-1536x880.jpg 1536w, https://bithao.com.cn/wp-content/uploads/2025/05/1748685073-val_batch0_pred.jpg 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h2 class="wp-block-heading">2 屏幕实时检测</h2>



<h3 class="wp-block-heading">2.1 思路</h3>



<ul class="wp-block-list">
<li>使用 mss 实时抓屏</li>



<li>使用 YOLOv5 做目标检测</li>



<li>使用 PyQt5 创建一个透明全屏窗口（无边框、置顶、不干扰鼠标）</li>



<li>每帧更新绘图（检测框和标签），实现自动刷新、不残留</li>
</ul>



<pre class="wp-block-code"><code># screendetect.py

import sys
import cv2
import torch
import numpy as np
import mss
import time
import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath

from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QPainter, QColor, QPen, QFont
from PyQt5.QtCore import Qt, QTimer

# === 模型路径 ===
MODEL_PATH = 'runs/train/exp20/weights/best.pt'

# === YOLOv5 设置 ===
from models.common import DetectMultiBackend
from utils.general import non_max_suppression, scale_boxes
from utils.torch_utils import select_device
from utils.augmentations import letterbox

# === 初始化模型 ===
device = select_device('')
model = DetectMultiBackend(MODEL_PATH, device=device)
stride, names = model.stride, model.names
imgsz = (640, 640)

# === 屏幕区域 ===
monitor = {"top": 0, "left": 0, "width": 1920, "height": 1080}
sct = mss.mss()

# === 检测框数据 ===
detections = &#91;]  # 每帧更新


# === PyQt5 覆盖窗口类 ===
class Overlay(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('Screen Overlay')
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.Tool)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.setAttribute(Qt.WA_TransparentForMouseEvents)  # 鼠标穿透

        screen_geometry = QApplication.desktop().screenGeometry()
        self.setGeometry(screen_geometry)

        # 定时器：每 30ms 更新一次
        self.timer = QTimer()
        self.timer.timeout.connect(self.update_overlay)
        self.timer.start(30)

    def update_overlay(self):
        self.update()  # 触发 paintEvent 重绘

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        # 设置字体
        font = QFont()
        font.setPointSize(10)
        painter.setFont(font)

        # 绘制所有检测框
        for det in detections:
            x1, y1, x2, y2, label = det
            pen = QPen(QColor(0, 255, 0), 2)
            painter.setPen(pen)
            painter.drawRect(x1, y1, x2 - x1, y2 - y1)

            painter.drawText(x1, y1 - 5, label)

        painter.end()


# === 后台检测循环 ===
def detect_loop():
    global detections

    while True:
        screenshot = np.array(sct.grab(monitor))&#91;:, :, :3]
        im0 = np.ascontiguousarray(screenshot)

        img = letterbox(im0, imgsz, stride=stride, auto=True)&#91;0]
        img = img.transpose((2, 0, 1))  # HWC to CHW
        img = np.ascontiguousarray(img)
        img = torch.from_numpy(img).to(device)
        img = img.float() / 255.0
        if img.ndimension() == 3:
            img = img.unsqueeze(0)

        pred = model(img, augment=False, visualize=False)
        pred = non_max_suppression(pred, conf_thres=0.4, iou_thres=0.45)

        new_detections = &#91;]
        for det in pred:
            if len(det):
                det&#91;:, :4] = scale_boxes(img.shape&#91;2:], det&#91;:, :4], im0.shape).round()
                for *xyxy, conf, cls in det:
                    label = f'{names&#91;int(cls)]} {conf:.2f}'
                    x1, y1, x2, y2 = map(int, xyxy)
                    new_detections.append((x1, y1, x2, y2, label))

        detections = new_detections
        time.sleep(0.03)  # 降低 CPU 占用


# === 主入口 ===
if __name__ == '__main__':
    from threading import Thread

    # 后台启动检测线程
    thread = Thread(target=detect_loop, daemon=True)
    thread.start()

    # 启动 PyQt5 覆盖窗口
    app = QApplication(sys.argv)
    overlay = Overlay()
    overlay.show()
    sys.exit(app.exec_())
</code></pre>



<h3 class="wp-block-heading">2.2 效果</h3>



<p class="wp-block-paragraph">声明：仅可用于个人学习、研究、离线演示等合法场景，不能用于破坏游戏公平性。</p>



<figure class="wp-block-video"><video height="720" style="aspect-ratio: 1280 / 720;" width="1280" controls src="https://bithao.com.cn/wp-content/uploads/2025/05/1748692135-88b6d6c83b6eccc093c5b86a9593b7cc.mp4"></video></figure>
<p><a href="https://bithao.com.cn/2025/05/31/yolov5%e5%ae%9e%e6%97%b6%e6%a3%80%e6%b5%8bcs2%e4%b8%ad%e8%ad%a6%e5%92%8c%e5%8c%aa/">Yolov5实时检测CS2中警和匪</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2025/05/31/yolov5%e5%ae%9e%e6%97%b6%e6%a3%80%e6%b5%8bcs2%e4%b8%ad%e8%ad%a6%e5%92%8c%e5%8c%aa/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://bithao.com.cn/wp-content/uploads/2025/05/1748692135-88b6d6c83b6eccc093c5b86a9593b7cc.mp4" length="5630636" type="video/mp4" />

			</item>
		<item>
		<title>基于LSTM与股吧情感分析的A股走势预测研究与实践</title>
		<link>https://bithao.com.cn/2025/01/15/%e5%9f%ba%e4%ba%8elstm%e4%b8%8e%e8%82%a1%e5%90%a7%e6%83%85%e6%84%9f%e5%88%86%e6%9e%90%e7%9a%84a%e8%82%a1%e8%b5%b0%e5%8a%bf%e9%a2%84%e6%b5%8b%e7%a0%94%e7%a9%b6%e4%b8%8e%e5%ae%9e%e8%b7%b5/</link>
					<comments>https://bithao.com.cn/2025/01/15/%e5%9f%ba%e4%ba%8elstm%e4%b8%8e%e8%82%a1%e5%90%a7%e6%83%85%e6%84%9f%e5%88%86%e6%9e%90%e7%9a%84a%e8%82%a1%e8%b5%b0%e5%8a%bf%e9%a2%84%e6%b5%8b%e7%a0%94%e7%a9%b6%e4%b8%8e%e5%ae%9e%e8%b7%b5/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Wed, 15 Jan 2025 02:44:07 +0000</pubDate>
				<category><![CDATA[DeepLearn(深度学习)]]></category>
		<category><![CDATA[A股]]></category>
		<category><![CDATA[LSTM]]></category>
		<category><![CDATA[情感分析]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=1953</guid>

					<description><![CDATA[<div><img width="300" height="225" src="https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image-300x225.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image-300x225.png 300w, https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image.png 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>一、引言 1.1 研究背景与意义 股票市场作为经济的重要组成部分，其走势的准确预测一直是投资者、金融机构和研究者关注的焦点。股票价 ...</p>
<p><a href="https://bithao.com.cn/2025/01/15/%e5%9f%ba%e4%ba%8elstm%e4%b8%8e%e8%82%a1%e5%90%a7%e6%83%85%e6%84%9f%e5%88%86%e6%9e%90%e7%9a%84a%e8%82%a1%e8%b5%b0%e5%8a%bf%e9%a2%84%e6%b5%8b%e7%a0%94%e7%a9%b6%e4%b8%8e%e5%ae%9e%e8%b7%b5/">基于LSTM与股吧情感分析的A股走势预测研究与实践</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="225" src="https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image-300x225.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image-300x225.png 300w, https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image.png 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<h2 class="wp-block-heading">一、引言</h2>



<h3 class="wp-block-heading">1.1 研究背景与意义</h3>



<p class="wp-block-paragraph">股票市场作为经济的重要组成部分，其走势的准确预测一直是投资者、金融机构和研究者关注的焦点。股票价格受到众多复杂因素的影响，如宏观经济状况、公司财务状况、政策法规、行业竞争以及投资者情绪等。这些因素相互交织，使得股票市场具有高度的不确定性和波动性，给股票走势预测带来了巨大的挑战。传统的股票走势预测方法主要基于基本面分析和技术分析。基本面分析通过研究宏观经济数据、公司财务报表等信息，评估股票的内在价值，从而预测其价格走势。然而，基本面分析往往需要大量的专业知识和时间精力，且对宏观经济环境的变化较为敏感。技术分析则主要通过研究股票的历史价格和成交量等数据，运用各种技术指标和图表形态，来预测股票价格的未来走势。虽然技术分析在一定程度上能够捕捉到股票价格的短期波动规律，但对于长期趋势的预测能力相对有限。</p>



<p class="wp-block-paragraph">深入研究情感分析在股票预测中的应用具有重要的理论与实践意义。一方面，从理论层面拓展了金融市场研究的边界，打破传统仅依赖基本面与技术面分析的局限，将投资者情绪这一主观因素纳入研究范畴，完善对金融市场价格形成机制的理解。另一方面，在实践中，能够为投资者提供更全面、精准的决策依据，辅助其制定科学合理的投资策略，降低投资风险，提高收益水平；同时，也有助于金融监管部门更好地把握市场情绪动态，及时察觉潜在的市场异常波动，维护金融市场的稳定与健康发展。近年来，随着互联网技术的飞速发展，社交媒体平台上涌现出了大量与股票相关的信息，如股吧中的股民讨论、分析师的评论等。这些信息中蕴含着丰富的投资者情感和市场情绪，为股票走势预测提供了新的视角。情感分析作为自然语言处理的一个重要分支，旨在通过对文本数据的分析，挖掘其中所表达的情感倾向和态度。将情感分析应用于股票市场，能够从投资者的情感角度出发，揭示市场情绪对股票价格的影响，从而为股票走势预测提供更全面的信息。本研究旨在结合LSTM（长短期记忆网络）和股吧情感分析，构建一种新的股票走势预测模型。通过对股吧文本数据进行情感分析，提取投资者的情感特征，并将其与股票的历史价格数据相结合，输入到LSTM模型中进行训练和预测。这种方法能够充分利用LSTM在处理时间序列数据方面的优势，以及情感分析所挖掘出的投资者情感信息，提高股票走势预测的准确性和可靠性。</p>



<h3 class="wp-block-heading">1.2 相关研究工作</h3>



<p class="wp-block-paragraph">在股票走势预测领域，国内外学者进行了大量的研究工作。早期的研究主要集中在基本面分析和技术分析方法上，随着机器学习和深度学习技术的发展，越来越多的学者开始尝试运用这些技术来预测股票走势。如支持向量机（SVM）、神经网络（NN）、决策树等机器学习算法在股票预测中得到了广泛应用。这些算法在一定程度上提高了预测的准确性，但对于股票市场的复杂非线性关系和长期依赖关系的处理能力有限。为了更好地处理时间序列数据中的长期依赖问题，Hochreiter和Schmidhuber于1997年提出了LSTM模型。LSTM是一种特殊的循环神经网络（RNN），它通过引入门控机制，能够有效地解决传统RNN中存在的梯度消失和梯度爆炸问题，从而在时间序列预测任务中表现出优异的性能。研究表明，LSTM在处理基于时序数据的股票预测问题时性能优于RNN和传统的机器学习算法[1]。近年来，LSTM在股票走势预测中得到了越来越多的应用。一些研究将LSTM与其他技术相结合，如卷积神经网络（CNN）、注意力机制等，进一步提高了预测的准确性。</p>



<p class="wp-block-paragraph">现有基于LSTM的股票预测模型主要通过分析文本信息的情感极性特征，如[2]使用了判断趋势是上升还是下降的方法。正面新闻往往会导致上升趋势，而负面新闻往往会导致下降趋势。将媒体新闻的情感极性与历史交易数据作为股票预测算法的输入，需要考虑的问题。财经新闻中的情感极性并不明显,大多是对客观事件的总结和报道,使得财经新闻的情感极性分析准确率并不高,影响股票走势的预测准确率。[3]提出一种基于CNN-BiLSTM多特征融合的股票走势预测模型,通过融入新闻事件类型和情感极性提高股票走势预测的准确率。一方面，采用从新闻报道中提取出客观的财经事件,如中标事件、上市事件、停牌事件等；另一方面，采用Bi-LSTM对新闻报道的情感极性进行分析，计算新闻文本的情感分值。通过预测两只个股（家电行业的格力电器和电子电器行业的中兴通讯）准确率比现有算法分别高出 11.6% 和 25.6%，表明新闻事件及其情绪取向可能导致股票价格波动。</p>



<p class="wp-block-paragraph">随着社交媒体的兴起，股吧作为投资者交流和分享信息的重要平台，其中蕴含的投资者情感信息逐渐受到关注。一些学者开始将情感分析应用于股票市场，研究投资者情感与股票价格之间的关系。如Bollen等人通过对Twitter上的情感数据进行分析，发现投资者的情感倾向与股票市场的波动之间存在一定的相关性。本文通过对东方财富股吧的帖文进行情感分析，构建股市投资者情绪指数，将LSTM和股吧股民的情感分析相结合进行A股走势预测。</p>



<h2 class="wp-block-heading">二、相关理论与技术</h2>



<h3 class="wp-block-heading">2.1 LSTM原理与优势</h3>



<h4 class="wp-block-heading">2.1.1 LSTM基本结构</h4>



<p class="wp-block-paragraph">LSTM（Long Short-Term Memory）是一种特殊的循环神经网络（RNN），专为解决长序列数据中的长期依赖问题而设计。与传统RNN不同，LSTM通过引入门控机制和细胞状态，能够有效控制信息的流动和存储，从而更好地捕捉时间序列中的长期依赖关系。LSTM的核心结构是记忆单元（Memory Cell），它由一个或多个神经元组成，负责在整个序列处理过程中保持和更新长期依赖信息。记忆单元的状态通过时间步传递，并且仅通过线性方式更新，这使得它能够避免传统RNN中梯度消失或爆炸的问题。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1241" height="827" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766113384-image-edited.png" alt="" class="wp-image-1971" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766113384-image-edited.png 1241w, https://bithao.com.cn/wp-content/uploads/2025/12/1766113384-image-edited-300x200.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766113384-image-edited-1024x682.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766113384-image-edited-768x512.png 768w" sizes="auto, (max-width: 1241px) 100vw, 1241px" /></figure>



<p class="wp-block-paragraph">在LSTM中，门控机制起着关键作用，主要包括遗忘门（Forget Gate）、输入门（Input Gate）和输出门（Output Gate）。遗忘门决定从记忆单元中丢弃哪些信息。它通过一个sigmoid函数生成一个0到1之间的值，表示每个状态值的保留程度。当遗忘门开启（激活值接近1）时，对应的记忆单元内容将被显著削弱甚至完全清除；当遗忘门关闭（激活值接近0）时，则相应信息得以保留。数学上，遗忘门的计算公式为：</p>


<p>$$<br />
f_t = \sigma(W_f \cdot [h_{t - 1}, x_t] + b_f)<br />
$$</p>



<p class="wp-block-paragraph"> 其中，$f_t$是遗忘门在时间步$t$的输出，$sigma$是sigmoid函数，$W_f$是权重矩阵，$[h_{t - 1}, x_t]$是前一时间步的隐藏状态$h_{t - 1}$和当前时间步的输入$x_t$的拼接，$b_f$是偏置项。</p>



<p class="wp-block-paragraph">当前时刻新输入信息哪些部分应被添加到记忆单元中。它由两部分构成：一个sigmoid层决定哪些值将被更新，一个tanh层生成新的候选值向量。输入门的sigmoid层和tanh层的输出相乘，得到更新后的候选值。输入门的计算公式为：</p>



<p class="wp-block-paragraph">输入门决定</p>


<p>$$<br />
i_t = \sigma(W_i \cdot [h_{t - 1}, x_t] + b_i)<br />
$$</p>


<p>$$<br />
\widetilde{C}_t = \tanh(W_c \cdot [h_{t - 1}, x_t] + b_c)<br />
$$</p>



<p class="wp-block-paragraph">其中，$i_t$是输入门在时间步$t$的输出，$\widetilde{C}_t$是候选记忆单元状态，$W_i$、$W_c$是权重矩阵，$b_i$、$b_c$是偏置项。</p>



<p class="wp-block-paragraph">记忆单元状态更新是通过遗忘门的输出和输入门的输出相加得到的。这样可以确保网络能够记住重要的长期信息，并遗忘不相关的信息。记忆单元状态更新公式为：</p>


<p>$$<br />
C_t = f_t \cdot C_{t - 1} + i_t \cdot \widetilde{C}_t<br />
$$</p>



<p class="wp-block-paragraph"> 其中，$C_t$是时间步$t$的记忆单元状态，$C_{t - 1}$是前一时间步的记忆单元状态。</p>



<p class="wp-block-paragraph">输出门决定记忆单元状态的哪一部分将被输出到隐藏状态。它通过一个sigmoid层决定哪些单元状态将被输出，然后通过tanh层生成输出状态的候选值，最后将这两部分结合起来形成最终的输出。输出门的计算公式为：</p>


<p>$$<br />
o_t = \sigma(W_o \cdot [h_{t - 1}, x_t]+ b_o)<br />
$$</p>


<p>$$<br />
h_t = o_t \cdot \tanh(C_t)<br />
$$</p>



<p class="wp-block-paragraph">其中，$o_t$是输出门在时间步$t$的输出，$h_t$是时间步$t$的隐藏状态，$W_o$是权重矩阵，$b_o$是偏置项。</p>



<h4 class="wp-block-heading">2.1.2 处理时间序列数据的能力</h4>



<p class="wp-block-paragraph">在处理时间序列数据时，LSTM能够有效捕捉数据中的长期依赖关系，这是其相较于其他模型的显著优势。传统的RNN在处理长序列数据时，由于梯度消失或爆炸问题，很难学习到远距离的依赖信息。而LSTM通过门控机制和细胞状态，能够选择性地保留和更新信息，使得重要的信息能够在长时间内传播，从而准确捕捉时间序列中的长期依赖关系。例如，在股票价格预测中，股票价格的波动往往受到过去多个时间点的多种因素影响，这些因素之间的关系可能在较长时间内保持一定的稳定性。LSTM能够通过记忆单元和门控机制，记住过去重要的价格信息、市场情况以及投资者情绪等因素，并根据当前的输入信息对这些记忆进行更新和调整，从而更准确地预测未来的股票价格走势。具体来说，遗忘门可以根据当前信息决定是否遗忘过去的某些信息，输入门可以控制新信息的输入，而输出门则决定哪些信息将被输出用于当前的预测。这种机制使得LSTM能够在处理时间序列数据时，充分利用历史信息，提高预测的准确性。</p>



<h3 class="wp-block-heading">2.2 股吧情感分析方法</h3>



<p class="wp-block-paragraph">股吧情感分析旨在从股吧中的文本数据中提取投资者的情感倾向，判断其对股票的看法是积极、消极还是中性。本实验采用snownlp库进行股吧情感分析。snownlp是一个基于Python的自然语言处理工具包，它提供了简单易用的情感分析功能。在snownlp中，情感分析是基于训练好的情感分类模型实现的。该模型通过对大量带有情感标签的文本数据进行训练，学习到文本中词语与情感倾向之间的关系。当输入一篇股吧文本时，snownlp首先对文本进行分词处理，将文本分割成一个个词语。然后，根据训练好的模型，计算每个词语的情感得分，并综合考虑整个文本中词语的情感得分，得出该文本的情感倾向。具体而言，snownlp会返回一个介于0到1之间的情感得分，得分越接近1表示文本的情感越积极，得分越接近0表示文本的情感越消极。例如，当分析一篇股吧帖子时，如果帖子中包含大量积极词汇，如"上涨" "利好" "看好"等，snownlp计算出的情感得分可能会较高，表明投资者对该股票持积极态度；反之，如果帖子中出现较多消极词汇，如"下跌" "利空" "看好"等，情感得分则会较低，反映出投资者的消极情绪。除了snownlp，文本情感分析还有其他常用技术。词袋模型（Bag-of-Words）是一种简单的文本表示方法，它将文本中的词语看作是一个无序的集合，忽略词语的顺序和语法结构。通过统计每个词语在文本中出现的频率，构建文本的特征向量，然后利用机器学习算法，如朴素贝叶斯、支持向量机等，对文本的情感进行分类。然而，词袋模型没有考虑词语之间的语义关系，可能会丢失一些重要信息。深度学习模型在情感分析中也得到了广泛应用，如循环神经网络（RNN）及其变体LSTM、门控循环单元（GRU），以及卷积神经网络（CNN）等。这些模型能够自动学习文本的特征表示，捕捉词语之间的上下文关系，从而提高情感分析的准确性。例如，基于LSTM的情感分析模型可以通过门控机制处理文本中的长距离依赖关系，更好地理解文本的语义和情感。不同的情感分析方法各有优缺点，在实际应用中需要根据具体情况选择合适的方法或结合多种方法来提高分析的准确性和可靠性。</p>



<h2 class="wp-block-heading">三、A 股市场特点及趋势分析</h2>



<h3 class="wp-block-heading">3.1 2020 - 2025 年 A 股整体走势回顾</h3>



<p class="wp-block-paragraph">在 2020 年初，受新冠疫情全球爆发的影响，A 股市场经历了短暂的大幅下跌。随后，在各国政府出台的一系列经济刺激政策下，市场逐渐企稳回升。2020 年下半年至 2021 年上半年，A 股市场呈现出结构性牛市行情，部分行业板块（如新能源、半导体等）表现强劲，带动指数上涨。2021 年下半年至 2022 年，市场面临经济增速放缓、流动性收紧等压力，整体呈现震荡下行态势。2023 年，随着国内经济复苏预期增强，市场出现一定程度的反弹，但仍受到全球经济不稳定因素的影响，波动较大。2024 年，在政策利好不断释放的背景下，市场逐步回暖，部分优质股票表现突出。到 2025 年初，市场延续了复苏的趋势，但不同板块之间的分化依然明显。</p>



<h3 class="wp-block-heading">3.2 影响 A 股市场走势的因素</h3>



<ol class="wp-block-list">
<li><strong>宏观经济因素</strong>：国内生产总值（GDP）增速、通货膨胀率、利率水平等宏观经济指标对 A 股市场走势有着重要影响。例如，GDP 增速的提高通常预示着企业盈利的增加，会推动股票价格上涨；而利率上升则会增加企业的融资成本，对股票市场形成压力。</li>



<li><strong>政策因素</strong>：货币政策和财政政策的调整会直接影响市场的资金面和企业的经营环境。宽松的货币政策会增加市场流动性，有利于股票价格上涨；积极的财政政策如加大基础设施建设投资，会带动相关行业的发展，提升企业的盈利预期。</li>



<li><strong>行业发展因素</strong>：不同行业在不同时期的发展前景和竞争格局差异较大。新兴行业如人工智能、生物医药等，由于具有较高的成长性和创新能力，往往受到市场的青睐，股票价格表现较好；而传统行业如钢铁、煤炭等，可能会受到行业周期和市场竞争的影响，股价波动较大。</li>
</ol>



<h2 class="wp-block-heading">四、实验设计</h2>



<p class="wp-block-paragraph">本实验旨在探究 2020 - 2025年期间，结合 A 股市场数据与利用 snownlp 库对股吧评论进行情感分析的结果，对股票走势预测的有效性。</p>



<h3 class="wp-block-heading">4.1 数据收集与整理</h3>



<h4 class="wp-block-heading">4.1.1 A股历史交易数据来源</h4>



<p class="wp-block-paragraph">本实验的A股历史交易数据来源于akshare金融数据接口库。akshare是一个基于Python的开源金融数据接口库，它提供了丰富的金融数据，包括股票、期货、基金、债券等市场的历史交易数据和实时行情数据。其优势在于数据获取方便、免费且数据更新较为及时。在本实验中，我们使用akshare的股票日线行情接口，获取了特定股票在一段时间内的历史交易数据，包括开盘价、收盘价、最高价、最低价、成交量和成交额等信息。具体代码如下：</p>



<pre class="wp-block-code"><code>import akshare as ak

e = {
        "code": "000001",
        "start": "20200113",
        "end": "20250114"
}
df = ak.index_zh_a_hist(symbol=e&#91;"code"], period="daily", start_date=e&#91;"start"], end_date=e&#91;"end"])</code></pre>



<p class="wp-block-paragraph">上述代码中，<code>symbol</code>参数指定了要获取数据的股票代码，<code>start_date</code>和<code>end_date</code>参数分别指定了数据的起始日期和结束日期。通过调用<code>index_zh_a_hist</code>函数，我们可以获取到该股票在指定时间范围内的日线行情数据，并将其存储在<code>df</code>数据框中。获取的数据格式如图：</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="709" height="262" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766113169-image.png" alt="" class="wp-image-1962" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766113169-image.png 709w, https://bithao.com.cn/wp-content/uploads/2025/12/1766113169-image-300x111.png 300w" sizes="auto, (max-width: 709px) 100vw, 709px" /></figure>
</div>


<h4 class="wp-block-heading">4.1.2 股吧文本数据抓取</h4>



<p class="wp-block-paragraph">股吧文本数据的抓取通过编写Python爬虫程序实现。我们使用了<code>requests</code>库和<code>BeautifulSoup</code>库来发送HTTP请求并解析网页内容。具体步骤如下：</p>



<p class="wp-block-paragraph">确定目标股吧网页的URL结构。例如，东方财富网股吧中某股票的讨论页面URL格式为<code>https://gubaf10.eastmoney.com/list,zssh000001,f.html</code>，其中<code>000001</code>为股票代码。</p>



<p class="wp-block-paragraph">发送HTTP请求获取网页内容。使用<code>requests.get()</code>函数发送请求，并检查响应状态码以确保请求成功。代码如下：</p>



<pre class="wp-block-code"><code>import requests
from bs4 import BeautifulSoup
from headfile import *

def get_comment(page_numb=1):
    """
    从股吧获取评论
    :return:    评论列表
    """
    # URL 地址
    url = "https://gubaf10.eastmoney.com/list,zssh000001,f.html" if page_numb == 1 else f"https://gubaf10.eastmoney.com/list,zssh000001,f_{page_numb}.html"
    # 请求头
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
    }
    # 发送请求
    response = requests.get(url, headers=headers)
    response.encoding = 'utf-8'  # 确保中文显示正确
    # 解析 HTML
    soup = BeautifulSoup(response.text, "html.parser")
    # 提取评论部分
    comments = soup.find("div", class_="all").find_all("div", class_="articleh")
    result = &#91;&#91;], &#91;]]
    # 遍历每条评论
    for comment in comments:
        # 提取标题
        title_div = comment.find("span", class_="l3")
        if title_div:
            title = title_div.get_text(strip=True)
            result&#91;0].append(title)
        time_div = comment.find("span", class_="l5")
        if time_div:
            time = time_div.get_text(strip=True)
            result&#91;1].append(time)
    return result

if __name__ == '__main__':
    # 2020-01-13到2025-01-13的评论
    total_pages = &#91;80, 55135]
    comments = np.array(&#91;&#91;], &#91;]])
    for i in trange(total_pages&#91;0], total_pages&#91;1]):
        comments_i = np.array(get_comment(page_numb=i))
        comments = np.hstack((comments, comments_i))
    df = pd.DataFrame(np.array(comments).T, columns=&#91;"评论", "时间"])
    print(df.head())
    df.to_csv(f"data\comments.csv")</code></pre>



<p class="wp-block-paragraph">使用<code>BeautifulSoup</code>库解析网页内容，提取所需的评论文本和发表时间。通过分析网页的HTML结构，找到包含评论和时间信息的HTML标签和类名。例如，评论内容在<code>&lt;div class="articleh"&gt;</code>标签内，发表时间在<code>&lt;span class="l5"&gt;</code>标签内。代码如下：</p>



<p class="wp-block-paragraph">为了获取更多的评论数据，需要遍历多页股吧网页。可以通过分析URL的页码参数，构造不同页码的URL并重复上述步骤。例如，第二页的URL为<code>https://gubaf10.eastmoney.com/list,zssh000001,f_2.html</code>。获取的数据格式如图：</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="450" height="264" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766113189-image.png" alt="" class="wp-image-1963" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766113189-image.png 450w, https://bithao.com.cn/wp-content/uploads/2025/12/1766113189-image-300x176.png 300w" sizes="auto, (max-width: 450px) 100vw, 450px" /></figure>
</div>


<h4 class="wp-block-heading">4.1.3 数据预处理</h4>



<p class="wp-block-paragraph"><strong>股吧文本数据处理</strong>：对抓取的股吧文本数据进行去重，为每个评论按顺序添加相应的年份。</p>



<p class="wp-block-paragraph"><strong>情感特征提取</strong>：在股吧文本数据方面，我们通过情感分析提取了情感特征。具体而言，我们为每个评论计算了情感得分，然后将每天的所有评论情感得分进行汇总，得到当天的情感特征。考虑到不同评论的重要性可能不同，我们选择了中位数作为当天情感得分的代表值。这是因为中位数能够减少极端值的影响，更稳健地反映整体的情感倾向。例如，如果某一天的评论中存在少数极端积极或消极的评论，使用中位数可以避免这些极端评论对整体情感判断的过度影响。</p>



<p class="wp-block-paragraph"><strong>数据整合</strong>：将处理后的交易数据和股吧文本数据按照时间顺序进行整合。确保每个交易日都对应有相应的股吧评论情感数据。最终形成一个包含交易数据、股吧情感数据和标签的数据集。</p>



<p class="wp-block-paragraph">通过上述方法，我们从交易数据和股吧文本数据中提取了丰富的特征，这些特征将作为模型的输入，用于训练和预测股票走势。</p>



<h3 class="wp-block-heading">4.2 模型构建</h3>



<h4 class="wp-block-heading">4.2.1 LSTM模型架构设计</h4>



<p class="wp-block-paragraph">本实验构建的LSTM模型包含以下几个主要部分：</p>



<p class="wp-block-paragraph"><strong>输入层</strong>：输入层接收经过预处理后的特征数据。输入参数包括<strong>输入特征维度</strong><code>input_size</code>，<strong>数据形状</strong><code>(batch, seq_len, input_size)</code>，<code>batch</code> 是同时处理的序列数量，可根据硬件资源和数据规模调整；<code>seq_len</code> 是时间序列的长度，取决于所处理数据的时间跨度。在本实验中，我们设置时间步长为7，即考虑过去7天的历史数据。</p>



<p class="wp-block-paragraph"><strong>LSTM层</strong>：我们使用了三层LSTM层，以增强模型对时间序列数据中复杂依赖关系的学习能力。隐藏层大小为32，LSTM层的隐藏层大小是一个重要的超参数，它决定了模型的学习能力和复杂度。通过实验和调优，我们发现这三个层数和隐藏层大小的设置能够在本实验数据集上取得较好的性能。模型代码如下：</p>



<pre class="wp-block-code"><code>class lstm(nn.Module):
    def __init__(self, input_size=8, hidden_size=32, num_layers=3, output_size=1, dropout=0, batch_first=True):
        super(lstm, self).__init__()
        # lstm的输入 #batch, seq_len, input_size
        self.hidden_size = hidden_size
        self.input_size = input_size
        self.num_layers = num_layers
        self.output_size = output_size
        self.dropout = dropout
        self.batch_first = batch_first
        self.rnn = nn.LSTM(input_size=self.input_size, hidden_size=self.hidden_size, num_layers=self.num_layers,
                           batch_first=self.batch_first, dropout=self.dropout)
        self.linear = nn.Linear(self.hidden_size, self.output_size)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        out, (hidden, cell) = self.rnn(x)
        out = self.linear(hidden&#91;-1])
        out = self.sigmoid(out)
        return out</code></pre>



<p class="wp-block-paragraph">3. <strong>全连接层</strong>：LSTM层的输出通过一个全连接层进行处理，将其映射到最终的输出维度。全连接层的作用是对LSTM层提取的特征进行进一步的整合和转换，以适应预测任务的要求。在本实验中，全连接层的输出维度为1，使用<code>nn.Linear</code>函数定义全连接层，代码如下：</p>



<pre class="wp-block-code"><code>self.linear = nn.Linear(self.hidden_size, self.output_size)</code></pre>



<p class="wp-block-paragraph"><strong>输出层</strong>：输出层采用Sigmoid激活函数，将全连接层的输出转换为0到1之间的概率值，表示股票价格上涨的可能性。如果概率值大于0.5，则预测股票价格上涨，否则预测股票价格下跌。在PyTorch中，使用<code>nn.Sigmoid</code>函数定义输出层的激活函数，代码如下：</p>



<pre class="wp-block-code"><code>def forward(self, x):
        out, (hidden, cell) = self.rnn(x)
        out = self.linear(hidden&#91;-1])
        out = self.sigmoid(out)
        return out</code></pre>



<h4 class="wp-block-heading">4.2.2 数据划分</h4>



<p class="wp-block-paragraph">我们将数据集划分为训练集、验证集和测试集，其中训练集用于训练模型，验证集用于训练时验证模型，测试集用于评估模型的性能。</p>



<pre class="wp-block-code"><code>def getData(corpusFile, sequence_length, batchSize):
    """
    获取数据
    :param corpusFile:
    :param sequence_length:
    :param batchSize:
    :return:
    """
    df, close_max, close_min = dataPreprocessing(corpusFile)  # 获取标准化后的数据和最大最小值
    # 构造X和Y
    # 根据前n天的数据，预测未来一天的收盘价(close)
    sequence = sequence_length
    X = &#91;]
    Y = &#91;]
    for i in range(df.shape&#91;0] - sequence):
        X.append(np.array(df.iloc&#91;i:(i + sequence), ].values, dtype=np.float32))
        Y.append(np.array(df.iloc&#91;(i + sequence), 0], dtype=np.float32))
    # 构建数据集划分
    total_len = len(Y)
    train_len = int(args.train_size * total_len)  # 动态训练集比例
    val_len = int(args.val_size * total_len)  # 动态验证集比例
    test_len = total_len - train_len - val_len  # 动态测试集比例

    # 划分训练集、验证集和测试集
    trainx, trainy = X&#91;:train_len], Y&#91;:train_len]
    valx, valy = X&#91;train_len:train_len + val_len], Y&#91;train_len:train_len + val_len]
    testx, testy = X&#91;train_len + val_len:], Y&#91;train_len + val_len:]

    # 创建DataLoader
    train_loader = DataLoader(dataset=Mydataset(trainx, trainy, transform=transforms.ToTensor()),
                              batch_size=batchSize, shuffle=True)
    val_loader = DataLoader(dataset=Mydataset(valx, valy),
                            batch_size=batchSize, shuffle=True)
    test_loader = DataLoader(dataset=Mydataset(testx, testy),
                             batch_size=batchSize, shuffle=False)

    return close_max, close_min, train_loader, val_loader, test_loader</code></pre>



<h4 class="wp-block-heading">4.2.3 模型训练与优化</h4>



<p class="wp-block-paragraph"><strong>优化器选择</strong>：为了训练LSTM模型，我们选择了Adam优化器。Adam优化器是一种自适应学习率的优化算法，它能够根据每个参数的梯度自适应地调整学习率，从而在训练过程中更快地收敛到最优解。Adam优化器的优点是计算效率高、内存需求小，并且对不同类型的问题都有较好的适应性。代码如下：</p>



<pre class="wp-block-code"><code>optimizer = torch.optim.Adam(model.parameters(), lr=args.lr)  # Adam梯度下降  学习率=0.0001</code></pre>



<p class="wp-block-paragraph">其中，<code>model.parameters()</code>表示需要优化的模型参数，<code>lr</code>为学习率，设置为0.001。学习率是一个重要的超参数，它决定了优化器在每次迭代中更新参数的步长。通过实验，我们发现0.001的学习率在本实验中能够取得较好的训练效果。</p>



<p class="wp-block-paragraph">2. <strong>损失函数选择</strong>：选择均方误差（Mean Squared Error）作为损失函数。均方误差损失函数是一种适用于回归任务的损失函数，通过计算预测值和真实值之间的平方差的平均值，为模型训练提供了一个可量化的优化目标。代码如下：</p>



<pre class="wp-block-code"><code>criterion = nn.MSELoss()  # 定义损失函数</code></pre>



<p class="wp-block-paragraph"><strong>模型训练</strong>：训练过程如下：</p>



<pre class="wp-block-code"><code>close_max, close_min, train_loader, val_loader, test_loader = getData(args.corpusFile, args.sequence_length, args.batch_size)
# 用于保存损失
train_losses = &#91;]
val_losses = &#91;]
for epoch in range(args.epochs):
    model.train()
    total_loss = 0
    # 使用 tqdm 显示训练进度条
    with tqdm(train_loader, desc=f'Epoch {epoch}/{args.epochs}', unit='batch') as pbar:
        for idx, (data, label) in enumerate(pbar):
            if args.useGPU:
                data1 = data.squeeze(1).cuda()
                pred = model(Variable(data1).cuda())
                label = label.unsqueeze(1).cuda()
            else:
                data1 = data.squeeze(1)
                pred = model(Variable(data1))
                label = label.unsqueeze(1)
            loss = criterion(pred, label)
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()
            total_loss += loss.item()
            # 更新进度条的损失显示
            pbar.set_postfix(loss=total_loss)
    train_losses.append(total_loss)  # 保存训练损失
    # 每10个epoch保存一次模型
    if epoch % 10 == 0:
        torch.save({'state_dict': model.state_dict()}, args.save_file)</code></pre>



<p class="wp-block-paragraph">在每个训练 epoch 中，首先将模型设置为训练模式，然后遍历训练数据加载器中的每个批次。在每个批次中，先将输入数据传入模型得到预测结果，然后计算损失值，再将优化器的梯度清零，反向传播更新参数。</p>



<h2 class="wp-block-heading">五、实验结果与分析</h2>



<p class="wp-block-paragraph">训练参数如下：</p>



<pre class="wp-block-code"><code># TODO 常改动参数
parser.add_argument('--gpu', default=0, type=int)  # gpu 卡号
parser.add_argument('--epochs', default=500, type=int)  # 训练轮数
parser.add_argument('--layers', default=3, type=int)  # LSTM层数
parser.add_argument('--input_size', default=9, type=int)  # 输入特征的维度
parser.add_argument('--hidden_size', default=64, type=int)  # 隐藏层的维度64
parser.add_argument('--lr', default=0.0001, type=float)  # learning rate 学习率
parser.add_argument('--sequence_length', default=7, type=int)  # sequence的长度，默认是用前七天的数据来预测下一天的收盘价
parser.add_argument('--batch_size', default=64, type=int)   # 批大小
parser.add_argument('--useGPU', default=False, type=bool)  # 是否使用GPU
parser.add_argument('--batch_first', default=True, type=bool)  # 是否将batch_size放在第一维
parser.add_argument('--dropout', default=0.001, type=float)
parser.add_argument('--save_file', default='model/stock.pkl')  # 模型保存位置
parser.add_argument('--train_size', default=0.85, type=float)  # 训练集的大小
parser.add_argument('--val_size', default=0.05, type=float)  # 验证集的大小
parser.add_argument('--test_size', default=0.1, type=float)  # 测试集的大小</code></pre>



<p class="wp-block-paragraph">经过500轮训练，得到训练和验证损失曲线。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="640" height="480" src="https://bithao.com.cn/wp-content/uploads/2025/01/1766114826-image.png" alt="" class="wp-image-1975" srcset="https://bithao.com.cn/wp-content/uploads/2025/01/1766114826-image.png 640w, https://bithao.com.cn/wp-content/uploads/2025/01/1766114826-image-300x225.png 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>


<p class="wp-block-paragraph">在测试中，我们得到了LSTM模型对A股走势的预测结果。以下以图表的形式展示模型在测试集上的部分预测结果与实际值的对比情况，其中横坐标表示时间（以交易日为单位），纵坐标表示股票价格涨跌的预测值与实际值。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="640" height="480" src="https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image.png" alt="" class="wp-image-1976" srcset="https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image.png 640w, https://bithao.com.cn/wp-content/uploads/2025/01/1766114838-image-300x225.png 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>
</div>


<p class="wp-block-paragraph">从图中可以看出，在大部分时间段内，模型能够较为准确地预测股票价格的涨跌。例如，在某些时间点，模型预测的上涨或下跌趋势与实际情况相符。然而，也存在一些预测不准确的情况，模型预测的涨跌与实际走势出现偏差。这可能是由于股票市场的复杂性，受到多种因素的综合影响，即使考虑了历史价格数据和股吧情感分析，仍难以完全准确地捕捉到所有的变化因素。</p>



<h2 class="wp-block-heading">六、结论与展望</h2>



<h3 class="wp-block-heading">6.1 研究结论总结</h3>



<p class="wp-block-paragraph">本研究通过结合LSTM与股吧情感分析，构建了A股走势预测模型。实验结果表明，该模型在一定程度上能够有效预测股票价格的涨跌。通过对股吧文本数据进行情感分析，提取的投资者情感特征为模型提供了有价值的信息，有助于提高预测的准确性。</p>



<h3 class="wp-block-heading">6.2 研究的局限性</h3>



<p class="wp-block-paragraph"><strong>数据方面</strong>：本实验使用的数据在时间跨度和样本数量上存在一定的局限性。股票市场受到众多复杂因素的影响，历史数据的时间跨度不够长可能导致模型无法充分学习到各种市场状态下的规律。此外，股吧文本数据的抓取可能存在不全面的情况，部分重要信息可能被遗漏，从而影响情感分析的准确性和模型的预测效果。</p>



<p class="wp-block-paragraph"><strong>模型方面</strong>：虽然LSTM模型在处理时间序列数据方面具有优势，但股票市场的复杂性使得任何单一模型都难以完全准确地捕捉所有影响因素。本研究中LSTM模型的结构和参数设置可能并非最优，仍有进一步优化的空间。此外，模型假设投资者的情感能够直接反映在股票价格走势中，但实际情况可能更为复杂，投资者情感与股票价格之间的关系可能受到多种因素的干扰。</p>



<p class="wp-block-paragraph"><strong>情感分析方面</strong>：snownlp库的情感分析方法虽然简单易用，但对于金融领域文本的情感分析可能存在一定的局限性。金融文本具有专业性和复杂性，其中的一些词汇和表达方式可能具有特定的含义，普通的情感分析工具可能无法准确理解其情感倾向。此外，情感分析结果可能受到文本的上下文、语境等因素的影响，目前的方法可能无法充分考虑这些因素。</p>



<h3 class="wp-block-heading">6.3 未来研究方向</h3>



<p class="wp-block-paragraph"><strong>数据拓展</strong>：收集更长时间跨度、更多样本的股票历史交易数据和股吧文本数据，以提高模型的泛化能力和稳定性。同时，可以考虑拓展数据来源，如收集更多金融媒体的评论、分析师报告等，以获取更全面的市场信息。</p>



<p class="wp-block-paragraph"><strong>模型改进</strong>：尝试改进LSTM模型的结构，如引入注意力机制等，以更好地捕捉数据中的重要信息和长期依赖关系。此外，可以结合其他机器学习或深度学习算法，构建集成模型，提高预测的准确性。</p>



<p class="wp-block-paragraph"><strong>情感分析优化</strong>：针对金融领域文本的特点，改进情感分析方法。可以利用深度学习模型，如基于Transformer的模型，进行情感分析，以提高分析的准确性和鲁棒性。同时，可以考虑结合知识图谱等技术，更好地理解金融文本中的语义和情感。</p>



<p class="wp-block-paragraph"><strong>多因素融合</strong>：进一步研究股票市场的其他影响因素，如宏观经济指标、行业动态、公司财务状况等，并将这些因素与投资者情感和历史价格数据进行更深入的融合，以构建更全面、准确的股票走势预测模型。</p>



<h2 class="wp-block-heading">参考文献</h2>



<p class="wp-block-paragraph">[1] Zhang Y S, Yang S T. Prediction on the Highest Price of the Stock Based on PSO-LSTM Neural Network[C]// Proceedings of the 3rd International Conference on Electronic Information Technology and Computer Engineering (EITCE). 2019: 1565-1569.</p>



<p class="wp-block-paragraph">[2] Xing FZ, Cambria E, Welsch RE (2018) Natural language based financial forecasting: a survey. Artif Intell Rev 50(1):49–73</p>



<p class="wp-block-paragraph">[3] Xu Yuemei, Wang Zihou, Wu Zixin. Predicting Stock Trends with CNN-BiLSTM Based Multi-Feature Integration Model[J]. <em>Data Analysis and Knowledge Discovery</em>, 2021, 5(7): 126-138</p>
<p><a href="https://bithao.com.cn/2025/01/15/%e5%9f%ba%e4%ba%8elstm%e4%b8%8e%e8%82%a1%e5%90%a7%e6%83%85%e6%84%9f%e5%88%86%e6%9e%90%e7%9a%84a%e8%82%a1%e8%b5%b0%e5%8a%bf%e9%a2%84%e6%b5%8b%e7%a0%94%e7%a9%b6%e4%b8%8e%e5%ae%9e%e8%b7%b5/">基于LSTM与股吧情感分析的A股走势预测研究与实践</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2025/01/15/%e5%9f%ba%e4%ba%8elstm%e4%b8%8e%e8%82%a1%e5%90%a7%e6%83%85%e6%84%9f%e5%88%86%e6%9e%90%e7%9a%84a%e8%82%a1%e8%b5%b0%e5%8a%bf%e9%a2%84%e6%b5%8b%e7%a0%94%e7%a9%b6%e4%b8%8e%e5%ae%9e%e8%b7%b5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>国科大NLP课程-词向量训练报告</title>
		<link>https://bithao.com.cn/2024/12/15/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e8%af%8d%e5%90%91%e9%87%8f%e8%ae%ad%e7%bb%83%e6%8a%a5%e5%91%8a/</link>
					<comments>https://bithao.com.cn/2024/12/15/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e8%af%8d%e5%90%91%e9%87%8f%e8%ae%ad%e7%bb%83%e6%8a%a5%e5%91%8a/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Sun, 15 Dec 2024 15:59:11 +0000</pubDate>
				<category><![CDATA[LLM]]></category>
		<category><![CDATA[NLP课程]]></category>
		<category><![CDATA[skip-gram]]></category>
		<category><![CDATA[国科大]]></category>
		<category><![CDATA[词向量]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=1983</guid>

					<description><![CDATA[<div><img width="300" height="156" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image-300x156.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image-300x156.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image-768x400.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image.png 934w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>作业：词向量训练 一、 实验目的 二、 实验要求 请写明选择的词向量模型结构（可以参考课程PPT，也可以自由选择一些主流的论文中提 ...</p>
<p><a href="https://bithao.com.cn/2024/12/15/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e8%af%8d%e5%90%91%e9%87%8f%e8%ae%ad%e7%bb%83%e6%8a%a5%e5%91%8a/">国科大NLP课程-词向量训练报告</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="156" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image-300x156.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image-300x156.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image-768x400.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image.png 934w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p class="wp-block-paragraph"><strong>作业：词向量训练</strong></p>



<p class="wp-block-paragraph">一、  实验目的</p>



<ol class="wp-block-list">
<li>掌握课堂所讲词向量的基本概念和训练方法。</li>



<li>加强对pytorch、tensorflow等深度学习框架的使用能力。</li>
</ol>



<p class="wp-block-paragraph">二、  实验要求</p>



<p class="wp-block-paragraph">请写明选择的词向量模型结构（可以参考课程PPT，也可以自由选择一些主流的论文中提到的模型）</p>



<p class="wp-block-paragraph">三、  任务说明</p>



<p class="wp-block-paragraph">请使用任意一种深度学习框架（推荐pytorch），利用给定的语料训练词向量即可，中文和英文都需要训练，中文语料位于data文件夹下的zh.txt中，已经分好词。英文语料位于data文件夹下的en.txt中。（给定的语料规模较小，如果有充足的计算资源，也可自己选用更大的语料来训练，但需在报告中写明）。</p>



<p class="wp-block-paragraph">四、  实验过程</p>



<p class="wp-block-paragraph">1、模型选择</p>



<p class="wp-block-paragraph">skip-gram模型，输入是一个词汇，输出则是该词汇的上下文。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="934" height="487" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image.png" alt="" class="wp-image-1986" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image.png 934w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image-300x156.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123636-image-768x400.png 768w" sizes="auto, (max-width: 934px) 100vw, 934px" /></figure>



<p class="wp-block-paragraph">2、模型超参数</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>参数</th><th>值</th><th>说明</th></tr></thead><tbody><tr><td>MAX_VOCAB_SIZE</td><td>80000</td><td>词典中单词地个数</td></tr><tr><td>K</td><td>100</td><td>负样本地个数</td></tr><tr><td>C</td><td>2</td><td>附近单词地门限</td></tr><tr><td>NUM_EPOCHS</td><td>5</td><td>训练轮数</td></tr><tr><td>LEARNING_RATE</td><td>0.5</td><td>初始学习率</td></tr><tr><td>EMBEDDING_SIZE</td><td>100</td><td>词向量特征地个数</td></tr><tr><td>BATCH_SIZE</td><td>16</td><td>批大小</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">3、数据预处理</p>



<p class="wp-block-paragraph">空格分割读取的数据，如果是中文数据需过滤停用词，选择常用地MAX_VOCAB_SIZE个单词作为词典，不常用地词统一用unk表示。</p>



<pre class="wp-block-code"><code>def load_stop_words(file_stopwords):
    """
        加载停用词
    """
    with open(file_stopwords, "r", encoding="utf-8") as f:
        return f.read().split("n")

def dataPreprocess(file, iszh):
    """
    数据预处理
    :param iszh: 是否为中文
    :return:
    """
    if iszh:
        stop_words = load_stop_words(file_stopwords)
        with open(file, 'r', encoding="utf-8") as f:
            text = f.read()
            text = text.split()  # 空格分割
            text = list(filter(lambda word: word not in stop_words, text))  # 过滤停用词
    else:
        with open(file) as f:
            text = f.read()
            text = text.split()  # 空格分割
    vocab = dict(Counter(text).most_common(MAX_VOCAB_SIZE - 1))  # 选择常用地MAX_VOCAB_SIZE个单词
    vocab&#91;'&lt;unk&gt;'] = len(text) - np.sum(list(vocab.values()))  # 不常用地词统一用unk表示
    return text, vocab</code></pre>



<p class="wp-block-paragraph">4、模型结构</p>



<p class="wp-block-paragraph">使用灵活得方式去定义模型，继承nn.Module类。</p>



<pre class="wp-block-code"><code>class EmbeddingModel(nn.Module):
    def __init__(self, vocab_size, embed_size):
        # 初始化输入和输出得embedding
        super(EmbeddingModel, self).__init__()
        self.vocab_size = vocab_size
        self.embed_size = embed_size

        # 初始化
        initrange = 0.5 / self.embed_size
        self.out_embed = nn.Embedding(self.vocab_size, self.embed_size, sparse=False)
        self.out_embed.weight.data.uniform_(-initrange, initrange)

        self.in_embed = nn.Embedding(self.vocab_size, self.embed_size, sparse=False)
        self.in_embed.weight.data.uniform_(-initrange, initrange)  # 这是在范围直接均匀分布采样

    def forward(self, input_labels, pos_labels, neg_labels):
        """
        input_labels:中心词,&#91;batch_size]
        pos_labels:中心词周围context window 出现过得单词&#91;batch_size * (window_size * 2)]
        neg_labels:中心词周围没有出现过得单词，从negative sampling得到&#91;batch_size, (window_size*2*K)]

        return:loss,&#91;batch_size]
        """
        batch_size = input_labels.size(0)
        input_embedding = self.in_embed(input_labels)  # batchsize*embed_size
        pos_embedding = self.out_embed(pos_labels)  # batchsize*(2*c)*embed_size
        neg_embedding = self.out_embed(neg_labels)  # batchsize*(2*c*k)*embed_size

        # 计算损失
        input_embedding = input_embedding.unsqueeze(2)  # &#91;batchsize, embed_size, 1]
        log_pos = torch.bmm(pos_embedding, input_embedding).squeeze()  # &#91;batchsize, 2*C]
        log_neg = torch.bmm(neg_embedding, -input_embedding).squeeze()  # &#91;batchsize, 2*c*100]

        log_pos = F.logsigmoid(log_pos).sum(1)
        log_neg = F.logsigmoid(log_neg).sum(1)

        loss = log_pos + log_neg
        return -loss

    def input_embedding(self):
        return self.in_embed.weight.data.cpu().numpy()</code></pre>



<p class="wp-block-paragraph">5、模型训练</p>



<p class="wp-block-paragraph">训练步骤：前向传播，计算损失，梯度清零，反向传播，参数更新</p>



<pre class="wp-block-code"><code>def train(model):
    """
    训练
    :return:
    """
    optimizer = torch.optim.SGD(model.parameters(), lr=LEARNING_RATE)
    for epoch in range(NUM_EPOCHS):
        pbar = tqdm(total=100, desc=f"epoch:{epoch}")
        for i, (input_labels, pos_labels, neg_labels) in enumerate(dataloader):
            # 先保证都是longTensor
            input_labels = input_labels.long()
            pos_labels = pos_labels.long()
            neg_labels = neg_labels.long()
            if use_cuda:
                input_labels = input_labels.cuda()
                pos_labels = pos_labels.cuda()
                neg_labels = neg_labels.cuda()
            optimizer.zero_grad()
            loss = model(input_labels, pos_labels, neg_labels).mean()
            loss.backward()
            optimizer.step()
            pbar.update(100/len(dataloader))
        pbar.close()</code></pre>



<p class="wp-block-paragraph">6、模型测试</p>



<p class="wp-block-paragraph">寻找距离最近的几个单词，看看训练得这个词向量矩阵得效果。</p>



<p class="wp-block-paragraph">英文数据：['present', 'food', 'can', 'specifically']</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="291" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766123518-image-1024x291.png" alt="" class="wp-image-1984" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766123518-image-1024x291.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123518-image-300x85.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123518-image-768x218.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123518-image.png 1064w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">中文数据：['中国', '粮食', '至今', '山川']</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="781" height="300" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766123528-image.png" alt="" class="wp-image-1985" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766123528-image.png 781w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123528-image-300x115.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766123528-image-768x295.png 768w" sizes="auto, (max-width: 781px) 100vw, 781px" /></figure>
</div><p><a href="https://bithao.com.cn/2024/12/15/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e8%af%8d%e5%90%91%e9%87%8f%e8%ae%ad%e7%bb%83%e6%8a%a5%e5%91%8a/">国科大NLP课程-词向量训练报告</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2024/12/15/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e8%af%8d%e5%90%91%e9%87%8f%e8%ae%ad%e7%bb%83%e6%8a%a5%e5%91%8a/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>国科大NLP课程-多音字与易读错字标注在线系统</title>
		<link>https://bithao.com.cn/2024/10/13/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e5%a4%9a%e9%9f%b3%e5%ad%97%e4%b8%8e%e6%98%93%e8%af%bb%e9%94%99%e5%ad%97%e6%a0%87%e6%b3%a8%e5%9c%a8%e7%ba%bf%e7%b3%bb%e7%bb%9f/</link>
					<comments>https://bithao.com.cn/2024/10/13/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e5%a4%9a%e9%9f%b3%e5%ad%97%e4%b8%8e%e6%98%93%e8%af%bb%e9%94%99%e5%ad%97%e6%a0%87%e6%b3%a8%e5%9c%a8%e7%ba%bf%e7%b3%bb%e7%bb%9f/#respond</comments>
		
		<dc:creator><![CDATA[hao]]></dc:creator>
		<pubDate>Sun, 13 Oct 2024 15:16:12 +0000</pubDate>
				<category><![CDATA[LLM]]></category>
		<category><![CDATA[g2pM]]></category>
		<category><![CDATA[LSTM]]></category>
		<category><![CDATA[NLP课程]]></category>
		<category><![CDATA[国科大]]></category>
		<category><![CDATA[多音字消歧]]></category>
		<category><![CDATA[逻辑回归]]></category>
		<guid isPermaLink="false">https://bithao.com.cn/?p=1982</guid>

					<description><![CDATA[<div><img width="300" height="190" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-300x190.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-300x190.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-1024x650.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-768x487.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-1536x974.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image.png 2018w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<p>1 背景 为了提升用户对文本的准确理解，我们设计并实现了一个多音字与易读错字标注系统。通过上传Word文档，程序将自动检测文中的多 ...</p>
<p><a href="https://bithao.com.cn/2024/10/13/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e5%a4%9a%e9%9f%b3%e5%ad%97%e4%b8%8e%e6%98%93%e8%af%bb%e9%94%99%e5%ad%97%e6%a0%87%e6%b3%a8%e5%9c%a8%e7%ba%bf%e7%b3%bb%e7%bb%9f/">国科大NLP课程-多音字与易读错字标注在线系统</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></description>
										<content:encoded><![CDATA[<div><img width="300" height="190" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-300x190.png" class="attachment-medium size-medium wp-post-image" alt="" style="margin-bottom: 15px;" decoding="async" loading="lazy" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-300x190.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-1024x650.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-768x487.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-1536x974.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image.png 2018w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div>
<h3 class="wp-block-heading">1 背景</h3>



<p class="wp-block-paragraph">为了提升用户对文本的准确理解，我们设计并实现了一个多音字与易读错字标注系统。通过上传Word文档，程序将自动检测文中的多音字和易错字，并为其添加拼音注释。输出的结果会以Word文件形式返回，注释信息会在字词后以圆括号形式标注，方便用户阅读和展示。</p>



<h3 class="wp-block-heading">2 目的</h3>



<p class="wp-block-paragraph">通过训练双向LSTM模型、逻辑回归、g2pM、调用大模型API等方法实现对文本的多音字和易读错字标注。</p>



<p class="wp-block-paragraph">通过Django框架实现在线系统，方便用户通过网页上传和下载文档，实现实时检测与注音。</p>



<h3 class="wp-block-heading">3 系统实现框架</h3>



<h4 class="wp-block-heading">3.1 前端</h4>



<p class="wp-block-paragraph">用户通过网页上传Word文档。</p>



<p class="wp-block-paragraph">然后向后端接口发起POST请求，返回处理结果。</p>



<pre class="wp-block-code"><code>// 处理文档
function DealDoc(e){
    // 处理选项
    var radios = document.querySelector('input&#91;name="gender"]:checked').value;
    reader = document.getElementById("input").value
    document.getElementById("output").value = "Loading...";
    var url = 'https://nlp.bithao.com.cn/deal';
    // 发起POST请求
    fetch(url, {
        method: 'POST',
        headers: {
            'Accept': 'application/json',
            'Content-Type':'application/x-www-form-urlencoded'
        },
        body: `input=${reader}&amp;radios=${radios}`
    })
    .then(response =&gt; response.json())
    .then(data =&gt; {
        console.log('Success:', data);
        // 显示输出结果
        document.getElementById("output").value = data.result;
    })
    .catch(error =&gt; {
        console.error('Error:', error);
    });
}</code></pre>



<p class="wp-block-paragraph">用户点击下载，将处理好的数据保存为docx文件，直接在客户端完成，无需占用服务端资源。</p>



<h4 class="wp-block-heading">3.2 后端</h4>



<p class="wp-block-paragraph">view层，数据处理接口，根据不同选项以Json格式返回不同方法的处理结果。</p>



<pre class="wp-block-code"><code>def deal(request):
    if request.method == 'POST':
        data = request.POST&#91;"input"]
        radios = int(request.POST&#91;"radios"])
        if radios == 1: # LSTM
            result = LSTMDealDoc(data)
        elif radios == 2:   # 逻辑回归
            result = LGDealDoc(data)
        elif radios == 3:   # g2pm
            result = g2pmDealDoc(data)
        elif radios == 4:   # 大模型
            result = AIDealDoc(data)
        content = {
            "result": result
        }
        return JsonResponse(content)</code></pre>



<h3 class="wp-block-heading">4 双向LSTM模型</h3>



<p class="wp-block-paragraph">功能-BiLSTM</p>



<p class="wp-block-paragraph">双向长短时记忆网络（BiLSTM）在多音字消歧中的应用，主要是因为它具备从两个方向（前向和后向）处理序列数据的能力。具体来说，BiLSTM 相比于单向的 LSTM 可以更好地处理语言中的依赖关系，因为它不仅能够考虑到多音字前面的词语（前向信息），还能够结合后续的词语（后向信息）来做出判断。这种双向处理使得模型在消岐时能够利用更多的上下文信息，从而更准确地确定多音字的正确读音。</p>



<h4 class="wp-block-heading">4.1 数据来源</h4>



<p class="wp-block-paragraph">一、汉字拼音库，使用《现代汉语词典》中的拼音数据，汉字数：11017，多音字个数：1217；</p>



<p class="wp-block-paragraph">（来自<a href="https://github.com/mozillazg/pinyin-data" target="_blank"  rel="nofollow" >pinyin-data</a>）</p>



<p class="wp-block-paragraph">二、人民日报1988年一月的新闻语料，一共有19374条新闻，包含5593个多音字，其中有85种不同的多音字；来自（<a href="http://opendata.pku.edu.cn/dataset.xhtml?persistentId=doi:10.18170/DVN/SEYRX5" target="_blank"  rel="nofollow" >pkuopendata</a>）</p>



<h4 class="wp-block-heading">4.2 数据预处理</h4>



<p class="wp-block-paragraph">数据统计：</p>



<ol class="wp-block-list">
<li>统计了多音字的读音个数，了解多音字的分布情况。</li>



<li>对新闻语料中的多音字进行统计，包括出现次数和含多音字的句子数量等。</li>



<li>对短语中的多音字进行统计和分析。</li>
</ol>



<p class="wp-block-paragraph">语料划分：</p>



<p class="wp-block-paragraph">将语料划分为训练集、验证集和测试集。</p>



<p class="wp-block-paragraph"><code>train.csv</code>（训练集，29928 条短语，30041 个多音字）</p>



<p class="wp-block-paragraph"><code>valid.csv</code>（验证集，8723 条短语，12696 个多音字）</p>



<p class="wp-block-paragraph"><code>test.csv</code>（测试集，8638 条短语，19198 个多音字）</p>



<p class="wp-block-paragraph">数据预处理：</p>



<ol class="wp-block-list">
<li>使用 <a href="https://github.com/pytorch/text" target="_blank"  rel="nofollow" >torchtext</a> 库对文本进行处理。</li>



<li>对句子和读音进行 tokenize（分词），建立词典。</li>



<li>设定 batch size 和生成迭代器，以便将数据送入模型进行训练。</li>
</ol>



<h4 class="wp-block-heading">4.3 模型搭建</h4>



<p class="wp-block-paragraph">仿照词性标注问题的分类方法：</p>



<p class="wp-block-paragraph">1. <span style="font-size: revert; color: initial;">仿照词性标注的处理思路，将训练数据编码为特定格式，其中 “NA” 代表非多音字，多音字则使用读音来编码。</span><br><img decoding="async" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766123916-image.png" alt=""></p>



<p class="wp-block-paragraph">2. <span style="font-size: revert; color: initial;">已将短语数据送入模型并进行训练，然后使用测试集计算准确率，将标注正确的语句和标注错误的语句输出到相应文件中（</span><code style="font-size: revert; background-color: rgb(255, 255, 255); color: initial;">correct.csv</code><span style="font-size: revert; color: initial;"> 和 </span><code style="font-size: revert; background-color: rgb(255, 255, 255); color: initial;">wrong.csv</code><span style="font-size: revert; color: initial;">）。</span></p>



<pre class="wp-block-code"><code><code># 用于消岐的神经网络
class DisambiguationLSTM(nn.Module):
 def __init__(self, n_word, word_dim, word_hidden, n_pronounce):
 super(DisambiguationLSTM, self).__init__()
 self.word_embedding = nn.Embedding(n_word, word_dim)
 self.lstm = nn.LSTM(
 input_size=word_dim,
 hidden_size=word_hidden,
 num_layers=configure.num_layer,
 batch_first=True,
 bidirectional=True
 )
 self.linear1 = nn.Linear(word_hidden*2, n_pronounce)

 def forward(self, x):
 x = self.word_embedding(x)
 x, _ = self.lstm(x) 
 x = x.squeeze(0) 
 x = self.linear1(x) 
 return x</code></code></pre>



<p class="wp-block-paragraph">3. <span style="font-size: revert; color: initial;">使用optuna库寻找最优参数；</span></p>



<pre class="wp-block-code"><code><p><code class="language-python">#寻找最优参数
import optuna
def objective(trial):
 trn_rate = trial.suggest_float('trn_rate', 0.4, 0.8)
 val_rate = trial.suggest_float('val_rate', 0.1, 0.4)
 batch_size = trial.suggest_categorical('batch_size', &#91;256, 512, 1024])
 num_layer = trial.suggest_int('num_layer', 1, 3)
 # 更新配置中的参数
 configure.trn_rate = trn_rate
 configure.val_rate = val_rate
 configure.batch_size = batch_size
 old_acc = 0
......</code></p></code></pre>



<h4 class="wp-block-heading">4.4 word文档注音</h4>



<p class="wp-block-paragraph">假设已经有了一个处理 Word 文档并进行多音字注音的函数 <code>annotate_word_document</code>，其思路如下：</p>



<h5 class="wp-block-heading">4.4.1 易读错字</h5>



<p class="wp-block-paragraph">除多音字外，还要求程序能够识别易读错字。通过网络信息检索获得400个易错字词，包括容易平翘舌不分、前后鼻音不分、h/f不分、鼻边音不分等难点发音字词，轻声儿化等需变调词语，以及一部分较生僻的字，例如摈（bìn）弃、疮（chuāng）疤、舂（chōng）等等。程序运行时，直接从目标文章中识别并注音即可。</p>



<p class="wp-block-paragraph">1. <span style="font-size: revert; color: initial;">读取 Word 文档内容,将其转换为文本并导入易错字，多音字JSON词典;</span></p>



<pre class="wp-block-code"><code><p><code class="language-python">def word_doc_to_text(file_path):
 doc = docx.Document(file_path)
 text = ""
 for paragraph in doc.paragraphs:
 text += paragraph.text
 return text

#读取约400个易错字，注意csv编码格式为UTF-8
def read_mispronounced_words(file_path):
 df = pd.read_csv(file_path)
 return dict(zip(df&#91;'text'], df&#91;'label']))

# 读取多音字 JSON 文件
with open('../data/polyphones.json', 'r', encoding='utf-8') as f:
 polyphone_data = json.load(f)
polyphone_list = list(polyphone_data.keys())</code></p></code></pre>



<p class="wp-block-paragraph">2. <span style="font-size: revert; color: initial;">使用jieba对文本进行分词，得到单词列表。</span></p>



<p class="wp-block-paragraph">3. <span style="font-size: revert; color: initial;">对于每个单词，判断是否包含多音字：</span></p>



<pre class="wp-block-code"><code><p><code class="language-python">def is_word_contain_polyphone(word):
 for char in word:
 if char in polyphone_list:
 return True
 return False</code></p></code></pre>



<p class="wp-block-paragraph">4. <span style="font-size: revert; color: initial;">分词词语转化为适配模型输入的张量，并根据模型输出确定读音；</span></p>



<pre class="wp-block-code"><code><code class="language-python" style="font-size: revert; background-color: rgb(255, 255, 255); color: initial;">#分词词语转化为模型输入的张量，进行预处理，如填充和截断</code><p><code class="language-python">def word_to_tensor(word, vocab):
 word_index = vocab.stoi.get(word, vocab.stoi&#91;'&lt;unk>'])
 return torch.tensor(word_index).unsqueeze(0)

def words_to_tensor_list(word_list, vocab, max_length):
 tensor_list = &#91;word_to_tensor(word, vocab) for word in word_list]
 padded_tensor_list = torch.nn.utils.rnn.pad_sequence(tensor_list, batch_first=True)
 if len(padded_tensor_list) > max_length:
 return padded_tensor_list&#91;:max_length]
 else:
 return padded_tensor_list

def determine_pronunciation(output, label_vocab):
 # 根据模型输出确定读音
 predicted_label_index = torch.argmax(output).item()
 pronunciation_label = label_vocab.itos&#91;predicted_label_index]
 # 根据标注体系，提取读音信息并返回
 if pronunciation_label == "NA": #NA表示非多音字
 word = label_vocab.itos&#91;predicted_label_index]
 if word in mispronounced_words: #如果是易错字词，返回读音
 return mispronounced_words&#91;word]
 else:
 return ""
 else:
 return pronunciation_label</code></p></code></pre>



<p class="wp-block-paragraph">5. <span style="font-size: revert; color: initial;">如果单词包含多音字，使用训练好的LSTM模型进行预测，如果模型能够确定读音，则在单词中的多音字后面标注读音；如果模型未识别，则使用多音字JSON文件中的读音信息进行标注,如果单词不包含多音字，直接添加到结果中；</span></p>



<p class="wp-block-paragraph">整体思路是通过对不同来源的数据进行统计和预处理，搭建多音字消歧模型，并将其应用于 Word 文档的多音字注音任务中。在模型搭建过程中，尝试了不同的方法，并选择了较为有效的仿照词性标注问题的分类方法进行训练和测试。</p>



<p class="wp-block-paragraph">验证集上准确率达到85-90%，测试集准确率为75%-88%</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="865" height="269" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124071-image.png" alt="" class="wp-image-1990" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124071-image.png 865w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124071-image-300x93.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124071-image-768x239.png 768w" sizes="auto, (max-width: 865px) 100vw, 865px" /></figure>



<h5 class="wp-block-heading">4.4.2 模型改进-其他词性</h5>



<p class="wp-block-paragraph">由于训练语料库主要由短语或词语构成，将多音字消歧模型应用于长文本时，短语级别的训练限制了模型对更复杂语境中多义词的判断，无法充分利用句子或段落中的全局上下文信息。例如“的”作为助词时在长文本中及其常见，但在训练短语中仅出现67次，且不少作为固定短语，如“狗娘养的”、“一矢中的”。</p>



<p class="wp-block-paragraph">为了改进模型，考虑通过识别常见的副词、助词、方位词、连词和介词中的多音字，并根据长文本上下文判断词性，再在原有模型基础上对这些字进行二次注音。不同词性下，某些多音字的发音是固定的，因此可以利用这一点进行二次注音，降低模糊性。此外，词性判断依赖于上下文，可以有效地利用句子和段落级别的信息，而不是仅依赖于短语。</p>



<p class="wp-block-paragraph">以副词为例，常见的副词包括“非常、绝对、极度、十分、最、顶级、太、更、极其、格外、分外、一直、才、总 、也、都、全部、总体、总共、共、统统、又、仅仅、只、光、一概 、已经、曾经、早已、刚刚、正、正在、就、就要、将、将要、曾、刚、才、在 、不、非、没、没有、不用（甭）、必、必须、必定、准、的确、未、别、忽然、猛然、公然、特意、亲自、大肆、肆意、难道、决、岂、反正、也许、大约、大概、果然、居然、竟然、究竟 、家、这里、那里、每一处、楼”，其中包含多音字的有以下几个，且作为副词时读音固定，分别是“才（cái）、都（dōu）、将（jiāng）、没（méi）”。同理，手工找出常见助词、方位词、连词和介词中的多音字。最后汇总的这些词性的多音字一共有17个，分别为</p>



<p class="wp-block-paragraph">副词：才（cái）、都（dōu）、将（jiāng）、没（méi）</p>



<p class="wp-block-paragraph">助词：了（le）、着（zhe）、过（guo）、地（de）、的（de）、得（de）</p>



<p class="wp-block-paragraph">方位词：中（zhōng）</p>



<p class="wp-block-paragraph">介词：从（cóng）、当（dāng）、为（wèi）、给（gěi）</p>



<p class="wp-block-paragraph">连词：和（hé）、便（biàn）</p>



<p class="wp-block-paragraph">使用jieba库的pseg模块，对长文本进行分词及词性标注，并对上述特定词性的多音字二次标注。代码示例如下：</p>



<pre class="wp-block-code"><code>import jieba.posseg as pseg
# 定义要加注音的字及其拼音
pinyin_dict = {
'才': 'cái',
'都': 'dōu',
'将': 'jiāng',
'没': 'méi',
'了': 'le',
'着': 'zhe',
'过': 'guo',
'地': 'de',
'的': 'de',
'得': 'de',
'中': 'zhōng',
'从': 'cóng',
'当': 'dāng',
'为': 'wèi',
'给': 'gěi',
'和': 'hé',
'便': 'biàn'
}
# 定义目标词性集合（副词、助词、方位词、介词、连词）
target_pos = {'d', 'p', 'f', 'c', 'uv', 'ul', 'uj'}
# 处理句子的函数
def add_pinyin(sentence):
    words = pseg.cut(sentence) # 使用 jieba 分词并获取词性
    result = &#91;]
    for word, flag in words:
        if word in pinyin_dict and flag in target_pos:
            result.append(f"{word}({pinyin_dict&#91;word]})") # 如果满足条件，添加拼音注释
        else:
            result.append(word) # 否则直接保留原字
    return ''.join(result)
# 示例
text = "才知道，你在雨中飞快地跑，我走了。"
# 输出加注音的句子
annotated_text = add_pinyin(text)
print(annotated_text)
# words = pseg.lcut(text)
# 打印每个词及其词性
# for word, flag in words:
# print(f"{word}: {flag}")</code></pre>



<h4 class="wp-block-heading">4.5 模型评估</h4>



<p class="wp-block-paragraph">输入输出案例:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="650" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-1024x650.png" alt="" class="wp-image-1991" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-1024x650.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-300x190.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-768x487.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image-1536x974.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124123-image.png 2018w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">5 逻辑回归</h3>



<p class="wp-block-paragraph">功能-逻辑回归</p>



<p class="wp-block-paragraph"><strong>主要思想：</strong></p>



<p class="wp-block-paragraph">把多音字注音分解为每个多音字的读音识别，即分解为六百多个简单分类任务。利用多音字在不同句子中的词性，及其前后词语的词性作为特征训练模型，得到六百多个模型。使用的时候从前到后遍历word文档，如果遍历到多音字字典里的字，则调用对应的模型进行预测。</p>



<p class="wp-block-paragraph"><strong>数据集：</strong></p>



<p class="wp-block-paragraph">CPP (Chinese Polyphones with Pinyin)</p>



<p class="wp-block-paragraph"><a href="https://paperswithcode.com/dataset/cpp" target="_blank"  rel="nofollow" >https://paperswithcode.com/dataset/cpp</a></p>



<p class="wp-block-paragraph">拥有99000条中文多音字数据，数据格式如下：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>用▁标记多音字的句子</th><th>正确读音</th></tr></thead><tbody><tr><td>斯考尔将她救出，并搭乘遗弃的星际飞船回到▁了▁星球。</td><td>Le5</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>项目流程：</strong></p>



<ol class="wp-block-list">
<li>处理数据：</li>
</ol>



<p class="wp-block-paragraph">79100条作为训练集，9800条作为验证集，10250条作为测试集。</p>



<p class="wp-block-paragraph">利用THULAC进行分词，经处理得到如下训练输入和输出：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>输入</th><th>输出</th><th>&nbsp;</th><th>&nbsp;</th><th>&nbsp;</th></tr></thead><tbody><tr><td>多音字所在词</td><td>前面词的词性</td><td>所在词的词性</td><td>后面词的词性</td><td>正确读音</td></tr><tr><td>了</td><td>v</td><td>u</td><td>n</td><td>Le5</td></tr></tbody></table></figure>



<ol start="2" class="wp-block-list">
<li>训练模型：</li>
</ol>



<p class="wp-block-paragraph">将输入输出数据进行编码后进行训练。</p>



<pre class="wp-block-code"><code># 训练模型并评估验证集
for epoch in range(10):  # 假设我们进行10个epoch的训练
    model.fit(X_train_encoded, y_train_encoded)
    y_val_pred_encoded = model.predict(X_val_encoded)
    accuracy_val = accuracy_score(y_val_encoded, y_val_pred_encoded)

    # 如果验证集表现更好，保存当前的最佳模型
    if accuracy_val &gt; best_accuracy:
        best_accuracy = accuracy_val
        best_model = model

# 保存最佳模型和编码器
if best_model:
    model_save_path = os.path.join(folder_path, 'best_model.pkl')
    encoder_save_path = os.path.join(folder_path, 'encoders.pkl')

    joblib.dump(best_model, model_save_path)
    joblib.dump({'onehot_encoder': onehot_encoder, 'label_encoder': label_encoder}, encoder_save_path)</code></pre>



<ol start="3" class="wp-block-list">
<li>测试结果：</li>
</ol>



<p class="wp-block-paragraph">该数据集部分多音字只标注了一个读音。综合正确率等于整体预测正确数目除以预测条数。</p>



<p class="wp-block-paragraph">如果默认只有一个注音的多音字都预测正确：在测试集上综合正确率97.14%</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="596" height="468" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124185-image.png" alt="" class="wp-image-1992" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124185-image.png 596w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124185-image-300x236.png 300w" sizes="auto, (max-width: 596px) 100vw, 596px" /></figure>
</div>


<p class="wp-block-paragraph">如果不考虑只有一个注音的多音字，综合正确率为94.81%</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="579" height="457" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124213-image.png" alt="" class="wp-image-1993" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124213-image.png 579w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124213-image-300x237.png 300w" sizes="auto, (max-width: 579px) 100vw, 579px" /></figure>
</div>


<p class="wp-block-paragraph">写文档针对性进行测试效果如下图：</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="650" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124250-image-1024x650.png" alt="" class="wp-image-1994" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124250-image-1024x650.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124250-image-300x190.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124250-image-768x487.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124250-image-1536x974.png 1536w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124250-image.png 2018w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">分析总结：</p>



<p class="wp-block-paragraph">逻辑回归训练的模型在测试集上表现较好，但是实际应用效果比较一般。分析可能有如下几点原因：</p>



<ol class="wp-block-list">
<li>数据集同一个字的不同读音数据量失衡。</li>



<li>部分多音字不同发音所组成的词用法区别不大，无法有效通过词性进行判断。</li>
</ol>



<p class="wp-block-paragraph">该方法实现起来比较简单，且对训练设备要求不高。但是这个方法只是浅显的通过词性训练，且每个字各有一个模型，没有建立理解语义的大模型。</p>



<h3 class="wp-block-heading">6 g2pm</h3>



<p class="wp-block-paragraph">功能-g2pm</p>



<p class="wp-block-paragraph">G2pM使用方法：</p>



<pre class="wp-block-code"><code>from g2pM import G2pM
model = G2pM()
sentence = "输入要注音的文本"
Pinyin=model(sentence, tone=True, char_split=False)</code></pre>



<ol class="wp-block-list">
<li>创建多音字字典文档</li>



<li>输入word文档，裁剪文本利用G2pM模型识别</li>



<li>处理返回的拼音数据，只截取多音字的注音并按要求输出word文档</li>
</ol>



<p class="wp-block-paragraph">效果展示：</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="679" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124269-image-1024x679.png" alt="" class="wp-image-1995" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124269-image-1024x679.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124269-image-300x199.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124269-image-768x510.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124269-image.png 1275w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">7 大模型API调用</h3>



<p class="wp-block-paragraph">功能-大模型</p>



<p class="wp-block-paragraph">这里选择Kimi大模型，通过添加提示词，让AI返回结果。</p>



<pre class="wp-block-code"><code>from openai import OpenAI
client = OpenAI(
    api_key = "sk-########################################",
    base_url = "https://api.moonshot.cn/v1",
)
history = &#91;
    {"role": "system", "content": "你是 Kimi，由 Moonshot AI 提供的人工智能助手，你更擅长中文和英文的对话。你会为用户提供安全，有帮助，准确的回答。同时，你会拒绝一切涉及恐怖主义，种族歧视，黄色暴力等问题的回答。Moonshot AI 为专有名词，不可翻译成其他语言。"}
]
def chat(query, history):
    history.append({
    "role": "user", 
    "content": query
    })
    completion = client.chat.completions.create(
        model="moonshot-v1-32k",
        messages=history,
        temperature=0.3,
    )
    result = completion.choices&#91;0].message.content
    history.append({
    "role": "assistant",
    "content": result
    })
    return result
def MakeBiaozhu(input_data):
    output_data = f"你是一位骨灰级国语大师，对下面段落文字中多音字、易读错字，加上注音，放在圆括号内，不需要做出任何解释：'{input_data}'"
    return output_data
def AIDealDoc(input_doc):
    return chat(MakeBiaozhu(input_doc), history)</code></pre>



<p class="wp-block-paragraph">输入输出案例:</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="736" src="https://bithao.com.cn/wp-content/uploads/2025/12/1766124301-image-1024x736.png" alt="" class="wp-image-1996" srcset="https://bithao.com.cn/wp-content/uploads/2025/12/1766124301-image-1024x736.png 1024w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124301-image-300x216.png 300w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124301-image-768x552.png 768w, https://bithao.com.cn/wp-content/uploads/2025/12/1766124301-image.png 1264w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">本方法调用大模型API做垂直领域的应用是可行的，但效果依赖于提示词的使用，同时成本较高。</p>
<p><a href="https://bithao.com.cn/2024/10/13/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e5%a4%9a%e9%9f%b3%e5%ad%97%e4%b8%8e%e6%98%93%e8%af%bb%e9%94%99%e5%ad%97%e6%a0%87%e6%b3%a8%e5%9c%a8%e7%ba%bf%e7%b3%bb%e7%bb%9f/">国科大NLP课程-多音字与易读错字标注在线系统</a>最先出现在<a href="https://bithao.com.cn">haoblog</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://bithao.com.cn/2024/10/13/%e5%9b%bd%e7%a7%91%e5%a4%a7nlp%e8%af%be%e7%a8%8b-%e5%a4%9a%e9%9f%b3%e5%ad%97%e4%b8%8e%e6%98%93%e8%af%bb%e9%94%99%e5%ad%97%e6%a0%87%e6%b3%a8%e5%9c%a8%e7%ba%bf%e7%b3%bb%e7%bb%9f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
