自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大模型揭秘:如何從用戶評論中提煉金礦

原創(chuàng) 精選
人工智能
本文探討了如何利用大型語言模型和LangChain庫來分析和抽取用戶評論中的關(guān)鍵信息。文章首先描述了運(yùn)營團(tuán)隊(duì)面臨的挑戰(zhàn),即如何從大量的用戶評論中獲取有價(jià)值的數(shù)據(jù)。

作者 | 崔皓

審校 | 重樓

摘要

本文探討了如何利用大型語言模型和LangChain庫來分析和抽取用戶評論中的關(guān)鍵信息。文章首先描述了運(yùn)營團(tuán)隊(duì)面臨的挑戰(zhàn),即如何從大量的用戶評論中獲取有價(jià)值的數(shù)據(jù)。然后,介紹了使用LangChain的extraction chain和tagging chain來解決這一問題的具體步驟和代碼實(shí)現(xiàn)。最后,文章還探討了如何通過雷達(dá)圖可視化用戶反饋,以更直觀地了解用戶對產(chǎn)品或服務(wù)的感受。

開篇

你有沒有遇到過這樣的場景?公司的運(yùn)營團(tuán)隊(duì)需要通過用戶評論來了解一個(gè)新產(chǎn)品在市場上的接受程度,以便更好地制定未來的運(yùn)營策略。爬用戶評論雖然容易但是抽取和分析數(shù)據(jù)是個(gè)難題。

在大型語言模型之前,數(shù)據(jù)分析依賴于基礎(chǔ)統(tǒng)計(jì)、手工標(biāo)簽和簡單機(jī)器學(xué)習(xí)模型。這些方法不僅耗時(shí)耗力,還需要專業(yè)工具和復(fù)雜的規(guī)則維護(hù)。因此,分析大規(guī)模或非結(jié)構(gòu)化數(shù)據(jù)往往效果有限。處理用戶評論這樣非結(jié)構(gòu)化的數(shù)據(jù),為大型語言模型的應(yīng)用提供了廣闊的舞臺。

需求背景

在當(dāng)前的商業(yè)環(huán)境下,用戶評論已經(jīng)成為了衡量產(chǎn)品或服務(wù)質(zhì)量的重要指標(biāo)。運(yùn)營團(tuán)隊(duì)經(jīng)常需要依賴這些信息來調(diào)整產(chǎn)品特性或優(yōu)化營銷策略。但是,如何從大量的用戶評論中提取有用信息,然后將這些信息轉(zhuǎn)化為可行的戰(zhàn)略,仍然是一個(gè)挑戰(zhàn)。

我們一些用戶評論的例子分析一下,我們從網(wǎng)絡(luò)爬取了一些用戶的評論信息,從信息上可以看出用戶針對手機(jī)產(chǎn)品的一些特性進(jìn)行了評論,包括攝像頭,屏幕,性能等。在評論內(nèi)容中還帶有一些用戶的個(gè)人感情,例如:客服給力,非常滿意等等。

