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

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

1. 性能评估

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

2. 模型泛化能力

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

3. 文本理解与生成质量

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

4. 效率与资源消耗

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

5. 实际应用反馈

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

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

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("预测为差评")

你可能感兴趣的:(算法,人工智能,机器学习)