鱼C论坛

 找回密码
 立即注册
查看: 143|回复: 5

[数据结构] 如何训练AI【悬赏】

[复制链接]
发表于 5 天前 | 显示全部楼层 |阅读模式
10鱼币
有大佬能教我如何训练自动爬虫+DeepSeek或chatgpt接口迅速分析的AI嘛

目前等级比较低所以没法给太多育碧,只能10个,但是如果把我教会了肯定给你补满100鱼币,能找管理员作证
要为下个月的大赛做准备,到时候题目不确定,但是差不多类似的,也没找到能教明白我的人

主要目标是设计一个图形化程序,能够从亚马逊,shoppee和淘宝三个平台上,爬虫获取任何旗下的任何商品的,在三年内任意月份的所有购后评论,然后对评论进行分类,打个比方,按照经济学的基本保健因素(产品质量,物流时效,包装完好性,平台/支付安全感),期望类功能性需求(价格与性价比,售后与客服响应,使用便利度,比如说明书好不好理解啥的)

然后给商家10个以内的优化建议(就是分析综合问题)
这期间就免不了要从很多纯属泄愤,玩梗和就说一个什么什么很差,的评论里跳出来有意义的东西,所以就要用到AI机器学习。

而且搜索要精准,亚马逊平台维护的比较好基本都是正版,但是淘宝上就有很多二手贩子了,那个就要避开,只要旗舰店和官方店。

我目前准备了亚马逊,shoppee和淘宝每个平台300万条评论作为训练集和测试集。都是从kaggle和github上找到的,理论上讲没什么问题。
就是不知道接下来怎么实操(我学理论课程以来这回是第一次实操)。

实现方法要编写一个图形化程序,有几个询问框
第一个是问你搜那个公司,品牌或者集团的,比如大疆无人机或者苹果
第二个是问你想要搜的品类或者品名,比如苹果16promax,大疆第五代能从水里起飞那个(我也不知道叫啥
第三个是问你想搜哪个平台,只能上面那三个选,或者都选,其他的京东啥的那就不行
第四个是问你时间范围,三年内随便你选,比如6个月内的,2个月内的,或者也可以指定时间,比如三年内某一年的几月到几月,比如(2024.6.7 - 2025.8.9)精确到日的那种(这个应该不难,精确到小时到分钟应该都没啥问题

然后开始爬虫搜索,搜完以后按照我们事先训练好的AI来分析处理(这个我不确定是否还要外接一个chatgpt或者deepseek了,还是说要自己手搓一个AI,反正我也有训练集和测试集)

deepseek专业版本团队版本满配的接口我拿到了,这个不需要担心,比赛服账号,开赛前一个月到开赛后3天都可以使用,用来练习什么的

想看看有没有大佬能教教我怎么具体实现,带带我做第一次实操(虽然题目是我自己编的和实际比赛估计有不小差别)
什么数据清洗投喂爬虫(爬虫还得小心点别ip给封了

最佳答案

查看完整内容

1) DeepSeek 接口——最短路径三步走 Step A. 安装与密钥 Step B. 基本调用(用OpenAI SDK,改 base_url 即可) 基础域名:https://api.deepseek.com 模型名:deepseek-chat(V3),或 deepseek-reasoner(R1) Chat Completions 路径:/chat/completions 认证:HTTP Bearer(Authorization: Bearer ) 官方文档明确支持上述方式,并提供Python示例。 Step C. 结构化输出(JSON模式) 把 res ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 5 天前 | 显示全部楼层
小鸭不学习 发表于 2025-8-20 19:45
按照你说的,数据洗完了,然后刚刚把字典什么的添加进来,就是字典太少了,只有32kb的关键词检索,不知道 ...

1) DeepSeek 接口——最短路径三步走

Step A. 安装与密钥

  1. pip install openai
  2. # mac/linux
  3. export DEEPSEEK_API_KEY="你的密钥"
  4. # windows (PowerShell)
  5. setx DEEPSEEK_API_KEY "你的密钥"
复制代码


Step B. 基本调用(用OpenAI SDK,改 base_url 即可)

基础域名:https://api.deepseek.com

模型名:deepseek-chat(V3),或 deepseek-reasoner(R1)

Chat Completions 路径:/chat/completions

认证:HTTP Bearer(Authorization: Bearer <key>)

官方文档明确支持上述方式,并提供Python示例。

  1. from openai import OpenAI
  2. import os
  3. client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"),
  4.                 base_url="https://api.deepseek.com")
  5. resp = client.chat.completions.create(
  6.     model="deepseek-chat",
  7.     messages=[
  8.         {"role":"system","content":"You are a helpful assistant."},
  9.         {"role":"user","content":"ping"}
  10.     ],
  11.     stream=False
  12. )
  13. print(resp.choices[0].message.content)
复制代码