風(fēng)之子: 我剛?cè)胧秩A為的新款手機(jī),電池續(xù)航讓我大吃一驚,真是不錯!攝像頭表現(xiàn)一般,但屏幕顏色非常出色。手感很好,流暢度也很高。外觀方面,我覺得挺時(shí)尚的??偟膩碚f,我非常滿意這臺手機(jī),性價(jià)比非常高,用起來也很可靠。快遞也很快,我一定會推薦給朋友。
月光仙子: 這款華為手機(jī)手感超好,操作非常流暢,客服也很給力。產(chǎn)品質(zhì)量優(yōu)秀,物流速度也快,外觀非常吸引我,非常滿意。
獨(dú)孤求敗: 攝像頭是這款華為手機(jī)的一大亮點(diǎn),但電池續(xù)航有點(diǎn)短。外觀設(shè)計(jì)一般,品牌信譽(yù)也還行。產(chǎn)品質(zhì)量不錯,但可靠性一般,性價(jià)比也就一般。
劍圣: 用了一段時(shí)間這款華為,外觀很贊,操作也流暢。品牌也是我信賴的。不過屏幕有點(diǎn)讓人失望,功能還算齊全??傮w來說,性價(jià)比還是不錯的。
小白龍: 個(gè)人不太喜歡這款華為手機(jī)的外觀,但性價(jià)比很高,操作流暢度也不錯。攝像頭性能強(qiáng)大,但屏幕顯示效果一般。個(gè)性化需求滿足度一般,不確定是否推薦給朋友。
雷霆之怒: 這款華為手機(jī)是個(gè)好東西,電池續(xù)航很長,攝像頭表現(xiàn)也相當(dāng)專業(yè)。用戶體驗(yàn)上,我覺得是非常好的,流暢度高,一定會推薦給別人。
夜行者: 這款華為手機(jī)的屏幕是亮點(diǎn),但電池上稍微不如意。物流速度一般,外觀也挺好看的,總體滿意度一般。
魔法少女: 我覺得這款華為手機(jī)在功能完整性上做得非常好,而且手感很不錯??头B(tài)度也好,就是物流速度一般。品牌信譽(yù)很高。
暗夜精靈: 實(shí)際使用下來,這款華為手機(jī)流暢度很好,而且非??煽俊?爝f速度也非??欤放埔彩侵档眯刨嚨?。
星河戰(zhàn)士: 這款華為手機(jī)性價(jià)比高,電池和屏幕都不錯。滿足了我所有的個(gè)性化需求,外觀設(shè)計(jì)也很有特點(diǎn),我一定會推薦給其他人。

最直接的想法就是從這些評論中把關(guān)于商品的部分抽取出來,看看大家對我們的產(chǎn)品認(rèn)可程度如何。

抽取產(chǎn)品信息

既然目標(biāo)是了解用戶對產(chǎn)品的看法,就先從產(chǎn)品下手。關(guān)于信息抽取, LangChain集成了OpenAI的extraction 功能,并且將其封裝成了一個(gè)Chain如下。

langchain.chains.openai_functions.extraction.create_extraction_chain(schema: dict, llm: BaseLanguageModel, prompt: Optional[BasePromptTemplate] = None, verbose: bool = False) → Chain
Parameters
?schema – The schema of the entities to extract.
?llm – The language model to use.
?prompt – The prompt to use for extraction.
?verbose – Whether to run in verbose mode. In verbose mode, some intermediate logs will be printed to the console. Defaults to langchain.verbose value.
Returns
Chain that can be used to extract information from a passage.

這里對這個(gè)類稍微做一下解釋。

通過create_extraction_chain創(chuàng)建一個(gè)chain,用來信息的抽取,輸入的參數(shù)如下:

  • Schema這是一個(gè)字典,描述了需要從文本中提取哪些實(shí)體。
  • Llm語言模型實(shí)例。
  • Prompt提示模板,用于生成模型輸入。
  • Verbose是否在控制臺打印中間日志。

返回值是一個(gè) Chain 對象,該對象可以用于從文本中提取信息。

在參數(shù)中schema很重要,我們需要定義抽取信息的屬性值。

程序設(shè)計(jì)

有了基本思路,查找了功能實(shí)現(xiàn)以后,我們可以根據(jù)這個(gè)功能設(shè)計(jì)一下應(yīng)用程序。如下圖所示,用戶請求的時(shí)候會將用戶評論的信息給到應(yīng)用程序。應(yīng)用程序利用LangChain中extraction chain 調(diào)用大模型抽取用戶評論中關(guān)于商品信息的描述,在抽取過程中它會依賴schema文件,這個(gè)文件會定義哪些商品屬性需要進(jìn)行抽取。

由于LangChain中extraction chain的功能支持openai的模型,因此我們選擇GPT-3.5的版本。接著就是如何定義Schema的問題了。 schema中定義的是商品屬性信息,如果運(yùn)營小妹來提這個(gè)需求一定是越多越好,不過通過對用戶評論的分析,和運(yùn)營小妹一頓周旋之后,我們把schema的屬性定義如下:

schema = {
"properties": {
"用戶名": {"type": "string"},
"電池": {"type": "string"},
"攝像頭": {"type": "string"},
"屏幕": {"type": "string"},
"手感": {"type": "string"},
"流暢度": {"type": "string"},
"外觀": {"type": "string"},
"品牌": {"type": "string"}
 },
"required": ["用戶名"]
}

主要在電池,攝像頭,屏幕,手感,流暢度,外觀和品牌上。

商品信息抽?。捍a實(shí)現(xiàn)

有了業(yè)務(wù)需求加設(shè)計(jì)思路,就可以擼代碼了。為了方便給大家展示,這里的用戶評論信息,我們放到了inp變量中保存,一般而言應(yīng)該是從網(wǎng)絡(luò)爬取之后保存到本地文件或者是數(shù)據(jù)庫中。然后,再讀取使用,我們這里簡化了過程,將關(guān)注點(diǎn)放到如何使用大模型和LangChain上面。

from langchain.chat_models import ChatOpenAI
from langchain.llms.baidu_qianfan_endpoint import QianfanLLMEndpoint
from langchain.chains import create_extraction_chain

# Schema
schema = {
    "properties": {
        "用戶名": {"type": "string"},
        "電池": {"type": "string"},
        "攝像頭": {"type": "string"},
        "屏幕": {"type": "string"},
        "手感": {"type": "string"},
        "流暢度": {"type": "string"},
        "外觀": {"type": "string"},
        "品牌": {"type": "string"}
    },
    "required": ["用戶名"]
}

# Input
inp = """
風(fēng)之子: 我剛?cè)胧秩A為的新款手機(jī),電池續(xù)航讓我大吃一驚,真是不錯!攝像頭表現(xiàn)一般,但屏幕顏色非常出色。手感很好,流暢度也很高。外觀方面,我覺得挺時(shí)尚的。總的來說,我非常滿意這臺手機(jī),性價(jià)比非常高,用起來也很可靠??爝f也很快,我一定會推薦給朋友。
月光仙子: 這款華為手機(jī)手感超好,操作非常流暢,客服也很給力。產(chǎn)品質(zhì)量優(yōu)秀,物流速度也快,外觀非常吸引我,非常滿意。
獨(dú)孤求敗: 攝像頭是這款華為手機(jī)的一大亮點(diǎn),但電池續(xù)航有點(diǎn)短。外觀設(shè)計(jì)一般,品牌信譽(yù)也還行。產(chǎn)品質(zhì)量不錯,但可靠性一般,性價(jià)比也就一般。
劍圣: 用了一段時(shí)間這款華為,外觀很贊,操作也流暢。品牌也是我信賴的。不過屏幕有點(diǎn)讓人失望,功能還算齊全??傮w來說,性價(jià)比還是不錯的。
小白龍: 個(gè)人不太喜歡這款華為手機(jī)的外觀,但性價(jià)比很高,操作流暢度也不錯。攝像頭性能強(qiáng)大,但屏幕顯示效果一般。個(gè)性化需求滿足度一般,不確定是否推薦給朋友。
雷霆之怒: 這款華為手機(jī)是個(gè)好東西,電池續(xù)航很長,攝像頭表現(xiàn)也相當(dāng)專業(yè)。用戶體驗(yàn)上,我覺得是非常好的,流暢度高,一定會推薦給別人。
夜行者: 這款華為手機(jī)的屏幕是亮點(diǎn),但電池上稍微不如意。物流速度一般,外觀也挺好看的,總體滿意度一般。
魔法少女: 我覺得這款華為手機(jī)在功能完整性上做得非常好,而且手感很不錯??头B(tài)度也好,就是物流速度一般。品牌信譽(yù)很高。
暗夜精靈: 實(shí)際使用下來,這款華為手機(jī)流暢度很好,而且非??煽俊?爝f速度也非???,品牌也是值得信賴的。
星河戰(zhàn)士: 這款華為手機(jī)性價(jià)比高,電池和屏幕都不錯。滿足了我所有的個(gè)性化需求,外觀設(shè)計(jì)也很有特點(diǎn),我一定會推薦給其他人。
"""


# Initialize the ChatOpenAI model
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")

# Create the extraction chain
chain = create_extraction_chain(schema, llm)

# Run the chain
results = chain.run(inp)

