《基于语言模型的行业信息获取系统:设计与实现》

《基于语言模型的行业信息获取系统:设计与实现》

GitHub 链接

GitHub: Awakcn/Industry-Information-Scraper 更新日期:2024/9/13

新增向量评分方案(余弦相似度),优化问答机器人(回答参考网页号输出)等

1. 引言

1.1 研究背景

随着信息技术的快速发展,数据量呈现指数级增长,如何从大量数据中快速、精准地获取有效信息成为了关注的焦点。传统的信息检索系统依赖于关键词匹配,用户需要具备较高的专业知识来构建精确的查询表达式。这种模式在面对复杂的自然语言问题时,表现出一定的局限性。

近年来,基于深度学习的语言模型(如GPT等)在自然语言处理(NLP)领域取得了巨大突破。语言模型能够理解上下文语境,生成自然的语言文本,极大地提高了信息提取和内容生成的能力。通过引入基于语言模型的信息获取系统,用户可以更自然地与系统进行交互,简化信息检索过程,提高获取信息的准确度和效率。

1.2 研究意义

传统的信息检索系统大多基于布尔逻辑或向量空间模型,它们在面对大量结构化或非结构化数据时,存在难以处理模糊查询和复杂语义的问题。此外,随着用户需求的多样化,信息检索系统需要处理多种数据格式,传统方法往往无法有效应对这些复杂的需求。

相比之下,基于语言模型的系统能够通过理解用户输入的自然语言,进行语义层面的分析和匹配,进而提供更智能化的检索体验。这不仅减少了用户学习查询语言的负担,还能提高信息获取的精度和响应速度。因此,基于语言模型的信息获取系统在现代信息服务领域具有广泛的应用前景。

2. 技术架构

2.1 组件描述

  • 用户界面(UI):基于 Gradio 提供的前端界面,用于用户输入和展示结果。
  • 后端服务:处理业务逻辑、数据处理和与外部服务的交互。
    • 关键词生成:通过 OpenAI 的语言模型生成与行业相关的关键词。
    • 网页抓取:从搜索引擎获取与关键词相关的网页链接。
    • 网页内容处理:清理和提取网页文本内容,去除广告和无关信息。
    • 网页分析:使用语言模型对网页内容进行分析,评分并生成报告。

2.2 技术栈

  • 编程语言
    • Python:主要编程语言,用于实现系统的各个功能模块。
  • 部分框架与库
    • Gradio:构建用户界面的工具,提供交互式的网页应用。

    • LangChain:用于处理语言模型的框架,简化了与 OpenAI 模型的交互。

    • Requests:处理 HTTP 请求,用于从搜索引擎获取网页内容。

    • BeautifulSoup:解析和清理 HTML 内容,从网页中提取有用的文本。

    • Fake_UserAgent:生成随机的用户代理,以避免被网站屏蔽。

    • Chardet:检测网页内容的编码格式,确保正确解析。

    • FAISS:高效的相似度搜索库,用于对网页内容进行向量化和搜索。

  • API 与服务
    • OpenAI API:用于语言模型的调用,支持关键词生成和网页内容分析。
    • 搜索引擎:用于获取与关键词相关的网页链接(示例中使用百度)。

2.3 功能设计

生成行业关键词
转化搜索关键词
搜索引擎爬虫
目标网页爬虫
网页内容处理
AI分析分类打分
网页内容智能问答

2.4 模块的导入

import gradio as gr
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import re
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import random
from time import sleep
import re
import chardet

from langchain_openai import embeddings
from langchain.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter

3. 关键词生成与处理模块

3.1 关键词生成

  • 输入:
    • 用户输入: 行业名称。
  • 实现细节:
    • 使用的工具:ChatOpenAI 和 ChatPromptTemplate。
    • 使用的模型:Qwen/Qwen2-7B-Instruct-GGUF - LM Studio - 本地大模型
  • 生成方法:
    • 通过定义的提示模板生成与行业相关的关键词。
  • 关键参数:
    • max_tokens:生成的最大字数。
    • temperature 和 top_p:控制生成内容的多样性和创造性。
  • 输出:
    • 流式输出生成的关键词文本。
