文字模型训练分析评论(算法实战)

文字模型训练,尤其是在自然语言处理(NLP)领域,是构建能够理解、解释、生成人类语言系统的核心步骤。这类模型广泛应用于文本分类、情感分析、机器翻译、聊天机器人、摘要生成等多个方面。针对文字模型训练后的分析评论,可以从以下几个方面进行:

1. 性能评估

  • 准确率/错误率:评估模型在测试集上的准确率或错误率是最直接的方式,这能反映模型的基本性能。
  • 混淆矩阵:对于分类任务,混淆矩阵可以详细展示模型在各个类别上的表现,包括真正例(TP)、假正例(FP)、真反例(TN)、假反例(FN)的数量。
  • F1分数:结合了精确率和召回率的指标,对于不平衡数据集尤其有用,能够更全面地评估模型性能。
  • ROC曲线与AUC值:用于二分类问题,ROC曲线下的面积(AUC)值越高,表示模型性能越好。

2. 模型泛化能力

  • 交叉验证:通过多次划分训练集和验证集来评估模型在不同数据子集上的表现,有助于了解模型的稳定性和泛化能力。
  • 过拟合与欠拟合:分析模型在训练集和验证集上的性能差异,判断是否存在过拟合(训练集表现优异但验证集表现差)或欠拟合(两者都差)问题。

3. 文本理解与生成质量

  • 语义连贯性:对于生成类任务(如文本摘要、机器翻译),评估生成文本的语义是否连贯,是否符合逻辑。
  • 多样性:检查生成文本是否具有丰富的多样性,避免单调重复。
  • 语境适应性:评估模型在不同语境下的表现,确保能够准确理解并适应不同的语言环境和文化背景。

4. 效率与资源消耗

  • 训练时间:记录并比较不同模型或配置下的训练时间,评估训练效率。
  • 资源消耗:包括计算资源(CPU、GPU等)和内存消耗,对于实际应用中的部署成本有重要影响。

5. 实际应用反馈

  • 用户满意度:收集真实用户的使用反馈,了解模型在实际应用中的表现,包括易用性、准确性等方面的评价。
  • 持续改进:基于用户反馈和实际应用中的问题,不断优化模型,提升性能。

*废话不说了,直接实战:

python 复制代码
import pandas as pd
#利用爬虫提取数据
cp_content = pd.read_table("./差评.txt", encoding='utf8')
yzpj_content = pd.read_table("./优质好评.txt", encoding='utf8')

import jieba#导入库

cp_segments = []
contents = cp_content.content.values.tolist()
for content in contents:
    results = jieba.lcut(content)
    if len(results) > 1:  # 当分词之后,这条评论如果只有1个内容,
        cp_segments.append(results)  # 将分词后的内容添加到列表segments中

cp_fc_results = pd.DataFrame({'content': cp_segments})
cp_fc_results.to_excel('cp_fc_results.xlsx', index=False)

# B:对优质评价分词
yzpj_segments = []
contents = yzpj_content.content.values.tolist()  # 将content列数据取出并转化为list格式。目的是分别 jieba.lcut分词
for content in contents:
    results = jieba.lcut(content)
    if len(results) > 1:
        yzpj_segments.append(results)  ##将分词后的内容添加到列表segments中

# 分词结果储存在新的数据框中
yzpj_fc_results = pd.DataFrame({'content': yzpj_segments})
yzpj_fc_results.to_excel('yzpj_fc_results.xlsx', index=False)

# 导入停用词库
stopwords = pd.read_csv(r"./红楼梦/StopwordsCN.txt", encoding='utf8', engine='python', index_col=False)


# 定义去除停用词函数

def drop_stopwords(contents, stopwords):
    segments_clean = []
    for content in contents:
        line_clean = []
        for word in content:
            if word in stopwords:
                continue
            line_clean.append(word)
        segments_clean.append(line_clean)
    return segments_clean


# 调用去除停用词函数
contents = cp_fc_results.content.values.tolist()  # DataFrame格式转为list格式
stopwords = stopwords.stopword.values.tolist()  # 停用词转为list格式
cp_fc_contents_clean_s = drop_stopwords(contents, stopwords)