Step C. 结构化输出(JSON模式)

把 response_format={"type":"json_object"} 打开,并在提示里明确“只输出合法JSON”,DeepSeek文档专门强调要在提示里包含“json”及输出示例。

2) 把 DeepSeek 接到你现有 Starter(直接粘贴)

在你的项目里,把core/classify.py里的 llm_classify 用下面版本替换/补上(无需改动UI):

  1. # core/classify.py 中加入/替换
  2. import os, json, time
  3. from typing import List, Dict
  4. from openai import OpenAI
  5. from .taxonomy import TAXONOMY

  6. def _batched(seq, n):
  7.     for i in range(0, len(seq), n):
  8.         yield seq[i:i+n]

  9. def llm_classify(rows: List[Dict],
  10.                  model: str = "deepseek-chat",
  11.                  batch_size: int = 40,
  12.                  temperature: float = 0.0,
  13.                  max_tokens: int = 1500,
  14.                  retries: int = 3,
  15.                  sleep_s: float = 2.0) -> List[Dict]:
  16.     """
  17.     用 DeepSeek 对评论做多标签分类 + 负面判断。
  18.     输入 rows 的字段至少包含:review_text, seller, store_type
  19.     输出字段对齐 classify_batch:labels / is_negative / (可选 is_official)
  20.     """
  21.     client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"),
  22.                     base_url="https://api.deepseek.com")

  23.     allowed_labels = list(TAXONOMY.keys())

  24.     sys_prompt = f"""
  25. You are a multilingual e-commerce review classifier.
  26. Return STRICT json only.
  27. The final JSON schema:
  28. {{
  29.   "results": [{{"idx": int, "labels": [str], "is_negative": bool, "is_official": bool}}]
  30. }}
  31. Allowed labels (choose zero or more, must be subset of this list):
  32. {allowed_labels}
  33. Label meanings (zh/brief): {TAXONOMY}
  34. Rules:
  35. - Classify each item independently.
  36. - Detect negativity: true if strong complaint/defect/delay/refund/fake, else false.
  37. - is_official: true if seller/store_type implies official/flagship/self-run; else false.
  38. - If pure meme/noise/not about product, use ["other_noise"] only.
  39. Output valid JSON. No extra text.
  40. """

  41.     out = []
  42.     for batch in _batched(rows, batch_size):
  43.         items = []
  44.         for i, r in enumerate(batch):
  45.             items.append({
  46.                 "idx": i,
  47.                 "text": (r.get("review_text") or "")[:2000],  # 防止超长
  48.                 "seller": r.get("seller",""),
  49.                 "store_type": r.get("store_type","")
  50.             })

  51.         user_payload = {"items": items}
  52.         messages = [
  53.             {"role":"system","content": sys_prompt},
  54.             {"role":"user","content": "json\n" + json.dumps(user_payload, ensure_ascii=False)}
  55.         ]

  56.         for attempt in range(retries):
  57.             try:
  58.                 resp = client.chat.completions.create(
  59.                     model=model,
  60.                     messages=messages,
  61.                     temperature=temperature,
  62.                     response_format={"type":"json_object"},
  63.                     max_tokens=max_tokens,
  64.                 )
  65.                 data = json.loads(resp.choices[0].message.content)
  66.                 result_map = {e["idx"]: e for e in data.get("results", [])}
  67.                 # 合并回原始行
  68.                 for i, r in enumerate(batch):
  69.                     e = result_map.get(i, {})
  70.                     merged = dict(r)
  71.                     merged["labels"] = e.get("labels", ["other_noise"])
  72.                     merged["is_negative"] = bool(e.get("is_negative", False))
  73.                     # 也保留规则版 is_official(若LLM没给)
  74.                     merged["is_official"] = bool(e.get("is_official", r.get("is_official", False)))
  75.                     out.append(merged)
  76.                 break
  77.             except Exception as ex:
  78.                 if attempt == retries - 1:
  79.                     # 最后一次仍失败:保底 fall back
  80.                     for r in batch:
  81.                         rr = dict(r)
  82.                         rr.setdefault("labels", ["other_noise"])
  83.                         rr.setdefault("is_negative", False)
  84.                         rr.setdefault("is_official", r.get("is_official", False))
  85.                         out.append(rr)
  86.                 time.sleep(sleep_s)
  87.     return out
复制代码


model="deepseek-chat"(V3)足够做分类;若要更强推理,可改deepseek-reasoner(R1)。

response_format={"type":"json_object"}+提示里明确JSON,能最大化保证可解析结构输出。

若遇到间歇性空内容/高压流量,请重试/退避,或换成流式(stream)并解析SSE。官方也有速率/错误码说明。

把UI切到LLM分类

在 app/streamlit_app.py 里把:

  1. from core.classify import classify_batch
复制代码


临时改成:
  1. from core.classify import classify_batch, llm_classify