def generate_keywords(input):
    llm = ChatOpenAI(base_url="http://localhost:1234/v1", api_key="lm-studio", max_tokens=1280, temperature=0.7, top_p=0.9)
    prompt = ChatPromptTemplate.from_messages([("user", 
'''
请你扮演一名专业的行业分析师,你应该利用你的行业知识和其他相关因素提供专业的分析。

请你给出以下行业以下每个主题各3至5个重要关键词,关键词应包括行业术语、概念或趋势,保证关键词的准确、精炼性和与主题的相关度,逻辑连贯,内容低重复度、有深度。禁止使用":"和"()",避免使用品牌名称或专用词,关键词要易搜索和理解。
行业:{input}

主题:
1. 行业定义
2. 行业分类
3. 行业特征
4. 发展历程
5. 产业链分析
6. 市场规模
7. 政策分析
8. 竞争格局

使用以下格式:
1. <主题1>
- <关键词1>
- <关键词2>
- <关键词3>
- <关键词4>
- <关键词5>

2. <主题2>
- <关键词1>
..
..
8. ..
完成上述任务后,请停止生成任何额外内容。

样例:
1. 行业定义
- 水域资源管理
- 养殖技术进步
- 水产品质量监控
- 海洋生态环境保护
- 农水联动模式

2. 行业分类
- 鱼类养殖
- 虾蟹养殖
- 牛蛙业
- 海参养殖
- 浮游生物养殖

3. 行业特征
- 规模化生产
- 生物多样性
- 投入成本
- 市场周期性
- 环保压力

4. 发展历程
- 人工饲料
- 智能水产养殖
- 全球化市场拓展
- 产业链整合
- 技术驱动革新

5. 产业链分析
- 种苗供应
- 饲料加工
- 养殖基地建设
- 销售和分销

6. 市场规模
- 全球水产养殖产量
- 主要消费国
- 国内市场规模
- 年度报告与预测

7. 政策分析
- 环保政策影响
- 信贷和补贴支持
- 农业补贴调整

8. 竞争格局
- 主要企业竞争态势
- 新进入者威胁
- 品牌差异化策略
- 外资并购与合作
''')])

    str_output_parser = StrOutputParser()
    chain = prompt | llm | str_output_parser

    accumulated_text = ""
    for message in chain.stream({
   "input": input}):
        accumulated_text += message
        yield accumulated_text

3.2 关键词处理

  • 输入:
    生成的关键词: 从“关键词生成”模块获得的文本。
  • 处理步骤:
    分行处理: 通过换行符分隔每个关键词。
    主题分类: 根据文本中的标记识别和分类行业定义和关键词。
  • 实现细节:
    正则表达式: 使用正则表达式提取行业定义和关键词。
    数据结构: 使用字典和列表来存储和处理关键词数据。
  • 输出:
    处理后的关键词: 分类后的关键词列表。
    关键词选项: 为进一步操作生成的关键词选择。
def process_keywords(input):
    lines = input.strip().split("\n")
    industry_keywords = []
    current_topic = ""
    topics = {
   }
    keywords = []
    for line in lines:
        if re.match(r".*?\d+\.\s.*", line):  	# 1. 行业定义
            current_topic = line.split(". ")[1].strip()
            topics[current_topic] = []
        elif re.match(r".*?-\s.*", line):      	# - 行业关键词
            keyword = line.split("- ")[1].strip()
            topics[current_topic].append(keyword)
            industry_keywords.append((current_topic, keyword))
            keywords.append(keyword)

    accumulated_text = ""
    for topic, keyword in industry_keywords:
        accumulated_text += f"{
     keyword}\n"

    return accumulated_text, keywords_to_option(input)
    
def keywords_to_option(input):
    lines = input.strip().split("\n")
    industry_keywords = []
    current_topic = ""
    topics = {
   }
    keywords = []
    for line in lines:
        if re.match(r".*?\d+\.\s.*", line):  	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值