成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數據采集新篇章:AI與大模型的融合應用

原創 精選
人工智能
文章概述了在AIGC應用中,大型語言模型(LLM)的重要性及其在實時數據處理方面的局限性。進而介紹了通過網絡爬蟲技術結合LLM的方法,旨在克服這些限制,通過實時網絡請求、HTML內容加載與轉換,以及LLM進行的數據抽取和摘要生成,實現對網絡資源的有效抓取和分析。

作者 | 崔皓

審校 | 重樓

開篇

在AIGC(人工智能與通用計算)應用中,大型語言模型(LLM)占據著舉足輕重的地位。這些模型,如GPT和BERT系列,通過處理和分析龐大的數據集,已經極大地推動了自然語言理解和生成的邊界。它們在多種應用中表現出色,如文本生成、語言翻譯、情感分析等,對提高工作效率和展開創新的應用場景起著關鍵作用。

然而,LLM在處理實時數據方面存在一定的局限性。這些模型主要基于大量歷史數據進行訓練,因此,在理解和分析實時或最新信息時可能不夠靈敏。在應對新興話題或最新發展趨勢時,LLM可能無法提供最準確的信息,因為這些內容可能尚未包含在其訓練數據中。此外,LLM在快速處理和反應實時變化方面也面臨挑戰,尤其是在需要分析和反映最新市場動態、政策變化或社會事件時。

既然我們已經意識到了大型語言模型(LLM)在處理實時數據方面的局限性,那么下一步就是探索如何通過Web Research技術突破這一限制。下面的內容將專注于如何通過網絡爬蟲技術結合LLM,實現對實時網絡資源的有效獲取和分析。

整體思路

Web Research 結合 LLM 的整體思路是復雜的過程,旨在利用大型語言模型的自然語言處理能力,實現對互聯網數據的高效處理和分析。如下圖所示,我們將整個過程進行拆解

1. 實時網絡請求:首先,對目標網站發起實時請求,以獲取最新的數據和內容。

2. 獲取HTML頁面:使用網站的URLs來訪問和加載HTML頁面,此時,網頁的數據將被加載到內存中。

3. 內容轉換:隨后,將加載的HTML頁面轉換為文本信息,為后續的處理步驟做準備。這通常涉及去除HTML標記和格式化內容,以提取純文本數據。

4. 數據存儲和分類:轉換后的文本數據可以存儲在向量庫中,以便于進行高效的檢索和分析。同時,可以利用LLM對內容進行分類和組織,以便快速訪問相關信息。

5.生成摘要:最后,利用LLM的功能調用來生成文本數據的摘要。這不僅包括提取關鍵信息,還可能涉及對數據進行綜合和解釋,以便用戶能夠快速理解內容的核心要點。

通過這樣的流程,我們能夠結合LLM的強大文本處理功能和網絡爬蟲技術的實時數據訪問能力,有效地處理和分析大量的在線信息。這種方法不僅提高了信息處理的速度和準確性,而且通過摘要和分類,使得用戶能夠更容易地獲取和理解需要的數據。

關鍵問題

為了驗證Web爬蟲和大型語言模型結合的研究思路是否切實可行,可以以知名新聞網站Wall Street Journal(華爾街日報)為例進行實證分析。假設從該網站的首頁,獲取實時的新聞信息,并且將這些信息進行抽取,最終保存為包括“標題”和“摘要”的結構化信息, 以便后續查找和分析。從過程描述發現,將面臨三個主要的技術挑戰:加載、轉換以及通過LLM進行內容抽取。

1.加載HTML:我們可以訪問 https://www.wsj.com,使用網絡爬蟲工具獲取網站的HTML內容。這一步涉及發送HTTP請求并接收返回的網頁代碼。

2. 轉換為文本:分析該網站的HTML結構表明,文章標題和摘要信息通常包含在`<span>`標簽中。如下圖所示,文章的標題是在`<span>`標簽中

如下圖所示,我們觀察到,文章的摘要也是保存在<span>標簽中。

因此需要利用HTML解析庫,如BeautifulSoup,從HTML中提取這些標簽的內容,并將其轉換為純文本格式。