复制代码


并在点击“开始分析”后,用你想要的路径(先跑规则,再跑LLM纠错,或直接LLM):

  1. # baseline
  2. classified = classify_batch(rows)

  3. # 只对“边界样本/负面样本/高价值SKU”再走 LLM(示例:全量直接LLM)
  4. # classified = llm_classify(rows, model="deepseek-chat", batch_size=40)
复制代码


3) 32KB 字典够不够?怎么“写成标签训练集”

结论:完全可以先作为弱监督的“种子字典”,把 900万评论自动打上多标签,做一个“一遍过”的训练集。

再训一个小模型(TF-IDF→Linear SVM/LogReg,或 fastText)。

之后用 DeepSeek 抽检并纠错边界样本,回填修正标签,得到迭代更干净的训练集。

最小训练脚本示例(可新建 scripts/train_svm.py):

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MultiLabelBinarizer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.multiclass import OneVsRestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report

# 1) 用你的“字典打标器”先生成 labels 列(List[str])
df = pd.read_csv("your_clean_reviews.csv")  # 至少有 review_text
# 假设你已用规则把每条评论变成多标签列表
# df["labels"] = [["product_quality","price_value"], ...]
df = df[df["labels"].map(len) > 0]

# 2) 向量化 + 多标签训练
X_train, X_test, y_train, y_test = train_test_split(
    df["review_text"], df["labels"], test_size=0.1, random_state=42, stratify=df["labels"].map(lambda x: x[0] if x else "none")
)
vec = TfidfVectorizer(max_features=200000, ngram_range=(1,2), min_df=3)
Xtr = vec.fit_transform(X_train)
Xte = vec.transform(X_test)

mlb = MultiLabelBinarizer()
Ytr = mlb.fit_transform(y_train)
Yte = mlb.transform(y_test)

clf = OneVsRestClassifier(LogisticRegression(max_iter=200, n_jobs=8))
clf.fit(Xtr, Ytr)
pred = clf.predict(Xte)
print(classification_report(Yte, pred, target_names=mlb.classes_))
# 保存 vec / clf / mlb 备用


字典扩展建议(很快见效)

对每个标签统计高PMI/卡方的新词,把Top候选加入字典。

为中英/东南亚语种准备同义词/常见错拼/口语写法/emoji变体。

负样本挖掘:抽取模型命中概率低但被人工判定为该类的样本,反向补词。

4) 封装与风控小贴士(很短)

并发与退避:批处理 40 条左右一呼叫,失败指数退避;注意 429/503/500 处理。官方错误码有说明。
DeepSeek API Docs

JSON模式:务必在提示+response_format双重声明;并设置足够 max_tokens,避免JSON被截断。
DeepSeek API Docs

官方合规:平台评论尽量走官方API/导出或你已有数据;避免绕过访问控制。

仅官方/旗舰过滤:保留“Apple官方旗舰店/自营/Official”等店铺;疑似二手/翻新用标签单独统计,便于报告里提示。

5) 现在建议你立刻做的“最小交付清单”

用你清洗好的CSV跑一遍基线分类(已在Starter里)。

接上面的 llm_classify,对一个可展示的数据切片跑DeepSeek版分类,导出CSV/JSON报告。

根据Top负面标签自动生成≤10条建议(Starter已内置),人工再润色2句,把证据样例(原文评论)贴进报告。

若还想上一个“本地模型版”,就用弱监督标注→跑上面train_svm.py,把推理结果与LLM结果对齐做个对照图表。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 5 天前 | 显示全部楼层
很类似我以前和tyh一起弄的chatgpt回答
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
一、总体思路(先跑通→再变强)

采集层(合规优先)

优先用官方API/商家后台导出/你已有Kaggle&GitHub评论数据。

三个平台分别做成Adapter:providers/amazon.py|shopee.py|taobao.py,输出统一字段。

过滤“官方/旗舰店/自营”,避免二手:基于店铺名与平台给的“官方/认证”标记做规则过滤。

清洗与归一

语言识别(中英东南亚多语)→统一到中/英处理(必要时做翻译)。

去重、时间筛选(支持精确到日)、无效/玩梗/灌水过滤。

分类与情感

MVP:关键词/规则基线(已实现)。

升级A:本地轻量模型(TF-IDF+线性 / fastText / 蒸馏小模型)。

升级B:DeepSeek/ChatGPT做零/少样本分类(高准确、可控成本)。

混合:先用小模型批量跑,再让LLM只纠错“边界样本”。

洞察与建议

基于负面样本Top标签聚合问题→产出≤10条可执行优化建议(现已内置模板)。

报告导出CSV/JSON(MVP已做),后续可加PDF/PPT。

用 Streamlit 快速搭好四个输入框(品牌/品类/平台/时间),点“开始分析”直接跑(已实现)。