# 'results' 變量將包含抽取的信息。

代碼不復(fù)雜,這里簡單解釋一下:

1. 定義提取模式(Schema): 使用一個(gè)名為 `schema` 的字典來定義我們希望從用戶評論中提取哪些信息。這里包括用戶名、電池、攝像頭等多個(gè)維度。

2. 初始化自然語言模型: 創(chuàng)建一個(gè)名為 `llm` 的 `ChatOpenAI` 對象,這是 GPT-3.5-turbo 模型的一個(gè)封裝。這個(gè)對象將負(fù)責(zé)后續(xù)的文本生成和理解。

3. 創(chuàng)建信息提取鏈: 使用 `create_extraction_chain` 函數(shù),結(jié)合之前定義的 `schema` 和初始化的模型 `llm`,生成一個(gè)信息提取鏈,存儲為 `chain` 變量。

4. 運(yùn)行信息提取: 最后,使用 `chain.run(inp)` 方法運(yùn)行這個(gè)信息提取鏈,它將分析輸入的用戶評論(存儲在 `inp` 變量中)并將結(jié)果保存在 `results` 變量中。

Results的輸出結(jié)果如下:

[{'用戶名': '風(fēng)之子', '電池': '續(xù)航', '攝像頭': '表現(xiàn)', '屏幕': '顏色', '手感': '好', '流暢度': '高', '外觀': '時(shí)尚', '品牌': '華為'}, 
{'用戶名': '月光仙子', '手感': '好', '流暢度': '流暢', '外觀': '吸引', '品牌': '華為'}, {'用戶名': '獨(dú)孤求敗', '攝像頭': '亮點(diǎn)', '電池': '續(xù)航', '外觀': '設(shè)計(jì)', '品牌': '華為'}, {'用戶名': '劍圣', '外觀': '贊', '操作': '流暢', '品牌': '華為'}, 
{'用戶名': '小白龍', '外觀': '不喜歡', '性價(jià)比': '高', '操作': '流暢', '攝像頭': '強(qiáng)大', '屏幕': '顯示效果', '個(gè)性化需求': '滿足'}, 
{'用戶名': '雷霆之怒', '電池': '續(xù)航', '攝像頭': '專業(yè)', '用戶體驗(yàn)': '好', '流暢度': '高'}, 
{'用戶名': '夜行者', '屏幕': '亮點(diǎn)', '電池': '不如意', '物流速度': '一般', '外觀': '好看'}, 
{'用戶名': '魔法少女', '功能完整性': '好', '手感': '不錯', '客服態(tài)度': '好', '物流速度': '一般', '品牌信譽(yù)': '高'}, 
{'用戶名': '暗夜精靈', '流暢度': '好', '可靠性': '可靠', '快遞速度': '快', '品牌': '值得信賴'}, 
{'用戶名': '星河戰(zhàn)士', '性價(jià)比': '高', '電池': '不錯', '屏幕': '不錯', '個(gè)性化需求': '滿足', '外觀設(shè)計(jì)': '特點(diǎn)'}]

看!簡單四步搞定數(shù)據(jù)分析,運(yùn)營小妹看了直拍手,不過仔細(xì)看看,用戶的情感似乎沒有在輸出中體現(xiàn)出來。

需求變更

能夠獲取商品的信息固然是不錯,但是如果能夠?qū)⒂脩舻那楦行畔⒁惨徊⒊槿〕鰜砭屯昝懒耍热贿\(yùn)營小妹有需求,程序員就有辦法。

實(shí)際上用戶的情感,是對產(chǎn)品和服務(wù)而言的,綜合“借鑒”了其他系統(tǒng)的用戶服務(wù)滿意表,得出如下維度是我們需要關(guān)注的:滿意度,商品質(zhì)量,性價(jià)比,用戶體驗(yàn),客戶服務(wù),推薦意愿,功能完整性,交付速度,可靠性,可行話需求滿足度。一般對這些服務(wù)都會進(jìn)行評分,什么 非常滿意,“滿意”,“一般”等等,分了很多級別。這種功能好像extraction chain 就不能實(shí)現(xiàn)了,不要緊程序員有辦法,通過對langchainapi的翻找,找到了tagging chain這個(gè)類。