3. LLM處理:有了純文本數據后,我們將使用大型語言模型來進一步處理這些文本。這可能包括內容分類、關鍵信息提取、摘要生成等。

在這個例證中,我們將如何確保網絡爬蟲精準地抓取所需信息,以及如何調整大型語言模型以精確處理和提取有價值的內容,都是需要解決的問題。通過成功實施這一流程,我們不僅驗證了LLM與Web爬蟲結合的有效性,還進一步探索了如何通過自動化工具提高研究和分析的效率。

數據加載

通過上面對關鍵問題的分析,讓我們先為即將進行的技術旅程做好準備。從網頁內容的加載到信息的轉換,再到利用LLM提取關鍵數據,都是構建有效網絡研究工具的關鍵環節。

首先,我們將面對的挑戰是如何高效地加載網頁內容。異步HTML加載器(AsyncHtmlLoader)扮演著至關重要的角色。使用aiohttp庫構建的AsyncHtmlLoader能夠進行異步HTTP請求,非常適合于簡單輕量級的網頁抓取工作。這意味著它能夠同時處理多個URL的請求,提高了數據抓取的效率,特別是當我們需要從多個網站快速獲取信息時。

對于那些更復雜的網站,其中的內容可能依賴于JavaScript渲染,我們可能需要更強大的工具,例如AsyncChromiumLoader。這個加載器利用Playwright來啟動一個Chromium實例,它不僅可以處理JavaScript渲染,還可以應對更復雜的Web交互。Playwright是一個強大的庫,支持多種瀏覽器自動化操作,其中Chromium就是一個被廣泛支持的瀏覽器。

Chromium可以在無頭模式下運行,即沒有圖形用戶界面的瀏覽器,這在網頁抓取中很常見。在無頭模式下,瀏覽器后臺運行,執行自動化任務,而用戶不會看到任何的瀏覽器窗口。這樣的操作對于服務器端的抓取任務尤其有用,因為它們可以模擬瀏覽器中的完整用戶交互過程,而不需要實際顯示界面。

無頭模式,或稱為“無界面模式”,是一種在不打開圖形界面的情況下運行應用程序的方式。想象一下,你的電腦在執行一些任務,如下載文件、刷新數據或運行一個復雜的計算過程,而這一切都在沒有打開任何窗口的情況下靜靜進行。這正是無頭模式的工作原理。

在Web開發和自動化測試領域,無頭模式尤為有用。例如,開發者可能需要測試一個網頁在不同瀏覽器中的表現,但并不需要真正地視覺上檢查這些網頁,而是要檢查代碼的運行結果。在這種情況下,他們可以使用無頭模式的瀏覽器來模擬用戶的行為,如點擊鏈接、填寫表單等,同時瀏覽器本身不會在屏幕上顯示。

實際上我們介紹了AsyncHtmlLoaderAsyncChromiumLoader兩種加載器,本例中我們使用前者就足夠了,其示例代碼如下:

from langchain.document_loaders import AsyncHtmlLoader
urls = ["https://www.wsj.com"]
loader = AsyncHtmlLoader(urls)
docs = loader.load()

代碼創建一個加載器實例并傳入需要抓取的URL列表。隨后,調用`load`方法就會異步加載這些頁面的內容。

文本轉換

解決了數據加載的問題,讓我們把目光向文本轉換。文本轉換是網絡爬蟲技術中的一個重要環節,它負責將抓取的HTML內容轉換成便于處理的純文本格式。在這一階段,我們可以選用不同的工具,根據不同的需求來實現這一轉換。

首先是HTML2Text,這是一個直接將HTML內容轉換為純文本的工具,生成的格式類似于Markdown。這種轉換方法適合于那些目標是提取可讀文本而不需要操作特定HTML標簽的場景。它簡化了轉換流程,能夠迅速提供一個干凈的文本版本,適合閱讀和進一步分析。

而Beautiful Soup則提供了更細粒度的控制能力。使用Beautiful Soup,我們可以執行特定標簽的提取、刪除和內容清理,這對于需要從HTML內容中提取特定信息的場景來說非常適合。例如,如果我們需要從一個新聞網站中提取文章標題和摘要,而這些內容是通過`<span>`標簽來標識的,Beautiful Soup就可以精確地定位這些標簽并提取它們的內容。