二、你拿到的Starter包含什么

app/streamlit_app.py:已实现四个输入项+结果表格+建议+导出按钮。

core/taxonomy.py:基于“保健因素/期望因素”的标签集,可随时改。

core/classify.py:规则基线分类器,留好LLM接入占位。

core/suggest.py:把Top问题转为≤10条行动化建议。

providers/*.py:三平台适配器占位(空实现,强调合规)。

data/sample_reviews.csv:双语示例数据,可直接跑通。

requirements.txt:轻量依赖(不含大模型)。

README.md:启动命令与合规注意点。

启动(本地Python环境):

  1. pip install -r requirements.txt
  2. streamlit run app/streamlit_app.py
复制代码

上传你自己的CSV(列名与示例一致)即可看到完整流程。

三、分类标签设计(可直接用/可自定义)

保健因素:产品质量/做工、物流时效、包装完好、平台/支付安全

期望因素:价格与性价比、售后与客服响应、易用性/说明书、功能/性能

风险辅助:是否官方/正品、疑似二手/翻新/假货、无效/玩梗

训练集大、语言多时:建议对不同语种各自做关键词表,或直接走LLM零样本。

四、如何把MVP升到比赛版本(两条路线)

路线A:本地轻量模型(经济省心)

目标:在你的900万样本上训练一个可离线推理的小模型。

弱监督起步:用classify.py里的关键词规则给全量打“弱标签”。

抽检与纠错:从每类抽样,用DeepSeek做校正,回填修正标签。

训练:

方案1:TF-IDF + 线性SVM/LogReg(多标签→One-vs-Rest),十几分钟可出一个好基线;

方案2:fastText(多语可训练多份);

方案3:蒸馏小模型(如MiniLM多语)微调,显存友好。

上线:模型文件固化在本地/服务器,推理极快;LLM只在低置信度时兜底。

路线B:LLM主导(速度与灵活性)

目标:DeepSeek/ChatGPT直接做多标签分类与摘要。

分块批处理,加系统提示固定标准:

输出JSON,字段包括labels[]/is_negative/reasons。

给每个标签下2~3条定义与正反例。

成本控制:

先小模型筛“明显样本”,LLM只处理“边界样本”;

合并同质短评为“簇摘要”→LLM对摘要判类,极省token。

稳定性:用函数调用/JSON模式强约束输出结构。

五、旗舰店/官方店过滤(反“二手/翻新”)

规则:店铺名/店铺类型含官方/旗舰/自营/Official,平台侧存在“官方认证/Preferred+”即命中。

评论文本中出现假货/二手/翻新/serial mismatch等关键词,额外打上counterfeit_or_used标签便于复核。

只在平台允许与数据字段可得的前提下使用;必要时让用户在UI中手动勾选“仅官方/旗舰”。

六、采集与合规(务必注意)

优先:官方API/商家后台导出/你已有的公开数据集;

遵守各平台条款和当地法律,不要规避验证码/登录/加密等访问控制;

控速:合理并发、重试、缓存与断点续传,避免对网站造成负载;

保留证据链:记录SKU、店铺、时间窗,报告里给样例原文与统计口径。

我在providers/*.py只给了接口占位(未包含任何绕过风控的实现),你可基于合规数据源去填充。

七、评估与交付

分类:分平台/分语种看P/R/F1;对负面Top样本做人工抽检。

趋势:按月/周看每个标签的占比变化,检测“新爆点”。

报告:10条内建议 + 证据(样例评语/占比/时间段),导出CSV/JSON,后续可加PDF/PPT模板。

八、你的下一步(建议一周冲刺节奏)

Day 1–2:用你的3×300万评论喂给MVP(CSV方式),跑通UI与分类结果。
Day 3–4:做“弱监督→小模型”训练,拿到第一版本地模型。
Day 5:引入DeepSeek作“边界样本纠错+建议润色”。
Day 6–7:完善旗舰店过滤、时间窗、报告模板与演示数据。

评分

参与人数 1鱼币 +1 收起 理由
小鸭不学习 + 1 我为啥一次只能加一个鱼币ToT

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
不二如是 发表于 2025-8-20 19:26
一、总体思路(先跑通→再变强)

采集层(合规优先)

按照你说的,数据洗完了,然后刚刚把字典什么的添加进来,就是字典太少了,只有32kb的关键词检索,不知道够不够。然后要写字典到机器学习训练的标签分类

但是deepseek接口怎么弄啊?

还有就是今天晚上就全部弄完有希望么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
不二如是 发表于 2025-8-20 20:22
1) DeepSeek 接口——最短路径三步走

Step A. 安装与密钥

谢啦!!不愧是不二哥,真的有效,刚刚试了一下全部成功了
直接给到最佳,然后我每天评分把剩下的90鱼币给了,没法一次性付清我目前等级不够
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-24 15:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表