langchain.chains.openai_functions.tagging.create_tagging_chain(schema: dict, llm: BaseLanguageModel, prompt: Optional[ChatPromptTemplate] = None, **kwargs: Any) → Chain[source]
Creates a chain that extracts information from a passage
based on a schema.
Parameters
?schema – The schema of the entities to extract.
?llm – The language model to use.
Returns
Chain (LLMChain) that can be used to extract information from a passage.

代碼還是老套路,我們依舊需要定義shcema,告訴大模型我們要抽取的數(shù)據(jù)類型。

程序再設(shè)計(jì)

有了需求思路,也能夠通過技術(shù)實(shí)現(xiàn),接著我們把設(shè)計(jì)稍微調(diào)整一下。如下圖所示,和extraction chain組件一樣,我們加入了tagging chain組件,他們之間是平行關(guān)系,都需要接受用戶傳入的用戶評論信息,同時(shí)利用schema定義的屬性,調(diào)用大模型完成信息的抽取。

情感信息抽?。捍a實(shí)現(xiàn)

程序設(shè)計(jì)比較簡,程序員小哥離勝利更進(jìn)一步了。快點(diǎn)開始擼代碼吧,今天下班還有約會!

from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.chains import create_tagging_chain, create_tagging_chain_pydantic

# 定義schema,用于描述我們想要標(biāo)記的屬性
schema = {
    "properties": {
        "滿意度": {
            "type": "string",
            "enum": ["非常滿意", "滿意", "一般", "不滿意", "非常不滿意"],
            "description": "描述對產(chǎn)品或服務(wù)的整體滿意度"
        },
        "產(chǎn)品質(zhì)量": {
            "type": "string",
            "enum": ["優(yōu)秀", "良好", "一般", "差勁"],
            "description": "描述產(chǎn)品的質(zhì)量"
        },
        "性價(jià)比": {
            "type": "string",
            "enum": ["非常高", "高", "一般", "低"],
            "description": "描述產(chǎn)品的性價(jià)比"
        },
        "用戶體驗(yàn)": {
            "type": "string",
            "enum": ["非常好", "好", "一般", "差"],
            "description": "描述用戶體驗(yàn)"
        },
        "客戶服務(wù)": {
            "type": "string",
            "enum": ["非常滿意", "滿意", "一般", "不滿意"],
            "description": "描述客戶服務(wù)"
        },
        "推薦意愿": {
            "type": "string",
            "enum": ["一定會", "可能會", "不確定", "不會"],
            "description": "描述推薦意愿"
        },
        "功能完整性": {
            "type": "string",
            "enum": ["非常好", "好", "一般", "差"],
            "description": "描述功能完整性"
        },
        "交付速度": {
            "type": "string",
            "enum": ["非???, "快", "一般", "慢"],
            "description": "描述交付速度"
        },
        "可靠性": {
            "type": "string",
            "enum": ["非常可靠", "可靠", "一般", "不可靠"],
            "description": "描述可靠性"
        },
        "個(gè)性化需求滿足度": {
            "type": "string",
            "enum": ["非常滿意", "滿意", "一般", "不滿意"],
            "description": "描述個(gè)性化需求滿足度"
        }
    },
    "required": ["滿意度", "產(chǎn)品質(zhì)量", "性價(jià)比"]  # 示例中一些必須要有的屬性
}

# 初始化LLM模型
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")

# 創(chuàng)建標(biāo)記鏈
chain = create_tagging_chain(schema, llm)

# 分割輸入文本以獲取單個(gè)用戶的評論
user_comments = inp.strip().split("\n")

# 創(chuàng)建一個(gè)空字典用于保存每個(gè)用戶的標(biāo)記結(jié)果
tagged_results = {}

# 遍歷每個(gè)用戶的評論
for comment in user_comments:
    user, user_comment = comment.split(": ", 1)
    # 執(zhí)行標(biāo)記操作
    result = chain.run(user_comment)
    # 將標(biāo)記結(jié)果保存到字典中
    tagged_results[user] = result

# 遍歷tagged_results字典
for user, feedback in tagged_results.items():
    # 格式化反饋內(nèi)容為一個(gè)字符串
    feedback_str = ", ".join(f"{key}: {value}" for key, value in feedback.items())
    # 打印用戶名和反饋
    print(f"用戶名:{user},反饋:{feedback_str}")

代碼依舊是熟悉的配方,顯然小哥已經(jīng)輕車熟路了。

1.導(dǎo)入依賴庫導(dǎo)入了 `ChatOpenAI`、`ChatPromptTemplate`、`create_tagging_chain` 和 `create_tagging_chain_pydantic` 等所需庫和函數(shù)。

2.定義標(biāo)記模式(Schema)使用 `schema` 變量定義了需要從用戶評論中標(biāo)記的信息,這里包括了滿意度、產(chǎn)品質(zhì)量、性價(jià)比等多個(gè)維度。

3.初始化自然語言模型創(chuàng)建了一個(gè)名為 `llm` 的 `ChatOpenAI` 對象,用于后續(xù)的文本生成和理解任務(wù)。

4.創(chuàng)建標(biāo)記鏈使用 `create_tagging_chain` 函數(shù)和之前定義的 `schema` 及初始化的 `llm` 對象,生成了一個(gè)信息標(biāo)記鏈,存儲為 `chain` 變量。

5.獲取用戶評論從 `inp` 變量中提取單個(gè)用戶的評論,并存儲在 `user_comments` 列表中。

6.初始化結(jié)果存儲創(chuàng)建了一個(gè)名為 `tagged_results` 的空字典,用于保存每個(gè)用戶的標(biāo)記結(jié)果。

7.循環(huán)標(biāo)記用戶評論遍歷每個(gè)用戶的評論,使用 `chain.run()` 方法運(yùn)行標(biāo)記鏈,然后將標(biāo)記結(jié)果保存到 `tagged_results` 字典中。

8.輸出標(biāo)記結(jié)果最后,遍歷 `tagged_results` 字典,將每個(gè)用戶的標(biāo)記結(jié)果格式化為字符串并輸出。

輸出內(nèi)容如下

用戶名:風(fēng)之子,反饋:滿意度: 非常滿意, 性價(jià)比: 非常高, 可靠性: 很可靠, 交付速度: 很快, 推薦意愿: 一定會
用戶名:月光仙子,反饋:滿意度: 非常滿意, 產(chǎn)品質(zhì)量: 優(yōu)秀, 客戶服務(wù): 滿意, 交付速度: 快
用戶名:獨(dú)孤求敗,反饋:產(chǎn)品質(zhì)量: 一般, 可靠性: 一般, 性價(jià)比: 一般
用戶名:劍圣,反饋:滿意度: 一般, 產(chǎn)品質(zhì)量: 一般, 性價(jià)比: 不錯, 功能完整性: 好
用戶名:小白龍,反饋:性價(jià)比: 高, 個(gè)性化需求滿足度: 一般, 推薦意愿: 不確定
用戶名:雷霆之怒,反饋:用戶體驗(yàn): 非常好, 推薦意愿: 一定會
用戶名:夜行者,反饋:滿意度: 一般, 產(chǎn)品質(zhì)量: 一般, 性價(jià)比: 一般
用戶名:魔法少女,反饋:功能完整性: 非常好, 客戶服務(wù): 好, 交付速度: 一般, 可靠性: 一般
用戶名:暗夜精靈,反饋:可靠性: 非??煽? 交付速度: 非???用戶名:星河戰(zhàn)士,反饋:性價(jià)比: 高, 個(gè)性化需求滿足度: 非常滿意, 推薦意愿: 一定會

從內(nèi)容上雖然可以看到每個(gè)用戶對產(chǎn)品和服務(wù)的態(tài)度,但是運(yùn)營小妹提出了要求,需要進(jìn)行一些統(tǒng)計(jì)幫助運(yùn)營進(jìn)行用戶的區(qū)分。例如:非常滿意的用戶占比是多少,感覺產(chǎn)品質(zhì)量優(yōu)秀的用戶占比等等。

這難不倒小哥,繼續(xù)加代碼:

# 初始化計(jì)數(shù)器
count_very_satisfied = 0
count_excellent_quality = 0

# 計(jì)算總用戶數(shù)
total_users = len(tagged_results)

# 遍歷tagged_results字典
for user, feedback in tagged_results.items():
    # 檢查滿意度是否為“非常滿意”
    if feedback.get("滿意度") == "非常滿意":
        count_very_satisfied += 1
    # 檢查產(chǎn)品質(zhì)量是否為“優(yōu)秀”
    if feedback.get("產(chǎn)品質(zhì)量") == "優(yōu)秀":
        count_excellent_quality += 1

# 計(jì)算百分比
percent_very_satisfied = (count_very_satisfied / total_users) * 100
percent_excellent_quality = (count_excellent_quality / total_users) * 100

# 打印百分比
print(f"非常滿意的用戶百分比: {percent_very_satisfied}%")
print(f"產(chǎn)品質(zhì)量優(yōu)秀的用戶百分比: {percent_excellent_quality}%")

輸出如下:

非常滿意的用戶百分比: 20.0%
產(chǎn)品質(zhì)量優(yōu)秀的用戶百分比: 10.0%

看看需求輕松搞定,看來可以按時(shí)下班了。

生成評論數(shù)據(jù)的雷達(dá)圖

運(yùn)營小妹見程序員小哥這么快完成了功能,覺得沒有難度于是提出,是否能夠?qū)⒂脩舻姆答仈?shù)據(jù)通過雷達(dá)圖的方式展示。程序員小哥,突然“由喜轉(zhuǎn)悲”心中一萬個(gè)草泥馬在奔騰,不過精心一想,雷達(dá)圖不同的頂點(diǎn)代表不同的情感維度,每個(gè)用戶的反饋按照等級給一個(gè)分?jǐn)?shù),然后將分?jǐn)?shù)平均以后得到的值就可以代表某個(gè)維度的最終顯示值了。這么一想瞬間通透了,代碼呼之欲出:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties

# 轉(zhuǎn)換為 DataFrame
df = pd.DataFrame.from_dict(tagged_results, orient='index')

# 定義枚舉到數(shù)值的映射
mapping = {
    "非常滿意": 5, "滿意": 4, "一般": 3, "不滿意": 2, "非常不滿意": 1,
    "優(yōu)秀": 4, "良好": 3, "一般": 2, "差勁": 1,
    "非常高": 4, "高": 3, "一般": 2, "低": 1,
    "非常好": 4, "好": 3, "一般": 2, "差": 1,
    "非常滿意": 4, "滿意": 3, "一般": 2, "不滿意": 1,
    "一定會": 4, "可能會": 3, "不確定": 2, "不會": 1,
    "非常快": 4, "快": 3, "一般": 2, "慢": 1,
    "非??煽?: 4, "可靠": 3, "一般": 2, "不可靠": 1
}

# 將標(biāo)簽轉(zhuǎn)換為數(shù)值
for column in df.columns:
    df[column] = df[column].map(mapping)

# 計(jì)算每個(gè)屬性(列)的平均得分
averages = df.mean()

# 準(zhǔn)備繪制雷達(dá)圖
attributes = list(df.columns)
num_vars = len(attributes)

# 計(jì)算角度
angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist()
angles += angles[:1]  # 使雷達(dá)圖封閉