在實際操作中,我們可以先使用AsyncHtmlLoader來加載目標網站的文檔。接著,我們可以使用Html2TextTransformer來對加載的HTML文檔進行轉換。如下代碼所示:

from langchain.document_loaders import AsyncHtmlLoader
from langchain.document_transformers import Html2TextTransformer
urls = ["https://www.wsj.com"]
loader = AsyncHtmlLoader(urls)
docs = loader.load()
html2text = Html2TextTransformer()
docs_transformed = html2text.transform_documents(docs)

以上代碼演示了如何將加載的HTML文檔轉換為文本。這樣,我們就可以得到一個文本版本的文檔,其中包含了從原始HTML中提取出來的文本內容。

信息抽取

當我們準備好了數據之后,接下來的重要步驟是數據的抽取,這是大型語言模型(LLM)發揮作用的時刻。網絡爬蟲面臨的挑戰之一是現代網站布局和內容不斷變化,這要求我們不停地修改爬蟲腳本以適應這些變化。通過結合OpenAI的功能調用(Function)和抽取鏈(Extraction Chain),我們可以避免在網站更新時不斷更改代碼。

為了確保我們能夠使用OpenAI Functions特性,我們選擇使用`gpt-3.5-turbo-0613`模型。同時,為了降低LLM的隨機性,我們將溫度參數(temperature)設置為0。

from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")

接下來,我們定義一個數據抽取模式(Schema),以指定我們想要抽取的數據類型。在這里,關鍵字的命名非常重要,因為它們告訴LLM我們想要的信息類型。所以,描述時要盡可能詳細。

例如,在本例中,我們想要從華爾街日報網站抽取新聞文章的標題和摘要。

from langchain.chains import create_extraction_chain
schema = {
    "properties": {
        "news_article_title": {"type": "string"},
        "news_article_summary": {"type": "string"},
    },
    "required": ["news_article_title", "news_article_summary"],
}

然后,我們可以定義一個抽取函數,它使用定義的模式和LLM來運行內容抽取。

def extract(content: str, schema: dict):
    return create_extraction_chain(schema=schema, llm=llm).run(content)

通過這種方式,LLM可以從文本中精確地抽取出我們需要的信息,并生成我們需要的結構化數據。這種結合了LLM的抽取鏈的方法,不僅提高了數據處理的準確性,也極大地簡化了我們處理網站內容變化的工作。

代碼實施

解決三個關鍵文字之后,我們將生成整體代碼如下,代碼展示了如何使用Playwright結合LangChain庫來實現一個完整的網絡爬蟲和內容抽取的工作流。

import pprint
from langchain.text_splitter import RecursiveCharacterTextSplitter
def scrape_with_playwright(urls, schema):
    loader = AsyncChromiumLoader(urls)
    docs = loader.load()
    bs_transformer = BeautifulSoupTransformer()
    docs_transformed = bs_transformer.transform_documents(
        docs, tags_to_extract=["span"]
    )
    print("Extracting content with LLM")
    # Grab the first 1000 tokens of the site
    splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
        chunk_size=1000, chunk_overlap=0
    )
    splits = splitter.split_documents(docs_transformed)
    # Process the first split
    extracted_content = extract(schema=schema, content=splits[0].page_content)
    pprint.pprint(extracted_content)
    return extracted_content
urls = ["https://www.wsj.com"]
extracted_content = scrape_with_playwright(urls, schema=schema)

下面是代碼解釋:

1. 首先,導入了必要的庫和工具,包括用于打印的`pprint`和LangChain中的文本拆分器`RecursiveCharacterTextSplitter`。

2. 定義了一個`scrape_with_playwright`函數,該函數接收`urls`和`schema`作為參數。這里的`urls`是想要爬取的網站地址列表,而`schema`定義了想要從這些網頁中抽取的數據結構。