contents = yzpj_fc_results.content.values.tolist()  # DataFrame格式转为list格式
yzpj_fc_contents_clean_s = drop_stopwords(contents, stopwords)

cp_train = pd.DataFrame({'segments_clean':cp_fc_contents_clean_s, 'label':1})
yzpj_train = pd.DataFrame({'segments_clean':yzpj_fc_contents_clean_s, 'label':0})
pj_train = pd.concat([cp_train,yzpj_train])
pj_train.to_excel('pj_train.xlsx',index=False)





from sklearn.model_selection import train_test_split
# 数据切分 :训练集特征、测试集特征、训练集标签、测试集标签
x_train,x_test,y_train,y_test = \
    train_test_split(pj_train['segments_clean'].values,
        pj_train['label'].values, random_state=0)

words = [] #将所有的词转换为词向量
for line_index in range(len(x_train)):
    words.append(''.join(x_train[line_index]))
print(words)

from sklearn.feature_extraction.text import CountVectorizer

vec = CountVectorizer(max_features=4000, lowercase=False, ngram_range=(1,1))
#lowercase参数的功能:把所有的词是是否需要转换为小写。False。
#max_features:表示只提取前4000个词作为词库。
vec.fit(words)

from sklearn.naive_bayes import MultinomialNB,ComplementNB
#导入朴素贝叶斯分类器
classifier = MultinomialNB(alpha =0.1)
classifier.fit(vec.transform(words),y_train)

train_pr = classifier.predict(vec.transform(words))

from sklearn import metrics

print(metrics.classification_report(y_train, train_pr))#测试集数据进行分析

test_words = []
for line_index in range(len(x_test)):
    test_words.append("".join(x_test[line_index]))

test_pr = classifier.predict(vec.transform(test_words))
print(metrics.classification_report(y_test, test_pr))


s = '这玩意真好,我很喜欢'#检验结果自动判断这句话到底是好评还是差评???
#2、构建成词向量转换的标准格式
str = ''
seg_list = jieba.lcut(s)
stopwards = pd.read_csv('./红楼梦/StopwordsCN.txt', encoding='utf8',engine='python', index_col=False)
for seg in seg_list:
    if seg not in stopwards.stopword:
        str += seg + ' '

# 3、进行词向量转换
str_text = ' '.join(str)
predicted_label = classifier.predict(vec.transform([str_text]))[0]
if predicted_label == 0:
    print("预测为优质评价")
else:
    print("预测为差评")
相关推荐
迎仔几秒前
02-AI常见名词通俗解释
人工智能
fie8889几秒前
基于MATLAB的转子动力学建模与仿真实现(含碰摩、不平衡激励)
开发语言·算法·matlab
程序员ken3 分钟前
深入理解大语言模型(8) 使用 LangChain 开发应用程序之上下文记忆
人工智能·python·语言模型·langchain
Tadas-Gao5 分钟前
深度学习与机器学习的知识路径:从必要基石到独立范式
人工智能·深度学习·机器学习·架构·大模型·llm
TTGGGFF6 分钟前
从“千问送奶茶”看AI Agent落地:火爆、崩塌与进化方向
人工智能
唐梓航-求职中7 分钟前
编程大师-技术-算法-leetcode-1472. 设计浏览器历史记录
算法·leetcode
_OP_CHEN10 分钟前
【算法基础篇】(五十八)线性代数之高斯消元法从原理到实战:手撕模板 + 洛谷真题全解
线性代数·算法·蓝桥杯·c/c++·线性方程组·acm/icpc·高斯消元法
OPEN-Source12 分钟前
大模型实战:把自定义 Agent 封装成一个 HTTP 服务
人工智能·agent·deepseek
不懒不懒14 分钟前
【从零开始:PyTorch实现MNIST手写数字识别全流程解析】
人工智能·pytorch·python
zhangshuang-peta14 分钟前
从REST到MCP:为何及如何为AI代理升级API
人工智能·ai agent·mcp·peta