# 平均得分
averages = averages.tolist() + averages.tolist()[:1]

# 設(shè)置字體
font = FontProperties(fname='SimHei.ttf')

# 繪制雷達(dá)圖
plt.figure(figsize=(8, 8))
ax = plt.subplot(polar=True)

# 畫線
ax.fill(angles, averages, color='blue', alpha=0.25)
ax.set_xticks(angles[:-1])
ax.set_xticklabels(attributes, fontproperties=font)

# 添加標(biāo)題
plt.title('標(biāo)記結(jié)果的雷達(dá)圖', size=20, color='blue', y=1.1, fontproperties=font)

plt.show()

雖然代碼簡單,但是小哥擔(dān)心大家不懂,還是“畫蛇添足”地給出了解釋。

1.導(dǎo)入依賴庫導(dǎo)入了 Pandas、Matplotlib 和 NumPy 等庫,以及一些字體設(shè)置的工具。

2.從字典到 DataFrame使用 `pd.DataFrame.from_dict()` 將 `tagged_results` 字典轉(zhuǎn)化為 Pandas DataFrame,這樣更便于后續(xù)的數(shù)據(jù)處理。

3.定義標(biāo)簽到數(shù)值的映射創(chuàng)建了一個(gè)名為 `mapping` 的字典,用于將用戶反饋的標(biāo)簽(如 "非常滿意"、"滿意" 等)映射到數(shù)值。

