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

文字模型训练,尤其是在自然语言处理(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("预测为差评")
相关推荐
weixin_395448912 小时前
main.c_cursor_0129
前端·网络·算法
cd_949217212 小时前
九昆仑低碳科技:所罗门群岛全国森林碳汇项目开发合作白皮书
大数据·人工智能·科技
工程师老罗2 小时前
目标检测数据标注的工具与使用方法
人工智能·目标检测·计算机视觉
yuankoudaodaokou2 小时前
高校科研新利器:思看科技三维扫描仪助力精密研究
人工智能·python·科技
Acrelhuang2 小时前
工商业用电成本高?安科瑞液冷储能一体机一站式解供能难题-安科瑞黄安南
大数据·开发语言·人工智能·物联网·安全
小王毕业啦2 小时前
2010-2024年 非常规高技能劳动力(+文献)
大数据·人工智能·数据挖掘·数据分析·数据统计·社科数据·经管数据
CS创新实验室2 小时前
《计算机网络》深入学:路由算法与路径选择
网络·计算机网络·算法
一条大祥脚2 小时前
ABC357 基环树dp|懒标记线段树
数据结构·算法·图论
tod1132 小时前
力扣高频 SQL 50 题阶段总结(四)
开发语言·数据库·sql·算法·leetcode
言無咎2 小时前
从规则引擎到任务规划:AI Agent 重构跨境财税复杂账务处理体系
大数据·人工智能·python·重构