3. 在函數內部,創建了一個`AsyncChromiumLoader`實例并傳入了URL列表。這個加載器負責異步獲取每個URL對應網頁的HTML內容。

4. 接著,使用Beautiful Soup轉換器`BeautifulSoupTransformer`來處理加載的HTML文檔。在這個例子中,我們特別關注于`<span>`標簽,因為我們假設這些標簽包含了新聞文章的標題和摘要信息。

5. 使用`RecursiveCharacterTextSplitter`創建一個分割器實例,它基于給定的`chunk_size`(這里是1000個字符)來拆分文檔內容。這是為了處理大型文檔時,能夠將其分割成小塊以適應LLM處理的限制。

6. 處理拆分后的第一部分內容,并通過`extract`函數(需要定義)來抽取出符合`schema`定義的數據。

7. 最后,使用`pprint`打印出抽取的內容,并將其作為函數的返回值。

這個流程從頭到尾將網頁爬取、內容轉換和數據抽取整合在一起,形成了一個端到端的解決方案,可以在不需要人工干預的情況下從網頁中提取有結構的數據。

查看結果如下圖所示,由于網頁內容比較多,我們選取其中一組數據來觀察,這里將新聞的標題和摘要進行了分割。

同時,結合之前研究網站頁面的截圖進行參考如下,“House Authorizes Formally Opening GOP’s Biden Impeachment Probe”這篇文章被我們通過網頁加載、文本轉換,大模型抽取的方式獲得了。

總結

本文詳細說明了利用網絡爬蟲技術和LLM結合的流程,通過案例分析驗證了這一思路的可行性。從實時獲取華爾街日報網站的數據開始,文章闡述了如何通過異步HTML加載器、文本轉換工具、以及LLM進行精準的內容抽取,最終形成一個自動化、高效的網絡研究工具。這不僅展示了LLM與網絡爬蟲技術結合的強大潛力,還探討了如何提高研究和分析效率。

作者介紹

崔皓,51CTO社區編輯,資深架構師,擁有18年的軟件開發和架構經驗,10年分布式架構經驗。

責任編輯:華軒 來源: 51CTO
相關推薦

2025-01-14 10:56:14

2024-10-22 12:01:46

華為

2017-06-09 14:12:12

大數據 產業

2022-03-08 12:25:50

物聯網智慧城市技術

2023-07-27 16:21:35

2012-08-01 14:48:09

信息化

2017-04-28 13:00:42

語音識別人工智能

2012-11-23 09:31:34

大數據云計算

2017-07-09 09:48:08

2016-03-07 20:21:33

華為

2013-09-25 09:29:45

Android碎片化Google

2024-10-25 16:46:17

2010-08-24 10:07:48

IMOS Inside安防監控H3C

2012-07-27 21:54:32

聯想SAP移動應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久综合九九 | 亚洲电影专区 | 狼人伊人影院 | 国产日韩欧美中文 | 欧美9999| 国产视频精品视频 | 国产一区二区三区久久久久久久久 | 日韩一区二区在线播放 | 超碰成人在线观看 | 国产乱肥老妇国产一区二 | 日韩视频在线播放 | 日本高清视频在线播放 | 精品一区二区三区四区五区 | 久久久久中文字幕 | 国产精品久久久久久久久久久久 | 一区二区三区四区在线视频 | caoporn国产精品免费公开 | 亚洲综合一区二区三区 | 亚洲欧洲在线看 | 中文精品视频 | 夜夜av| 国产成人免费视频 | 国产精品99久久久久久久久久久久 | 亚洲一区二区三区在线视频 | 在线免费毛片 | 国产成人久久av免费高清密臂 | 欧美日韩一 | 久久久无码精品亚洲日韩按摩 | 久久久久久久国产精品 | 一区二区三区视频在线观看 | 午夜视频在线观看视频 | 国产午夜精品一区二区三区嫩草 | 久久精品一区 | 久草久草久草 | 久久久91精品国产一区二区三区 | 蜜桃av鲁一鲁一鲁一鲁 | 日韩免费视频一区二区 | 久草精品视频 | 91精品国产综合久久香蕉922 | 婷婷一级片 | 日韩色图在线观看 |