4.標(biāo)簽轉(zhuǎn)換為數(shù)值遍歷 DataFrame 的每一列,使用 `map()` 函數(shù)將所有的標(biāo)簽轉(zhuǎn)換為對應(yīng)的數(shù)值。

5.計(jì)算平均得分對 DataFrame 的每一列(即每一個(gè)屬性)計(jì)算平均得分,并保存在 `averages` 變量中。

6.雷達(dá)圖準(zhǔn)備設(shè)置雷達(dá)圖的各個(gè)頂點(diǎn)標(biāo)簽(即 `attributes`),并計(jì)算每個(gè)頂點(diǎn)對應(yīng)的角度。

7.角度和平均得分計(jì)算每個(gè)屬性對應(yīng)的角度,并確保雷達(dá)圖是一個(gè)封閉的形狀。同時(shí),對 `averages` 列表進(jìn)行操作以確保雷達(dá)圖的封閉。

8.設(shè)置字體使用 `FontProperties` 來設(shè)置字體,確保中文能夠正確顯示。

9.繪制雷達(dá)圖使用 Matplotlib 的 `subplot` 和其他函數(shù)來繪制雷達(dá)圖。設(shè)置了圖的大小、顏色、透明度等。

10.設(shè)置標(biāo)題和標(biāo)簽最后,添加了標(biāo)題并設(shè)置了各個(gè)軸的標(biāo)簽。

雷達(dá)圖展示結(jié)果:

總結(jié)

運(yùn)用大型語言模型和LangChain庫,我們不僅可以高效地從用戶評論中抽取產(chǎn)品相關(guān)信息,還可以獲取到用戶的情感反饋。這一整套方案大大簡化了傳統(tǒng)的數(shù)據(jù)分析過程,減少了人工標(biāo)簽和復(fù)雜規(guī)則維護(hù)的需要。通過進(jìn)一步的數(shù)據(jù)可視化,運(yùn)營團(tuán)隊(duì)可以更容易地理解用戶需求和感受,從而更精準(zhǔn)地調(diào)整產(chǎn)品特性和營銷策略。這不僅提高了數(shù)據(jù)分析的準(zhǔn)確性,也極大地提升了工作效率。

作者介紹

崔皓,51CTO社區(qū)編輯,資深架構(gòu)師,擁有18年的軟件開發(fā)和架構(gòu)經(jīng)驗(yàn),10年分布式架構(gòu)經(jīng)驗(yàn)。



責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2021-10-09 07:55:49

設(shè)計(jì)師業(yè)務(wù)用戶需求

2021-05-13 23:54:12

DockerDockerfile鏡像

2023-11-17 23:02:38

模型學(xué)習(xí)

2025-03-26 10:57:40

PyTorchGGUF

2024-05-22 07:57:34

2025-02-26 14:22:18

2024-02-01 08:34:30

大模型推理框架NVIDIA

2025-04-25 00:20:00

大模型tokenizer

2023-11-29 11:30:17

PDF語言模型

2016-01-26 11:08:54

2024-04-15 13:51:03

模型LLMLLMs

2023-03-16 08:00:00

機(jī)器學(xué)習(xí)深度學(xué)習(xí)人工智能

2014-07-16 17:35:03

Android表單模型

2024-12-02 09:37:09

大模型AI產(chǎn)品

2023-11-15 13:04:30

Python提取表格

2024-08-26 11:31:15

2024-12-23 00:27:40

2025-02-20 09:27:46

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號